Skip to content

Commit c95a67b

Browse files
feature: additional checkers to enable feature
Resolves: NEO-13973 Signed-off-by: Damian Tomczak <[email protected]>
1 parent bd721b2 commit c95a67b

File tree

10 files changed

+38
-20
lines changed

10 files changed

+38
-20
lines changed

level_zero/core/source/helpers/api_specific_config_l0.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2020-2024 Intel Corporation
2+
* Copyright (C) 2020-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -10,6 +10,7 @@
1010
#include "shared/source/device/device.h"
1111
#include "shared/source/execution_environment/root_device_environment.h"
1212
#include "shared/source/helpers/api_specific_config.h"
13+
#include "shared/source/helpers/compiler_product_helper.h"
1314
#include "shared/source/release_helper/release_helper.h"
1415

1516
#include "level_zero/core/source/compiler_interface/l0_reg_path.h"
@@ -33,6 +34,10 @@ bool ApiSpecificConfig::getGlobalBindlessHeapConfiguration(const ReleaseHelper *
3334
}
3435

3536
bool ApiSpecificConfig::getBindlessMode(const Device &device) {
37+
if (device.getCompilerProductHelper().isForceBindlessRequired()) {
38+
return true;
39+
}
40+
3641
if (debugManager.flags.UseBindlessMode.get() != -1) {
3742
return debugManager.flags.UseBindlessMode.get();
3843
}

level_zero/core/test/unit_tests/sources/helper/api_specific_config_l0_tests.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
/*
2-
* Copyright (C) 2021-2024 Intel Corporation
2+
* Copyright (C) 2021-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
66
*/
77

88
#include "shared/source/command_container/implicit_scaling.h"
99
#include "shared/source/helpers/api_specific_config.h"
10+
#include "shared/source/helpers/compiler_product_helper.h"
1011
#include "shared/test/common/helpers/debug_manager_state_restore.h"
1112
#include "shared/test/common/mocks/mock_ail_configuration.h"
1213
#include "shared/test/common/mocks/mock_device.h"
@@ -109,7 +110,7 @@ TEST(ApiSpecificConfigL0Tests, WhenCheckingIfBindlessAddressingIsEnabledThenRetu
109110
EXPECT_TRUE(ApiSpecificConfig::getBindlessMode(mockDevice));
110111

111112
mockAilConfigurationHelper.setDisableBindlessAddressing(true);
112-
EXPECT_FALSE(ApiSpecificConfig::getBindlessMode(mockDevice));
113+
EXPECT_EQ(mockDevice.getCompilerProductHelper().isHeaplessModeEnabled(), ApiSpecificConfig::getBindlessMode(mockDevice));
113114
}
114115

115116
} // namespace NEO

level_zero/core/test/unit_tests/sources/module/test_module.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3887,7 +3887,7 @@ TEST_F(ModuleTest, givenInternalOptionsWhenBindlessDisabledThenBindlesOptionsNot
38873887

38883888
module->createBuildOptions("", buildOptions, internalBuildOptions);
38893889

3890-
EXPECT_FALSE(NEO::CompilerOptions::contains(internalBuildOptions, NEO::CompilerOptions::bindlessMode));
3890+
EXPECT_EQ(device->getCompilerProductHelper().isHeaplessModeEnabled(), NEO::CompilerOptions::contains(internalBuildOptions, NEO::CompilerOptions::bindlessMode));
38913891
}
38923892

38933893
TEST_F(ModuleTest, givenSrcOptLevelInSrcNamesWhenMovingBuildOptionsThenOptionIsRemovedFromSrcNamesAndTranslatedOptionsStoredInDstNames) {

opencl/source/helpers/api_specific_config_ocl.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
/*
2-
* Copyright (C) 2020-2024 Intel Corporation
2+
* Copyright (C) 2020-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
66
*/
77

88
#include "shared/source/debug_settings/debug_settings_manager.h"
9+
#include "shared/source/device/device.h"
910
#include "shared/source/helpers/api_specific_config.h"
11+
#include "shared/source/helpers/compiler_product_helper.h"
12+
#include "shared/source/release_helper/release_helper.h"
1013

1114
#include "opencl/source/os_interface/ocl_reg_path.h"
1215

@@ -25,6 +28,10 @@ bool ApiSpecificConfig::getGlobalBindlessHeapConfiguration(const ReleaseHelper *
2528
}
2629

2730
bool ApiSpecificConfig::getBindlessMode(const Device &device) {
31+
if (device.getCompilerProductHelper().isForceBindlessRequired()) {
32+
return true;
33+
}
34+
2835
if (debugManager.flags.UseBindlessMode.get() != -1) {
2936
return debugManager.flags.UseBindlessMode.get();
3037
} else {

opencl/source/program/program.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ std::string Program::getInternalOptions() const {
8080
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::greaterThan4gbBuffersRequired);
8181
}
8282

83-
if (debugManager.flags.UseBindlessMode.get() == 1) {
83+
if (NEO::ApiSpecificConfig::getBindlessMode(pClDevice->getDevice())) {
8484
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::bindlessMode);
8585
}
8686

opencl/test/unit_test/built_ins/built_in_tests.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,15 +1653,15 @@ TEST_F(BuiltInTests, WhenBuiltinsLibIsCreatedThenAllStoragesSizeIsTwo) {
16531653

16541654
TEST_F(BuiltInTests, GivenTypeAnyWhenGettingBuiltinCodeThenCorrectBuiltinReturned) {
16551655
auto builtinsLib = std::unique_ptr<BuiltinsLib>(new BuiltinsLib());
1656-
BuiltinCode code = builtinsLib->getBuiltinCode(EBuiltInOps::copyBufferToBuffer, BuiltinCode::ECodeType::any, *pDevice);
1656+
BuiltinCode code = builtinsLib->getBuiltinCode(EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyBufferToBuffer>(false, pDevice->getCompilerProductHelper().isHeaplessModeEnabled()), BuiltinCode::ECodeType::any, *pDevice);
16571657
EXPECT_EQ(BuiltinCode::ECodeType::binary, code.type);
16581658
EXPECT_NE(0u, code.resource.size());
16591659
EXPECT_EQ(pDevice, code.targetDevice);
16601660
}
16611661

16621662
TEST_F(BuiltInTests, GivenTypeBinaryWhenGettingBuiltinCodeThenCorrectBuiltinReturned) {
16631663
auto builtinsLib = std::unique_ptr<BuiltinsLib>(new BuiltinsLib());
1664-
BuiltinCode code = builtinsLib->getBuiltinCode(EBuiltInOps::copyBufferToBuffer, BuiltinCode::ECodeType::binary, *pDevice);
1664+
BuiltinCode code = builtinsLib->getBuiltinCode(EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyBufferToBuffer>(false, pDevice->getCompilerProductHelper().isHeaplessModeEnabled()), BuiltinCode::ECodeType::binary, *pDevice);
16651665
EXPECT_EQ(BuiltinCode::ECodeType::binary, code.type);
16661666
EXPECT_NE(0u, code.resource.size());
16671667
EXPECT_EQ(pDevice, code.targetDevice);
@@ -1810,7 +1810,7 @@ TEST_F(BuiltInTests, GivenTypeIntermediateWhenCreatingProgramFromCodeThenNullPoi
18101810

18111811
TEST_F(BuiltInTests, GivenTypeBinaryWhenCreatingProgramFromCodeThenValidPointerIsReturned) {
18121812
auto builtinsLib = std::unique_ptr<BuiltinsLib>(new BuiltinsLib());
1813-
const BuiltinCode bc = builtinsLib->getBuiltinCode(EBuiltInOps::copyBufferToBuffer, BuiltinCode::ECodeType::binary, *pDevice);
1813+
const BuiltinCode bc = builtinsLib->getBuiltinCode(EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyBufferToBuffer>(false, pDevice->getCompilerProductHelper().isHeaplessModeEnabled()), BuiltinCode::ECodeType::binary, *pDevice);
18141814
EXPECT_NE(0u, bc.resource.size());
18151815
auto program = std::unique_ptr<Program>(BuiltinDispatchInfoBuilder::createProgramFromCode(bc, toClDeviceVector(*pClDevice)));
18161816
EXPECT_NE(nullptr, program.get());
@@ -1898,7 +1898,7 @@ TEST_F(BuiltInTests, givenSipKernelWhenAllocationFailsThenItHasNullptrGraphicsAl
18981898
TEST_F(BuiltInTests, givenDebugFlagForceUseSourceWhenArgIsBinaryThenReturnBuiltinCodeBinary) {
18991899
debugManager.flags.RebuildPrecompiledKernels.set(true);
19001900
auto builtinsLib = std::unique_ptr<BuiltinsLib>(new BuiltinsLib());
1901-
BuiltinCode code = builtinsLib->getBuiltinCode(EBuiltInOps::copyBufferToBuffer, BuiltinCode::ECodeType::binary, *pDevice);
1901+
BuiltinCode code = builtinsLib->getBuiltinCode(EBuiltInOps::adjustBuiltinType<EBuiltInOps::copyBufferToBuffer>(false, pDevice->getCompilerProductHelper().isHeaplessModeEnabled()), BuiltinCode::ECodeType::binary, *pDevice);
19021902
EXPECT_EQ(BuiltinCode::ECodeType::binary, code.type);
19031903
EXPECT_NE(0u, code.resource.size());
19041904
EXPECT_EQ(pDevice, code.targetDevice);

opencl/test/unit_test/program/program_tests.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,20 +1680,17 @@ TEST_F(ProgramTests, WhenCreatingProgramThenBindlessIsEnabledOnlyIfDebugFlagIsEn
16801680
using namespace testing;
16811681
DebugManagerStateRestore restorer;
16821682

1683-
{
1684-
1683+
if (!pDevice->getCompilerProductHelper().isHeaplessModeEnabled()) {
16851684
debugManager.flags.UseBindlessMode.set(0);
16861685
MockProgram programNoBindless(pContext, false, toClDeviceVector(*pClDevice));
16871686
auto internalOptionsNoBindless = programNoBindless.getInternalOptions();
16881687
EXPECT_FALSE(CompilerOptions::contains(internalOptionsNoBindless, CompilerOptions::bindlessMode)) << internalOptionsNoBindless;
16891688
}
1690-
{
16911689

1692-
debugManager.flags.UseBindlessMode.set(1);
1693-
MockProgram programBindless(pContext, false, toClDeviceVector(*pClDevice));
1694-
auto internalOptionsBindless = programBindless.getInternalOptions();
1695-
EXPECT_TRUE(CompilerOptions::contains(internalOptionsBindless, CompilerOptions::bindlessMode)) << internalOptionsBindless;
1696-
}
1690+
debugManager.flags.UseBindlessMode.set(1);
1691+
MockProgram programBindless(pContext, false, toClDeviceVector(*pClDevice));
1692+
auto internalOptionsBindless = programBindless.getInternalOptions();
1693+
EXPECT_TRUE(CompilerOptions::contains(internalOptionsBindless, CompilerOptions::bindlessMode)) << internalOptionsBindless;
16971694
}
16981695

16991696
TEST_F(ProgramTests, GivenForce32BitAddressesWhenProgramIsCreatedThenGreaterThan4gbBuffersRequiredIsCorrectlySet) {

shared/source/helpers/compiler_product_helper.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2021-2024 Intel Corporation
2+
* Copyright (C) 2021-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -86,6 +86,7 @@ class CompilerProductHelper {
8686
virtual void getKernelFp64AtomicCapabilities(uint32_t &fp64Caps) const = 0;
8787
virtual void getKernelCapabilitiesExtra(const ReleaseHelper *releaseHelper, uint32_t &extraCaps) const = 0;
8888
virtual bool isBindlessAddressingDisabled(const ReleaseHelper *releaseHelper) const = 0;
89+
virtual bool isForceBindlessRequired() const = 0;
8990
virtual const char *getCustomIgcLibraryName() const = 0;
9091
virtual const char *getFinalizerLibraryName() const = 0;
9192

@@ -139,6 +140,7 @@ class CompilerProductHelperHw : public CompilerProductHelper {
139140
void getKernelFp64AtomicCapabilities(uint32_t &fp64Caps) const override;
140141
void getKernelCapabilitiesExtra(const ReleaseHelper *releaseHelper, uint32_t &extraCaps) const override;
141142
bool isBindlessAddressingDisabled(const ReleaseHelper *releaseHelper) const override;
143+
bool isForceBindlessRequired() const override;
142144
const char *getCustomIgcLibraryName() const override;
143145
const char *getFinalizerLibraryName() const override;
144146

shared/source/helpers/compiler_product_helper_base.inl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,11 @@ bool CompilerProductHelperHw<gfxProduct>::isBindlessAddressingDisabled(const Rel
306306
return true;
307307
}
308308

309+
template <PRODUCT_FAMILY gfxProduct>
310+
bool CompilerProductHelperHw<gfxProduct>::isForceBindlessRequired() const {
311+
return this->isHeaplessModeEnabled();
312+
}
313+
309314
template <PRODUCT_FAMILY gfxProduct>
310315
const char *CompilerProductHelperHw<gfxProduct>::getCustomIgcLibraryName() const {
311316
return nullptr;

shared/test/common/mocks/mock_compiler_product_helper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2024 Intel Corporation
2+
* Copyright (C) 2024-2025 Intel Corporation
33
*
44
* SPDX-License-Identifier: MIT
55
*
@@ -61,6 +61,7 @@ class MockCompilerProductHelper : public CompilerProductHelper {
6161
ADDMETHOD_CONST_NOBASE_VOIDRETURN(getKernelFp64AtomicCapabilities, (uint32_t & fp64Caps));
6262
ADDMETHOD_CONST_NOBASE_VOIDRETURN(getKernelCapabilitiesExtra, (const ReleaseHelper *releaseHelper, uint32_t &extraCaps));
6363
ADDMETHOD_CONST_NOBASE(isBindlessAddressingDisabled, bool, false, (const ReleaseHelper *releaseHelper));
64+
ADDMETHOD_CONST_NOBASE(isForceBindlessRequired, bool, false, ());
6465
ADDMETHOD_CONST_NOBASE(getProductConfigFromHwInfo, uint32_t, 0, (const HardwareInfo &hwInfo));
6566
ADDMETHOD_CONST_NOBASE(getCustomIgcLibraryName, const char *, nullptr, ());
6667
ADDMETHOD_CONST_NOBASE(getFinalizerLibraryName, const char *, nullptr, ());

0 commit comments

Comments
 (0)