From 3f7af19c8fac84a6d953306848d19f53f8217210 Mon Sep 17 00:00:00 2001 From: Maciej Plewka Date: Tue, 10 Nov 2020 10:31:40 +0000 Subject: [PATCH] Pass bindless options to compiler when bindless enabled Signed-off-by: Maciej Plewka --- level_zero/core/source/module/module_imp.cpp | 5 ++++ .../unit_tests/sources/module/test_module.cpp | 30 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/level_zero/core/source/module/module_imp.cpp b/level_zero/core/source/module/module_imp.cpp index 1b65d6492e..e1312bc5d7 100644 --- a/level_zero/core/source/module/module_imp.cpp +++ b/level_zero/core/source/module/module_imp.cpp @@ -10,6 +10,7 @@ #include "shared/source/compiler_interface/intermediate_representations.h" #include "shared/source/device/device.h" #include "shared/source/device_binary_format/device_binary_formats.h" +#include "shared/source/helpers/api_specific_config.h" #include "shared/source/helpers/string.h" #include "shared/source/memory_manager/memory_manager.h" #include "shared/source/memory_manager/unified_memory_manager.h" @@ -364,6 +365,10 @@ void ModuleImp::createBuildOptions(const char *pBuildFlags, std::string &apiOpti moveBuildOption(apiOptions, apiOptions, NEO::CompilerOptions::optDisable, BuildOptions::optDisable); moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::greaterThan4gbBuffersRequired, BuildOptions::greaterThan4GbRequired); moveBuildOption(internalBuildOptions, apiOptions, NEO::CompilerOptions::allowZebin, NEO::CompilerOptions::allowZebin); + if (NEO::ApiSpecificConfig::getBindlessConfiguration()) { + NEO::CompilerOptions::concatenateAppend(internalBuildOptions, NEO::CompilerOptions::bindlessBuffers.str()); + NEO::CompilerOptions::concatenateAppend(internalBuildOptions, NEO::CompilerOptions::bindlessImages.str()); + } createBuildExtraOptions(apiOptions, internalBuildOptions); } } 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 600254867d..dd80941ef5 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 @@ -602,5 +602,35 @@ TEST(BuildOptions, givenSrcOptionNameInSrcNamesWhenMovingBuildOptionsThenOptionI EXPECT_EQ(std::string::npos, srcNames.find(NEO::CompilerOptions::optDisable.str())); } +TEST_F(ModuleTest, givenInternalOptionsWhenBindlessEnabledThenBindlesOptionsPassed) { + DebugManagerStateRestore restorer; + DebugManager.flags.UseBindlessMode.set(1); + auto module = std::make_unique(device, nullptr); + ASSERT_NE(nullptr, module); + + std::string buildOptions; + std::string internalBuildOptions; + + module->createBuildOptions("", buildOptions, internalBuildOptions); + + EXPECT_TRUE(NEO::CompilerOptions::contains(internalBuildOptions, NEO::CompilerOptions::bindlessBuffers)); + EXPECT_TRUE(NEO::CompilerOptions::contains(internalBuildOptions, NEO::CompilerOptions::bindlessImages)); +} + +TEST_F(ModuleTest, givenInternalOptionsWhenBindlessDisabledThenBindlesOptionsNotPassed) { + DebugManagerStateRestore restorer; + DebugManager.flags.UseBindlessMode.set(0); + auto module = std::make_unique(device, nullptr); + ASSERT_NE(nullptr, module); + + std::string buildOptions; + std::string internalBuildOptions; + + module->createBuildOptions("", buildOptions, internalBuildOptions); + + EXPECT_FALSE(NEO::CompilerOptions::contains(internalBuildOptions, NEO::CompilerOptions::bindlessBuffers)); + EXPECT_FALSE(NEO::CompilerOptions::contains(internalBuildOptions, NEO::CompilerOptions::bindlessImages)); +} + } // namespace ult } // namespace L0