From 8e9e20c3820d9d69da9683c1ad98d40226314e7f Mon Sep 17 00:00:00 2001 From: Kamil Goras Date: Wed, 10 Apr 2024 08:58:17 +0200 Subject: [PATCH 1/4] Added negative tests for clCommandCopyImageKHR --- .../cl_khr_command_buffer/CMakeLists.txt | 1 + .../extensions/cl_khr_command_buffer/main.cpp | 70 ++++++------------ .../negative_command_buffer_copy_image.cpp | 73 +++++++++++++++++++ .../extensions/cl_khr_command_buffer/procs.h | 3 + 4 files changed, 101 insertions(+), 46 deletions(-) create mode 100644 test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp diff --git a/test_conformance/extensions/cl_khr_command_buffer/CMakeLists.txt b/test_conformance/extensions/cl_khr_command_buffer/CMakeLists.txt index 8a4a116a9..26dc7e845 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/CMakeLists.txt +++ b/test_conformance/extensions/cl_khr_command_buffer/CMakeLists.txt @@ -16,6 +16,7 @@ set(${MODULE_NAME}_SOURCES command_buffer_test_barrier.cpp command_buffer_test_event_info.cpp command_buffer_finalize.cpp + negative_command_buffer_copy_image.cpp ) set_gnulike_module_compile_flags("-Wno-sign-compare") diff --git a/test_conformance/extensions/cl_khr_command_buffer/main.cpp b/test_conformance/extensions/cl_khr_command_buffer/main.cpp index 4ecb08065..1ac8af590 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/main.cpp +++ b/test_conformance/extensions/cl_khr_command_buffer/main.cpp @@ -16,54 +16,32 @@ #include "harness/testHarness.h" test_definition test_list[] = { - ADD_TEST(single_ndrange), - ADD_TEST(interleaved_enqueue), - ADD_TEST(mixed_commands), - ADD_TEST(explicit_flush), - ADD_TEST(out_of_order), - ADD_TEST(simultaneous_out_of_order), - ADD_TEST(info_queues), - ADD_TEST(info_ref_count), - ADD_TEST(info_state), - ADD_TEST(info_prop_array), - ADD_TEST(info_context), - ADD_TEST(basic_profiling), - ADD_TEST(simultaneous_profiling), - ADD_TEST(regular_wait_for_command_buffer), + ADD_TEST(single_ndrange), ADD_TEST(interleaved_enqueue), + ADD_TEST(mixed_commands), ADD_TEST(explicit_flush), ADD_TEST(out_of_order), + ADD_TEST(simultaneous_out_of_order), ADD_TEST(info_queues), + ADD_TEST(info_ref_count), ADD_TEST(info_state), ADD_TEST(info_prop_array), + ADD_TEST(info_context), ADD_TEST(basic_profiling), + ADD_TEST(simultaneous_profiling), ADD_TEST(regular_wait_for_command_buffer), ADD_TEST(command_buffer_wait_for_command_buffer), ADD_TEST(command_buffer_wait_for_sec_command_buffer), - ADD_TEST(return_event_callback), - ADD_TEST(clwaitforevents_single), - ADD_TEST(clwaitforevents), - ADD_TEST(command_buffer_wait_for_regular), - ADD_TEST(wait_for_sec_queue_event), - ADD_TEST(user_event_wait), - ADD_TEST(user_events_wait), - ADD_TEST(user_event_callback), - ADD_TEST(queue_substitution), - ADD_TEST(properties_queue_substitution), - ADD_TEST(simultaneous_queue_substitution), - ADD_TEST(fill_image), - ADD_TEST(fill_buffer), - ADD_TEST(fill_svm_buffer), - ADD_TEST(copy_image), - ADD_TEST(copy_buffer), - ADD_TEST(copy_svm_buffer), - ADD_TEST(copy_buffer_to_image), - ADD_TEST(copy_image_to_buffer), - ADD_TEST(copy_buffer_rect), - ADD_TEST(barrier_wait_list), - ADD_TEST(basic_printf), - ADD_TEST(simultaneous_printf), - ADD_TEST(basic_set_kernel_arg), - ADD_TEST(pending_set_kernel_arg), - ADD_TEST(event_info_command_type), - ADD_TEST(event_info_command_queue), - ADD_TEST(event_info_execution_status), - ADD_TEST(event_info_context), - ADD_TEST(event_info_reference_count), - ADD_TEST(finalize_invalid), - ADD_TEST(finalize_empty) + ADD_TEST(return_event_callback), ADD_TEST(clwaitforevents_single), + ADD_TEST(clwaitforevents), ADD_TEST(command_buffer_wait_for_regular), + ADD_TEST(wait_for_sec_queue_event), ADD_TEST(user_event_wait), + ADD_TEST(user_events_wait), ADD_TEST(user_event_callback), + ADD_TEST(queue_substitution), ADD_TEST(properties_queue_substitution), + ADD_TEST(simultaneous_queue_substitution), ADD_TEST(fill_image), + ADD_TEST(fill_buffer), ADD_TEST(fill_svm_buffer), ADD_TEST(copy_image), + ADD_TEST(copy_buffer), ADD_TEST(copy_svm_buffer), + ADD_TEST(copy_buffer_to_image), ADD_TEST(copy_image_to_buffer), + ADD_TEST(copy_buffer_rect), ADD_TEST(barrier_wait_list), + ADD_TEST(basic_printf), ADD_TEST(simultaneous_printf), + ADD_TEST(basic_set_kernel_arg), ADD_TEST(pending_set_kernel_arg), + ADD_TEST(event_info_command_type), ADD_TEST(event_info_command_queue), + ADD_TEST(event_info_execution_status), ADD_TEST(event_info_context), + ADD_TEST(event_info_reference_count), ADD_TEST(finalize_invalid), + ADD_TEST(finalize_empty), + // Command-buffer negative tests + ADD_TEST(negative_command_buffer_copy_image_queue_not_null) }; int main(int argc, const char *argv[]) diff --git a/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp new file mode 100644 index 000000000..b55e7395f --- /dev/null +++ b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp @@ -0,0 +1,73 @@ +// +// Copyright (c) 2024 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#include "basic_command_buffer.h" +#include "procs.h" +#include + +//-------------------------------------------------------------------------- +namespace { + +// CL_INVALID_COMMAND_QUEUE if command_queue is not NULL. +struct CommandBufferCopyImageQueueNotNull : public BasicCommandBufferTest +{ + using BasicCommandBufferTest::BasicCommandBufferTest; + + cl_int Run() override + { + cl_int error = clCommandCopyImageKHR(command_buffer, queue, src_image, + dst_image, origin, origin, region, + 0, 0, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_COMMAND_QUEUE, + "clCommandCopyImageKHR should return " + "CL_INVALID_COMMAND_QUEUE", + TEST_FAIL); + + + return CL_SUCCESS; + } + + cl_int SetUp(int elements) override + { + cl_int error = BasicCommandBufferTest::SetUp(elements); + test_error(error, "BasicCommandBufferTest::SetUp failed"); + + src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + return CL_SUCCESS; + } + + clMemWrapper src_image; + clMemWrapper dst_image; + const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; + const size_t origin[3] = { 0, 0, 0 }; + const size_t region[3] = { 512, 512, 1 }; +}; +}; + +int test_negative_command_buffer_copy_image_queue_not_null( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest( + device, context, queue, num_elements); +} diff --git a/test_conformance/extensions/cl_khr_command_buffer/procs.h b/test_conformance/extensions/cl_khr_command_buffer/procs.h index ce121ceac..7ef0e3da8 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/procs.h +++ b/test_conformance/extensions/cl_khr_command_buffer/procs.h @@ -140,5 +140,8 @@ extern int test_finalize_invalid(cl_device_id device, cl_context context, cl_command_queue queue, int num_elements); extern int test_finalize_empty(cl_device_id device, cl_context context, cl_command_queue queue, int num_elements); +extern int test_negative_command_buffer_copy_image_queue_not_null( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); #endif // CL_KHR_COMMAND_BUFFER_PROCS_H From f92be8fd5a828afce22406b3428a8a9c70ebb90a Mon Sep 17 00:00:00 2001 From: Kamil Goras Date: Wed, 10 Apr 2024 11:03:34 +0200 Subject: [PATCH 2/4] Added negative tests for clCommandCopyImage[ToBufferKHR]KHR --- .../extensions/cl_khr_command_buffer/main.cpp | 5 + .../negative_command_buffer_copy_image.cpp | 424 +++++++++++++++++- .../extensions/cl_khr_command_buffer/procs.h | 15 + 3 files changed, 443 insertions(+), 1 deletion(-) diff --git a/test_conformance/extensions/cl_khr_command_buffer/main.cpp b/test_conformance/extensions/cl_khr_command_buffer/main.cpp index dfe5bbaf6..169d225ce 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/main.cpp +++ b/test_conformance/extensions/cl_khr_command_buffer/main.cpp @@ -66,6 +66,11 @@ test_definition test_list[] = { ADD_TEST(finalize_empty), // Command-buffer negative tests ADD_TEST(negative_command_buffer_copy_image_queue_not_null), + ADD_TEST(negative_command_buffer_copy_image_context_not_same), + ADD_TEST(negative_command_buffer_copy_image_sync_points_null_or_num_zero), + ADD_TEST(negative_command_buffer_copy_image_invalid_command_buffer), + ADD_TEST(negative_command_buffer_copy_image_finalized_command_buffer), + ADD_TEST(negative_command_buffer_copy_image_mutable_handle_not_null), ADD_TEST(negative_get_command_buffer_info_invalid_command_buffer), ADD_TEST(negative_get_command_buffer_info_not_supported_param_name), ADD_TEST(negative_get_command_buffer_info_queues), diff --git a/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp index b55e7395f..e3c261f5b 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp +++ b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp @@ -29,13 +29,395 @@ struct CommandBufferCopyImageQueueNotNull : public BasicCommandBufferTest { cl_int error = clCommandCopyImageKHR(command_buffer, queue, src_image, dst_image, origin, origin, region, - 0, 0, nullptr, nullptr); + 0, nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_COMMAND_QUEUE, "clCommandCopyImageKHR should return " "CL_INVALID_COMMAND_QUEUE", TEST_FAIL); + error = clCommandCopyImageToBufferKHR(command_buffer, queue, src_image, + dst_image, origin, origin, 0, 0, + nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_COMMAND_QUEUE, + "clCommandCopyImageKHR should return " + "CL_INVALID_COMMAND_QUEUE", + TEST_FAIL); + + + return CL_SUCCESS; + } + + cl_int SetUp(int elements) override + { + cl_int error = BasicCommandBufferTest::SetUp(elements); + test_error(error, "BasicCommandBufferTest::SetUp failed"); + + src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + return CL_SUCCESS; + } + + clMemWrapper src_image; + clMemWrapper dst_image; + const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; + const size_t origin[3] = { 0, 0, 0 }; + const size_t region[3] = { 512, 512, 1 }; +}; + +// CL_INVALID_CONTEXT if the context associated with command_queue, +// command_buffer, src_image, and dst_image are not the same. +struct CommandBufferCopyImageContextNotSame : public BasicCommandBufferTest +{ + using BasicCommandBufferTest::BasicCommandBufferTest; + + cl_int Run() override + { + cl_int error = clCommandCopyImageKHR( + command_buffer, nullptr, src_image_ctx, dst_image, origin, origin, + region, 0, 0, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_CONTEXT, + "clCommandCopyImageKHR should return " + "CL_INVALID_CONTEXT", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR( + command_buffer, nullptr, src_image_ctx, dst_image, origin, origin, + 0, 0, nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_CONTEXT, + "clCommandCopyImageKHR should return " + "CL_INVALID_CONTEXT", + TEST_FAIL); + + error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, + dst_image_ctx, origin, origin, region, 0, + nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_CONTEXT, + "clCommandCopyImageKHR should return " + "CL_INVALID_CONTEXT", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR( + command_buffer, nullptr, src_image, dst_image_ctx, origin, origin, + 0, 0, nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_CONTEXT, + "clCommandCopyImageKHR should return " + "CL_INVALID_CONTEXT", + TEST_FAIL); + + + command_buffer = clCreateCommandBufferKHR(1, &queue1, 0, &error); + test_error(error, "clCreateCommandBufferKHR failed"); + + error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, + dst_image, origin, origin, region, 0, + nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_CONTEXT, + "clCommandCopyImageKHR should return " + "CL_INVALID_CONTEXT", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, + nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_CONTEXT, + "clCommandCopyImageKHR should return " + "CL_INVALID_CONTEXT", + TEST_FAIL); + + return CL_SUCCESS; + } + + cl_int SetUp(int elements) override + { + cl_int error = BasicCommandBufferTest::SetUp(elements); + test_error(error, "BasicCommandBufferTest::SetUp failed"); + + context1 = clCreateContext(0, 1, &device, nullptr, nullptr, &error); + test_error(error, "Failed to create context"); + + src_image_ctx = create_image_2d(context1, CL_MEM_READ_ONLY, &formats, + 512, 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + dst_image_ctx = create_image_2d(context1, CL_MEM_WRITE_ONLY, &formats, + 512, 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + queue1 = clCreateCommandQueue(context1, device, 0, &error); + test_error(error, "clCreateCommandQueue failed"); + + src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + return CL_SUCCESS; + } + + clContextWrapper context1; + clCommandQueueWrapper queue1; + clMemWrapper src_image; + clMemWrapper dst_image; + clMemWrapper src_image_ctx; + clMemWrapper dst_image_ctx; + const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; + const size_t origin[3] = { 0, 0, 0 }; + const size_t region[3] = { 512, 512, 1 }; +}; + +// CL_INVALID_SYNC_POINT_WAIT_LIST_KHR if sync_point_wait_list is NULL and +// num_sync_points_in_wait_list is > 0, or sync_point_wait_list is not NULL and +// num_sync_points_in_wait_list is 0, or if synchronization-point objects in +// sync_point_wait_list are not valid synchronization-points. +struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest +{ + using BasicCommandBufferTest::BasicCommandBufferTest; + + cl_int Run() override + { + cl_int error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, + dst_image, origin, origin, region, + 1, nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, + "clCommandCopyImageKHR should return " + "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 1, + nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, + "clCommandCopyImageKHR should return " + "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", + TEST_FAIL); + + cl_sync_point_khr point = 1; + std::vector sync_points; + sync_points.push_back(point); + + error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, + dst_image, origin, origin, region, 0, + sync_points.data(), nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, + "clCommandCopyImageKHR should return " + "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, + sync_points.data(), nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, + "clCommandCopyImageKHR should return " + "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", + TEST_FAIL); + + cl_sync_point_khr* invalid_point = nullptr; + std::vector invalid_sync_points; + invalid_sync_points.push_back(invalid_point); + + error = clCommandCopyImageKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, + region, 1, *invalid_sync_points.data(), nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, + "clCommandCopyImageKHR should return " + "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 1, + *invalid_sync_points.data(), nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, + "clCommandCopyImageKHR should return " + "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", + TEST_FAIL); + + + return CL_SUCCESS; + } + + cl_int SetUp(int elements) override + { + cl_int error = BasicCommandBufferTest::SetUp(elements); + test_error(error, "BasicCommandBufferTest::SetUp failed"); + + src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + return CL_SUCCESS; + } + + clMemWrapper src_image; + clMemWrapper dst_image; + const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; + const size_t origin[3] = { 0, 0, 0 }; + const size_t region[3] = { 512, 512, 1 }; +}; + +// CL_INVALID_COMMAND_BUFFER_KHR if command_buffer is not a valid +// command-buffer. +struct CommandBufferCopyImageInvalidCommandBuffer + : public BasicCommandBufferTest +{ + using BasicCommandBufferTest::BasicCommandBufferTest; + + cl_int Run() override + { + cl_int error = clCommandCopyImageKHR(nullptr, nullptr, src_image, + dst_image, origin, origin, region, + 0, nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_COMMAND_BUFFER_KHR, + "clCommandCopyImageKHR should return " + "CL_INVALID_COMMAND_BUFFER_KHR", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR(nullptr, nullptr, src_image, + dst_image, origin, origin, 0, 0, + nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_COMMAND_BUFFER_KHR, + "clCommandCopyImageKHR should return " + "CL_INVALID_COMMAND_BUFFER_KHR", + TEST_FAIL); + + + return CL_SUCCESS; + } + + cl_int SetUp(int elements) override + { + cl_int error = BasicCommandBufferTest::SetUp(elements); + test_error(error, "BasicCommandBufferTest::SetUp failed"); + + src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + return CL_SUCCESS; + } + + clMemWrapper src_image; + clMemWrapper dst_image; + const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; + const size_t origin[3] = { 0, 0, 0 }; + const size_t region[3] = { 512, 512, 1 }; +}; + +// CL_INVALID_OPERATION if command_buffer has been finalized. +struct CommandBufferCopyImageFinalizedCommandBuffer + : public BasicCommandBufferTest +{ + using BasicCommandBufferTest::BasicCommandBufferTest; + + cl_int Run() override + { + cl_int error = clFinalizeCommandBufferKHR(command_buffer); + test_error(error, "clFinalizeCommandBufferKHR failed"); + + error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, + dst_image, origin, origin, region, 0, + nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_OPERATION, + "clCommandCopyImageKHR should return " + "CL_INVALID_OPERATION", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, + nullptr, nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_OPERATION, + "clCommandCopyImageKHR should return " + "CL_INVALID_OPERATION", + TEST_FAIL); + + + return CL_SUCCESS; + } + + cl_int SetUp(int elements) override + { + cl_int error = BasicCommandBufferTest::SetUp(elements); + test_error(error, "BasicCommandBufferTest::SetUp failed"); + + src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + return CL_SUCCESS; + } + + clMemWrapper src_image; + clMemWrapper dst_image; + const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; + const size_t origin[3] = { 0, 0, 0 }; + const size_t region[3] = { 512, 512, 1 }; +}; + +// CL_INVALID_VALUE if mutable_handle is not NULL. +struct CommandBufferCopyImageMutableHandleNotNull + : public BasicCommandBufferTest +{ + using BasicCommandBufferTest::BasicCommandBufferTest; + + cl_int Run() override + { + cl_mutable_command_khr mutable_handle; + cl_int error = clCommandCopyImageKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, + region, 0, nullptr, nullptr, &mutable_handle); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clCommandCopyImageKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + + error = clCommandCopyImageToBufferKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, + nullptr, nullptr, &mutable_handle); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clCommandCopyImageKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + return CL_SUCCESS; } @@ -71,3 +453,43 @@ int test_negative_command_buffer_copy_image_queue_not_null( return MakeAndRunTest( device, context, queue, num_elements); } + +int test_negative_command_buffer_copy_image_context_not_same( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest( + device, context, queue, num_elements); +} + +int test_negative_command_buffer_copy_image_sync_points_null_or_num_zero( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest( + device, context, queue, num_elements); +} + +int test_negative_command_buffer_copy_image_invalid_command_buffer( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest( + device, context, queue, num_elements); +} + +int test_negative_command_buffer_copy_image_finalized_command_buffer( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest( + device, context, queue, num_elements); +} + +int test_negative_command_buffer_copy_image_mutable_handle_not_null( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest( + device, context, queue, num_elements); +} diff --git a/test_conformance/extensions/cl_khr_command_buffer/procs.h b/test_conformance/extensions/cl_khr_command_buffer/procs.h index 94549cbe9..4232c684a 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/procs.h +++ b/test_conformance/extensions/cl_khr_command_buffer/procs.h @@ -168,5 +168,20 @@ extern int test_negative_get_command_buffer_info_context(cl_device_id device, extern int test_negative_command_buffer_copy_image_queue_not_null( cl_device_id device, cl_context context, cl_command_queue queue, int num_elements); +extern int test_negative_command_buffer_copy_image_context_not_same( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); +extern int test_negative_command_buffer_copy_image_sync_points_null_or_num_zero( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); +extern int test_negative_command_buffer_copy_image_invalid_command_buffer( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); +extern int test_negative_command_buffer_copy_image_finalized_command_buffer( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); +extern int test_negative_command_buffer_copy_image_mutable_handle_not_null( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); #endif // CL_KHR_COMMAND_BUFFER_PROCS_H From a89e6f24319c08746af11efc3ab15acbccea6742 Mon Sep 17 00:00:00 2001 From: Kamil Goras Date: Wed, 8 May 2024 12:17:51 +0200 Subject: [PATCH 3/4] Added minor correction --- .../negative_command_buffer_copy_image.cpp | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp index e3c261f5b..43b022d77 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp +++ b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp @@ -192,9 +192,13 @@ struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest cl_int Run() override { - cl_int error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, - dst_image, origin, origin, region, - 1, nullptr, nullptr, nullptr); + cl_sync_point_khr invalid_point = 0; + std::vector invalid_sync_points; + invalid_sync_points.push_back(&invalid_point); + + cl_int error = clCommandCopyImageKHR( + command_buffer, nullptr, src_image, dst_image, origin, origin, + region, 1, *invalid_sync_points.data(), nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, "clCommandCopyImageKHR should return " @@ -203,20 +207,17 @@ struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest error = clCommandCopyImageToBufferKHR( command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 1, - nullptr, nullptr, nullptr); + *invalid_sync_points.data(), nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, "clCommandCopyImageKHR should return " "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", TEST_FAIL); - cl_sync_point_khr point = 1; - std::vector sync_points; - sync_points.push_back(point); error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, - dst_image, origin, origin, region, 0, - sync_points.data(), nullptr, nullptr); + dst_image, origin, origin, region, 1, + nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, "clCommandCopyImageKHR should return " @@ -224,21 +225,25 @@ struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, - sync_points.data(), nullptr, nullptr); + command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 1, + nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, "clCommandCopyImageKHR should return " "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", TEST_FAIL); - cl_sync_point_khr* invalid_point = nullptr; - std::vector invalid_sync_points; - invalid_sync_points.push_back(invalid_point); - error = clCommandCopyImageKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, - region, 1, *invalid_sync_points.data(), nullptr, nullptr); + cl_sync_point_khr point; + error = clCommandBarrierWithWaitListKHR(command_buffer, nullptr, 0, + nullptr, &point, nullptr); + test_error(error, "clCommandBarrierWithWaitListKHR failed"); + std::vector sync_points; + sync_points.push_back(point); + + error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, + dst_image, origin, origin, region, 0, + sync_points.data(), nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, "clCommandCopyImageKHR should return " @@ -246,8 +251,8 @@ struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 1, - *invalid_sync_points.data(), nullptr, nullptr); + command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, + sync_points.data(), nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, "clCommandCopyImageKHR should return " From 638b4025c6b5bed1d84f5b0c034bd67fb063b287 Mon Sep 17 00:00:00 2001 From: Kamil Goras Date: Tue, 21 May 2024 09:32:05 +0200 Subject: [PATCH 4/4] Added minor review changes --- .../negative_command_buffer_copy_image.cpp | 251 ++++++------------ 1 file changed, 86 insertions(+), 165 deletions(-) diff --git a/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp index 43b022d77..843c0d54e 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp +++ b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_copy_image.cpp @@ -18,12 +18,56 @@ #include //-------------------------------------------------------------------------- + +struct CommandCopyBaseTest : BasicCommandBufferTest +{ + CommandCopyBaseTest(cl_device_id device, cl_context context, + cl_command_queue queue) + : BasicCommandBufferTest(device, context, queue) + {} + + cl_int SetUp(int elements) override + { + cl_int error = BasicCommandBufferTest::SetUp(elements); + test_error(error, "BasicCommandBufferTest::SetUp failed"); + + src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, + 512, 0, NULL, &error); + test_error(error, "create_image_2d failed"); + + return CL_SUCCESS; + } + + bool Skip() override + { + cl_bool image_support; + + cl_int error = + clGetDeviceInfo(device, CL_DEVICE_IMAGE_SUPPORT, + sizeof(image_support), &image_support, nullptr); + test_error(error, "clGetDeviceInfo for CL_DEVICE_IMAGE_SUPPORT failed"); + + return (!image_support || BasicCommandBufferTest::Skip()); + } + +protected: + clMemWrapper src_image; + clMemWrapper dst_image; + const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; + const size_t origin[3] = { 0, 0, 0 }; + const size_t region[3] = { 512, 512, 1 }; +}; + namespace { // CL_INVALID_COMMAND_QUEUE if command_queue is not NULL. -struct CommandBufferCopyImageQueueNotNull : public BasicCommandBufferTest +struct CommandBufferCopyImageQueueNotNull : public CommandCopyBaseTest { - using BasicCommandBufferTest::BasicCommandBufferTest; + using CommandCopyBaseTest::CommandCopyBaseTest; cl_int Run() override { @@ -37,11 +81,11 @@ struct CommandBufferCopyImageQueueNotNull : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR(command_buffer, queue, src_image, - dst_image, origin, origin, 0, 0, + dst_image, origin, region, 0, 0, nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_COMMAND_QUEUE, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_COMMAND_QUEUE", TEST_FAIL); @@ -49,34 +93,19 @@ struct CommandBufferCopyImageQueueNotNull : public BasicCommandBufferTest return CL_SUCCESS; } - cl_int SetUp(int elements) override + bool Skip() override { - cl_int error = BasicCommandBufferTest::SetUp(elements); - test_error(error, "BasicCommandBufferTest::SetUp failed"); - - src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - return CL_SUCCESS; + return CommandCopyBaseTest::Skip() + || is_extension_available(device, + "cl_khr_command_buffer_multi_device"); } - - clMemWrapper src_image; - clMemWrapper dst_image; - const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; - const size_t origin[3] = { 0, 0, 0 }; - const size_t region[3] = { 512, 512, 1 }; }; // CL_INVALID_CONTEXT if the context associated with command_queue, // command_buffer, src_image, and dst_image are not the same. -struct CommandBufferCopyImageContextNotSame : public BasicCommandBufferTest +struct CommandBufferCopyImageContextNotSame : public CommandCopyBaseTest { - using BasicCommandBufferTest::BasicCommandBufferTest; + using CommandCopyBaseTest::CommandCopyBaseTest; cl_int Run() override { @@ -90,11 +119,11 @@ struct CommandBufferCopyImageContextNotSame : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image_ctx, dst_image, origin, origin, + command_buffer, nullptr, src_image_ctx, dst_image, origin, region, 0, 0, nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_CONTEXT, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_CONTEXT", TEST_FAIL); @@ -108,11 +137,11 @@ struct CommandBufferCopyImageContextNotSame : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image_ctx, origin, origin, + command_buffer, nullptr, src_image, dst_image_ctx, origin, region, 0, 0, nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_CONTEXT, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_CONTEXT", TEST_FAIL); @@ -130,11 +159,11 @@ struct CommandBufferCopyImageContextNotSame : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, + command_buffer, nullptr, src_image, dst_image, origin, region, 0, 0, nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_CONTEXT, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_CONTEXT", TEST_FAIL); @@ -143,7 +172,7 @@ struct CommandBufferCopyImageContextNotSame : public BasicCommandBufferTest cl_int SetUp(int elements) override { - cl_int error = BasicCommandBufferTest::SetUp(elements); + cl_int error = CommandCopyBaseTest::SetUp(elements); test_error(error, "BasicCommandBufferTest::SetUp failed"); context1 = clCreateContext(0, 1, &device, nullptr, nullptr, &error); @@ -160,45 +189,30 @@ struct CommandBufferCopyImageContextNotSame : public BasicCommandBufferTest queue1 = clCreateCommandQueue(context1, device, 0, &error); test_error(error, "clCreateCommandQueue failed"); - src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - return CL_SUCCESS; } clContextWrapper context1; clCommandQueueWrapper queue1; - clMemWrapper src_image; - clMemWrapper dst_image; clMemWrapper src_image_ctx; clMemWrapper dst_image_ctx; - const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; - const size_t origin[3] = { 0, 0, 0 }; - const size_t region[3] = { 512, 512, 1 }; }; // CL_INVALID_SYNC_POINT_WAIT_LIST_KHR if sync_point_wait_list is NULL and // num_sync_points_in_wait_list is > 0, or sync_point_wait_list is not NULL and // num_sync_points_in_wait_list is 0, or if synchronization-point objects in // sync_point_wait_list are not valid synchronization-points. -struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest +struct CommandBufferCopySyncPointsNullOrNumZero : public CommandCopyBaseTest { - using BasicCommandBufferTest::BasicCommandBufferTest; + using CommandCopyBaseTest::CommandCopyBaseTest; cl_int Run() override { cl_sync_point_khr invalid_point = 0; - std::vector invalid_sync_points; - invalid_sync_points.push_back(&invalid_point); cl_int error = clCommandCopyImageKHR( command_buffer, nullptr, src_image, dst_image, origin, origin, - region, 1, *invalid_sync_points.data(), nullptr, nullptr); + region, 1, &invalid_point, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, "clCommandCopyImageKHR should return " @@ -206,11 +220,11 @@ struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 1, - *invalid_sync_points.data(), nullptr, nullptr); + command_buffer, nullptr, src_image, dst_image, origin, region, 0, 1, + &invalid_point, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", TEST_FAIL); @@ -225,11 +239,11 @@ struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 1, + command_buffer, nullptr, src_image, dst_image, origin, region, 0, 1, nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", TEST_FAIL); @@ -238,12 +252,10 @@ struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest error = clCommandBarrierWithWaitListKHR(command_buffer, nullptr, 0, nullptr, &point, nullptr); test_error(error, "clCommandBarrierWithWaitListKHR failed"); - std::vector sync_points; - sync_points.push_back(point); error = clCommandCopyImageKHR(command_buffer, nullptr, src_image, dst_image, origin, origin, region, 0, - sync_points.data(), nullptr, nullptr); + &point, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, "clCommandCopyImageKHR should return " @@ -251,47 +263,24 @@ struct CommandBufferCopySyncPointsNullOrNumZero : public BasicCommandBufferTest TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, - sync_points.data(), nullptr, nullptr); + command_buffer, nullptr, src_image, dst_image, origin, region, 0, 0, + &point, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", TEST_FAIL); return CL_SUCCESS; } - - cl_int SetUp(int elements) override - { - cl_int error = BasicCommandBufferTest::SetUp(elements); - test_error(error, "BasicCommandBufferTest::SetUp failed"); - - src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - return CL_SUCCESS; - } - - clMemWrapper src_image; - clMemWrapper dst_image; - const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; - const size_t origin[3] = { 0, 0, 0 }; - const size_t region[3] = { 512, 512, 1 }; }; // CL_INVALID_COMMAND_BUFFER_KHR if command_buffer is not a valid // command-buffer. -struct CommandBufferCopyImageInvalidCommandBuffer - : public BasicCommandBufferTest +struct CommandBufferCopyImageInvalidCommandBuffer : public CommandCopyBaseTest { - using BasicCommandBufferTest::BasicCommandBufferTest; + using CommandCopyBaseTest::CommandCopyBaseTest; cl_int Run() override { @@ -305,46 +294,23 @@ struct CommandBufferCopyImageInvalidCommandBuffer TEST_FAIL); error = clCommandCopyImageToBufferKHR(nullptr, nullptr, src_image, - dst_image, origin, origin, 0, 0, + dst_image, origin, region, 0, 0, nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_COMMAND_BUFFER_KHR, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_COMMAND_BUFFER_KHR", TEST_FAIL); return CL_SUCCESS; } - - cl_int SetUp(int elements) override - { - cl_int error = BasicCommandBufferTest::SetUp(elements); - test_error(error, "BasicCommandBufferTest::SetUp failed"); - - src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - return CL_SUCCESS; - } - - clMemWrapper src_image; - clMemWrapper dst_image; - const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; - const size_t origin[3] = { 0, 0, 0 }; - const size_t region[3] = { 512, 512, 1 }; }; // CL_INVALID_OPERATION if command_buffer has been finalized. -struct CommandBufferCopyImageFinalizedCommandBuffer - : public BasicCommandBufferTest +struct CommandBufferCopyImageFinalizedCommandBuffer : public CommandCopyBaseTest { - using BasicCommandBufferTest::BasicCommandBufferTest; + using CommandCopyBaseTest::CommandCopyBaseTest; cl_int Run() override { @@ -361,46 +327,23 @@ struct CommandBufferCopyImageFinalizedCommandBuffer TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, + command_buffer, nullptr, src_image, dst_image, origin, region, 0, 0, nullptr, nullptr, nullptr); test_failure_error_ret(error, CL_INVALID_OPERATION, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_OPERATION", TEST_FAIL); return CL_SUCCESS; } - - cl_int SetUp(int elements) override - { - cl_int error = BasicCommandBufferTest::SetUp(elements); - test_error(error, "BasicCommandBufferTest::SetUp failed"); - - src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - return CL_SUCCESS; - } - - clMemWrapper src_image; - clMemWrapper dst_image; - const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; - const size_t origin[3] = { 0, 0, 0 }; - const size_t region[3] = { 512, 512, 1 }; }; // CL_INVALID_VALUE if mutable_handle is not NULL. -struct CommandBufferCopyImageMutableHandleNotNull - : public BasicCommandBufferTest +struct CommandBufferCopyImageMutableHandleNotNull : public CommandCopyBaseTest { - using BasicCommandBufferTest::BasicCommandBufferTest; + using CommandCopyBaseTest::CommandCopyBaseTest; cl_int Run() override { @@ -415,41 +358,19 @@ struct CommandBufferCopyImageMutableHandleNotNull TEST_FAIL); error = clCommandCopyImageToBufferKHR( - command_buffer, nullptr, src_image, dst_image, origin, origin, 0, 0, + command_buffer, nullptr, src_image, dst_image, origin, region, 0, 0, nullptr, nullptr, &mutable_handle); test_failure_error_ret(error, CL_INVALID_VALUE, - "clCommandCopyImageKHR should return " + "clCommandCopyImageToBufferKHR should return " "CL_INVALID_VALUE", TEST_FAIL); return CL_SUCCESS; } - - cl_int SetUp(int elements) override - { - cl_int error = BasicCommandBufferTest::SetUp(elements); - test_error(error, "BasicCommandBufferTest::SetUp failed"); - - src_image = create_image_2d(context, CL_MEM_READ_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - dst_image = create_image_2d(context, CL_MEM_WRITE_ONLY, &formats, 512, - 512, 0, NULL, &error); - test_error(error, "create_image_2d failed"); - - return CL_SUCCESS; - } - - clMemWrapper src_image; - clMemWrapper dst_image; - const cl_image_format formats = { CL_RGBA, CL_UNSIGNED_INT8 }; - const size_t origin[3] = { 0, 0, 0 }; - const size_t region[3] = { 512, 512, 1 }; -}; }; +} int test_negative_command_buffer_copy_image_queue_not_null( cl_device_id device, cl_context context, cl_command_queue queue,