From ce2f1468b7d676d3e7f9ee6af6c020be37bece54 Mon Sep 17 00:00:00 2001 From: "Woloszyn, Wojciech" Date: Wed, 21 Mar 2018 14:35:26 +0100 Subject: [PATCH] Implement cl_khr_mipmap_image [2/n] - Add mipmap handling for clEnqueueCopyImage - Add mipmap handling for clEnqueueCopyImageToBuffer - Add mipmap handling for clEnqueueCopyBufferToImage - Fix typos Change-Id: Ie1a23b1699135afa17fe11bcba3c1e8bdf9a3dd9 --- runtime/built_ins/built_ins.cpp | 4 +- .../enqueue_copy_buffer_to_image.h | 4 + runtime/command_queue/enqueue_copy_image.h | 7 + .../enqueue_copy_image_to_buffer.h | 4 + .../enqueue_copy_buffer_to_image_fixture.h | 28 +++- .../enqueue_copy_buffer_to_image_tests.cpp | 85 ++++++++++++ .../enqueue_copy_image_fixture.h | 19 ++- .../enqueue_copy_image_tests.cpp | 126 ++++++++++++++++++ .../enqueue_copy_image_to_buffer_fixture.h | 27 +++- .../enqueue_copy_image_to_buffer_tests.cpp | 84 ++++++++++++ unit_tests/mem_obj/image_set_arg_tests.cpp | 2 +- 11 files changed, 384 insertions(+), 6 deletions(-) diff --git a/runtime/built_ins/built_ins.cpp b/runtime/built_ins/built_ins.cpp index fa921b6536..aa5a2df18d 100644 --- a/runtime/built_ins/built_ins.cpp +++ b/runtime/built_ins/built_ins.cpp @@ -688,10 +688,10 @@ class BuiltInOp : public BuiltinDispa kernelNoSplit3DBuilder.setKernel(kernel); // Set-up source image - kernelNoSplit3DBuilder.setArg(0, srcImageRedescribed); + kernelNoSplit3DBuilder.setArg(0, srcImageRedescribed, operationParams.srcMipLevel); // Set-up destination image - kernelNoSplit3DBuilder.setArg(1, dstImageRedescribed); + kernelNoSplit3DBuilder.setArg(1, dstImageRedescribed, operationParams.dstMipLevel); // Set-up srcOrigin { diff --git a/runtime/command_queue/enqueue_copy_buffer_to_image.h b/runtime/command_queue/enqueue_copy_buffer_to_image.h index d02158365d..8064696817 100644 --- a/runtime/command_queue/enqueue_copy_buffer_to_image.h +++ b/runtime/command_queue/enqueue_copy_buffer_to_image.h @@ -26,6 +26,7 @@ #include "runtime/command_stream/command_stream_receiver.h" #include "runtime/helpers/surface_formats.h" #include "runtime/helpers/kernel_commands.h" +#include "runtime/helpers/mipmap.h" #include "runtime/mem_obj/buffer.h" #include "runtime/mem_obj/image.h" #include "runtime/memory_manager/surface.h" @@ -61,6 +62,9 @@ cl_int CommandQueueHw::enqueueCopyBufferToImage( dc.srcOffset = {srcOffset, 0, 0}; dc.dstOffset = dstOrigin; dc.size = region; + if (dstImage->getImageDesc().num_mip_levels > 0) { + dc.dstMipLevel = findMipLevel(dstImage->getImageDesc().image_type, dstOrigin); + } builder.buildDispatchInfos(di, dc); enqueueHandler( diff --git a/runtime/command_queue/enqueue_copy_image.h b/runtime/command_queue/enqueue_copy_image.h index 52922a76fc..691d9f7afb 100644 --- a/runtime/command_queue/enqueue_copy_image.h +++ b/runtime/command_queue/enqueue_copy_image.h @@ -27,6 +27,7 @@ #include "runtime/command_stream/command_stream_receiver.h" #include "runtime/helpers/kernel_commands.h" #include "runtime/helpers/basic_math.h" +#include "runtime/helpers/mipmap.h" #include "runtime/mem_obj/image.h" #include "runtime/memory_manager/surface.h" #include @@ -61,6 +62,12 @@ cl_int CommandQueueHw::enqueueCopyImage( dc.srcOffset = srcOrigin; dc.dstOffset = dstOrigin; dc.size = region; + if (srcImage->getImageDesc().num_mip_levels > 0) { + dc.srcMipLevel = findMipLevel(srcImage->getImageDesc().image_type, srcOrigin); + } + if (dstImage->getImageDesc().num_mip_levels > 0) { + dc.dstMipLevel = findMipLevel(dstImage->getImageDesc().image_type, dstOrigin); + } builder.buildDispatchInfos(di, dc); enqueueHandler( diff --git a/runtime/command_queue/enqueue_copy_image_to_buffer.h b/runtime/command_queue/enqueue_copy_image_to_buffer.h index 1df7dc4323..c2a0ca520e 100644 --- a/runtime/command_queue/enqueue_copy_image_to_buffer.h +++ b/runtime/command_queue/enqueue_copy_image_to_buffer.h @@ -26,6 +26,7 @@ #include "runtime/command_stream/command_stream_receiver.h" #include "runtime/helpers/surface_formats.h" #include "runtime/helpers/kernel_commands.h" +#include "runtime/helpers/mipmap.h" #include "runtime/mem_obj/buffer.h" #include "runtime/mem_obj/image.h" #include "runtime/memory_manager/surface.h" @@ -61,6 +62,9 @@ cl_int CommandQueueHw::enqueueCopyImageToBuffer( dc.srcOffset = srcOrigin; dc.dstOffset = {dstOffset, 0, 0}; dc.size = region; + if (srcImage->getImageDesc().num_mip_levels > 0) { + dc.srcMipLevel = findMipLevel(srcImage->getImageDesc().image_type, srcOrigin); + } builder.buildDispatchInfos(di, dc); enqueueHandler( diff --git a/unit_tests/command_queue/enqueue_copy_buffer_to_image_fixture.h b/unit_tests/command_queue/enqueue_copy_buffer_to_image_fixture.h index 720374c424..caffcb6452 100644 --- a/unit_tests/command_queue/enqueue_copy_buffer_to_image_fixture.h +++ b/unit_tests/command_queue/enqueue_copy_buffer_to_image_fixture.h @@ -69,4 +69,30 @@ struct EnqueueCopyBufferToImageTest : public CommandEnqueueFixture, Buffer *srcBuffer; Image *dstImage; }; -} + +struct EnqueueCopyBufferToImageMipMapTest : public CommandEnqueueFixture, + public ::testing::Test, + public ::testing::WithParamInterface { + + EnqueueCopyBufferToImageMipMapTest() : srcBuffer(nullptr) { + } + + virtual void SetUp(void) override { + CommandEnqueueFixture::SetUp(); + BufferDefaults::context = new MockContext(pDevice); + context = new MockContext(pDevice); + srcBuffer = BufferHelper<>::create(context); + } + + virtual void TearDown(void) override { + delete srcBuffer; + delete BufferDefaults::context; + delete context; + CommandEnqueueFixture::TearDown(); + } + + MockContext *context; + Buffer *srcBuffer; +}; + +} // namespace OCLRT diff --git a/unit_tests/command_queue/enqueue_copy_buffer_to_image_tests.cpp b/unit_tests/command_queue/enqueue_copy_buffer_to_image_tests.cpp index d445634c18..67833a9c03 100644 --- a/unit_tests/command_queue/enqueue_copy_buffer_to_image_tests.cpp +++ b/unit_tests/command_queue/enqueue_copy_buffer_to_image_tests.cpp @@ -24,6 +24,7 @@ #include "unit_tests/command_queue/enqueue_copy_buffer_to_image_fixture.h" #include "test.h" #include +#include "unit_tests/mocks/mock_builtin_dispatch_info_builder.h" using namespace OCLRT; @@ -253,3 +254,87 @@ HWTEST_F(EnqueueCopyBufferToImageTest, mediaVFEState) { // Generically validate this command FamilyType::PARSE::template validateCommand(cmdList.begin(), itorMediaVfeState); } + +typedef EnqueueCopyBufferToImageMipMapTest MipMapCopyBufferToImageTest; + +HWTEST_P(MipMapCopyBufferToImageTest, GivenImageWithMipLevelNonZeroWhenCopyBufferToImageIsCalledThenProperMipLevelIsSet) { + auto image_type = (cl_mem_object_type)GetParam(); + auto &origBuilder = BuiltIns::getInstance().getBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyBufferToImage3d, + pCmdQ->getContext(), + pCmdQ->getDevice()); + + // substitute original builder with mock builder + auto oldBuilder = BuiltIns::getInstance().setBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyBufferToImage3d, + pCmdQ->getContext(), + pCmdQ->getDevice(), + std::unique_ptr(new MockBuiltinDispatchInfoBuilder(BuiltIns::getInstance(), &origBuilder))); + + cl_int retVal = CL_SUCCESS; + cl_image_desc imageDesc = {}; + uint32_t expectedMipLevel = 3; + imageDesc.image_type = image_type; + imageDesc.num_mip_levels = 10; + imageDesc.image_width = 4; + imageDesc.image_height = 1; + imageDesc.image_depth = 1; + size_t origin[] = {0, 0, 0, 0}; + size_t region[] = {imageDesc.image_width, 1, 1}; + std::unique_ptr image; + switch (image_type) { + case CL_MEM_OBJECT_IMAGE1D: + origin[1] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + case CL_MEM_OBJECT_IMAGE1D_ARRAY: + imageDesc.image_array_size = 2; + origin[2] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + case CL_MEM_OBJECT_IMAGE2D: + origin[2] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + case CL_MEM_OBJECT_IMAGE2D_ARRAY: + imageDesc.image_array_size = 2; + origin[3] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + case CL_MEM_OBJECT_IMAGE3D: + origin[3] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + } + EXPECT_NE(nullptr, image.get()); + + std::unique_ptr ptr = std::unique_ptr(new uint32_t[3]); + retVal = pCmdQ->enqueueCopyBufferToImage(srcBuffer, + image.get(), + 0, + origin, + region, + 0, + nullptr, + nullptr); + + EXPECT_EQ(CL_SUCCESS, retVal); + + auto &mockBuilder = static_cast(BuiltIns::getInstance().getBuiltinDispatchInfoBuilder(EBuiltInOps::CopyBufferToImage3d, + pCmdQ->getContext(), + pCmdQ->getDevice())); + auto params = mockBuilder.getBuiltinOpParams(); + + EXPECT_EQ(expectedMipLevel, params->dstMipLevel); + + // restore original builder and retrieve mock builder + auto newBuilder = BuiltIns::getInstance().setBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyBufferToImage3d, + pCmdQ->getContext(), + pCmdQ->getDevice(), + std::move(oldBuilder)); + EXPECT_NE(nullptr, newBuilder); +} + +INSTANTIATE_TEST_CASE_P(MipMapCopyBufferToImageTest_GivenImageWithMipLevelNonZeroWhenCopyBufferToImageIsCalledThenProperMipLevelIsSet, + MipMapCopyBufferToImageTest, ::testing::Values(CL_MEM_OBJECT_IMAGE1D, CL_MEM_OBJECT_IMAGE1D_ARRAY, CL_MEM_OBJECT_IMAGE2D, CL_MEM_OBJECT_IMAGE2D_ARRAY, CL_MEM_OBJECT_IMAGE3D)); diff --git a/unit_tests/command_queue/enqueue_copy_image_fixture.h b/unit_tests/command_queue/enqueue_copy_image_fixture.h index b9d1b3cef1..45a9d9c730 100644 --- a/unit_tests/command_queue/enqueue_copy_image_fixture.h +++ b/unit_tests/command_queue/enqueue_copy_image_fixture.h @@ -66,4 +66,21 @@ struct EnqueueCopyImageTest : public CommandEnqueueFixture, Image *srcImage; Image *dstImage; }; -} + +struct EnqueueCopyImageMipMapTest : public CommandEnqueueFixture, + public ::testing::Test, + public ::testing::WithParamInterface> { + + void SetUp(void) override { + CommandEnqueueFixture::SetUp(); + context = new MockContext(pDevice); + } + + virtual void TearDown(void) override { + delete context; + CommandEnqueueFixture::TearDown(); + } + + MockContext *context; +}; +} // namespace OCLRT diff --git a/unit_tests/command_queue/enqueue_copy_image_tests.cpp b/unit_tests/command_queue/enqueue_copy_image_tests.cpp index 4c5f59003c..abc7084d1f 100644 --- a/unit_tests/command_queue/enqueue_copy_image_tests.cpp +++ b/unit_tests/command_queue/enqueue_copy_image_tests.cpp @@ -24,6 +24,7 @@ #include "unit_tests/command_queue/enqueue_copy_image_fixture.h" #include "test.h" #include +#include "unit_tests/mocks/mock_builtin_dispatch_info_builder.h" using namespace OCLRT; @@ -262,3 +263,128 @@ HWTEST_F(EnqueueCopyImageTest, mediaVFEState) { // Generically validate this command FamilyType::PARSE::template validateCommand(cmdList.begin(), itorMediaVfeState); } + +typedef EnqueueCopyImageMipMapTest MipMapCopyImageTest; + +HWTEST_P(MipMapCopyImageTest, GivenImagesWithNonZeroMipLevelsWhenCopyImageIsCalledThenProperMipLevelsAreSet) { + cl_mem_object_type srcImageType, dstImageType; + std::tie(srcImageType, dstImageType) = GetParam(); + auto &origBuilder = BuiltIns::getInstance().getBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyImageToImage3d, + pCmdQ->getContext(), + pCmdQ->getDevice()); + // substitute original builder with mock builder + auto oldBuilder = BuiltIns::getInstance().setBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyImageToImage3d, + pCmdQ->getContext(), + pCmdQ->getDevice(), + std::unique_ptr(new MockBuiltinDispatchInfoBuilder(BuiltIns::getInstance(), &origBuilder))); + + cl_int retVal = CL_SUCCESS; + cl_image_desc srcImageDesc = {}; + uint32_t expectedSrcMipLevel = 3; + uint32_t expectedDstMipLevel = 4; + srcImageDesc.image_type = srcImageType; + srcImageDesc.num_mip_levels = 10; + srcImageDesc.image_width = 4; + srcImageDesc.image_height = 1; + srcImageDesc.image_depth = 1; + + cl_image_desc dstImageDesc = srcImageDesc; + dstImageDesc.image_type = dstImageType; + + size_t srcOrigin[] = {0, 0, 0, 0}; + size_t dstOrigin[] = {0, 0, 0, 0}; + size_t region[] = {srcImageDesc.image_width, 1, 1}; + std::unique_ptr srcImage; + std::unique_ptr dstImage; + + switch (srcImageType) { + case CL_MEM_OBJECT_IMAGE1D: + srcOrigin[1] = expectedSrcMipLevel; + srcImage = std::unique_ptr(ImageHelper::create(context, &srcImageDesc)); + break; + case CL_MEM_OBJECT_IMAGE1D_ARRAY: + srcImageDesc.image_array_size = 2; + srcOrigin[2] = expectedSrcMipLevel; + srcImage = std::unique_ptr(ImageHelper::create(context, &srcImageDesc)); + break; + case CL_MEM_OBJECT_IMAGE2D: + srcOrigin[2] = expectedSrcMipLevel; + srcImage = std::unique_ptr(ImageHelper::create(context, &srcImageDesc)); + break; + case CL_MEM_OBJECT_IMAGE2D_ARRAY: + srcImageDesc.image_array_size = 2; + srcOrigin[3] = expectedSrcMipLevel; + srcImage = std::unique_ptr(ImageHelper::create(context, &srcImageDesc)); + break; + case CL_MEM_OBJECT_IMAGE3D: + srcOrigin[3] = expectedSrcMipLevel; + srcImage = std::unique_ptr(ImageHelper::create(context, &srcImageDesc)); + break; + } + + EXPECT_NE(nullptr, srcImage.get()); + + switch (dstImageType) { + case CL_MEM_OBJECT_IMAGE1D: + dstOrigin[1] = expectedDstMipLevel; + dstImage = std::unique_ptr(ImageHelper::create(context, &dstImageDesc)); + break; + case CL_MEM_OBJECT_IMAGE1D_ARRAY: + dstImageDesc.image_array_size = 2; + dstOrigin[2] = expectedDstMipLevel; + dstImage = std::unique_ptr(ImageHelper::create(context, &dstImageDesc)); + break; + case CL_MEM_OBJECT_IMAGE2D: + dstOrigin[2] = expectedDstMipLevel; + dstImage = std::unique_ptr(ImageHelper::create(context, &dstImageDesc)); + break; + case CL_MEM_OBJECT_IMAGE2D_ARRAY: + dstImageDesc.image_array_size = 2; + dstOrigin[3] = expectedDstMipLevel; + dstImage = std::unique_ptr(ImageHelper::create(context, &dstImageDesc)); + break; + case CL_MEM_OBJECT_IMAGE3D: + dstOrigin[3] = expectedDstMipLevel; + dstImage = std::unique_ptr(ImageHelper::create(context, &dstImageDesc)); + break; + } + + EXPECT_NE(nullptr, dstImage.get()); + + retVal = pCmdQ->enqueueCopyImage(srcImage.get(), + dstImage.get(), + srcOrigin, + dstOrigin, + region, + 0, + nullptr, + nullptr); + + EXPECT_EQ(CL_SUCCESS, retVal); + + auto &mockBuilder = static_cast(BuiltIns::getInstance().getBuiltinDispatchInfoBuilder(EBuiltInOps::CopyImageToImage3d, + pCmdQ->getContext(), + pCmdQ->getDevice())); + auto params = mockBuilder.getBuiltinOpParams(); + + EXPECT_EQ(expectedSrcMipLevel, params->srcMipLevel); + EXPECT_EQ(expectedDstMipLevel, params->dstMipLevel); + + // restore original builder and retrieve mock builder + auto newBuilder = BuiltIns::getInstance().setBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyImageToImage3d, + pCmdQ->getContext(), + pCmdQ->getDevice(), + std::move(oldBuilder)); + EXPECT_NE(nullptr, newBuilder); +} + +uint32_t types[] = {CL_MEM_OBJECT_IMAGE1D, CL_MEM_OBJECT_IMAGE1D_ARRAY, CL_MEM_OBJECT_IMAGE2D, CL_MEM_OBJECT_IMAGE2D_ARRAY, CL_MEM_OBJECT_IMAGE3D}; + +INSTANTIATE_TEST_CASE_P(MipMapCopyImageTest_GivenImagesWithNonZeroMipLevelsWhenCopyImageIsCalledThenProperMipLevelsAreSet, + MipMapCopyImageTest, + ::testing::Combine( + ::testing::ValuesIn(types), + ::testing::ValuesIn(types))); \ No newline at end of file diff --git a/unit_tests/command_queue/enqueue_copy_image_to_buffer_fixture.h b/unit_tests/command_queue/enqueue_copy_image_to_buffer_fixture.h index 1b39f059df..636e3bee5e 100644 --- a/unit_tests/command_queue/enqueue_copy_image_to_buffer_fixture.h +++ b/unit_tests/command_queue/enqueue_copy_image_to_buffer_fixture.h @@ -68,4 +68,29 @@ struct EnqueueCopyImageToBufferTest : public CommandEnqueueFixture, Image *srcImage; Buffer *dstBuffer; }; -} + +struct EnqueueCopyImageToBufferMipMapTest : public CommandEnqueueFixture, + public ::testing::Test, + public ::testing::WithParamInterface { + + EnqueueCopyImageToBufferMipMapTest() : dstBuffer(nullptr) { + } + + virtual void SetUp(void) override { + CommandEnqueueFixture::SetUp(); + BufferDefaults::context = new MockContext(pDevice); + context = new MockContext(pDevice); + dstBuffer = BufferHelper<>::create(context); + } + + virtual void TearDown(void) override { + delete dstBuffer; + delete BufferDefaults::context; + delete context; + CommandEnqueueFixture::TearDown(); + } + + MockContext *context; + Buffer *dstBuffer; +}; +} // namespace OCLRT diff --git a/unit_tests/command_queue/enqueue_copy_image_to_buffer_tests.cpp b/unit_tests/command_queue/enqueue_copy_image_to_buffer_tests.cpp index 9e06e05a39..15348af152 100644 --- a/unit_tests/command_queue/enqueue_copy_image_to_buffer_tests.cpp +++ b/unit_tests/command_queue/enqueue_copy_image_to_buffer_tests.cpp @@ -24,6 +24,7 @@ #include "unit_tests/command_queue/enqueue_copy_image_to_buffer_fixture.h" #include "test.h" #include +#include "unit_tests/mocks/mock_builtin_dispatch_info_builder.h" using namespace OCLRT; @@ -254,3 +255,86 @@ HWTEST_F(EnqueueCopyImageToBufferTest, mediaVFEState) { // Generically validate this command FamilyType::PARSE::template validateCommand(cmdList.begin(), itorMediaVfeState); } + +typedef EnqueueCopyImageToBufferMipMapTest MipMapCopyImageToBufferTest; + +HWTEST_P(MipMapCopyImageToBufferTest, GivenImageWithMipLevelNonZeroWhenCopyImageToBufferIsCalledThenProperMipLevelIsSet) { + auto image_type = (cl_mem_object_type)GetParam(); + auto &origBuilder = BuiltIns::getInstance().getBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyImage3dToBuffer, + pCmdQ->getContext(), + pCmdQ->getDevice()); + + // substitute original builder with mock builder + auto oldBuilder = BuiltIns::getInstance().setBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyImage3dToBuffer, + pCmdQ->getContext(), + pCmdQ->getDevice(), + std::unique_ptr(new MockBuiltinDispatchInfoBuilder(BuiltIns::getInstance(), &origBuilder))); + + cl_int retVal = CL_SUCCESS; + cl_image_desc imageDesc = {}; + uint32_t expectedMipLevel = 3; + imageDesc.image_type = image_type; + imageDesc.num_mip_levels = 10; + imageDesc.image_width = 4; + imageDesc.image_height = 1; + imageDesc.image_depth = 1; + size_t origin[] = {0, 0, 0, 0}; + size_t region[] = {imageDesc.image_width, 1, 1}; + std::unique_ptr image; + switch (image_type) { + case CL_MEM_OBJECT_IMAGE1D: + origin[1] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + case CL_MEM_OBJECT_IMAGE1D_ARRAY: + imageDesc.image_array_size = 2; + origin[2] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + case CL_MEM_OBJECT_IMAGE2D: + origin[2] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + case CL_MEM_OBJECT_IMAGE2D_ARRAY: + imageDesc.image_array_size = 2; + origin[3] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + case CL_MEM_OBJECT_IMAGE3D: + origin[3] = expectedMipLevel; + image = std::unique_ptr(ImageHelper::create(context, &imageDesc)); + break; + } + EXPECT_NE(nullptr, image.get()); + + retVal = pCmdQ->enqueueCopyImageToBuffer(image.get(), + dstBuffer, + origin, + region, + 0, + 0, + nullptr, + nullptr); + + EXPECT_EQ(CL_SUCCESS, retVal); + + auto &mockBuilder = static_cast(BuiltIns::getInstance().getBuiltinDispatchInfoBuilder(EBuiltInOps::CopyImage3dToBuffer, + pCmdQ->getContext(), + pCmdQ->getDevice())); + auto params = mockBuilder.getBuiltinOpParams(); + + EXPECT_EQ(expectedMipLevel, params->srcMipLevel); + + // restore original builder and retrieve mock builder + auto newBuilder = BuiltIns::getInstance().setBuiltinDispatchInfoBuilder( + EBuiltInOps::CopyImage3dToBuffer, + pCmdQ->getContext(), + pCmdQ->getDevice(), + std::move(oldBuilder)); + EXPECT_NE(nullptr, newBuilder); +} + +INSTANTIATE_TEST_CASE_P(MipMapCopyImageToBufferTest_GivenImageWithMipLevelNonZeroWhenCopyImageToBufferIsCalledThenProperMipLevelIsSet, + MipMapCopyImageToBufferTest, ::testing::Values(CL_MEM_OBJECT_IMAGE1D, CL_MEM_OBJECT_IMAGE1D_ARRAY, CL_MEM_OBJECT_IMAGE2D, CL_MEM_OBJECT_IMAGE2D_ARRAY, CL_MEM_OBJECT_IMAGE3D)); diff --git a/unit_tests/mem_obj/image_set_arg_tests.cpp b/unit_tests/mem_obj/image_set_arg_tests.cpp index 00c7b98eb1..825f4364d9 100644 --- a/unit_tests/mem_obj/image_set_arg_tests.cpp +++ b/unit_tests/mem_obj/image_set_arg_tests.cpp @@ -292,7 +292,7 @@ HWTEST_F(ImageSetArgTest, clSetKernelArgImage) { } } -HWTEST_F(ImageSetArgTest, givenImage2DWithMipMapsWhenSetKernelArgIsCalledThenMipLevelAndMipCounttIsSet) { +HWTEST_F(ImageSetArgTest, givenImage2DWithMipMapsWhenSetKernelArgIsCalledThenMipLevelAndMipCountIsSet) { typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE; cl_mem memObj = srcImage; int mipLevel = 2;