From b46c342f47b61119a0dc517ce6eb75eab3398504 Mon Sep 17 00:00:00 2001 From: Jay Kwak <82421531+jkwak-work@users.noreply.github.com> Date: Sun, 11 May 2025 08:13:25 +0000 Subject: Add a new option "-capability" to slang-test and render-test (#7054) --- tools/render-test/options.cpp | 13 +++++++++++++ tools/render-test/options.h | 2 ++ tools/render-test/slang-support.cpp | 9 +++++++++ tools/slang-test/options.cpp | 11 +++++++++++ tools/slang-test/options.h | 1 + tools/slang-test/slang-test-main.cpp | 12 ++++++++++++ 6 files changed, 48 insertions(+) (limited to 'tools') diff --git a/tools/render-test/options.cpp b/tools/render-test/options.cpp index e50166017..e4163b312 100644 --- a/tools/render-test/options.cpp +++ b/tools/render-test/options.cpp @@ -170,6 +170,19 @@ static rhi::DeviceType _toRenderType(Slang::RenderApiType apiType) { outOptions.generateSPIRVDirectly = false; } + else if (argValue == "-capability" || argValue == "-capabilities") + { + String capabilities; + SLANG_RETURN_ON_FAIL(reader.expectArg(capabilities)); + + List values; + StringUtil::split(capabilities.getUnownedSlice(), ',', values); + + for (const auto& value : values) + { + outOptions.capabilities.add(value); + } + } else if (argValue == "-only-startup") { outOptions.onlyStartup = true; diff --git a/tools/render-test/options.h b/tools/render-test/options.h index 4c7e6faa1..ff938e8c4 100644 --- a/tools/render-test/options.h +++ b/tools/render-test/options.h @@ -95,6 +95,8 @@ struct Options bool skipSPIRVValidation = false; + Slang::List capabilities; + Options() { downstreamArgs.addName("slang"); } static SlangResult parse( diff --git a/tools/render-test/slang-support.cpp b/tools/render-test/slang-support.cpp index c54abb1f8..2f39ed078 100644 --- a/tools/render-test/slang-support.cpp +++ b/tools/render-test/slang-support.cpp @@ -211,6 +211,15 @@ static SlangResult _compileProgramImpl( sessionOptionEntries.add(entry); } + for (auto& capability : options.capabilities) + { + slang::CompilerOptionEntry entry; + entry.name = slang::CompilerOptionName::Capability; + entry.value.kind = slang::CompilerOptionValueKind::String; + entry.value.stringValue0 = capability.getBuffer(); + sessionOptionEntries.add(entry); + } + sessionDesc.compilerOptionEntryCount = sessionOptionEntries.getCount(); sessionDesc.compilerOptionEntries = sessionOptionEntries.getBuffer(); diff --git a/tools/slang-test/options.cpp b/tools/slang-test/options.cpp index da8702031..6be590ef2 100644 --- a/tools/slang-test/options.cpp +++ b/tools/slang-test/options.cpp @@ -87,6 +87,7 @@ static bool _isSubCommand(const char* arg) " -use-shared-library Run tests in-process using shared library\n" " -use-test-server Run tests using test server\n" " -use-fully-isolated-test-server Run each test in isolated server\n" + " -capability Compile with the given capability\n" "\n" "Output modes:\n" " -appveyor Use AppVeyor output format\n" @@ -359,6 +360,16 @@ static bool _isSubCommand(const char* arg) { optionsOut->emitSPIRVDirectly = false; } + else if (strcmp(arg, "-capability") == 0) + { + if (argCursor == argEnd) + { + stdError.print("error: expected operand for '%s'\n", arg); + showHelp(stdError); + return SLANG_FAIL; + } + optionsOut->capabilities.add(*argCursor++); + } else if (strcmp(arg, "-expected-failure-list") == 0) { if (argCursor == argEnd) diff --git a/tools/slang-test/options.h b/tools/slang-test/options.h index bd8ee5499..7fda33198 100644 --- a/tools/slang-test/options.h +++ b/tools/slang-test/options.h @@ -123,6 +123,7 @@ struct Options bool emitSPIRVDirectly = true; + Slang::HashSet capabilities; Slang::HashSet expectedFailureList; /// Parse the args, report any errors into stdError, and write the results into optionsOut diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 42432e328..92e50737e 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -1583,6 +1583,12 @@ static SlangResult _initSlangCompiler(TestContext* context, CommandLine& ioCmdLi ioCmdLine.addArgIfNotFound("-verbose-paths"); } + for (auto& capability : context->options.capabilities) + { + ioCmdLine.addArg("-capability"); + ioCmdLine.addArg(capability.getBuffer()); + } + // Look for definition of a slot { @@ -3382,6 +3388,12 @@ static void _addRenderTestOptions(const Options& options, CommandLine& ioCmdLine { ioCmdLine.addArg("-emit-spirv-via-glsl"); } + + for (auto capability : options.capabilities) + { + ioCmdLine.addArg("-capability"); + ioCmdLine.addArg(capability); + } } static SlangResult _extractProfileTime(const UnownedStringSlice& text, double& timeOut) -- cgit v1.2.3