From f4485ec5414ef858e983a8fdde90ead690ea6de4 Mon Sep 17 00:00:00 2001 From: Bartosz Dunajski Date: Tue, 21 Jun 2022 10:28:33 +0000 Subject: [PATCH] Use LogicalStateHelper for SIP programming Signed-off-by: Bartosz Dunajski --- .../core/source/cmdqueue/cmdqueue_hw.inl | 8 ++++++-- .../enqueue_command_without_kernel_tests.cpp | 2 +- .../command_stream_receiver.cpp | 5 +++++ .../command_stream/command_stream_receiver.h | 4 ++++ .../command_stream_receiver_hw.h | 2 -- .../command_stream_receiver_hw_base.inl | 2 +- shared/source/command_stream/preemption.h | 7 ++++++- shared/source/command_stream/preemption.inl | 19 +++++++++++++------ .../preemption_xehp_and_later.inl | 2 +- shared/source/gen11/hw_cmds_base.h | 4 +++- shared/source/gen11/preemption_gen11.cpp | 3 ++- shared/source/gen12lp/hw_cmds_base.h | 4 +++- shared/source/gen12lp/preemption_gen12lp.cpp | 3 ++- shared/source/gen8/hw_cmds_base.h | 4 +++- shared/source/gen8/preemption_gen8.cpp | 6 +++++- shared/source/gen9/hw_cmds_base.h | 3 ++- shared/source/gen9/preemption_gen9.cpp | 3 ++- shared/source/helpers/logical_state_helper.h | 3 ++- shared/source/xe_hp_core/hw_cmds_base.h | 4 +++- shared/source/xe_hpc_core/hw_cmds_base.h | 2 ++ shared/source/xe_hpg_core/hw_cmds_base.h | 4 +++- .../common/gen11/test_preemption_gen11.cpp | 2 +- .../gen12lp/test_preemption_gen12lp.cpp | 2 +- .../test/common/gen8/test_preemption_gen8.cpp | 2 +- .../test/common/gen9/test_preemption_gen9.cpp | 6 +++--- .../common/mocks/mock_logical_state_helper.h | 5 +++-- .../unit_test/preamble/preamble_tests.cpp | 2 +- .../unit_test/preemption/preemption_tests.cpp | 2 +- .../test_preemption_xehp_and_later.cpp | 4 ++-- .../source_level_debugger_preamble_test.inl | 8 ++++---- .../xe_hp_sdv/test_preemption_xe_hp_sdv.cpp | 2 +- 31 files changed, 87 insertions(+), 42 deletions(-) diff --git a/level_zero/core/source/cmdqueue/cmdqueue_hw.inl b/level_zero/core/source/cmdqueue/cmdqueue_hw.inl index e1ecd48e36..657f72d6de 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue_hw.inl +++ b/level_zero/core/source/cmdqueue/cmdqueue_hw.inl @@ -21,6 +21,7 @@ #include "shared/source/device/device.h" #include "shared/source/helpers/hw_helper.h" #include "shared/source/helpers/hw_info.h" +#include "shared/source/helpers/logical_state_helper.h" #include "shared/source/helpers/pipe_control_args.h" #include "shared/source/helpers/preamble.h" #include "shared/source/memory_manager/graphics_allocation.h" @@ -44,7 +45,6 @@ #include namespace L0 { - template ze_result_t CommandQueueHw::createFence(const ze_fence_desc_t *desc, ze_fence_handle_t *phFence) { @@ -333,7 +333,7 @@ ze_result_t CommandQueueHw::executeCommandLists( } if (stateSipRequired) { - NEO::PreemptionHelper::programStateSip(child, *neoDevice); + NEO::PreemptionHelper::programStateSip(child, *neoDevice, csr->getLogicalStateHelper()); } if (cmdQueuePreemption != commandQueuePreemptionMode) { @@ -367,6 +367,10 @@ ze_result_t CommandQueueHw::executeCommandLists( csrHw->programActivePartitionConfig(child); } + if (csr->getLogicalStateHelper()) { + csr->getLogicalStateHelper()->writeStreamInline(child); + } + for (auto i = 0u; i < numCommandLists; ++i) { auto commandList = CommandList::fromHandle(phCommandLists[i]); auto &cmdBufferAllocations = commandList->commandContainer.getCmdBufferAllocations(); diff --git a/opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp index 53871d01cd..61d972ad9a 100644 --- a/opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp @@ -66,7 +66,7 @@ HWTEST_F(EnqueueHandlerTest, givenLogicalStateHelperWhenDispatchingCommandsThenA using MI_NOOP = typename FamilyType::MI_NOOP; auto mockCmdQ = std::make_unique>(context, pClDevice, nullptr); - auto logicalStateHelper = new LogicalStateHelperMock(); + auto logicalStateHelper = new LogicalStateHelperMock(false); auto &ultCsr = static_cast &>(mockCmdQ->getGpgpuCommandStreamReceiver()); ultCsr.logicalStateHelper.reset(logicalStateHelper); diff --git a/shared/source/command_stream/command_stream_receiver.cpp b/shared/source/command_stream/command_stream_receiver.cpp index 4eca2e3afe..3c40569862 100644 --- a/shared/source/command_stream/command_stream_receiver.cpp +++ b/shared/source/command_stream/command_stream_receiver.cpp @@ -22,6 +22,7 @@ #include "shared/source/helpers/cache_policy.h" #include "shared/source/helpers/flush_stamp.h" #include "shared/source/helpers/hw_helper.h" +#include "shared/source/helpers/logical_state_helper.h" #include "shared/source/helpers/pause_on_gpu_properties.h" #include "shared/source/helpers/ray_tracing_helper.h" #include "shared/source/helpers/string.h" @@ -893,4 +894,8 @@ void CommandStreamReceiver::printTagAddressContent(uint32_t taskCountToWait, int PRINT_DEBUG_STRING(true, stdout, "%s", "\n"); } +LogicalStateHelper *CommandStreamReceiver::getLogicalStateHelper() const { + return logicalStateHelper.get(); +} + } // namespace NEO diff --git a/shared/source/command_stream/command_stream_receiver.h b/shared/source/command_stream/command_stream_receiver.h index e813192b79..164a33f7ce 100644 --- a/shared/source/command_stream/command_stream_receiver.h +++ b/shared/source/command_stream/command_stream_receiver.h @@ -51,6 +51,7 @@ class ScratchSpaceController; class HwPerfCounter; class HwTimeStamps; class TagAllocatorBase; +class LogicalStateHelper; template class TimestampPackets; @@ -337,6 +338,8 @@ class CommandStreamReceiver { return this->dispatchMode; } + LogicalStateHelper *getLogicalStateHelper() const; + protected: void cleanupResources(); void printDeviceIndex(); @@ -357,6 +360,7 @@ class CommandStreamReceiver { std::unique_ptr perfCounterAllocator; std::unique_ptr timestampPacketAllocator; std::unique_ptr userPauseConfirmation; + std::unique_ptr logicalStateHelper; ResidencyContainer residencyAllocations; ResidencyContainer evictionAllocations; diff --git a/shared/source/command_stream/command_stream_receiver_hw.h b/shared/source/command_stream/command_stream_receiver_hw.h index 464b18369e..83551a5423 100644 --- a/shared/source/command_stream/command_stream_receiver_hw.h +++ b/shared/source/command_stream/command_stream_receiver_hw.h @@ -24,7 +24,6 @@ namespace NEO { template class DeviceCommandStreamReceiver; struct PipeControlArgs; -class LogicalStateHelper; template class CommandStreamReceiverHw : public CommandStreamReceiver { @@ -190,7 +189,6 @@ class CommandStreamReceiverHw : public CommandStreamReceiver { std::unique_ptr>> directSubmission; std::unique_ptr>> blitterDirectSubmission; - std::unique_ptr logicalStateHelper; size_t cmdStreamStart = 0; }; 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 4ddeca33b5..3026062721 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_base.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_base.inl @@ -917,7 +917,7 @@ template inline void CommandStreamReceiverHw::programStateSip(LinearStream &cmdStream, Device &device) { bool debuggingEnabled = device.getDebugger() != nullptr; if (!this->isStateSipSent || debuggingEnabled) { - PreemptionHelper::programStateSip(cmdStream, device); + PreemptionHelper::programStateSip(cmdStream, device, logicalStateHelper.get()); this->isStateSipSent = true; } } diff --git a/shared/source/command_stream/preemption.h b/shared/source/command_stream/preemption.h index 82f0d6b7f4..210a2304aa 100644 --- a/shared/source/command_stream/preemption.h +++ b/shared/source/command_stream/preemption.h @@ -18,6 +18,7 @@ namespace NEO { class Device; class GraphicsAllocation; struct KernelDescriptor; +class LogicalStateHelper; struct PreemptionFlags { PreemptionFlags() { @@ -57,7 +58,7 @@ class PreemptionHelper { static void programCsrBaseAddress(LinearStream &preambleCmdStream, Device &device, const GraphicsAllocation *preemptionCsr); template - static void programStateSip(LinearStream &preambleCmdStream, Device &device); + static void programStateSip(LinearStream &preambleCmdStream, Device &device, LogicalStateHelper *logicalStateHelper); template static void programStateSipEndWa(LinearStream &cmdStream, Device &device); @@ -82,6 +83,10 @@ class PreemptionHelper { template static void programInterfaceDescriptorDataPreemption(INTERFACE_DESCRIPTOR_DATA *idd, PreemptionMode preemptionMode); + + protected: + template + static void programStateSipCmd(LinearStream &preambleCmdStream, GraphicsAllocation *sipAllocation, LogicalStateHelper *logicalStateHelper); }; template diff --git a/shared/source/command_stream/preemption.inl b/shared/source/command_stream/preemption.inl index 36ab095438..28eca10050 100644 --- a/shared/source/command_stream/preemption.inl +++ b/shared/source/command_stream/preemption.inl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2021 Intel Corporation + * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -30,7 +30,7 @@ void PreemptionHelper::programCsrBaseAddress(LinearStream &preambleCmdStream, De } template -void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device) { +void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device, LogicalStateHelper *logicalStateHelper) { using STATE_SIP = typename GfxFamily::STATE_SIP; bool debuggingEnabled = device.getDebugger() != nullptr || device.isDebuggerActive(); bool isMidThreadPreemption = device.getPreemptionMode() == PreemptionMode::MidThread; @@ -38,13 +38,20 @@ void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device & if (isMidThreadPreemption || debuggingEnabled) { auto sipAllocation = SipKernel::getSipKernel(device).getSipAllocation(); - auto sip = reinterpret_cast(preambleCmdStream.getSpace(sizeof(STATE_SIP))); - STATE_SIP cmd = GfxFamily::cmdInitStateSip; - cmd.setSystemInstructionPointer(sipAllocation->getGpuAddressToPatch()); - *sip = cmd; + programStateSipCmd(preambleCmdStream, sipAllocation, logicalStateHelper); } } +template +void PreemptionHelper::programStateSipCmd(LinearStream &preambleCmdStream, GraphicsAllocation *sipAllocation, LogicalStateHelper *logicalStateHelper) { + using STATE_SIP = typename GfxFamily::STATE_SIP; + + auto sip = reinterpret_cast(preambleCmdStream.getSpace(sizeof(STATE_SIP))); + STATE_SIP cmd = GfxFamily::cmdInitStateSip; + cmd.setSystemInstructionPointer(sipAllocation->getGpuAddressToPatch()); + *sip = cmd; +} + template void PreemptionHelper::programStateSipEndWa(LinearStream &cmdStream, Device &device) {} diff --git a/shared/source/command_stream/preemption_xehp_and_later.inl b/shared/source/command_stream/preemption_xehp_and_later.inl index f4f20add58..c426d7f632 100644 --- a/shared/source/command_stream/preemption_xehp_and_later.inl +++ b/shared/source/command_stream/preemption_xehp_and_later.inl @@ -10,7 +10,7 @@ void PreemptionHelper::programCsrBaseAddress(LinearStream &preambleCm } template <> -void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device) { +void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device, LogicalStateHelper *logicalStateHelper) { using STATE_SIP = typename GfxFamily::STATE_SIP; using MI_LOAD_REGISTER_IMM = typename GfxFamily::MI_LOAD_REGISTER_IMM; diff --git a/shared/source/gen11/hw_cmds_base.h b/shared/source/gen11/hw_cmds_base.h index 42431028f8..774d6dbff7 100644 --- a/shared/source/gen11/hw_cmds_base.h +++ b/shared/source/gen11/hw_cmds_base.h @@ -15,8 +15,9 @@ #include template struct CmdParse; -namespace NEO { +namespace NEO { +class LogicalStateHelper; struct GEN11 { #include "shared/source/generated/gen11/hw_cmds_generated_gen11.inl" @@ -58,6 +59,7 @@ struct ICLFamily : public GEN11 { using XY_COPY_BLT = typename GfxFamily::XY_SRC_COPY_BLT; using MI_STORE_REGISTER_MEM_CMD = typename GfxFamily::MI_STORE_REGISTER_MEM; using TimestampPacketType = uint32_t; + using LogicalStateHelperHw = LogicalStateHelper; static const GPGPU_WALKER cmdInitGpgpuWalker; static const INTERFACE_DESCRIPTOR_DATA cmdInitInterfaceDescriptorData; static const MEDIA_INTERFACE_DESCRIPTOR_LOAD cmdInitMediaInterfaceDescriptorLoad; diff --git a/shared/source/gen11/preemption_gen11.cpp b/shared/source/gen11/preemption_gen11.cpp index 16a4427261..29467cf5b6 100644 --- a/shared/source/gen11/preemption_gen11.cpp +++ b/shared/source/gen11/preemption_gen11.cpp @@ -17,7 +17,8 @@ template void PreemptionHelper::programCmdStream(LinearStream &cmdStr PreemptionMode oldPreemptionMode, GraphicsAllocation *preemptionCsr); template size_t PreemptionHelper::getRequiredPreambleSize(const Device &device); template void PreemptionHelper::programCsrBaseAddress(LinearStream &preambleCmdStream, Device &device, const GraphicsAllocation *preemptionCsr); -template void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device); +template void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device, LogicalStateHelper *logicalStateHelper); +template void PreemptionHelper::programStateSipCmd(LinearStream &preambleCmdStream, GraphicsAllocation *sipAllocation, LogicalStateHelper *logicalStateHelper); template size_t PreemptionHelper::getRequiredStateSipCmdSize(Device &device, bool isRcs); template size_t PreemptionHelper::getRequiredCmdStreamSize(PreemptionMode newPreemptionMode, PreemptionMode oldPreemptionMode); template size_t PreemptionHelper::getPreemptionWaCsSize(const Device &device); diff --git a/shared/source/gen12lp/hw_cmds_base.h b/shared/source/gen12lp/hw_cmds_base.h index 320320c494..b970e15c9b 100644 --- a/shared/source/gen12lp/hw_cmds_base.h +++ b/shared/source/gen12lp/hw_cmds_base.h @@ -17,8 +17,9 @@ template struct CmdParse; -namespace NEO { +namespace NEO { +class LogicalStateHelper; struct GEN12LP { #include "shared/source/generated/gen12lp/hw_cmds_generated_gen12lp.inl" @@ -61,6 +62,7 @@ struct TGLLPFamily : public GEN12LP { using XY_COLOR_BLT = typename GfxFamily::XY_FAST_COLOR_BLT; using MI_STORE_REGISTER_MEM_CMD = typename GfxFamily::MI_STORE_REGISTER_MEM; using TimestampPacketType = uint32_t; + using LogicalStateHelperHw = LogicalStateHelper; static const GPGPU_WALKER cmdInitGpgpuWalker; static const INTERFACE_DESCRIPTOR_DATA cmdInitInterfaceDescriptorData; static const MEDIA_INTERFACE_DESCRIPTOR_LOAD cmdInitMediaInterfaceDescriptorLoad; diff --git a/shared/source/gen12lp/preemption_gen12lp.cpp b/shared/source/gen12lp/preemption_gen12lp.cpp index 59d11fc89e..4b52c2cd0c 100644 --- a/shared/source/gen12lp/preemption_gen12lp.cpp +++ b/shared/source/gen12lp/preemption_gen12lp.cpp @@ -17,7 +17,8 @@ template void PreemptionHelper::programCmdStream(LinearStream &cmdStr PreemptionMode oldPreemptionMode, GraphicsAllocation *preemptionCsr); template size_t PreemptionHelper::getRequiredPreambleSize(const Device &device); template void PreemptionHelper::programCsrBaseAddress(LinearStream &preambleCmdStream, Device &device, const GraphicsAllocation *preemptionCsr); -template void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device); +template void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device, LogicalStateHelper *logicalStateHelper); +template void PreemptionHelper::programStateSipCmd(LinearStream &preambleCmdStream, GraphicsAllocation *sipAllocation, LogicalStateHelper *logicalStateHelper); template size_t PreemptionHelper::getRequiredStateSipCmdSize(Device &device, bool isRcs); template size_t PreemptionHelper::getRequiredCmdStreamSize(PreemptionMode newPreemptionMode, PreemptionMode oldPreemptionMode); template size_t PreemptionHelper::getPreemptionWaCsSize(const Device &device); diff --git a/shared/source/gen8/hw_cmds_base.h b/shared/source/gen8/hw_cmds_base.h index 0ef8641bba..c64f5fad1a 100644 --- a/shared/source/gen8/hw_cmds_base.h +++ b/shared/source/gen8/hw_cmds_base.h @@ -17,8 +17,9 @@ //forward declaration for parsing logic template struct CmdParse; -namespace NEO { +namespace NEO { +class LogicalStateHelper; struct GEN8 { #include "shared/source/generated/gen8/hw_cmds_generated_gen8.inl" @@ -60,6 +61,7 @@ struct BDWFamily : public GEN8 { using XY_COPY_BLT = typename GfxFamily::XY_SRC_COPY_BLT; using MI_STORE_REGISTER_MEM_CMD = typename GfxFamily::MI_STORE_REGISTER_MEM; using TimestampPacketType = uint32_t; + using LogicalStateHelperHw = LogicalStateHelper; static const GPGPU_WALKER cmdInitGpgpuWalker; static const INTERFACE_DESCRIPTOR_DATA cmdInitInterfaceDescriptorData; static const MEDIA_INTERFACE_DESCRIPTOR_LOAD cmdInitMediaInterfaceDescriptorLoad; diff --git a/shared/source/gen8/preemption_gen8.cpp b/shared/source/gen8/preemption_gen8.cpp index bb926649b8..da9d2a0e41 100644 --- a/shared/source/gen8/preemption_gen8.cpp +++ b/shared/source/gen8/preemption_gen8.cpp @@ -58,7 +58,11 @@ void PreemptionHelper::programCsrBaseAddress(LinearStream &preambleCm } template <> -void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device) { +void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device, LogicalStateHelper *logicalStateHelper) { +} + +template <> +void PreemptionHelper::programStateSipCmd(LinearStream &preambleCmdStream, GraphicsAllocation *sipAllocation, LogicalStateHelper *logicalStateHelper) { } template <> diff --git a/shared/source/gen9/hw_cmds_base.h b/shared/source/gen9/hw_cmds_base.h index d65f5eecb4..a757610ed7 100644 --- a/shared/source/gen9/hw_cmds_base.h +++ b/shared/source/gen9/hw_cmds_base.h @@ -18,7 +18,7 @@ template struct CmdParse; namespace NEO { - +class LogicalStateHelper; struct GEN9 { #include "shared/source/generated/gen9/hw_cmds_generated_gen9.inl" @@ -61,6 +61,7 @@ struct SKLFamily : public GEN9 { using XY_COPY_BLT = typename GfxFamily::XY_SRC_COPY_BLT; using MI_STORE_REGISTER_MEM_CMD = typename GfxFamily::MI_STORE_REGISTER_MEM; using TimestampPacketType = uint32_t; + using LogicalStateHelperHw = LogicalStateHelper; static const GPGPU_WALKER cmdInitGpgpuWalker; static const INTERFACE_DESCRIPTOR_DATA cmdInitInterfaceDescriptorData; static const MEDIA_INTERFACE_DESCRIPTOR_LOAD cmdInitMediaInterfaceDescriptorLoad; diff --git a/shared/source/gen9/preemption_gen9.cpp b/shared/source/gen9/preemption_gen9.cpp index f3b54d106b..3aac37be08 100644 --- a/shared/source/gen9/preemption_gen9.cpp +++ b/shared/source/gen9/preemption_gen9.cpp @@ -71,7 +71,8 @@ template void PreemptionHelper::programCmdStream(LinearStream &cmdStr template size_t PreemptionHelper::getRequiredPreambleSize(const Device &device); template void PreemptionHelper::programCsrBaseAddress(LinearStream &preambleCmdStream, Device &device, const GraphicsAllocation *preemptionCsr); -template void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device); +template void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device &device, LogicalStateHelper *logicalStateHelper); +template void PreemptionHelper::programStateSipCmd(LinearStream &preambleCmdStream, GraphicsAllocation *sipAllocation, LogicalStateHelper *logicalStateHelper); template size_t PreemptionHelper::getRequiredStateSipCmdSize(Device &device, bool isRcs); template size_t PreemptionHelper::getRequiredCmdStreamSize(PreemptionMode newPreemptionMode, PreemptionMode oldPreemptionMode); template void PreemptionHelper::programStateSipEndWa(LinearStream &cmdStream, Device &device); diff --git a/shared/source/helpers/logical_state_helper.h b/shared/source/helpers/logical_state_helper.h index c32e454d6b..38942b4ef2 100644 --- a/shared/source/helpers/logical_state_helper.h +++ b/shared/source/helpers/logical_state_helper.h @@ -20,7 +20,8 @@ class LogicalStateHelper { virtual void writeStreamInline(LinearStream &linearStream) = 0; protected: - LogicalStateHelper() = default; + LogicalStateHelper(bool pipelinedState){}; + LogicalStateHelper() = delete; }; } // namespace NEO \ No newline at end of file diff --git a/shared/source/xe_hp_core/hw_cmds_base.h b/shared/source/xe_hp_core/hw_cmds_base.h index fc421ba569..e350b6a933 100644 --- a/shared/source/xe_hp_core/hw_cmds_base.h +++ b/shared/source/xe_hp_core/hw_cmds_base.h @@ -17,8 +17,9 @@ template struct CmdParse; -namespace NEO { +namespace NEO { +class LogicalStateHelper; struct XeHpCore { #include "shared/source/generated/xe_hp_core/hw_cmds_generated_xe_hp_core.inl" @@ -68,6 +69,7 @@ struct XeHpFamily : public XeHpCore { using XY_COLOR_BLT = typename GfxFamily::XY_FAST_COLOR_BLT; using MI_STORE_REGISTER_MEM_CMD = typename GfxFamily::MI_STORE_REGISTER_MEM; using TimestampPacketType = uint32_t; + using LogicalStateHelperHw = LogicalStateHelper; static const COMPUTE_WALKER cmdInitGpgpuWalker; static const CFE_STATE cmdInitCfeState; static const INTERFACE_DESCRIPTOR_DATA cmdInitInterfaceDescriptorData; diff --git a/shared/source/xe_hpc_core/hw_cmds_base.h b/shared/source/xe_hpc_core/hw_cmds_base.h index b76e465e75..4eda040800 100644 --- a/shared/source/xe_hpc_core/hw_cmds_base.h +++ b/shared/source/xe_hpc_core/hw_cmds_base.h @@ -20,6 +20,7 @@ template struct CmdParse; namespace NEO { +class LogicalStateHelper; struct XE_HPC_CORE { #include "shared/source/generated/xe_hpc_core/hw_cmds_generated_xe_hpc_core.inl" @@ -68,6 +69,7 @@ struct XE_HPC_COREFamily : public XE_HPC_CORE { using XY_COLOR_BLT = typename GfxFamily::XY_FAST_COLOR_BLT; using MI_STORE_REGISTER_MEM_CMD = typename GfxFamily::MI_STORE_REGISTER_MEM; using TimestampPacketType = uint32_t; + using LogicalStateHelperHw = LogicalStateHelper; static const COMPUTE_WALKER cmdInitGpgpuWalker; static const CFE_STATE cmdInitCfeState; static const INTERFACE_DESCRIPTOR_DATA cmdInitInterfaceDescriptorData; diff --git a/shared/source/xe_hpg_core/hw_cmds_base.h b/shared/source/xe_hpg_core/hw_cmds_base.h index 4168dd3c45..8ceb4a9352 100644 --- a/shared/source/xe_hpg_core/hw_cmds_base.h +++ b/shared/source/xe_hpg_core/hw_cmds_base.h @@ -17,8 +17,9 @@ template struct CmdParse; -namespace NEO { +namespace NEO { +class LogicalStateHelper; struct XE_HPG_CORE { #include "shared/source/generated/xe_hpg_core/hw_cmds_generated_xe_hpg_core.inl" @@ -68,6 +69,7 @@ struct XE_HPG_COREFamily : public XE_HPG_CORE { using XY_COLOR_BLT = typename GfxFamily::XY_FAST_COLOR_BLT; using MI_STORE_REGISTER_MEM_CMD = typename GfxFamily::MI_STORE_REGISTER_MEM; using TimestampPacketType = uint32_t; + using LogicalStateHelperHw = LogicalStateHelper; static const COMPUTE_WALKER cmdInitGpgpuWalker; static const CFE_STATE cmdInitCfeState; static const INTERFACE_DESCRIPTOR_DATA cmdInitInterfaceDescriptorData; diff --git a/shared/test/common/gen11/test_preemption_gen11.cpp b/shared/test/common/gen11/test_preemption_gen11.cpp index dad417c018..654be56976 100644 --- a/shared/test/common/gen11/test_preemption_gen11.cpp +++ b/shared/test/common/gen11/test_preemption_gen11.cpp @@ -55,7 +55,7 @@ GEN11TEST_F(Gen11PreemptionTests, whenMidThreadPreemptionIsAvailableThenStateSip ASSERT_LE(requiredCmdStreamSize, streamStorage.size()); LinearStream cmdStream{streamStorage.begin(), streamStorage.size()}; - PreemptionHelper::programStateSip(cmdStream, *device); + PreemptionHelper::programStateSip(cmdStream, *device, nullptr); HardwareParse hwParsePreamble; hwParsePreamble.parseCommands(cmdStream); diff --git a/shared/test/common/gen12lp/test_preemption_gen12lp.cpp b/shared/test/common/gen12lp/test_preemption_gen12lp.cpp index edf95761de..60aa894b92 100644 --- a/shared/test/common/gen12lp/test_preemption_gen12lp.cpp +++ b/shared/test/common/gen12lp/test_preemption_gen12lp.cpp @@ -32,7 +32,7 @@ GEN12LPTEST_F(Gen12LpPreemptionTests, whenProgramStateSipIsCalledThenStateSipCmd LinearStream cmdStream{streamStorage.begin(), streamStorage.size()}; EXPECT_NE(0U, requiredSize); - PreemptionHelper::programStateSip(cmdStream, *device); + PreemptionHelper::programStateSip(cmdStream, *device, nullptr); EXPECT_NE(0U, cmdStream.getUsed()); } diff --git a/shared/test/common/gen8/test_preemption_gen8.cpp b/shared/test/common/gen8/test_preemption_gen8.cpp index e6d75e0478..7f1d14f1e5 100644 --- a/shared/test/common/gen8/test_preemption_gen8.cpp +++ b/shared/test/common/gen8/test_preemption_gen8.cpp @@ -32,7 +32,7 @@ GEN8TEST_F(Gen8PreemptionTests, whenProgramStateSipIsCalledThenNoCmdsAreProgramm EXPECT_EQ(0U, requiredSize); LinearStream cmdStream{nullptr, 0}; - PreemptionHelper::programStateSip(cmdStream, *device); + PreemptionHelper::programStateSip(cmdStream, *device, nullptr); EXPECT_EQ(0U, cmdStream.getUsed()); } diff --git a/shared/test/common/gen9/test_preemption_gen9.cpp b/shared/test/common/gen9/test_preemption_gen9.cpp index 05ed35dd74..420c35cfec 100644 --- a/shared/test/common/gen9/test_preemption_gen9.cpp +++ b/shared/test/common/gen9/test_preemption_gen9.cpp @@ -39,7 +39,7 @@ GEN9TEST_F(Gen9PreemptionTests, whenMidThreadPreemptionIsNotAvailableThenDoesNot EXPECT_EQ(0U, requiredSize); LinearStream cmdStream{nullptr, 0}; - PreemptionHelper::programStateSip(cmdStream, *device); + PreemptionHelper::programStateSip(cmdStream, *device, nullptr); EXPECT_EQ(0U, cmdStream.getUsed()); } @@ -61,7 +61,7 @@ GEN9TEST_F(Gen9PreemptionTests, whenMidThreadPreemptionIsAvailableThenStateSipIs ASSERT_LE(requiredCmdStreamSize, streamStorage.size()); LinearStream cmdStream{streamStorage.begin(), streamStorage.size()}; - PreemptionHelper::programStateSip(cmdStream, *device); + PreemptionHelper::programStateSip(cmdStream, *device, nullptr); HardwareParse hwParsePreamble; hwParsePreamble.parseCommands(cmdStream); @@ -150,7 +150,7 @@ GEN9TEST_F(Gen9PreemptionTests, givenMidThreadPreemptionModeWhenStateSipIsProgra preemptionBuffer.resize(cmdSizePreemptionMidThread); LinearStream preemptionStream(&*preemptionBuffer.begin(), preemptionBuffer.size()); - PreemptionHelper::programStateSip(preemptionStream, *mockDevice); + PreemptionHelper::programStateSip(preemptionStream, *mockDevice, nullptr); HardwareParse hwParserOnlyPreemption; hwParserOnlyPreemption.parseCommands(preemptionStream, 0); diff --git a/shared/test/common/mocks/mock_logical_state_helper.h b/shared/test/common/mocks/mock_logical_state_helper.h index 2a113ca769..fe963ec06f 100644 --- a/shared/test/common/mocks/mock_logical_state_helper.h +++ b/shared/test/common/mocks/mock_logical_state_helper.h @@ -15,9 +15,10 @@ namespace NEO { template -class LogicalStateHelperMock : public LogicalStateHelper { +class LogicalStateHelperMock : public GfxFamily::LogicalStateHelperHw { public: - LogicalStateHelperMock() = default; + LogicalStateHelperMock(bool pipelinedState) : GfxFamily::LogicalStateHelperHw(pipelinedState) { + } void writeStreamInline(LinearStream &linearStream) override { writeStreamInlineCalledCounter++; diff --git a/shared/test/unit_test/preamble/preamble_tests.cpp b/shared/test/unit_test/preamble/preamble_tests.cpp index f97f2fbea1..00e936197e 100644 --- a/shared/test/unit_test/preamble/preamble_tests.cpp +++ b/shared/test/unit_test/preamble/preamble_tests.cpp @@ -77,7 +77,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, PreambleTest, givenMidThreadPreemptionWhenPreambleIs PreambleHelper::programPreamble(&preambleStream, *mockDevice, 0U, &csrSurface); - PreemptionHelper::programStateSip(preemptionStream, *mockDevice); + PreemptionHelper::programStateSip(preemptionStream, *mockDevice, nullptr); HardwareParse hwParserPreamble; hwParserPreamble.parseCommands(preambleStream, 0); diff --git a/shared/test/unit_test/preemption/preemption_tests.cpp b/shared/test/unit_test/preemption/preemption_tests.cpp index 4c9c45ff41..d27a09d206 100644 --- a/shared/test/unit_test/preemption/preemption_tests.cpp +++ b/shared/test/unit_test/preemption/preemption_tests.cpp @@ -207,7 +207,7 @@ HWTEST_P(PreemptionTest, whenInNonMidThreadModeThenStateSipIsNotProgrammed) { StackVec buffer(requiredSize); LinearStream cmdStream(buffer.begin(), buffer.size()); - PreemptionHelper::programStateSip(cmdStream, *mockDevice); + PreemptionHelper::programStateSip(cmdStream, *mockDevice, nullptr); EXPECT_EQ(0u, cmdStream.getUsed()); } diff --git a/shared/test/unit_test/preemption/test_preemption_xehp_and_later.cpp b/shared/test/unit_test/preemption/test_preemption_xehp_and_later.cpp index 08c8ea37b3..196af05c21 100644 --- a/shared/test/unit_test/preemption/test_preemption_xehp_and_later.cpp +++ b/shared/test/unit_test/preemption/test_preemption_xehp_and_later.cpp @@ -24,7 +24,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterPreemptionTests, whenProgramStateSipIsC EXPECT_EQ(0U, requiredSize); LinearStream cmdStream{nullptr, 0}; - PreemptionHelper::programStateSip(cmdStream, *device); + PreemptionHelper::programStateSip(cmdStream, *device, nullptr); EXPECT_EQ(0U, cmdStream.getUsed()); } @@ -117,7 +117,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterPreemptionTests, GivenDebuggerUsedWhenP uint64_t buffer[bufferSize]; LinearStream cmdStream{buffer, bufferSize * sizeof(uint64_t)}; - PreemptionHelper::programStateSip(cmdStream, *device); + PreemptionHelper::programStateSip(cmdStream, *device, nullptr); EXPECT_EQ(sizeof(STATE_SIP), cmdStream.getUsed()); auto sipAllocation = SipKernel::getSipKernel(*device).getSipAllocation(); diff --git a/shared/test/unit_test/source_level_debugger/source_level_debugger_preamble_test.inl b/shared/test/unit_test/source_level_debugger/source_level_debugger_preamble_test.inl index fd57054c89..a78ee239cb 100644 --- a/shared/test/unit_test/source_level_debugger/source_level_debugger_preamble_test.inl +++ b/shared/test/unit_test/source_level_debugger/source_level_debugger_preamble_test.inl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2021 Intel Corporation + * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -20,7 +20,7 @@ void SourceLevelDebuggerPreambleTest::givenMidThreadPreemptionAndDebu preambleBuffer.resize(cmdSizePreemptionMidThread); LinearStream preambleStream(&*preambleBuffer.begin(), preambleBuffer.size()); - PreemptionHelper::programStateSip(preambleStream, *mockDevice); + PreemptionHelper::programStateSip(preambleStream, *mockDevice, nullptr); HardwareParse hwParser; hwParser.parseCommands(preambleStream); @@ -45,7 +45,7 @@ void SourceLevelDebuggerPreambleTest::givenMidThreadPreemptionAndDisa preambleBuffer.resize(cmdSizePreemptionMidThread); LinearStream preambleStream(&*preambleBuffer.begin(), preambleBuffer.size()); - PreemptionHelper::programStateSip(preambleStream, *mockDevice); + PreemptionHelper::programStateSip(preambleStream, *mockDevice, nullptr); HardwareParse hwParser; hwParser.parseCommands(preambleStream); @@ -70,7 +70,7 @@ void SourceLevelDebuggerPreambleTest::givenPreemptionDisabledAndDebug preambleBuffer.resize(cmdSizePreemptionMidThread); LinearStream preambleStream(&*preambleBuffer.begin(), preambleBuffer.size()); - PreemptionHelper::programStateSip(preambleStream, *mockDevice); + PreemptionHelper::programStateSip(preambleStream, *mockDevice, nullptr); HardwareParse hwParser; hwParser.parseCommands(preambleStream); diff --git a/shared/test/unit_test/xe_hp_core/xe_hp_sdv/test_preemption_xe_hp_sdv.cpp b/shared/test/unit_test/xe_hp_core/xe_hp_sdv/test_preemption_xe_hp_sdv.cpp index 42212e54ad..3970c5aae8 100644 --- a/shared/test/unit_test/xe_hp_core/xe_hp_sdv/test_preemption_xe_hp_sdv.cpp +++ b/shared/test/unit_test/xe_hp_core/xe_hp_sdv/test_preemption_xe_hp_sdv.cpp @@ -44,7 +44,7 @@ XEHPTEST_F(PreemptionXeHPTest, givenRevisionA0toBWhenProgrammingSipThenGlobalSip auto expectedGlobalSipWaSize = sizeof(PIPE_CONTROL) + 2 * sizeof(MI_LOAD_REGISTER_IMM); EXPECT_EQ(expectedGlobalSipWaSize, requiredSize); - PreemptionHelper::programStateSip(cmdStream, *mockDevice); + PreemptionHelper::programStateSip(cmdStream, *mockDevice, nullptr); EXPECT_NE(0U, cmdStream.getUsed()); GenCmdList cmdList;