diff --git a/shared/source/built_ins/sip.cpp b/shared/source/built_ins/sip.cpp index 23f62156ac..a6319b7e26 100644 --- a/shared/source/built_ins/sip.cpp +++ b/shared/source/built_ins/sip.cpp @@ -15,6 +15,7 @@ #include "shared/source/execution_environment/execution_environment.h" #include "shared/source/execution_environment/root_device_environment.h" #include "shared/source/helpers/aligned_memory.h" +#include "shared/source/helpers/compiler_product_helper.h" #include "shared/source/helpers/debug_helpers.h" #include "shared/source/helpers/gfx_core_helper.h" #include "shared/source/helpers/hw_info.h" @@ -122,7 +123,12 @@ size_t SipKernel::getStateSaveAreaSize(Device *device) const { SipKernelType SipKernel::getSipKernelType(Device &device) { if (device.getDebugger() != nullptr) { - return SipKernelType::dbgBindless; + auto &compilerProductHelper = device.getRootDeviceEnvironment().getHelper(); + if (compilerProductHelper.isHeaplessModeEnabled()) { + return SipKernelType::dbgHeapless; + } else { + return SipKernelType::dbgBindless; + } } bool debuggingEnabled = device.getDebugger() != nullptr; return getSipKernelType(device, debuggingEnabled); diff --git a/shared/source/built_ins/sip_kernel_type.h b/shared/source/built_ins/sip_kernel_type.h index 8de125d8a7..cdf859a6e3 100644 --- a/shared/source/built_ins/sip_kernel_type.h +++ b/shared/source/built_ins/sip_kernel_type.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2023 Intel Corporation + * Copyright (C) 2020-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -16,6 +16,7 @@ enum class SipKernelType : std::uint32_t { dbgCsr, dbgCsrLocal, dbgBindless, + dbgHeapless, count }; diff --git a/shared/source/compiler_interface/compiler_interface.cpp b/shared/source/compiler_interface/compiler_interface.cpp index 8e373ecfdd..dcc64e530a 100644 --- a/shared/source/compiler_interface/compiler_interface.cpp +++ b/shared/source/compiler_interface/compiler_interface.cpp @@ -344,6 +344,10 @@ TranslationOutput::ErrorCode CompilerInterface::getSipKernelBinary(NEO::Device & typeOfSystemRoutine = IGC::SystemRoutineType::debug; bindlessSip = true; break; + case SipKernelType::dbgHeapless: + typeOfSystemRoutine = IGC::SystemRoutineType::debug; + bindlessSip = false; + break; default: break; } diff --git a/shared/test/unit_test/built_ins/sip_tests.cpp b/shared/test/unit_test/built_ins/sip_tests.cpp index c62bf95693..9bd0a67191 100644 --- a/shared/test/unit_test/built_ins/sip_tests.cpp +++ b/shared/test/unit_test/built_ins/sip_tests.cpp @@ -17,11 +17,14 @@ #include "shared/test/common/helpers/variable_backup.h" #include "shared/test/common/libult/global_environment.h" #include "shared/test/common/mocks/mock_builtins.h" +#include "shared/test/common/mocks/mock_compiler_product_helper.h" #include "shared/test/common/mocks/mock_compilers.h" #include "shared/test/common/mocks/mock_device.h" +#include "shared/test/common/mocks/mock_execution_environment.h" #include "shared/test/common/mocks/mock_io_functions.h" #include "shared/test/common/mocks/mock_memory_manager.h" #include "shared/test/common/mocks/mock_os_context.h" +#include "shared/test/common/mocks/mock_release_helper.h" #include "shared/test/common/mocks/mock_sip.h" #include "shared/test/common/test_macros/test.h" @@ -435,6 +438,22 @@ TEST(DebugBindlessSip, givenDebuggerAndUseBindlessDebugSipWhenGettingSipTypeThen EXPECT_EQ(SipKernelType::dbgBindless, sipType); } +TEST(DebugHeaplessSip, givenDebuggerAndUseHeaplessModeWhenGettingSipTypeThenDebugHeaplessTypeIsReturned) { + + auto mockDevice = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(nullptr)); + EXPECT_NE(nullptr, mockDevice); + mockDevice->executionEnvironment->rootDeviceEnvironments[0]->initDebuggerL0(mockDevice.get()); + auto compilerHelper = std::unique_ptr(new MockCompilerProductHelper()); + auto releaseHelper = std::unique_ptr(new MockReleaseHelper()); + compilerHelper->isHeaplessModeEnabledResult = true; + mockDevice->executionEnvironment->rootDeviceEnvironments[0]->compilerProductHelper.reset(compilerHelper.release()); + mockDevice->executionEnvironment->rootDeviceEnvironments[0]->releaseHelper.reset(releaseHelper.release()); + + auto sipType = NEO::SipKernel::getSipKernelType(*mockDevice); + + EXPECT_EQ(SipKernelType::dbgHeapless, sipType); +} + TEST(Sip, WhenGettingTypeThenCorrectTypeIsReturned) { std::vector ssaHeader; SipKernel csr{SipKernelType::csr, nullptr, ssaHeader}; diff --git a/shared/test/unit_test/compiler_interface/compiler_interface_tests.cpp b/shared/test/unit_test/compiler_interface/compiler_interface_tests.cpp index eb7fa27084..d273be218e 100644 --- a/shared/test/unit_test/compiler_interface/compiler_interface_tests.cpp +++ b/shared/test/unit_test/compiler_interface/compiler_interface_tests.cpp @@ -1096,6 +1096,12 @@ TEST_F(CompilerInterfaceTest, WhenRequestingBindlessDebugSipThenProperSystemRout EXPECT_EQ(IGC::SystemRoutineType::debug, getIgcDebugVars().typeOfSystemRoutine); EXPECT_EQ(MockCompilerDebugVars::SipAddressingType::bindless, getIgcDebugVars().receivedSipAddressingType); + err = pCompilerInterface->getSipKernelBinary(*this->pDevice, SipKernelType::dbgHeapless, sipBinary, stateAreaHeader); + EXPECT_EQ(TranslationOutput::ErrorCode::success, err); + EXPECT_NE(0U, sipBinary.size()); + EXPECT_EQ(IGC::SystemRoutineType::debug, getIgcDebugVars().typeOfSystemRoutine); + EXPECT_EQ(MockCompilerDebugVars::SipAddressingType::bindful, getIgcDebugVars().receivedSipAddressingType); + gEnvironment->igcPopDebugVars(); }