diff --git a/level_zero/core/source/cmdlist/cmdlist_imp.cpp b/level_zero/core/source/cmdlist/cmdlist_imp.cpp index bcb3fa674d..7b025cb5f5 100644 --- a/level_zero/core/source/cmdlist/cmdlist_imp.cpp +++ b/level_zero/core/source/cmdlist/cmdlist_imp.cpp @@ -55,14 +55,17 @@ ze_result_t CommandListImp::destroy() { auto memoryManager = device->getNEODevice()->getMemoryManager(); - auto heapAllocation = this->commandContainer.getIndirectHeap(NEO::HeapType::SURFACE_STATE)->getGraphicsAllocation(); - for (auto &engine : memoryManager->getRegisteredEngines()) { - if (NEO::EngineHelpers::isComputeEngine(engine.getEngineType())) { - auto contextId = engine.osContext->getContextId(); + auto surfaceStateHeap = this->commandContainer.getIndirectHeap(NEO::HeapType::SURFACE_STATE); + if (surfaceStateHeap) { + auto heapAllocation = surfaceStateHeap->getGraphicsAllocation(); + for (auto &engine : memoryManager->getRegisteredEngines()) { + if (NEO::EngineHelpers::isComputeEngine(engine.getEngineType())) { + auto contextId = engine.osContext->getContextId(); - if (heapAllocation->isUsedByOsContext(contextId)) { - engine.commandStreamReceiver->sendRenderStateCacheFlush(); - engine.commandStreamReceiver->waitForCompletionWithTimeout(NEO::WaitParams{false, false, NEO::TimeoutControls::maxTimeout}, engine.commandStreamReceiver->peekTaskCount()); + if (heapAllocation->isUsedByOsContext(contextId)) { + engine.commandStreamReceiver->sendRenderStateCacheFlush(); + engine.commandStreamReceiver->waitForCompletionWithTimeout(NEO::WaitParams{false, false, NEO::TimeoutControls::maxTimeout}, engine.commandStreamReceiver->peekTaskCount()); + } } } } diff --git a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_xehp_and_later.inl b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_xehp_and_later.inl index 49ad124ecd..00cc4b8e14 100644 --- a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_xehp_and_later.inl +++ b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_xehp_and_later.inl @@ -34,7 +34,7 @@ bool L0GfxCoreHelperHw::platformSupportsPipelineSelectTracking() const { template bool L0GfxCoreHelperHw::platformSupportsStateBaseAddressTracking() const { - return false; + return true; } template diff --git a/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_enqueue_cmdlist.cpp b/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_enqueue_cmdlist.cpp index a999bbf56e..5c97eea738 100644 --- a/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_enqueue_cmdlist.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdqueue/test_cmdqueue_enqueue_cmdlist.cpp @@ -44,6 +44,9 @@ struct CommandQueueExecuteCommandLists : public Test { } void TearDown() override { + auto tagAddress = device->getNEODevice()->getDefaultEngine().commandStreamReceiver->getTagAddress(); + *tagAddress = std::numeric_limits::max(); + for (auto i = 0u; i < numCommandLists; i++) { auto commandList = CommandList::fromHandle(commandLists[i]); commandList->destroy(); diff --git a/level_zero/core/test/unit_tests/xe_hpc_core/test_l0_gfx_core_helper_xe_hpc_core.cpp b/level_zero/core/test/unit_tests/xe_hpc_core/test_l0_gfx_core_helper_xe_hpc_core.cpp index 17ceca4179..dc18547fcf 100644 --- a/level_zero/core/test/unit_tests/xe_hpc_core/test_l0_gfx_core_helper_xe_hpc_core.cpp +++ b/level_zero/core/test/unit_tests/xe_hpc_core/test_l0_gfx_core_helper_xe_hpc_core.cpp @@ -49,9 +49,9 @@ XE_HPC_CORETEST_F(L0GfxCoreHelperTestXeHpc, GivenXeHpcWhenCheckingL0HelperForPip EXPECT_TRUE(l0GfxCoreHelper.platformSupportsPipelineSelectTracking()); } -XE_HPC_CORETEST_F(L0GfxCoreHelperTestXeHpc, GivenXeHpcWhenCheckingL0HelperForStateBaseAddressTrackingSupportThenReturnFalse) { +XE_HPC_CORETEST_F(L0GfxCoreHelperTestXeHpc, GivenXeHpcWhenCheckingL0HelperForStateBaseAddressTrackingSupportThenReturnTrue) { auto &l0GfxCoreHelper = getHelper(); - EXPECT_FALSE(l0GfxCoreHelper.platformSupportsStateBaseAddressTracking()); + EXPECT_TRUE(l0GfxCoreHelper.platformSupportsStateBaseAddressTracking()); } XE_HPC_CORETEST_F(L0GfxCoreHelperTestXeHpc, GivenXeHpcWhenCheckingL0HelperForRayTracingSupportThenReturnTrue) { diff --git a/level_zero/core/test/unit_tests/xe_hpg_core/test_l0_gfx_core_helper_xe_hpg_core.cpp b/level_zero/core/test/unit_tests/xe_hpg_core/test_l0_gfx_core_helper_xe_hpg_core.cpp index 2d7ddfdd19..e7bc8d5b8b 100644 --- a/level_zero/core/test/unit_tests/xe_hpg_core/test_l0_gfx_core_helper_xe_hpg_core.cpp +++ b/level_zero/core/test/unit_tests/xe_hpg_core/test_l0_gfx_core_helper_xe_hpg_core.cpp @@ -51,9 +51,9 @@ XE_HPG_CORETEST_F(L0GfxCoreHelperTestXeHpg, GivenXeHpgWhenCheckingL0HelperForPip EXPECT_TRUE(l0GfxCoreHelper.platformSupportsPipelineSelectTracking()); } -XE_HPG_CORETEST_F(L0GfxCoreHelperTestXeHpg, GivenXeHpgWhenCheckingL0HelperForStateBaseAddressTrackingSupportThenReturnFalse) { +XE_HPG_CORETEST_F(L0GfxCoreHelperTestXeHpg, GivenXeHpgWhenCheckingL0HelperForStateBaseAddressTrackingSupportThenReturnTrue) { auto &l0GfxCoreHelper = getHelper(); - EXPECT_FALSE(l0GfxCoreHelper.platformSupportsStateBaseAddressTracking()); + EXPECT_TRUE(l0GfxCoreHelper.platformSupportsStateBaseAddressTracking()); } XE_HPG_CORETEST_F(L0GfxCoreHelperTestXeHpg, GivenXeHpgWhenCheckingL0HelperForRayTracingSupportThenReturnTrue) { diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index b5aa2b4361..d6bd5e491c 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -519,7 +519,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, OverrideDrmRegion, -1, "-1: disable, 0+: overrid DECLARE_DEBUG_VARIABLE(int32_t, EnableFrontEndTracking, -1, "-1: default: enabled, 0: disabled, 1: enabled. This flag creates multiple return point from List to Queue for Front End reconfiguration on Queue buffer for single List") DECLARE_DEBUG_VARIABLE(int32_t, EnablePipelineSelectTracking, -1, "-1: default: enabled, 0: disabled, 1: enabled. This flag enables optimization that limits number of pipeline select dispatched by command lists") DECLARE_DEBUG_VARIABLE(int32_t, EnableStateComputeModeTracking, -1, "-1: default: enabled, 0: disabled, 1: enabled. This flag enables tracking state compute mode changes in command lists") -DECLARE_DEBUG_VARIABLE(int32_t, EnableStateBaseAddressTracking, -1, "-1: default: disabled, 0: disabled, 1: enabled. This flag enables tracking state base address changes in command lists") +DECLARE_DEBUG_VARIABLE(int32_t, EnableStateBaseAddressTracking, -1, "-1: default: enabled, 0: disabled, 1: enabled. This flag enables tracking state base address changes in command lists") DECLARE_DEBUG_VARIABLE(int32_t, SelectCmdListHeapAddressModel, -1, "-1: default, 0: private heaps, 1: stateless, 2: bindless, 3: bindful. This flag selects default command list heap address model. Values should match HeapAddressModel enum") DECLARE_DEBUG_VARIABLE(int32_t, EnableSetPair, -1, "Use SET_PAIR to pair two buffer objects behind the same file descriptor, -1: default, 0: disabled, 1: enabled") /* Binary Cache */