diff --git a/opencl/source/command_queue/command_queue.cpp b/opencl/source/command_queue/command_queue.cpp index 5ddac0311b..160055e9b6 100644 --- a/opencl/source/command_queue/command_queue.cpp +++ b/opencl/source/command_queue/command_queue.cpp @@ -756,6 +756,8 @@ bool CommandQueue::blitEnqueueImageAllowed(const size_t *origin, const size_t *r blitEnqueuImageAllowed &= (origin[0] + region[0] <= BlitterConstants::maxBlitWidth) && (origin[1] + region[1] <= BlitterConstants::maxBlitHeight); blitEnqueuImageAllowed &= !isMipMapped(image.getImageDesc()); + blitEnqueuImageAllowed &= !IsNV12Image(&image.getImageFormat()); + return blitEnqueuImageAllowed; } 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 75a06d4afb..11bd1a7d3f 100644 --- a/opencl/test/unit_test/command_queue/command_queue_tests.cpp +++ b/opencl/test/unit_test/command_queue/command_queue_tests.cpp @@ -1353,6 +1353,23 @@ TEST(CommandQueue, givenMipMappedImageWhenCallingBlitEnqueueImageAllowedThenCorr EXPECT_FALSE(queue.blitEnqueueImageAllowed(correctOrigin, correctRegion, image)); } +TEST(CommandQueue, givenNV12ImageWhenCallingBlitEnqueueImageAllowedThenCorrectResultIsReturned) { + DebugManagerStateRestore restorer; + DebugManager.flags.EnableBlitterForReadWriteImage.set(1); + MockContext context{}; + MockCommandQueue queue(&context, context.getDevice(0), 0); + + size_t correctRegion[3] = {10u, 10u, 0}; + size_t correctOrigin[3] = {1u, 1u, 0}; + MockImageBase image; + + image.imageFormat.image_channel_order = CL_NV12_INTEL; + EXPECT_FALSE(queue.blitEnqueueImageAllowed(correctOrigin, correctRegion, image)); + + image.imageFormat.image_channel_order = CL_RGBA; + EXPECT_TRUE(queue.blitEnqueueImageAllowed(correctOrigin, correctRegion, image)); +} + TEST(CommandQueue, givenSupportForOperationWhenValidatingSupportThenReturnSuccess) { MockCommandQueue queue{}; diff --git a/opencl/test/unit_test/mocks/mock_image.h b/opencl/test/unit_test/mocks/mock_image.h index 12ae25f5c7..78bb1c4f56 100644 --- a/opencl/test/unit_test/mocks/mock_image.h +++ b/opencl/test/unit_test/mocks/mock_image.h @@ -17,6 +17,7 @@ namespace NEO { struct MockImageBase : public Image { using Image::imageDesc; + using Image::imageFormat; MockGraphicsAllocation *graphicsAllocation = nullptr; MockImageBase() : Image(