diff options
| author | cheneym2 <acheney@nvidia.com> | 2025-02-19 09:08:57 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-19 14:08:57 +0000 |
| commit | 0959d7ebeb6932b1949a4be10e5c472327006352 (patch) | |
| tree | 851cc988f590c472954229824781cfe9519d0801 | |
| parent | 12d09b5a6cb9e921aace1bec484c76244e9afa94 (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.cpp | 4 | ||||
| -rw-r--r-- | tools/render-test/options.h | 2 | ||||
| -rw-r--r-- | tools/render-test/render-test-main.cpp | 8 | ||||
| -rw-r--r-- | tools/slang-test/options.cpp | 4 | ||||
| -rw-r--r-- | tools/slang-test/options.h | 3 | ||||
| -rw-r--r-- | tools/slang-test/slang-test-main.cpp | 41 |
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; } |
