From 06457b942ecae642910eaa8a5bac0f12eee37dfe Mon Sep 17 00:00:00 2001 From: Kamil Kopryk Date: Fri, 26 Jul 2024 14:45:16 +0000 Subject: [PATCH] test: use walkerVariant in ults 5/n Related-To: NEO-10641 Signed-off-by: Kamil Kopryk --- ...test_cmdlist_fill_event_xehp_and_later.cpp | 160 +++++++++++------- .../cmdlist/test_cmdlist_xe2_and_later.cpp | 13 +- .../cmdlist/test_cmdlist_xehp_and_later.cpp | 67 +++++--- 3 files changed, 152 insertions(+), 88 deletions(-) diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_fill_event_xehp_and_later.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_fill_event_xehp_and_later.cpp index ef09593a6b..d9d2d4bfbd 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_fill_event_xehp_and_later.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_fill_event_xehp_and_later.cpp @@ -86,9 +86,7 @@ struct AppendFillMultiPacketEventFixture : public AppendFillFixture { template void testSingleTileAppendMemoryFillManyImmediateKernels(FillTestInput &input, TestExpectedValues &arg) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; - using OPERATION = typename POSTSYNC_DATA::OPERATION; + using WalkerVariant = typename FamilyType::WalkerVariant; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; ze_event_pool_desc_t eventPoolDesc = {}; @@ -129,16 +127,23 @@ void testSingleTileAppendMemoryFillManyImmediateKernels(FillTestInput &input, Te auto itorWalkers = NEO::UnitTestHelper::findAllWalkerTypeCmds(cmdList.begin(), cmdList.end()); ASSERT_EQ(2u, itorWalkers.size()); - auto firstWalker = itorWalkers[0]; - auto secondWalker = itorWalkers[1]; - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(firstKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + uint64_t expectedKernelEventAddress[]{firstKernelEventAddress, secondKernelEventAddress}; - walkerCmd = genCmdCast(*secondWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(secondKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + for (auto i = 0u; i < itorWalkers.size(); i++) { + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*itorWalkers[i]); + + std::visit([expectedKernelEventAddress = expectedKernelEventAddress, &arg, i](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), postSync.getOperation()); + EXPECT_EQ(expectedKernelEventAddress[i], postSync.getDestinationAddress()); + }, + walkerVariant); + } if (event->isUsingContextEndOffset()) { gpuBaseAddress += event->getContextEndOffset(); @@ -151,7 +156,7 @@ void testSingleTileAppendMemoryFillManyImmediateKernels(FillTestInput &input, Te storeDataImmAddress += input.storeDataImmOffset; } - auto itorStoreDataImm = findAll(firstWalker, cmdList.end()); + auto itorStoreDataImm = findAll(itorWalkers[0], cmdList.end()); ASSERT_EQ(expectedPostSyncStoreDataImm, itorStoreDataImm.size()); for (size_t i = 0; i < expectedPostSyncStoreDataImm; i++) { @@ -166,9 +171,7 @@ void testSingleTileAppendMemoryFillManyImmediateKernels(FillTestInput &input, Te template void testSingleTileAppendMemoryFillManyKernels(FillTestInput &input, TestExpectedValues &arg) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; - using OPERATION = typename POSTSYNC_DATA::OPERATION; + using WalkerVariant = typename FamilyType::WalkerVariant; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; ze_event_pool_desc_t eventPoolDesc = {}; @@ -210,15 +213,23 @@ void testSingleTileAppendMemoryFillManyKernels(FillTestInput &input, TestExpecte auto itorWalkers = NEO::UnitTestHelper::findAllWalkerTypeCmds(cmdList.begin(), cmdList.end()); ASSERT_EQ(2u, itorWalkers.size()); auto firstWalker = itorWalkers[0]; - auto secondWalker = itorWalkers[1]; - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(firstKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + uint64_t expectedKernelEventAddress[]{firstKernelEventAddress, secondKernelEventAddress}; - walkerCmd = genCmdCast(*secondWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(secondKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + for (auto i = 0u; i < itorWalkers.size(); i++) { + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*itorWalkers[i]); + + std::visit([expectedKernelEventAddress = expectedKernelEventAddress, &arg, i](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), postSync.getOperation()); + EXPECT_EQ(expectedKernelEventAddress[i], postSync.getDestinationAddress()); + }, + walkerVariant); + } if (event->isUsingContextEndOffset()) { gpuBaseAddress += event->getContextEndOffset(); @@ -246,9 +257,7 @@ void testSingleTileAppendMemoryFillManyKernels(FillTestInput &input, TestExpecte template void testSingleTileAppendMemoryFillManyKernelsAndL3Flush(FillTestInput &input, TestExpectedValues &arg) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; - using OPERATION = typename POSTSYNC_DATA::OPERATION; + using WalkerVariant = typename FamilyType::WalkerVariant; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; ze_event_pool_desc_t eventPoolDesc = {}; @@ -291,15 +300,23 @@ void testSingleTileAppendMemoryFillManyKernelsAndL3Flush(FillTestInput &input, T auto itorWalkers = NEO::UnitTestHelper::findAllWalkerTypeCmds(cmdList.begin(), cmdList.end()); ASSERT_EQ(2u, itorWalkers.size()); auto firstWalker = itorWalkers[0]; - auto secondWalker = itorWalkers[1]; - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(firstKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + uint64_t expectedKernelEventAddress[]{firstKernelEventAddress, secondKernelEventAddress}; - walkerCmd = genCmdCast(*secondWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(secondKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + for (auto i = 0u; i < itorWalkers.size(); i++) { + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*itorWalkers[i]); + + std::visit([expectedKernelEventAddress = expectedKernelEventAddress, &arg, i](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), postSync.getOperation()); + EXPECT_EQ(expectedKernelEventAddress[i], postSync.getDestinationAddress()); + }, + walkerVariant); + } if (event->isUsingContextEndOffset()) { gpuBaseAddress += event->getContextEndOffset(); @@ -327,9 +344,7 @@ void testSingleTileAppendMemoryFillManyKernelsAndL3Flush(FillTestInput &input, T template void testSingleTileAppendMemoryFillSingleKernel(FillTestInput &input, TestExpectedValues &arg) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; - using OPERATION = typename POSTSYNC_DATA::OPERATION; + using WalkerVariant = typename FamilyType::WalkerVariant; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; ze_event_pool_desc_t eventPoolDesc = {}; @@ -373,9 +388,17 @@ void testSingleTileAppendMemoryFillSingleKernel(FillTestInput &input, TestExpect ASSERT_EQ(1u, itorWalkers.size()); auto firstWalker = itorWalkers[0]; - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(firstKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*firstWalker); + std::visit([&arg, firstKernelEventAddress](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), postSync.getOperation()); + EXPECT_EQ(firstKernelEventAddress, postSync.getDestinationAddress()); + }, + walkerVariant); if (event->isUsingContextEndOffset()) { gpuBaseAddress += event->getContextEndOffset(); @@ -403,9 +426,7 @@ void testSingleTileAppendMemoryFillSingleKernel(FillTestInput &input, TestExpect template void testSingleTileAppendMemoryFillSingleKernelAndL3Flush(FillTestInput &input, TestExpectedValues &arg) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; - using OPERATION = typename POSTSYNC_DATA::OPERATION; + using WalkerVariant = typename FamilyType::WalkerVariant; using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL; using POST_SYNC_OPERATION = typename PIPE_CONTROL::POST_SYNC_OPERATION; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; @@ -452,9 +473,17 @@ void testSingleTileAppendMemoryFillSingleKernelAndL3Flush(FillTestInput &input, ASSERT_EQ(1u, itorWalkers.size()); auto firstWalker = itorWalkers[0]; - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(firstKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*firstWalker); + std::visit([&arg, firstKernelEventAddress](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), postSync.getOperation()); + EXPECT_EQ(firstKernelEventAddress, postSync.getDestinationAddress()); + }, + walkerVariant); if (event->isUsingContextEndOffset()) { gpuBaseAddress += event->getContextEndOffset(); @@ -508,11 +537,9 @@ void testSingleTileAppendMemoryFillSingleKernelAndL3Flush(FillTestInput &input, template void testMultiTileAppendMemoryFillManyKernels(FillTestInput &input, TestExpectedValues &arg) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; + using WalkerVariant = typename FamilyType::WalkerVariant; using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL; using POST_SYNC_OPERATION = typename PIPE_CONTROL::POST_SYNC_OPERATION; - using OPERATION = typename POSTSYNC_DATA::OPERATION; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; ze_event_pool_desc_t eventPoolDesc = {}; @@ -565,13 +592,22 @@ void testMultiTileAppendMemoryFillManyKernels(FillTestInput &input, TestExpected auto firstWalker = itorWalkers[0]; auto secondWalker = itorWalkers[1]; - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(firstKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + uint64_t expectedKernelEventAddress[]{firstKernelEventAddress, secondKernelEventAddress}; - walkerCmd = genCmdCast(*secondWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(secondKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + for (auto i = 0u; i < itorWalkers.size(); i++) { + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*itorWalkers[i]); + + std::visit([expectedKernelEventAddress = expectedKernelEventAddress, &arg, i](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), postSync.getOperation()); + EXPECT_EQ(expectedKernelEventAddress[i], postSync.getDestinationAddress()); + }, + walkerVariant); + } if (event->isUsingContextEndOffset()) { gpuBaseAddress += event->getContextEndOffset(); @@ -623,9 +659,7 @@ void testMultiTileAppendMemoryFillManyKernels(FillTestInput &input, TestExpected template void testMultiTileAppendMemoryFillSingleKernelAndL3Flush(FillTestInput &input, TestExpectedValues &arg) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; - using OPERATION = typename POSTSYNC_DATA::OPERATION; + using WalkerVariant = typename FamilyType::WalkerVariant; using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL; using POST_SYNC_OPERATION = typename PIPE_CONTROL::POST_SYNC_OPERATION; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; @@ -672,9 +706,17 @@ void testMultiTileAppendMemoryFillSingleKernelAndL3Flush(FillTestInput &input, T ASSERT_EQ(1u, itorWalkers.size()); auto firstWalker = itorWalkers[0]; - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(firstKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*firstWalker); + std::visit([&arg, firstKernelEventAddress](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), postSync.getOperation()); + EXPECT_EQ(firstKernelEventAddress, postSync.getDestinationAddress()); + }, + walkerVariant); constexpr uint32_t kernels = 1; uint32_t sdiCount = NEO::ImplicitScalingDispatch::getPipeControlStallRequired() ? 3 : 0; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xe2_and_later.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xe2_and_later.cpp index 5ecb4f1012..0ffe5fb497 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xe2_and_later.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xe2_and_later.cpp @@ -391,7 +391,7 @@ using InOrderCmdListTests = InOrderCmdListFixture; HWTEST2_F(InOrderCmdListTests, givenDebugFlagWhenPostSyncWithInOrderExecInfoIsCreateThenL1IsNotFlushed, Platforms) { DebugManagerStateRestore restorer; NEO::debugManager.flags.ForcePostSyncL1Flush.set(0); - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; + using WalkerVariant = typename FamilyType::WalkerVariant; using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; auto immCmdList = createImmCmdList(); @@ -405,11 +405,14 @@ HWTEST2_F(InOrderCmdListTests, givenDebugFlagWhenPostSyncWithInOrderExecInfoIsCr auto walkerItor = NEO::UnitTestHelper::findWalkerTypeCmd(cmdList.begin(), cmdList.end()); ASSERT_NE(cmdList.end(), walkerItor); - auto walkerCmd = genCmdCast(*walkerItor); - auto &postSync = walkerCmd->getPostSync(); + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*walkerItor); + std::visit([](auto &&walker) { + auto &postSync = walker->getPostSync(); - EXPECT_FALSE(postSync.getDataportPipelineFlush()); - EXPECT_FALSE(postSync.getDataportSubsliceCacheFlush()); + EXPECT_FALSE(postSync.getDataportPipelineFlush()); + EXPECT_FALSE(postSync.getDataportSubsliceCacheFlush()); + }, + walkerVariant); } } // namespace ult diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xehp_and_later.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xehp_and_later.cpp index 289ddf28be..389e348a1f 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xehp_and_later.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_xehp_and_later.cpp @@ -350,11 +350,9 @@ struct CommandListAppendLaunchKernelCompactL3FlushEventFixture : public ModuleFi template void testAppendLaunchKernelAndL3Flush(AppendKernelTestInput &input, TestExpectedValues &arg) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; + using WalkerVariant = typename FamilyType::WalkerVariant; using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL; using POST_SYNC_OPERATION = typename FamilyType::PIPE_CONTROL::POST_SYNC_OPERATION; - using OPERATION = typename POSTSYNC_DATA::OPERATION; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; Mock<::L0::KernelImp> kernel; @@ -391,13 +389,21 @@ struct CommandListAppendLaunchKernelCompactL3FlushEventFixture : public ModuleFi cmdList, ptrOffset(commandList->commandContainer.getCommandStream()->getCpuBase(), 0), commandList->commandContainer.getCommandStream()->getUsed())); - auto itorWalkers = findAll(cmdList.begin(), cmdList.end()); + auto itorWalkers = NEO::UnitTestHelper::findAllWalkerTypeCmds(cmdList.begin(), cmdList.end()); ASSERT_EQ(1u, itorWalkers.size()); auto firstWalker = itorWalkers[0]; - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); - EXPECT_EQ(firstKernelEventAddress, walkerCmd->getPostSync().getDestinationAddress()); + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*firstWalker); + std::visit([&arg, firstKernelEventAddress](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(arg.expectedWalkerPostSyncOp), postSync.getOperation()); + EXPECT_EQ(firstKernelEventAddress, postSync.getDestinationAddress()); + }, + walkerVariant); uint64_t l3FlushPostSyncAddress = event->getGpuAddress(input.device) + input.packetOffsetMul * event->getSinglePacketSize(); if (input.useFirstEventPacketAddress) { @@ -594,9 +600,7 @@ struct CommandListSignalAllEventPacketFixture : public ModuleFixture { template void testAppendKernel(ze_event_pool_flags_t eventPoolFlags) { using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; - using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA; - using OPERATION = typename POSTSYNC_DATA::OPERATION; + using WalkerVariant = typename FamilyType::WalkerVariant; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; auto commandList = std::make_unique>>(); @@ -631,10 +635,6 @@ struct CommandListSignalAllEventPacketFixture : public ModuleFixture { ptrOffset(cmdStream->getCpuBase(), sizeBefore), (sizeAfter - sizeBefore))); - auto itorWalkers = findAll(cmdList.begin(), cmdList.end()); - ASSERT_EQ(1u, itorWalkers.size()); - auto firstWalker = itorWalkers[0]; - uint32_t expectedWalkerPostSyncOp = 3; if (multiTile == 0 && eventPoolFlags == 0 && !eventPool->isImplicitScalingCapableFlagSet()) { expectedWalkerPostSyncOp = 1; @@ -644,8 +644,20 @@ struct CommandListSignalAllEventPacketFixture : public ModuleFixture { expectedWalkerPostSyncOp = 1; } - auto walkerCmd = genCmdCast(*firstWalker); - EXPECT_EQ(static_cast(expectedWalkerPostSyncOp), walkerCmd->getPostSync().getOperation()); + auto itorWalkers = NEO::UnitTestHelper::findAllWalkerTypeCmds(cmdList.begin(), cmdList.end()); + ASSERT_EQ(1u, itorWalkers.size()); + auto firstWalker = itorWalkers[0]; + + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(*firstWalker); + std::visit([expectedWalkerPostSyncOp](auto &&walker) { + using WalkerType = std::decay_t; + using PostSyncType = typename WalkerType::PostSyncType; + using OPERATION = typename PostSyncType::OPERATION; + auto &postSync = walker->getPostSync(); + + EXPECT_EQ(static_cast(expectedWalkerPostSyncOp), postSync.getOperation()); + }, + walkerVariant); uint32_t extraCleanupStoreDataImm = 0; if (multiTile == 1 && NEO::ImplicitScalingDispatch::getPipeControlStallRequired()) { @@ -2773,7 +2785,7 @@ HWTEST2_F(CommandListAppendLaunchKernel, IsAtLeastXeHpCore) { using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT; using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM; - using DefaultWalkerType = typename FamilyType::DefaultWalkerType; + using WalkerVariant = typename FamilyType::WalkerVariant; Mock<::L0::KernelImp> kernel; auto mockModule = std::unique_ptr(new Mock(device, nullptr)); @@ -2824,7 +2836,7 @@ HWTEST2_F(CommandListAppendLaunchKernel, auto storeDataImmList = findAll(cmdList.begin(), cmdList.end()); ASSERT_EQ(expectedSdi, storeDataImmList.size()); - auto computeWalkerList = findAll(cmdList.begin(), cmdList.end()); + auto computeWalkerList = NEO::UnitTestHelper::findAllWalkerTypeCmds(cmdList.begin(), cmdList.end()); ASSERT_EQ(1u, computeWalkerList.size()); auto semaphoreWaitList = findAll(cmdList.begin(), cmdList.end()); ASSERT_EQ(1u, semaphoreWaitList.size()); @@ -2836,12 +2848,19 @@ HWTEST2_F(CommandListAppendLaunchKernel, EXPECT_EQ(eventCompletionAddress, storeDataImmCmd->getAddress()); EXPECT_EQ(launchParams.outWalker, *computeWalkerList[0]); - auto walkerCmd = genCmdCast(launchParams.outWalker); - ASSERT_NE(nullptr, walkerCmd); - if constexpr (!FamilyType::template isHeaplessMode()) { - auto eventBaseAddress = event->getGpuAddress(device); - EXPECT_EQ(eventBaseAddress, walkerCmd->getPostSync().getDestinationAddress()); - } + ASSERT_NE(nullptr, launchParams.outWalker); + auto eventBaseAddress = event->getGpuAddress(device); + + WalkerVariant walkerVariant = NEO::UnitTestHelper::getWalkerVariant(launchParams.outWalker); + std::visit([eventBaseAddress](auto &&walker) { + using WalkerType = std::decay_t; + + if constexpr (!FamilyType::template isHeaplessMode()) { + auto &postSync = walker->getPostSync(); + EXPECT_EQ(eventBaseAddress, postSync.getDestinationAddress()); + } + }, + walkerVariant); EXPECT_EQ(CommandToPatch::CbEventTimestampPostSyncSemaphoreWait, outCbEventCmds[1].type); EXPECT_EQ(*semaphoreWaitList[0], outCbEventCmds[1].pDestination);