diff --git a/runtime/api/api.cpp b/runtime/api/api.cpp index fd630dd233..a21e403e48 100644 --- a/runtime/api/api.cpp +++ b/runtime/api/api.cpp @@ -4455,6 +4455,11 @@ cl_command_queue CL_API_CALL clCreateCommandQueueWithProperties(cl_context conte TRACING_EXIT(clCreateCommandQueueWithProperties, &commandQueue); return commandQueue; } + if (!pDevice->getHardwareInfo().capabilityTable.supportsDeviceEnqueue) { + err.set(CL_INVALID_QUEUE_PROPERTIES); + TRACING_EXIT(clCreateCommandQueueWithProperties, &commandQueue); + return commandQueue; + } } if (commandQueueProperties & static_cast(CL_QUEUE_ON_DEVICE_DEFAULT)) { @@ -4501,6 +4506,7 @@ cl_command_queue CL_API_CALL clCreateCommandQueueWithProperties(cl_context conte pDevice, *properties, retVal); + } else { commandQueue = CommandQueue::create( pContext, diff --git a/unit_tests/api/cl_create_command_queue_with_properties_tests.cpp b/unit_tests/api/cl_create_command_queue_with_properties_tests.cpp index ff29a37dd8..6d15ce0cb8 100644 --- a/unit_tests/api/cl_create_command_queue_with_properties_tests.cpp +++ b/unit_tests/api/cl_create_command_queue_with_properties_tests.cpp @@ -263,6 +263,9 @@ TEST_F(clCreateCommandQueueWithPropertiesApi, GivenDefaultDeviceQueueWithoutQueu } HWCMDTEST_F(IGFX_GEN8_CORE, clCreateCommandQueueWithPropertiesApi, GivenNumberOfDevicesGreaterThanMaxWhenCreatingCommandQueueWithPropertiesThenOutOfResourcesErrorIsReturned) { + if (!this->pContext->getDevice(0u)->getHardwareInfo().capabilityTable.supportsDeviceEnqueue) { + GTEST_SKIP(); + } cl_int retVal = CL_SUCCESS; auto pDevice = castToObject(devices[0]); cl_queue_properties odq[] = {CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE, 0, 0}; @@ -287,6 +290,9 @@ HWCMDTEST_F(IGFX_GEN8_CORE, clCreateCommandQueueWithPropertiesApi, GivenNumberOf } HWCMDTEST_F(IGFX_GEN8_CORE, clCreateCommandQueueWithPropertiesApi, GivenFailedAllocationWhenCreatingCommandQueueWithPropertiesThenOutOfHostMemoryErrorIsReturned) { + if (!this->pContext->getDevice(0u)->getHardwareInfo().capabilityTable.supportsDeviceEnqueue) { + GTEST_SKIP(); + } InjectedFunction method = [this](size_t failureIndex) { cl_queue_properties ooq[] = {CL_QUEUE_PROPERTIES, CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE | CL_QUEUE_ON_DEVICE_DEFAULT, 0, 0}; auto retVal = CL_INVALID_VALUE; diff --git a/unit_tests/api/cl_set_default_device_command_queue_tests.inl b/unit_tests/api/cl_set_default_device_command_queue_tests.inl index 81db3c0dc4..019428486e 100644 --- a/unit_tests/api/cl_set_default_device_command_queue_tests.inl +++ b/unit_tests/api/cl_set_default_device_command_queue_tests.inl @@ -27,13 +27,22 @@ struct clSetDefaultDeviceCommandQueueApiTest : public api_tests { 0, 0}; deviceQueue = clCreateCommandQueueWithProperties(pContext, devices[0], properties, &retVal); - ASSERT_NE(nullptr, deviceQueue); - ASSERT_EQ(CL_SUCCESS, retVal); + + if (!pContext->getDevice(0u)->getHardwareInfo().capabilityTable.supportsDeviceEnqueue) { + ASSERT_EQ(nullptr, deviceQueue); + EXPECT_EQ(CL_INVALID_QUEUE_PROPERTIES, retVal); + GTEST_SKIP(); + } else { + ASSERT_NE(nullptr, deviceQueue); + ASSERT_EQ(CL_SUCCESS, retVal); + } } void TearDown() override { - retVal = clReleaseCommandQueue(deviceQueue); - EXPECT_EQ(CL_SUCCESS, retVal); + if (deviceQueue) { + retVal = clReleaseCommandQueue(deviceQueue); + EXPECT_EQ(CL_SUCCESS, retVal); + } api_tests::TearDown(); } diff --git a/unit_tests/device_queue/device_queue_tests.cpp b/unit_tests/device_queue/device_queue_tests.cpp index 1f45ec7a3a..ff1d5ed718 100644 --- a/unit_tests/device_queue/device_queue_tests.cpp +++ b/unit_tests/device_queue/device_queue_tests.cpp @@ -48,6 +48,10 @@ class DeviceQueueTest : public DeviceHostQueueFixture { void SetUp() override { BaseClass::SetUp(); device = castToObject(devices[0]); + + if (!device->getHardwareInfo().capabilityTable.supportsDeviceEnqueue) { + GTEST_SKIP(); + } ASSERT_NE(device, nullptr); } diff --git a/unit_tests/device_queue/get_device_queue_info_tests.cpp b/unit_tests/device_queue/get_device_queue_info_tests.cpp index 4258d4769d..f2e56033f7 100644 --- a/unit_tests/device_queue/get_device_queue_info_tests.cpp +++ b/unit_tests/device_queue/get_device_queue_info_tests.cpp @@ -17,6 +17,9 @@ class GetDeviceQueueInfoTest : public DeviceHostQueueFixture { void SetUp() override { BaseClass::SetUp(); + if (!this->pContext->getDevice(0u)->getHardwareInfo().capabilityTable.supportsDeviceEnqueue) { + GTEST_SKIP(); + } deviceQueue = createQueueObject(deviceQueueProperties::allProperties); ASSERT_NE(deviceQueue, nullptr); } @@ -27,7 +30,7 @@ class GetDeviceQueueInfoTest : public DeviceHostQueueFixture { BaseClass::TearDown(); } - DeviceQueue *deviceQueue; + DeviceQueue *deviceQueue = nullptr; }; HWCMDTEST_F(IGFX_GEN8_CORE, GetDeviceQueueInfoTest, context) { diff --git a/unit_tests/fixtures/device_host_queue_fixture.h b/unit_tests/fixtures/device_host_queue_fixture.h index ce0ef7c4b3..6ccbf6589d 100644 --- a/unit_tests/fixtures/device_host_queue_fixture.h +++ b/unit_tests/fixtures/device_host_queue_fixture.h @@ -58,6 +58,9 @@ class DeviceQueueHwTest : public DeviceHostQueueFixture { BaseClass::SetUp(); device = castToObject(devices[0]); ASSERT_NE(device, nullptr); + if (!device->getHardwareInfo().capabilityTable.supportsDeviceEnqueue) { + GTEST_SKIP(); + } } void TearDown() override { diff --git a/unit_tests/kernel/kernel_arg_dev_queue_tests.cpp b/unit_tests/kernel/kernel_arg_dev_queue_tests.cpp index 761456e00e..0b8a995466 100644 --- a/unit_tests/kernel/kernel_arg_dev_queue_tests.cpp +++ b/unit_tests/kernel/kernel_arg_dev_queue_tests.cpp @@ -20,6 +20,9 @@ struct KernelArgDevQueueTest : public DeviceFixture, void SetUp() override { DeviceFixture::SetUp(); DeviceHostQueueFixture::SetUp(); + if (!this->pDevice->getHardwareInfo().capabilityTable.supportsDeviceEnqueue) { + GTEST_SKIP(); + } pDeviceQueue = createQueueObject();