diff --git a/tests/test_openclhpp.cpp b/tests/test_openclhpp.cpp index 7748e664..d113b9c6 100644 --- a/tests/test_openclhpp.cpp +++ b/tests/test_openclhpp.cpp @@ -408,6 +408,7 @@ void setUp(void) cl::pfn_clRetainCommandBufferKHR = ::clRetainCommandBufferKHR; cl::pfn_clReleaseCommandBufferKHR = ::clReleaseCommandBufferKHR; cl::pfn_clGetCommandBufferInfoKHR = ::clGetCommandBufferInfoKHR; + cl::pfn_clCommandNDRangeKernelKHR = ::clCommandNDRangeKernelKHR; #endif #if defined(cl_khr_semaphore) cl::pfn_clCreateSemaphoreWithPropertiesKHR = ::clCreateSemaphoreWithPropertiesKHR; @@ -485,6 +486,7 @@ void tearDown(void) cl::pfn_clRetainCommandBufferKHR = nullptr; cl::pfn_clReleaseCommandBufferKHR = nullptr; cl::pfn_clGetCommandBufferInfoKHR = nullptr; + cl::pfn_clCommandNDRangeKernelKHR = nullptr; #endif #if defined(cl_khr_semaphore) cl::pfn_clCreateSemaphoreWithPropertiesKHR = nullptr; @@ -3604,6 +3606,96 @@ void testCommandBufferInfoKHRCommandQueues(void) TEST_ASSERT_EQUAL_PTR(make_command_queue(2), command_queues[2]()); #endif } + +static cl_int clCommandNDRangeKernelKHR_testCommandNDRangeKernel(cl_command_buffer_khr command_buffer, + cl_command_queue command_queue, + const cl_ndrange_kernel_command_properties_khr* properties, + cl_kernel kernel, + cl_uint work_dim, + const size_t* global_work_offset, + const size_t* global_work_size, + const size_t* local_work_size, + cl_uint num_sync_points_in_wait_list, + const cl_sync_point_khr* sync_point_wait_list, + cl_sync_point_khr* sync_point, + cl_mutable_command_khr* mutable_handle, + cl_int cmock_to_return) +{ + TEST_ASSERT_EQUAL(0, properties[0]); + TEST_ASSERT_EQUAL(1, properties[1]); + TEST_ASSERT_EQUAL(2, properties[2]); + + TEST_ASSERT_EQUAL(3, sync_point_wait_list[0]); + TEST_ASSERT_EQUAL(2, sync_point_wait_list[1]); + TEST_ASSERT_EQUAL(1, sync_point_wait_list[2]); + + TEST_ASSERT_NOT_NULL(sync_point); + TEST_ASSERT_EQUAL_PTR(nullptr, mutable_handle); + + TEST_ASSERT_EQUAL_PTR(kernelPool[0](), kernel); + TEST_ASSERT_EQUAL(2, global_work_offset[0]); + TEST_ASSERT_EQUAL(5, global_work_size[0]); + + switch (cmock_to_return) + { + case 0: + { + TEST_ASSERT_EQUAL_PTR(nullptr, command_queue); + if (sync_point != nullptr) + { + *sync_point = 15; + } + return CL_SUCCESS; + } + case 1: + { + TEST_ASSERT_EQUAL_PTR(commandQueuePool[0](), command_queue); + return CL_INVALID_COMMAND_QUEUE; + } + } + return CL_SUCCESS; +} + +void testCommandNDRangeKernel(void) +{ +#if defined(cl_khr_command_buffer) + cl::vector properties{ 0,1,2 }; + cl::NDRange offset{ 2 }; + cl::NDRange global{ 5 }; + cl::NDRange local = cl::NullRange; + std::vector sync_points_vec{ 3,2,1 }; + cl_sync_point_khr sync_point{ 2 }; + cl::MutableCommandKhr* mutable_handle = nullptr; + cl::CommandQueue* command_queue = nullptr; + + clCommandNDRangeKernelKHR_StubWithCallback(clCommandNDRangeKernelKHR_testCommandNDRangeKernel); + cl_int ret = commandBufferKhrPool[0].commandNDRangeKernel( + properties, + kernelPool[0], + offset, + global, + local, + &sync_points_vec, + &sync_point, + mutable_handle, + command_queue); + TEST_ASSERT_EQUAL(ret, CL_SUCCESS); + TEST_ASSERT_EQUAL(15, sync_point); + + ret = commandBufferKhrPool[0].commandNDRangeKernel( + properties, + kernelPool[0], + offset, + global, + local, + &sync_points_vec, + &sync_point, + mutable_handle, + &commandQueuePool[0]); + TEST_ASSERT_EQUAL(ret, CL_INVALID_COMMAND_QUEUE); +#endif +} + // Tests for Device::GetInfo static cl_int clGetInfo_testDeviceGetInfoCLDeviceVendorId( cl_device_id device, cl_device_info param_name, size_t param_value_size,