diff --git a/opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_1_tests.cpp b/opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_1_tests.cpp index d70f6cc5ec..e12190aa30 100644 --- a/opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_1_tests.cpp +++ b/opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_1_tests.cpp @@ -29,6 +29,8 @@ using namespace NEO; +#include "shared/test/common/test_macros/header/heapless_matchers.h" + typedef UltCommandStreamReceiverTest CommandStreamReceiverFlushTaskTests; using CommandStreamReceiverFlushTaskTestsWithMockCsrHw = UltCommandStreamReceiverTestWithCsrT; @@ -757,7 +759,7 @@ HWTEST2_F(CommandStreamReceiverFlushTaskTests, GivenPreambleSentAndMediaSamplerR EXPECT_NE(nullptr, getCommand()); } -HWTEST_F(CommandStreamReceiverFlushTaskTests, GivenStateBaseAddressNotSentWhenFlushingTaskThenStateBaseAddressIsSent) { +HWTEST2_F(CommandStreamReceiverFlushTaskTests, GivenStateBaseAddressNotSentWhenFlushingTaskThenStateBaseAddressIsSent, IsHeapfulSupported) { auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); commandStreamReceiver.isPreambleSent = true; commandStreamReceiver.setMediaVFEStateDirty(false); @@ -771,7 +773,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, GivenStateBaseAddressNotSentWhenFl EXPECT_NE(cmdList.end(), stateBaseAddressItor); } -HWTEST_F(CommandStreamReceiverFlushTaskTests, GivenSizeChangedWhenFlushingTaskThenStateBaseAddressIsSent) { +HWTEST2_F(CommandStreamReceiverFlushTaskTests, GivenSizeChangedWhenFlushingTaskThenStateBaseAddressIsSent, IsHeapfulSupported) { auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); auto dshSize = dsh.getMaxAvailableSpace(); auto iohSize = ioh.getMaxAvailableSpace(); @@ -800,7 +802,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, GivenSizeChangedWhenFlushingTaskTh EXPECT_NE(cmdList.end(), stateBaseAddressItor); } -HWTEST_F(CommandStreamReceiverFlushTaskTests, givenDshHeapChangeWhenFlushTaskIsCalledThenSbaIsReloaded) { +HWTEST2_F(CommandStreamReceiverFlushTaskTests, givenDshHeapChangeWhenFlushTaskIsCalledThenSbaIsReloaded, IsHeapfulSupported) { bool deviceUsesDsh = pDevice->getHardwareInfo().capabilityTable.supportsImages; if (!deviceUsesDsh) { GTEST_SKIP(); @@ -816,7 +818,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenDshHeapChangeWhenFlushTaskIsC EXPECT_NE(cmdList.end(), stateBaseAddressItor); } -HWTEST_F(CommandStreamReceiverFlushTaskTests, givenSshHeapChangeWhenFlushTaskIsCalledThenSbaIsReloaded) { +HWTEST2_F(CommandStreamReceiverFlushTaskTests, givenSshHeapChangeWhenFlushTaskIsCalledThenSbaIsReloaded, IsHeapfulSupported) { auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); configureCSRtoNonDirtyState(false); @@ -828,7 +830,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenSshHeapChangeWhenFlushTaskIsC EXPECT_NE(cmdList.end(), stateBaseAddressItor); } -HWTEST_F(CommandStreamReceiverFlushTaskTests, givenIohHeapChangeWhenFlushTaskIsCalledThenSbaIsReloaded) { +HWTEST2_F(CommandStreamReceiverFlushTaskTests, givenIohHeapChangeWhenFlushTaskIsCalledThenSbaIsReloaded, IsHeapfulSupported) { auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); configureCSRtoNonDirtyState(false); @@ -840,7 +842,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenIohHeapChangeWhenFlushTaskIsC EXPECT_NE(cmdList.end(), stateBaseAddressItor); } -HWTEST_F(CommandStreamReceiverFlushTaskTests, GivenStateBaseAddressNotChangedWhenFlushingTaskThenStateBaseAddressIsNotSent) { +HWTEST2_F(CommandStreamReceiverFlushTaskTests, GivenStateBaseAddressNotChangedWhenFlushingTaskThenStateBaseAddressIsNotSent, IsHeapfulSupported) { auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); commandStreamReceiver.isPreambleSent = true; configureCSRHeapStatesToNonDirty(); @@ -1265,7 +1267,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, GivenBlockedKernelRequiringDCFlush cmdList.clear(); // Parse command list - parseCommands(commandStreamTask, usedBefore); + parseCommands(commandStreamTask, 0); auto itorPC = find(cmdList.begin(), cmdList.end()); EXPECT_NE(cmdList.end(), itorPC); diff --git a/opencl/test/unit_test/helpers/test_preamble_xehp_and_later.cpp b/opencl/test/unit_test/helpers/test_preamble_xehp_and_later.cpp index 96cb8bbce3..5852705d21 100644 --- a/opencl/test/unit_test/helpers/test_preamble_xehp_and_later.cpp +++ b/opencl/test/unit_test/helpers/test_preamble_xehp_and_later.cpp @@ -216,7 +216,7 @@ HWTEST2_F(PreambleCfeStateXeHPAndLater, givenSetDebugFlagWhenPreambleCfeStateIsP } using XeHpCommandStreamReceiverFlushTaskTests = UltCommandStreamReceiverTest; -HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushingCommandStreamReceiverThenExpectStateBaseAddressEqualsIndirectObjectBaseAddress) { +HWTEST2_F(XeHpCommandStreamReceiverFlushTaskTests, whenFlushingCommandStreamReceiverThenExpectStateBaseAddressEqualsIndirectObjectBaseAddress, IsHeapfulSupportedAndAtLeastXeCore) { using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); if (commandStreamReceiver.heaplessModeEnabled) { @@ -236,7 +236,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushi } } -HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushCalledThenStateBaseAddressHasAllCachesOn) { +HWTEST2_F(XeHpCommandStreamReceiverFlushTaskTests, whenFlushCalledThenStateBaseAddressHasAllCachesOn, IsHeapfulSupportedAndAtLeastXeCore) { using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); auto gmmHelper = pDevice->getRootDeviceEnvironment().getGmmHelper(); @@ -261,7 +261,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushC EXPECT_EQ(expectedMocsForStateless, stateBaseAddress->getStatelessDataPortAccessMemoryObjectControlState()); } -HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushCalledThenStateBaseAddressHasAllCachesOffWhenDebugFlagIsPresent) { +HWTEST2_F(XeHpCommandStreamReceiverFlushTaskTests, whenFlushCalledThenStateBaseAddressHasAllCachesOffWhenDebugFlagIsPresent, IsHeapfulSupportedAndAtLeastXeCore) { DebugManagerStateRestore restorer; debugManager.flags.DisableCachingForHeaps.set(1); using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; @@ -287,7 +287,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushC EXPECT_EQ(expectedMocsForHeap, stateBaseAddress->getBindlessSamplerStateMemoryObjectControlState()); } -HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, givenL3ToL1DebugFlagWhenStatelessMocsIsProgrammedThenItHasL1CachingOn) { +HWTEST2_F(XeHpCommandStreamReceiverFlushTaskTests, givenL3ToL1DebugFlagWhenStatelessMocsIsProgrammedThenItHasL1CachingOn, IsHeapfulSupportedAndAtLeastXeCore) { DebugManagerStateRestore restore; debugManager.flags.ForceL1Caching.set(1u); using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; @@ -303,7 +303,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, givenL3ToL EXPECT_EQ(expectedMocs, stateBaseAddress->getStatelessDataPortAccessMemoryObjectControlState()); } -HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, givenForceL1CachingDebugFlagDisabledWhenStatelessMocsIsProgrammedThenItHasL3CachingOn) { +HWTEST2_F(XeHpCommandStreamReceiverFlushTaskTests, givenForceL1CachingDebugFlagDisabledWhenStatelessMocsIsProgrammedThenItHasL3CachingOn, IsHeapfulSupportedAndAtLeastXeCore) { DebugManagerStateRestore restore; debugManager.flags.ForceL1Caching.set(0u); using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; @@ -322,7 +322,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, givenForce EXPECT_EQ(expectedMocs, stateBaseAddress->getStatelessDataPortAccessMemoryObjectControlState()); } -HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushingCommandStreamReceiverThenExpectBindlessBaseAddressEqualSurfaceStateBaseAddress) { +HWTEST2_F(XeHpCommandStreamReceiverFlushTaskTests, whenFlushingCommandStreamReceiverThenExpectBindlessBaseAddressEqualSurfaceStateBaseAddress, IsHeapfulSupportedAndAtLeastXeCore) { using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; @@ -343,7 +343,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushi EXPECT_EQ(bindlessSurfaceSize, stateBaseAddress->getBindlessSurfaceStateSize()); } -HWCMDTEST_F(IGFX_XE_HP_CORE, XeHpCommandStreamReceiverFlushTaskTests, whenFlushingCommandStreamReceiverThenSetBindlessSamplerStateBaseAddressModifyEnable) { +HWTEST2_F(XeHpCommandStreamReceiverFlushTaskTests, whenFlushingCommandStreamReceiverThenSetBindlessSamplerStateBaseAddressModifyEnable, IsHeapfulSupportedAndAtLeastXeCore) { using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS; auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); if (commandStreamReceiver.heaplessModeEnabled) { diff --git a/shared/source/command_stream/command_stream_receiver_hw_base.inl b/shared/source/command_stream/command_stream_receiver_hw_base.inl index 1671d0f5cb..904b7d48dc 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_base.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_base.inl @@ -2341,6 +2341,10 @@ inline void CommandStreamReceiverHw::handleBatchedDispatchImplicitFlu } } +template +void CommandStreamReceiverHw::programStateBaseAddressHeapless(Device &device, LinearStream &commandStream) { +} + template inline BatchBuffer CommandStreamReceiverHw::prepareBatchBufferForSubmission(LinearStream &commandStreamTask, size_t commandStreamStartTask, diff --git a/shared/source/command_stream/command_stream_receiver_hw_heap_addressing.inl b/shared/source/command_stream/command_stream_receiver_hw_heap_addressing.inl index 4f0ca207d5..e787534670 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_heap_addressing.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_heap_addressing.inl @@ -54,11 +54,6 @@ SubmissionStatus CommandStreamReceiverHw::programHeaplessProlog(Devic return SubmissionStatus::unsupported; } -template -void CommandStreamReceiverHw::programStateBaseAddressHeapless(Device &device, LinearStream &commandStream) { - UNRECOVERABLE_IF(true); -} - template void CommandStreamReceiverHw::programComputeModeHeapless(Device &device, LinearStream &commandStream) { UNRECOVERABLE_IF(true); diff --git a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp index 9be7b83e97..fc6a11d265 100644 --- a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp +++ b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp @@ -5980,7 +5980,6 @@ HWTEST_F(CommandStreamReceiverHwHeaplessTest, whenHeaplessCommandStreamReceiverF EXPECT_ANY_THROW(csr->flushTaskHeapless(commandStream, 0, nullptr, nullptr, nullptr, 0, csr->recordedDispatchFlags, *pDevice)); EXPECT_ANY_THROW(csr->programHeaplessProlog(*pDevice)); - EXPECT_ANY_THROW(csr->programStateBaseAddressHeapless(*pDevice, commandStream)); EXPECT_ANY_THROW(csr->programComputeModeHeapless(*pDevice, commandStream)); EXPECT_ANY_THROW(csr->getCmdSizeForHeaplessPrologue(*pDevice)); EXPECT_ANY_THROW(csr->handleAllocationsResidencyForHeaplessProlog(commandStream, *pDevice)); @@ -6387,12 +6386,21 @@ HWTEST_F(CommandStreamReceiverHwTest, givenEpilogueStreamAvailableWhenFlushBcsTa HWTEST_F(CommandStreamReceiverHwTest, givenEpilogueStreamAvailableWhenFlushImmediateTaskCalledThenDispachEpilogueCommandsIntoEpilogueStream) { auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); + auto heaplessStateInit = commandStreamReceiver.heaplessStateInitialized; // first flush can carry preamble, no interest in flags here - commandStreamReceiver.flushImmediateTask(commandStream, - commandStream.getUsed(), - immediateFlushTaskFlags, - *pDevice); + + if (heaplessStateInit) { + commandStreamReceiver.flushImmediateTaskStateless(commandStream, + commandStream.getUsed(), + immediateFlushTaskFlags, + *pDevice); + } else { + commandStreamReceiver.flushImmediateTask(commandStream, + commandStream.getUsed(), + immediateFlushTaskFlags, + *pDevice); + } // regular dispatch here GraphicsAllocation *commandBuffer = commandStreamReceiver.getMemoryManager()->allocateGraphicsMemoryWithProperties(MockAllocationProperties{commandStreamReceiver.getRootDeviceIndex(), MemoryConstants::pageSize}); @@ -6405,10 +6413,17 @@ HWTEST_F(CommandStreamReceiverHwTest, givenEpilogueStreamAvailableWhenFlushImmed immediateFlushTaskFlags.requireTaskCountUpdate = true; immediateFlushTaskFlags.optionalEpilogueCmdStream = &epilogueStream; - commandStreamReceiver.flushImmediateTask(commandStream, - commandStream.getUsed(), - immediateFlushTaskFlags, - *pDevice); + if (heaplessStateInit) { + commandStreamReceiver.flushImmediateTaskStateless(commandStream, + commandStream.getUsed(), + immediateFlushTaskFlags, + *pDevice); + } else { + commandStreamReceiver.flushImmediateTask(commandStream, + commandStream.getUsed(), + immediateFlushTaskFlags, + *pDevice); + } EXPECT_TRUE(commandStreamReceiver.isMadeResident(commandBuffer)); EXPECT_TRUE(commandStreamReceiver.latestFlushedBatchBuffer.dispatchMonitorFence); @@ -6442,14 +6457,22 @@ HWTEST_F(CommandStreamReceiverHwTest, givenFlushBcsTaskCmdListDispatchWhenCalled HWTEST_F(CommandStreamReceiverHwTest, givenImmediateFlushTaskCmdListDispatchWhenFlushingBufferThenDisableFlatRingBuffer) { auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver(); - + auto heaplessStateInit = commandStreamReceiver.heaplessStateInitialized; commandStreamReceiver.recordFlushedBatchBuffer = true; immediateFlushTaskFlags.dispatchOperation = NEO::AppendOperations::cmdList; - commandStreamReceiver.flushImmediateTask(commandStream, - commandStream.getUsed(), - immediateFlushTaskFlags, - *pDevice); + + if (heaplessStateInit) { + commandStreamReceiver.flushImmediateTaskStateless(commandStream, + commandStream.getUsed(), + immediateFlushTaskFlags, + *pDevice); + } else { + commandStreamReceiver.flushImmediateTask(commandStream, + commandStream.getUsed(), + immediateFlushTaskFlags, + *pDevice); + } EXPECT_TRUE(commandStreamReceiver.latestFlushedBatchBuffer.disableFlatRingBuffer); }