mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-12 17:33:00 +08:00
Add cross regular and intermediate command lists base address state transitions
- updates coming from regular list are updated in csr last sent variables - all per context and per kernel transitions kept in single place - state updates from intermediate to regular are set in csr properties - global atomics support duplicates removed Related-To: NEO-5055 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
140e59810f
commit
bf2072c3ea
@@ -1552,212 +1552,3 @@ HWCMDTEST_F(IGFX_GEN8_CORE, UltCommandStreamReceiverTest, givenBarrierNodeSetWhe
|
||||
EXPECT_EQ(0u, pipeControl->getImmediateData());
|
||||
EXPECT_EQ(gpuAddress, UnitTestHelper<FamilyType>::getPipeControlPostSyncAddress(*pipeControl));
|
||||
}
|
||||
|
||||
HWTEST_F(UltCommandStreamReceiverTest, givenFrontEndStateNotInitedWhenTransitionFrontEndPropertiesThenExpectCorrectValuesStored) {
|
||||
auto dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
|
||||
|
||||
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
commandStreamReceiver.feSupportFlags.computeDispatchAllWalker = false;
|
||||
commandStreamReceiver.feSupportFlags.disableEuFusion = false;
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
commandStreamReceiver.feSupportFlags.disableOverdispatch = true;
|
||||
dispatchFlags.additionalKernelExecInfo = AdditionalKernelExecInfo::NotApplicable;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
dispatchFlags.additionalKernelExecInfo = AdditionalKernelExecInfo::NotSet;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
dispatchFlags.additionalKernelExecInfo = AdditionalKernelExecInfo::DisableOverdispatch;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
commandStreamReceiver.feSupportFlags.disableOverdispatch = false;
|
||||
commandStreamReceiver.lastAdditionalKernelExecInfo = AdditionalKernelExecInfo::NotSet;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
commandStreamReceiver.feSupportFlags.computeDispatchAllWalker = true;
|
||||
dispatchFlags.kernelExecutionType = KernelExecutionType::NotApplicable;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
dispatchFlags.kernelExecutionType = KernelExecutionType::Default;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
dispatchFlags.kernelExecutionType = KernelExecutionType::Concurrent;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
commandStreamReceiver.feSupportFlags.computeDispatchAllWalker = false;
|
||||
commandStreamReceiver.lastKernelExecutionType = KernelExecutionType::Default;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
commandStreamReceiver.feSupportFlags.disableEuFusion = true;
|
||||
dispatchFlags.disableEUFusion = false;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
commandStreamReceiver.streamProperties.frontEndState.disableEUFusion.value = 0;
|
||||
dispatchFlags.disableEUFusion = true;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
dispatchFlags.disableEUFusion = false;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
commandStreamReceiver.feSupportFlags.disableEuFusion = false;
|
||||
commandStreamReceiver.streamProperties.frontEndState.disableEUFusion.value = -1;
|
||||
dispatchFlags.disableEUFusion = false;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
}
|
||||
|
||||
HWTEST_F(UltCommandStreamReceiverTest, givenFrontEndStateInitedWhenTransitionFrontEndPropertiesThenExpectCorrectValuesStored) {
|
||||
auto dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
|
||||
|
||||
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
commandStreamReceiver.feSupportFlags.computeDispatchAllWalker = false;
|
||||
commandStreamReceiver.feSupportFlags.disableEuFusion = false;
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
commandStreamReceiver.feSupportFlags.disableOverdispatch = true;
|
||||
|
||||
commandStreamReceiver.streamProperties.frontEndState.disableOverdispatch.value = 0;
|
||||
dispatchFlags.additionalKernelExecInfo = AdditionalKernelExecInfo::NotSet;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
dispatchFlags.additionalKernelExecInfo = AdditionalKernelExecInfo::DisableOverdispatch;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
commandStreamReceiver.streamProperties.frontEndState.disableOverdispatch.value = 1;
|
||||
dispatchFlags.additionalKernelExecInfo = AdditionalKernelExecInfo::NotSet;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
commandStreamReceiver.feSupportFlags.disableOverdispatch = false;
|
||||
commandStreamReceiver.feSupportFlags.computeDispatchAllWalker = true;
|
||||
|
||||
commandStreamReceiver.streamProperties.frontEndState.computeDispatchAllWalkerEnable.value = 0;
|
||||
dispatchFlags.kernelExecutionType = KernelExecutionType::Default;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
|
||||
dispatchFlags.kernelExecutionType = KernelExecutionType::Concurrent;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
|
||||
commandStreamReceiver.streamProperties.frontEndState.computeDispatchAllWalkerEnable.value = 1;
|
||||
dispatchFlags.kernelExecutionType = KernelExecutionType::Default;
|
||||
commandStreamReceiver.handleFrontEndStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.getMediaVFEStateDirty());
|
||||
commandStreamReceiver.setMediaVFEStateDirty(false);
|
||||
}
|
||||
|
||||
HWTEST_F(UltCommandStreamReceiverTest, givenPipelineSelectStateNotInitedWhenTransitionPipelineSelectPropertiesThenExpectCorrectValuesStored) {
|
||||
auto dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
|
||||
|
||||
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
|
||||
commandStreamReceiver.pipelineSupportFlags.systolicMode = false;
|
||||
commandStreamReceiver.pipelineSupportFlags.mediaSamplerDopClockGate = true;
|
||||
|
||||
dispatchFlags.pipelineSelectArgs.mediaSamplerRequired = false;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.csrSizeRequestFlags.mediaSamplerConfigChanged);
|
||||
|
||||
commandStreamReceiver.pipelineSupportFlags.mediaSamplerDopClockGate = false;
|
||||
commandStreamReceiver.lastMediaSamplerConfig = -1;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.csrSizeRequestFlags.mediaSamplerConfigChanged);
|
||||
|
||||
commandStreamReceiver.pipelineSupportFlags.mediaSamplerDopClockGate = true;
|
||||
commandStreamReceiver.lastMediaSamplerConfig = 0;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.csrSizeRequestFlags.mediaSamplerConfigChanged);
|
||||
|
||||
dispatchFlags.pipelineSelectArgs.mediaSamplerRequired = true;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.csrSizeRequestFlags.mediaSamplerConfigChanged);
|
||||
|
||||
commandStreamReceiver.pipelineSupportFlags.mediaSamplerDopClockGate = false;
|
||||
commandStreamReceiver.pipelineSupportFlags.systolicMode = true;
|
||||
|
||||
commandStreamReceiver.lastSystolicPipelineSelectMode = false;
|
||||
dispatchFlags.pipelineSelectArgs.systolicPipelineSelectMode = true;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.csrSizeRequestFlags.systolicPipelineSelectMode);
|
||||
|
||||
commandStreamReceiver.pipelineSupportFlags.systolicMode = false;
|
||||
commandStreamReceiver.lastSystolicPipelineSelectMode = false;
|
||||
dispatchFlags.pipelineSelectArgs.systolicPipelineSelectMode = true;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.csrSizeRequestFlags.systolicPipelineSelectMode);
|
||||
|
||||
commandStreamReceiver.pipelineSupportFlags.systolicMode = true;
|
||||
commandStreamReceiver.lastSystolicPipelineSelectMode = false;
|
||||
dispatchFlags.pipelineSelectArgs.systolicPipelineSelectMode = false;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.csrSizeRequestFlags.systolicPipelineSelectMode);
|
||||
}
|
||||
|
||||
HWTEST_F(UltCommandStreamReceiverTest,
|
||||
givenPipelineSelectStateInitedWhenTransitionPipelineSelectPropertiesThenExpectCorrectValuesStored) {
|
||||
auto dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
|
||||
|
||||
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
|
||||
commandStreamReceiver.pipelineSupportFlags.systolicMode = false;
|
||||
commandStreamReceiver.pipelineSupportFlags.mediaSamplerDopClockGate = true;
|
||||
|
||||
commandStreamReceiver.streamProperties.pipelineSelect.mediaSamplerDopClockGate.value = 1;
|
||||
commandStreamReceiver.lastMediaSamplerConfig = -1;
|
||||
dispatchFlags.pipelineSelectArgs.mediaSamplerRequired = false;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.csrSizeRequestFlags.mediaSamplerConfigChanged);
|
||||
|
||||
commandStreamReceiver.streamProperties.pipelineSelect.mediaSamplerDopClockGate.value = 0;
|
||||
dispatchFlags.pipelineSelectArgs.mediaSamplerRequired = true;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.csrSizeRequestFlags.mediaSamplerConfigChanged);
|
||||
|
||||
commandStreamReceiver.streamProperties.pipelineSelect.mediaSamplerDopClockGate.value = 0;
|
||||
commandStreamReceiver.lastMediaSamplerConfig = 1;
|
||||
dispatchFlags.pipelineSelectArgs.mediaSamplerRequired = false;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.csrSizeRequestFlags.mediaSamplerConfigChanged);
|
||||
|
||||
commandStreamReceiver.pipelineSupportFlags.mediaSamplerDopClockGate = false;
|
||||
commandStreamReceiver.pipelineSupportFlags.systolicMode = true;
|
||||
|
||||
commandStreamReceiver.streamProperties.pipelineSelect.systolicMode.value = 1;
|
||||
commandStreamReceiver.lastSystolicPipelineSelectMode = false;
|
||||
dispatchFlags.pipelineSelectArgs.systolicPipelineSelectMode = false;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.csrSizeRequestFlags.systolicPipelineSelectMode);
|
||||
|
||||
commandStreamReceiver.streamProperties.pipelineSelect.systolicMode.value = 0;
|
||||
dispatchFlags.pipelineSelectArgs.systolicPipelineSelectMode = true;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_TRUE(commandStreamReceiver.csrSizeRequestFlags.systolicPipelineSelectMode);
|
||||
|
||||
commandStreamReceiver.streamProperties.pipelineSelect.systolicMode.value = 0;
|
||||
commandStreamReceiver.lastSystolicPipelineSelectMode = true;
|
||||
dispatchFlags.pipelineSelectArgs.systolicPipelineSelectMode = false;
|
||||
commandStreamReceiver.handlePipelineSelectStateTransition(dispatchFlags);
|
||||
EXPECT_FALSE(commandStreamReceiver.csrSizeRequestFlags.systolicPipelineSelectMode);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user