-
Notifications
You must be signed in to change notification settings - Fork 199
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into negative_command_fill_buffer_image
- Loading branch information
Showing
4 changed files
with
298 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
275 changes: 275 additions & 0 deletions
275
test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_svm_mem.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,275 @@ | ||
// | ||
// 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 "svm_command_basic.h" | ||
#include "procs.h" | ||
|
||
|
||
//-------------------------------------------------------------------------- | ||
namespace { | ||
|
||
// CL_INVALID_COMMAND_QUEUE if command_queue is not NULL. | ||
struct CommandBufferCommandSVMQueueNotNull : public BasicSVMCommandBufferTest | ||
{ | ||
using BasicSVMCommandBufferTest::BasicSVMCommandBufferTest; | ||
|
||
cl_int Run() override | ||
{ | ||
cl_int error = clCommandSVMMemcpyKHR( | ||
command_buffer, queue, svm_out_mem(), svm_in_mem(), data_size(), 0, | ||
nullptr, nullptr, nullptr); | ||
|
||
test_failure_error_ret( | ||
error, CL_INVALID_COMMAND_QUEUE, | ||
"clCommandSVMMemcpyKHR should return CL_INVALID_COMMAND_QUEUE", | ||
TEST_FAIL); | ||
|
||
error = clCommandSVMMemFillKHR(command_buffer, queue, svm_in_mem(), | ||
&pattern_1, sizeof(cl_char), data_size(), | ||
0, nullptr, nullptr, nullptr); | ||
|
||
test_failure_error_ret( | ||
error, CL_INVALID_COMMAND_QUEUE, | ||
"clCommandSVMMemFillKHR should return CL_INVALID_COMMAND_QUEUE", | ||
TEST_FAIL); | ||
|
||
return CL_SUCCESS; | ||
} | ||
|
||
const cl_char pattern_1 = 0x14; | ||
}; | ||
|
||
// 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 CommandBufferCommandSVMSyncPointsNullOrNumZero | ||
: public BasicSVMCommandBufferTest | ||
{ | ||
using BasicSVMCommandBufferTest::BasicSVMCommandBufferTest; | ||
|
||
cl_int Run() override | ||
{ | ||
cl_sync_point_khr invalid_point = 0; | ||
|
||
cl_int error = clCommandSVMMemcpyKHR( | ||
command_buffer, nullptr, svm_out_mem(), svm_in_mem(), data_size(), | ||
1, &invalid_point, nullptr, nullptr); | ||
|
||
test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, | ||
"clCommandSVMMemcpyKHR should return " | ||
"CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", | ||
TEST_FAIL); | ||
|
||
error = clCommandSVMMemFillKHR(command_buffer, nullptr, svm_in_mem(), | ||
&pattern_1, sizeof(cl_char), data_size(), | ||
1, &invalid_point, nullptr, nullptr); | ||
|
||
test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, | ||
"clCommandSVMMemFillKHR should return " | ||
"CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", | ||
TEST_FAIL); | ||
|
||
|
||
error = clCommandSVMMemcpyKHR(command_buffer, nullptr, svm_out_mem(), | ||
svm_in_mem(), data_size(), 1, nullptr, | ||
nullptr, nullptr); | ||
|
||
test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, | ||
"clCommandSVMMemcpyKHR should return " | ||
"CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", | ||
TEST_FAIL); | ||
|
||
error = clCommandSVMMemFillKHR(command_buffer, nullptr, svm_in_mem(), | ||
&pattern_1, sizeof(cl_char), data_size(), | ||
1, nullptr, nullptr, nullptr); | ||
|
||
test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, | ||
"clCommandSVMMemFillKHR should return " | ||
"CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", | ||
TEST_FAIL); | ||
|
||
|
||
cl_sync_point_khr point; | ||
error = clCommandBarrierWithWaitListKHR(command_buffer, nullptr, 0, | ||
nullptr, &point, nullptr); | ||
test_error(error, "clCommandBarrierWithWaitListKHR failed"); | ||
|
||
error = clCommandSVMMemcpyKHR(command_buffer, nullptr, svm_out_mem(), | ||
svm_in_mem(), data_size(), 0, &point, | ||
nullptr, nullptr); | ||
|
||
test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, | ||
"clCommandSVMMemcpyKHR should return " | ||
"CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", | ||
TEST_FAIL); | ||
|
||
error = clCommandSVMMemFillKHR(command_buffer, nullptr, svm_in_mem(), | ||
&pattern_1, sizeof(cl_char), data_size(), | ||
0, &point, nullptr, nullptr); | ||
|
||
test_failure_error_ret(error, CL_INVALID_SYNC_POINT_WAIT_LIST_KHR, | ||
"clCommandSVMMemFillKHR should return " | ||
"CL_INVALID_SYNC_POINT_WAIT_LIST_KHR", | ||
TEST_FAIL); | ||
|
||
|
||
return CL_SUCCESS; | ||
} | ||
|
||
const cl_char pattern_1 = 0x14; | ||
}; | ||
|
||
// CL_INVALID_COMMAND_BUFFER_KHR if command_buffer is not a valid | ||
// command-buffer. | ||
struct CommandBufferCommandSVMInvalidCommandBuffer | ||
: public BasicSVMCommandBufferTest | ||
{ | ||
using BasicSVMCommandBufferTest::BasicSVMCommandBufferTest; | ||
|
||
cl_int Run() override | ||
{ | ||
cl_int error = | ||
clCommandSVMMemcpyKHR(nullptr, nullptr, svm_out_mem(), svm_in_mem(), | ||
data_size(), 0, nullptr, nullptr, nullptr); | ||
|
||
test_failure_error_ret( | ||
error, CL_INVALID_COMMAND_BUFFER_KHR, | ||
"clCommandSVMMemcpyKHR should return CL_INVALID_COMMAND_BUFFER_KHR", | ||
TEST_FAIL); | ||
|
||
error = clCommandSVMMemFillKHR(nullptr, nullptr, svm_in_mem(), | ||
&pattern_1, sizeof(cl_char), data_size(), | ||
0, nullptr, nullptr, nullptr); | ||
|
||
test_failure_error_ret(error, CL_INVALID_COMMAND_BUFFER_KHR, | ||
"clCommandSVMMemFillKHR should return " | ||
"CL_INVALID_COMMAND_BUFFER_KHR", | ||
TEST_FAIL); | ||
|
||
return CL_SUCCESS; | ||
} | ||
|
||
const cl_char pattern_1 = 0x14; | ||
}; | ||
|
||
// CL_INVALID_OPERATION if command_buffer has been finalized. | ||
struct CommandBufferCommandSVMFinalizedCommandBuffer | ||
: public BasicSVMCommandBufferTest | ||
{ | ||
using BasicSVMCommandBufferTest::BasicSVMCommandBufferTest; | ||
|
||
cl_int Run() override | ||
{ | ||
cl_int error = clFinalizeCommandBufferKHR(command_buffer); | ||
test_error(error, "clFinalizeCommandBufferKHR failed"); | ||
|
||
error = clCommandSVMMemcpyKHR(command_buffer, nullptr, svm_out_mem(), | ||
svm_in_mem(), data_size(), 0, nullptr, | ||
nullptr, nullptr); | ||
|
||
test_failure_error_ret( | ||
error, CL_INVALID_OPERATION, | ||
"clCommandSVMMemcpyKHR should return CL_INVALID_OPERATION", | ||
TEST_FAIL); | ||
|
||
error = clCommandSVMMemFillKHR(command_buffer, nullptr, svm_in_mem(), | ||
&pattern_1, sizeof(cl_char), data_size(), | ||
0, nullptr, nullptr, nullptr); | ||
|
||
test_failure_error_ret( | ||
error, CL_INVALID_OPERATION, | ||
"clCommandSVMMemFillKHR should return CL_INVALID_OPERATION", | ||
TEST_FAIL); | ||
|
||
return CL_SUCCESS; | ||
} | ||
|
||
const cl_char pattern_1 = 0x14; | ||
}; | ||
|
||
// CL_INVALID_VALUE if mutable_handle is not NULL. | ||
struct CommandBufferCommandSVMMutableHandleNotNull | ||
: public BasicSVMCommandBufferTest | ||
{ | ||
using BasicSVMCommandBufferTest::BasicSVMCommandBufferTest; | ||
|
||
cl_int Run() override | ||
{ | ||
cl_mutable_command_khr mutable_handle; | ||
|
||
cl_int error = clCommandSVMMemcpyKHR( | ||
command_buffer, nullptr, svm_out_mem(), svm_in_mem(), data_size(), | ||
0, nullptr, nullptr, &mutable_handle); | ||
|
||
test_failure_error_ret( | ||
error, CL_INVALID_VALUE, | ||
"clCommandSVMMemcpyKHR should return CL_INVALID_VALUE", TEST_FAIL); | ||
|
||
error = clCommandSVMMemFillKHR(command_buffer, nullptr, svm_in_mem(), | ||
&pattern_1, sizeof(cl_char), data_size(), | ||
0, nullptr, nullptr, &mutable_handle); | ||
|
||
test_failure_error_ret( | ||
error, CL_INVALID_VALUE, | ||
"clCommandSVMMemFillKHR should return CL_INVALID_VALUE", TEST_FAIL); | ||
|
||
return CL_SUCCESS; | ||
} | ||
|
||
const cl_char pattern_1 = 0x14; | ||
}; | ||
} | ||
|
||
int test_negative_command_buffer_command_svm_queue_not_null( | ||
cl_device_id device, cl_context context, cl_command_queue queue, | ||
int num_elements) | ||
{ | ||
return MakeAndRunTest<CommandBufferCommandSVMQueueNotNull>( | ||
device, context, queue, num_elements); | ||
} | ||
|
||
int test_negative_command_buffer_command_svm_sync_points_null_or_num_zero( | ||
cl_device_id device, cl_context context, cl_command_queue queue, | ||
int num_elements) | ||
{ | ||
return MakeAndRunTest<CommandBufferCommandSVMSyncPointsNullOrNumZero>( | ||
device, context, queue, num_elements); | ||
} | ||
|
||
int test_negative_command_buffer_command_svm_invalid_command_buffer( | ||
cl_device_id device, cl_context context, cl_command_queue queue, | ||
int num_elements) | ||
{ | ||
return MakeAndRunTest<CommandBufferCommandSVMInvalidCommandBuffer>( | ||
device, context, queue, num_elements); | ||
} | ||
|
||
int test_negative_command_buffer_command_svm_finalized_command_buffer( | ||
cl_device_id device, cl_context context, cl_command_queue queue, | ||
int num_elements) | ||
{ | ||
return MakeAndRunTest<CommandBufferCommandSVMFinalizedCommandBuffer>( | ||
device, context, queue, num_elements); | ||
} | ||
|
||
int test_negative_command_buffer_command_svm_mutable_handle_not_null( | ||
cl_device_id device, cl_context context, cl_command_queue queue, | ||
int num_elements) | ||
{ | ||
return MakeAndRunTest<CommandBufferCommandSVMMutableHandleNotNull>( | ||
device, context, queue, num_elements); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters