Set global heap size to constant value

Related-To: NEO-5055

Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
Zbigniew Zdanowicz 2023-03-09 15:22:05 +00:00 committed by Compute-Runtime-Automation
parent d7aba6747c
commit 0950f5a23e
4 changed files with 31 additions and 3 deletions

View File

@ -529,6 +529,7 @@ void EncodeStateBaseAddress<Family>::encode(EncodeStateBaseAddressArgs<Family> &
auto ioh = args.container->isHeapDirty(HeapType::INDIRECT_OBJECT) ? args.container->getIndirectHeap(HeapType::INDIRECT_OBJECT) : nullptr;
auto ssh = args.container->isHeapDirty(HeapType::SURFACE_STATE) ? args.container->getIndirectHeap(HeapType::SURFACE_STATE) : nullptr;
auto isDebuggerActive = device.isDebuggerActive() || device.getDebugger() != nullptr;
bool setGeneralStateBaseAddress = args.sbaProperties ? false : true;
StateBaseAddressHelperArgs<Family> stateBaseAddressHelperArgs = {
0, // generalStateBaseAddress
@ -547,7 +548,7 @@ void EncodeStateBaseAddress<Family>::encode(EncodeStateBaseAddressArgs<Family> &
args.l1CachePolicyDebuggerActive, // l1CachePolicyDebuggerActive
NEO::MemoryCompressionState::NotApplicable, // memoryCompressionState
true, // setInstructionStateBaseAddress
true, // setGeneralStateBaseAddress
setGeneralStateBaseAddress, // setGeneralStateBaseAddress
false, // useGlobalHeapsBaseAddress
args.multiOsContextCapable, // isMultiOsContextCapable
args.useGlobalAtomics, // useGlobalAtomics

View File

@ -36,7 +36,7 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
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));
args.stateBaseAddressCmd->setGeneralStateBufferSize(0xfffff);
}
if (args.sbaProperties->surfaceStateBaseAddress.value != StreamProperty64::initValue) {
args.stateBaseAddressCmd->setBindlessSurfaceStateBaseAddressModifyEnable(true);

View File

@ -535,3 +535,29 @@ HWTEST2_F(CommandEncodeStatesTest, givenSbaPropertiesWhenBindingBaseAddressSetTh
EXPECT_EQ(bindingTablePoolBaseAddress, bindTablePoolCmd->getBindingTablePoolBaseAddress());
EXPECT_EQ(bindingTablePoolSize, bindTablePoolCmd->getBindingTablePoolBufferSize());
}
HWTEST2_F(CommandEncodeStatesTest, givenSbaPropertiesWhenGeneralBaseAddressSetThenExpectAddressFromPropertiesUsedNotFromContainer, IsAtLeastXeHpCore) {
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
auto indirectHeapBaseAddress = cmdContainer->getIndirectObjectHeapBaseAddress();
auto indirectHeapBaseAddressProperties = indirectHeapBaseAddress + 0x10000;
StateBaseAddressProperties sbaProperties;
sbaProperties.setPropertiesIndirectState(indirectHeapBaseAddressProperties, MemoryConstants::kiloByte);
STATE_BASE_ADDRESS sba;
EncodeStateBaseAddressArgs<FamilyType> args = createDefaultEncodeStateBaseAddressArgs<FamilyType>(cmdContainer.get(), sba, 4);
args.sbaProperties = &sbaProperties;
EncodeStateBaseAddress<FamilyType>::encode(args);
GenCmdList commands;
CmdParse<FamilyType>::parseCommandBuffer(commands,
cmdContainer->getCommandStream()->getCpuBase(),
cmdContainer->getCommandStream()->getUsed());
auto itorSbaCmd = find<STATE_BASE_ADDRESS *>(commands.begin(), commands.end());
ASSERT_NE(commands.end(), itorSbaCmd);
auto sbaCmd = reinterpret_cast<STATE_BASE_ADDRESS *>(*itorSbaCmd);
EXPECT_EQ(indirectHeapBaseAddressProperties, sbaCmd->getGeneralStateBaseAddress());
}

View File

@ -638,6 +638,7 @@ HWTEST2_F(SbaTest, givenStateBaseAddressPropertiesWhenSettingIndirectStateAndGlo
constexpr uint64_t indirectHeapBase = 0x10000;
constexpr uint32_t indirectHeapSize = 0x10;
constexpr uint32_t constGlobalHeapSize = 0xfffff;
auto gmmHelper = pDevice->getGmmHelper();
StateBaseAddressProperties sbaProperties;
@ -665,7 +666,7 @@ HWTEST2_F(SbaTest, givenStateBaseAddressPropertiesWhenSettingIndirectStateAndGlo
EXPECT_TRUE(sbaCmd.getGeneralStateBaseAddressModifyEnable());
EXPECT_TRUE(sbaCmd.getGeneralStateBufferSizeModifyEnable());
EXPECT_EQ(indirectHeapBase, sbaCmd.getGeneralStateBaseAddress());
EXPECT_EQ(indirectHeapSize, sbaCmd.getGeneralStateBufferSize());
EXPECT_EQ(constGlobalHeapSize, sbaCmd.getGeneralStateBufferSize());
EXPECT_FALSE(sbaCmd.getDisableSupportForMultiGpuAtomicsForStatelessAccesses());