summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcheneym2 <acheney@nvidia.com>2025-02-19 09:08:57 -0500
committerGitHub <noreply@github.com>2025-02-19 14:08:57 +0000
commit0959d7ebeb6932b1949a4be10e5c472327006352 (patch)
tree851cc988f590c472954229824781cfe9519d0801
parent12d09b5a6cb9e921aace1bec484c76244e9afa94 (diff)
Show adapter info in slang-test (#6388)
When -show-adapter-info is provided to slang-test, there is a subsequent pass over all available APIs to ask render-api to show which adapter will be used. > .\slang-test.exe -show-adapter-info Supported backends: fxc dxc glslang spirv-dis clang visualstudio genericcpp nvrtc llvm spirv-opt tint Check vk,vulkan: Supported Check dx12,d3d12: Supported Check dx11,d3d11: Supported Check cuda: Supported Check wgpu,webgpu: Supported Adapter Information for Available APIs: vk,vulkan: Using graphics adapter: NVIDIA RTX A3000 Laptop GPU dx12,d3d12: Using graphics adapter: NVIDIA RTX A3000 Laptop GPU dx11,d3d11: Using graphics adapter: Intel(R) UHD Graphics cpu: cuda: wgpu,webgpu: Using graphics adapter: default passed test: 'tests/autodiff/arithmetic-jvp.slang (dx11)' ... closes #5600 * format code --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
-rw-r--r--tools/render-test/options.cpp4
-rw-r--r--tools/render-test/options.h2
-rw-r--r--tools/render-test/render-test-main.cpp8
-rw-r--r--tools/slang-test/options.cpp4
-rw-r--r--tools/slang-test/options.h3
-rw-r--r--tools/slang-test/slang-test-main.cpp41
6 files changed, 62 insertions, 0 deletions
diff --git a/tools/render-test/options.cpp b/tools/render-test/options.cpp
index 11b291c68..e0b38bf31 100644
--- a/tools/render-test/options.cpp
+++ b/tools/render-test/options.cpp
@@ -257,6 +257,10 @@ static rhi::DeviceType _toRenderType(Slang::RenderApiType apiType)
{
outOptions.dx12Experimental = true;
}
+ else if (argValue == "-show-adapter-info")
+ {
+ outOptions.showAdapterInfo = true;
+ }
else
{
// Lookup
diff --git a/tools/render-test/options.h b/tools/render-test/options.h
index c95edee21..f041c3e84 100644
--- a/tools/render-test/options.h
+++ b/tools/render-test/options.h
@@ -91,6 +91,8 @@ struct Options
bool dx12Experimental = false;
+ bool showAdapterInfo = false;
+
Options() { downstreamArgs.addName("slang"); }
static SlangResult parse(
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp
index b0d6c44e0..d3d4a764c 100644
--- a/tools/render-test/render-test-main.cpp
+++ b/tools/render-test/render-test-main.cpp
@@ -1450,6 +1450,14 @@ static SlangResult _innerMain(
}
}
+ // Print adapter info after device creation but before any other operations
+ if (options.showAdapterInfo)
+ {
+ auto info = device->getDeviceInfo();
+ auto out = stdWriters->getOut();
+ out.print("Using graphics adapter: %s\n", info.adapterName);
+ }
+
// If the only test is we can startup, then we are done
if (options.onlyStartup)
{
diff --git a/tools/slang-test/options.cpp b/tools/slang-test/options.cpp
index 9dd831afa..b3f4bdc10 100644
--- a/tools/slang-test/options.cpp
+++ b/tools/slang-test/options.cpp
@@ -336,6 +336,10 @@ static bool _isSubCommand(const char* arg)
}
optionsOut->testDir = *argCursor++;
}
+ else if (strcmp(arg, "-show-adapter-info") == 0)
+ {
+ optionsOut->showAdapterInfo = true;
+ }
else
{
stdError.print("unknown option '%s'\n", arg);
diff --git a/tools/slang-test/options.h b/tools/slang-test/options.h
index 912e28465..a127d1050 100644
--- a/tools/slang-test/options.h
+++ b/tools/slang-test/options.h
@@ -115,6 +115,9 @@ struct Options
// The adapter to use. If empty will match first found adapter.
Slang::String adapter;
+ // If true, print detailed adapter information
+ bool showAdapterInfo = false;
+
// Maximum number of test servers to run.
int serverCount = 1;
diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp
index 5db82fcb7..10bc99017 100644
--- a/tools/slang-test/slang-test-main.cpp
+++ b/tools/slang-test/slang-test-main.cpp
@@ -1391,6 +1391,47 @@ static RenderApiFlags _getAvailableRenderApiFlags(TestContext* context)
}
}
+ // After determining available APIs, print adapter info for each one
+ if (context->options.showAdapterInfo && availableRenderApiFlags)
+ {
+ StdWriters::getOut().print("\nAdapter Information for Available APIs:\n");
+ for (int i = 0; i < int(RenderApiType::CountOf); ++i)
+ {
+ const RenderApiType apiType = RenderApiType(i);
+ const RenderApiFlags apiFlag = RenderApiFlags(1) << int(apiType);
+
+ if (availableRenderApiFlags & apiFlag)
+ {
+ // Create command line to query adapter info
+ CommandLine cmdLine;
+ cmdLine.setExecutableLocation(
+ ExecutableLocation(context->options.binDir, "render-test"));
+
+ // Add the API type
+ StringBuilder builder;
+ builder << "-" << RenderApiUtil::getApiName(apiType);
+ cmdLine.addArg(builder);
+
+ // Add flags to show adapter info and only startup
+ cmdLine.addArg("-show-adapter-info");
+ cmdLine.addArg("-only-startup");
+
+ // Run render-test to get adapter info
+ ExecuteResult exeRes;
+ if (SLANG_SUCCEEDED(
+ spawnAndWaitSharedLibrary(context, "adapter-info", cmdLine, exeRes)))
+ {
+ // Output the adapter info
+ StdWriters::getOut().print(
+ "\n%s:\n%s",
+ RenderApiUtil::getApiName(apiType).begin(),
+ exeRes.standardOutput.getBuffer());
+ }
+ }
+ }
+ StdWriters::getOut().print("\n");
+ }
+
context->availableRenderApiFlags = availableRenderApiFlags;
context->isAvailableRenderApiFlagsValid = true;
}