From 1995a7fbcf1dda1dc62fd039e2b65957134ce775 Mon Sep 17 00:00:00 2001 From: Damian Tomczak Date: Tue, 18 Mar 2025 15:55:03 +0000 Subject: [PATCH] feature: additional fixes to enable feature and adjusting builtins types Resolves: NEO-13973 Signed-off-by: Damian Tomczak --- .../sources/cmdlist/test_cmdlist_4.cpp | 3 ++- .../sources/cmdlist/test_cmdlist_7.cpp | 3 ++- .../cmdlist/test_cmdlist_append_memory.cpp | 6 +++-- .../cmdlist/test_in_order_cmdlist_1.cpp | 2 +- .../source/command_queue/enqueue_read_image.h | 4 ++- .../command_queue/enqueue_write_image.h | 4 ++- .../command_queue/command_enqueue_fixture.h | 27 ++++++++++++++++++- .../command_queue_hw_2_tests.cpp | 13 ++++----- .../enqueue_copy_buffer_to_image_fixture.h | 1 + .../enqueue_copy_buffer_to_image_tests.cpp | 5 ++-- .../enqueue_copy_image_fixture.h | 1 + .../enqueue_copy_image_tests.cpp | 11 +++----- .../enqueue_copy_image_to_buffer_fixture.h | 1 + .../enqueue_copy_image_to_buffer_tests.cpp | 6 ++++- .../enqueue_fill_image_tests.cpp | 6 ++--- .../enqueue_read_image_fixture.h | 1 + .../enqueue_read_image_tests.cpp | 17 +++++++----- .../enqueue_write_image_fixture.h | 1 + .../enqueue_write_image_tests.cpp | 21 ++++++++------- .../linux/cl_drm_memory_manager_tests.cpp | 2 +- shared/test/common/cmd_parse/hw_parse.h | 3 ++- .../helpers/compiler_product_helper_tests.cpp | 2 +- 22 files changed, 94 insertions(+), 46 deletions(-) diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp index fab871df96..5f901c79d3 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp @@ -10,6 +10,7 @@ #include "shared/source/command_container/command_encoder.h" #include "shared/source/command_container/encode_surface_state.h" #include "shared/source/gmm_helper/gmm_helper.h" +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/helpers/definitions/command_encoder_args.h" #include "shared/source/helpers/gfx_core_helper.h" #include "shared/source/indirect_heap/indirect_heap.h" @@ -1034,7 +1035,7 @@ HWTEST2_F(HostPointerManagerCommandListTest, givenCommandListWhenMemoryFillWithS auto pc = genCmdCast(*cmdList.rbegin()); - if (NEO::MemorySynchronizationCommands::getDcFlushEnable(true, device->getNEODevice()->getRootDeviceEnvironment())) { + if (!device->getProductHelper().isL3FlushAfterPostSyncRequired(device->getCompilerProductHelper().isHeaplessModeEnabled()) && NEO::MemorySynchronizationCommands::getDcFlushEnable(true, device->getNEODevice()->getRootDeviceEnvironment())) { EXPECT_NE(nullptr, pc); EXPECT_TRUE(pc->getDcFlushEnable()); } else { diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp index 3c4f47c6ea..f21912c49e 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_7.cpp @@ -5,6 +5,7 @@ * */ +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/test/common/helpers/unit_test_helper.h" #include "shared/test/common/libult/ult_command_stream_receiver.h" #include "shared/test/common/mocks/mock_device.h" @@ -624,7 +625,7 @@ HWTEST2_F(CommandListCreate, givenCommandListAndHostPointersWhenMemoryCopyCalled auto pc = genCmdCast(*genCmdList.rbegin()); - if (NEO::MemorySynchronizationCommands::getDcFlushEnable(true, device->getNEODevice()->getRootDeviceEnvironment())) { + if (!device->getProductHelper().isL3FlushAfterPostSyncRequired(device->getCompilerProductHelper().isHeaplessModeEnabled()) && NEO::MemorySynchronizationCommands::getDcFlushEnable(true, device->getNEODevice()->getRootDeviceEnvironment())) { EXPECT_NE(nullptr, pc); EXPECT_TRUE(pc->getDcFlushEnable()); } else { diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_memory.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_memory.cpp index f43a268e6b..e0b975636f 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_memory.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_memory.cpp @@ -6,6 +6,7 @@ */ #include "shared/source/command_container/encode_surface_state.h" +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/helpers/gfx_core_helper.h" #include "shared/source/helpers/register_offsets.h" #include "shared/source/memory_manager/internal_allocation_storage.h" @@ -321,7 +322,7 @@ HWTEST2_F(AppendMemoryCopyTests, givenCommandListAndHostPointersWhenMemoryCopyRe auto pc = genCmdCast(*genCmdList.rbegin()); - if (NEO::MemorySynchronizationCommands::getDcFlushEnable(true, device->getNEODevice()->getRootDeviceEnvironment())) { + if (!device->getProductHelper().isL3FlushAfterPostSyncRequired(device->getCompilerProductHelper().isHeaplessModeEnabled()) && NEO::MemorySynchronizationCommands::getDcFlushEnable(true, device->getNEODevice()->getRootDeviceEnvironment())) { EXPECT_NE(nullptr, pc); EXPECT_TRUE(pc->getDcFlushEnable()); } else { @@ -674,8 +675,9 @@ HWTEST2_F(AppendMemoryCopyTests, givenCommandListAndHostPointersWhenMemoryCopyCa } itor++; } + uint32_t expectedDcFlushPipeControl = - NEO::MemorySynchronizationCommands::getDcFlushEnable(true, device->getNEODevice()->getRootDeviceEnvironment()) ? 1 : 0; + !device->getProductHelper().isL3FlushAfterPostSyncRequired(device->getCompilerProductHelper().isHeaplessModeEnabled()) && NEO::MemorySynchronizationCommands::getDcFlushEnable(true, device->getNEODevice()->getRootDeviceEnvironment()) ? 1 : 0; EXPECT_EQ(expectedDcFlushPipeControl, dcFlushPipeControl); } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp index d2e2938bcd..e7f056e5a8 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_in_order_cmdlist_1.cpp @@ -2043,7 +2043,7 @@ HWTEST2_F(InOrderCmdListTests, givenCmdsChainingFromAppendCopyAndFlushRequiredWh offset = cmdStream->getUsed(); immCmdList->appendMemoryCopyRegion(©Data, ®ion, 1, 1, ©Data, ®ion, 1, 1, nullptr, 0, nullptr, copyParams); - findSemaphores((heaplessEnabled && !immCmdList->dcFlushSupport) ? 1 : 0); // no implicit dependency + findSemaphores(heaplessEnabled ? 1 : 0); // no implicit dependency } HWTEST2_F(InOrderCmdListTests, givenEventWithRequiredPipeControlWhenDispatchingCopyThenSignalInOrderAllocation, IsAtLeastXeHpCore) { diff --git a/opencl/source/command_queue/enqueue_read_image.h b/opencl/source/command_queue/enqueue_read_image.h index 355072233c..78345552ed 100644 --- a/opencl/source/command_queue/enqueue_read_image.h +++ b/opencl/source/command_queue/enqueue_read_image.h @@ -145,7 +145,9 @@ cl_int CommandQueueHw::enqueueReadImageImpl( dc.bcsSplit = bcsSplit; dc.direction = csrSelectionArgs.direction; - auto eBuiltInOps = EBuiltInOps::copyImage3dToBuffer; + const bool useStateless = forceStateless(srcImage->getSize()); + const bool useHeapless = this->getHeaplessModeEnabled(); + auto eBuiltInOps = EBuiltInOps::adjustBuiltinType(useStateless, useHeapless); MultiDispatchInfo dispatchInfo(dc); const auto dispatchResult = dispatchBcsOrGpgpuEnqueue(dispatchInfo, surfaces, eBuiltInOps, numEventsInWaitList, eventWaitList, event, blockingRead == CL_TRUE, csr); diff --git a/opencl/source/command_queue/enqueue_write_image.h b/opencl/source/command_queue/enqueue_write_image.h index c01a09a045..9d6b25cd3a 100644 --- a/opencl/source/command_queue/enqueue_write_image.h +++ b/opencl/source/command_queue/enqueue_write_image.h @@ -134,7 +134,9 @@ cl_int CommandQueueHw::enqueueWriteImageImpl( dc.bcsSplit = bcsSplit; dc.direction = csrSelectionArgs.direction; - auto eBuiltInOps = EBuiltInOps::adjustImageBuiltinType(this->heaplessModeEnabled); + const bool useStateless = forceStateless(dstImage->getSize()); + const bool useHeapless = getHeaplessModeEnabled(); + auto eBuiltInOps = EBuiltInOps::adjustBuiltinType(useStateless, useHeapless); MultiDispatchInfo dispatchInfo(dc); const auto dispatchResult = dispatchBcsOrGpgpuEnqueue(dispatchInfo, surfaces, eBuiltInOps, numEventsInWaitList, eventWaitList, event, blockingWrite == CL_TRUE, csr); diff --git a/opencl/test/unit_test/command_queue/command_enqueue_fixture.h b/opencl/test/unit_test/command_queue/command_enqueue_fixture.h index bc2a45c578..a06ff0c928 100644 --- a/opencl/test/unit_test/command_queue/command_enqueue_fixture.h +++ b/opencl/test/unit_test/command_queue/command_enqueue_fixture.h @@ -6,6 +6,7 @@ */ #pragma once +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/helpers/gfx_core_helper.h" #include "shared/test/common/mocks/mock_memory_manager.h" @@ -18,6 +19,7 @@ #include "opencl/test/unit_test/helpers/cl_hw_parse.h" #include "opencl/test/unit_test/indirect_heap/indirect_heap_fixture.h" #include "opencl/test/unit_test/mocks/mock_cl_device.h" +#include "opencl/test/unit_test/mocks/mock_command_queue.h" #include "test_traits_common.h" @@ -39,7 +41,7 @@ struct CommandDeviceFixture : public ClDeviceFixture, struct CommandEnqueueBaseFixture : CommandDeviceFixture, public IndirectHeapFixture, - public ClHardwareParse { + virtual public ClHardwareParse { using IndirectHeapFixture::setUp; void setUp(cl_command_queue_properties cmdQueueProperties = 0) { CommandDeviceFixture::setUp(cmdQueueProperties); @@ -67,6 +69,29 @@ struct CommandEnqueueFixture : public CommandEnqueueBaseFixture, } }; +struct SurfaceStateAccessor : virtual public ClHardwareParse { + template + const FamilyType::RENDER_SURFACE_STATE *getSurfaceState(std::unique_ptr> &mockCmdQ, uint32_t index) { + typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE; + + const RENDER_SURFACE_STATE *surfaceState = nullptr; + + auto kernel = mockCmdQ->storedMultiDispatchInfo.begin()->getKernel(); + const auto &kernelInfo = kernel->getKernelInfo(); + if (kernelInfo.kernelDescriptor.kernelAttributes.imageAddressingMode == KernelDescriptor::AddressingMode::Bindless) { + auto bindlessOffset = static_cast(kernelInfo.getArgDescriptorAt(index).template as().bindless); + auto bindlessSurfaceStateIndex = kernel->getSurfaceStateIndexForBindlessOffset(bindlessOffset); + void *surfaceStateAddress = ptrOffset(kernel->getSurfaceStateHeap(), bindlessSurfaceStateIndex * sizeof(RENDER_SURFACE_STATE)); + surfaceState = reinterpret_cast(surfaceStateAddress); + } else { + uint32_t bindfulIndex = static_cast(kernelInfo.getArgDescriptorAt(index).template as().bindful) / sizeof(RENDER_SURFACE_STATE); + surfaceState = HardwareParse::getSurfaceState(&mockCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), bindfulIndex); + } + + return surfaceState; + } +}; + struct NegativeFailAllocationCommandEnqueueBaseFixture : public CommandEnqueueBaseFixture { void setUp() { CommandEnqueueBaseFixture::setUp(); diff --git a/opencl/test/unit_test/command_queue/command_queue_hw_2_tests.cpp b/opencl/test/unit_test/command_queue/command_queue_hw_2_tests.cpp index 2c926642f1..7ab2ae0047 100644 --- a/opencl/test/unit_test/command_queue/command_queue_hw_2_tests.cpp +++ b/opencl/test/unit_test/command_queue/command_queue_hw_2_tests.cpp @@ -216,20 +216,20 @@ HWTEST_F(BuiltinParamsCommandQueueHwTests, givenEnqueueReadWriteBufferCallWhenBu } HWTEST_F(BuiltinParamsCommandQueueHwTests, givenEnqueueWriteImageCallWhenBuiltinParamsArePassedThenCheckValuesCorectness) { + REQUIRE_IMAGES_OR_SKIP(defaultHwInfo); + DebugManagerStateRestore restorer; debugManager.flags.EnableCopyWithStagingBuffers.set(0); bool heaplessAllowed = UnitTestHelper::isHeaplessAllowed(); - for (auto useHeapless : {false, true}) { - + for (auto useHeapless : {false, heaplessAllowed}) { if (useHeapless && !heaplessAllowed) { continue; } - reinterpret_cast *>(pCmdQ)->heaplessModeEnabled = useHeapless; - auto builtInType = EBuiltInOps::adjustImageBuiltinType(useHeapless); - setUpImpl(builtInType); + reinterpret_cast *>(pCmdQ)->heaplessModeEnabled = useHeapless; + setUpImpl(EBuiltInOps::adjustBuiltinType(false, useHeapless)); std::unique_ptr dstImage(ImageHelper>::create(context)); @@ -271,7 +271,8 @@ HWTEST_F(BuiltinParamsCommandQueueHwTests, givenEnqueueWriteImageCallWhenBuiltin HWTEST_F(BuiltinParamsCommandQueueHwTests, givenEnqueueReadImageCallWhenBuiltinParamsArePassedThenCheckValuesCorectness) { - setUpImpl(EBuiltInOps::copyImage3dToBuffer); + REQUIRE_IMAGES_OR_SKIP(defaultHwInfo); + setUpImpl(EBuiltInOps::adjustBuiltinType(false, pCmdQ->getHeaplessModeEnabled())); std::unique_ptr dstImage(ImageHelper>::create(context)); diff --git a/opencl/test/unit_test/command_queue/enqueue_copy_buffer_to_image_fixture.h b/opencl/test/unit_test/command_queue/enqueue_copy_buffer_to_image_fixture.h index a19508922d..dfb6764c92 100644 --- a/opencl/test/unit_test/command_queue/enqueue_copy_buffer_to_image_fixture.h +++ b/opencl/test/unit_test/command_queue/enqueue_copy_buffer_to_image_fixture.h @@ -17,6 +17,7 @@ namespace NEO { struct EnqueueCopyBufferToImageTest : public CommandEnqueueFixture, + public SurfaceStateAccessor, public ::testing::Test { void SetUp() override { diff --git a/opencl/test/unit_test/command_queue/enqueue_copy_buffer_to_image_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_copy_buffer_to_image_tests.cpp index 8056fd4fa4..f22c4c6754 100644 --- a/opencl/test/unit_test/command_queue/enqueue_copy_buffer_to_image_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_copy_buffer_to_image_tests.cpp @@ -171,12 +171,11 @@ HWTEST_F(EnqueueCopyBufferToImageTest, WhenCopyingBufferToImageThenSurfaceStateI auto mockCmdQ = std::make_unique>(context, pClDevice, nullptr); VariableBackup cmdQBackup(&pCmdQ, mockCmdQ.get()); mockCmdQ->storeMultiDispatchInfo = true; + enqueueCopyBufferToImage(); - const auto &kernelInfo = mockCmdQ->storedMultiDispatchInfo.begin()->getKernel()->getKernelInfo(); - uint32_t index = static_cast(kernelInfo.getArgDescriptorAt(1).template as().bindful) / sizeof(RENDER_SURFACE_STATE); + const auto surfaceState = SurfaceStateAccessor::getSurfaceState(mockCmdQ, 1); - const auto surfaceState = getSurfaceState(&pCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), index); const auto &imageDesc = dstImage->getImageDesc(); // EnqueueReadImage uses multi-byte copies depending on per-pixel-size-in-bytes EXPECT_EQ(imageDesc.image_width, surfaceState->getWidth()); diff --git a/opencl/test/unit_test/command_queue/enqueue_copy_image_fixture.h b/opencl/test/unit_test/command_queue/enqueue_copy_image_fixture.h index 07b122c5e2..52e48ef880 100644 --- a/opencl/test/unit_test/command_queue/enqueue_copy_image_fixture.h +++ b/opencl/test/unit_test/command_queue/enqueue_copy_image_fixture.h @@ -17,6 +17,7 @@ namespace NEO { struct EnqueueCopyImageTest : public CommandEnqueueFixture, + public SurfaceStateAccessor, public ::testing::Test { void SetUp(void) override { diff --git a/opencl/test/unit_test/command_queue/enqueue_copy_image_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_copy_image_tests.cpp index 05cbc70cbd..d38f48311e 100644 --- a/opencl/test/unit_test/command_queue/enqueue_copy_image_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_copy_image_tests.cpp @@ -180,10 +180,9 @@ HWTEST_F(EnqueueCopyImageTest, WhenCopyingImageThenSurfaceStateIsCorrect) { enqueueCopyImage(); - const auto &kernelInfo = mockCmdQ->storedMultiDispatchInfo.begin()->getKernel()->getKernelInfo(); for (uint32_t i = 0; i < 2; ++i) { - uint32_t index = static_cast(kernelInfo.getArgDescriptorAt(i).template as().bindful) / sizeof(RENDER_SURFACE_STATE); - const auto surfaceState = getSurfaceState(&pCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), index); + const auto surfaceState = SurfaceStateAccessor::getSurfaceState(mockCmdQ, i); + const auto &imageDesc = dstImage->getImageDesc(); EXPECT_EQ(imageDesc.image_width, surfaceState->getWidth()); EXPECT_EQ(imageDesc.image_height, surfaceState->getHeight()); @@ -201,12 +200,10 @@ HWTEST_F(EnqueueCopyImageTest, WhenCopyingImageThenSurfaceStateIsCorrect) { EXPECT_EQ(RENDER_SURFACE_STATE::SURFACE_VERTICAL_ALIGNMENT_VALIGN_4, surfaceState->getSurfaceVerticalAlignment()); } - uint32_t srcIndex = static_cast(kernelInfo.getArgDescriptorAt(0).template as().bindful) / sizeof(RENDER_SURFACE_STATE); - const auto srcSurfaceState = getSurfaceState(&pCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), srcIndex); + const auto srcSurfaceState = SurfaceStateAccessor::getSurfaceState(mockCmdQ, 0); EXPECT_EQ(srcImage->getGraphicsAllocation(pClDevice->getRootDeviceIndex())->getGpuAddress(), srcSurfaceState->getSurfaceBaseAddress()); - uint32_t dstIndex = static_cast(kernelInfo.getArgDescriptorAt(1).template as().bindful) / sizeof(RENDER_SURFACE_STATE); - const auto dstSurfaceState = getSurfaceState(&pCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), dstIndex); + const auto dstSurfaceState = SurfaceStateAccessor::getSurfaceState(mockCmdQ, 1); EXPECT_EQ(dstImage->getGraphicsAllocation(pClDevice->getRootDeviceIndex())->getGpuAddress(), dstSurfaceState->getSurfaceBaseAddress()); } diff --git a/opencl/test/unit_test/command_queue/enqueue_copy_image_to_buffer_fixture.h b/opencl/test/unit_test/command_queue/enqueue_copy_image_to_buffer_fixture.h index 34b18aa967..bffac6f89a 100644 --- a/opencl/test/unit_test/command_queue/enqueue_copy_image_to_buffer_fixture.h +++ b/opencl/test/unit_test/command_queue/enqueue_copy_image_to_buffer_fixture.h @@ -17,6 +17,7 @@ namespace NEO { struct EnqueueCopyImageToBufferTest : public CommandEnqueueFixture, + public SurfaceStateAccessor, public ::testing::Test { void SetUp(void) override { diff --git a/opencl/test/unit_test/command_queue/enqueue_copy_image_to_buffer_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_copy_image_to_buffer_tests.cpp index 4deca05762..f4e9e4ae6d 100644 --- a/opencl/test/unit_test/command_queue/enqueue_copy_image_to_buffer_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_copy_image_to_buffer_tests.cpp @@ -169,9 +169,13 @@ HWCMDTEST_F(IGFX_GEN12LP_CORE, EnqueueCopyImageToBufferTest, WhenCopyingImageToB HWTEST_F(EnqueueCopyImageToBufferTest, WhenCopyingImageToBufferThenSurfaceStateIsCorrect) { typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE; + auto mockCmdQ = std::make_unique>(context, pClDevice, nullptr); + VariableBackup cmdQBackup(&pCmdQ, mockCmdQ.get()); + mockCmdQ->storeMultiDispatchInfo = true; + enqueueCopyImageToBuffer(); - const auto surfaceState = getSurfaceState(&pCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), 0); + const auto surfaceState = SurfaceStateAccessor::getSurfaceState(mockCmdQ, 0); const auto &imageDesc = srcImage->getImageDesc(); // EnqueueReadImage uses multi-byte copies depending on per-pixel-size-in-bytes EXPECT_EQ(imageDesc.image_width, surfaceState->getWidth()); diff --git a/opencl/test/unit_test/command_queue/enqueue_fill_image_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_fill_image_tests.cpp index 1c3aaa45f5..ba22cc5fe5 100644 --- a/opencl/test/unit_test/command_queue/enqueue_fill_image_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_fill_image_tests.cpp @@ -22,6 +22,7 @@ using namespace NEO; class EnqueueFillImageTest : public EnqueueFillImageTestFixture, + public SurfaceStateAccessor, public ::testing::Test { public: void SetUp(void) override { @@ -194,12 +195,11 @@ HWTEST_F(EnqueueFillImageTest, WhenFillingImageThenSurfaceStateIsCorrect) { auto mockCmdQ = std::make_unique>(context, pClDevice, nullptr); VariableBackup cmdQBackup(&pCmdQ, mockCmdQ.get()); mockCmdQ->storeMultiDispatchInfo = true; + enqueueFillImage(); - const auto &kernelInfo = mockCmdQ->storedMultiDispatchInfo.begin()->getKernel()->getKernelInfo(); - uint32_t index = static_cast(kernelInfo.getArgDescriptorAt(0).template as().bindful) / sizeof(RENDER_SURFACE_STATE); + const auto surfaceState = SurfaceStateAccessor::getSurfaceState(mockCmdQ, 0); - const auto surfaceState = getSurfaceState(&pCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), index); const auto &imageDesc = image->getImageDesc(); EXPECT_EQ(imageDesc.image_width, surfaceState->getWidth()); EXPECT_EQ(imageDesc.image_height, surfaceState->getHeight()); diff --git a/opencl/test/unit_test/command_queue/enqueue_read_image_fixture.h b/opencl/test/unit_test/command_queue/enqueue_read_image_fixture.h index 3f3402af97..9baba03a63 100644 --- a/opencl/test/unit_test/command_queue/enqueue_read_image_fixture.h +++ b/opencl/test/unit_test/command_queue/enqueue_read_image_fixture.h @@ -17,6 +17,7 @@ namespace NEO { struct EnqueueReadImageTest : public CommandEnqueueFixture, + public SurfaceStateAccessor, public ::testing::Test { typedef CommandQueueHwFixture CommandQueueFixture; using CommandQueueHwFixture::pCmdQ; 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 015b0e728e..de7afe9445 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 @@ -650,11 +650,15 @@ HWCMDTEST_F(IGFX_GEN12LP_CORE, EnqueueReadImageTest, WhenReadingImageThenInterfa HWTEST_F(EnqueueReadImageTest, WhenReadingImageThenSurfaceStateIsCorrect) { typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE; + auto mockCmdQ = std::make_unique>(context, pClDevice, nullptr); + VariableBackup cmdQBackup(&pCmdQ, mockCmdQ.get()); + mockCmdQ->storeMultiDispatchInfo = true; + enqueueReadImage(); // BufferToImage kernel uses BTI=1 for destSurface uint32_t bindingTableIndex = 0; - const auto surfaceState = getSurfaceState(&pCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), bindingTableIndex); + const auto surfaceState = SurfaceStateAccessor::getSurfaceState(mockCmdQ, bindingTableIndex); // EnqueueReadImage uses multi-byte copies depending on per-pixel-size-in-bytes const auto &imageDesc = srcImage->getImageDesc(); @@ -726,7 +730,7 @@ HWTEST_F(EnqueueReadImageTest, GivenImage1DarrayWhenReadImageIsCalledThenHostPtr HWTEST_F(EnqueueReadImageTest, GivenImage1DarrayWhenReadImageIsCalledThenRowPitchIsSetToSlicePitch) { auto builtIns = new MockBuiltins(); MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns); - EBuiltInOps::Type copyBuiltIn = EBuiltInOps::copyImage3dToBuffer; + EBuiltInOps::Type copyBuiltIn = EBuiltInOps::adjustBuiltinType(false, pCmdQ->getHeaplessModeEnabled()); auto &origBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder( copyBuiltIn, pCmdQ->getClDevice()); @@ -941,15 +945,16 @@ typedef EnqueueReadImageMipMapTest MipMapReadImageTest; HWTEST_P(MipMapReadImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalledThenProperMipLevelIsSet) { auto builtIns = new MockBuiltins(); MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns); + EBuiltInOps::Type eBuiltInOp = EBuiltInOps::adjustBuiltinType(false, pCmdQ->getHeaplessModeEnabled()); auto imageType = (cl_mem_object_type)GetParam(); auto &origBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder( - EBuiltInOps::copyImage3dToBuffer, + eBuiltInOp, pCmdQ->getClDevice()); // substitute original builder with mock builder auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder( rootDeviceIndex, - EBuiltInOps::copyImage3dToBuffer, + eBuiltInOp, std::unique_ptr(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder))); cl_int retVal = CL_SUCCESS; @@ -1004,7 +1009,7 @@ HWTEST_P(MipMapReadImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalled EXPECT_EQ(CL_SUCCESS, retVal); - auto &mockBuilder = static_cast(BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::copyImage3dToBuffer, + auto &mockBuilder = static_cast(BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(eBuiltInOp, pCmdQ->getClDevice())); auto params = mockBuilder.getBuiltinOpParams(); @@ -1013,7 +1018,7 @@ HWTEST_P(MipMapReadImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalled // restore original builder and retrieve mock builder auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder( rootDeviceIndex, - EBuiltInOps::copyImage3dToBuffer, + eBuiltInOp, std::move(oldBuilder)); EXPECT_NE(nullptr, newBuilder); } diff --git a/opencl/test/unit_test/command_queue/enqueue_write_image_fixture.h b/opencl/test/unit_test/command_queue/enqueue_write_image_fixture.h index 3c3c53bd96..abbb9419bb 100644 --- a/opencl/test/unit_test/command_queue/enqueue_write_image_fixture.h +++ b/opencl/test/unit_test/command_queue/enqueue_write_image_fixture.h @@ -17,6 +17,7 @@ namespace NEO { struct EnqueueWriteImageTest : public CommandEnqueueFixture, + public SurfaceStateAccessor, public ::testing::Test { void SetUp(void) override { 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 a8df155577..4e20378539 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 @@ -189,17 +189,16 @@ HWCMDTEST_F(IGFX_GEN12LP_CORE, EnqueueWriteImageTest, WhenWritingImageThenInterf EXPECT_NE(kernelStartPointer, interfaceDescriptorData.getBindingTablePointer()); } -HWTEST_F(EnqueueWriteImageTest, WhenWritingImageThenSurfaceStateIsProgrammedCorrectly) { +HWTEST_F(EnqueueWriteImageTest, WhenWritingImageThenSurfaceStateIsCorrect) { typedef typename FamilyType::RENDER_SURFACE_STATE RENDER_SURFACE_STATE; auto mockCmdQ = std::make_unique>(context, pClDevice, nullptr); VariableBackup cmdQBackup(&pCmdQ, mockCmdQ.get()); mockCmdQ->storeMultiDispatchInfo = true; + enqueueWriteImage(); - auto index = mockCmdQ->storedMultiDispatchInfo.begin()->getKernel()->getKernelInfo().getArgDescriptorAt(1).template as().bindful / sizeof(RENDER_SURFACE_STATE); - - const auto surfaceState = getSurfaceState(&pCmdQ->getIndirectHeap(IndirectHeap::Type::surfaceState, 0), static_cast(index)); + const auto surfaceState = SurfaceStateAccessor::getSurfaceState(mockCmdQ, 1); // EnqueueWriteImage uses multi-byte copies depending on per-pixel-size-in-bytes const auto &imageDesc = dstImage->getImageDesc(); @@ -250,7 +249,9 @@ HWTEST_F(EnqueueWriteImageTest, GivenImage1DarrayWhenWriteImageIsCalledThenRowPi auto builtIns = new MockBuiltins(); MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns); - EBuiltInOps::Type copyBuiltIn = EBuiltInOps::copyBufferToImage3d; + const bool useStateless = false; + auto copyBuiltIn = EBuiltInOps::adjustBuiltinType(useStateless, pCmdQ->getHeaplessModeEnabled()); + auto &origBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder( copyBuiltIn, pCmdQ->getClDevice()); @@ -401,14 +402,16 @@ HWTEST_P(MipMapWriteImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalle auto builtIns = new MockBuiltins(); MockRootDeviceEnvironment::resetBuiltins(pCmdQ->getDevice().getExecutionEnvironment()->rootDeviceEnvironments[pCmdQ->getDevice().getRootDeviceIndex()].get(), builtIns); + EBuiltInOps::Type eBuiltInOp = EBuiltInOps::adjustBuiltinType(false, pCmdQ->getHeaplessModeEnabled()); + auto &origBuilder = BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder( - EBuiltInOps::copyBufferToImage3d, + eBuiltInOp, pCmdQ->getClDevice()); // substitute original builder with mock builder auto oldBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder( rootDeviceIndex, - EBuiltInOps::copyBufferToImage3d, + eBuiltInOp, std::unique_ptr(new MockBuiltinDispatchInfoBuilder(*builtIns, pCmdQ->getClDevice(), &origBuilder))); cl_int retVal = CL_SUCCESS; @@ -466,7 +469,7 @@ HWTEST_P(MipMapWriteImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalle EXPECT_EQ(CL_SUCCESS, retVal); - auto &mockBuilder = static_cast(BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(EBuiltInOps::copyBufferToImage3d, + auto &mockBuilder = static_cast(BuiltInDispatchBuilderOp::getBuiltinDispatchInfoBuilder(eBuiltInOp, pCmdQ->getClDevice())); auto params = mockBuilder.getBuiltinOpParams(); @@ -475,7 +478,7 @@ HWTEST_P(MipMapWriteImageTest, GivenImageWithMipLevelNonZeroWhenReadImageIsCalle // restore original builder and retrieve mock builder auto newBuilder = pClExecutionEnvironment->setBuiltinDispatchInfoBuilder( rootDeviceIndex, - EBuiltInOps::copyBufferToImage3d, + eBuiltInOp, std::move(oldBuilder)); EXPECT_NE(nullptr, newBuilder); } diff --git a/opencl/test/unit_test/os_interface/linux/cl_drm_memory_manager_tests.cpp b/opencl/test/unit_test/os_interface/linux/cl_drm_memory_manager_tests.cpp index 2ec5348125..7a64760767 100644 --- a/opencl/test/unit_test/os_interface/linux/cl_drm_memory_manager_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/cl_drm_memory_manager_tests.cpp @@ -440,7 +440,7 @@ TEST_F(ClDrmMemoryManagerTest, givenDrmMemoryManagerWhenTiledImageIsBeingCreated mock->reset(); } -HWTEST_F(ClDrmMemoryManagerTest, givenDrmMemoryManagerWhenTiledImageIsBeingCreatedFromHostPtrThenAllocateGraphicsMemoryForImageIsUsed) { +HWTEST2_F(ClDrmMemoryManagerTest, givenDrmMemoryManagerWhenTiledImageIsBeingCreatedFromHostPtrThenAllocateGraphicsMemoryForImageIsUsed, IsAtMostXe3Core) { if (!defaultHwInfo->capabilityTable.supportsImages) { GTEST_SKIP(); } diff --git a/shared/test/common/cmd_parse/hw_parse.h b/shared/test/common/cmd_parse/hw_parse.h index 769ab504e5..5a158cc065 100644 --- a/shared/test/common/cmd_parse/hw_parse.h +++ b/shared/test/common/cmd_parse/hw_parse.h @@ -8,6 +8,7 @@ #pragma once #include "shared/source/command_stream/command_stream_receiver.h" #include "shared/source/command_stream/linear_stream.h" +#include "shared/source/helpers/non_copyable_or_moveable.h" #include "shared/source/helpers/pipeline_select_helper.h" #include "shared/source/helpers/ptr_math.h" #include "shared/source/indirect_heap/indirect_heap.h" @@ -22,7 +23,7 @@ namespace NEO { struct KernelInfo; -struct HardwareParse { +struct HardwareParse : NEO::NonCopyableAndNonMovableClass { HardwareParse() { itorMediaInterfaceDescriptorLoad = cmdList.end(); itorMediaVfeState = cmdList.end(); diff --git a/shared/test/unit_test/helpers/compiler_product_helper_tests.cpp b/shared/test/unit_test/helpers/compiler_product_helper_tests.cpp index 06502f50ae..7086d8728e 100644 --- a/shared/test/unit_test/helpers/compiler_product_helper_tests.cpp +++ b/shared/test/unit_test/helpers/compiler_product_helper_tests.cpp @@ -382,7 +382,7 @@ HWTEST_F(CompilerProductHelperFixture, givenProductHelperWhenGetAndOverrideHwIpV EXPECT_EQ(compilerProductHelper.getHwIpVersion(hwInfo), config); } -HWTEST_F(CompilerProductHelperFixture, givenCompilerProductHelperWhenIsHeaplessModeEnabledThenFalseIsReturned) { +HWTEST2_F(CompilerProductHelperFixture, givenCompilerProductHelperWhenIsHeaplessModeEnabledThenFalseIsReturned, IsAtMostXe3Core) { auto &compilerProductHelper = pDevice->getCompilerProductHelper(); EXPECT_FALSE(compilerProductHelper.isHeaplessModeEnabled()); }