[node] populate subgroup sizes for device.adapterInfo

Also, always populate subgroup sizes in adapter info.
Rely on backends always supplying a value.

Bug: 354751907
Change-Id: I628a87aea57982ed5a903e4b9697c74493cedcc8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/218294
Auto-Submit: David Neto <dneto@google.com>
Reviewed-by: Alan Baker <alanbaker@google.com>
Commit-Queue: Alan Baker <alanbaker@google.com>
diff --git a/src/dawn/node/binding/GPUAdapter.cpp b/src/dawn/node/binding/GPUAdapter.cpp
index 3f7aa6c..637c41f 100644
--- a/src/dawn/node/binding/GPUAdapter.cpp
+++ b/src/dawn/node/binding/GPUAdapter.cpp
@@ -125,11 +125,7 @@
 interop::Interface<interop::GPUAdapterInfo> GPUAdapter::getInfo(Napi::Env env) {
     wgpu::AdapterInfo info = {};
     wgpu::AdapterPropertiesSubgroups subgroupProperties = {};
-
-    wgpu::Adapter wgpuAdapter = adapter_.Get();
-    if (wgpuAdapter.HasFeature(FeatureName::Subgroups)) {
-        info.nextInChain = &subgroupProperties;
-    }
+    info.nextInChain = &subgroupProperties;
 
     adapter_.GetInfo(&info);
 
diff --git a/src/dawn/node/binding/GPUAdapterInfo.cpp b/src/dawn/node/binding/GPUAdapterInfo.cpp
index 4aeca33..e8f9446 100644
--- a/src/dawn/node/binding/GPUAdapterInfo.cpp
+++ b/src/dawn/node/binding/GPUAdapterInfo.cpp
@@ -45,7 +45,7 @@
         if (chain->sType == wgpu::SType::AdapterPropertiesSubgroups) {
             subgroup_properties_ = *static_cast<wgpu::AdapterPropertiesSubgroups*>(chain);
             // Clear to prevent using invalid pointer.
-            subgroup_properties_->nextInChain = nullptr;
+            subgroup_properties_.nextInChain = nullptr;
             break;
         }
     }
@@ -68,17 +68,11 @@
 }
 
 std::variant<uint32_t, interop::UndefinedType> GPUAdapterInfo::getSubgroupMinSize(Napi::Env) {
-    if (subgroup_properties_.has_value()) {
-        return subgroup_properties_->subgroupMinSize;
-    }
-    return interop::Undefined;
+    return subgroup_properties_.subgroupMinSize;
 }
 
 std::variant<uint32_t, interop::UndefinedType> GPUAdapterInfo::getSubgroupMaxSize(Napi::Env) {
-    if (subgroup_properties_.has_value()) {
-        return subgroup_properties_->subgroupMaxSize;
-    }
-    return interop::Undefined;
+    return subgroup_properties_.subgroupMaxSize;
 }
 
 }  // namespace wgpu::binding
diff --git a/src/dawn/node/binding/GPUAdapterInfo.h b/src/dawn/node/binding/GPUAdapterInfo.h
index d5e84c4..1eb81cb 100644
--- a/src/dawn/node/binding/GPUAdapterInfo.h
+++ b/src/dawn/node/binding/GPUAdapterInfo.h
@@ -56,7 +56,7 @@
     std::string architecture_;
     std::string device_;
     std::string description_;
-    std::optional<wgpu::AdapterPropertiesSubgroups> subgroup_properties_;
+    wgpu::AdapterPropertiesSubgroups subgroup_properties_;
 };
 
 }  // namespace wgpu::binding
diff --git a/src/dawn/node/binding/GPUDevice.cpp b/src/dawn/node/binding/GPUDevice.cpp
index b64475e..ffadb35 100644
--- a/src/dawn/node/binding/GPUDevice.cpp
+++ b/src/dawn/node/binding/GPUDevice.cpp
@@ -211,6 +211,8 @@
 
 interop::Interface<interop::GPUAdapterInfo> GPUDevice::getAdapterInfo(Napi::Env env) {
     wgpu::AdapterInfo adapterInfo = {};
+    wgpu::AdapterPropertiesSubgroups subgroupsProperties = {};
+    adapterInfo.nextInChain = &subgroupsProperties;
     device_.GetAdapterInfo(&adapterInfo);
 
     return interop::GPUAdapterInfo::Create<GPUAdapterInfo>(env, adapterInfo);