mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
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:

committed by
Compute-Runtime-Automation

parent
99c5de855c
commit
0011368775
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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) {
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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>
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user