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)