mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-19 06:09:01 +00:00
Corrections for negative tests for function CreateCommandBufferKHR (#1915)
This commit is contained in:
committed by
GitHub
parent
1139f54bde
commit
7fa567c7a5
@@ -16,6 +16,7 @@ set(${MODULE_NAME}_SOURCES
|
|||||||
command_buffer_test_barrier.cpp
|
command_buffer_test_barrier.cpp
|
||||||
command_buffer_test_event_info.cpp
|
command_buffer_test_event_info.cpp
|
||||||
command_buffer_finalize.cpp
|
command_buffer_finalize.cpp
|
||||||
|
negative_command_buffer_create.cpp
|
||||||
negative_command_buffer_get_info.cpp
|
negative_command_buffer_get_info.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,13 @@ test_definition test_list[] = {
|
|||||||
ADD_TEST(event_info_reference_count),
|
ADD_TEST(event_info_reference_count),
|
||||||
ADD_TEST(finalize_invalid),
|
ADD_TEST(finalize_invalid),
|
||||||
ADD_TEST(finalize_empty),
|
ADD_TEST(finalize_empty),
|
||||||
|
ADD_TEST(negative_create_command_buffer_num_queues),
|
||||||
|
ADD_TEST(negative_create_command_buffer_null_queues),
|
||||||
|
ADD_TEST(negative_create_command_buffer_repeated_properties),
|
||||||
|
ADD_TEST(negative_create_command_buffer_not_supported_properties),
|
||||||
|
ADD_TEST(negative_create_command_buffer_queue_without_min_properties),
|
||||||
|
ADD_TEST(
|
||||||
|
negative_create_command_buffer_device_does_not_support_out_of_order_queue),
|
||||||
ADD_TEST(negative_get_command_buffer_info_invalid_command_buffer),
|
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_not_supported_param_name),
|
||||||
ADD_TEST(negative_get_command_buffer_info_queues),
|
ADD_TEST(negative_get_command_buffer_info_queues),
|
||||||
|
|||||||
@@ -0,0 +1,322 @@
|
|||||||
|
//
|
||||||
|
// 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"
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
// CL_INVALID_VALUE if num_queues is not one.
|
||||||
|
struct CreateCommandBufferNumQueues : public BasicCommandBufferTest
|
||||||
|
{
|
||||||
|
CreateCommandBufferNumQueues(cl_device_id device, cl_context context,
|
||||||
|
cl_command_queue queue)
|
||||||
|
: BasicCommandBufferTest(device, context, queue), queue1(nullptr),
|
||||||
|
queue2(nullptr)
|
||||||
|
{}
|
||||||
|
|
||||||
|
cl_int Run() override
|
||||||
|
{
|
||||||
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
cl_command_queue queues[2] = { queue1, queue2 };
|
||||||
|
|
||||||
|
command_buffer = clCreateCommandBufferKHR(2, queues, nullptr, &error);
|
||||||
|
|
||||||
|
test_failure_error_ret(
|
||||||
|
error, CL_INVALID_VALUE,
|
||||||
|
"clCreateCommandBufferKHR should return CL_INVALID_VALUE",
|
||||||
|
TEST_FAIL);
|
||||||
|
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
cl_int SetUp(int elements) override
|
||||||
|
{
|
||||||
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
error = BasicCommandBufferTest::SetUp(elements);
|
||||||
|
test_error(error, "BasicCommandBufferTest::SetUp failed");
|
||||||
|
|
||||||
|
queue1 = clCreateCommandQueue(context, device, 0, &error);
|
||||||
|
test_error(error, "clCreateCommandQueue failed");
|
||||||
|
queue2 = clCreateCommandQueue(context, device, 0, &error);
|
||||||
|
test_error(error, "clCreateCommandQueue failed");
|
||||||
|
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Skip() override
|
||||||
|
{
|
||||||
|
return BasicCommandBufferTest::Skip()
|
||||||
|
|| is_extension_available(device,
|
||||||
|
"cl_khr_command_buffer_multi_device");
|
||||||
|
}
|
||||||
|
|
||||||
|
clCommandQueueWrapper queue1;
|
||||||
|
clCommandQueueWrapper queue2;
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_INVALID_VALUE if queues is NULL.
|
||||||
|
struct CreateCommandBufferNullQueues : public BasicCommandBufferTest
|
||||||
|
{
|
||||||
|
using BasicCommandBufferTest::BasicCommandBufferTest;
|
||||||
|
|
||||||
|
cl_int Run() override
|
||||||
|
{
|
||||||
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
command_buffer = clCreateCommandBufferKHR(1, nullptr, nullptr, &error);
|
||||||
|
|
||||||
|
test_failure_error_ret(
|
||||||
|
error, CL_INVALID_VALUE,
|
||||||
|
"clCreateCommandBufferKHR should return CL_INVALID_VALUE",
|
||||||
|
TEST_FAIL);
|
||||||
|
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_INVALID_VALUE if values specified in properties are not valid,
|
||||||
|
// or if the same property name is specified more than once.
|
||||||
|
struct CreateCommandBufferRepeatedProperties : public BasicCommandBufferTest
|
||||||
|
{
|
||||||
|
using BasicCommandBufferTest::BasicCommandBufferTest;
|
||||||
|
|
||||||
|
cl_int Run() override
|
||||||
|
{
|
||||||
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
cl_command_buffer_properties_khr repeated_properties[5] = {
|
||||||
|
CL_COMMAND_BUFFER_FLAGS_KHR, CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR,
|
||||||
|
CL_COMMAND_BUFFER_FLAGS_KHR, CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
command_buffer =
|
||||||
|
clCreateCommandBufferKHR(1, &queue, repeated_properties, &error);
|
||||||
|
test_failure_error_ret(
|
||||||
|
error, CL_INVALID_VALUE,
|
||||||
|
"clCreateCommandBufferKHR should return CL_INVALID_VALUE",
|
||||||
|
TEST_FAIL);
|
||||||
|
|
||||||
|
cl_command_buffer_properties_khr invalid_properties[3] = {
|
||||||
|
CL_COMMAND_BUFFER_FLAGS_KHR, CL_INVALID_PROPERTY, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
command_buffer =
|
||||||
|
clCreateCommandBufferKHR(1, &queue, invalid_properties, &error);
|
||||||
|
test_failure_error_ret(
|
||||||
|
error, CL_INVALID_VALUE,
|
||||||
|
"clCreateCommandBufferKHR should return CL_INVALID_VALUE",
|
||||||
|
TEST_FAIL);
|
||||||
|
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_INVALID_PROPERTY if values specified in properties are valid but are not
|
||||||
|
// supported by all the devices associated with command-queues in queues.
|
||||||
|
struct CreateCommandBufferNotSupportedProperties : public BasicCommandBufferTest
|
||||||
|
{
|
||||||
|
using BasicCommandBufferTest::BasicCommandBufferTest;
|
||||||
|
|
||||||
|
cl_int Run() override
|
||||||
|
{
|
||||||
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
cl_command_buffer_properties_khr properties[3] = {
|
||||||
|
CL_COMMAND_BUFFER_FLAGS_KHR, CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
command_buffer =
|
||||||
|
clCreateCommandBufferKHR(1, &queue, properties, &error);
|
||||||
|
test_failure_error_ret(
|
||||||
|
error, CL_INVALID_PROPERTY,
|
||||||
|
"clCreateCommandBufferKHR should return CL_INVALID_PROPERTY",
|
||||||
|
TEST_FAIL);
|
||||||
|
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Skip() override
|
||||||
|
{
|
||||||
|
cl_device_command_buffer_capabilities_khr capabilities;
|
||||||
|
cl_int error =
|
||||||
|
clGetDeviceInfo(device, CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR,
|
||||||
|
sizeof(capabilities), &capabilities, NULL);
|
||||||
|
test_error(error,
|
||||||
|
"Unable to query CL_DEVICE_COMMAND_BUFFER_CAPABILITIES_KHR");
|
||||||
|
|
||||||
|
bool device_supports_simultaneous_use =
|
||||||
|
(capabilities & CL_COMMAND_BUFFER_CAPABILITY_SIMULTANEOUS_USE_KHR)
|
||||||
|
!= 0;
|
||||||
|
|
||||||
|
// If device supports command queue property
|
||||||
|
// CL_COMMAND_BUFFER_SIMULTANEOUS_USE_KHR test should be skipped
|
||||||
|
return device_supports_simultaneous_use;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_INCOMPATIBLE_COMMAND_QUEUE_KHR if the properties of any command-queue in
|
||||||
|
// queues does not contain the minimum properties specified by
|
||||||
|
// CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR.
|
||||||
|
struct CreateCommandBufferQueueWithoutMinProperties
|
||||||
|
: public BasicCommandBufferTest
|
||||||
|
{
|
||||||
|
using BasicCommandBufferTest::BasicCommandBufferTest;
|
||||||
|
|
||||||
|
cl_int Run() override
|
||||||
|
{
|
||||||
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
command_buffer = clCreateCommandBufferKHR(1, &queue, nullptr, &error);
|
||||||
|
test_failure_error_ret(error, CL_INCOMPATIBLE_COMMAND_QUEUE_KHR,
|
||||||
|
"clCreateCommandBufferKHR should return "
|
||||||
|
"CL_INCOMPATIBLE_COMMAND_QUEUE_KHR",
|
||||||
|
TEST_FAIL);
|
||||||
|
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Skip() override
|
||||||
|
{
|
||||||
|
cl_command_queue_properties required_properties;
|
||||||
|
cl_int error = clGetDeviceInfo(
|
||||||
|
device, CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR,
|
||||||
|
sizeof(required_properties), &required_properties, NULL);
|
||||||
|
test_error(error,
|
||||||
|
"Unable to query "
|
||||||
|
"CL_DEVICE_COMMAND_BUFFER_REQUIRED_QUEUE_PROPERTIES_KHR");
|
||||||
|
|
||||||
|
cl_command_queue_properties queue_properties;
|
||||||
|
error = clGetCommandQueueInfo(queue, CL_QUEUE_PROPERTIES,
|
||||||
|
sizeof(queue_properties),
|
||||||
|
&queue_properties, NULL);
|
||||||
|
test_error(error, "Unable to query CL_QUEUE_PROPERTIES");
|
||||||
|
|
||||||
|
// Skip if queue properties contains those required
|
||||||
|
return required_properties == (required_properties & queue_properties);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// CL_INCOMPATIBLE_COMMAND_QUEUE_KHR if any command-queue in queues is an
|
||||||
|
// out-of-order command-queue and the device associated with the command-queue
|
||||||
|
// does not support the CL_COMMAND_BUFFER_CAPABILITY_OUT_OF_ORDER_KHR
|
||||||
|
// capability.
|
||||||
|
struct CreateCommandBufferDeviceDoesNotSupportOutOfOderQueue
|
||||||
|
: public BasicCommandBufferTest
|
||||||
|
{
|
||||||
|
CreateCommandBufferDeviceDoesNotSupportOutOfOderQueue(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue)
|
||||||
|
: BasicCommandBufferTest(device, context, queue),
|
||||||
|
out_of_order_queue(nullptr)
|
||||||
|
{}
|
||||||
|
|
||||||
|
cl_int Run() override
|
||||||
|
{
|
||||||
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
command_buffer =
|
||||||
|
clCreateCommandBufferKHR(1, &out_of_order_queue, nullptr, &error);
|
||||||
|
test_failure_error_ret(error, CL_INCOMPATIBLE_COMMAND_QUEUE_KHR,
|
||||||
|
"clCreateCommandBufferKHR should return "
|
||||||
|
"CL_INCOMPATIBLE_COMMAND_QUEUE_KHR",
|
||||||
|
TEST_FAIL);
|
||||||
|
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
cl_int SetUp(int elements) override
|
||||||
|
{
|
||||||
|
cl_int error = CL_SUCCESS;
|
||||||
|
|
||||||
|
error = BasicCommandBufferTest::SetUp(elements);
|
||||||
|
test_error(error, "BasicCommandBufferTest::SetUp failed");
|
||||||
|
|
||||||
|
out_of_order_queue = clCreateCommandQueue(
|
||||||
|
context, device, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE, &error);
|
||||||
|
test_error(error,
|
||||||
|
"clCreateCommandQueue with "
|
||||||
|
"CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE failed");
|
||||||
|
|
||||||
|
return CL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Skip() override
|
||||||
|
{
|
||||||
|
BasicCommandBufferTest::Skip();
|
||||||
|
|
||||||
|
// If device supports out of order queues test should be skipped
|
||||||
|
return out_of_order_support != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
clCommandQueueWrapper out_of_order_queue;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
int test_negative_create_command_buffer_num_queues(cl_device_id device,
|
||||||
|
cl_context context,
|
||||||
|
cl_command_queue queue,
|
||||||
|
int num_elements)
|
||||||
|
{
|
||||||
|
return MakeAndRunTest<CreateCommandBufferNumQueues>(device, context, queue,
|
||||||
|
num_elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_negative_create_command_buffer_null_queues(cl_device_id device,
|
||||||
|
cl_context context,
|
||||||
|
cl_command_queue queue,
|
||||||
|
int num_elements)
|
||||||
|
{
|
||||||
|
return MakeAndRunTest<CreateCommandBufferNullQueues>(device, context, queue,
|
||||||
|
num_elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_negative_create_command_buffer_repeated_properties(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements)
|
||||||
|
{
|
||||||
|
return MakeAndRunTest<CreateCommandBufferRepeatedProperties>(
|
||||||
|
device, context, queue, num_elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_negative_create_command_buffer_not_supported_properties(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements)
|
||||||
|
{
|
||||||
|
return MakeAndRunTest<CreateCommandBufferNotSupportedProperties>(
|
||||||
|
device, context, queue, num_elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_negative_create_command_buffer_queue_without_min_properties(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements)
|
||||||
|
{
|
||||||
|
return MakeAndRunTest<CreateCommandBufferQueueWithoutMinProperties>(
|
||||||
|
device, context, queue, num_elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
int test_negative_create_command_buffer_device_does_not_support_out_of_order_queue(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements)
|
||||||
|
{
|
||||||
|
return MakeAndRunTest<
|
||||||
|
CreateCommandBufferDeviceDoesNotSupportOutOfOderQueue>(
|
||||||
|
device, context, queue, num_elements);
|
||||||
|
}
|
||||||
@@ -141,6 +141,25 @@ extern int test_finalize_invalid(cl_device_id device, cl_context context,
|
|||||||
extern int test_finalize_empty(cl_device_id device, cl_context context,
|
extern int test_finalize_empty(cl_device_id device, cl_context context,
|
||||||
cl_command_queue queue, int num_elements);
|
cl_command_queue queue, int num_elements);
|
||||||
// Command-buffer negative tests
|
// Command-buffer negative tests
|
||||||
|
extern int test_negative_create_command_buffer_num_queues(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements);
|
||||||
|
extern int test_negative_create_command_buffer_null_queues(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements);
|
||||||
|
extern int test_negative_create_command_buffer_repeated_properties(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements);
|
||||||
|
extern int test_negative_create_command_buffer_not_supported_properties(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements);
|
||||||
|
extern int test_negative_create_command_buffer_queue_without_min_properties(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements);
|
||||||
|
extern int
|
||||||
|
test_negative_create_command_buffer_device_does_not_support_out_of_order_queue(
|
||||||
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
|
int num_elements);
|
||||||
extern int test_negative_get_command_buffer_info_invalid_command_buffer(
|
extern int test_negative_get_command_buffer_info_invalid_command_buffer(
|
||||||
cl_device_id device, cl_context context, cl_command_queue queue,
|
cl_device_id device, cl_context context, cl_command_queue queue,
|
||||||
int num_elements);
|
int num_elements);
|
||||||
@@ -166,4 +185,5 @@ extern int test_negative_get_command_buffer_info_context(cl_device_id device,
|
|||||||
cl_command_queue queue,
|
cl_command_queue queue,
|
||||||
int num_elements);
|
int num_elements);
|
||||||
|
|
||||||
|
|
||||||
#endif // CL_KHR_COMMAND_BUFFER_PROCS_H
|
#endif // CL_KHR_COMMAND_BUFFER_PROCS_H
|
||||||
|
|||||||
Reference in New Issue
Block a user