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