diff --git a/opencl/source/cl_device/cl_device.cpp b/opencl/source/cl_device/cl_device.cpp index 5dfd1f19eb..10da13646d 100644 --- a/opencl/source/cl_device/cl_device.cpp +++ b/opencl/source/cl_device/cl_device.cpp @@ -227,7 +227,7 @@ cl_command_queue_capabilities_intel ClDevice::getQueueFamilyCapabilities(EngineG if (hwHelper.isCopyOnlyEngineType(type)) { disabledProperties |= static_cast(CL_QUEUE_CAPABILITY_KERNEL_INTEL); disabledProperties |= static_cast(CL_QUEUE_CAPABILITY_FILL_BUFFER_INTEL); // clEnqueueFillBuffer - disabledProperties |= static_cast(CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL); // clEnqueueReadImage, clEnqueueWriteImage, clEnqueueCopyImage + disabledProperties |= static_cast(CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_INTEL); // clEnqueueCopyImage disabledProperties |= static_cast(CL_QUEUE_CAPABILITY_FILL_IMAGE_INTEL); // clEnqueueFillImage disabledProperties |= static_cast(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_IMAGE_INTEL); // clEnqueueCopyBufferToImage disabledProperties |= static_cast(CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_BUFFER_INTEL); // clEnqueueCopyImageToBuffer diff --git a/opencl/source/command_queue/command_queue.cpp b/opencl/source/command_queue/command_queue.cpp index 322fb4a7b5..cf216524e9 100644 --- a/opencl/source/command_queue/command_queue.cpp +++ b/opencl/source/command_queue/command_queue.cpp @@ -675,13 +675,14 @@ bool CommandQueue::blitEnqueueAllowed(cl_command_type cmdType) const { } bool CommandQueue::blitEnqueueImageAllowed(const size_t *origin, const size_t *region) { - auto blitEnqueueImageAllowed = (origin[0] + region[0] <= BlitterConstants::maxBlitWidth) && (origin[1] + region[1] <= BlitterConstants::maxBlitHeight); + auto blitEnqueuImageAllowed = false; if (DebugManager.flags.EnableBlitterForReadWriteImage.get() != -1) { - blitEnqueueImageAllowed = DebugManager.flags.EnableBlitterForReadWriteImage.get(); + blitEnqueuImageAllowed = DebugManager.flags.EnableBlitterForReadWriteImage.get(); + blitEnqueuImageAllowed &= (origin[0] + region[0] <= BlitterConstants::maxBlitWidth) && (origin[1] + region[1] <= BlitterConstants::maxBlitHeight); } - return blitEnqueueImageAllowed; + return blitEnqueuImageAllowed; } bool CommandQueue::isBlockedCommandStreamRequired(uint32_t commandType, const EventsRequest &eventsRequest, bool blockedQueue) const { diff --git a/opencl/test/unit_test/command_queue/command_queue_tests.cpp b/opencl/test/unit_test/command_queue/command_queue_tests.cpp index 1c169975d5..5da89d3d97 100644 --- a/opencl/test/unit_test/command_queue/command_queue_tests.cpp +++ b/opencl/test/unit_test/command_queue/command_queue_tests.cpp @@ -1196,6 +1196,7 @@ TEST(CommandQueue, giveClCommandWhenCallingBlitEnqueueAllowedThenReturnCorrectVa TEST(CommandQueue, givenCopySizeAndOffsetWhenCallingBlitEnqueueImageAllowedThenReturnCorrectValue) { DebugManagerStateRestore restorer; + DebugManager.flags.EnableBlitterForReadWriteImage.set(1); MockContext context{}; MockCommandQueue queue(&context, context.getDevice(0), 0); diff --git a/opencl/test/unit_test/command_queue/enqueue_read_image_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_read_image_tests.cpp index a899784cb5..123957ef2f 100644 --- a/opencl/test/unit_test/command_queue/enqueue_read_image_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_read_image_tests.cpp @@ -434,6 +434,7 @@ HWTEST_F(EnqueueReadImageTest, givenDeviceWithBlitterSupportWhenEnqueueReadImage DebugManagerStateRestore restorer; DebugManager.flags.OverrideInvalidEngineWithDefault.set(1); DebugManager.flags.EnableBlitterForEnqueueOperations.set(1); + DebugManager.flags.EnableBlitterForReadWriteImage.set(1); auto &capabilityTable = pClDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable; capabilityTable.blitterOperationsSupported = true; @@ -450,6 +451,12 @@ HWTEST_F(EnqueueReadImageTest, givenDeviceWithBlitterSupportWhenEnqueueReadImage EnqueueReadImageHelper<>::enqueueReadImage(mockCmdQ.get(), image.get(), CL_TRUE, origin, region); EXPECT_TRUE(mockCmdQ->isBlitEnqueueImageAllowed); } + { + DebugManager.flags.EnableBlitterForReadWriteImage.set(-1); + size_t region[] = {BlitterConstants::maxBlitWidth, BlitterConstants::maxBlitHeight, 1}; + EnqueueReadImageHelper<>::enqueueReadImage(mockCmdQ.get(), image.get(), CL_TRUE, origin, region); + EXPECT_FALSE(mockCmdQ->isBlitEnqueueImageAllowed); + } { DebugManager.flags.EnableBlitterForReadWriteImage.set(0); size_t region[] = {BlitterConstants::maxBlitWidth, BlitterConstants::maxBlitHeight, 1}; diff --git a/opencl/test/unit_test/command_queue/enqueue_write_image_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_write_image_tests.cpp index d024a5a229..6e03b56e7f 100644 --- a/opencl/test/unit_test/command_queue/enqueue_write_image_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_write_image_tests.cpp @@ -206,6 +206,7 @@ HWTEST_F(EnqueueWriteImageTest, givenDeviceWithBlitterSupportWhenEnqueueWriteIma DebugManagerStateRestore restorer; DebugManager.flags.OverrideInvalidEngineWithDefault.set(1); DebugManager.flags.EnableBlitterForEnqueueOperations.set(1); + DebugManager.flags.EnableBlitterForReadWriteImage.set(1); auto &capabilityTable = pClDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->capabilityTable; capabilityTable.blitterOperationsSupported = true; @@ -222,6 +223,12 @@ HWTEST_F(EnqueueWriteImageTest, givenDeviceWithBlitterSupportWhenEnqueueWriteIma EnqueueWriteImageHelper<>::enqueueWriteImage(mockCmdQ.get(), image.get(), CL_FALSE, origin, region); EXPECT_TRUE(mockCmdQ->isBlitEnqueueImageAllowed); } + { + DebugManager.flags.EnableBlitterForReadWriteImage.set(-1); + size_t region[] = {BlitterConstants::maxBlitWidth, BlitterConstants::maxBlitHeight, 1}; + EnqueueWriteImageHelper<>::enqueueWriteImage(mockCmdQ.get(), image.get(), CL_FALSE, origin, region); + EXPECT_FALSE(mockCmdQ->isBlitEnqueueImageAllowed); + } { DebugManager.flags.EnableBlitterForReadWriteImage.set(0); size_t region[] = {BlitterConstants::maxBlitWidth, BlitterConstants::maxBlitHeight, 1};