From 96a7f633710db75e32d0c49006008d84c7633efe Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Wed, 27 Sep 2023 11:04:36 +0000 Subject: [PATCH] feature: allow waiting for immediate in-order event from Regular CmdList Related-To: NEO-7966 Signed-off-by: Dunajski, Bartosz --- level_zero/core/source/cmdlist/cmdlist_hw.inl | 1 - .../test_cmdlist_append_launch_kernel_3.cpp | 39 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index 88d250b7a3..4359ab24a1 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -2378,7 +2378,6 @@ ze_result_t CommandListCoreFamily::appendWaitOnEvents(uint32_t nu } if (event->isInOrderExecEvent()) { - UNRECOVERABLE_IF(this->cmdListType != TYPE_IMMEDIATE); if (!event->getInOrderExecDataAllocation()) { return ZE_RESULT_ERROR_INVALID_ARGUMENT; // in-order event not signaled yet } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_3.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_3.cpp index d980136aa7..a870ff0dea 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_3.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_3.cpp @@ -2014,6 +2014,45 @@ HWTEST2_F(InOrderCmdListTests, givenInOrderRegularCmdListWhenProgrammingNonKerne } } +HWTEST2_F(InOrderCmdListTests, givenImmediateEventWhenWaitingFromRegularCmdListThenDontPatch, IsAtLeastSkl) { + using WALKER_TYPE = typename FamilyType::WALKER_TYPE; + using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT; + + auto regularCmdList = createRegularCmdList(false); + auto immCmdList = createImmCmdList(); + + auto cmdStream = regularCmdList->getCmdContainer().getCommandStream(); + auto offset = cmdStream->getUsed(); + + auto eventPool = createEvents(1, false); + auto eventHandle = events[0]->toHandle(); + + immCmdList->appendLaunchKernel(kernel->toHandle(), &groupCount, events[0]->toHandle(), 0, nullptr, launchParams, false); + + regularCmdList->appendLaunchKernel(kernel->toHandle(), &groupCount, nullptr, 1, &eventHandle, launchParams, false); + + ASSERT_EQ(1u, regularCmdList->inOrderPatchCmds.size()); + + if (NonPostSyncWalkerMatcher::isMatched()) { + EXPECT_EQ(InOrderPatchCommandTypes::CmdType::Sdi, regularCmdList->inOrderPatchCmds[0].cmdType); + } else { + EXPECT_EQ(InOrderPatchCommandTypes::CmdType::Walker, regularCmdList->inOrderPatchCmds[0].cmdType); + } + + GenCmdList cmdList; + ASSERT_TRUE(FamilyType::PARSE::parseCommandBuffer(cmdList, ptrOffset(cmdStream->getCpuBase(), offset), (cmdStream->getUsed() - offset))); + + auto semaphoreItor = find(cmdList.begin(), cmdList.end()); + ASSERT_NE(cmdList.end(), semaphoreItor); + auto semaphoreCmd = genCmdCast(*semaphoreItor); + ASSERT_NE(nullptr, semaphoreCmd); + + EXPECT_EQ(immCmdList->inOrderDependencyCounterAllocation->getGpuAddress(), semaphoreCmd->getSemaphoreGraphicsAddress()); + + auto walkerItor = find(semaphoreItor, cmdList.end()); + EXPECT_NE(cmdList.end(), walkerItor); +} + HWTEST2_F(InOrderCmdListTests, givenInOrderModeWhenProgrammingKernelSplitThenDontSignalFromWalker, IsAtLeastXeHpCore) { using COMPUTE_WALKER = typename FamilyType::COMPUTE_WALKER; using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA;