aboutsummaryrefslogtreecommitdiff
path: root/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_copy.cpp
diff options
context:
space:
mode:
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.cpp273
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)
{