Implement querying WGPUDeviceProperties from dawn_native::Adapter

This patch adds an interface GetAdapterProperties() on Adapter which can
directly return a WGPUDeviceProperties object that includes the
information of the adapter.

BUG=chromium:996713

Change-Id: I9a7b1512d259761e198dfac3eafa718171d47241
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13340
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn_native/Extensions.cpp b/src/dawn_native/Extensions.cpp
index 2de7a85..a2b5a9d 100644
--- a/src/dawn_native/Extensions.cpp
+++ b/src/dawn_native/Extensions.cpp
@@ -24,6 +24,7 @@
         struct ExtensionEnumAndInfo {
             Extension extension;
             ExtensionInfo info;
+            bool WGPUDeviceProperties::*memberInWGPUDeviceProperties;
         };
 
         using ExtensionEnumAndInfoList =
@@ -32,7 +33,8 @@
         static constexpr ExtensionEnumAndInfoList kExtensionNameAndInfoList = {
             {{Extension::TextureCompressionBC,
               {"texture_compression_bc", "Support Block Compressed (BC) texture formats",
-               "https://bugs.chromium.org/p/dawn/issues/detail?id=42"}}}};
+               "https://bugs.chromium.org/p/dawn/issues/detail?id=42"},
+              &WGPUDeviceProperties::textureCompressionBC}}};
 
     }  // anonymous namespace
 
@@ -60,6 +62,14 @@
         return enabledExtensionNames;
     }
 
+    void ExtensionsSet::InitializeDeviceProperties(WGPUDeviceProperties* properties) const {
+        ASSERT(properties != nullptr);
+
+        for (uint32_t i : IterateBitSet(extensionsBitSet)) {
+            properties->*(kExtensionNameAndInfoList[i].memberInWGPUDeviceProperties) = true;
+        }
+    }
+
     const char* ExtensionEnumToName(Extension extension) {
         ASSERT(extension != Extension::InvalidEnum);