mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-30 01:35:20 +08:00
refactor: sba type helper
Signed-off-by: Jack Myers <jack.myers@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
249443dcd8
commit
f06bb256c7
@@ -16,6 +16,7 @@
|
||||
#include "shared/source/helpers/definitions/command_encoder_args.h"
|
||||
#include "shared/source/helpers/hw_info.h"
|
||||
#include "shared/source/helpers/register_offsets.h"
|
||||
#include "shared/source/helpers/state_base_address_helper.h"
|
||||
#include "shared/source/kernel/kernel_arg_descriptor.h"
|
||||
#include "shared/source/kernel/kernel_execution_type.h"
|
||||
|
||||
@@ -497,7 +498,7 @@ struct EncodeMediaInterfaceDescriptorLoad {
|
||||
|
||||
template <typename GfxFamily>
|
||||
struct EncodeStateBaseAddressArgs {
|
||||
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
|
||||
using STATE_BASE_ADDRESS = typename StateBaseAddressTypeHelper<GfxFamily>::type;
|
||||
|
||||
CommandContainer *container = nullptr;
|
||||
STATE_BASE_ADDRESS &sbaCmd;
|
||||
@@ -515,7 +516,7 @@ struct EncodeStateBaseAddressArgs {
|
||||
|
||||
template <typename GfxFamily>
|
||||
struct EncodeStateBaseAddress {
|
||||
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
|
||||
using STATE_BASE_ADDRESS = StateBaseAddressTypeHelper<GfxFamily>::type;
|
||||
static void encode(EncodeStateBaseAddressArgs<GfxFamily> &args);
|
||||
static size_t getRequiredSizeForStateBaseAddress(Device &device, CommandContainer &container, bool isRcs);
|
||||
static void setSbaTrackingForL0DebuggerIfEnabled(bool trackingEnabled,
|
||||
|
||||
@@ -50,7 +50,6 @@ namespace NEO {
|
||||
template <typename Family>
|
||||
template <typename WalkerType>
|
||||
void EncodeDispatchKernel<Family>::encode(CommandContainer &container, EncodeDispatchKernelArgs &args) {
|
||||
using STATE_BASE_ADDRESS = typename Family::STATE_BASE_ADDRESS;
|
||||
|
||||
UNRECOVERABLE_IF(args.makeCommandView && (args.cpuWalkerBuffer == nullptr || args.cpuPayloadBuffer == nullptr));
|
||||
|
||||
@@ -296,40 +295,43 @@ void EncodeDispatchKernel<Family>::encode(CommandContainer &container, EncodeDis
|
||||
}
|
||||
}
|
||||
|
||||
if (args.isHeaplessStateInitEnabled == false && !args.makeCommandView) {
|
||||
if (container.isAnyHeapDirty() ||
|
||||
args.requiresUncachedMocs) {
|
||||
if constexpr (NEO::GfxFamilyWithSBA<Family>) {
|
||||
if (args.isHeaplessStateInitEnabled == false && !args.makeCommandView) {
|
||||
if (container.isAnyHeapDirty() ||
|
||||
args.requiresUncachedMocs) {
|
||||
|
||||
PipeControlArgs syncArgs;
|
||||
syncArgs.dcFlushEnable = args.postSyncArgs.dcFlushEnable;
|
||||
MemorySynchronizationCommands<Family>::addSingleBarrier(*container.getCommandStream(), syncArgs);
|
||||
STATE_BASE_ADDRESS sbaCmd;
|
||||
auto gmmHelper = container.getDevice()->getGmmHelper();
|
||||
uint32_t statelessMocsIndex =
|
||||
args.requiresUncachedMocs ? (gmmHelper->getUncachedMOCS() >> 1) : (gmmHelper->getL3EnabledMOCS() >> 1);
|
||||
auto l1CachePolicy = container.l1CachePolicyDataRef()->getL1CacheValue(false);
|
||||
auto l1CachePolicyDebuggerActive = container.l1CachePolicyDataRef()->getL1CacheValue(true);
|
||||
PipeControlArgs syncArgs;
|
||||
syncArgs.dcFlushEnable = args.postSyncArgs.dcFlushEnable;
|
||||
MemorySynchronizationCommands<Family>::addSingleBarrier(*container.getCommandStream(), syncArgs);
|
||||
using STATE_BASE_ADDRESS = typename Family::STATE_BASE_ADDRESS;
|
||||
STATE_BASE_ADDRESS sbaCmd;
|
||||
auto gmmHelper = container.getDevice()->getGmmHelper();
|
||||
uint32_t statelessMocsIndex =
|
||||
args.requiresUncachedMocs ? (gmmHelper->getUncachedMOCS() >> 1) : (gmmHelper->getL3EnabledMOCS() >> 1);
|
||||
auto l1CachePolicy = container.l1CachePolicyDataRef()->getL1CacheValue(false);
|
||||
auto l1CachePolicyDebuggerActive = container.l1CachePolicyDataRef()->getL1CacheValue(true);
|
||||
|
||||
EncodeStateBaseAddressArgs<Family> encodeStateBaseAddressArgs = {
|
||||
&container, // container
|
||||
sbaCmd, // sbaCmd
|
||||
nullptr, // sbaProperties
|
||||
statelessMocsIndex, // statelessMocsIndex
|
||||
l1CachePolicy, // l1CachePolicy
|
||||
l1CachePolicyDebuggerActive, // l1CachePolicyDebuggerActive
|
||||
args.partitionCount > 1, // multiOsContextCapable
|
||||
args.isRcs, // isRcs
|
||||
container.doubleSbaWaRef(), // doubleSbaWa
|
||||
heaplessModeEnabled // heaplessModeEnabled
|
||||
};
|
||||
EncodeStateBaseAddress<Family>::encode(encodeStateBaseAddressArgs);
|
||||
container.setDirtyStateForAllHeaps(false);
|
||||
EncodeStateBaseAddressArgs<Family> encodeStateBaseAddressArgs = {
|
||||
&container, // container
|
||||
sbaCmd, // sbaCmd
|
||||
nullptr, // sbaProperties
|
||||
statelessMocsIndex, // statelessMocsIndex
|
||||
l1CachePolicy, // l1CachePolicy
|
||||
l1CachePolicyDebuggerActive, // l1CachePolicyDebuggerActive
|
||||
args.partitionCount > 1, // multiOsContextCapable
|
||||
args.isRcs, // isRcs
|
||||
container.doubleSbaWaRef(), // doubleSbaWa
|
||||
heaplessModeEnabled // heaplessModeEnabled
|
||||
};
|
||||
EncodeStateBaseAddress<Family>::encode(encodeStateBaseAddressArgs);
|
||||
container.setDirtyStateForAllHeaps(false);
|
||||
|
||||
bool sbaTrackingEnabled = NEO::Debugger::isDebugEnabled(args.isInternal) && args.device->getL0Debugger();
|
||||
NEO::EncodeStateBaseAddress<Family>::setSbaTrackingForL0DebuggerIfEnabled(sbaTrackingEnabled,
|
||||
*args.device,
|
||||
*container.getCommandStream(),
|
||||
sbaCmd, container.isUsingPrimaryBuffer());
|
||||
bool sbaTrackingEnabled = NEO::Debugger::isDebugEnabled(args.isInternal) && args.device->getL0Debugger();
|
||||
NEO::EncodeStateBaseAddress<Family>::setSbaTrackingForL0DebuggerIfEnabled(sbaTrackingEnabled,
|
||||
*args.device,
|
||||
*container.getCommandStream(),
|
||||
sbaCmd, container.isUsingPrimaryBuffer());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -765,13 +767,13 @@ void EncodeStateBaseAddress<Family>::encode(EncodeStateBaseAddressArgs<Family> &
|
||||
|
||||
template <typename Family>
|
||||
size_t EncodeStateBaseAddress<Family>::getRequiredSizeForStateBaseAddress(Device &device, CommandContainer &container, bool isRcs) {
|
||||
if constexpr (!Family::isHeaplessRequired()) {
|
||||
if constexpr (Family::isHeaplessRequired() == false) {
|
||||
auto &hwInfo = device.getHardwareInfo();
|
||||
auto &productHelper = device.getProductHelper();
|
||||
|
||||
size_t size = sizeof(typename Family::STATE_BASE_ADDRESS);
|
||||
size_t size = sizeof(STATE_BASE_ADDRESS);
|
||||
if (productHelper.isAdditionalStateBaseAddressWARequired(hwInfo)) {
|
||||
size += sizeof(typename Family::STATE_BASE_ADDRESS);
|
||||
size += sizeof(STATE_BASE_ADDRESS);
|
||||
}
|
||||
if (container.isHeapDirty(HeapType::surfaceState)) {
|
||||
size += sizeof(typename Family::_3DSTATE_BINDING_TABLE_POOL_ALLOC);
|
||||
|
||||
Reference in New Issue
Block a user