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/Adapter.cpp b/src/dawn_native/Adapter.cpp
index 362b540..02f0966 100644
--- a/src/dawn_native/Adapter.cpp
+++ b/src/dawn_native/Adapter.cpp
@@ -56,6 +56,13 @@
return true;
}
+ WGPUDeviceProperties AdapterBase::GetAdapterProperties() const {
+ WGPUDeviceProperties adapterProperties = {};
+
+ mSupportedExtensions.InitializeDeviceProperties(&adapterProperties);
+ return adapterProperties;
+ }
+
DeviceBase* AdapterBase::CreateDevice(const DeviceDescriptor* descriptor) {
DeviceBase* result = nullptr;
diff --git a/src/dawn_native/Adapter.h b/src/dawn_native/Adapter.h
index f4cb28a..410a9a3 100644
--- a/src/dawn_native/Adapter.h
+++ b/src/dawn_native/Adapter.h
@@ -39,6 +39,7 @@
ExtensionsSet GetSupportedExtensions() const;
bool SupportsAllRequestedExtensions(
const std::vector<const char*>& requestedExtensions) const;
+ WGPUDeviceProperties GetAdapterProperties() const;
protected:
PCIInfo mPCIInfo = {};
diff --git a/src/dawn_native/DawnNative.cpp b/src/dawn_native/DawnNative.cpp
index c30c690..45fbb55 100644
--- a/src/dawn_native/DawnNative.cpp
+++ b/src/dawn_native/DawnNative.cpp
@@ -61,6 +61,10 @@
return supportedExtensionsSet.GetEnabledExtensionNames();
}
+ WGPUDeviceProperties Adapter::GetAdapterProperties() const {
+ return mImpl->GetAdapterProperties();
+ }
+
Adapter::operator bool() const {
return mImpl != nullptr;
}
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);
diff --git a/src/dawn_native/Extensions.h b/src/dawn_native/Extensions.h
index 274096f..6e6d82d 100644
--- a/src/dawn_native/Extensions.h
+++ b/src/dawn_native/Extensions.h
@@ -39,6 +39,7 @@
void EnableExtension(Extension extension);
bool IsEnabled(Extension extension) const;
std::vector<const char*> GetEnabledExtensionNames() const;
+ void InitializeDeviceProperties(WGPUDeviceProperties* properties) const;
};
const char* ExtensionEnumToName(Extension extension);
diff --git a/src/include/dawn_native/DawnNative.h b/src/include/dawn_native/DawnNative.h
index 6e1bd63..b9a1d0e 100644
--- a/src/include/dawn_native/DawnNative.h
+++ b/src/include/dawn_native/DawnNative.h
@@ -90,6 +90,7 @@
DeviceType GetDeviceType() const;
const PCIInfo& GetPCIInfo() const;
std::vector<const char*> GetSupportedExtensions() const;
+ WGPUDeviceProperties GetAdapterProperties() const;
explicit operator bool() const;