dawn/node: Add experimental GPUAdapterInfo.isFallbackAdapter attribute

Spec PR: https://github.com/gpuweb/gpuweb/pull/5099

Bug: 403172841
Change-Id: Icda3d72cae665b0759ae7af674a22c383461c425
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/230674
Commit-Queue: Fr <beaufort.francois@gmail.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/node/binding/GPUAdapterInfo.cpp b/src/dawn/node/binding/GPUAdapterInfo.cpp
index 81dab1c..a1ae894 100644
--- a/src/dawn/node/binding/GPUAdapterInfo.cpp
+++ b/src/dawn/node/binding/GPUAdapterInfo.cpp
@@ -109,7 +109,8 @@
       device_(NormalizeIdentifierString(info.device)),
       description_(info.description),
       subgroup_min_size_(info.subgroupMinSize),
-      subgroup_max_size_(info.subgroupMaxSize) {
+      subgroup_max_size_(info.subgroupMaxSize),
+      is_fallback_adapter_(info.adapterType == wgpu::AdapterType::CPU) {
     auto* next = info.nextInChain;
     while (next) {
         if (next->sType == SType::AdapterPropertiesSubgroupMatrixConfigs) {
@@ -147,6 +148,10 @@
     return subgroup_max_size_;
 }
 
+bool GPUAdapterInfo::getIsFallbackAdapter(Napi::Env) {
+    return is_fallback_adapter_;
+}
+
 GPUAdapterInfo::SubgroupMatrixConfigs GPUAdapterInfo::getSubgroupMatrixConfigs(Napi::Env env) {
     SubgroupMatrixConfigs out;
     out.reserve(subgroup_matrix_configs_.size());
diff --git a/src/dawn/node/binding/GPUAdapterInfo.h b/src/dawn/node/binding/GPUAdapterInfo.h
index d46f330..b300332 100644
--- a/src/dawn/node/binding/GPUAdapterInfo.h
+++ b/src/dawn/node/binding/GPUAdapterInfo.h
@@ -51,6 +51,7 @@
     std::string getDescription(Napi::Env) override;
     uint32_t getSubgroupMinSize(Napi::Env) override;
     uint32_t getSubgroupMaxSize(Napi::Env) override;
+    bool getIsFallbackAdapter(Napi::Env) override;
 
     using SubgroupMatrixConfigs =
         interop::FrozenArray<interop::Interface<interop::GPUSubgroupMatrixConfig>>;
@@ -63,6 +64,7 @@
     std::string description_;
     uint32_t subgroup_min_size_;
     uint32_t subgroup_max_size_;
+    bool is_fallback_adapter_;
     std::vector<wgpu::SubgroupMatrixConfig> subgroup_matrix_configs_;
 };
 
diff --git a/src/dawn/node/interop/DawnExtensions.idl b/src/dawn/node/interop/DawnExtensions.idl
index 39ed74a..2d535f2 100644
--- a/src/dawn/node/interop/DawnExtensions.idl
+++ b/src/dawn/node/interop/DawnExtensions.idl
@@ -53,6 +53,7 @@
 };
 
 interface GPUAdapterInfo {
+    readonly attribute boolean isFallbackAdapter;
     [SameObject] readonly attribute FrozenArray<GPUSubgroupMatrixConfig> subgroupMatrixConfigs;
 };