Unify bindless debug flags

Change-Id: I6a9313722eed01b935707e93cad532adddcc78af
Signed-off-by: Maciej Plewka <maciej.plewka@intel.com>
This commit is contained in:
Maciej Plewka
2020-10-07 13:53:56 +02:00
committed by sys_ocldev
parent bf32740f97
commit 2ebee73e4b
17 changed files with 37 additions and 63 deletions

View File

@ -13,9 +13,9 @@ bool ApiSpecificConfig::getHeapConfiguration() {
return DebugManager.flags.UseExternalAllocatorForSshAndDsh.get();
}
bool ApiSpecificConfig::getBindelssConfiguration() {
if (DebugManager.flags.UseBindlessBuiltins.get() != -1) {
return DebugManager.flags.UseBindlessBuiltins.get();
bool ApiSpecificConfig::getBindlessConfiguration() {
if (DebugManager.flags.UseBindlessMode.get() != -1) {
return DebugManager.flags.UseBindlessMode.get();
} else {
return false;
}

View File

@ -19,7 +19,7 @@ using namespace NEO;
TEST(BuiltInTestsL0, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionPassedThenNameHasBindfulPrefix) {
DebugManagerStateRestore dbgRestorer;
DebugManager.flags.UseBindlessBuiltins.set(-1);
DebugManager.flags.UseBindlessMode.set(-1);
EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer;
const std::string extension = ".bin";
const std::string platformName = "platformName";

View File

@ -12,9 +12,9 @@ namespace NEO {
bool ApiSpecificConfig::getHeapConfiguration() {
return false;
}
bool ApiSpecificConfig::getBindelssConfiguration() {
if (DebugManager.flags.UseBindlessBuiltins.get() != -1) {
return DebugManager.flags.UseBindlessBuiltins.get();
bool ApiSpecificConfig::getBindlessConfiguration() {
if (DebugManager.flags.UseBindlessMode.get() != -1) {
return DebugManager.flags.UseBindlessMode.get();
} else {
return false;
}

View File

@ -12,6 +12,7 @@
#include "shared/source/debug_settings/debug_settings_manager.h"
#include "shared/source/gmm_helper/gmm_helper.h"
#include "shared/source/helpers/aligned_memory.h"
#include "shared/source/helpers/api_specific_config.h"
#include "shared/source/helpers/basic_math.h"
#include "shared/source/helpers/debug_helpers.h"
#include "shared/source/helpers/get_info.h"
@ -2457,17 +2458,15 @@ uint64_t Kernel::getKernelStartOffset(
}
void Kernel::patchBindlessSurfaceStateOffsets(const size_t sshOffset) {
const bool bindlessBuffers = DebugManager.flags.UseBindlessBuffers.get();
const bool bindlessImages = DebugManager.flags.UseBindlessImages.get();
const bool bindlessUsed = (bindlessBuffers || bindlessImages) && !isBuiltIn;
const bool bindlessUsed = ApiSpecificConfig::getBindlessConfiguration();
if (bindlessUsed) {
auto &hardwareInfo = getDevice().getHardwareInfo();
auto &hwHelper = HwHelper::get(hardwareInfo.platform.eRenderCoreFamily);
for (size_t i = 0; i < kernelInfo.kernelArgInfo.size(); i++) {
if ((kernelInfo.kernelArgInfo[i].isBuffer && bindlessBuffers) ||
(kernelInfo.kernelArgInfo[i].isImage && bindlessImages)) {
if ((kernelInfo.kernelArgInfo[i].isBuffer) ||
(kernelInfo.kernelArgInfo[i].isImage)) {
auto patchLocation = ptrOffset(getCrossThreadData(),
kernelInfo.kernelArgInfo[i].kernelArgPatchInfoVector[0].crossthreadOffset);

View File

@ -13,6 +13,7 @@
#include "shared/source/device_binary_format/device_binary_formats.h"
#include "shared/source/device_binary_format/elf/elf_encoder.h"
#include "shared/source/device_binary_format/elf/ocl_elf.h"
#include "shared/source/helpers/api_specific_config.h"
#include "shared/source/helpers/compiler_options_parser.h"
#include "shared/source/helpers/debug_helpers.h"
#include "shared/source/helpers/hw_helper.h"
@ -83,11 +84,8 @@ Program::Program(ExecutionEnvironment &executionEnvironment, Context *context, b
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::greaterThan4gbBuffersRequired);
}
if (DebugManager.flags.UseBindlessBuffers.get()) {
if (ApiSpecificConfig::getBindlessConfiguration()) {
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::bindlessBuffers);
}
if (DebugManager.flags.UseBindlessImages.get()) {
CompilerOptions::concatenateAppend(internalOptions, CompilerOptions::bindlessImages);
}

View File

@ -19,7 +19,7 @@ using namespace NEO;
TEST(BuiltInTestsOcl, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionPassedThenNameHasBindfulPrefix) {
DebugManagerStateRestore dbgRestorer;
DebugManager.flags.UseBindlessBuiltins.set(-1);
DebugManager.flags.UseBindlessMode.set(-1);
EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer;
const std::string extension = ".bin";
const std::string platformName = "skl";

View File

@ -298,8 +298,7 @@ class BindlessKernelFixture : public ProgramFixture {
}
void createKernel(const std::string &programName, const std::string &kernelName) {
DebugManager.flags.UseBindlessBuffers.set(true);
DebugManager.flags.UseBindlessImages.set(true);
DebugManager.flags.UseBindlessMode.set(1);
cl_device_id deviceId = deviceCl;
cl_context clContext = contextCl;
CreateProgramFromBinary(

View File

@ -204,7 +204,7 @@ TEST_F(KernelArgBufferTest, givenNoCacheFlushBufferWhenSettingAsArgThenNotExpect
HWTEST_F(KernelArgBufferTest, givenUsedBindlessBuffersWhenPatchingSurfaceStateOffsetsThenCorrectOffsetIsPatchedInCrossThreadData) {
using DataPortBindlessSurfaceExtendedMessageDescriptor = typename FamilyType::DataPortBindlessSurfaceExtendedMessageDescriptor;
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessBuffers.set(1);
DebugManager.flags.UseBindlessMode.set(1);
pKernelInfo->usesSsh = true;
pKernelInfo->requiresSshForBuffers = true;
@ -232,7 +232,7 @@ HWTEST_F(KernelArgBufferTest, givenUsedBindlessBuffersWhenPatchingSurfaceStateOf
TEST_F(KernelArgBufferTest, givenUsedBindlessBuffersAndNonBufferArgWhenPatchingSurfaceStateOffsetsThenCrossThreadDataIsNotPatched) {
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessBuffers.set(1);
DebugManager.flags.UseBindlessMode.set(1);
pKernelInfo->usesSsh = true;
pKernelInfo->requiresSshForBuffers = true;
@ -251,8 +251,7 @@ TEST_F(KernelArgBufferTest, givenUsedBindlessBuffersAndNonBufferArgWhenPatchingS
TEST_F(KernelArgBufferTest, givenNotUsedBindlessBuffersAndBufferArgWhenPatchingSurfaceStateOffsetsThenCrossThreadDataIsNotPatched) {
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessBuffers.set(false);
DebugManager.flags.UseBindlessImages.set(true);
DebugManager.flags.UseBindlessMode.set(0);
pKernelInfo->usesSsh = true;
pKernelInfo->requiresSshForBuffers = true;
@ -269,10 +268,10 @@ TEST_F(KernelArgBufferTest, givenNotUsedBindlessBuffersAndBufferArgWhenPatchingS
EXPECT_EQ(0xdeadu, *patchLocation);
}
HWTEST_F(KernelArgBufferTest, givenUsedBindlessBuffersAndBuiltinKernelWhenPatchingSurfaceStateOffsetsThenOffsetIsNotPatched) {
HWTEST_F(KernelArgBufferTest, givenUsedBindlessBuffersAndBuiltinKernelWhenPatchingSurfaceStateOffsetsThenOffsetIsPatched) {
using DataPortBindlessSurfaceExtendedMessageDescriptor = typename FamilyType::DataPortBindlessSurfaceExtendedMessageDescriptor;
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessBuffers.set(1);
DebugManager.flags.UseBindlessMode.set(1);
pKernelInfo->usesSsh = true;
pKernelInfo->requiresSshForBuffers = true;
@ -288,5 +287,5 @@ HWTEST_F(KernelArgBufferTest, givenUsedBindlessBuffersAndBuiltinKernelWhenPatchi
uint32_t sshOffset = 0x1000;
pKernel->patchBindlessSurfaceStateOffsets(sshOffset);
EXPECT_EQ(0xdeadu, *patchLocation);
EXPECT_NE(0xdeadu, *patchLocation);
}

View File

@ -348,7 +348,7 @@ TEST_F(KernelImageArgTest, givenNoCacheFlushImageWhenSettingAsArgThenExpectAlloc
HWTEST_F(KernelImageArgTest, givenUsedBindlessImagesWhenPatchingSurfaceStateOffsetsThenCorrectOffsetIsPatchedInCrossThreadData) {
using DataPortBindlessSurfaceExtendedMessageDescriptor = typename FamilyType::DataPortBindlessSurfaceExtendedMessageDescriptor;
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessImages.set(1);
DebugManager.flags.UseBindlessMode.set(1);
pKernelInfo->usesSsh = true;
@ -381,7 +381,7 @@ HWTEST_F(KernelImageArgTest, givenUsedBindlessImagesWhenPatchingSurfaceStateOffs
TEST_F(KernelImageArgTest, givenUsedBindlessImagesAndNonImageArgWhenPatchingSurfaceStateOffsetsThenCrossThreadDataIsNotPatched) {
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessImages.set(1);
DebugManager.flags.UseBindlessMode.set(1);
pKernelInfo->usesSsh = true;
@ -406,8 +406,7 @@ TEST_F(KernelImageArgTest, givenUsedBindlessImagesAndNonImageArgWhenPatchingSurf
TEST_F(KernelImageArgTest, givenNotUsedBindlessImagesAndImageArgWhenPatchingSurfaceStateOffsetsThenCrossThreadDataIsNotPatched) {
DebugManagerStateRestore restorer;
DebugManager.flags.UseBindlessImages.set(false);
DebugManager.flags.UseBindlessBuffers.set(true);
DebugManager.flags.UseBindlessMode.set(0);
pKernelInfo->usesSsh = true;

View File

@ -1809,31 +1809,15 @@ TEST_F(ProgramTests, WhenCreatingProgramThenBindlessIsEnabledOnlyIfDebugFlagIsEn
DebugManagerStateRestore restorer;
{
EXPECT_FALSE(DebugManager.flags.UseBindlessBuffers.get());
EXPECT_FALSE(DebugManager.flags.UseBindlessImages.get());
DebugManager.flags.UseBindlessMode.set(0);
MockProgram programNoBindless(*pDevice->getExecutionEnvironment(), pContext, false, pDevice);
EXPECT_FALSE(CompilerOptions::contains(programNoBindless.getInternalOptions(), CompilerOptions::bindlessBuffers)) << programNoBindless.getInternalOptions();
EXPECT_FALSE(CompilerOptions::contains(programNoBindless.getInternalOptions(), CompilerOptions::bindlessImages)) << programNoBindless.getInternalOptions();
}
{
DebugManager.flags.UseBindlessBuffers.set(true);
MockProgram programNoBindless(*pDevice->getExecutionEnvironment(), pContext, false, pDevice);
EXPECT_TRUE(CompilerOptions::contains(programNoBindless.getInternalOptions(), CompilerOptions::bindlessBuffers)) << programNoBindless.getInternalOptions();
EXPECT_FALSE(CompilerOptions::contains(programNoBindless.getInternalOptions(), CompilerOptions::bindlessImages)) << programNoBindless.getInternalOptions();
}
{
DebugManager.flags.UseBindlessBuffers.set(false);
DebugManager.flags.UseBindlessImages.set(true);
MockProgram programNoBindless(*pDevice->getExecutionEnvironment(), pContext, false, pDevice);
EXPECT_FALSE(CompilerOptions::contains(programNoBindless.getInternalOptions(), CompilerOptions::bindlessBuffers)) << programNoBindless.getInternalOptions();
EXPECT_TRUE(CompilerOptions::contains(programNoBindless.getInternalOptions(), CompilerOptions::bindlessImages)) << programNoBindless.getInternalOptions();
}
{
DebugManager.flags.UseBindlessBuffers.set(true);
DebugManager.flags.UseBindlessImages.set(true);
DebugManager.flags.UseBindlessMode.set(1);
MockProgram programNoBindless(*pDevice->getExecutionEnvironment(), pContext, false, pDevice);
EXPECT_TRUE(CompilerOptions::contains(programNoBindless.getInternalOptions(), CompilerOptions::bindlessBuffers)) << programNoBindless.getInternalOptions();
EXPECT_TRUE(CompilerOptions::contains(programNoBindless.getInternalOptions(), CompilerOptions::bindlessImages)) << programNoBindless.getInternalOptions();

View File

@ -118,8 +118,6 @@ AddClGlSharing = 0
EnableFormatQuery = 0
EnableFreeMemory = 0
ForceSamplerLowFilteringPrecision = 0
UseBindlessBuffers = 0
UseBindlessImages = 0
MakeAllBuffersResident = 0
EnableIntelVme = -1
EnableIntelAdvancedVme = -1
@ -200,4 +198,4 @@ ProvideVerboseImplicitFlush = false
PauseOnGpuMode = -1
PrintTagAllocationAddress = 0
DoNotFlushCaches = false
UseBindlessBuiltins = -1
UseBindlessMode = -1

View File

@ -82,7 +82,7 @@ std::string createBuiltinResourceName(EBuiltInOps::Type builtin, const std::stri
ret += "_";
}
if (extension == ".bin") {
ret += ApiSpecificConfig::getBindelssConfiguration() ? "bindless_" : "bindful_";
ret += ApiSpecificConfig::getBindlessConfiguration() ? "bindless_" : "bindful_";
}
ret += getBuiltinAsString(builtin);

View File

@ -164,8 +164,6 @@ DECLARE_DEBUG_VARIABLE(bool, AddClGlSharing, false, "Add cl-gl extension")
DECLARE_DEBUG_VARIABLE(bool, EnableFormatQuery, false, "Enable sharing format querying")
DECLARE_DEBUG_VARIABLE(bool, EnableFreeMemory, false, "Enable freeMemory in memory manager")
DECLARE_DEBUG_VARIABLE(bool, ForceSamplerLowFilteringPrecision, false, "Force Low Filtering Precision Sampler mode")
DECLARE_DEBUG_VARIABLE(bool, UseBindlessBuffers, false, "Force compiler to use bindless buffer addressing instead of stateful one")
DECLARE_DEBUG_VARIABLE(bool, UseBindlessImages, false, "Force compiler to use bindless image addressing instead of stateful one")
DECLARE_DEBUG_VARIABLE(int32_t, EnableGemCloseWorker, -1, "Use asynchronous gem object closing, -1:default, 0:disable, 1:enable")
DECLARE_DEBUG_VARIABLE(int32_t, EnableIntelVme, -1, "-1: default, 0: disabled, 1: Enables cl_intel_motion_estimation extension")
DECLARE_DEBUG_VARIABLE(int32_t, EnableIntelAdvancedVme, -1, "-1: default, 0: disabled, 1: Enables cl_intel_advanced_motion_estimation extension")
@ -194,7 +192,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, ForceFineGrainedSVMSupport, -1, "-1: default, 0:
DECLARE_DEBUG_VARIABLE(int32_t, ForceDeviceEnqueueSupport, -1, "-1: default, 0: disabled, 1: enabled")
DECLARE_DEBUG_VARIABLE(int32_t, ForcePipeSupport, -1, "-1: default, 0: disabled, 1: enabled")
DECLARE_DEBUG_VARIABLE(int32_t, UseAsyncDrmExec, -1, "-1: default, 0: Disabled 1: Enabled. If enabled, pass EXEC_OBJECT_ASYNC to exec ioctl.")
DECLARE_DEBUG_VARIABLE(int32_t, UseBindlessBuiltins, -1, "Use precompiled builtins in bindless mode, -1: api dependent, 0: disabled, 1: enabled")
DECLARE_DEBUG_VARIABLE(int32_t, UseBindlessMode, -1, "Use precompiled builtins in bindless mode, -1: api dependent, 0: disabled, 1: enabled")
/*DRIVER TOGGLES*/
DECLARE_DEBUG_VARIABLE(int32_t, ForceOCLVersion, 0, "Force specific OpenCL API version")

View File

@ -9,6 +9,6 @@
namespace NEO {
struct ApiSpecificConfig {
static bool getHeapConfiguration();
static bool getBindelssConfiguration();
static bool getBindlessConfiguration();
};
} // namespace NEO

View File

@ -18,7 +18,7 @@ namespace NEO {
void givenUseBindlessBuiltinDisabledWhenBinExtensionPassedThenNameHasBindfulPrefix() {
DebugManagerStateRestore dbgRestorer;
DebugManager.flags.UseBindlessBuiltins.set(0);
DebugManager.flags.UseBindlessMode.set(0);
EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer;
const std::string extension = ".bin";
const std::string platformName = "platformName";
@ -45,7 +45,7 @@ void givenUseBindlessBuiltinDisabledWhenBinExtensionPassedThenNameHasBindfulPref
void givenUseBindlessBuiltinEnabledWhenBinExtensionPassedThenNameHasBindlessPrefix() {
DebugManagerStateRestore dbgRestorer;
DebugManager.flags.UseBindlessBuiltins.set(1);
DebugManager.flags.UseBindlessMode.set(1);
EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer;
const std::string extension = ".bin";
const std::string platformName = "skl";

View File

@ -10,7 +10,7 @@
BDWTEST_F(SBATest, givenUsedBindlessBuffersWhenAppendStateBaseAddressParametersIsCalledThenSBACmdHasNotBindingSurfaceStateProgrammed) {
using STATE_BASE_ADDRESS = typename FamilyType::STATE_BASE_ADDRESS;
DebugManager.flags.UseBindlessBuffers.set(1);
DebugManager.flags.UseBindlessMode.set(1);
STATE_BASE_ADDRESS stateBaseAddress = {};
STATE_BASE_ADDRESS stateBaseAddressReference = {};

View File

@ -12,9 +12,9 @@ namespace NEO {
bool ApiSpecificConfig::getHeapConfiguration() {
return DebugManager.flags.UseExternalAllocatorForSshAndDsh.get();
}
bool ApiSpecificConfig::getBindelssConfiguration() {
if (DebugManager.flags.UseBindlessBuiltins.get() != -1) {
return DebugManager.flags.UseBindlessBuiltins.get();
bool ApiSpecificConfig::getBindlessConfiguration() {
if (DebugManager.flags.UseBindlessMode.get() != -1) {
return DebugManager.flags.UseBindlessMode.get();
} else {
return false;
}