From: Luo Xionghu <[email protected]> api ungrade for opencl-2.0. set sampler normalized_coords default value per spec. the CL_SAMPLER_NORMALIZED_COORDS should be CL_FALSE for these cases.
v2: icd entry update for opencl-2.0. Signed-off-by: Luo Xionghu <[email protected]> --- src/cl_api.c | 33 ++++++++++++++++++++++++++++++++ src/cl_khr_icd.c | 6 +++++- utests/compare_image_2d_and_1d_array.cpp | 7 ++++++- utests/compiler_copy_image.cpp | 8 +++++++- utests/compiler_copy_image1.cpp | 8 +++++++- utests/compiler_copy_image_1d.cpp | 8 +++++++- utests/compiler_copy_image_3d.cpp | 7 ++++++- utests/compiler_movforphi_undef.cpp | 7 ++++++- utests/image_1D_buffer.cpp | 7 ++++++- utests/utest_helper.hpp | 4 ++-- 10 files changed, 85 insertions(+), 10 deletions(-) diff --git a/src/cl_api.c b/src/cl_api.c index a6f5332..5e24c36 100644 --- a/src/cl_api.c +++ b/src/cl_api.c @@ -770,6 +770,39 @@ error: return sampler; } +cl_sampler +clCreateSamplerWithProperties(cl_context context, + const cl_sampler_properties * normalized_coords, + cl_int * errcode_ret) +{ + cl_sampler sampler = NULL; + cl_int err = CL_SUCCESS; + CHECK_CONTEXT (context); + cl_bool normalized = CL_TRUE; + cl_addressing_mode addressing = CL_ADDRESS_CLAMP; + cl_filter_mode filter = CL_FILTER_NEAREST; + + while(*normalized_coords) { + switch (*normalized_coords) { + case CL_SAMPLER_NORMALIZED_COORDS: + normalized = *(normalized_coords + 1); + break; + case CL_SAMPLER_ADDRESSING_MODE: + addressing = *(normalized_coords + 1); + break; + case CL_SAMPLER_FILTER_MODE: + filter = *(normalized_coords + 1); + break; + } + normalized_coords += 2; + } + 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_khr_icd.c b/src/cl_khr_icd.c index febb93e..7f9f88a 100644 --- a/src/cl_khr_icd.c +++ b/src/cl_khr_icd.c @@ -69,7 +69,11 @@ struct _cl_icd_dispatch const cl_khr_icd_dispatch = { clGetSupportedImageFormats, clGetMemObjectInfo, clGetImageInfo, +#ifdef CL_VERSION_2_0 + (void *) NULL, /* clCreateSampler deprecated */ +#else clCreateSampler, +#endif clRetainSampler, clReleaseSampler, clGetSamplerInfo, @@ -201,7 +205,7 @@ struct _cl_icd_dispatch const cl_khr_icd_dispatch = { CL_2_0_NOTYET(clEnqueueSVMMemFill), CL_2_0_NOTYET(clEnqueueSVMMap), CL_2_0_NOTYET(clEnqueueSVMUnmap), - CL_2_0_NOTYET(clCreateSamplerWithProperties), + clCreateSamplerWithProperties, CL_2_0_NOTYET(clSetKernelArgSVMPointer), CL_2_0_NOTYET(clSetKernelExecInfo), #else diff --git a/utests/compare_image_2d_and_1d_array.cpp b/utests/compare_image_2d_and_1d_array.cpp index dfa4273..b66aa5e 100644 --- a/utests/compare_image_2d_and_1d_array.cpp +++ b/utests/compare_image_2d_and_1d_array.cpp @@ -49,7 +49,12 @@ static void compare_image_2d_and_1d_array(void) desc.image_row_pitch = w * sizeof(uint32_t); OCL_CREATE_IMAGE(buf[1], CL_MEM_COPY_HOST_PTR, &format, &desc, image_data2); - OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_LINEAR); + cl_sampler_properties properties[] = { + CL_SAMPLER_NORMALIZED_COORDS, CL_FALSE, + CL_SAMPLER_ADDRESSING_MODE, CL_ADDRESS_REPEAT, + CL_SAMPLER_FILTER_MODE, CL_FILTER_LINEAR, + 0 }; + OCL_CREATE_SAMPLER_WITH_PROPERTIES(sampler, properties); // Setup kernel and images OCL_CREATE_KERNEL("compare_image_2d_and_1d_array"); diff --git a/utests/compiler_copy_image.cpp b/utests/compiler_copy_image.cpp index 150fd8a..2c58729 100644 --- a/utests/compiler_copy_image.cpp +++ b/utests/compiler_copy_image.cpp @@ -29,7 +29,13 @@ static void compiler_copy_image(void) desc.image_row_pitch = 0; OCL_CREATE_IMAGE(buf[1], 0, &format, &desc, NULL); - OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST); + + cl_sampler_properties properties[] = { + CL_SAMPLER_NORMALIZED_COORDS, false, + CL_SAMPLER_ADDRESSING_MODE, CL_ADDRESS_REPEAT, + CL_SAMPLER_FILTER_MODE, CL_FILTER_NEAREST, + 0 }; + OCL_CREATE_SAMPLER_WITH_PROPERTIES(sampler, properties); free(buf_data[0]); buf_data[0] = NULL; diff --git a/utests/compiler_copy_image1.cpp b/utests/compiler_copy_image1.cpp index 659dddc..0b92d81 100644 --- a/utests/compiler_copy_image1.cpp +++ b/utests/compiler_copy_image1.cpp @@ -26,7 +26,13 @@ static void compiler_copy_image1(void) desc.image_height = h; desc.image_row_pitch = w * sizeof(uint32_t); OCL_CREATE_IMAGE(buf[0], CL_MEM_COPY_HOST_PTR, &format, &desc, buf_data[0]); - OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST); + + cl_sampler_properties properties[] = { + CL_SAMPLER_NORMALIZED_COORDS, CL_FALSE, + CL_SAMPLER_ADDRESSING_MODE, CL_ADDRESS_REPEAT, + CL_SAMPLER_FILTER_MODE, CL_FILTER_NEAREST, + 0 }; + OCL_CREATE_SAMPLER_WITH_PROPERTIES(sampler, properties); desc.image_row_pitch = 0; OCL_CREATE_IMAGE(buf[1], 0, &format, &desc, NULL); diff --git a/utests/compiler_copy_image_1d.cpp b/utests/compiler_copy_image_1d.cpp index 5af6a77..2b81f87 100644 --- a/utests/compiler_copy_image_1d.cpp +++ b/utests/compiler_copy_image_1d.cpp @@ -26,7 +26,13 @@ static void compiler_copy_image_1d(void) desc.image_row_pitch = 0; OCL_CREATE_IMAGE(buf[1], 0, &format, &desc, NULL); - OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST); + + cl_sampler_properties properties[] = { + CL_SAMPLER_NORMALIZED_COORDS, CL_FALSE, + CL_SAMPLER_ADDRESSING_MODE, CL_ADDRESS_REPEAT, + CL_SAMPLER_FILTER_MODE, CL_FILTER_NEAREST, + 0 }; + OCL_CREATE_SAMPLER_WITH_PROPERTIES(sampler, properties); free(buf_data[0]); buf_data[0] = NULL; diff --git a/utests/compiler_copy_image_3d.cpp b/utests/compiler_copy_image_3d.cpp index de7cd45..81bc6c6 100644 --- a/utests/compiler_copy_image_3d.cpp +++ b/utests/compiler_copy_image_3d.cpp @@ -40,7 +40,12 @@ static void compiler_copy_image_3d(void) for(uint32_t i = 0; i < depth; i++) OCL_CREATE_IMAGE(buf[2 + i], 0, &format, &desc, NULL); - OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST); + cl_sampler_properties properties[] = { + CL_SAMPLER_NORMALIZED_COORDS, CL_FALSE, + CL_SAMPLER_ADDRESSING_MODE, CL_ADDRESS_REPEAT, + CL_SAMPLER_FILTER_MODE, CL_FILTER_NEAREST, + 0 }; + OCL_CREATE_SAMPLER_WITH_PROPERTIES(sampler, properties); free(buf_data[0]); buf_data[0] = NULL; diff --git a/utests/compiler_movforphi_undef.cpp b/utests/compiler_movforphi_undef.cpp index 8f1e66e..5f4b9fc 100644 --- a/utests/compiler_movforphi_undef.cpp +++ b/utests/compiler_movforphi_undef.cpp @@ -27,7 +27,12 @@ static void compiler_movforphi_undef(void) desc.image_row_pitch = 0; OCL_CREATE_IMAGE(buf[1], 0, &format, &desc, NULL); - OCL_CREATE_SAMPLER(sampler, CL_ADDRESS_REPEAT, CL_FILTER_NEAREST); + cl_sampler_properties properties[] = { + CL_SAMPLER_NORMALIZED_COORDS, CL_FALSE, + CL_SAMPLER_ADDRESSING_MODE, CL_ADDRESS_REPEAT, + CL_SAMPLER_FILTER_MODE, CL_FILTER_NEAREST, + 0 }; + OCL_CREATE_SAMPLER_WITH_PROPERTIES(sampler, properties); free(buf_data[0]); buf_data[0] = NULL; diff --git a/utests/image_1D_buffer.cpp b/utests/image_1D_buffer.cpp index d8d761f..1bcd2ef 100644 --- a/utests/image_1D_buffer.cpp +++ b/utests/image_1D_buffer.cpp @@ -49,7 +49,12 @@ void image_1D_buffer(void) OCL_ASSERT(error == CL_SUCCESS); // Create sampler to use - sampler = clCreateSampler(ctx, false, CL_ADDRESS_NONE, CL_FILTER_NEAREST, &error ); + cl_sampler_properties properties[] = { + CL_SAMPLER_NORMALIZED_COORDS, CL_FALSE, + CL_SAMPLER_ADDRESSING_MODE, CL_ADDRESS_NONE, + CL_SAMPLER_FILTER_MODE, CL_FILTER_NEAREST, + 0 }; + OCL_CREATE_SAMPLER_WITH_PROPERTIES(sampler, properties); OCL_ASSERT(error == CL_SUCCESS); cl_mem result_buf = buf[0] = clCreateBuffer(ctx, 0, buffer_sz, NULL, &error); diff --git a/utests/utest_helper.hpp b/utests/utest_helper.hpp index 6d09766..b7115e0 100644 --- a/utests/utest_helper.hpp +++ b/utests/utest_helper.hpp @@ -119,8 +119,8 @@ extern EGLSurface eglSurface; #define OCL_SWAP_EGL_BUFFERS() \ eglSwapBuffers(eglDisplay, eglSurface); -#define OCL_CREATE_SAMPLER(SAMPLER, ADDRESS_MODE, FILTER_MODE) \ - OCL_CALL2(clCreateSampler, SAMPLER, ctx, 0, ADDRESS_MODE, FILTER_MODE) +#define OCL_CREATE_SAMPLER_WITH_PROPERTIES(SAMPLER, PROPERTIES) \ + OCL_CALL2(clCreateSamplerWithProperties, SAMPLER, ctx, PROPERTIES) #define OCL_MAP_BUFFER(ID) \ OCL_CALL2(clMapBufferIntel, buf_data[ID], buf[ID]) -- 1.9.1 _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
