diff --git a/level_zero/core/test/unit_tests/sources/module/test_module.cpp b/level_zero/core/test/unit_tests/sources/module/test_module.cpp index 626ddb9580..a5d9febb6b 100644 --- a/level_zero/core/test/unit_tests/sources/module/test_module.cpp +++ b/level_zero/core/test/unit_tests/sources/module/test_module.cpp @@ -24,6 +24,7 @@ #include "shared/test/common/compiler_interface/linker_mock.h" #include "shared/test/common/device_binary_format/patchtokens_tests.h" #include "shared/test/common/helpers/debug_manager_state_restore.h" +#include "shared/test/common/helpers/implicit_args_test_helper.h" #include "shared/test/common/helpers/mock_file_io.h" #include "shared/test/common/libult/ult_command_stream_receiver.h" #include "shared/test/common/mocks/mock_compiler_product_helper.h" @@ -1899,7 +1900,7 @@ TEST_F(ModuleDynamicLinkTests, givenModuleWithInternalRelocationAndUnresolvedExt uint32_t internalRelocationOffset = 0x10; linkerInput->textRelocations.push_back({{implicitArgsRelocationSymbolName, internalRelocationOffset, LinkerInput::RelocationInfo::Type::address, SegmentType::instructions}}); - uint32_t expectedInternalRelocationValue = ImplicitArgsV0::getSize(); + uint32_t expectedInternalRelocationValue = ImplicitArgsTestHelper::getImplicitArgsSize(neoDevice->getGfxCoreHelper().getImplicitArgsVersion()); uint32_t externalRelocationOffset = 0x20; constexpr auto externalSymbolName = "unresolved"; @@ -4766,7 +4767,7 @@ TEST_F(ModuleTests, givenImplicitArgsRelocationAndStackCallsWhenLinkingModuleThe auto status = pModule->linkBinary(); EXPECT_TRUE(status); - EXPECT_EQ(ImplicitArgsV0::getSize(), *reinterpret_cast(ptrOffset(isaCpuPtr, 0x8))); + EXPECT_EQ(ImplicitArgsTestHelper::getImplicitArgsSize(device->getGfxCoreHelper().getImplicitArgsVersion()), *reinterpret_cast(ptrOffset(isaCpuPtr, 0x8))); EXPECT_TRUE(kernelInfo->kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs); } diff --git a/opencl/source/kernel/kernel.cpp b/opencl/source/kernel/kernel.cpp index 973c9f27d0..199fda121b 100644 --- a/opencl/source/kernel/kernel.cpp +++ b/opencl/source/kernel/kernel.cpp @@ -92,6 +92,7 @@ Kernel::Kernel(Program *programArg, const KernelInfo &kernelInfoArg, ClDevice &c maxKernelWorkGroupSize = static_cast(deviceInfo.maxWorkGroupSize); } slmTotalSize = kernelInfoArg.kernelDescriptor.kernelAttributes.slmInlineSize; + this->implicitArgsVersion = getDevice().getGfxCoreHelper().getImplicitArgsVersion(); } Kernel::~Kernel() { @@ -204,7 +205,7 @@ cl_int Kernel::initialize() { if (kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs) { pImplicitArgs = std::make_unique(); *pImplicitArgs = {}; - pImplicitArgs->initializeHeader(gfxCoreHelper.getImplicitArgsVersion()); + pImplicitArgs->initializeHeader(this->implicitArgsVersion); pImplicitArgs->setSimdWidth(maxSimdSize); } auto ret = KernelHelper::checkIfThereIsSpaceForScratchOrPrivate(kernelDescriptor.kernelAttributes, &pClDevice->getDevice()); diff --git a/opencl/source/kernel/kernel.h b/opencl/source/kernel/kernel.h index f13b370cfd..152cdf2e9b 100644 --- a/opencl/source/kernel/kernel.h +++ b/opencl/source/kernel/kernel.h @@ -513,6 +513,7 @@ class Kernel : public ReferenceTrackedObject, NEO::NonCopyableAndNonMova uint32_t slmTotalSize = 0u; uint32_t sshLocalSize = 0u; uint32_t crossThreadDataSize = 0u; + uint32_t implicitArgsVersion = 0; bool containsStatelessWrites = true; bool usingSharedObjArgs = false; diff --git a/opencl/test/unit_test/helpers/hardware_commands_helper_tests.cpp b/opencl/test/unit_test/helpers/hardware_commands_helper_tests.cpp index 6cd031f7dd..1f5ad92e81 100644 --- a/opencl/test/unit_test/helpers/hardware_commands_helper_tests.cpp +++ b/opencl/test/unit_test/helpers/hardware_commands_helper_tests.cpp @@ -1209,6 +1209,7 @@ struct HardwareCommandsImplicitArgsTests : Test { MockProgram program(&context, false, toClDeviceVector(*pClDevice)); MockKernel kernel(&program, *pKernelInfo, *pClDevice); + kernel.implicitArgsVersion = 0; ASSERT_EQ(CL_SUCCESS, kernel.initialize()); auto pImplicitArgs = kernel.getImplicitArgs(); diff --git a/opencl/test/unit_test/kernel/kernel_tests.cpp b/opencl/test/unit_test/kernel/kernel_tests.cpp index ef9c908f21..7a827dbb4a 100644 --- a/opencl/test/unit_test/kernel/kernel_tests.cpp +++ b/opencl/test/unit_test/kernel/kernel_tests.cpp @@ -3915,8 +3915,17 @@ TEST_F(KernelImplicitArgsTest, WhenKernelRequiresImplicitArgsThenImplicitArgsStr ASSERT_NE(nullptr, pImplicitArgs); - ImplicitArgsV0 expectedImplicitArgs = {{ImplicitArgsV0::getSize(), 0}, 0, 32}; - EXPECT_EQ(0, memcmp(&expectedImplicitArgs, pImplicitArgs, ImplicitArgsV0::getSize())); + ImplicitArgs expectedImplicitArgs = {}; + if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 0) { + expectedImplicitArgs.v0.header.structVersion = 0; + expectedImplicitArgs.v0.header.structSize = ImplicitArgsV0::getSize(); + } else if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 1) { + expectedImplicitArgs.v1.header.structVersion = 1; + expectedImplicitArgs.v1.header.structSize = ImplicitArgsV1::getSize(); + } + expectedImplicitArgs.setSimdWidth(32); + + EXPECT_EQ(0, memcmp(&expectedImplicitArgs, pImplicitArgs, pImplicitArgs->getSize())); } } @@ -3934,21 +3943,21 @@ TEST_F(KernelImplicitArgsTest, givenKernelWithImplicitArgsWhenSettingKernelParam ASSERT_NE(nullptr, pImplicitArgs); - ImplicitArgsV0 expectedImplicitArgs = {{ImplicitArgsV0::getSize(), 0}}; - expectedImplicitArgs.numWorkDim = 3; - expectedImplicitArgs.simdWidth = 32; - expectedImplicitArgs.localSizeX = 4; - expectedImplicitArgs.localSizeY = 5; - expectedImplicitArgs.localSizeZ = 6; - expectedImplicitArgs.globalSizeX = 7; - expectedImplicitArgs.globalSizeY = 8; - expectedImplicitArgs.globalSizeZ = 9; - expectedImplicitArgs.globalOffsetX = 1; - expectedImplicitArgs.globalOffsetY = 2; - expectedImplicitArgs.globalOffsetZ = 3; - expectedImplicitArgs.groupCountX = 3; - expectedImplicitArgs.groupCountY = 2; - expectedImplicitArgs.groupCountZ = 1; + ImplicitArgs expectedImplicitArgs = {}; + if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 0) { + expectedImplicitArgs.v0.header.structVersion = 0; + expectedImplicitArgs.v0.header.structSize = ImplicitArgsV0::getSize(); + } else if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 1) { + expectedImplicitArgs.v1.header.structVersion = 1; + expectedImplicitArgs.v1.header.structSize = ImplicitArgsV1::getSize(); + } + + expectedImplicitArgs.setNumWorkDim(3); + expectedImplicitArgs.setSimdWidth(32); + expectedImplicitArgs.setLocalSize(4, 5, 6); + expectedImplicitArgs.setGlobalSize(7, 8, 9); + expectedImplicitArgs.setGlobalOffset(1, 2, 3); + expectedImplicitArgs.setGroupCount(3, 2, 1); kernel.setWorkDim(3); kernel.setLocalWorkSizeValues(4, 5, 6); @@ -4018,21 +4027,21 @@ TEST_F(KernelImplicitArgsTest, givenKernelWithImplicitArgsWhenCloneKernelThenImp ASSERT_EQ(CL_SUCCESS, kernel.initialize()); ASSERT_EQ(CL_SUCCESS, kernel2.initialize()); - ImplicitArgsV0 expectedImplicitArgs = {{ImplicitArgsV0::getSize(), 0}}; - expectedImplicitArgs.numWorkDim = 3; - expectedImplicitArgs.simdWidth = 32; - expectedImplicitArgs.localSizeX = 4; - expectedImplicitArgs.localSizeY = 5; - expectedImplicitArgs.localSizeZ = 6; - expectedImplicitArgs.globalSizeX = 7; - expectedImplicitArgs.globalSizeY = 8; - expectedImplicitArgs.globalSizeZ = 9; - expectedImplicitArgs.globalOffsetX = 1; - expectedImplicitArgs.globalOffsetY = 2; - expectedImplicitArgs.globalOffsetZ = 3; - expectedImplicitArgs.groupCountX = 3; - expectedImplicitArgs.groupCountY = 2; - expectedImplicitArgs.groupCountZ = 1; + ImplicitArgs expectedImplicitArgs = {}; + if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 0) { + expectedImplicitArgs.v0.header.structVersion = 0; + expectedImplicitArgs.v0.header.structSize = ImplicitArgsV0::getSize(); + } else if (pClDevice->getGfxCoreHelper().getImplicitArgsVersion() == 1) { + expectedImplicitArgs.v1.header.structVersion = 1; + expectedImplicitArgs.v1.header.structSize = ImplicitArgsV1::getSize(); + } + + expectedImplicitArgs.setNumWorkDim(3); + expectedImplicitArgs.setSimdWidth(32); + expectedImplicitArgs.setLocalSize(4, 5, 6); + expectedImplicitArgs.setGlobalSize(7, 8, 9); + expectedImplicitArgs.setGlobalOffset(1, 2, 3); + expectedImplicitArgs.setGroupCount(3, 2, 1); kernel.setWorkDim(3); kernel.setLocalWorkSizeValues(4, 5, 6); @@ -4046,7 +4055,7 @@ TEST_F(KernelImplicitArgsTest, givenKernelWithImplicitArgsWhenCloneKernelThenImp ASSERT_NE(nullptr, pImplicitArgs); - EXPECT_EQ(0, memcmp(&expectedImplicitArgs, pImplicitArgs, ImplicitArgsV0::getSize())); + EXPECT_EQ(0, memcmp(&expectedImplicitArgs, pImplicitArgs, pImplicitArgs->getSize())); } TEST_F(KernelImplicitArgsTest, givenKernelWithoutImplicitArgsWhenSettingKernelParamsThenImplicitArgsAreNotSet) { diff --git a/opencl/test/unit_test/mocks/mock_kernel.h b/opencl/test/unit_test/mocks/mock_kernel.h index baafeca9d5..c90838a11c 100644 --- a/opencl/test/unit_test/mocks/mock_kernel.h +++ b/opencl/test/unit_test/mocks/mock_kernel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 Intel Corporation + * Copyright (C) 2018-2025 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -132,6 +132,7 @@ class MockKernel : public Kernel { using Kernel::singleSubdevicePreferredInCurrentEnqueue; using Kernel::unifiedMemoryControls; + using Kernel::implicitArgsVersion; using Kernel::slmSizes; using Kernel::slmTotalSize; diff --git a/shared/test/common/helpers/CMakeLists.txt b/shared/test/common/helpers/CMakeLists.txt index 713e728e25..eca0b377bd 100644 --- a/shared/test/common/helpers/CMakeLists.txt +++ b/shared/test/common/helpers/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2019-2023 Intel Corporation +# Copyright (C) 2019-2025 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -9,6 +9,7 @@ target_sources(neo_libult_common PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/cmd_buffer_validator.h ${CMAKE_CURRENT_SOURCE_DIR}/batch_buffer_helper.h ${CMAKE_CURRENT_SOURCE_DIR}/gtest_helpers.h + ${CMAKE_CURRENT_SOURCE_DIR}/implicit_args_test_helper.h ${CMAKE_CURRENT_SOURCE_DIR}/raii_gfx_core_helper.h ${CMAKE_CURRENT_SOURCE_DIR}/raii_product_helper.h ${CMAKE_CURRENT_SOURCE_DIR}/relaxed_ordering_commands_helper.h diff --git a/shared/test/common/helpers/implicit_args_test_helper.h b/shared/test/common/helpers/implicit_args_test_helper.h new file mode 100644 index 0000000000..edf881092e --- /dev/null +++ b/shared/test/common/helpers/implicit_args_test_helper.h @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2025 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once +#include "implicit_args.h" + +namespace ImplicitArgsTestHelper { +constexpr uint32_t getImplicitArgsSize(uint32_t version) { + if (version == 0) { + return NEO::ImplicitArgsV0::getSize(); + } else if (version == 1) { + return NEO::ImplicitArgsV1::getSize(); + } + return 0; +} +} // namespace ImplicitArgsTestHelper \ No newline at end of file diff --git a/shared/test/unit_test/compiler_interface/linker_tests.cpp b/shared/test/unit_test/compiler_interface/linker_tests.cpp index a1a6b7cf45..a3271e6d77 100644 --- a/shared/test/unit_test/compiler_interface/linker_tests.cpp +++ b/shared/test/unit_test/compiler_interface/linker_tests.cpp @@ -18,6 +18,7 @@ #include "shared/test/common/helpers/debug_manager_state_restore.h" #include "shared/test/common/helpers/default_hw_info.h" #include "shared/test/common/helpers/gtest_helpers.h" +#include "shared/test/common/helpers/implicit_args_test_helper.h" #include "shared/test/common/helpers/raii_gfx_core_helper.h" #include "shared/test/common/mocks/mock_device.h" #include "shared/test/common/mocks/mock_elf.h" @@ -2082,7 +2083,7 @@ TEST_F(LinkerTests, givenImplicitArgRelocationAndStackCallsThenPatchRelocationWi EXPECT_EQ(0U, relocatedSymbols.size()); auto addressToPatch = reinterpret_cast(instructionSegment.data() + reloc.r_offset); - EXPECT_EQ(ImplicitArgsV0::getSize(), *addressToPatch); + EXPECT_EQ(ImplicitArgsTestHelper::getImplicitArgsSize(deviceFactory.rootDevices[0]->getGfxCoreHelper().getImplicitArgsVersion()), *addressToPatch); EXPECT_EQ(initData, *(addressToPatch - 1)); EXPECT_EQ(initData, *(addressToPatch + 1)); EXPECT_TRUE(kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs); @@ -2270,7 +2271,7 @@ TEST_F(LinkerDebuggingSupportedTests, givenImplicitArgRelocationAndEnabledDebugg EXPECT_EQ(0U, relocatedSymbols.size()); auto addressToPatch = reinterpret_cast(instructionSegment.data() + reloc.r_offset); - EXPECT_EQ(ImplicitArgsV0::getSize(), *addressToPatch); + EXPECT_EQ(ImplicitArgsTestHelper::getImplicitArgsSize(device->getGfxCoreHelper().getImplicitArgsVersion()), *addressToPatch); EXPECT_EQ(initData, *(addressToPatch - 1)); EXPECT_EQ(initData, *(addressToPatch + 1)); EXPECT_TRUE(kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs); @@ -2477,7 +2478,7 @@ TEST_F(LinkerTests, givenMultipleImplicitArgsRelocationsWithinSingleKernelWhenLi for (const auto &reloc : relocs) { auto addressToPatch = reinterpret_cast(instructionSegment.data() + reloc.r_offset); - EXPECT_EQ(ImplicitArgsV0::getSize(), *addressToPatch); + EXPECT_EQ(ImplicitArgsTestHelper::getImplicitArgsSize(deviceFactory.rootDevices[0]->getGfxCoreHelper().getImplicitArgsVersion()), *addressToPatch); EXPECT_TRUE(kernelDescriptor.kernelAttributes.flags.requiresImplicitArgs); } }