From 982c2d665b147a17eea5f9cfe24c194170e8ec7a Mon Sep 17 00:00:00 2001 From: Kamil Kopryk Date: Fri, 24 Nov 2023 13:39:13 +0000 Subject: [PATCH] feature: add programming heapless mode in SBA Related-To: NEO-7621 Signed-off-by: Kamil Kopryk --- .../core/source/cmdqueue/cmdqueue_hw_skl_to_tgllp.inl | 3 ++- .../source/cmdqueue/cmdqueue_xe_hp_core_and_later.inl | 3 ++- .../command_container/command_encoder_bdw_and_later.inl | 3 ++- .../command_container/command_encoder_xehp_and_later.inl | 3 ++- .../command_stream/command_stream_receiver_hw_base.inl | 3 ++- shared/source/helpers/state_base_address.h | 3 +++ shared/source/helpers/state_base_address_base.inl | 8 ++++++++ 7 files changed, 21 insertions(+), 5 deletions(-) diff --git a/level_zero/core/source/cmdqueue/cmdqueue_hw_skl_to_tgllp.inl b/level_zero/core/source/cmdqueue/cmdqueue_hw_skl_to_tgllp.inl index 5de6b0c026..c9b2043c7e 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue_hw_skl_to_tgllp.inl +++ b/level_zero/core/source/cmdqueue/cmdqueue_hw_skl_to_tgllp.inl @@ -88,7 +88,8 @@ void CommandQueueHw::programStateBaseAddress(uint64_t gsba, bool false, // areMultipleSubDevicesInContext false, // overrideSurfaceStateBaseAddress isDebuggerActive, // isDebuggerActive - this->doubleSbaWa // doubleSbaWa + this->doubleSbaWa, // doubleSbaWa + this->heaplessModeEnabled // this->heaplessModeEnabled }; NEO::StateBaseAddressHelper::programStateBaseAddressIntoCommandStream(stateBaseAddressHelperArgs, commandStream); diff --git a/level_zero/core/source/cmdqueue/cmdqueue_xe_hp_core_and_later.inl b/level_zero/core/source/cmdqueue/cmdqueue_xe_hp_core_and_later.inl index d37f064b30..d1c068bcf8 100644 --- a/level_zero/core/source/cmdqueue/cmdqueue_xe_hp_core_and_later.inl +++ b/level_zero/core/source/cmdqueue/cmdqueue_xe_hp_core_and_later.inl @@ -86,7 +86,8 @@ void CommandQueueHw::programStateBaseAddress(uint64_t gsba, bool false, // areMultipleSubDevicesInContext false, // overrideSurfaceStateBaseAddress isDebuggerActive, // isDebuggerActive - this->doubleSbaWa // doubleSbaWa + this->doubleSbaWa, // doubleSbaWa + this->heaplessModeEnabled // heaplessModeEnabled }; NEO::StateBaseAddressHelper::programStateBaseAddressIntoCommandStream(stateBaseAddressHelperArgs, commandStream); diff --git a/shared/source/command_container/command_encoder_bdw_and_later.inl b/shared/source/command_container/command_encoder_bdw_and_later.inl index 50e29d2ec6..e203489957 100644 --- a/shared/source/command_container/command_encoder_bdw_and_later.inl +++ b/shared/source/command_container/command_encoder_bdw_and_later.inl @@ -478,7 +478,8 @@ void EncodeStateBaseAddress::encode(EncodeStateBaseAddressArgs & false, // areMultipleSubDevicesInContext false, // overrideSurfaceStateBaseAddress isDebuggerActive, // isDebuggerActive - args.doubleSbaWa // doubleSbaWa + args.doubleSbaWa, // doubleSbaWa + args.heaplessModeEnabled // heaplessModeEnabled }; StateBaseAddressHelper::programStateBaseAddressIntoCommandStream(stateBaseAddressHelperArgs, diff --git a/shared/source/command_container/command_encoder_xehp_and_later.inl b/shared/source/command_container/command_encoder_xehp_and_later.inl index 8f264777af..19dff0abfb 100644 --- a/shared/source/command_container/command_encoder_xehp_and_later.inl +++ b/shared/source/command_container/command_encoder_xehp_and_later.inl @@ -608,7 +608,8 @@ void EncodeStateBaseAddress::encode(EncodeStateBaseAddressArgs & false, // areMultipleSubDevicesInContext false, // overrideSurfaceStateBaseAddress isDebuggerActive, // isDebuggerActive - args.doubleSbaWa // doubleSbaWa + args.doubleSbaWa, // doubleSbaWa + args.heaplessModeEnabled // heaplessModeEnabled }; StateBaseAddressHelper::programStateBaseAddressIntoCommandStream(stateBaseAddressHelperArgs, 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 b3c336c68d..c76e42ee1a 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_base.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_base.inl @@ -1840,7 +1840,8 @@ inline void CommandStreamReceiverHw::programStateBaseAddressCommon( areMultipleSubDevicesInContext, // areMultipleSubDevicesInContext false, // overrideSurfaceStateBaseAddress debuggingEnabled, // isDebuggerActive - this->doubleSbaWa // doubleSbaWa + this->doubleSbaWa, // doubleSbaWa + this->heaplessModeEnabled // heaplessModeEnabled }; StateBaseAddressHelper::programStateBaseAddressIntoCommandStream(args, csrCommandStream); diff --git a/shared/source/helpers/state_base_address.h b/shared/source/helpers/state_base_address.h index 334ab3d66a..f3fdc74d43 100644 --- a/shared/source/helpers/state_base_address.h +++ b/shared/source/helpers/state_base_address.h @@ -54,6 +54,7 @@ struct StateBaseAddressHelperArgs { bool overrideSurfaceStateBaseAddress = false; bool isDebuggerActive = false; bool doubleSbaWa = false; + bool heaplessModeEnabled = false; }; template @@ -76,5 +77,7 @@ struct StateBaseAddressHelper { static void programBindingTableBaseAddress(LinearStream &commandStream, uint64_t baseAddress, uint32_t sizeInPages, GmmHelper *gmmHelper); static uint32_t getMaxBindlessSurfaceStates(); + + static void programHeaplessStateBaseAddress(STATE_BASE_ADDRESS &sba); }; } // namespace NEO diff --git a/shared/source/helpers/state_base_address_base.inl b/shared/source/helpers/state_base_address_base.inl index fae3edc56a..eae13976ad 100644 --- a/shared/source/helpers/state_base_address_base.inl +++ b/shared/source/helpers/state_base_address_base.inl @@ -23,6 +23,10 @@ template void StateBaseAddressHelper::programStateBaseAddressIntoCommandStream(StateBaseAddressHelperArgs &args, NEO::LinearStream &commandStream) { StateBaseAddressHelper::programStateBaseAddress(args); + if (args.heaplessModeEnabled) { + programHeaplessStateBaseAddress(*args.stateBaseAddressCmd); + } + auto cmdSpace = StateBaseAddressHelper::getSpaceForSbaCmd(commandStream); *cmdSpace = *args.stateBaseAddressCmd; @@ -133,6 +137,10 @@ typename GfxFamily::STATE_BASE_ADDRESS *StateBaseAddressHelper::getSp return cmdStream.getSpaceForCmd(); } +template +void StateBaseAddressHelper::programHeaplessStateBaseAddress(STATE_BASE_ADDRESS &sba) { +} + template void StateBaseAddressHelper::programBindingTableBaseAddress(LinearStream &commandStream, const IndirectHeap &ssh, GmmHelper *gmmHelper) { StateBaseAddressHelper::programBindingTableBaseAddress(commandStream, ssh.getHeapGpuBase(), ssh.getHeapSizeInPages(), gmmHelper);