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;