diff options
author | Pan Xiuli <xiuli.pan@intel.com> | 2016-02-29 11:02:30 +0800 |
---|---|---|
committer | Yang Rong <rong.r.yang@intel.com> | 2016-11-08 20:38:22 +0800 |
commit | 9fb5991520ad2608a7058913eb0ec83451dbc466 (patch) | |
tree | 9d9019756a7c523047107c54d7c40c791c9a5476 /src | |
parent | b777fa11c0845b68f4f07698f759ec4d5ad2ad2b (diff) | |
download | beignet-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.c | 63 | ||||
-rw-r--r-- | src/cl_device_id.c | 2 | ||||
-rw-r--r-- | src/cl_khr_icd.c | 12 |
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, |