diff --git a/test_conformance/api/test_kernels.cpp b/test_conformance/api/test_kernels.cpp index 1b8ed1cf..063dfb97 100644 --- a/test_conformance/api/test_kernels.cpp +++ b/test_conformance/api/test_kernels.cpp @@ -89,6 +89,16 @@ const char *sample_two_kernel_program[] = { "\n" "}\n" }; +const char *sample_sampler_size_test_kernel = R"( + __kernel void sampler_size_test(sampler_t sampler, __read_only image2d_t src, __global float4 *dst) + { + int tid = get_global_id(0); + int2 coord = (int2)(get_global_id(0), get_global_id(1)); + float4 data = read_imagef(src, sampler, coord); + dst[tid] = data; + } +)"; + const char *sample_mem_obj_size_test_kernel = R"( __kernel void mem_obj_size_test(__global int *src, __global int *dst) { @@ -744,6 +754,48 @@ REGISTER_TEST(negative_set_immutable_memory_to_writeable_kernel_arg) return TEST_PASS; } +REGISTER_TEST(negative_invalid_arg_sampler) +{ + PASSIVE_REQUIRE_IMAGE_SUPPORT(device) + + cl_int error = CL_SUCCESS; + clProgramWrapper program; + clKernelWrapper sampler_arg_kernel; + + // Setup the test + error = + create_single_kernel_helper(context, &program, nullptr, 1, + &sample_sampler_size_test_kernel, nullptr); + test_error(error, "Unable to build test program"); + + sampler_arg_kernel = clCreateKernel(program, "sampler_size_test", &error); + test_error(error, + "Unable to get sampler_size_test kernel for built program"); + + clSamplerWrapper sampler = clCreateSampler( + context, CL_FALSE, CL_ADDRESS_NONE, CL_FILTER_NEAREST, &error); + test_error(error, "Unable to create sampler"); + + // Run the test - CL_INVALID_ARG_SIZE + error = + clSetKernelArg(sampler_arg_kernel, 0, sizeof(cl_sampler) * 2, &sampler); + test_failure_error_ret( + error, CL_INVALID_ARG_SIZE, + "clSetKernelArg is supposed to fail with CL_INVALID_ARG_SIZE when " + "argument is a sampler object and arg_size > sizeof(cl_sampler)", + TEST_FAIL); + + error = + clSetKernelArg(sampler_arg_kernel, 0, sizeof(cl_sampler) / 2, &sampler); + test_failure_error_ret( + error, CL_INVALID_ARG_SIZE, + "clSetKernelArg is supposed to fail with CL_INVALID_ARG_SIZE when " + "argument is a sampler object and arg_size < sizeof(cl_sampler)", + TEST_FAIL); + + return TEST_PASS; +} + REGISTER_TEST(negative_invalid_arg_size) { std::vector exp_types = { kChar, kUChar, kShort, kUShort,