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>
diff --git a/src/dawn_node/binding/GPU.cpp b/src/dawn_node/binding/GPU.cpp
index 52b5f9c..e6e03c4 100644
--- a/src/dawn_node/binding/GPU.cpp
+++ b/src/dawn_node/binding/GPU.cpp
@@ -19,7 +19,7 @@
#include <cstdlib>
namespace {
- std::string getEnvVar(const char* varName) {
+ std::string GetEnvVar(const char* varName) {
#if defined(_WIN32)
// Use _dupenv_s to avoid unsafe warnings about std::getenv
char* value = nullptr;
@@ -81,27 +81,39 @@
#endif
auto targetBackendType = defaultBackendType;
+ std::string forceBackend;
// Check for override from env var
- std::string envVar = getEnvVar("DAWNNODE_BACKEND");
- std::transform(envVar.begin(), envVar.end(), envVar.begin(),
+ if (std::string envVar = GetEnvVar("DAWNNODE_BACKEND"); !envVar.empty()) {
+ 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); });
- if (envVar == "null") {
- targetBackendType = wgpu::BackendType::Null;
- } else if (envVar == "webgpu") {
- targetBackendType = wgpu::BackendType::WebGPU;
- } else if (envVar == "d3d11") {
- targetBackendType = wgpu::BackendType::D3D11;
- } else if (envVar == "d3d12" || envVar == "d3d") {
- targetBackendType = wgpu::BackendType::D3D12;
- } else if (envVar == "metal") {
- targetBackendType = wgpu::BackendType::Metal;
- } else if (envVar == "vulkan" || envVar == "vk") {
- targetBackendType = wgpu::BackendType::Vulkan;
- } else if (envVar == "opengl" || envVar == "gl") {
- targetBackendType = wgpu::BackendType::OpenGL;
- } else if (envVar == "opengles" || envVar == "gles") {
- targetBackendType = wgpu::BackendType::OpenGLES;
+
+ if (!forceBackend.empty()) {
+ if (forceBackend == "null") {
+ targetBackendType = wgpu::BackendType::Null;
+ } else if (forceBackend == "webgpu") {
+ targetBackendType = wgpu::BackendType::WebGPU;
+ } else if (forceBackend == "d3d11") {
+ targetBackendType = wgpu::BackendType::D3D11;
+ } else if (forceBackend == "d3d12" || forceBackend == "d3d") {
+ targetBackendType = wgpu::BackendType::D3D12;
+ } else if (forceBackend == "metal") {
+ targetBackendType = wgpu::BackendType::Metal;
+ } else if (forceBackend == "vulkan" || forceBackend == "vk") {
+ targetBackendType = wgpu::BackendType::Vulkan;
+ } else if (forceBackend == "opengl" || forceBackend == "gl") {
+ 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