diff options
Diffstat (limited to 'test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_copy.cpp')
-rw-r--r-- | test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_copy.cpp | 273 |
1 files changed, 244 insertions, 29 deletions
diff --git a/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_copy.cpp b/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_copy.cpp index 102ae761..0a30e76b 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_copy.cpp +++ b/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_copy.cpp @@ -14,6 +14,7 @@ // limitations under the License. // #include "basic_command_buffer.h" +#include "svm_command_basic.h" #include "harness/typeWrappers.h" #include "procs.h" @@ -38,7 +39,7 @@ struct CopyImageKHR : public BasicCommandBufferTest cl_int Run() override { cl_int error = clCommandFillImageKHR(command_buffer, nullptr, src_image, - fill_color, origin, region, 0, + fill_color_1, origin, region, 0, nullptr, nullptr, nullptr); test_error(error, "clCommandFillImageKHR failed"); @@ -56,13 +57,38 @@ struct CopyImageKHR : public BasicCommandBufferTest nullptr, nullptr); test_error(error, "clEnqueueCommandBufferKHR failed"); - std::vector<cl_char> output_data(data_size); - error = clEnqueueReadImage(queue, dst_image, CL_TRUE, origin, region, 0, - 0, output_data.data(), 0, nullptr, nullptr); + std::vector<cl_char> output_data_1(data_size); + error = + clEnqueueReadImage(queue, dst_image, CL_TRUE, origin, region, 0, 0, + output_data_1.data(), 0, nullptr, nullptr); for (size_t i = 0; i < data_size; i++) { - CHECK_VERIFICATION_ERROR(pattern, output_data[i], i); + CHECK_VERIFICATION_ERROR(pattern_1, output_data_1[i], i); + } + + /* Check second enqueue of command buffer */ + + error = clEnqueueFillImage(queue, src_image, fill_color_2, origin, + region, 0, nullptr, nullptr); + test_error(error, "clEnqueueFillImageKHR failed"); + + error = clEnqueueFillImage(queue, dst_image, fill_color_2, origin, + region, 0, nullptr, nullptr); + test_error(error, "clEnqueueFillImageKHR failed"); + + error = clEnqueueCommandBufferKHR(0, nullptr, command_buffer, 0, + nullptr, nullptr); + test_error(error, "clEnqueueCommandBufferKHR failed"); + + std::vector<cl_char> output_data_2(data_size); + error = + clEnqueueReadImage(queue, dst_image, CL_TRUE, origin, region, 0, 0, + output_data_2.data(), 0, nullptr, nullptr); + + for (size_t i = 0; i < data_size; i++) + { + CHECK_VERIFICATION_ERROR(pattern_1, output_data_2[i], i); } return CL_SUCCESS; @@ -97,8 +123,12 @@ struct CopyImageKHR : public BasicCommandBufferTest const size_t data_size = img_width * img_height * 4 * sizeof(cl_char); const size_t origin[3] = { 0, 0, 0 }, region[3] = { img_width, img_height, 1 }; - const cl_uint pattern = 0x05; - const cl_uint fill_color[4] = { pattern, pattern, pattern, pattern }; + const cl_uint pattern_1 = 0x05; + const cl_uint fill_color_1[4] = { pattern_1, pattern_1, pattern_1, + pattern_1 }; + const cl_uint pattern_2 = 0x1; + const cl_uint fill_color_2[4] = { pattern_2, pattern_2, pattern_2, + pattern_2 }; const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; clMemWrapper src_image; clMemWrapper dst_image; @@ -111,7 +141,7 @@ struct CopyBufferKHR : public BasicCommandBufferTest cl_int Run() override { cl_int error = clCommandFillBufferKHR( - command_buffer, nullptr, in_mem, &pattern, sizeof(cl_char), 0, + command_buffer, nullptr, in_mem, &pattern_1, sizeof(cl_char), 0, data_size(), 0, nullptr, nullptr, nullptr); test_error(error, "clCommandFillBufferKHR failed"); @@ -127,20 +157,113 @@ struct CopyBufferKHR : public BasicCommandBufferTest nullptr, nullptr); test_error(error, "clEnqueueCommandBufferKHR failed"); - std::vector<cl_char> output_data(data_size()); + std::vector<cl_char> output_data_1(data_size()); + error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size(), + output_data_1.data(), 0, nullptr, nullptr); + test_error(error, "clEnqueueReadBuffer failed"); + + for (size_t i = 0; i < data_size(); i++) + { + CHECK_VERIFICATION_ERROR(pattern_1, output_data_1[i], i); + } + + /* Check second enqueue of command buffer */ + + error = clEnqueueFillBuffer(queue, in_mem, &pattern_2, sizeof(cl_char), + 0, data_size(), 0, nullptr, nullptr); + test_error(error, "clEnqueueFillBufferKHR failed"); + + error = clEnqueueFillBuffer(queue, out_mem, &pattern_2, sizeof(cl_char), + 0, data_size(), 0, nullptr, nullptr); + test_error(error, "clEnqueueFillBufferKHR failed"); + + error = clEnqueueCommandBufferKHR(0, nullptr, command_buffer, 0, + nullptr, nullptr); + test_error(error, "clEnqueueCommandBufferKHR failed"); + + std::vector<cl_char> output_data_2(data_size()); error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size(), - output_data.data(), 0, nullptr, nullptr); + output_data_2.data(), 0, nullptr, nullptr); test_error(error, "clEnqueueReadBuffer failed"); for (size_t i = 0; i < data_size(); i++) { - CHECK_VERIFICATION_ERROR(pattern, output_data[i], i); + CHECK_VERIFICATION_ERROR(pattern_1, output_data_2[i], i); + } + + return CL_SUCCESS; + } + + const cl_char pattern_1 = 0x14; + const cl_char pattern_2 = 0x28; +}; + +struct CopySVMBufferKHR : public BasicSVMCommandBufferTest +{ + using BasicSVMCommandBufferTest::BasicSVMCommandBufferTest; + + cl_int Run() override + { + cl_int error = clCommandSVMMemFillKHR( + command_buffer, nullptr, svm_in_mem(), &pattern_1, sizeof(cl_char), + data_size(), 0, nullptr, nullptr, nullptr); + test_error(error, "clCommandSVMMemFillKHR failed"); + + error = clCommandSVMMemcpyKHR(command_buffer, nullptr, svm_out_mem(), + svm_in_mem(), data_size(), 0, nullptr, + nullptr, nullptr); + test_error(error, "clCommandSVMMemcpyKHR failed"); + + error = clFinalizeCommandBufferKHR(command_buffer); + test_error(error, "clFinalizeCommandBufferKHR failed"); + + error = clEnqueueCommandBufferKHR(0, nullptr, command_buffer, 0, + nullptr, nullptr); + test_error(error, "clEnqueueCommandBufferKHR failed"); + + std::vector<cl_char> output_data_1(data_size()); + error = + clEnqueueSVMMemcpy(queue, CL_TRUE, output_data_1.data(), + svm_out_mem(), data_size(), 0, nullptr, nullptr); + test_error(error, "clEnqueueSVMMemcpy failed"); + + for (size_t i = 0; i < data_size(); i++) + { + CHECK_VERIFICATION_ERROR(pattern_1, output_data_1[i], i); + } + + /* Check second enqueue of command buffer */ + error = clEnqueueSVMMemFill(queue, svm_in_mem(), &pattern_2, + sizeof(cl_char), data_size(), 0, nullptr, + nullptr); + test_error(error, "clEnqueueSVMMemFill failed"); + + error = clEnqueueSVMMemFill(queue, svm_out_mem(), &pattern_2, + sizeof(cl_char), data_size(), 0, nullptr, + nullptr); + test_error(error, "clEnqueueSVMMemFill failed"); + + error = clEnqueueCommandBufferKHR(0, nullptr, command_buffer, 0, + nullptr, nullptr); + test_error(error, "clEnqueueCommandBufferKHR failed"); + + std::vector<cl_char> output_data_2(data_size()); + + error = + clEnqueueSVMMemcpy(queue, CL_TRUE, output_data_2.data(), + svm_out_mem(), data_size(), 0, nullptr, nullptr); + test_error(error, "clEnqueueSVMMemcpy failed"); + + for (size_t i = 0; i < data_size(); i++) + { + CHECK_VERIFICATION_ERROR(pattern_1, output_data_2[i], i); } return CL_SUCCESS; } - const cl_char pattern = 0x14; + const cl_char pattern_1 = 0x14; + const cl_char pattern_2 = 0x28; }; struct CopyBufferToImageKHR : public BasicCommandBufferTest @@ -150,7 +273,7 @@ struct CopyBufferToImageKHR : public BasicCommandBufferTest cl_int Run() override { cl_int error = clCommandFillBufferKHR( - command_buffer, nullptr, buffer, &pattern, sizeof(cl_char), 0, + command_buffer, nullptr, buffer, &pattern_1, sizeof(cl_char), 0, data_size, 0, nullptr, nullptr, nullptr); test_error(error, "clCommandFillBufferKHR failed"); @@ -168,15 +291,40 @@ struct CopyBufferToImageKHR : public BasicCommandBufferTest nullptr, nullptr); test_error(error, "clEnqueueCommandBufferKHR failed"); - std::vector<cl_char> output_data(data_size); + std::vector<cl_char> output_data_1(data_size); + + error = clEnqueueReadImage(queue, image, CL_TRUE, origin, region, 0, 0, + output_data_1.data(), 0, nullptr, nullptr); + test_error(error, "clEnqueueReadImage failed"); + + for (size_t i = 0; i < data_size; i++) + { + CHECK_VERIFICATION_ERROR(pattern_1, output_data_1[i], i); + } + + /* Check second enqueue of command buffer */ + + error = clEnqueueFillBuffer(queue, buffer, &pattern_2, sizeof(cl_char), + 0, data_size, 0, nullptr, nullptr); + test_error(error, "clEnqueueFillBuffer failed"); + + error = clEnqueueFillImage(queue, image, &fill_color_2, origin, region, + 0, nullptr, nullptr); + test_error(error, "clEnqueueFillImage failed"); + + error = clEnqueueCommandBufferKHR(0, nullptr, command_buffer, 0, + nullptr, nullptr); + test_error(error, "clEnqueueCommandBufferKHR failed"); + + std::vector<cl_char> output_data_2(data_size); error = clEnqueueReadImage(queue, image, CL_TRUE, origin, region, 0, 0, - output_data.data(), 0, nullptr, nullptr); + output_data_2.data(), 0, nullptr, nullptr); test_error(error, "clEnqueueReadImage failed"); for (size_t i = 0; i < data_size; i++) { - CHECK_VERIFICATION_ERROR(pattern, output_data[i], i); + CHECK_VERIFICATION_ERROR(pattern_1, output_data_2[i], i); } return CL_SUCCESS; @@ -211,7 +359,14 @@ struct CopyBufferToImageKHR : public BasicCommandBufferTest const size_t data_size = img_width * img_height * 4 * sizeof(cl_char); const size_t origin[3] = { 0, 0, 0 }, region[3] = { img_width, img_height, 1 }; - const cl_char pattern = 0x11; + const cl_char pattern_1 = 0x11; + const cl_char pattern_2 = 0x22; + + const cl_uint fill_color_2[4] = { static_cast<cl_uint>(pattern_2), + static_cast<cl_uint>(pattern_2), + static_cast<cl_uint>(pattern_2), + static_cast<cl_uint>(pattern_2) }; + const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; clMemWrapper buffer; @@ -225,7 +380,7 @@ struct CopyImageToBufferKHR : public BasicCommandBufferTest cl_int Run() override { cl_int error = - clCommandFillImageKHR(command_buffer, nullptr, image, fill_color, + clCommandFillImageKHR(command_buffer, nullptr, image, fill_color_1, origin, region, 0, nullptr, nullptr, nullptr); test_error(error, "clCommandFillImageKHR failed"); @@ -243,16 +398,39 @@ struct CopyImageToBufferKHR : public BasicCommandBufferTest nullptr, nullptr); test_error(error, "clEnqueueCommandBufferKHR failed"); - std::vector<cl_char> output_data(data_size); + std::vector<cl_char> output_data_1(data_size); + + error = clEnqueueReadBuffer(queue, buffer, CL_TRUE, 0, data_size, + output_data_1.data(), 0, nullptr, nullptr); + test_error(error, "clEnqueueReadBuffer failed"); + + for (size_t i = 0; i < data_size; i++) + { + CHECK_VERIFICATION_ERROR(static_cast<cl_char>(pattern_1), + output_data_1[i], i); + } + + error = clEnqueueFillImage(queue, image, fill_color_2, origin, region, + 0, nullptr, nullptr); + test_error(error, "clEnqueueFillImage failed"); + + error = clEnqueueFillBuffer(queue, buffer, &pattern_2, sizeof(cl_char), + 0, data_size, 0, nullptr, nullptr); + + error = clEnqueueCommandBufferKHR(0, nullptr, command_buffer, 0, + nullptr, nullptr); + test_error(error, "clEnqueueCommandBufferKHR failed"); + + std::vector<cl_char> output_data_2(data_size); error = clEnqueueReadBuffer(queue, buffer, CL_TRUE, 0, data_size, - output_data.data(), 0, nullptr, nullptr); + output_data_2.data(), 0, nullptr, nullptr); test_error(error, "clEnqueueReadBuffer failed"); for (size_t i = 0; i < data_size; i++) { - CHECK_VERIFICATION_ERROR(static_cast<cl_char>(pattern), - output_data[i], i); + CHECK_VERIFICATION_ERROR(static_cast<cl_char>(pattern_1), + output_data_2[i], i); } return CL_SUCCESS; @@ -287,8 +465,12 @@ struct CopyImageToBufferKHR : public BasicCommandBufferTest const size_t data_size = img_width * img_height * 4 * sizeof(cl_char); const size_t origin[3] = { 0, 0, 0 }, region[3] = { img_width, img_height, 1 }; - const cl_uint pattern = 0x12; - const cl_uint fill_color[4] = { pattern, pattern, pattern, pattern }; + const cl_uint pattern_1 = 0x12; + const cl_uint fill_color_1[4] = { pattern_1, pattern_1, pattern_1, + pattern_1 }; + const cl_uint pattern_2 = 0x24; + const cl_uint fill_color_2[4] = { pattern_2, pattern_2, pattern_2, + pattern_2 }; const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; clMemWrapper image; @@ -302,7 +484,7 @@ struct CopyBufferRectKHR : public BasicCommandBufferTest cl_int Run() override { cl_int error = clCommandFillBufferKHR( - command_buffer, nullptr, in_mem, &pattern, sizeof(cl_char), 0, + command_buffer, nullptr, in_mem, &pattern_1, sizeof(cl_char), 0, data_size, 0, nullptr, nullptr, nullptr); test_error(error, "clCommandFillBufferKHR failed"); @@ -319,14 +501,38 @@ struct CopyBufferRectKHR : public BasicCommandBufferTest nullptr, nullptr); test_error(error, "clEnqueueCommandBufferKHR failed"); - std::vector<cl_char> output_data(data_size); + std::vector<cl_char> output_data_1(data_size); + error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size, + output_data_1.data(), 0, nullptr, nullptr); + test_error(error, "clEnqueueReadBuffer failed"); + + for (size_t i = 0; i < data_size; i++) + { + CHECK_VERIFICATION_ERROR(pattern_1, output_data_1[i], i); + } + + /* Check second enqueue of command buffer */ + + error = clEnqueueFillBuffer(queue, in_mem, &pattern_2, sizeof(cl_char), + 0, data_size, 0, nullptr, nullptr); + test_error(error, "clEnqueueFillBuffer failed"); + + error = clEnqueueFillBuffer(queue, out_mem, &pattern_2, sizeof(cl_char), + 0, data_size, 0, nullptr, nullptr); + test_error(error, "clEnqueueFillBuffer failed"); + + error = clEnqueueCommandBufferKHR(0, nullptr, command_buffer, 0, + nullptr, nullptr); + test_error(error, "clEnqueueCommandBufferKHR failed"); + + std::vector<cl_char> output_data_2(data_size); error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size, - output_data.data(), 0, nullptr, nullptr); + output_data_2.data(), 0, nullptr, nullptr); test_error(error, "clEnqueueReadBuffer failed"); for (size_t i = 0; i < data_size; i++) { - CHECK_VERIFICATION_ERROR(pattern, output_data[i], i); + CHECK_VERIFICATION_ERROR(pattern_1, output_data_2[i], i); } return CL_SUCCESS; @@ -353,7 +559,8 @@ struct CopyBufferRectKHR : public BasicCommandBufferTest const size_t data_size = img_width * img_height * sizeof(cl_char); const size_t origin[3] = { 0, 0, 0 }, region[3] = { img_width, img_height, 1 }; - const cl_char pattern = 0x13; + const cl_char pattern_1 = 0x13; + const cl_char pattern_2 = 0x26; clMemWrapper in_mem; clMemWrapper out_mem; @@ -372,6 +579,14 @@ int test_copy_buffer(cl_device_id device, cl_context context, return MakeAndRunTest<CopyBufferKHR>(device, context, queue, num_elements); } +int test_copy_svm_buffer(cl_device_id device, cl_context context, + cl_command_queue queue, int num_elements) +{ + return MakeAndRunTest<CopySVMBufferKHR>(device, context, queue, + num_elements); +} + + int test_copy_buffer_to_image(cl_device_id device, cl_context context, cl_command_queue queue, int num_elements) { |