mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
Add PC before NP state commands
Add pipe control before state base address, state compute mode and state sip commands on DG2 and PVC when CCS flow is used. Signed-off-by: Krzysztof Gibala <krzysztof.gibala@intel.com>
This commit is contained in:

committed by
Compute-Runtime-Automation

parent
c1eae01ce9
commit
ff7882bcbe
@ -137,10 +137,13 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverFlushTaskXeHPAndLaterTests, gi
|
||||
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
|
||||
configureCSRtoNonDirtyState<FamilyType>(false);
|
||||
ioh.replaceBuffer(ptrOffset(ioh.getCpuBase(), +1u), ioh.getMaxAvailableSpace() + MemoryConstants::pageSize * 3);
|
||||
flushTask(commandStreamReceiver);
|
||||
parseCommands<FamilyType>(commandStreamReceiver.getCS(0));
|
||||
|
||||
auto requiredCmdSize = PreemptionHelper::getRequiredStateSipCmdSize<FamilyType>(*pDevice, false);
|
||||
auto cmdSize = sizeof(STATE_SIP) + sizeof(PIPE_CONTROL);
|
||||
EXPECT_EQ(cmdSize, requiredCmdSize);
|
||||
|
||||
auto pipeControlIterator = find<PIPE_CONTROL *>(cmdList.begin(), cmdList.end());
|
||||
auto pipeControlCmd = genCmdCast<PIPE_CONTROL *>(*pipeControlIterator);
|
||||
|
||||
@ -160,6 +163,48 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverFlushTaskXeHPAndLaterTests, gi
|
||||
EXPECT_EQ(sipAllocation->getGpuAddressToPatch(), sipCmd->getSystemInstructionPointer());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandStreamReceiverFlushTaskXeHPAndLaterTests, givenProgramPipeControlPriorToNonPipelinedStateCommandAndStateSipWhenItIsRequiredThenThereIsPipeControlPriorToIt, IsXeHpgCore) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
using STATE_SIP = typename FamilyType::STATE_SIP;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
pDevice->executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(new MockDebugger);
|
||||
|
||||
auto sipType = SipKernel::getSipKernelType(*pDevice);
|
||||
SipKernel::initSipKernel(sipType, *pDevice);
|
||||
|
||||
auto &commandStreamReceiver = pDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
|
||||
configureCSRtoNonDirtyState<FamilyType>(false);
|
||||
flushTask(commandStreamReceiver);
|
||||
parseCommands<FamilyType>(commandStreamReceiver.getCS(0));
|
||||
|
||||
auto requiredCmdSize = PreemptionHelper::getRequiredStateSipCmdSize<FamilyType>(*pDevice, false);
|
||||
auto cmdSize = sizeof(STATE_SIP) + sizeof(PIPE_CONTROL);
|
||||
EXPECT_EQ(cmdSize, requiredCmdSize);
|
||||
|
||||
// first PC prior SBA
|
||||
auto pipeControlIterator = find<PIPE_CONTROL *>(cmdList.begin(), cmdList.end());
|
||||
pipeControlIterator = find<PIPE_CONTROL *>(++pipeControlIterator, cmdList.end());
|
||||
auto pipeControlCmd = genCmdCast<PIPE_CONTROL *>(*pipeControlIterator);
|
||||
|
||||
EXPECT_TRUE(UnitTestHelper<FamilyType>::getPipeControlHdcPipelineFlush(*pipeControlCmd));
|
||||
EXPECT_TRUE(pipeControlCmd->getUnTypedDataPortCacheFlush());
|
||||
|
||||
EXPECT_FALSE(pipeControlCmd->getAmfsFlushEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getInstructionCacheInvalidateEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getTextureCacheInvalidationEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getConstantCacheInvalidationEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getStateCacheInvalidationEnable());
|
||||
|
||||
auto sipIterator = find<STATE_SIP *>(cmdList.begin(), cmdList.end());
|
||||
auto sipCmd = genCmdCast<STATE_SIP *>(*sipIterator);
|
||||
|
||||
auto sipAllocation = SipKernel::getSipKernel(*pDevice).getSipAllocation();
|
||||
|
||||
EXPECT_EQ(sipAllocation->getGpuAddressToPatch(), sipCmd->getSystemInstructionPointer());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandStreamReceiverFlushTaskXeHPAndLaterTests, givenProgramPipeControlPriorToNonPipelinedStateCommandDebugKeyAndStateSipWhenA0SteppingIsActivatedThenOnlyGlobalSipIsProgrammed, IsXEHP) {
|
||||
DebugManagerStateRestore dbgRestorer;
|
||||
DebugManager.flags.ProgramPipeControlPriorToNonPipelinedStateCommand.set(true);
|
||||
|
@ -8,7 +8,9 @@
|
||||
#include "shared/source/helpers/ray_tracing_helper.h"
|
||||
#include "shared/test/common/cmd_parse/hw_parse.h"
|
||||
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
||||
#include "shared/test/common/helpers/engine_descriptor_helper.h"
|
||||
#include "shared/test/common/mocks/mock_csr.h"
|
||||
#include "shared/test/common/mocks/mock_os_context.h"
|
||||
#include "shared/test/common/test_macros/test.h"
|
||||
|
||||
#include "opencl/test/unit_test/fixtures/cl_device_fixture.h"
|
||||
@ -60,9 +62,9 @@ HWTEST2_F(CommandStreamReceiverHwTestDg2AndLater, givenGen12AndLaterWhenRayTraci
|
||||
EXPECT_TRUE(commandStreamReceiver.isPerDssBackedBufferSent);
|
||||
}
|
||||
|
||||
typedef UltCommandStreamReceiverTest CommandStreamReceiverFlushTasDg2AndLaterTests;
|
||||
typedef UltCommandStreamReceiverTest CommandStreamReceiverFlushTaskDg2AndLaterTests;
|
||||
|
||||
HWTEST2_F(CommandStreamReceiverFlushTasDg2AndLaterTests, givenProgramPipeControlPriorToNonPipelinedStateCommandWhenPerDssBackedBufferThenThereIsPipeControlPriorToIt, MatcherIsRTCapable) {
|
||||
HWTEST2_F(CommandStreamReceiverFlushTaskDg2AndLaterTests, givenProgramPipeControlPriorToNonPipelinedStateCommandWhenPerDssBackedBufferThenThereIsPipeControlPriorToIt, MatcherIsRTCapable) {
|
||||
DebugManagerStateRestore restore;
|
||||
DebugManager.flags.ProgramPipeControlPriorToNonPipelinedStateCommand.set(true);
|
||||
|
||||
@ -139,6 +141,37 @@ HWTEST2_F(CommandStreamReceiverFlushTasDg2AndLaterTests, givenProgramPipeControl
|
||||
EXPECT_EQ(cmdSizeForAllCommandsWithoutPCand3dState + expectedCmdSize, cmdSizeForAllCommands);
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandStreamReceiverFlushTaskDg2AndLaterTests, givenSBACommandToProgramOnSingleCCSSetupThenThereIsPipeControlPriorToIt, isXeHpcOrXeHpgCore) {
|
||||
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
hardwareInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 1;
|
||||
|
||||
auto mockDevice = std::unique_ptr<MockDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(&hardwareInfo, 0u));
|
||||
auto &commandStreamReceiver = mockDevice->getUltCommandStreamReceiver<FamilyType>();
|
||||
|
||||
MockOsContext ccsOsContext(0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}));
|
||||
commandStreamReceiver.setupContext(ccsOsContext);
|
||||
|
||||
configureCSRtoNonDirtyState<FamilyType>(false);
|
||||
flushTask(commandStreamReceiver);
|
||||
parseCommands<FamilyType>(commandStreamReceiver.getCS(0));
|
||||
|
||||
auto stateBaseAddressItor = find<STATE_BASE_ADDRESS *>(cmdList.begin(), cmdList.end());
|
||||
auto pipeControlItor = find<typename FamilyType::PIPE_CONTROL *>(cmdList.begin(), stateBaseAddressItor);
|
||||
EXPECT_NE(stateBaseAddressItor, pipeControlItor);
|
||||
|
||||
auto pipeControlCmd = reinterpret_cast<typename FamilyType::PIPE_CONTROL *>(*pipeControlItor);
|
||||
EXPECT_TRUE(UnitTestHelper<FamilyType>::getPipeControlHdcPipelineFlush(*pipeControlCmd));
|
||||
EXPECT_TRUE(pipeControlCmd->getUnTypedDataPortCacheFlush());
|
||||
|
||||
EXPECT_FALSE(pipeControlCmd->getAmfsFlushEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getInstructionCacheInvalidateEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getTextureCacheInvalidationEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getConstantCacheInvalidationEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getStateCacheInvalidationEnable());
|
||||
}
|
||||
|
||||
HWTEST2_F(CommandStreamReceiverHwTestDg2AndLater, givenGen12AndLaterWhenRayTracingEnabledButAlreadySentThenCommandIsNotAddedToBatchBuffer, MatcherIsRTCapable) {
|
||||
using _3DSTATE_BTD = typename FamilyType::_3DSTATE_BTD;
|
||||
MockCsrHw<FamilyType> commandStreamReceiver(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield());
|
||||
|
Reference in New Issue
Block a user