mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-11 00:10:58 +08:00
Refactor state base address programing 2/n
This change allows to read sba data directly from sba properties Related-To: NEO-5055 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
6947220298
commit
43a49c4486
@@ -12,17 +12,20 @@
|
||||
namespace NEO {
|
||||
|
||||
enum class MemoryCompressionState;
|
||||
|
||||
class GmmHelper;
|
||||
class IndirectHeap;
|
||||
class LinearStream;
|
||||
|
||||
struct DispatchFlags;
|
||||
struct HardwareInfo;
|
||||
struct StateBaseAddressProperties;
|
||||
|
||||
template <typename GfxFamily>
|
||||
struct StateBaseAddressHelperArgs {
|
||||
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
|
||||
|
||||
uint64_t generalStateBase = 0;
|
||||
uint64_t generalStateBaseAddress = 0;
|
||||
uint64_t indirectObjectHeapBaseAddress = 0;
|
||||
uint64_t instructionHeapBaseAddress = 0;
|
||||
uint64_t globalHeapsBaseAddress = 0;
|
||||
@@ -30,6 +33,8 @@ struct StateBaseAddressHelperArgs {
|
||||
|
||||
STATE_BASE_ADDRESS *stateBaseAddressCmd = nullptr;
|
||||
|
||||
StateBaseAddressProperties *sbaProperties = nullptr;
|
||||
|
||||
const IndirectHeap *dsh = nullptr;
|
||||
const IndirectHeap *ioh = nullptr;
|
||||
const IndirectHeap *ssh = nullptr;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#include "shared/source/command_stream/memory_compression_state.h"
|
||||
#include "shared/source/command_stream/stream_properties.h"
|
||||
#include "shared/source/execution_environment/root_device_environment.h"
|
||||
#include "shared/source/gmm_helper/cache_settings_helper.h"
|
||||
#include "shared/source/gmm_helper/gmm_helper.h"
|
||||
@@ -39,6 +40,22 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
|
||||
const auto surfaceStateCount = getMaxBindlessSurfaceStates();
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateSize(surfaceStateCount);
|
||||
|
||||
if (args.sbaProperties) {
|
||||
if (args.sbaProperties->dynamicStateBaseAddress.value != StreamProperty64::initValue) {
|
||||
args.stateBaseAddressCmd->setDynamicStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setDynamicStateBufferSizeModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setDynamicStateBaseAddress(static_cast<uint64_t>(args.sbaProperties->dynamicStateBaseAddress.value));
|
||||
args.stateBaseAddressCmd->setDynamicStateBufferSize(static_cast<uint32_t>(args.sbaProperties->dynamicStateSize.value));
|
||||
}
|
||||
if (args.sbaProperties->surfaceStateBaseAddress.value != StreamProperty64::initValue) {
|
||||
args.stateBaseAddressCmd->setSurfaceStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setSurfaceStateBaseAddress(static_cast<uint64_t>(args.sbaProperties->surfaceStateBaseAddress.value));
|
||||
}
|
||||
if (args.sbaProperties->statelessMocs.value != StreamProperty::initValue) {
|
||||
args.statelessMocsIndex = static_cast<uint32_t>(args.sbaProperties->statelessMocs.value);
|
||||
}
|
||||
}
|
||||
|
||||
if (args.useGlobalHeapsBaseAddress) {
|
||||
args.stateBaseAddressCmd->setDynamicStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setDynamicStateBufferSizeModifyEnable(true);
|
||||
@@ -80,7 +97,7 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
|
||||
args.stateBaseAddressCmd->setGeneralStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setGeneralStateBufferSizeModifyEnable(true);
|
||||
// GSH must be set to 0 for stateless
|
||||
args.stateBaseAddressCmd->setGeneralStateBaseAddress(args.gmmHelper->decanonize(args.generalStateBase));
|
||||
args.stateBaseAddressCmd->setGeneralStateBaseAddress(args.gmmHelper->decanonize(args.generalStateBaseAddress));
|
||||
args.stateBaseAddressCmd->setGeneralStateBufferSize(0xfffff);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2019-2022 Intel Corporation
|
||||
* Copyright (C) 2019-2023 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -15,7 +15,15 @@ void StateBaseAddressHelper<GfxFamily>::programBindingTableBaseAddress(LinearStr
|
||||
|
||||
template <typename GfxFamily>
|
||||
void StateBaseAddressHelper<GfxFamily>::appendIohParameters(StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||
if (args.useGlobalHeapsBaseAddress) {
|
||||
if (args.sbaProperties) {
|
||||
if (args.sbaProperties->indirectObjectBaseAddress.value != StreamProperty64::initValue) {
|
||||
auto baseAddress = static_cast<uint64_t>(args.sbaProperties->indirectObjectBaseAddress.value);
|
||||
args.stateBaseAddressCmd->setIndirectObjectBaseAddress(args.gmmHelper->decanonize(baseAddress));
|
||||
args.stateBaseAddressCmd->setIndirectObjectBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setIndirectObjectBufferSizeModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setIndirectObjectBufferSize(static_cast<uint32_t>(args.sbaProperties->indirectObjectSize.value));
|
||||
}
|
||||
} else if (args.useGlobalHeapsBaseAddress) {
|
||||
args.stateBaseAddressCmd->setIndirectObjectBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setIndirectObjectBufferSizeModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setIndirectObjectBaseAddress(args.indirectObjectHeapBaseAddress);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/command_stream/stream_properties.h"
|
||||
#include "shared/source/helpers/state_base_address.h"
|
||||
|
||||
namespace NEO {
|
||||
@@ -13,6 +14,14 @@ template <typename GfxFamily>
|
||||
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
||||
StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||
|
||||
if (args.sbaProperties) {
|
||||
if (args.sbaProperties->surfaceStateBaseAddress.value != StreamProperty64::initValue) {
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(static_cast<uint64_t>(args.sbaProperties->surfaceStateBaseAddress.value));
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateSize(static_cast<uint32_t>(args.sbaProperties->surfaceStateSize.value));
|
||||
}
|
||||
}
|
||||
|
||||
if (!args.useGlobalHeapsBaseAddress && args.ssh) {
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.ssh->getHeapGpuBase());
|
||||
|
||||
@@ -13,6 +13,14 @@ template <typename GfxFamily>
|
||||
void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
||||
StateBaseAddressHelperArgs<GfxFamily> &args) {
|
||||
|
||||
if (args.sbaProperties) {
|
||||
if (args.sbaProperties->surfaceStateBaseAddress.value != StreamProperty64::initValue) {
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(static_cast<uint64_t>(args.sbaProperties->surfaceStateBaseAddress.value));
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateSize(static_cast<uint32_t>(args.sbaProperties->surfaceStateSize.value));
|
||||
}
|
||||
}
|
||||
|
||||
if (!args.useGlobalHeapsBaseAddress && args.ssh) {
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(args.ssh->getHeapGpuBase());
|
||||
|
||||
@@ -30,6 +30,23 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
|
||||
using RENDER_SURFACE_STATE = typename GfxFamily::RENDER_SURFACE_STATE;
|
||||
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
|
||||
|
||||
if (args.sbaProperties) {
|
||||
if (args.sbaProperties->indirectObjectBaseAddress.value != StreamProperty64::initValue) {
|
||||
auto baseAddress = static_cast<uint64_t>(args.sbaProperties->indirectObjectBaseAddress.value);
|
||||
args.stateBaseAddressCmd->setGeneralStateBaseAddress(args.gmmHelper->decanonize(baseAddress));
|
||||
args.stateBaseAddressCmd->setGeneralStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setGeneralStateBufferSizeModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setGeneralStateBufferSize(static_cast<uint32_t>(args.sbaProperties->indirectObjectSize.value));
|
||||
}
|
||||
if (args.sbaProperties->surfaceStateBaseAddress.value != StreamProperty64::initValue) {
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddress(static_cast<uint64_t>(args.sbaProperties->surfaceStateBaseAddress.value));
|
||||
args.stateBaseAddressCmd->setBindlessSurfaceStateSize(static_cast<uint32_t>(args.sbaProperties->surfaceStateSize.value));
|
||||
}
|
||||
if (args.sbaProperties->globalAtomics.value != StreamProperty::initValue) {
|
||||
args.useGlobalAtomics = !!args.sbaProperties->globalAtomics.value;
|
||||
}
|
||||
}
|
||||
if (args.setGeneralStateBaseAddress && is64bit) {
|
||||
args.stateBaseAddressCmd->setGeneralStateBaseAddress(args.gmmHelper->decanonize(args.indirectObjectHeapBaseAddress));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user