Clover Git
OpenCL 1.1 software implementation
|
00001 /* 00002 * Copyright (c) 2011, Denis Steckelmacher <steckdenis@yahoo.fr> 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * * Redistributions of source code must retain the above copyright 00008 * notice, this list of conditions and the following disclaimer. 00009 * * Redistributions in binary form must reproduce the above copyright 00010 * notice, this list of conditions and the following disclaimer in the 00011 * documentation and/or other materials provided with the distribution. 00012 * * Neither the name of the copyright holder nor the 00013 * names of its contributors may be used to endorse or promote products 00014 * derived from this software without specific prior written permission. 00015 * 00016 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00017 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00018 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00019 * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY 00020 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00021 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00022 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00023 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00024 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00025 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00026 */ 00027 00033 #include "CL/cl.h" 00034 00035 #include "core/sampler.h" 00036 #include "core/context.h" 00037 00038 // Sampler APIs 00039 cl_sampler 00040 clCreateSampler(cl_context context, 00041 cl_bool normalized_coords, 00042 cl_addressing_mode addressing_mode, 00043 cl_filter_mode filter_mode, 00044 cl_int * errcode_ret) 00045 { 00046 cl_int dummy_errcode; 00047 00048 if (!errcode_ret) 00049 errcode_ret = &dummy_errcode; 00050 00051 if (!context->isA(Coal::Object::T_Context)) 00052 { 00053 *errcode_ret = CL_INVALID_CONTEXT; 00054 return 0; 00055 } 00056 00057 *errcode_ret = CL_SUCCESS; 00058 00059 Coal::Sampler *sampler = new Coal::Sampler((Coal::Context *)context, 00060 normalized_coords, 00061 addressing_mode, 00062 filter_mode, 00063 errcode_ret); 00064 00065 if (*errcode_ret != CL_SUCCESS) 00066 { 00067 delete sampler; 00068 return 0; 00069 } 00070 00071 return (cl_sampler)sampler; 00072 } 00073 00074 cl_int 00075 clRetainSampler(cl_sampler sampler) 00076 { 00077 if (!sampler->isA(Coal::Object::T_Sampler)) 00078 return CL_INVALID_SAMPLER; 00079 00080 sampler->reference(); 00081 00082 return CL_SUCCESS; 00083 } 00084 00085 cl_int 00086 clReleaseSampler(cl_sampler sampler) 00087 { 00088 if (!sampler->isA(Coal::Object::T_Sampler)) 00089 return CL_INVALID_SAMPLER; 00090 00091 if (sampler->dereference()) 00092 delete sampler; 00093 00094 return CL_SUCCESS; 00095 } 00096 00097 cl_int 00098 clGetSamplerInfo(cl_sampler sampler, 00099 cl_sampler_info param_name, 00100 size_t param_value_size, 00101 void * param_value, 00102 size_t * param_value_size_ret) 00103 { 00104 if (!sampler->isA(Coal::Object::T_Sampler)) 00105 return CL_INVALID_SAMPLER; 00106 00107 return sampler->info(param_name, param_value_size, param_value, 00108 param_value_size_ret); 00109 }