Add AdapterBase::APIGetInstance
This method is useful for Chrome to query the Instance from Device
by calling device.GetAdapter().GetInstance(). Then
instance.ProcessEvents() can be used to poll for events instead of
device.Tick().
Bug: dawn:1726
Change-Id: I45b5760bc07869a191ae3fd02ec25b99d78b068b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/125360
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/dawn.json b/dawn.json
index 1df0d7c..8913c2c 100644
--- a/dawn.json
+++ b/dawn.json
@@ -79,6 +79,11 @@
"category": "object",
"methods": [
{
+ "name": "get instance",
+ "tags": ["dawn"],
+ "returns": "instance"
+ },
+ {
"name": "get limits",
"returns": "bool",
"args": [
diff --git a/dawn_wire.json b/dawn_wire.json
index 46cba66..d8c57e9 100644
--- a/dawn_wire.json
+++ b/dawn_wire.json
@@ -219,6 +219,7 @@
"TextureGetUsage"
],
"client_handwritten_commands": [
+ "AdapterGetInstance",
"BufferDestroy",
"BufferUnmap",
"DeviceCreateErrorBuffer",
diff --git a/src/dawn/native/Adapter.cpp b/src/dawn/native/Adapter.cpp
index a60e900..376956c 100644
--- a/src/dawn/native/Adapter.cpp
+++ b/src/dawn/native/Adapter.cpp
@@ -83,6 +83,13 @@
return {};
}
+InstanceBase* AdapterBase::APIGetInstance() const {
+ auto instance = GetInstance();
+ ASSERT(instance != nullptr);
+ instance->Reference();
+ return instance;
+}
+
bool AdapterBase::APIGetLimits(SupportedLimits* limits) const {
return GetLimits(limits);
}
diff --git a/src/dawn/native/Adapter.h b/src/dawn/native/Adapter.h
index 9d0eb7c..2e88975 100644
--- a/src/dawn/native/Adapter.h
+++ b/src/dawn/native/Adapter.h
@@ -43,6 +43,7 @@
MaybeError Initialize();
// WebGPU API
+ InstanceBase* APIGetInstance() const;
bool APIGetLimits(SupportedLimits* limits) const;
void APIGetProperties(AdapterProperties* properties) const;
bool APIHasFeature(wgpu::FeatureName feature) const;
@@ -56,6 +57,9 @@
uint32_t GetDeviceId() const;
const gpu_info::DriverVersion& GetDriverVersion() const;
wgpu::BackendType GetBackendType() const;
+
+ // This method differs from APIGetInstance() in that it won't increase the ref count of the
+ // instance.
InstanceBase* GetInstance() const;
void ResetInternalDeviceForTesting();
diff --git a/src/dawn/wire/client/Adapter.cpp b/src/dawn/wire/client/Adapter.cpp
index 6edf63c..becca1c 100644
--- a/src/dawn/wire/client/Adapter.cpp
+++ b/src/dawn/wire/client/Adapter.cpp
@@ -127,6 +127,11 @@
return true;
}
+WGPUInstance Adapter::GetInstance() const {
+ dawn::ErrorLog() << "adapter.GetInstance not supported with dawn_wire.";
+ return nullptr;
+}
+
WGPUDevice Adapter::CreateDevice(const WGPUDeviceDescriptor*) {
dawn::ErrorLog() << "adapter.CreateDevice not supported with dawn_wire.";
return nullptr;
diff --git a/src/dawn/wire/client/Adapter.h b/src/dawn/wire/client/Adapter.h
index 9c4b36f..69e8fff 100644
--- a/src/dawn/wire/client/Adapter.h
+++ b/src/dawn/wire/client/Adapter.h
@@ -51,6 +51,7 @@
const WGPUFeatureName* features);
// Unimplementable. Only availale in dawn_native.
+ WGPUInstance GetInstance() const;
WGPUDevice CreateDevice(const WGPUDeviceDescriptor*);
private: