dawn_node: Error if the specified backend is not found
Defaulting to the 0'th adapter can silently use the Null adapter, which is no fun for anyone.
Bug tint:1354
Change-Id: I14e2379175cb90a48753bd81d096391d15d2dc22
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/75070
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_node/binding/GPU.cpp b/src/dawn_node/binding/GPU.cpp
index 50eb020..a13ed30 100644
--- a/src/dawn_node/binding/GPU.cpp
+++ b/src/dawn_node/binding/GPU.cpp
@@ -112,6 +112,9 @@
std::transform(forceBackend.begin(), forceBackend.end(), forceBackend.begin(),
[](char c) { return std::tolower(c); });
+ // Default to first adapter if a backend is not specified
+ size_t adapterIndex = 0;
+
if (!forceBackend.empty()) {
if (forceBackend == "null") {
targetBackendType = wgpu::BackendType::Null;
@@ -129,17 +132,24 @@
targetBackendType = wgpu::BackendType::OpenGL;
} else if (forceBackend == "opengles" || forceBackend == "gles") {
targetBackendType = wgpu::BackendType::OpenGLES;
+ } else {
+ promise.Reject("unknown backend '" + forceBackend + "'");
+ return promise;
}
- }
- // Default to first adapter if we don't find a match
- size_t adapterIndex = 0;
- for (size_t i = 0; i < adapters.size(); ++i) {
- wgpu::AdapterProperties props;
- adapters[i].GetProperties(&props);
- if (props.backendType == targetBackendType) {
- adapterIndex = i;
- break;
+ bool found = false;
+ for (size_t i = 0; i < adapters.size(); ++i) {
+ wgpu::AdapterProperties props;
+ adapters[i].GetProperties(&props);
+ if (props.backendType == targetBackendType) {
+ adapterIndex = i;
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ promise.Reject("backend '" + forceBackend + "' not found");
+ return promise;
}
}