dawn_node: add "dawn-backend=<value>" flag

As an alternative to setting the "DAWNNODE_BACKEND" env var.

Bug: dawn:1163
Change-Id: I33ace14e7603b97caf7286a109a31160853f62e0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/66961
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
Antonio Maiorano 2021-10-21 20:56:34 +00:00 committed by Dawn LUCI CQ
parent 1d55306255
commit 821f1a8a60

View File

@ -19,7 +19,7 @@
#include <cstdlib> #include <cstdlib>
namespace { namespace {
std::string getEnvVar(const char* varName) { std::string GetEnvVar(const char* varName) {
#if defined(_WIN32) #if defined(_WIN32)
// Use _dupenv_s to avoid unsafe warnings about std::getenv // Use _dupenv_s to avoid unsafe warnings about std::getenv
char* value = nullptr; char* value = nullptr;
@ -81,27 +81,39 @@ namespace wgpu { namespace binding {
#endif #endif
auto targetBackendType = defaultBackendType; auto targetBackendType = defaultBackendType;
std::string forceBackend;
// Check for override from env var // Check for override from env var
std::string envVar = getEnvVar("DAWNNODE_BACKEND"); if (std::string envVar = GetEnvVar("DAWNNODE_BACKEND"); !envVar.empty()) {
std::transform(envVar.begin(), envVar.end(), envVar.begin(), forceBackend = envVar;
}
// Check for override from flag
if (auto f = flags_.Get("dawn-backend")) {
forceBackend = *f;
}
std::transform(forceBackend.begin(), forceBackend.end(), forceBackend.begin(),
[](char c) { return std::tolower(c); }); [](char c) { return std::tolower(c); });
if (envVar == "null") {
targetBackendType = wgpu::BackendType::Null; if (!forceBackend.empty()) {
} else if (envVar == "webgpu") { if (forceBackend == "null") {
targetBackendType = wgpu::BackendType::WebGPU; targetBackendType = wgpu::BackendType::Null;
} else if (envVar == "d3d11") { } else if (forceBackend == "webgpu") {
targetBackendType = wgpu::BackendType::D3D11; targetBackendType = wgpu::BackendType::WebGPU;
} else if (envVar == "d3d12" || envVar == "d3d") { } else if (forceBackend == "d3d11") {
targetBackendType = wgpu::BackendType::D3D12; targetBackendType = wgpu::BackendType::D3D11;
} else if (envVar == "metal") { } else if (forceBackend == "d3d12" || forceBackend == "d3d") {
targetBackendType = wgpu::BackendType::Metal; targetBackendType = wgpu::BackendType::D3D12;
} else if (envVar == "vulkan" || envVar == "vk") { } else if (forceBackend == "metal") {
targetBackendType = wgpu::BackendType::Vulkan; targetBackendType = wgpu::BackendType::Metal;
} else if (envVar == "opengl" || envVar == "gl") { } else if (forceBackend == "vulkan" || forceBackend == "vk") {
targetBackendType = wgpu::BackendType::OpenGL; targetBackendType = wgpu::BackendType::Vulkan;
} else if (envVar == "opengles" || envVar == "gles") { } else if (forceBackend == "opengl" || forceBackend == "gl") {
targetBackendType = wgpu::BackendType::OpenGLES; targetBackendType = wgpu::BackendType::OpenGL;
} else if (forceBackend == "opengles" || forceBackend == "gles") {
targetBackendType = wgpu::BackendType::OpenGLES;
}
} }
// Default to first adapter if we don't find a match // Default to first adapter if we don't find a match