Add extra parameters to programStateBaseAddress()

Signed-off-by: Igor Venevtsev <igor.venevtsev@intel.com>
This commit is contained in:
Igor Venevtsev
2021-01-26 14:05:22 +00:00
committed by Compute-Runtime-Automation
parent adfa3c6bcb
commit bb72beac6b
18 changed files with 192 additions and 85 deletions

View File

@@ -362,7 +362,9 @@ void EncodeStateBaseAddress<Family>::encode(CommandContainer &container, STATE_B
false,
gmmHelper,
false,
MemoryCompressionState::NotApplicable);
MemoryCompressionState::NotApplicable,
false,
1u);
auto pCmd = reinterpret_cast<STATE_BASE_ADDRESS *>(container.getCommandStream()->getSpace(sizeof(STATE_BASE_ADDRESS)));
*pCmd = sbaCmd;

View File

@@ -411,7 +411,9 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
false,
device.getGmmHelper(),
isMultiOsContextCapable(),
memoryCompressionState);
memoryCompressionState,
dispatchFlags.useGlobalAtomics,
dispatchFlags.numDevicesInContext);
*pCmd = cmd;
if (sshDirty) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2017-2020 Intel Corporation
* Copyright (C) 2017-2021 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -57,31 +57,33 @@ struct DispatchFlags {
KernelExecutionType kernelExecutionType, MemoryCompressionState memoryCompressionState,
uint64_t sliceCount, bool blocking, bool dcFlush, bool useSLM, bool guardCommandBufferWithPipeControl, bool gsba32BitRequired,
bool requiresCoherency, bool lowPriority, bool implicitFlush, bool outOfOrderExecutionAllowed, bool epilogueRequired,
bool usePerDSSbackedBuffer, bool useSingleSubdevice) : csrDependencies(csrDependencies),
barrierTimestampPacketNodes(barrierTimestampPacketNodes),
pipelineSelectArgs(pipelineSelectArgs),
flushStampReference(flushStampReference),
throttle(throttle),
preemptionMode(preemptionMode),
numGrfRequired(numGrfRequired),
l3CacheSettings(l3CacheSettings),
threadArbitrationPolicy(threadArbitrationPolicy),
additionalKernelExecInfo(additionalKernelExecInfo),
kernelExecutionType(kernelExecutionType),
memoryCompressionState(memoryCompressionState),
sliceCount(sliceCount),
blocking(blocking),
dcFlush(dcFlush),
useSLM(useSLM),
guardCommandBufferWithPipeControl(guardCommandBufferWithPipeControl),
gsba32BitRequired(gsba32BitRequired),
requiresCoherency(requiresCoherency),
lowPriority(lowPriority),
implicitFlush(implicitFlush),
outOfOrderExecutionAllowed(outOfOrderExecutionAllowed),
epilogueRequired(epilogueRequired),
usePerDssBackedBuffer(usePerDSSbackedBuffer),
useSingleSubdevice(useSingleSubdevice){};
bool usePerDSSbackedBuffer, bool useSingleSubdevice, bool useGlobalAtomics, size_t numDevicesInContext) : csrDependencies(csrDependencies),
barrierTimestampPacketNodes(barrierTimestampPacketNodes),
pipelineSelectArgs(pipelineSelectArgs),
flushStampReference(flushStampReference),
throttle(throttle),
preemptionMode(preemptionMode),
numGrfRequired(numGrfRequired),
l3CacheSettings(l3CacheSettings),
threadArbitrationPolicy(threadArbitrationPolicy),
additionalKernelExecInfo(additionalKernelExecInfo),
kernelExecutionType(kernelExecutionType),
memoryCompressionState(memoryCompressionState),
sliceCount(sliceCount),
blocking(blocking),
dcFlush(dcFlush),
useSLM(useSLM),
guardCommandBufferWithPipeControl(guardCommandBufferWithPipeControl),
gsba32BitRequired(gsba32BitRequired),
requiresCoherency(requiresCoherency),
lowPriority(lowPriority),
implicitFlush(implicitFlush),
outOfOrderExecutionAllowed(outOfOrderExecutionAllowed),
epilogueRequired(epilogueRequired),
usePerDssBackedBuffer(usePerDSSbackedBuffer),
useSingleSubdevice(useSingleSubdevice),
useGlobalAtomics(useGlobalAtomics),
numDevicesInContext(numDevicesInContext){};
CsrDependencies csrDependencies;
TimestampPacketContainer *barrierTimestampPacketNodes = nullptr;
@@ -109,6 +111,8 @@ struct DispatchFlags {
bool epilogueRequired = false;
bool usePerDssBackedBuffer = false;
bool useSingleSubdevice = false;
bool useGlobalAtomics = false;
size_t numDevicesInContext = 1u;
};
struct CsrSizeRequestFlags {

View File

@@ -27,7 +27,9 @@ void StateBaseAddressHelper<BDWFamily>::programStateBaseAddress(
bool useGlobalHeapsBaseAddress,
GmmHelper *gmmHelper,
bool isMultiOsContextCapable,
MemoryCompressionState memoryCompressionState) {
MemoryCompressionState memoryCompressionState,
bool useGlobalAtomics,
size_t numDevicesInContext) {
*stateBaseAddress = BDWFamily::cmdInitStateBaseAddress;
@@ -74,7 +76,8 @@ void StateBaseAddressHelper<BDWFamily>::programStateBaseAddress(
stateBaseAddress->setStatelessDataPortAccessMemoryObjectControlState(statelessMocsIndex);
appendStateBaseAddressParameters(stateBaseAddress, ssh, setGeneralStateBaseAddress, indirectObjectHeapBaseAddress, gmmHelper, isMultiOsContextCapable, memoryCompressionState, true);
appendStateBaseAddressParameters(stateBaseAddress, ssh, setGeneralStateBaseAddress, indirectObjectHeapBaseAddress,
gmmHelper, isMultiOsContextCapable, memoryCompressionState, true, useGlobalAtomics, numDevicesInContext);
}
template struct StateBaseAddressHelper<BDWFamily>;
} // namespace NEO

View File

@@ -36,7 +36,9 @@ struct StateBaseAddressHelper {
bool useGlobalHeapsBaseAddress,
GmmHelper *gmmHelper,
bool isMultiOsContextCapable,
MemoryCompressionState memoryCompressionState);
MemoryCompressionState memoryCompressionState,
bool useGlobalAtomics,
size_t numDevicesInContext);
static void appendStateBaseAddressParameters(
STATE_BASE_ADDRESS *stateBaseAddress,
@@ -46,7 +48,9 @@ struct StateBaseAddressHelper {
GmmHelper *gmmHelper,
bool isMultiOsContextCapable,
MemoryCompressionState memoryCompressionState,
bool overrideBindlessSurfaceStateBase);
bool overrideBindlessSurfaceStateBase,
bool useGlobalAtomics,
size_t nnumDevicesInContext);
static void appendExtraCacheSettings(STATE_BASE_ADDRESS *stateBaseAddress, GmmHelper *gmmHelper);

View File

@@ -31,7 +31,9 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
bool useGlobalHeapsBaseAddress,
GmmHelper *gmmHelper,
bool isMultiOsContextCapable,
MemoryCompressionState memoryCompressionState) {
MemoryCompressionState memoryCompressionState,
bool useGlobalAtomics,
size_t numDevicesInContext) {
*stateBaseAddress = GfxFamily::cmdInitStateBaseAddress;
bool overrideBindlessSurfaceStateBase = true;
@@ -99,7 +101,8 @@ void StateBaseAddressHelper<GfxFamily>::programStateBaseAddress(
stateBaseAddress->setStatelessDataPortAccessMemoryObjectControlState(statelessMocsIndex);
appendStateBaseAddressParameters(stateBaseAddress, ssh, setGeneralStateBaseAddress, indirectObjectHeapBaseAddress, gmmHelper, isMultiOsContextCapable, memoryCompressionState, overrideBindlessSurfaceStateBase);
appendStateBaseAddressParameters(stateBaseAddress, ssh, setGeneralStateBaseAddress, indirectObjectHeapBaseAddress, gmmHelper,
isMultiOsContextCapable, memoryCompressionState, overrideBindlessSurfaceStateBase, useGlobalAtomics, numDevicesInContext);
}
template <typename GfxFamily>

View File

@@ -18,7 +18,9 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
GmmHelper *gmmHelper,
bool isMultiOsContextCapable,
MemoryCompressionState memoryCompressionState,
bool overrideBindlessSurfaceStateBase) {
bool overrideBindlessSurfaceStateBase,
bool useGlobalAtomics,
size_t numDevicesInContext) {
appendExtraCacheSettings(stateBaseAddress, gmmHelper);
}

View File

@@ -18,7 +18,9 @@ void StateBaseAddressHelper<GfxFamily>::appendStateBaseAddressParameters(
GmmHelper *gmmHelper,
bool isMultiOsContextCapable,
MemoryCompressionState memoryCompressionState,
bool overrideBindlessSurfaceStateBase) {
bool overrideBindlessSurfaceStateBase,
bool useGlobalAtomics,
size_t numDevicesInContext) {
if (overrideBindlessSurfaceStateBase && ssh) {
stateBaseAddress->setBindlessSurfaceStateBaseAddressModifyEnable(true);

View File

@@ -23,7 +23,9 @@ BDWTEST_F(SBATest, givenUsedBindlessBuffersWhenAppendStateBaseAddressParametersI
nullptr,
false,
MemoryCompressionState::NotApplicable,
true);
true,
false,
1u);
EXPECT_EQ(0u, ssh.getUsed());
EXPECT_EQ(0, memcmp(&stateBaseAddressReference, &stateBaseAddress, sizeof(STATE_BASE_ADDRESS)));

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2020 Intel Corporation
* Copyright (C) 2019-2021 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -39,6 +39,8 @@ struct DispatchFlagsHelper {
false, //outOfOrderExecutionAllowed
false, //epilogueRequired
false, //usePerDssBackedBuffer
false); //useSingleSubdevice
false, //useSingleSubdevice
false, //useGlobalAtomics
1u); //numDevicesInContext
}
};

View File

@@ -27,7 +27,9 @@ HWTEST2_F(SBATest, WhenAppendStateBaseAddressParametersIsCalledThenSBACmdHasBind
nullptr,
false,
MemoryCompressionState::NotApplicable,
true);
true,
false,
1u);
EXPECT_EQ(ssh.getMaxAvailableSpace() / 64 - 1, stateBaseAddress.getBindlessSurfaceStateSize());
EXPECT_EQ(ssh.getHeapGpuBase(), stateBaseAddress.getBindlessSurfaceStateBaseAddress());
@@ -63,7 +65,9 @@ HWTEST2_F(SBATest, WhenProgramStateBaseAddressParametersIsCalledThenSBACmdHasBin
false,
pDevice->getGmmHelper(),
true,
MemoryCompressionState::NotApplicable);
MemoryCompressionState::NotApplicable,
false,
1u);
EXPECT_EQ(ssh.getMaxAvailableSpace() / 64 - 1, cmd->getBindlessSurfaceStateSize());
EXPECT_EQ(ssh.getHeapGpuBase(), cmd->getBindlessSurfaceStateBaseAddress());
@@ -98,7 +102,9 @@ HWTEST2_F(SbaForBindlessTests, givenGlobalBindlessBaseAddressWhenProgramStateBas
true,
pDevice->getGmmHelper(),
true,
MemoryCompressionState::NotApplicable);
MemoryCompressionState::NotApplicable,
false,
1u);
EXPECT_TRUE(cmd->getBindlessSurfaceStateBaseAddressModifyEnable());
EXPECT_EQ(cmd->getBindlessSurfaceStateBaseAddress(), globalBindlessHeapsBaseAddress);
EXPECT_EQ(cmd->getBindlessSurfaceStateSize(), MemoryConstants::sizeOf4GBinPageEntities);
@@ -130,7 +136,9 @@ HWTEST2_F(SbaForBindlessTests, givenGlobalBindlessBaseAddressWhenPassingIndirect
true,
pDevice->getGmmHelper(),
true,
MemoryCompressionState::NotApplicable);
MemoryCompressionState::NotApplicable,
false,
1u);
EXPECT_EQ(cmd->getIndirectObjectBaseAddress(), indirectObjectBaseAddress);
}
@@ -153,7 +161,9 @@ HWTEST2_F(SBATest, givenSbaWhenOverrideBindlessSurfaceBaseIsFalseThenBindlessSur
pDevice->getRootDeviceEnvironment().getGmmHelper(),
false,
MemoryCompressionState::NotApplicable,
false);
false,
false,
1u);
EXPECT_EQ(0u, stateBaseAddress.getBindlessSurfaceStateBaseAddress());
}
@@ -184,7 +194,9 @@ HWTEST2_F(SBATest, givenGlobalBindlessBaseAddressWhenSshIsPassedThenBindlessSurf
true,
pDevice->getGmmHelper(),
true,
MemoryCompressionState::NotApplicable);
MemoryCompressionState::NotApplicable,
false,
1u);
EXPECT_EQ(cmd->getBindlessSurfaceStateBaseAddress(), globalBindlessHeapsBaseAddress);
}
HWTEST2_F(SBATest, givenSurfaceStateHeapWhenNotUsingGlobalHeapBaseThenBindlessSurfaceBaseIsSshBase, IsSklOrAbove) {
@@ -213,6 +225,8 @@ HWTEST2_F(SBATest, givenSurfaceStateHeapWhenNotUsingGlobalHeapBaseThenBindlessSu
false,
pDevice->getGmmHelper(),
true,
MemoryCompressionState::NotApplicable);
MemoryCompressionState::NotApplicable,
false,
1u);
EXPECT_EQ(ssh.getHeapGpuBase(), cmd->getBindlessSurfaceStateBaseAddress());
}
}