mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
L0 Debug - Fix imm cmdlist mode on windows
Single Address Space SBA programming was using incorrect BB level and not loading GPR15 Related-to: NEO-7517 Signed-off-by: Yates, Brandon <brandon.yates@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
5da472e84f
commit
4bd5765a06
@@ -15,7 +15,7 @@ class MockDebugger : public Debugger {
|
||||
public:
|
||||
MockDebugger() = default;
|
||||
~MockDebugger() override = default;
|
||||
void captureStateBaseAddress(NEO::LinearStream &cmdStream, SbaAddresses sba) override{};
|
||||
void captureStateBaseAddress(NEO::LinearStream &cmdStream, SbaAddresses sba, bool useFirstLevelBB) override{};
|
||||
size_t getSbaTrackingCommandsSize(size_t trackedAddressCount) override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ class MockDebuggerL0 : public NEO::DebuggerL0 {
|
||||
isLegacyMode = false;
|
||||
}
|
||||
|
||||
void captureStateBaseAddress(NEO::LinearStream &cmdStream, SbaAddresses sba) override{};
|
||||
void captureStateBaseAddress(NEO::LinearStream &cmdStream, SbaAddresses sba, bool useFirstLevelBB) override{};
|
||||
size_t getSbaTrackingCommandsSize(size_t trackedAddressCount) override {
|
||||
return 0;
|
||||
}
|
||||
@@ -45,9 +45,9 @@ class MockDebuggerL0Hw : public NEO::DebuggerL0Hw<GfxFamily> {
|
||||
return new MockDebuggerL0Hw<GfxFamily>(device);
|
||||
}
|
||||
|
||||
void captureStateBaseAddress(NEO::LinearStream &cmdStream, NEO::Debugger::SbaAddresses sba) override {
|
||||
void captureStateBaseAddress(NEO::LinearStream &cmdStream, NEO::Debugger::SbaAddresses sba, bool useFirstLevelBB) override {
|
||||
captureStateBaseAddressCount++;
|
||||
NEO::DebuggerL0Hw<GfxFamily>::captureStateBaseAddress(cmdStream, sba);
|
||||
NEO::DebuggerL0Hw<GfxFamily>::captureStateBaseAddress(cmdStream, sba, useFirstLevelBB);
|
||||
}
|
||||
|
||||
size_t getSbaTrackingCommandsSize(size_t trackedAddressCount) override {
|
||||
|
||||
@@ -314,7 +314,7 @@ TEST(Debugger, givenNonLegacyDebuggerWhenInitializingDeviceCapsThenUnrecoverable
|
||||
isLegacyMode = false;
|
||||
}
|
||||
|
||||
void captureStateBaseAddress(NEO::LinearStream &cmdStream, SbaAddresses sba) override{};
|
||||
void captureStateBaseAddress(NEO::LinearStream &cmdStream, SbaAddresses sba, bool useFirstLevelBB) override{};
|
||||
size_t getSbaTrackingCommandsSize(size_t trackedAddressCount) override {
|
||||
return 0;
|
||||
}
|
||||
@@ -361,7 +361,7 @@ HWTEST_F(PerContextAddressSpaceL0DebuggerTest, givenCanonizedGpuVasWhenProgrammi
|
||||
sbaAddresses.DynamicStateBaseAddress = dsba;
|
||||
sbaAddresses.BindlessSurfaceStateBaseAddress = ssba;
|
||||
|
||||
debugger->captureStateBaseAddress(cmdStream, sbaAddresses);
|
||||
debugger->captureStateBaseAddress(cmdStream, sbaAddresses, false);
|
||||
|
||||
GenCmdList cmdList;
|
||||
ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(cmdList, cmdStream.getCpuBase(), cmdStream.getUsed()));
|
||||
@@ -450,7 +450,7 @@ HWTEST_F(PerContextAddressSpaceL0DebuggerTest, givenNonZeroGpuVasWhenProgramming
|
||||
sbaAddresses.DynamicStateBaseAddress = dsba;
|
||||
sbaAddresses.BindlessSurfaceStateBaseAddress = ssba;
|
||||
|
||||
debugger->captureStateBaseAddress(cmdStream, sbaAddresses);
|
||||
debugger->captureStateBaseAddress(cmdStream, sbaAddresses, false);
|
||||
|
||||
GenCmdList cmdList;
|
||||
ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(cmdList, cmdStream.getCpuBase(), cmdStream.getUsed()));
|
||||
@@ -623,7 +623,7 @@ HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenZeroGpuVasWhenProgrammingSbaTr
|
||||
sbaAddresses.GeneralStateBaseAddress = gsba;
|
||||
sbaAddresses.SurfaceStateBaseAddress = ssba;
|
||||
|
||||
debugger->captureStateBaseAddress(cmdStream, sbaAddresses);
|
||||
debugger->captureStateBaseAddress(cmdStream, sbaAddresses, false);
|
||||
|
||||
EXPECT_EQ(0u, cmdStream.getUsed());
|
||||
}
|
||||
@@ -639,13 +639,13 @@ HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenNotChangedSurfaceStateWhenCapt
|
||||
NEO::Debugger::SbaAddresses sba = {};
|
||||
sba.SurfaceStateBaseAddress = 0x123456000;
|
||||
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba);
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba, false);
|
||||
auto sizeUsed = container.getCommandStream()->getUsed();
|
||||
|
||||
EXPECT_NE(0u, sizeUsed);
|
||||
sba.SurfaceStateBaseAddress = 0;
|
||||
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba);
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba, false);
|
||||
auto sizeUsed2 = container.getCommandStream()->getUsed();
|
||||
|
||||
EXPECT_EQ(sizeUsed, sizeUsed2);
|
||||
@@ -662,7 +662,7 @@ HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenChangedBaseAddressesWhenCaptur
|
||||
NEO::Debugger::SbaAddresses sba = {};
|
||||
sba.SurfaceStateBaseAddress = 0x123456000;
|
||||
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba);
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba, false);
|
||||
auto sizeUsed = container.getCommandStream()->getUsed();
|
||||
|
||||
EXPECT_NE(0u, sizeUsed);
|
||||
@@ -675,7 +675,7 @@ HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenChangedBaseAddressesWhenCaptur
|
||||
NEO::Debugger::SbaAddresses sba = {};
|
||||
sba.GeneralStateBaseAddress = 0x123456000;
|
||||
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba);
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba, false);
|
||||
auto sizeUsed = container.getCommandStream()->getUsed();
|
||||
|
||||
EXPECT_NE(0u, sizeUsed);
|
||||
@@ -688,7 +688,7 @@ HWTEST2_P(L0DebuggerSimpleParameterizedTest, givenChangedBaseAddressesWhenCaptur
|
||||
NEO::Debugger::SbaAddresses sba = {};
|
||||
sba.BindlessSurfaceStateBaseAddress = 0x123456000;
|
||||
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba);
|
||||
debugger->captureStateBaseAddress(*container.getCommandStream(), sba, false);
|
||||
auto sizeUsed = container.getCommandStream()->getUsed();
|
||||
|
||||
EXPECT_NE(0u, sizeUsed);
|
||||
|
||||
@@ -28,6 +28,17 @@ struct SingleAddressSpaceFixture : public Test<NEO::DeviceFixture> {
|
||||
DebugManagerStateRestore restorer;
|
||||
};
|
||||
|
||||
struct L0DebuggerBBlevelParameterizedTest : ::testing::TestWithParam<bool>, public NEO::DeviceFixture {
|
||||
void SetUp() override {
|
||||
NEO::DebugManager.flags.DebuggerForceSbaTrackingMode.set(1);
|
||||
DeviceFixture::setUp();
|
||||
}
|
||||
void TearDown() override {
|
||||
DeviceFixture::tearDown();
|
||||
}
|
||||
DebugManagerStateRestore restorer;
|
||||
};
|
||||
|
||||
HWTEST_F(SingleAddressSpaceFixture, givenDebugFlagForceSbaTrackingModeSetWhenDebuggerIsCreatedThenItHasCorrectSingleAddressSpaceValue) {
|
||||
DebugManagerStateRestore restorer;
|
||||
NEO::DebugManager.flags.DebuggerForceSbaTrackingMode.set(1);
|
||||
@@ -86,13 +97,13 @@ HWTEST2_F(SingleAddressSpaceFixture, WhenProgrammingSbaTrackingCommandsForSingle
|
||||
sbaAddresses.DynamicStateBaseAddress = dsba;
|
||||
sbaAddresses.BindlessSurfaceStateBaseAddress = ssba;
|
||||
|
||||
EXPECT_THROW(debugger->programSbaTrackingCommandsSingleAddressSpace(cmdStream, sbaAddresses), std::exception);
|
||||
EXPECT_THROW(debugger->programSbaTrackingCommandsSingleAddressSpace(cmdStream, sbaAddresses, false), std::exception);
|
||||
|
||||
EXPECT_EQ(0u, cmdStream.getUsed());
|
||||
EXPECT_THROW(debugger->getSbaTrackingCommandsSize(6), std::exception);
|
||||
}
|
||||
|
||||
HWTEST2_F(SingleAddressSpaceFixture, GivenNonZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenCorrectSequenceOfCommandsAreAddedToStream, IsAtLeastGen12lp) {
|
||||
HWTEST2_P(L0DebuggerBBlevelParameterizedTest, GivenNonZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenCorrectSequenceOfCommandsAreAddedToStream, IsAtLeastGen12lp) {
|
||||
auto debugger = std::make_unique<MockDebuggerL0Hw<FamilyType>>(pDevice);
|
||||
using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;
|
||||
using MI_ARB_CHECK = typename FamilyType::MI_ARB_CHECK;
|
||||
@@ -109,7 +120,7 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenNonZeroSbaAddressesWhenProgrammingSbaT
|
||||
pDevice->getDeviceBitfield()};
|
||||
auto streamAllocation = pDevice->getMemoryManager()->allocateGraphicsMemoryWithProperties(commandBufferProperties);
|
||||
ASSERT_NE(nullptr, streamAllocation);
|
||||
|
||||
auto expectedBbLevel = GetParam() ? MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER_FIRST_LEVEL_BATCH : MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER_SECOND_LEVEL_BATCH;
|
||||
NEO::LinearStream cmdStream;
|
||||
cmdStream.replaceGraphicsAllocation(streamAllocation);
|
||||
cmdStream.replaceBuffer(streamAllocation->getUnderlyingBuffer(), streamAllocation->getUnderlyingBufferSize());
|
||||
@@ -128,7 +139,7 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenNonZeroSbaAddressesWhenProgrammingSbaT
|
||||
sbaAddresses.DynamicStateBaseAddress = dsba;
|
||||
sbaAddresses.BindlessSurfaceStateBaseAddress = ssba;
|
||||
|
||||
debugger->programSbaTrackingCommandsSingleAddressSpace(cmdStream, sbaAddresses);
|
||||
debugger->programSbaTrackingCommandsSingleAddressSpace(cmdStream, sbaAddresses, GetParam());
|
||||
|
||||
GenCmdList cmdList;
|
||||
ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(cmdList, cmdStream.getCpuBase(), cmdStream.getUsed()));
|
||||
@@ -156,6 +167,8 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenNonZeroSbaAddressesWhenProgrammingSbaT
|
||||
|
||||
itor = find<MI_BATCH_BUFFER_START *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
auto bbLevel = genCmdCast<MI_BATCH_BUFFER_START *>(*itor)->getSecondLevelBatchBuffer();
|
||||
ASSERT_EQ(bbLevel, expectedBbLevel);
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
itor = find<MI_LOAD_REGISTER_IMM *>(itor, cmdList.end());
|
||||
@@ -188,6 +201,8 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenNonZeroSbaAddressesWhenProgrammingSbaT
|
||||
|
||||
itor = find<MI_BATCH_BUFFER_START *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
bbLevel = genCmdCast<MI_BATCH_BUFFER_START *>(*itor)->getSecondLevelBatchBuffer();
|
||||
ASSERT_EQ(bbLevel, expectedBbLevel);
|
||||
|
||||
itor = find<MI_STORE_DATA_IMM *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
@@ -195,6 +210,8 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenNonZeroSbaAddressesWhenProgrammingSbaT
|
||||
|
||||
itor = find<MI_BATCH_BUFFER_START *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
bbLevel = genCmdCast<MI_BATCH_BUFFER_START *>(*itor)->getSecondLevelBatchBuffer();
|
||||
ASSERT_EQ(bbLevel, expectedBbLevel);
|
||||
|
||||
itor = find<MI_ARB_CHECK *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
@@ -206,7 +223,7 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenNonZeroSbaAddressesWhenProgrammingSbaT
|
||||
pDevice->getMemoryManager()->freeGraphicsMemory(streamAllocation);
|
||||
}
|
||||
|
||||
HWTEST2_F(SingleAddressSpaceFixture, GivenOneNonZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenONlyPartOfCommandsAreAddedToStream, IsAtLeastGen12lp) {
|
||||
HWTEST2_P(L0DebuggerBBlevelParameterizedTest, GivenOneNonZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenONlyPartOfCommandsAreAddedToStream, IsAtLeastGen12lp) {
|
||||
auto debugger = std::make_unique<MockDebuggerL0Hw<FamilyType>>(pDevice);
|
||||
using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;
|
||||
using MI_ARB_CHECK = typename FamilyType::MI_ARB_CHECK;
|
||||
@@ -232,9 +249,9 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenOneNonZeroSbaAddressesWhenProgrammingS
|
||||
|
||||
NEO::Debugger::SbaAddresses sbaAddresses = {0};
|
||||
sbaAddresses.SurfaceStateBaseAddress = ssba;
|
||||
|
||||
auto expectedBbLevel = GetParam() ? MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER_FIRST_LEVEL_BATCH : MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER_SECOND_LEVEL_BATCH;
|
||||
debugger->singleAddressSpaceSbaTracking = true;
|
||||
debugger->captureStateBaseAddress(cmdStream, sbaAddresses);
|
||||
debugger->captureStateBaseAddress(cmdStream, sbaAddresses, GetParam());
|
||||
|
||||
GenCmdList cmdList;
|
||||
ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(cmdList, cmdStream.getCpuBase(), cmdStream.getUsed()));
|
||||
@@ -259,6 +276,8 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenOneNonZeroSbaAddressesWhenProgrammingS
|
||||
|
||||
itor = find<MI_BATCH_BUFFER_START *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
auto bbLevel = genCmdCast<MI_BATCH_BUFFER_START *>(*itor)->getSecondLevelBatchBuffer();
|
||||
ASSERT_EQ(bbLevel, expectedBbLevel);
|
||||
|
||||
itor = find<MI_LOAD_REGISTER_IMM *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
@@ -294,12 +313,16 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenOneNonZeroSbaAddressesWhenProgrammingS
|
||||
|
||||
itor = find<MI_BATCH_BUFFER_START *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
bbLevel = genCmdCast<MI_BATCH_BUFFER_START *>(*itor)->getSecondLevelBatchBuffer();
|
||||
ASSERT_EQ(bbLevel, expectedBbLevel);
|
||||
|
||||
itor = find<MI_STORE_DATA_IMM *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
|
||||
itor = find<MI_BATCH_BUFFER_START *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
bbLevel = genCmdCast<MI_BATCH_BUFFER_START *>(*itor)->getSecondLevelBatchBuffer();
|
||||
ASSERT_EQ(bbLevel, expectedBbLevel);
|
||||
|
||||
itor = find<MI_ARB_CHECK *>(itor, cmdList.end());
|
||||
ASSERT_NE(cmdList.end(), itor);
|
||||
@@ -311,6 +334,8 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenOneNonZeroSbaAddressesWhenProgrammingS
|
||||
pDevice->getMemoryManager()->freeGraphicsMemory(streamAllocation);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(BBLevelForSbaTracking, L0DebuggerBBlevelParameterizedTest, ::testing::Values(false, true));
|
||||
|
||||
HWTEST2_F(SingleAddressSpaceFixture, GivenAllZeroSbaAddressesWhenProgrammingSbaTrackingCommandsForSingleAddressSpaceThenNoCommandsAreAddedToStream, IsAtLeastGen12lp) {
|
||||
auto debugger = std::make_unique<MockDebuggerL0Hw<FamilyType>>(pDevice);
|
||||
AllocationProperties commandBufferProperties = {pDevice->getRootDeviceIndex(),
|
||||
@@ -327,7 +352,7 @@ HWTEST2_F(SingleAddressSpaceFixture, GivenAllZeroSbaAddressesWhenProgrammingSbaT
|
||||
cmdStream.replaceBuffer(streamAllocation->getUnderlyingBuffer(), streamAllocation->getUnderlyingBufferSize());
|
||||
NEO::Debugger::SbaAddresses sbaAddresses = {0};
|
||||
|
||||
debugger->programSbaTrackingCommandsSingleAddressSpace(cmdStream, sbaAddresses);
|
||||
debugger->programSbaTrackingCommandsSingleAddressSpace(cmdStream, sbaAddresses, false);
|
||||
size_t sizeExpected = 0;
|
||||
EXPECT_EQ(sizeExpected, cmdStream.getUsed());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user