Add parameter to set surface state base address value

This change introduces capability to set surface state base address
when surface state heap or global base address are not available

Related-To: NEO-7187

Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
Zbigniew Zdanowicz
2022-08-17 22:33:49 +00:00
committed by Compute-Runtime-Automation
parent 99c5de855c
commit 0011368775
16 changed files with 259 additions and 51 deletions

View File

@ -57,6 +57,7 @@ void CommandQueueHw<gfxCoreFamily>::programStateBaseAddress(uint64_t gsba, bool
indirectObjectHeapBaseAddress, // indirectObjectHeapBaseAddress indirectObjectHeapBaseAddress, // indirectObjectHeapBaseAddress
instructionHeapBaseAddress, // instructionHeapBaseAddress instructionHeapBaseAddress, // instructionHeapBaseAddress
globalHeapsBase, // globalHeapsBaseAddress globalHeapsBase, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -69,7 +70,8 @@ void CommandQueueHw<gfxCoreFamily>::programStateBaseAddress(uint64_t gsba, bool
useGlobalSshAndDsh, // useGlobalHeapsBaseAddress useGlobalSshAndDsh, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
NEO::StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(stateBaseAddressHelperArgs); NEO::StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(stateBaseAddressHelperArgs);

View File

@ -48,6 +48,7 @@ void CommandQueueHw<gfxCoreFamily>::programStateBaseAddress(uint64_t gsba, bool
indirectObjectStateBaseAddress, // indirectObjectHeapBaseAddress indirectObjectStateBaseAddress, // indirectObjectHeapBaseAddress
instructionStateBaseAddress, // instructionHeapBaseAddress instructionStateBaseAddress, // instructionHeapBaseAddress
globalHeapsBase, // globalHeapsBaseAddress globalHeapsBase, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -60,7 +61,8 @@ void CommandQueueHw<gfxCoreFamily>::programStateBaseAddress(uint64_t gsba, bool
true, // useGlobalHeapsBaseAddress true, // useGlobalHeapsBaseAddress
multiOsContextCapable, // isMultiOsContextCapable multiOsContextCapable, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
NEO::StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(stateBaseAddressHelperArgs); NEO::StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(stateBaseAddressHelperArgs);

View File

@ -1218,6 +1218,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandStreamReceiverFlushTaskTests, givenCsrWhenGen
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
generalStateBaseAddress, // instructionHeapBaseAddress generalStateBaseAddress, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
&dsh, // dsh &dsh, // dsh
&ioh, // ioh &ioh, // ioh
@ -1230,7 +1231,8 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandStreamReceiverFlushTaskTests, givenCsrWhenGen
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
@ -1247,6 +1249,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenNonZeroGeneralStateBaseAddres
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
generalStateBaseAddress, // instructionHeapBaseAddress generalStateBaseAddress, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
&dsh, // dsh &dsh, // dsh
&ioh, // ioh &ioh, // ioh
@ -1259,7 +1262,8 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenNonZeroGeneralStateBaseAddres
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
@ -1278,6 +1282,7 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenNonZeroInternalHeapBaseAddres
internalHeapBaseAddress, // indirectObjectHeapBaseAddress internalHeapBaseAddress, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
&dsh, // dsh &dsh, // dsh
&ioh, // ioh &ioh, // ioh
@ -1290,7 +1295,8 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenNonZeroInternalHeapBaseAddres
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
@ -1313,6 +1319,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandStreamReceiverFlushTaskTests, givenSbaProgram
internalHeapBase, // indirectObjectHeapBaseAddress internalHeapBase, // indirectObjectHeapBaseAddress
instructionHeapBase, // instructionHeapBaseAddress instructionHeapBase, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -1325,7 +1332,8 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandStreamReceiverFlushTaskTests, givenSbaProgram
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);

View File

@ -330,6 +330,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverFlushTaskXeHPAndLaterTests, gi
internalHeapBase, // indirectObjectHeapBaseAddress internalHeapBase, // indirectObjectHeapBaseAddress
instructionHeapBase, // instructionHeapBaseAddress instructionHeapBase, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -342,7 +343,8 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverFlushTaskXeHPAndLaterTests, gi
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);

View File

@ -466,6 +466,7 @@ HWTEST2_F(StateBaseAddressXeHPAndLaterTests, givenMemoryCompressionEnabledWhenAp
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -478,7 +479,8 @@ HWTEST2_F(StateBaseAddressXeHPAndLaterTests, givenMemoryCompressionEnabledWhenAp
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
if (memoryCompressionState == MemoryCompressionState::Enabled) { if (memoryCompressionState == MemoryCompressionState::Enabled) {
@ -504,6 +506,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, StateBaseAddressXeHPAndLaterTests, givenNonZeroInte
ihba, // indirectObjectHeapBaseAddress ihba, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -516,7 +519,8 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, StateBaseAddressXeHPAndLaterTests, givenNonZeroInte
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
EXPECT_EQ(0ull, sbaCmd.getGeneralStateBaseAddress()); EXPECT_EQ(0ull, sbaCmd.getGeneralStateBaseAddress());

View File

@ -56,6 +56,7 @@ XE_HPC_CORETEST_F(CmdsProgrammingTestsXeHpcCore, givenSpecificProductFamilyWhenA
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -68,7 +69,8 @@ XE_HPC_CORETEST_F(CmdsProgrammingTestsXeHpcCore, givenSpecificProductFamilyWhenA
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
@ -92,6 +94,7 @@ XE_HPC_CORETEST_F(CmdsProgrammingTestsXeHpcCore, givenL1CachingOverrideWhenState
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -104,7 +107,8 @@ XE_HPC_CORETEST_F(CmdsProgrammingTestsXeHpcCore, givenL1CachingOverrideWhenState
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);

View File

@ -56,6 +56,7 @@ DG2TEST_F(CmdsProgrammingTestsDg2, givenSpecificProductFamilyWhenAppendingSbaThe
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -68,7 +69,8 @@ DG2TEST_F(CmdsProgrammingTestsDg2, givenSpecificProductFamilyWhenAppendingSbaThe
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
@ -92,6 +94,7 @@ DG2TEST_F(CmdsProgrammingTestsDg2, givenL1CachingOverrideWhenStateBaseAddressIsP
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -104,7 +107,8 @@ DG2TEST_F(CmdsProgrammingTestsDg2, givenL1CachingOverrideWhenStateBaseAddressIsP
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);

View File

@ -56,6 +56,7 @@ XE_HPG_CORETEST_F(CmdsProgrammingTestsXeHpgCore, givenSpecificProductFamilyWhenA
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -68,7 +69,8 @@ XE_HPG_CORETEST_F(CmdsProgrammingTestsXeHpgCore, givenSpecificProductFamilyWhenA
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
@ -92,6 +94,7 @@ XE_HPG_CORETEST_F(CmdsProgrammingTestsXeHpgCore, givenL1CachingOverrideWhenState
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -104,7 +107,8 @@ XE_HPG_CORETEST_F(CmdsProgrammingTestsXeHpgCore, givenL1CachingOverrideWhenState
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);

View File

@ -377,6 +377,7 @@ void EncodeStateBaseAddress<Family>::encode(EncodeStateBaseAddressArgs<Family> &
args.container->getIndirectObjectHeapBaseAddress(), // indirectObjectHeapBaseAddress args.container->getIndirectObjectHeapBaseAddress(), // indirectObjectHeapBaseAddress
args.container->getInstructionHeapBaseAddress(), // instructionHeapBaseAddress args.container->getInstructionHeapBaseAddress(), // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&args.sbaCmd, // stateBaseAddressCmd &args.sbaCmd, // stateBaseAddressCmd
dsh, // dsh dsh, // dsh
ioh, // ioh ioh, // ioh
@ -389,7 +390,8 @@ void EncodeStateBaseAddress<Family>::encode(EncodeStateBaseAddressArgs<Family> &
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
args.useGlobalAtomics, // useGlobalAtomics args.useGlobalAtomics, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<Family>::programStateBaseAddress(stateBaseAddressHelperArgs); StateBaseAddressHelper<Family>::programStateBaseAddress(stateBaseAddressHelperArgs);

View File

@ -484,6 +484,7 @@ void EncodeStateBaseAddress<Family>::encode(EncodeStateBaseAddressArgs<Family> &
args.container->getIndirectObjectHeapBaseAddress(), // indirectObjectHeapBaseAddress args.container->getIndirectObjectHeapBaseAddress(), // indirectObjectHeapBaseAddress
args.container->getInstructionHeapBaseAddress(), // instructionHeapBaseAddress args.container->getInstructionHeapBaseAddress(), // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&args.sbaCmd, // stateBaseAddressCmd &args.sbaCmd, // stateBaseAddressCmd
dsh, // dsh dsh, // dsh
ioh, // ioh ioh, // ioh
@ -496,7 +497,8 @@ void EncodeStateBaseAddress<Family>::encode(EncodeStateBaseAddressArgs<Family> &
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
args.multiOsContextCapable, // isMultiOsContextCapable args.multiOsContextCapable, // isMultiOsContextCapable
args.useGlobalAtomics, // useGlobalAtomics args.useGlobalAtomics, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<Family>::programStateBaseAddress(stateBaseAddressHelperArgs); StateBaseAddressHelper<Family>::programStateBaseAddress(stateBaseAddressHelperArgs);

View File

@ -410,23 +410,25 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
STATE_BASE_ADDRESS stateBaseAddressCmd; STATE_BASE_ADDRESS stateBaseAddressCmd;
StateBaseAddressHelperArgs<GfxFamily> args = { StateBaseAddressHelperArgs<GfxFamily> args = {
newGSHbase, // generalStateBase newGSHbase, // generalStateBase
indirectObjectStateBaseAddress, // indirectObjectHeapBaseAddress indirectObjectStateBaseAddress, // indirectObjectHeapBaseAddress
instructionHeapBaseAddress, // instructionHeapBaseAddress instructionHeapBaseAddress, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
&stateBaseAddressCmd, // stateBaseAddressCmd 0, // surfaceStateBaseAddress
dsh, // dsh &stateBaseAddressCmd, // stateBaseAddressCmd
ioh, // ioh dsh, // dsh
ssh, // ssh ioh, // ioh
device.getGmmHelper(), // gmmHelper ssh, // ssh
mocsIndex, // statelessMocsIndex device.getGmmHelper(), // gmmHelper
memoryCompressionState, // memoryCompressionState mocsIndex, // statelessMocsIndex
true, // setInstructionStateBaseAddress memoryCompressionState, // memoryCompressionState
true, // setGeneralStateBaseAddress true, // setInstructionStateBaseAddress
false, // useGlobalHeapsBaseAddress true, // setGeneralStateBaseAddress
isMultiOsContextCapable(), // isMultiOsContextCapable false, // useGlobalHeapsBaseAddress
dispatchFlags.useGlobalAtomics, // useGlobalAtomics isMultiOsContextCapable(), // isMultiOsContextCapable
dispatchFlags.areMultipleSubDevicesInContext // areMultipleSubDevicesInContext dispatchFlags.useGlobalAtomics, // useGlobalAtomics
dispatchFlags.areMultipleSubDevicesInContext, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(args); StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(args);
@ -610,7 +612,7 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
streamToSubmit.getGraphicsAllocation()->updateTaskCount(this->taskCount + 1, this->osContext->getContextId()); streamToSubmit.getGraphicsAllocation()->updateTaskCount(this->taskCount + 1, this->osContext->getContextId());
streamToSubmit.getGraphicsAllocation()->updateResidencyTaskCount(this->taskCount + 1, this->osContext->getContextId()); streamToSubmit.getGraphicsAllocation()->updateResidencyTaskCount(this->taskCount + 1, this->osContext->getContextId());
if (submitCSR | submitTask) { if (submitCSR || submitTask) {
if (this->dispatchMode == DispatchMode::ImmediateDispatch) { if (this->dispatchMode == DispatchMode::ImmediateDispatch) {
flushHandler(batchBuffer, this->getResidencyAllocations()); flushHandler(batchBuffer, this->getResidencyAllocations());
if (dispatchFlags.blocking || dispatchFlags.dcFlush || dispatchFlags.guardCommandBufferWithPipeControl) { if (dispatchFlags.blocking || dispatchFlags.dcFlush || dispatchFlags.guardCommandBufferWithPipeControl) {

View File

@ -53,6 +53,11 @@ void StateBaseAddressHelper<Gen8Family>::programStateBaseAddress(
args.stateBaseAddressCmd->setGeneralStateBufferSize(0xfffff); args.stateBaseAddressCmd->setGeneralStateBufferSize(0xfffff);
} }
if (args.overrideSurfaceStateBaseAddress) {
args.stateBaseAddressCmd->setSurfaceStateBaseAddressModifyEnable(true);
args.stateBaseAddressCmd->setSurfaceStateBaseAddress(args.surfaceStateBaseAddress);
}
if (DebugManager.flags.OverrideStatelessMocsIndex.get() != -1) { if (DebugManager.flags.OverrideStatelessMocsIndex.get() != -1) {
args.statelessMocsIndex = DebugManager.flags.OverrideStatelessMocsIndex.get(); args.statelessMocsIndex = DebugManager.flags.OverrideStatelessMocsIndex.get();
} }

View File

@ -26,6 +26,7 @@ struct StateBaseAddressHelperArgs {
uint64_t indirectObjectHeapBaseAddress = 0; uint64_t indirectObjectHeapBaseAddress = 0;
uint64_t instructionHeapBaseAddress = 0; uint64_t instructionHeapBaseAddress = 0;
uint64_t globalHeapsBaseAddress = 0; uint64_t globalHeapsBaseAddress = 0;
uint64_t surfaceStateBaseAddress = 0;
STATE_BASE_ADDRESS *stateBaseAddressCmd = nullptr; STATE_BASE_ADDRESS *stateBaseAddressCmd = nullptr;
@ -43,6 +44,7 @@ struct StateBaseAddressHelperArgs {
bool isMultiOsContextCapable = false; bool isMultiOsContextCapable = false;
bool useGlobalAtomics = false; bool useGlobalAtomics = false;
bool areMultipleSubDevicesInContext = false; bool areMultipleSubDevicesInContext = false;
bool overrideSurfaceStateBaseAddress = false;
}; };
template <typename GfxFamily> template <typename GfxFamily>

View File

@ -73,6 +73,11 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
args.stateBaseAddressCmd->setGeneralStateBufferSize(0xfffff); args.stateBaseAddressCmd->setGeneralStateBufferSize(0xfffff);
} }
if (args.overrideSurfaceStateBaseAddress) {
args.stateBaseAddressCmd->setSurfaceStateBaseAddressModifyEnable(true);
args.stateBaseAddressCmd->setSurfaceStateBaseAddress(args.surfaceStateBaseAddress);
}
if (DebugManager.flags.OverrideStatelessMocsIndex.get() != -1) { if (DebugManager.flags.OverrideStatelessMocsIndex.get() != -1) {
args.statelessMocsIndex = DebugManager.flags.OverrideStatelessMocsIndex.get(); args.statelessMocsIndex = DebugManager.flags.OverrideStatelessMocsIndex.get();
} }

View File

@ -23,6 +23,7 @@ BDWTEST_F(SBATest, givenUsedBindlessBuffersWhenAppendStateBaseAddressParametersI
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&stateBaseAddress, // stateBaseAddressCmd &stateBaseAddress, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -35,7 +36,8 @@ BDWTEST_F(SBATest, givenUsedBindlessBuffersWhenAppendStateBaseAddressParametersI
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
@ -43,3 +45,39 @@ BDWTEST_F(SBATest, givenUsedBindlessBuffersWhenAppendStateBaseAddressParametersI
EXPECT_EQ(0u, ssh.getUsed()); EXPECT_EQ(0u, ssh.getUsed());
EXPECT_EQ(0, memcmp(&stateBaseAddressReference, &stateBaseAddress, sizeof(STATE_BASE_ADDRESS))); EXPECT_EQ(0, memcmp(&stateBaseAddressReference, &stateBaseAddress, sizeof(STATE_BASE_ADDRESS)));
} }
BDWTEST_F(SBATest,
givenUsedBindlessBuffersAndOverridenSurfaceStateBaseAddressWhenAppendStateBaseAddressParametersIsCalledThenSbaCmdHasCorrectSurfaceStateBaseAddress) {
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
constexpr uint64_t surfaceStateBaseAddress = 0xBADA550000;
STATE_BASE_ADDRESS stateBaseAddressCmd = {};
StateBaseAddressHelperArgs<FamilyType> args = {
0, // generalStateBase
0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress
surfaceStateBaseAddress, // surfaceStateBaseAddress
&stateBaseAddressCmd, // stateBaseAddressCmd
nullptr, // dsh
nullptr, // ioh
&ssh, // ssh
nullptr, // gmmHelper
0, // statelessMocsIndex
MemoryCompressionState::NotApplicable, // memoryCompressionState
false, // setInstructionStateBaseAddress
false, // setGeneralStateBaseAddress
false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable
false, // useGlobalAtomics
false, // areMultipleSubDevicesInContext
true // overrideSurfaceStateBaseAddress
};
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
EXPECT_TRUE(stateBaseAddressCmd.getSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(surfaceStateBaseAddress, stateBaseAddressCmd.getSurfaceStateBaseAddress());
}

View File

@ -27,6 +27,7 @@ HWTEST2_F(SBATest, WhenAppendStateBaseAddressParametersIsCalledThenSBACmdHasBind
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&stateBaseAddress, // stateBaseAddressCmd &stateBaseAddress, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -39,7 +40,8 @@ HWTEST2_F(SBATest, WhenAppendStateBaseAddressParametersIsCalledThenSBACmdHasBind
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, true);
@ -67,6 +69,7 @@ HWTEST2_F(SBATest, WhenProgramStateBaseAddressParametersIsCalledThenSBACmdHasBin
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
cmd, // stateBaseAddressCmd cmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -79,7 +82,8 @@ HWTEST2_F(SBATest, WhenProgramStateBaseAddressParametersIsCalledThenSBACmdHasBin
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
@ -87,6 +91,47 @@ HWTEST2_F(SBATest, WhenProgramStateBaseAddressParametersIsCalledThenSBACmdHasBin
EXPECT_EQ(ssh.getMaxAvailableSpace() / 64 - 1, cmd->getBindlessSurfaceStateSize()); EXPECT_EQ(ssh.getMaxAvailableSpace() / 64 - 1, cmd->getBindlessSurfaceStateSize());
EXPECT_EQ(ssh.getHeapGpuBase(), cmd->getBindlessSurfaceStateBaseAddress()); EXPECT_EQ(ssh.getHeapGpuBase(), cmd->getBindlessSurfaceStateBaseAddress());
EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable()); EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable());
EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(ssh.getHeapGpuBase(), cmd->getSurfaceStateBaseAddress());
}
HWTEST2_F(SBATest,
givenProgramSurfaceStateBaseAddressUsingHeapBaseWhenOverrideSurfaceStateBaseAddressUsedThenSbaDispatchedWithOverrideValue, IsAtLeastSkl) {
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
EXPECT_NE(IGFX_BROADWELL, ::productFamily);
constexpr uint64_t surfaceStateBaseAddress = 0xBADA550000;
STATE_BASE_ADDRESS cmd;
StateBaseAddressHelperArgs<FamilyType> args = {
0, // generalStateBase
0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress
surfaceStateBaseAddress, // surfaceStateBaseAddress
&cmd, // stateBaseAddressCmd
nullptr, // dsh
nullptr, // ioh
&ssh, // ssh
pDevice->getGmmHelper(), // gmmHelper
0, // statelessMocsIndex
MemoryCompressionState::NotApplicable, // memoryCompressionState
false, // setInstructionStateBaseAddress
false, // setGeneralStateBaseAddress
false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable
false, // useGlobalAtomics
false, // areMultipleSubDevicesInContext
true // overrideSurfaceStateBaseAddress
};
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
EXPECT_TRUE(cmd.getSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(surfaceStateBaseAddress, cmd.getSurfaceStateBaseAddress());
} }
using SbaForBindlessTests = Test<DeviceFixture>; using SbaForBindlessTests = Test<DeviceFixture>;
@ -96,7 +141,7 @@ HWTEST2_F(SbaForBindlessTests, givenGlobalBindlessBaseAddressWhenProgramStateBas
EXPECT_NE(IGFX_BROADWELL, ::productFamily); EXPECT_NE(IGFX_BROADWELL, ::productFamily);
uint64_t globalBindlessHeapsBaseAddress = 0x12340000; constexpr uint64_t globalBindlessHeapsBaseAddress = 0x12340000;
StackVec<char, 4096> buffer(4096); StackVec<char, 4096> buffer(4096);
NEO::LinearStream cmdStream(buffer.begin(), buffer.size()); NEO::LinearStream cmdStream(buffer.begin(), buffer.size());
@ -108,6 +153,7 @@ HWTEST2_F(SbaForBindlessTests, givenGlobalBindlessBaseAddressWhenProgramStateBas
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
cmd, // stateBaseAddressCmd cmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -120,16 +166,82 @@ HWTEST2_F(SbaForBindlessTests, givenGlobalBindlessBaseAddressWhenProgramStateBas
true, // useGlobalHeapsBaseAddress true, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable()); EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(cmd->getBindlessSurfaceStateBaseAddress(), globalBindlessHeapsBaseAddress); EXPECT_EQ(globalBindlessHeapsBaseAddress, cmd->getBindlessSurfaceStateBaseAddress());
auto surfaceStateCount = StateBaseAddressHelper<FamilyType>::getMaxBindlessSurfaceStates(); auto surfaceStateCount = StateBaseAddressHelper<FamilyType>::getMaxBindlessSurfaceStates();
EXPECT_EQ(surfaceStateCount, cmd->getBindlessSurfaceStateSize()); EXPECT_EQ(surfaceStateCount, cmd->getBindlessSurfaceStateSize());
EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(globalBindlessHeapsBaseAddress, cmd->getBindlessSurfaceStateBaseAddress());
EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable());
EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable());
EXPECT_EQ(globalBindlessHeapsBaseAddress, cmd->getDynamicStateBaseAddress());
EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(globalBindlessHeapsBaseAddress, cmd->getSurfaceStateBaseAddress());
}
HWTEST2_F(SbaForBindlessTests,
givenGlobalBindlessBaseAddressOverridenSurfaceStateBaseAddressWhenProgramStateBaseAddressThenSbaProgrammedCorrectly, IsAtLeastSkl) {
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
EXPECT_NE(IGFX_BROADWELL, ::productFamily);
constexpr uint64_t globalBindlessHeapsBaseAddress = 0x12340000;
constexpr uint64_t surfaceStateBaseAddress = 0xBADA550000;
StackVec<char, 4096> buffer(4096);
NEO::LinearStream cmdStream(buffer.begin(), buffer.size());
STATE_BASE_ADDRESS *cmd = reinterpret_cast<STATE_BASE_ADDRESS *>(cmdStream.getSpace(0));
StateBaseAddressHelperArgs<FamilyType> args = {
0, // generalStateBase
0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress
globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress
surfaceStateBaseAddress, // surfaceStateBaseAddress
cmd, // stateBaseAddressCmd
nullptr, // dsh
nullptr, // ioh
nullptr, // ssh
pDevice->getGmmHelper(), // gmmHelper
0, // statelessMocsIndex
MemoryCompressionState::NotApplicable, // memoryCompressionState
false, // setInstructionStateBaseAddress
false, // setGeneralStateBaseAddress
true, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable
false, // useGlobalAtomics
false, // areMultipleSubDevicesInContext
true // overrideSurfaceStateBaseAddress
};
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(globalBindlessHeapsBaseAddress, cmd->getBindlessSurfaceStateBaseAddress());
auto surfaceStateCount = StateBaseAddressHelper<FamilyType>::getMaxBindlessSurfaceStates();
EXPECT_EQ(surfaceStateCount, cmd->getBindlessSurfaceStateSize());
EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(globalBindlessHeapsBaseAddress, cmd->getBindlessSurfaceStateBaseAddress());
EXPECT_TRUE(cmd->getDynamicStateBaseAddressModifyEnable());
EXPECT_TRUE(cmd->getDynamicStateBufferSizeModifyEnable());
EXPECT_EQ(globalBindlessHeapsBaseAddress, cmd->getDynamicStateBaseAddress());
EXPECT_TRUE(cmd->getSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(surfaceStateBaseAddress, cmd->getSurfaceStateBaseAddress());
} }
using IohSupported = IsWithinGfxCore<GFXCORE_FAMILY::IGFX_GEN9_CORE, GFXCORE_FAMILY::IGFX_GEN12LP_CORE>; using IohSupported = IsWithinGfxCore<GFXCORE_FAMILY::IGFX_GEN9_CORE, GFXCORE_FAMILY::IGFX_GEN12LP_CORE>;
@ -139,8 +251,8 @@ HWTEST2_F(SbaForBindlessTests, givenGlobalBindlessBaseAddressWhenPassingIndirect
EXPECT_NE(IGFX_BROADWELL, ::productFamily); EXPECT_NE(IGFX_BROADWELL, ::productFamily);
uint64_t globalBindlessHeapsBaseAddress = 0x12340000; constexpr uint64_t globalBindlessHeapsBaseAddress = 0x12340000;
uint64_t indirectObjectBaseAddress = 0x12340000; constexpr uint64_t indirectObjectBaseAddress = 0x12340000;
StackVec<char, 4096> buffer(4096); StackVec<char, 4096> buffer(4096);
NEO::LinearStream cmdStream(buffer.begin(), buffer.size()); NEO::LinearStream cmdStream(buffer.begin(), buffer.size());
@ -152,6 +264,7 @@ HWTEST2_F(SbaForBindlessTests, givenGlobalBindlessBaseAddressWhenPassingIndirect
indirectObjectBaseAddress, // indirectObjectHeapBaseAddress indirectObjectBaseAddress, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
cmd, // stateBaseAddressCmd cmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -164,7 +277,8 @@ HWTEST2_F(SbaForBindlessTests, givenGlobalBindlessBaseAddressWhenPassingIndirect
true, // useGlobalHeapsBaseAddress true, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
@ -187,6 +301,7 @@ HWTEST2_F(SBATest, givenSbaWhenOverrideBindlessSurfaceBaseIsFalseThenBindlessSur
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&stateBaseAddress, // stateBaseAddressCmd &stateBaseAddress, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -199,7 +314,8 @@ HWTEST2_F(SBATest, givenSbaWhenOverrideBindlessSurfaceBaseIsFalseThenBindlessSur
true, // useGlobalHeapsBaseAddress true, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, false); StateBaseAddressHelper<FamilyType>::appendStateBaseAddressParameters(args, false);
@ -212,7 +328,7 @@ HWTEST2_F(SBATest, givenGlobalBindlessBaseAddressWhenSshIsPassedThenBindlessSurf
EXPECT_NE(IGFX_BROADWELL, ::productFamily); EXPECT_NE(IGFX_BROADWELL, ::productFamily);
uint64_t globalBindlessHeapsBaseAddress = 0x12340000; constexpr uint64_t globalBindlessHeapsBaseAddress = 0x12340000;
StackVec<char, 4096> buffer(4096); StackVec<char, 4096> buffer(4096);
NEO::LinearStream cmdStream(buffer.begin(), buffer.size()); NEO::LinearStream cmdStream(buffer.begin(), buffer.size());
@ -224,6 +340,7 @@ HWTEST2_F(SBATest, givenGlobalBindlessBaseAddressWhenSshIsPassedThenBindlessSurf
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
cmd, // stateBaseAddressCmd cmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -236,7 +353,8 @@ HWTEST2_F(SBATest, givenGlobalBindlessBaseAddressWhenSshIsPassedThenBindlessSurf
true, // useGlobalHeapsBaseAddress true, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
@ -248,7 +366,7 @@ HWTEST2_F(SBATest, givenSurfaceStateHeapWhenNotUsingGlobalHeapBaseThenBindlessSu
EXPECT_NE(IGFX_BROADWELL, ::productFamily); EXPECT_NE(IGFX_BROADWELL, ::productFamily);
uint64_t globalBindlessHeapsBaseAddress = 0x12340000; constexpr uint64_t globalBindlessHeapsBaseAddress = 0x12340000;
StackVec<char, 4096> buffer(4096); StackVec<char, 4096> buffer(4096);
NEO::LinearStream cmdStream(buffer.begin(), buffer.size()); NEO::LinearStream cmdStream(buffer.begin(), buffer.size());
@ -260,6 +378,7 @@ HWTEST2_F(SBATest, givenSurfaceStateHeapWhenNotUsingGlobalHeapBaseThenBindlessSu
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress globalBindlessHeapsBaseAddress, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
cmd, // stateBaseAddressCmd cmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -272,7 +391,8 @@ HWTEST2_F(SBATest, givenSurfaceStateHeapWhenNotUsingGlobalHeapBaseThenBindlessSu
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args); StateBaseAddressHelper<FamilyType>::programStateBaseAddress(args);
@ -345,6 +465,7 @@ HWTEST2_F(SBATest, givenDebugFlagSetWhenAppendingSbaThenProgramCorrectL1CachePol
0, // indirectObjectHeapBaseAddress 0, // indirectObjectHeapBaseAddress
0, // instructionHeapBaseAddress 0, // instructionHeapBaseAddress
0, // globalHeapsBaseAddress 0, // globalHeapsBaseAddress
0, // surfaceStateBaseAddress
&sbaCmd, // stateBaseAddressCmd &sbaCmd, // stateBaseAddressCmd
nullptr, // dsh nullptr, // dsh
nullptr, // ioh nullptr, // ioh
@ -357,7 +478,8 @@ HWTEST2_F(SBATest, givenDebugFlagSetWhenAppendingSbaThenProgramCorrectL1CachePol
false, // useGlobalHeapsBaseAddress false, // useGlobalHeapsBaseAddress
false, // isMultiOsContextCapable false, // isMultiOsContextCapable
false, // useGlobalAtomics false, // useGlobalAtomics
false // areMultipleSubDevicesInContext false, // areMultipleSubDevicesInContext
false // overrideSurfaceStateBaseAddress
}; };
for (const auto &input : testInputs) { for (const auto &input : testInputs) {
@ -411,4 +533,4 @@ HWTEST2_F(SBATest, givenDebugFlagSetWhenAppendingRssThenProgramCorrectL1CachePol
EXPECT_EQ(input.cachePolicy, rssCmd.getL1CachePolicyL1CacheControl()); EXPECT_EQ(input.cachePolicy, rssCmd.getL1CachePolicyL1CacheControl());
} }
memoryManager->freeGraphicsMemory(allocation); memoryManager->freeGraphicsMemory(allocation);
} }