From fee6d6bb6643f7f5e2b6dab46486c903e2a71680 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Jastrz=C4=99bski?=
Date: Tue, 27 Jun 2023 17:47:24 +0200
Subject: [PATCH] Command buffer re-enqueue testing. (#1738)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Command buffer re-enqueue testing.
Signed-off-by: Paweł Jastrzębski
* Remove reenqueue tests and add reenqueue to existing tests.
Signed-off-by: Paweł Jastrzębski
* Add re-enqueue for copy and barrier tests.
Signed-off-by: Paweł Jastrzębski
* Fix review comments.
Applied review comments for command buffer re-enqueue testing:
- Add second clEnqueueCommandBufferKHR for all tests
- Reinitialise memory before second enqueue of command buffers
- Add different patterns for second enqueue of command buffers
Signed-off-by: Paweł Jastrzębski
* Fix verification patterns for second enqueue tests.
Signed-off-by: Paweł Jastrzębski
* Reinitialise output memory for second command buffer re-enqueue.
Signed-off-by: Paweł Jastrzębski
* Fix cast for conversion from 'const cl_char' to 'const cl_uint.
Signed-off-by: Paweł Jastrzębski
* Fix compilation error for MSVC.
Signed-off-by: Paweł Jastrzębski
* Reinitialise in_mem and out_mem with zero.
Signed-off-by: Paweł Jastrzębski
* Fix cast for conversion from 'const cl_int' to 'const cl_uint'.
Signed-off-by: Paweł Jastrzębski
---------
Signed-off-by: Paweł Jastrzębski
---
.../basic_command_buffer.cpp | 25 ++-
.../command_buffer_test_barrier.cpp | 36 +++-
.../command_buffer_test_copy.cpp | 196 +++++++++++++++---
.../command_buffer_test_fill.cpp | 68 ++++--
4 files changed, 277 insertions(+), 48 deletions(-)
diff --git a/test_conformance/extensions/cl_khr_command_buffer/basic_command_buffer.cpp b/test_conformance/extensions/cl_khr_command_buffer/basic_command_buffer.cpp
index 43734da0..6c02f9f7 100644
--- a/test_conformance/extensions/cl_khr_command_buffer/basic_command_buffer.cpp
+++ b/test_conformance/extensions/cl_khr_command_buffer/basic_command_buffer.cpp
@@ -201,14 +201,33 @@ struct BasicEnqueueTest : public BasicCommandBufferTest
nullptr, nullptr);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(num_elements);
+ std::vector output_data_1(num_elements);
error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size(),
- output_data.data(), 0, nullptr, nullptr);
+ output_data_1.data(), 0, nullptr, nullptr);
test_error(error, "clEnqueueReadBuffer failed");
for (size_t i = 0; i < num_elements; i++)
{
- CHECK_VERIFICATION_ERROR(pattern, output_data[i], i);
+ CHECK_VERIFICATION_ERROR(pattern, output_data_1[i], i);
+ }
+
+ const cl_int new_pattern = 12;
+ error = clEnqueueFillBuffer(queue, in_mem, &new_pattern, sizeof(cl_int),
+ 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 output_data_2(num_elements);
+ error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size(),
+ output_data_2.data(), 0, nullptr, nullptr);
+ test_error(error, "clEnqueueReadBuffer failed");
+
+ for (size_t i = 0; i < num_elements; i++)
+ {
+ CHECK_VERIFICATION_ERROR(new_pattern, output_data_2[i], i);
}
return CL_SUCCESS;
diff --git a/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_barrier.cpp b/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_barrier.cpp
index d73fc9ce..82ff16f0 100644
--- a/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_barrier.cpp
+++ b/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_barrier.cpp
@@ -70,15 +70,42 @@ struct BarrierWithWaitListKHR : public BasicCommandBufferTest
0, nullptr, out_of_order_command_buffer, 0, nullptr, &event);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(num_elements);
+ std::vector output_data_1(num_elements);
error = clEnqueueReadBuffer(out_of_order_queue, out_mem, CL_TRUE, 0,
- data_size(), output_data.data(), 1, &event,
- nullptr);
+ data_size(), output_data_1.data(), 1,
+ &event, nullptr);
test_error(error, "clEnqueueReadBuffer failed");
for (size_t i = 0; i < num_elements; i++)
{
- CHECK_VERIFICATION_ERROR(pattern, output_data[i], i);
+ CHECK_VERIFICATION_ERROR(pattern, output_data_1[i], i);
+ }
+
+ /* Check second enqueue of command buffer */
+
+ error =
+ clEnqueueFillBuffer(queue, in_mem, &zero_pattern, sizeof(cl_int), 0,
+ data_size(), 0, nullptr, nullptr);
+ test_error(error, "clEnqueueFillBufferKHR failed");
+
+ error =
+ clEnqueueFillBuffer(queue, out_mem, &zero_pattern, sizeof(cl_int),
+ 0, data_size(), 0, nullptr, nullptr);
+ test_error(error, "clEnqueueFillBufferKHR failed");
+
+ error = clEnqueueCommandBufferKHR(
+ 0, nullptr, out_of_order_command_buffer, 0, nullptr, &event);
+ test_error(error, "clEnqueueCommandBufferKHR failed");
+
+ std::vector output_data_2(num_elements);
+ error = clEnqueueReadBuffer(out_of_order_queue, out_mem, CL_TRUE, 0,
+ data_size(), output_data_2.data(), 1,
+ &event, nullptr);
+ test_error(error, "clEnqueueReadBuffer failed");
+
+ for (size_t i = 0; i < num_elements; i++)
+ {
+ CHECK_VERIFICATION_ERROR(pattern, output_data_2[i], i);
}
return CL_SUCCESS;
@@ -106,6 +133,7 @@ struct BarrierWithWaitListKHR : public BasicCommandBufferTest
}
const cl_int pattern = 0x16;
+ const cl_int zero_pattern = 0x0;
clCommandQueueWrapper out_of_order_queue;
clCommandBufferWrapper out_of_order_command_buffer;
clEventWrapper event;
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..7a1f0e6d 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
@@ -38,7 +38,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 +56,38 @@ struct CopyImageKHR : public BasicCommandBufferTest
nullptr, nullptr);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(data_size);
- error = clEnqueueReadImage(queue, dst_image, CL_TRUE, origin, region, 0,
- 0, output_data.data(), 0, nullptr, nullptr);
+ std::vector 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 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 +122,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 +140,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 +156,45 @@ struct CopyBufferKHR : public BasicCommandBufferTest
nullptr, nullptr);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(data_size());
+ std::vector output_data_1(data_size());
error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size(),
- output_data.data(), 0, nullptr, nullptr);
+ 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, output_data[i], 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 output_data_2(data_size());
+ error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size(),
+ 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_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 +204,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 +222,40 @@ struct CopyBufferToImageKHR : public BasicCommandBufferTest
nullptr, nullptr);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(data_size);
+ std::vector output_data_1(data_size);
error = clEnqueueReadImage(queue, image, CL_TRUE, origin, region, 0, 0,
- output_data.data(), 0, nullptr, nullptr);
+ 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, output_data[i], 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 output_data_2(data_size);
+
+ error = clEnqueueReadImage(queue, image, CL_TRUE, origin, region, 0, 0,
+ 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_1, output_data_2[i], i);
}
return CL_SUCCESS;
@@ -211,7 +290,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(pattern_2),
+ static_cast(pattern_2),
+ static_cast(pattern_2),
+ static_cast(pattern_2) };
+
const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 };
clMemWrapper buffer;
@@ -225,7 +311,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 +329,39 @@ struct CopyImageToBufferKHR : public BasicCommandBufferTest
nullptr, nullptr);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(data_size);
+ std::vector output_data_1(data_size);
error = clEnqueueReadBuffer(queue, buffer, CL_TRUE, 0, data_size,
- output_data.data(), 0, nullptr, nullptr);
+ 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(pattern),
- output_data[i], i);
+ CHECK_VERIFICATION_ERROR(static_cast(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 output_data_2(data_size);
+
+ error = clEnqueueReadBuffer(queue, buffer, CL_TRUE, 0, data_size,
+ 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(pattern_1),
+ output_data_2[i], i);
}
return CL_SUCCESS;
@@ -287,8 +396,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 +415,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 +432,38 @@ struct CopyBufferRectKHR : public BasicCommandBufferTest
nullptr, nullptr);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(data_size);
+ std::vector output_data_1(data_size);
error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size,
- output_data.data(), 0, nullptr, nullptr);
+ 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, output_data[i], 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 output_data_2(data_size);
+ error = clEnqueueReadBuffer(queue, out_mem, CL_TRUE, 0, data_size,
+ 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_1, output_data_2[i], i);
}
return CL_SUCCESS;
@@ -353,7 +490,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;
diff --git a/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_fill.cpp b/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_fill.cpp
index 88e97a27..0ba8055a 100644
--- a/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_fill.cpp
+++ b/test_conformance/extensions/cl_khr_command_buffer/command_buffer_test_fill.cpp
@@ -35,7 +35,7 @@ struct FillImageKHR : 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");
@@ -47,14 +47,34 @@ struct FillImageKHR : public BasicCommandBufferTest
nullptr, nullptr);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(data_size);
+ std::vector output_data_1(data_size);
error = clEnqueueReadImage(queue, image, CL_TRUE, origin, region, 0, 0,
- output_data.data(), 0, nullptr, nullptr);
+ output_data_1.data(), 0, nullptr, nullptr);
for (size_t i = 0; i < data_size; i++)
{
- CHECK_VERIFICATION_ERROR(static_cast(pattern),
- output_data[i], i);
+ CHECK_VERIFICATION_ERROR(static_cast(pattern_1),
+ output_data_1[i], i);
+ }
+
+ /* Check second enqueue of command buffer */
+
+ 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 output_data_2(data_size);
+ error = clEnqueueReadImage(queue, 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(static_cast(pattern_1),
+ output_data_2[i], i);
}
return CL_SUCCESS;
@@ -85,8 +105,12 @@ struct FillImageKHR : 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 = 0x10;
- const cl_uint fill_color[4] = { pattern, pattern, pattern, pattern };
+ const cl_uint pattern_1 = 0x10;
+ const cl_uint fill_color_1[4] = { pattern_1, pattern_1, pattern_1,
+ pattern_1 };
+ const cl_uint pattern_2 = 0x20;
+ 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;
@@ -99,7 +123,7 @@ struct FillBufferKHR : 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");
@@ -111,20 +135,40 @@ struct FillBufferKHR : public BasicCommandBufferTest
nullptr, nullptr);
test_error(error, "clEnqueueCommandBufferKHR failed");
- std::vector output_data(data_size());
+ std::vector output_data_1(data_size());
error = clEnqueueReadBuffer(queue, in_mem, CL_TRUE, 0, data_size(),
- output_data.data(), 0, nullptr, nullptr);
+ 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, output_data[i], i);
+ CHECK_VERIFICATION_ERROR(pattern_1, output_data_1[i], i);
+ }
+
+ /* Check second enqueue of command buffer */
+
+ clEnqueueFillBuffer(queue, in_mem, &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 output_data_2(data_size());
+ error = clEnqueueReadBuffer(queue, in_mem, CL_TRUE, 0, data_size(),
+ 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_1, output_data_2[i], i);
}
return CL_SUCCESS;
}
- const char pattern = 0x15;
+ const char pattern_1 = 0x15;
+ const char pattern_2 = 0x30;
};
};