mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-05 09:09:04 +08:00
Add state base address transition for global stateless heap command lists
Related-To: NEO-5055 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
86e739e9dc
commit
f003666ad7
@@ -2448,27 +2448,30 @@ void CommandListCoreFamily<gfxCoreFamily>::updateStreamPropertiesForRegularComma
|
||||
|
||||
int32_t currentMocsState = static_cast<int32_t>(device->getMOCS(!kernelImp.getKernelRequiresUncachedMocs(), false) >> 1);
|
||||
bool checkSsh = false;
|
||||
if (currentSurfaceStateBaseAddress == NEO::StreamProperty64::initValue || commandContainer.isHeapDirty(NEO::IndirectHeap::Type::SURFACE_STATE)) {
|
||||
auto ssh = commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::SURFACE_STATE);
|
||||
currentSurfaceStateBaseAddress = ssh->getHeapGpuBase();
|
||||
currentSurfaceStateSize = ssh->getHeapSizeInPages();
|
||||
|
||||
currentBindingTablePoolBaseAddress = currentSurfaceStateBaseAddress;
|
||||
currentBindingTablePoolSize = currentSurfaceStateSize;
|
||||
|
||||
checkSsh = true;
|
||||
}
|
||||
|
||||
bool checkDsh = false;
|
||||
if (this->dynamicHeapRequired && (currentDynamicStateBaseAddress == NEO::StreamProperty64::initValue || commandContainer.isHeapDirty(NEO::IndirectHeap::Type::DYNAMIC_STATE))) {
|
||||
auto dsh = commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::DYNAMIC_STATE);
|
||||
currentDynamicStateBaseAddress = dsh->getHeapGpuBase();
|
||||
currentDynamicStateSize = dsh->getHeapSizeInPages();
|
||||
bool checkIoh = false;
|
||||
|
||||
checkDsh = true;
|
||||
if (this->cmdListHeapAddressModel == NEO::HeapAddressModel::PrivateHeaps) {
|
||||
if (currentSurfaceStateBaseAddress == NEO::StreamProperty64::initValue || commandContainer.isHeapDirty(NEO::IndirectHeap::Type::SURFACE_STATE)) {
|
||||
auto ssh = commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::SURFACE_STATE);
|
||||
currentSurfaceStateBaseAddress = ssh->getHeapGpuBase();
|
||||
currentSurfaceStateSize = ssh->getHeapSizeInPages();
|
||||
|
||||
currentBindingTablePoolBaseAddress = currentSurfaceStateBaseAddress;
|
||||
currentBindingTablePoolSize = currentSurfaceStateSize;
|
||||
|
||||
checkSsh = true;
|
||||
}
|
||||
|
||||
if (this->dynamicHeapRequired && (currentDynamicStateBaseAddress == NEO::StreamProperty64::initValue || commandContainer.isHeapDirty(NEO::IndirectHeap::Type::DYNAMIC_STATE))) {
|
||||
auto dsh = commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::DYNAMIC_STATE);
|
||||
currentDynamicStateBaseAddress = dsh->getHeapGpuBase();
|
||||
currentDynamicStateSize = dsh->getHeapSizeInPages();
|
||||
|
||||
checkDsh = true;
|
||||
}
|
||||
}
|
||||
|
||||
bool checkIoh = false;
|
||||
if (currentIndirectObjectBaseAddress == NEO::StreamProperty64::initValue) {
|
||||
auto ioh = commandContainer.getIndirectHeap(NEO::IndirectHeap::Type::INDIRECT_OBJECT);
|
||||
currentIndirectObjectBaseAddress = ioh->getHeapGpuBase();
|
||||
@@ -2484,8 +2487,11 @@ void CommandListCoreFamily<gfxCoreFamily>::updateStreamPropertiesForRegularComma
|
||||
requiredStreamState.pipelineSelect.setPropertySystolicMode(kernelAttributes.flags.usesSystolicPipelineSelectMode, rootDeviceEnvironment);
|
||||
|
||||
requiredStreamState.stateBaseAddress.setPropertyStatelessMocs(currentMocsState);
|
||||
requiredStreamState.stateBaseAddress.setPropertiesSurfaceState(currentBindingTablePoolBaseAddress, currentBindingTablePoolSize,
|
||||
currentSurfaceStateBaseAddress, currentSurfaceStateSize, rootDeviceEnvironment);
|
||||
|
||||
if (checkSsh) {
|
||||
requiredStreamState.stateBaseAddress.setPropertiesSurfaceState(currentBindingTablePoolBaseAddress, currentBindingTablePoolSize,
|
||||
currentSurfaceStateBaseAddress, currentSurfaceStateSize, rootDeviceEnvironment);
|
||||
}
|
||||
if (checkDsh) {
|
||||
requiredStreamState.stateBaseAddress.setPropertiesDynamicState(currentDynamicStateBaseAddress, currentDynamicStateSize);
|
||||
}
|
||||
|
||||
@@ -143,7 +143,9 @@ NEO::CompletionStamp CommandListCoreFamilyImmediate<gfxCoreFamily>::flushRegular
|
||||
NEO::IndirectHeap *ssh = nullptr;
|
||||
|
||||
if (!NEO::ApiSpecificConfig::getBindlessConfiguration()) {
|
||||
if (this->immediateCmdListHeapSharing) {
|
||||
if (this->cmdListHeapAddressModel == NEO::HeapAddressModel::GlobalStateless) {
|
||||
ssh = this->csr->getGlobalStatelessHeap();
|
||||
} else if (this->immediateCmdListHeapSharing) {
|
||||
auto &sshReserveConfig = this->commandContainer.getSurfaceStateHeapReserve();
|
||||
if (sshReserveConfig.indirectHeapReservation->getGraphicsAllocation()) {
|
||||
ssh = sshReserveConfig.indirectHeapReservation;
|
||||
|
||||
@@ -141,7 +141,8 @@ ze_result_t CommandListCoreFamily<gfxCoreFamily>::appendLaunchKernelWithParams(K
|
||||
NEO::IndirectHeap *ssh = nullptr;
|
||||
NEO::IndirectHeap *dsh = nullptr;
|
||||
|
||||
if (this->immediateCmdListHeapSharing || this->stateBaseAddressTracking) {
|
||||
if ((this->immediateCmdListHeapSharing || this->stateBaseAddressTracking) &&
|
||||
(this->cmdListHeapAddressModel == NEO::HeapAddressModel::PrivateHeaps)) {
|
||||
auto kernelInfo = kernelImmutableData->getKernelInfo();
|
||||
|
||||
auto &sshReserveConfig = commandContainer.getSurfaceStateHeapReserve();
|
||||
|
||||
@@ -189,17 +189,39 @@ struct CommandQueueHw : public CommandQueueImp {
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal);
|
||||
|
||||
inline size_t estimateStateBaseAddressCmdDispatchSize();
|
||||
inline size_t estimateStateBaseAddressCmdDispatchSize(bool bindingTableBaseAddress);
|
||||
inline size_t estimateStateBaseAddressCmdSizeForMultipleCommandLists(bool &baseAddressStateDirty,
|
||||
CommandList *commandList,
|
||||
NEO::StreamProperties &csrStateCopy,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal);
|
||||
inline size_t estimateStateBaseAddressCmdSizeForGlobalStatelessCommandList(bool &baseAddressStateDirty,
|
||||
NEO::StreamProperties &csrStateCopy,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal);
|
||||
inline size_t estimateStateBaseAddressCmdSizeForPrivateHeapCommandList(bool &baseAddressStateDirty,
|
||||
NEO::StreamProperties &csrStateCopy,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal);
|
||||
|
||||
inline void programRequiredStateBaseAddressForCommandList(CommandListExecutionContext &ctx,
|
||||
NEO::LinearStream &commandStream,
|
||||
CommandList *commandList,
|
||||
NEO::StreamProperties &csrState,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal);
|
||||
inline void programRequiredStateBaseAddressForGlobalStatelessCommandList(CommandListExecutionContext &ctx,
|
||||
NEO::LinearStream &commandStream,
|
||||
CommandList *commandList,
|
||||
NEO::StreamProperties &csrState,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal);
|
||||
inline void programRequiredStateBaseAddressForPrivateHeapCommandList(CommandListExecutionContext &ctx,
|
||||
NEO::LinearStream &commandStream,
|
||||
CommandList *commandList,
|
||||
NEO::StreamProperties &csrState,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal);
|
||||
inline void updateBaseAddressState(CommandList *lastCommandList);
|
||||
|
||||
size_t alignedChildStreamPadding{};
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "shared/source/execution_environment/root_device_environment.h"
|
||||
#include "shared/source/helpers/definitions/mi_flush_args.h"
|
||||
#include "shared/source/helpers/gfx_core_helper.h"
|
||||
#include "shared/source/helpers/heap_base_address_model.h"
|
||||
#include "shared/source/helpers/logical_state_helper.h"
|
||||
#include "shared/source/helpers/pause_on_gpu_properties.h"
|
||||
#include "shared/source/helpers/pipe_control_args.h"
|
||||
@@ -662,7 +663,7 @@ size_t CommandQueueHw<gfxCoreFamily>::estimateLinearStreamSizeComplementary(
|
||||
streamPropertiesCopy, requiredStreamState, finalStreamState);
|
||||
linearStreamSizeEstimate += estimatePipelineSelectCmdSizeForMultipleCommandLists(streamPropertiesCopy, requiredStreamState, finalStreamState, gpgpuEnabledCopy);
|
||||
linearStreamSizeEstimate += estimateScmCmdSizeForMultipleCommandLists(streamPropertiesCopy, requiredStreamState, finalStreamState);
|
||||
linearStreamSizeEstimate += estimateStateBaseAddressCmdSizeForMultipleCommandLists(baseAdresStateDirtyCopy, streamPropertiesCopy, requiredStreamState, finalStreamState);
|
||||
linearStreamSizeEstimate += estimateStateBaseAddressCmdSizeForMultipleCommandLists(baseAdresStateDirtyCopy, cmdList, streamPropertiesCopy, requiredStreamState, finalStreamState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1237,6 +1238,49 @@ void CommandQueueHw<gfxCoreFamily>::programRequiredStateBaseAddressForCommandLis
|
||||
if (!this->stateBaseAddressTracking) {
|
||||
return;
|
||||
}
|
||||
auto heapModel = commandList->getCmdListHeapAddressModel();
|
||||
if (heapModel == NEO::HeapAddressModel::GlobalStateless) {
|
||||
programRequiredStateBaseAddressForGlobalStatelessCommandList(ctx, commandStream, commandList, csrState, cmdListRequired, cmdListFinal);
|
||||
} else {
|
||||
programRequiredStateBaseAddressForPrivateHeapCommandList(ctx, commandStream, commandList, csrState, cmdListRequired, cmdListFinal);
|
||||
}
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
void CommandQueueHw<gfxCoreFamily>::programRequiredStateBaseAddressForGlobalStatelessCommandList(CommandListExecutionContext &ctx,
|
||||
NEO::LinearStream &commandStream,
|
||||
CommandList *commandList,
|
||||
NEO::StreamProperties &csrState,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal) {
|
||||
auto &rootDeviceEnvironment = device->getNEODevice()->getRootDeviceEnvironment();
|
||||
auto globalStatelessHeap = this->csr->getGlobalStatelessHeap();
|
||||
|
||||
csrState.stateBaseAddress.setProperties(cmdListRequired.stateBaseAddress);
|
||||
csrState.stateBaseAddress.setPropertiesSurfaceState(-1, -1, globalStatelessHeap->getHeapGpuBase(), globalStatelessHeap->getHeapSizeInPages(), rootDeviceEnvironment);
|
||||
|
||||
if (ctx.gsbaStateDirty || csrState.stateBaseAddress.isDirty()) {
|
||||
auto indirectHeap = commandList->getCmdContainer().getIndirectHeap(NEO::HeapType::INDIRECT_OBJECT);
|
||||
auto scratchSpaceController = this->csr->getScratchSpaceController();
|
||||
programStateBaseAddress(scratchSpaceController->calculateNewGSH(),
|
||||
indirectHeap->getGraphicsAllocation()->isAllocatedInLocalMemoryPool(),
|
||||
commandStream,
|
||||
ctx.cachedMOCSAllowed,
|
||||
&csrState);
|
||||
|
||||
ctx.gsbaStateDirty = false;
|
||||
}
|
||||
|
||||
csrState.stateBaseAddress.setProperties(cmdListFinal.stateBaseAddress);
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
void CommandQueueHw<gfxCoreFamily>::programRequiredStateBaseAddressForPrivateHeapCommandList(CommandListExecutionContext &ctx,
|
||||
NEO::LinearStream &commandStream,
|
||||
CommandList *commandList,
|
||||
NEO::StreamProperties &csrState,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal) {
|
||||
|
||||
csrState.stateBaseAddress.setProperties(cmdListRequired.stateBaseAddress);
|
||||
|
||||
@@ -1259,14 +1303,19 @@ template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
void CommandQueueHw<gfxCoreFamily>::updateBaseAddressState(CommandList *lastCommandList) {
|
||||
auto csrHw = static_cast<NEO::CommandStreamReceiverHw<GfxFamily> *>(csr);
|
||||
auto &commandContainer = lastCommandList->getCmdContainer();
|
||||
auto dsh = commandContainer.getIndirectHeap(NEO::HeapType::DYNAMIC_STATE);
|
||||
if (dsh != nullptr) {
|
||||
csrHw->getDshState().updateAndCheck(dsh);
|
||||
}
|
||||
|
||||
auto ssh = commandContainer.getIndirectHeap(NEO::HeapType::SURFACE_STATE);
|
||||
if (ssh != nullptr) {
|
||||
csrHw->getSshState().updateAndCheck(ssh);
|
||||
if (lastCommandList->getCmdListHeapAddressModel() == NEO::HeapAddressModel::GlobalStateless) {
|
||||
csrHw->getSshState().updateAndCheck(csr->getGlobalStatelessHeap());
|
||||
} else {
|
||||
auto dsh = commandContainer.getIndirectHeap(NEO::HeapType::DYNAMIC_STATE);
|
||||
if (dsh != nullptr) {
|
||||
csrHw->getDshState().updateAndCheck(dsh);
|
||||
}
|
||||
|
||||
auto ssh = commandContainer.getIndirectHeap(NEO::HeapType::SURFACE_STATE);
|
||||
if (ssh != nullptr) {
|
||||
csrHw->getSshState().updateAndCheck(ssh);
|
||||
}
|
||||
}
|
||||
|
||||
auto ioh = commandContainer.getIndirectHeap(NEO::HeapType::INDIRECT_OBJECT);
|
||||
@@ -1275,6 +1324,7 @@ void CommandQueueHw<gfxCoreFamily>::updateBaseAddressState(CommandList *lastComm
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdSizeForMultipleCommandLists(bool &baseAddressStateDirty,
|
||||
CommandList *commandList,
|
||||
NEO::StreamProperties &csrStateCopy,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal) {
|
||||
@@ -1282,7 +1332,48 @@ size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdSizeForMultiple
|
||||
return 0;
|
||||
}
|
||||
|
||||
auto singleSbaDispatchSize = estimateStateBaseAddressCmdDispatchSize();
|
||||
size_t estimatedSize = 0;
|
||||
|
||||
auto heapModel = commandList->getCmdListHeapAddressModel();
|
||||
if (heapModel == NEO::HeapAddressModel::GlobalStateless) {
|
||||
estimatedSize = estimateStateBaseAddressCmdSizeForGlobalStatelessCommandList(baseAddressStateDirty, csrStateCopy, cmdListRequired, cmdListFinal);
|
||||
} else {
|
||||
estimatedSize = estimateStateBaseAddressCmdSizeForPrivateHeapCommandList(baseAddressStateDirty, csrStateCopy, cmdListRequired, cmdListFinal);
|
||||
}
|
||||
|
||||
return estimatedSize;
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdSizeForGlobalStatelessCommandList(bool &baseAddressStateDirty,
|
||||
NEO::StreamProperties &csrStateCopy,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal) {
|
||||
|
||||
auto &rootDeviceEnvironment = device->getNEODevice()->getRootDeviceEnvironment();
|
||||
auto globalStatelessHeap = this->csr->getGlobalStatelessHeap();
|
||||
|
||||
size_t estimatedSize = 0;
|
||||
|
||||
csrStateCopy.stateBaseAddress.setProperties(cmdListRequired.stateBaseAddress);
|
||||
csrStateCopy.stateBaseAddress.setPropertiesSurfaceState(-1, -1, globalStatelessHeap->getHeapGpuBase(), globalStatelessHeap->getHeapSizeInPages(), rootDeviceEnvironment);
|
||||
if (baseAddressStateDirty || csrStateCopy.stateBaseAddress.isDirty()) {
|
||||
bool useBtiCommand = csrStateCopy.stateBaseAddress.bindingTablePoolBaseAddress.value != NEO::StreamProperty64::initValue;
|
||||
estimatedSize += estimateStateBaseAddressCmdDispatchSize(useBtiCommand);
|
||||
baseAddressStateDirty = false;
|
||||
}
|
||||
csrStateCopy.stateBaseAddress.setProperties(cmdListFinal.stateBaseAddress);
|
||||
|
||||
return estimatedSize;
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdSizeForPrivateHeapCommandList(bool &baseAddressStateDirty,
|
||||
NEO::StreamProperties &csrStateCopy,
|
||||
const NEO::StreamProperties &cmdListRequired,
|
||||
const NEO::StreamProperties &cmdListFinal) {
|
||||
|
||||
auto singleSbaDispatchSize = estimateStateBaseAddressCmdDispatchSize(true);
|
||||
size_t estimatedSize = 0;
|
||||
|
||||
csrStateCopy.stateBaseAddress.setProperties(cmdListRequired.stateBaseAddress);
|
||||
|
||||
@@ -98,7 +98,7 @@ void CommandQueueHw<gfxCoreFamily>::programStateBaseAddress(uint64_t gsba, bool
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
inline size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdDispatchSize() {
|
||||
inline size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdDispatchSize(bool bindingTableBaseAddress) {
|
||||
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
|
||||
|
||||
size_t size = sizeof(STATE_BASE_ADDRESS) + NEO::MemorySynchronizationCommands<GfxFamily>::getSizeForSingleBarrier(false) +
|
||||
@@ -113,7 +113,7 @@ inline size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdDispatch
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdSize() {
|
||||
return estimateStateBaseAddressCmdDispatchSize();
|
||||
return estimateStateBaseAddressCmdDispatchSize(true);
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
|
||||
@@ -118,22 +118,25 @@ void CommandQueueHw<gfxCoreFamily>::programStateBaseAddress(uint64_t gsba, bool
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
inline size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdDispatchSize() {
|
||||
inline size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdDispatchSize(bool bindingTableBaseAddress) {
|
||||
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
|
||||
using _3DSTATE_BINDING_TABLE_POOL_ALLOC = typename GfxFamily::_3DSTATE_BINDING_TABLE_POOL_ALLOC;
|
||||
|
||||
size_t size = sizeof(STATE_BASE_ADDRESS) + NEO::MemorySynchronizationCommands<GfxFamily>::getSizeForSingleBarrier(false) + sizeof(_3DSTATE_BINDING_TABLE_POOL_ALLOC);
|
||||
size_t size = sizeof(STATE_BASE_ADDRESS) + NEO::MemorySynchronizationCommands<GfxFamily>::getSizeForSingleBarrier(false);
|
||||
|
||||
if (this->doubleSbaWa) {
|
||||
size += sizeof(STATE_BASE_ADDRESS);
|
||||
}
|
||||
if (bindingTableBaseAddress) {
|
||||
size += sizeof(_3DSTATE_BINDING_TABLE_POOL_ALLOC);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
size_t CommandQueueHw<gfxCoreFamily>::estimateStateBaseAddressCmdSize() {
|
||||
if (NEO::ApiSpecificConfig::getBindlessConfiguration()) {
|
||||
return estimateStateBaseAddressCmdDispatchSize();
|
||||
return estimateStateBaseAddressCmdDispatchSize(true);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -150,14 +150,27 @@ void CmdListStateComputeModeStateFixture::setUp() {
|
||||
}
|
||||
|
||||
void CommandListStateBaseAddressFixture::setUp() {
|
||||
constexpr uint32_t storeAllocations = 4;
|
||||
|
||||
DebugManager.flags.EnableStateBaseAddressTracking.set(1);
|
||||
DebugManager.flags.SetAmountOfReusableAllocations.set(storeAllocations);
|
||||
DebugManager.flags.ForceL1Caching.set(0);
|
||||
|
||||
ModuleMutableCommandListFixture::setUp();
|
||||
|
||||
this->dshRequired = device->getDeviceInfo().imageSupport;
|
||||
this->expectedSbaCmds = commandList->doubleSbaWa ? 2 : 1;
|
||||
}
|
||||
|
||||
uint32_t CommandListStateBaseAddressFixture::getMocs(bool l3On) {
|
||||
return device->getMOCS(l3On, false) >> 1;
|
||||
}
|
||||
|
||||
void CommandListPrivateHeapsFixture::setUp() {
|
||||
constexpr uint32_t storeAllocations = 4;
|
||||
|
||||
DebugManager.flags.SelectCmdListHeapAddressModel.set(static_cast<int32_t>(NEO::HeapAddressModel::PrivateHeaps));
|
||||
DebugManager.flags.SetAmountOfReusableAllocations.set(storeAllocations);
|
||||
|
||||
CommandListStateBaseAddressFixture::setUp();
|
||||
|
||||
for (uint32_t i = 0; i < storeAllocations; i++) {
|
||||
auto heapAllocation = neoDevice->getMemoryManager()->allocateGraphicsMemoryWithProperties({device->getRootDeviceIndex(), true, 2 * MB,
|
||||
NEO::AllocationType::LINEAR_STREAM, false, false,
|
||||
@@ -175,13 +188,6 @@ void CommandListStateBaseAddressFixture::setUp() {
|
||||
mockKernelImmData->kernelDescriptor->payloadMappings.bindingTable.tableOffset = 64;
|
||||
kernel->surfaceStateHeapDataSize = 64;
|
||||
kernel->surfaceStateHeapData.reset(new uint8_t[128]);
|
||||
|
||||
this->dshRequired = device->getDeviceInfo().imageSupport;
|
||||
this->expectedSbaCmds = commandList->doubleSbaWa ? 2 : 1;
|
||||
}
|
||||
|
||||
uint32_t CommandListStateBaseAddressFixture::getMocs(bool l3On) {
|
||||
return device->getMOCS(l3On, false) >> 1;
|
||||
}
|
||||
|
||||
void CommandListGlobalHeapsFixtureInit::setUp() {
|
||||
|
||||
@@ -129,6 +129,10 @@ struct CommandListStateBaseAddressFixture : public ModuleMutableCommandListFixtu
|
||||
bool dshRequired = false;
|
||||
};
|
||||
|
||||
struct CommandListPrivateHeapsFixture : public CommandListStateBaseAddressFixture {
|
||||
void setUp();
|
||||
};
|
||||
|
||||
struct CommandListGlobalHeapsFixtureInit : public CommandListStateBaseAddressFixture {
|
||||
void setUp();
|
||||
void setUpParams(int32_t globalHeapMode);
|
||||
|
||||
@@ -1059,9 +1059,9 @@ HWTEST2_F(CommandListCreate, givenAllValuesTbxAndSyncModeFlagsWhenCheckingWaitli
|
||||
EXPECT_TRUE(cmdList.eventWaitlistSyncRequired());
|
||||
}
|
||||
|
||||
using CommandListStateBaseAddressTest = Test<CommandListStateBaseAddressFixture>;
|
||||
using CommandListStateBaseAddressPrivateHeapTest = Test<CommandListPrivateHeapsFixture>;
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenRegularCmdListAppendKernelAndExecuteThenBaseAddressStateIsStoredInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -1228,7 +1228,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
ASSERT_EQ(0u, sbaCmds.size());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenRegularCmdListAppendKernelChangesHeapsAndExecuteThenFinalBaseAddressStateIsStoredInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -1420,7 +1420,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
EXPECT_EQ((statlessMocs << 1), sbaCmd->getStatelessDataPortAccessMemoryObjectControlState());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenImmediateCmdListAppendKernelChangesHeapsAndExecuteThenFinalBaseAddressStateIsStoredInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -1577,7 +1577,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
EXPECT_EQ(ssBaseAddress, sbaCmd->getSurfaceStateBaseAddress());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenRegularCmdListAppendKernelAndExecuteAndImmediateCmdListAppendKernelSharingCsrThenBaseAddressStateIsUpdatedInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -1788,7 +1788,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
EXPECT_EQ(ssBaseAddressImmediate, sbaCmd->getSurfaceStateBaseAddress());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenImmediateCmdListAppendKernelAndRegularCmdListAppendKernelAndExecuteSharingCsrThenBaseAddressStateIsUpdatedInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -1986,7 +1986,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
EXPECT_EQ((statlessMocs << 1), sbaCmd->getStatelessDataPortAccessMemoryObjectControlState());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenRegularCmdListAppendUncachedKernelFirstAndExecuteAndImmediateCmdListAppendUncachedKerneThenMocsStateIsUpdatedInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -2067,7 +2067,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
ASSERT_EQ(0u, sbaList.size());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenRegularCmdListAppendCachedKernelFirstAndExecuteAndImmediateCmdListAppendUncachedKerneThenMocsStateIsUpdatedInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -2141,7 +2141,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
EXPECT_EQ((uncachedStatlessMocs << 1), sbaCmd->getStatelessDataPortAccessMemoryObjectControlState());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenImmediateCmdListAppendUncachedKerneAndRegularCmdListAppendCachedKernelAndExecuteThenMocsStateIsUpdatedInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -2215,7 +2215,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
EXPECT_EQ((cachedStatlessMocs << 1), sbaCmd->getStatelessDataPortAccessMemoryObjectControlState());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenStateBaseAddressTrackingWhenImmediateCmdListAppendCachedKerneAndRegularCmdListAppendUncachedKernelAndExecuteThenMocsStateIsUpdatedInCsr,
|
||||
IsAtLeastSkl) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
@@ -2289,7 +2289,7 @@ HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
EXPECT_EQ((uncachedStatlessMocs << 1), sbaCmd->getStatelessDataPortAccessMemoryObjectControlState());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandListStateBaseAddressTest,
|
||||
HWTEST2_F(CommandListStateBaseAddressPrivateHeapTest,
|
||||
givenSbaPropertiesWhenBindingBaseAddressSetThenExpectPropertiesDataDispatched, IsAtLeastXeHpCore) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
using _3DSTATE_BINDING_TABLE_POOL_ALLOC = typename FamilyType::_3DSTATE_BINDING_TABLE_POOL_ALLOC;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user