summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPan Xiuli <xiuli.pan@intel.com>2016-02-29 11:02:30 +0800
committerYang Rong <rong.r.yang@intel.com>2016-11-08 20:38:22 +0800
commit9fb5991520ad2608a7058913eb0ec83451dbc466 (patch)
tree9d9019756a7c523047107c54d7c40c791c9a5476 /src
parentb777fa11c0845b68f4f07698f759ec4d5ad2ad2b (diff)
downloadbeignet-9fb5991520ad2608a7058913eb0ec83451dbc466.tar.gz
Runtime: Add clCreateSamplerWithProperties
Add api clCreateSamplerWithProperties Signed-off-by: Pan Xiuli <xiuli.pan@intel.com> Reviewed-by: Yang Rong <rong.r.yang@intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/cl_api.c63
-rw-r--r--src/cl_device_id.c2
-rw-r--r--src/cl_khr_icd.c12
3 files changed, 70 insertions, 7 deletions
diff --git a/src/cl_api.c b/src/cl_api.c
index 0a9140f1..e8d6ce23 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -1106,6 +1106,69 @@ error:
return sampler;
}
+cl_sampler
+clCreateSamplerWithProperties(cl_context context,
+ const cl_sampler_properties *sampler_properties,
+ cl_int * errcode_ret)
+{
+ cl_sampler sampler = NULL;
+ cl_int err = CL_SUCCESS;
+ CHECK_CONTEXT (context);
+ cl_bool normalized = 0xFFFFFFFF;
+ cl_addressing_mode addressing = 0xFFFFFFFF;
+ cl_filter_mode filter = 0xFFFFFFFF;
+ if(sampler_properties)
+ {
+ cl_ulong sam_type;
+ cl_ulong sam_val;
+ cl_uint i;
+ for(i = 0;(sam_type = sampler_properties[i++])!=0;i++)
+ {
+ sam_val = sampler_properties[i];
+ switch(sam_type)
+ {
+ case CL_SAMPLER_NORMALIZED_COORDS:
+ if(normalized != 0xFFFFFFFF)
+ err = CL_INVALID_VALUE;
+ else if(sam_val == CL_TRUE || sam_val == CL_FALSE)
+ normalized = sam_val;
+ else
+ err = CL_INVALID_VALUE;
+ break;
+ case CL_SAMPLER_ADDRESSING_MODE:
+ if(addressing != 0xFFFFFFFF)
+ err = CL_INVALID_VALUE;
+ else if(sam_val == CL_ADDRESS_MIRRORED_REPEAT || sam_val == CL_ADDRESS_REPEAT ||
+ sam_val == CL_ADDRESS_CLAMP_TO_EDGE || sam_val == CL_ADDRESS_CLAMP ||
+ sam_val == CL_ADDRESS_NONE)
+ addressing = sam_val;
+ else
+ err = CL_INVALID_VALUE;
+ break;
+ case CL_SAMPLER_FILTER_MODE:
+ if(filter != 0xFFFFFFFF)
+ err = CL_INVALID_VALUE;
+ else if(sam_val == CL_FILTER_LINEAR || sam_val == CL_FILTER_NEAREST)
+ filter = sam_val;
+ else
+ err = CL_INVALID_VALUE;
+ break;
+ default:
+ err = CL_INVALID_VALUE;
+ break;
+ }
+ }
+ }
+ if(normalized == 0xFFFFFFFF) normalized = CL_TRUE;
+ if(addressing == 0xFFFFFFFF) addressing = CL_ADDRESS_CLAMP;
+ if(filter == 0xFFFFFFFF) filter = CL_FILTER_NEAREST;
+ sampler = cl_sampler_new(context, normalized, addressing, filter, &err);
+error:
+ if (errcode_ret)
+ *errcode_ret = err;
+ return sampler;
+}
+
cl_int
clRetainSampler(cl_sampler sampler)
{
diff --git a/src/cl_device_id.c b/src/cl_device_id.c
index 57a74fbd..eb73e16f 100644
--- a/src/cl_device_id.c
+++ b/src/cl_device_id.c
@@ -820,7 +820,7 @@ cl_self_test(cl_device_id device, cl_self_test_res atomic_in_l3_flag)
return ret;
cl_driver_set_atomic_flag(ctx->drv, atomic_in_l3_flag);
if (status == CL_SUCCESS) {
- queue = clCreateCommandQueue(ctx, device, 0, &status);
+ queue = clCreateCommandQueueWithProperties(ctx, device, 0, &status);
if (status == CL_SUCCESS) {
program = clCreateProgramWithSource(ctx, 1, &kernel_source, NULL, &status);
if (status == CL_SUCCESS) {
diff --git a/src/cl_khr_icd.c b/src/cl_khr_icd.c
index 3f91ecee..1dc59557 100644
--- a/src/cl_khr_icd.c
+++ b/src/cl_khr_icd.c
@@ -177,12 +177,12 @@ struct _cl_icd_dispatch const cl_khr_icd_dispatch = {
(void *) NULL /* clGetPipeInfo */,
clSVMAlloc,
clSVMFree,
- (void *) clEnqueueSVMFree,
- (void *) clEnqueueSVMMemcpy,
- (void *) clEnqueueSVMMemFill,
- (void *) clEnqueueSVMMap,
- (void *) clEnqueueSVMUnmap,
- (void *) NULL /* clCreateSamplerWithProperties */,
+ clEnqueueSVMFree,
+ clEnqueueSVMMemcpy,
+ clEnqueueSVMMemFill,
+ clEnqueueSVMMap,
+ clEnqueueSVMUnmap,
+ clCreateSamplerWithProperties,
clSetKernelArgSVMPointer,
clSetKernelExecInfo,
clGetKernelSubGroupInfoKHR,