diff --git a/level_zero/core/source/cmdlist/cmdlist.h b/level_zero/core/source/cmdlist/cmdlist.h index 30c344b726..db6ce58191 100644 --- a/level_zero/core/source/cmdlist/cmdlist.h +++ b/level_zero/core/source/cmdlist/cmdlist.h @@ -233,6 +233,8 @@ struct CommandList : _ze_command_list_handle_t { } void setAdditionalDispatchKernelArgsFromLaunchParams(NEO::EncodeDispatchKernelArgs &dispatchKernelArgs, const CmdListKernelLaunchParams &launchParams) const; + void setAdditionalDispatchKernelArgsFromKernel(NEO::EncodeDispatchKernelArgs &dispatchKernelArgs, const Kernel *kernel) const; + ze_result_t validateLaunchParams(const CmdListKernelLaunchParams &launchParams) const; void setOrdinal(uint32_t ord) { ordinal = ord; } diff --git a/level_zero/core/source/cmdlist/cmdlist_additional_args.cpp b/level_zero/core/source/cmdlist/cmdlist_additional_args.cpp index b89fee79d5..ef8e8bdf64 100644 --- a/level_zero/core/source/cmdlist/cmdlist_additional_args.cpp +++ b/level_zero/core/source/cmdlist/cmdlist_additional_args.cpp @@ -15,6 +15,9 @@ struct CmdListKernelLaunchParams; void CommandList::setAdditionalDispatchKernelArgsFromLaunchParams(NEO::EncodeDispatchKernelArgs &dispatchKernelArgs, const CmdListKernelLaunchParams &launchParams) const { } +void CommandList::setAdditionalDispatchKernelArgsFromKernel(NEO::EncodeDispatchKernelArgs &dispatchKernelArgs, const Kernel *kernel) const { +} + ze_result_t CommandList::validateLaunchParams(const CmdListKernelLaunchParams &launchParams) const { return ZE_RESULT_SUCCESS; } 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 49dfb444d8..60bbf69d85 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 @@ -427,6 +427,7 @@ ze_result_t CommandListCoreFamily::appendLaunchKernelWithParams(K .makeCommandView = launchParams.makeKernelCommandView, }; setAdditionalDispatchKernelArgsFromLaunchParams(dispatchKernelArgs, launchParams); + setAdditionalDispatchKernelArgsFromKernel(dispatchKernelArgs, kernel); NEO::EncodeDispatchKernel::encodeCommon(commandContainer, dispatchKernelArgs); launchParams.outWalker = dispatchKernelArgs.outWalkerPtr; diff --git a/opencl/source/command_queue/CMakeLists.txt b/opencl/source/command_queue/CMakeLists.txt index df6df90ae0..b889ec8b00 100644 --- a/opencl/source/command_queue/CMakeLists.txt +++ b/opencl/source/command_queue/CMakeLists.txt @@ -41,6 +41,7 @@ set(RUNTIME_SRCS_COMMAND_QUEUE ${CMAKE_CURRENT_SOURCE_DIR}/flush.h ${CMAKE_CURRENT_SOURCE_DIR}/gpgpu_walker.h ${CMAKE_CURRENT_SOURCE_DIR}/gpgpu_walker_base.inl + ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}hardware_interface.cpp ${CMAKE_CURRENT_SOURCE_DIR}/hardware_interface.h ${CMAKE_CURRENT_SOURCE_DIR}/hardware_interface_base.inl ${CMAKE_CURRENT_SOURCE_DIR}/resource_barrier.cpp diff --git a/opencl/source/command_queue/hardware_interface.cpp b/opencl/source/command_queue/hardware_interface.cpp new file mode 100644 index 0000000000..356127d257 --- /dev/null +++ b/opencl/source/command_queue/hardware_interface.cpp @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2025 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "opencl/source/command_queue/hardware_interface.h" + +namespace NEO { + +void HardwareInterfaceHelper::setEncodeWalkerArgsExt(EncodeWalkerArgs &encodeWalkerArgs, const KernelInfo &kernelInfo) { +} + +} // namespace NEO \ No newline at end of file diff --git a/opencl/source/command_queue/hardware_interface.h b/opencl/source/command_queue/hardware_interface.h index 62017f086a..ecb7b3dce8 100644 --- a/opencl/source/command_queue/hardware_interface.h +++ b/opencl/source/command_queue/hardware_interface.h @@ -22,9 +22,14 @@ class Kernel; class LinearStream; class HwPerfCounter; class HwTimeStamps; +class TagNodeBase; +class TimestampPacketContainer; struct KernelOperation; struct MultiDispatchInfo; struct TimestampPacketDependencies; +struct KernelInfo; +struct EncodeWalkerArgs; +struct HardwareInfo; template class TagNode; @@ -50,6 +55,12 @@ struct HardwareInterfaceWalkerArgs { bool relaxedOrderingEnabled = false; }; +struct HardwareInterfaceHelper { + static void setEncodeWalkerArgsExt( + EncodeWalkerArgs &encodeWalkerArgs, + const KernelInfo &kernelInfo); +}; + template class HardwareInterface { public: diff --git a/opencl/source/command_queue/hardware_interface_xehp_and_later.inl b/opencl/source/command_queue/hardware_interface_xehp_and_later.inl index 2228907424..4f81a7b7b6 100644 --- a/opencl/source/command_queue/hardware_interface_xehp_and_later.inl +++ b/opencl/source/command_queue/hardware_interface_xehp_and_later.inl @@ -19,6 +19,8 @@ #include "opencl/source/command_queue/hardware_interface_base.inl" +#include "encode_dispatch_kernel_args_ext.h" + namespace NEO { template @@ -156,7 +158,10 @@ inline void HardwareInterface::programWalker( scratchAddress, device); + EncodeKernelArgsExt argsExtended{}; + EncodeWalkerArgs encodeWalkerArgs{ + .argsExtended = &argsExtended, .kernelExecutionType = kernel.getExecutionType(), .requiredDispatchWalkOrder = kernelAttributes.dispatchWalkOrder, .localRegionSize = kernelAttributes.localRegionSize, @@ -164,6 +169,8 @@ inline void HardwareInterface::programWalker( .requiredSystemFence = kernelSystemAllocation && walkerArgs.event != nullptr, .hasSample = kernelInfo.kernelDescriptor.kernelAttributes.flags.hasSample}; + HardwareInterfaceHelper::setEncodeWalkerArgsExt(encodeWalkerArgs, kernelInfo); + EncodeDispatchKernel::template encodeAdditionalWalkerFields(rootDeviceEnvironment, walkerCmd, encodeWalkerArgs); EncodeDispatchKernel::template encodeWalkerPostSyncFields(walkerCmd, rootDeviceEnvironment, encodeWalkerArgs); EncodeDispatchKernel::template encodeComputeDispatchAllWalker(walkerCmd, interfaceDescriptor, rootDeviceEnvironment, encodeWalkerArgs); diff --git a/shared/test/unit_test/mocks/mock_dispatch_kernel_encoder_interface.h b/shared/test/unit_test/mocks/mock_dispatch_kernel_encoder_interface.h index 537ee47530..bb8fe073f6 100644 --- a/shared/test/unit_test/mocks/mock_dispatch_kernel_encoder_interface.h +++ b/shared/test/unit_test/mocks/mock_dispatch_kernel_encoder_interface.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2024 Intel Corporation + * Copyright (C) 2020-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -24,7 +24,7 @@ struct MockDispatchKernelEncoder : public DispatchKernelEncoderI { return requiredWalkGroupOrder; } uint32_t getNumThreadsPerThreadGroup() const override { - return 1; + return numThreadsPerThreadGroup; } NEO::ImplicitArgs *getImplicitArgs() const override { return nullptr; } @@ -42,6 +42,7 @@ struct MockDispatchKernelEncoder : public DispatchKernelEncoderI { uint32_t groupSizes[3]{32, 1, 1}; uint32_t requiredWalkGroupOrder = 0x0u; KernelDescriptor kernelDescriptor{}; + uint32_t numThreadsPerThreadGroup = 1; mutable uint64_t samplerStateOffsetPassed = 0u;