sampler.cpp revision c6db1b3396384186aab5b685fe1fd540e17b3a62
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 Francisco Jerez
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Permission is hereby granted, free of charge, to any person obtaining a
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// copy of this software and associated documentation files (the "Software"),
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// to deal in the Software without restriction, including without limitation
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the rights to use, copy, modify, merge, publish, distribute, sublicense,
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and/or sell copies of the Software, and to permit persons to whom the
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Software is furnished to do so, subject to the following conditions:
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The above copyright notice and this permission notice shall be included in
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// all copies or substantial portions of the Software.
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// SOFTWARE.
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "api/util.hpp"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "core/sampler.hpp"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using namespace clover;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PUBLIC cl_sampler
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)clCreateSampler(cl_context ctx, cl_bool norm_mode,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                cl_addressing_mode addr_mode, cl_filter_mode filter_mode,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                cl_int *errcode_ret) try {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   if (!ctx)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      throw error(CL_INVALID_CONTEXT);
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   ret_error(errcode_ret, CL_SUCCESS);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   return new sampler(*ctx, norm_mode, addr_mode, filter_mode);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} catch (error &e) {
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   ret_error(errcode_ret, e);
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)   return NULL;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochPUBLIC cl_int
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)clRetainSampler(cl_sampler s) {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   if (!s)
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      throw error(CL_INVALID_SAMPLER);
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   s->retain();
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   return CL_SUCCESS;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PUBLIC cl_int
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)clReleaseSampler(cl_sampler s) {
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   if (!s)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      throw error(CL_INVALID_SAMPLER);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   if (s->release())
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      delete s;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)   return CL_SUCCESS;
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)PUBLIC cl_int
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)clGetSamplerInfo(cl_sampler s, cl_sampler_info param,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 size_t size, void *buf, size_t *size_ret) {
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   if (!s)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      throw error(CL_INVALID_SAMPLER);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   switch (param) {
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   case CL_SAMPLER_REFERENCE_COUNT:
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return scalar_property<cl_uint>(buf, size, size_ret, s->ref_count());
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   case CL_SAMPLER_CONTEXT:
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return scalar_property<cl_context>(buf, size, size_ret, &s->ctx);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   case CL_SAMPLER_NORMALIZED_COORDS:
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return scalar_property<cl_bool>(buf, size, size_ret, s->norm_mode());
780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   case CL_SAMPLER_ADDRESSING_MODE:
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return scalar_property<cl_addressing_mode>(buf, size, size_ret,
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                 s->addr_mode());
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   case CL_SAMPLER_FILTER_MODE:
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return scalar_property<cl_filter_mode>(buf, size, size_ret,
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                             s->filter_mode());
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   default:
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return CL_INVALID_VALUE;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   }
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)