diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl b/level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl index 9746950130..4489d79768 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw_xehp_and_later.inl @@ -335,6 +335,7 @@ ze_result_t CommandListCoreFamily::appendLaunchKernelWithParams(K }; NEO::EncodeDispatchKernel::encodeCommon(commandContainer, dispatchKernelArgs); + launchParams.outWalker = dispatchKernelArgs.outWalkerPtr; if (!this->isFlushTaskSubmissionEnabled) { this->containsStatelessUncachedResource = dispatchKernelArgs.requiresUncachedMocs; diff --git a/level_zero/core/source/cmdlist/cmdlist_launch_params.h b/level_zero/core/source/cmdlist/cmdlist_launch_params.h index ecceb6361f..2d825d81f6 100644 --- a/level_zero/core/source/cmdlist/cmdlist_launch_params.h +++ b/level_zero/core/source/cmdlist/cmdlist_launch_params.h @@ -13,6 +13,7 @@ namespace L0 { struct CmdListKernelLaunchParams { + void *outWalker = nullptr; NEO::RequiredPartitionDim requiredPartitionDim = NEO::RequiredPartitionDim::none; NEO::RequiredDispatchWalkOrder requiredDispatchWalkOrder = NEO::RequiredDispatchWalkOrder::none; uint32_t additionalSizeParam = NEO::additionalKernelLaunchSizeParamNotSet; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_1.cpp index cc4e84a053..edc43b734f 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_append_launch_kernel_1.cpp @@ -1483,5 +1483,30 @@ HWTEST2_F(CommandListAppendLaunchKernelMockModule, EXPECT_NE(kernelAllocationIt, cmdlistResidency.end()); } +HWTEST2_F(CommandListAppendLaunchKernelMockModule, + givenOutWalkerPtrDispatchParamWhenAppendingKernelThenSetPtrToWalkerCmd, + IsAtLeastXeHpCore) { + using DefaultWalkerType = typename FamilyType::DefaultWalkerType; + + ze_group_count_t groupCount{1, 1, 1}; + ze_result_t returnValue; + CmdListKernelLaunchParams launchParams = {}; + returnValue = commandList->appendLaunchKernel(kernel->toHandle(), groupCount, nullptr, 0, nullptr, launchParams, false); + ASSERT_EQ(ZE_RESULT_SUCCESS, returnValue); + auto usedSpaceAfter = commandList->getCmdContainer().getCommandStream()->getUsed(); + + ASSERT_NE(nullptr, launchParams.outWalker); + + GenCmdList cmdList; + ASSERT_TRUE(FamilyType::Parse::parseCommandBuffer( + cmdList, + commandList->getCmdContainer().getCommandStream()->getCpuBase(), + usedSpaceAfter)); + auto itorWalker = find(cmdList.begin(), cmdList.end()); + ASSERT_NE(cmdList.end(), itorWalker); + + EXPECT_EQ(*itorWalker, launchParams.outWalker); +} + } // namespace ult } // namespace L0