summaryrefslogtreecommitdiff
path: root/tools/slang-test
diff options
context:
space:
mode:
Diffstat (limited to 'tools/slang-test')
-rw-r--r--tools/slang-test/options.cpp39
-rw-r--r--tools/slang-test/options.h8
-rw-r--r--tools/slang-test/slang-test-main.cpp19
-rw-r--r--tools/slang-test/test-context.h4
4 files changed, 47 insertions, 23 deletions
diff --git a/tools/slang-test/options.cpp b/tools/slang-test/options.cpp
index da4f9cffe..aa538e75e 100644
--- a/tools/slang-test/options.cpp
+++ b/tools/slang-test/options.cpp
@@ -88,6 +88,8 @@ static bool _isSubCommand(const char* arg)
" -use-test-server Run tests using test server\n"
" -use-fully-isolated-test-server Run each test in isolated server\n"
" -capability <name> Compile with the given capability\n"
+ " -enable-debug-layers [true|false] Enable or disable Validation Layer for Vulkan\n"
+ " and Debug Device for DX\n"
#if _DEBUG
" -disable-debug-layers Disable the debug layers (default enabled in debug "
"build)\n"
@@ -120,6 +122,19 @@ static bool _isSubCommand(const char* arg)
char const* const* argCursor = argv;
char const* const* argEnd = argCursor + argCount;
+#if _DEBUG
+ // Enabling debug layers by default in debug builds.
+ // For DX12 it will use the debug layer, for Vulkan it will enable validation layers.
+ //
+ // CI/CD will explicitly disable this until we address all of VUID errors.
+ // https://github.com/shader-slang/slang/issues/4798
+ //
+ // When you run the Debug build locally, you may see more errors if not disabled with
+ // '-enable-debug-layers false'.
+ //
+ optionsOut->enableDebugLayers = true;
+#endif
+
// first argument is the application name
if (argCursor != argEnd)
{
@@ -410,10 +425,32 @@ static bool _isSubCommand(const char* arg)
{
optionsOut->skipReferenceImageGeneration = true;
}
+ else if (strcmp(arg, "-enable-debug-layers") == 0)
+ {
+ optionsOut->enableDebugLayers = true;
+
+ if (argCursor == argEnd)
+ {
+ stdError.print("error: expected operand for '%s'\n", arg);
+ showHelp(stdError);
+ return SLANG_FAIL;
+ }
+
+ // Check for false variants
+ const char* value = *argCursor++;
+ if (value[0] == 'f' || value[0] == 'F' || value[0] == 'n' || value[0] == 'N' ||
+ value[0] == '0' ||
+ ((value[0] == 'o' || value[0] == 'O') && (value[1] == 'f' || value[1] == 'F')))
+ {
+ optionsOut->enableDebugLayers = false;
+ }
+ }
#if _DEBUG
else if (strcmp(arg, "-disable-debug-layers") == 0)
{
- optionsOut->debugLayerEnabled = false;
+ stdError.print("warning: '-disable-debug-layers' is deprecated, use "
+ "'-enable-debug-layers false'\n");
+ optionsOut->enableDebugLayers = false;
}
#endif
else
diff --git a/tools/slang-test/options.h b/tools/slang-test/options.h
index 6e408374e..b2f71d3e3 100644
--- a/tools/slang-test/options.h
+++ b/tools/slang-test/options.h
@@ -84,13 +84,7 @@ struct Options
bool dumpOutputOnFailure = false;
// When true it will run with debug layer (e.g. vulkan validation layer)
-#if _DEBUG
- // Default is true for debug build
- bool debugLayerEnabled = true;
-#else
- // Default is false for release build
- bool debugLayerEnabled = false;
-#endif
+ bool enableDebugLayers = false;
// Set the default spawn type to use
// Having tests isolated, slows down testing considerably, so using UseSharedLibrary is the most
diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp
index 72af73cc1..f0a140549 100644
--- a/tools/slang-test/slang-test-main.cpp
+++ b/tools/slang-test/slang-test-main.cpp
@@ -3394,6 +3394,11 @@ static void _addRenderTestOptions(const Options& options, CommandLine& ioCmdLine
ioCmdLine.addArg("-capability");
ioCmdLine.addArg(capability);
}
+
+ if (options.enableDebugLayers)
+ {
+ ioCmdLine.addArg("-enable-debug-layers");
+ }
}
static SlangResult _extractProfileTime(const UnownedStringSlice& text, double& timeOut)
@@ -3602,17 +3607,6 @@ TestResult runComputeComparisonImpl(
auto actualOutputFile = outputStem + ".actual.txt";
cmdLine.addArg(actualOutputFile);
-#if _DEBUG
- // When using test server, any validation warning printed from the backend
- // gets misinterpreted as the result from the test.
- // This is due to the limitation that Slang RPC implementation expects only
- // one time communication.
- if (context->options.debugLayerEnabled && input.spawnType != SpawnType::UseTestServer)
- {
- cmdLine.addArg("-enable-debug-layers");
- }
-#endif
-
if (context->isExecuting())
{
// clear the stale actual output file first. This will allow us to detect error if
@@ -4705,7 +4699,7 @@ static SlangResult runUnitTestModule(
unitTestContext.slangGlobalSession = context->getSession();
unitTestContext.workDirectory = "";
unitTestContext.enabledApis = context->options.enabledApis;
- unitTestContext.enableDebugLayers = context->options.debugLayerEnabled;
+ unitTestContext.enableDebugLayers = context->options.enableDebugLayers;
unitTestContext.executableDirectory = context->exeDirectoryPath.getBuffer();
auto testCount = testModule->getTestCount();
@@ -4749,6 +4743,7 @@ static SlangResult runUnitTestModule(
{
TestServerProtocol::ExecuteUnitTestArgs args;
args.enabledApis = context->options.enabledApis;
+ args.enableDebugLayers = context->options.enableDebugLayers;
args.moduleName = moduleName;
args.testName = test.testName;
diff --git a/tools/slang-test/test-context.h b/tools/slang-test/test-context.h
index 6720cd648..e760e8dda 100644
--- a/tools/slang-test/test-context.h
+++ b/tools/slang-test/test-context.h
@@ -180,9 +180,7 @@ public:
std::mutex mutex;
Slang::RefPtr<Slang::JSONRPCConnection> m_languageServerConnection;
- bool isRetry;
- bool enableDebugLayers;
-
+ bool isRetry = false;
std::mutex mutexFailedTests;
Slang::List<Slang::RefPtr<FileTestInfo>> failedFileTests;
Slang::List<Slang::String> failedUnitTests;