Skip to content

Commit d7a2a62

Browse files
Add additional StateBaseAddress cmd wa
Resolves: NEO-5982 Signed-off-by: Sebastian Luzynski <sebastian.jozef.luzynski@intel.com>
1 parent dc77174 commit d7a2a62

File tree

11 files changed

+51
-0
lines changed

11 files changed

+51
-0
lines changed

level_zero/core/source/cmdlist/cmdlist_hw.inl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1998,6 +1998,7 @@ void CommandListCoreFamily<gfxCoreFamily>::programStateBaseAddress(NEO::CommandC
19981998
args.hdcPipelineFlush = true;
19991999
args.textureCacheInvalidationEnable = true;
20002000
NEO::MemorySynchronizationCommands<GfxFamily>::addPipeControl(*commandContainer.getCommandStream(), args);
2001+
auto &hwInfo = device->getHwInfo();
20012002

20022003
STATE_BASE_ADDRESS sba;
20032004
NEO::EncodeStateBaseAddress<GfxFamily>::encode(commandContainer, sba);
@@ -2012,6 +2013,8 @@ void CommandListCoreFamily<gfxCoreFamily>::programStateBaseAddress(NEO::CommandC
20122013

20132014
device->getL0Debugger()->captureStateBaseAddress(commandContainer, sbaAddresses);
20142015
}
2016+
2017+
NEO::EncodeStateBaseAddress<GfxFamily>::addStateBaseAddressIfRequired(commandContainer, sba, hwInfo);
20152018
}
20162019

20172020
template <GFXCORE_FAMILY gfxCoreFamily>

opencl/test/unit_test/os_interface/hw_info_config_tests.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,10 @@ HWTEST_F(HwInfoConfigTest, givenSamplerStateWhenAdjustSamplerStateThenNothingIsC
139139

140140
EXPECT_EQ(0, memcmp(&initialState, &state, sizeof(SAMPLER_STATE)));
141141
}
142+
143+
HWTEST_F(HwInfoConfigTest, whenCallingIsAdditionalStateBaseAddressWARequiredThenFalseIsReturned) {
144+
auto hwInfoConfig = HwInfoConfig::get(pInHwInfo.platform.eProductFamily);
145+
bool ret = hwInfoConfig->isAdditionalStateBaseAddressWARequired(pInHwInfo);
146+
147+
EXPECT_FALSE(ret);
148+
}

opencl/test/unit_test/os_interface/linux/hw_info_config_linux_tests.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ void HwInfoConfigHw<IGFX_UNKNOWN>::adjustSamplerState(void *sampler, const Hardw
8888

8989
template <>
9090
void HwInfoConfigHw<IGFX_UNKNOWN>::convertTimestampsFromOaToCsDomain(uint64_t &timestampData){};
91+
92+
template <>
93+
bool HwInfoConfigHw<IGFX_UNKNOWN>::isAdditionalStateBaseAddressWARequired(const HardwareInfo &hwInfo) const {
94+
return false;
95+
}
96+
9197
} // namespace NEO
9298

9399
struct DummyHwConfig : HwInfoConfigHw<IGFX_UNKNOWN> {
@@ -539,6 +545,11 @@ TEST_F(HwInfoConfigTestLinuxDummy, givenFailingGttSizeIoctlWhenInitializingHwInf
539545
EXPECT_EQ(pInHwInfo.capabilityTable.gpuAddressSpace, outHwInfo.capabilityTable.gpuAddressSpace);
540546
}
541547

548+
HWTEST_F(HwInfoConfigTestLinuxDummy, givenHardwareInfoWhenCallingIsAdditionalStateBaseAddressWARequiredThenFalseIsReturned) {
549+
bool ret = hwConfig.isAdditionalStateBaseAddressWARequired(outHwInfo);
550+
EXPECT_FALSE(ret);
551+
}
552+
542553
using HwConfigLinux = ::testing::Test;
543554

544555
HWTEST2_F(HwConfigLinux, GivenDifferentValuesFromTopologyQueryWhenConfiguringHwInfoThenMaxSlicesSupportedSetToAvailableCountInGtSystemInfo, MatchAny) {

opencl/test/unit_test/os_interface/windows/hw_info_config_win_tests.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ void HwInfoConfigHw<IGFX_UNKNOWN>::convertTimestampsFromOaToCsDomain(uint64_t &t
6767
template <>
6868
void HwInfoConfigHw<IGFX_UNKNOWN>::adjustSamplerState(void *sampler, const HardwareInfo &hwInfo){};
6969

70+
template <>
71+
bool HwInfoConfigHw<IGFX_UNKNOWN>::isAdditionalStateBaseAddressWARequired(const HardwareInfo &hwInfo) const {
72+
return false;
73+
}
74+
7075
HwInfoConfigTestWindows::HwInfoConfigTestWindows() {
7176
this->executionEnvironment = std::make_unique<MockExecutionEnvironment>();
7277
this->rootDeviceEnvironment = std::make_unique<RootDeviceEnvironment>(*executionEnvironment);
@@ -117,6 +122,11 @@ TEST_F(HwInfoConfigTestWindows, givenInstrumentationForHardwareIsEnabledOrDisabl
117122
EXPECT_TRUE(outHwInfo.capabilityTable.instrumentationEnabled);
118123
}
119124

125+
HWTEST_F(HwInfoConfigTestWindows, givenHardwareInfoWhenCallingIsAdditionalStateBaseAddressWARequiredThenFalseIsReturned) {
126+
bool ret = hwConfig.isAdditionalStateBaseAddressWARequired(outHwInfo);
127+
EXPECT_FALSE(ret);
128+
}
129+
120130
HWTEST_F(HwInfoConfigTestWindows, givenFtrIaCoherencyFlagWhenConfiguringHwInfoThenSetCoherencySupportCorrectly) {
121131
HardwareInfo initialHwInfo = *defaultHwInfo;
122132
auto &hwHelper = HwHelper::get(initialHwInfo.platform.eRenderCoreFamily);

shared/source/command_container/command_encoder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ struct EncodeStateBaseAddress {
219219
using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS;
220220
static void encode(CommandContainer &container, STATE_BASE_ADDRESS &sbaCmd);
221221
static void encode(CommandContainer &container, STATE_BASE_ADDRESS &sbaCmd, uint32_t statelessMocsIndex, bool useGlobalAtomics);
222+
static void addStateBaseAddressIfRequired(CommandContainer &container, STATE_BASE_ADDRESS &sbaCmd, const HardwareInfo &hwInfo);
222223
};
223224

224225
template <typename GfxFamily>

shared/source/command_container/command_encoder_bdw_plus.inl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,9 @@ void EncodeStateBaseAddress<Family>::encode(CommandContainer &container, STATE_B
386386
EncodeWA<Family>::encodeAdditionalPipelineSelect(*container.getDevice(), *container.getCommandStream(), false);
387387
}
388388

389+
template <typename Family>
390+
void EncodeStateBaseAddress<Family>::addStateBaseAddressIfRequired(CommandContainer &container, STATE_BASE_ADDRESS &sbaCmd, const HardwareInfo &hwInfo) {}
391+
389392
template <typename Family>
390393
void EncodeL3State<Family>::encode(CommandContainer &container, bool enableSLM) {
391394
auto offset = L3CNTLRegisterOffset<Family>::registerOffset;

shared/source/command_container/command_encoder_xehp_plus.inl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,9 @@ void EncodeStateBaseAddress<Family>::encode(CommandContainer &container, STATE_B
484484
}
485485
}
486486

487+
template <typename Family>
488+
void EncodeStateBaseAddress<Family>::addStateBaseAddressIfRequired(CommandContainer &container, STATE_BASE_ADDRESS &sbaCmd, const HardwareInfo &hwInfo) {}
489+
487490
template <typename Family>
488491
void EncodeComputeMode<Family>::adjustComputeMode(LinearStream &csr, void *const stateComputeModePtr, StateComputeModeProperties &properties) {
489492
using STATE_COMPUTE_MODE = typename Family::STATE_COMPUTE_MODE;

shared/source/command_stream/command_stream_receiver_hw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ class CommandStreamReceiverHw : public CommandStreamReceiver {
133133
void programPreamble(LinearStream &csr, Device &device, DispatchFlags &dispatchFlags, uint32_t &newL3Config);
134134
void programPipelineSelect(LinearStream &csr, PipelineSelectArgs &pipelineSelectArgs);
135135
void programAdditionalPipelineSelect(LinearStream &csr, PipelineSelectArgs &pipelineSelectArgs, bool is3DPipeline);
136+
void programAdditionalStateBaseAddress(LinearStream &csr, typename GfxFamily::STATE_BASE_ADDRESS &cmd, Device &device);
136137
void programEpilogue(LinearStream &csr, Device &device, void **batchBufferEndLocation, DispatchFlags &dispatchFlags);
137138
void programEpliogueCommands(LinearStream &csr, const DispatchFlags &dispatchFlags);
138139
void programMediaSampler(LinearStream &csr, DispatchFlags &dispatchFlags);

shared/source/command_stream/command_stream_receiver_hw_base.inl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,8 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
422422
dispatchFlags.areMultipleSubDevicesInContext);
423423
*pCmd = cmd;
424424

425+
programAdditionalStateBaseAddress(commandStreamCSR, cmd, device);
426+
425427
if (sshDirty) {
426428
bindingTableBaseAddressRequired = true;
427429
}
@@ -1314,6 +1316,9 @@ inline void CommandStreamReceiverHw<GfxFamily>::programAdditionalPipelineSelect(
13141316
}
13151317
}
13161318

1319+
template <typename GfxFamily>
1320+
inline void CommandStreamReceiverHw<GfxFamily>::programAdditionalStateBaseAddress(LinearStream &csr, typename GfxFamily::STATE_BASE_ADDRESS &cmd, Device &device) {}
1321+
13171322
template <typename GfxFamily>
13181323
inline bool CommandStreamReceiverHw<GfxFamily>::isComputeModeNeeded() const {
13191324
return false;

shared/source/os_interface/hw_info_config.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class HwInfoConfig {
3838
virtual uint64_t getSharedSystemMemCapabilities() = 0;
3939
virtual void convertTimestampsFromOaToCsDomain(uint64_t &timestampData) = 0;
4040
virtual uint32_t getDeviceMemoryMaxClkRate(const HardwareInfo *hwInfo) = 0;
41+
virtual bool isAdditionalStateBaseAddressWARequired(const HardwareInfo &hwInfo) const = 0;
4142
uint32_t threadsPerEu;
4243
};
4344

@@ -59,6 +60,7 @@ class HwInfoConfigHw : public HwInfoConfig {
5960
uint64_t getSharedSystemMemCapabilities() override;
6061
void convertTimestampsFromOaToCsDomain(uint64_t &timestampData) override;
6162
uint32_t getDeviceMemoryMaxClkRate(const HardwareInfo *hwInfo) override;
63+
bool isAdditionalStateBaseAddressWARequired(const HardwareInfo &hwInfo) const override;
6264

6365
protected:
6466
HwInfoConfigHw() = default;

0 commit comments

Comments
 (0)