1c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 2c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Copyright 2012 Francisco Jerez 3c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 4c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Permission is hereby granted, free of charge, to any person obtaining a 5c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// copy of this software and associated documentation files (the "Software"), 6c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// to deal in the Software without restriction, including without limitation 7c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// the rights to use, copy, modify, merge, publish, distribute, sublicense, 8c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// and/or sell copies of the Software, and to permit persons to whom the 9c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// Software is furnished to do so, subject to the following conditions: 10c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 11c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// The above copyright notice and this permission notice shall be included in 12c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// all copies or substantial portions of the Software. 13c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 14c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// SOFTWARE. 21c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez// 22c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 23c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "api/util.hpp" 24c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez#include "core/sampler.hpp" 25c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 26c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerezusing namespace clover; 27c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 28c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_sampler 29c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclCreateSampler(cl_context ctx, cl_bool norm_mode, 30c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_addressing_mode addr_mode, cl_filter_mode filter_mode, 31c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez cl_int *errcode_ret) try { 32c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!ctx) 33c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_CONTEXT); 34c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 35c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ret_error(errcode_ret, CL_SUCCESS); 36c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return new sampler(*ctx, norm_mode, addr_mode, filter_mode); 37c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 38c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} catch (error &e) { 39c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez ret_error(errcode_ret, e); 40c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return NULL; 41c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 42c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 43c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 44c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclRetainSampler(cl_sampler s) { 45c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!s) 46c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_SAMPLER); 47c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 48c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez s->retain(); 49c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 50c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 51c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 52c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 53c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclReleaseSampler(cl_sampler s) { 54c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!s) 55c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_SAMPLER); 56c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 57c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (s->release()) 58c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez delete s; 59c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 60c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_SUCCESS; 61c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 62c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 63c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezPUBLIC cl_int 64c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco JerezclGetSamplerInfo(cl_sampler s, cl_sampler_info param, 65c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez size_t size, void *buf, size_t *size_ret) { 66c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez if (!s) 67c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez throw error(CL_INVALID_SAMPLER); 68c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 69c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez switch (param) { 70c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_SAMPLER_REFERENCE_COUNT: 71c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_uint>(buf, size, size_ret, s->ref_count()); 72c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 73c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_SAMPLER_CONTEXT: 74c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_context>(buf, size, size_ret, &s->ctx); 75c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 76c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_SAMPLER_NORMALIZED_COORDS: 77c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_bool>(buf, size, size_ret, s->norm_mode()); 78c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 79c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_SAMPLER_ADDRESSING_MODE: 80c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_addressing_mode>(buf, size, size_ret, 81c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez s->addr_mode()); 82c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 83c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez case CL_SAMPLER_FILTER_MODE: 84c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return scalar_property<cl_filter_mode>(buf, size, size_ret, 85c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez s->filter_mode()); 86c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez 87c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez default: 88c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez return CL_INVALID_VALUE; 89c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez } 90c6db1b3396384186aab5b685fe1fd540e17b3a62Francisco Jerez} 91