dawn_wire: Make ApiProcs call into objects directly.
This CL modifies code generation so that the generated client procs call
the handwritten methods on client objects directly.
Previously the flow was:
- wgpuBarDoStuff
- ClientBarDoStuff
- ClientHandwrittenBarDoStuff
- client::Bar::DoStuff
With this CL the flow is:
- wgpuBarDoStuff
- ClientBarDoStuff
- client::Bar::DoStuff
This required adding Buffer creation methods on client::Device instead
of calling client::Buffer static methods directly.
Bug: dawn:445
Change-Id: I1b332b71ac7a03685afcf8fd0617d3d27da468cf
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/24062
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/generator/templates/dawn_wire/client/ApiProcs.cpp b/generator/templates/dawn_wire/client/ApiProcs.cpp
index a604a7f..00a207f 100644
--- a/generator/templates/dawn_wire/client/ApiProcs.cpp
+++ b/generator/templates/dawn_wire/client/ApiProcs.cpp
@@ -23,6 +23,7 @@
#include <vector>
namespace dawn_wire { namespace client {
+
namespace {
//* Outputs an rvalue that's the number of elements a pointer member points to.
@@ -176,8 +177,8 @@
}
{% endif %}
+ auto self = reinterpret_cast<{{as_wireType(type)}}>(cSelf);
{% if Suffix not in client_handwritten_commands %}
- auto self = reinterpret_cast<{{as_wireType(type)}}>(cSelf);
Device* device = self->device;
{{Suffix}}Cmd cmd;
@@ -202,9 +203,9 @@
return reinterpret_cast<{{as_cType(method.return_type.name)}}>(allocation->object.get());
{% endif %}
{% else %}
- return ClientHandwritten{{Suffix}}(cSelf
+ return self->{{method.name.CamelCase()}}(
{%- for arg in method.arguments -%}
- , {{as_varName(arg.name)}}
+ {%if not loop.first %}, {% endif %} {{as_varName(arg.name)}}
{%- endfor -%});
{% endif %}
}
@@ -235,6 +236,12 @@
{% endif %}
{% endfor %}
+ void ClientDeviceReference(WGPUDevice) {
+ }
+
+ void ClientDeviceRelease(WGPUDevice) {
+ }
+
namespace {
WGPUInstance ClientCreateInstance(WGPUInstanceDescriptor const* descriptor) {
UNREACHABLE();
diff --git a/src/dawn_wire/BUILD.gn b/src/dawn_wire/BUILD.gn
index aa8b0c0..8b33d5c 100644
--- a/src/dawn_wire/BUILD.gn
+++ b/src/dawn_wire/BUILD.gn
@@ -64,7 +64,6 @@
"WireDeserializeAllocator.h",
"WireServer.cpp",
"client/ApiObjects.h",
- "client/ApiProcs.cpp",
"client/Buffer.cpp",
"client/Buffer.h",
"client/Client.cpp",
diff --git a/src/dawn_wire/CMakeLists.txt b/src/dawn_wire/CMakeLists.txt
index 579d46a..e7927fa 100644
--- a/src/dawn_wire/CMakeLists.txt
+++ b/src/dawn_wire/CMakeLists.txt
@@ -30,7 +30,6 @@
"WireDeserializeAllocator.h"
"WireServer.cpp"
"client/ApiObjects.h"
- "client/ApiProcs.cpp"
"client/Buffer.cpp"
"client/Buffer.h"
"client/Client.cpp"
diff --git a/src/dawn_wire/client/ApiProcs.cpp b/src/dawn_wire/client/ApiProcs.cpp
deleted file mode 100644
index db4365b..0000000
--- a/src/dawn_wire/client/ApiProcs.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2019 The Dawn Authors
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "dawn_wire/client/ApiObjects.h"
-#include "dawn_wire/client/ApiProcs_autogen.h"
-#include "dawn_wire/client/Client.h"
-
-namespace dawn_wire { namespace client {
-
- void ClientHandwrittenBufferMapReadAsync(WGPUBuffer cBuffer,
- WGPUBufferMapReadCallback callback,
- void* userdata) {
- Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
- buffer->MapReadAsync(callback, userdata);
- }
-
- void ClientHandwrittenBufferMapWriteAsync(WGPUBuffer cBuffer,
- WGPUBufferMapWriteCallback callback,
- void* userdata) {
- Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
- buffer->MapWriteAsync(callback, userdata);
- }
-
- void ClientHandwrittenBufferSetSubData(WGPUBuffer cBuffer,
- uint64_t start,
- uint64_t count,
- const void* data) {
- Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
- buffer->SetSubData(start, count, data);
- }
-
- void* ClientHandwrittenBufferGetMappedRange(WGPUBuffer cBuffer) {
- Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
- return buffer->GetMappedRange();
- }
-
- const void* ClientHandwrittenBufferGetConstMappedRange(WGPUBuffer cBuffer) {
- Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
- return buffer->GetConstMappedRange();
- }
-
- void ClientHandwrittenBufferUnmap(WGPUBuffer cBuffer) {
- Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
- buffer->Unmap();
- }
-
- void ClientHandwrittenBufferDestroy(WGPUBuffer cBuffer) {
- Buffer* buffer = reinterpret_cast<Buffer*>(cBuffer);
- buffer->Destroy();
- }
-
- WGPUBuffer ClientHandwrittenDeviceCreateBuffer(WGPUDevice cDevice,
- const WGPUBufferDescriptor* descriptor) {
- Device* device = reinterpret_cast<Device*>(cDevice);
- return Buffer::Create(device, descriptor);
- }
-
- WGPUCreateBufferMappedResult ClientHandwrittenDeviceCreateBufferMapped(
- WGPUDevice cDevice,
- const WGPUBufferDescriptor* descriptor) {
- Device* device = reinterpret_cast<Device*>(cDevice);
- return Buffer::CreateMapped(device, descriptor);
- }
-
- void ClientHandwrittenDevicePushErrorScope(WGPUDevice cDevice, WGPUErrorFilter filter) {
- Device* device = reinterpret_cast<Device*>(cDevice);
- device->PushErrorScope(filter);
- }
-
- bool ClientHandwrittenDevicePopErrorScope(WGPUDevice cDevice,
- WGPUErrorCallback callback,
- void* userdata) {
- Device* device = reinterpret_cast<Device*>(cDevice);
- return device->RequestPopErrorScope(callback, userdata);
- }
-
- uint64_t ClientHandwrittenFenceGetCompletedValue(WGPUFence cSelf) {
- Fence* fence = reinterpret_cast<Fence*>(cSelf);
- return fence->GetCompletedValue();
- }
-
- void ClientHandwrittenFenceOnCompletion(WGPUFence cFence,
- uint64_t value,
- WGPUFenceOnCompletionCallback callback,
- void* userdata) {
- Fence* fence = reinterpret_cast<Fence*>(cFence);
- fence->OnCompletion(value, callback, userdata);
- }
-
- WGPUFence ClientHandwrittenQueueCreateFence(WGPUQueue cSelf,
- WGPUFenceDescriptor const* descriptor) {
- Queue* queue = reinterpret_cast<Queue*>(cSelf);
- return queue->CreateFence(descriptor);
- }
-
- void ClientHandwrittenQueueSignal(WGPUQueue cQueue, WGPUFence cFence, uint64_t signalValue) {
- Queue* queue = reinterpret_cast<Queue*>(cQueue);
- queue->Signal(cFence, signalValue);
- }
-
- void ClientHandwrittenQueueWriteBuffer(WGPUQueue cQueue,
- WGPUBuffer cBuffer,
- uint64_t bufferOffset,
- const void* data,
- size_t size) {
- Queue* queue = reinterpret_cast<Queue*>(cQueue);
- queue->WriteBuffer(cBuffer, bufferOffset, data, size);
- }
-
- void ClientDeviceReference(WGPUDevice) {
- }
-
- void ClientDeviceRelease(WGPUDevice) {
- }
-
- WGPUQueue ClientHandwrittenDeviceGetDefaultQueue(WGPUDevice cSelf) {
- Device* device = reinterpret_cast<Device*>(cSelf);
- return device->GetDefaultQueue();
- }
-
- void ClientHandwrittenDeviceSetUncapturedErrorCallback(WGPUDevice cSelf,
- WGPUErrorCallback callback,
- void* userdata) {
- Device* device = reinterpret_cast<Device*>(cSelf);
- device->SetUncapturedErrorCallback(callback, userdata);
- }
- void ClientHandwrittenDeviceSetDeviceLostCallback(WGPUDevice cSelf,
- WGPUDeviceLostCallback callback,
- void* userdata) {
- Device* device = reinterpret_cast<Device*>(cSelf);
- device->SetDeviceLostCallback(callback, userdata);
- }
-
-}} // namespace dawn_wire::client
diff --git a/src/dawn_wire/client/ClientDoers.cpp b/src/dawn_wire/client/ClientDoers.cpp
index 55818ba..8ec5e5a 100644
--- a/src/dawn_wire/client/ClientDoers.cpp
+++ b/src/dawn_wire/client/ClientDoers.cpp
@@ -43,7 +43,7 @@
bool Client::DoDevicePopErrorScopeCallback(uint64_t requestSerial,
WGPUErrorType errorType,
const char* message) {
- return mDevice->PopErrorScope(requestSerial, errorType, message);
+ return mDevice->OnPopErrorScopeCallback(requestSerial, errorType, message);
}
bool Client::DoBufferMapReadAsyncCallback(Buffer* buffer,
diff --git a/src/dawn_wire/client/Device.cpp b/src/dawn_wire/client/Device.cpp
index 43361b3..64b1b04 100644
--- a/src/dawn_wire/client/Device.cpp
+++ b/src/dawn_wire/client/Device.cpp
@@ -91,7 +91,7 @@
mClient->SerializeCommand(cmd);
}
- bool Device::RequestPopErrorScope(WGPUErrorCallback callback, void* userdata) {
+ bool Device::PopErrorScope(WGPUErrorCallback callback, void* userdata) {
if (mErrorScopeStackSize == 0) {
return false;
}
@@ -111,7 +111,9 @@
return true;
}
- bool Device::PopErrorScope(uint64_t requestSerial, WGPUErrorType type, const char* message) {
+ bool Device::OnPopErrorScopeCallback(uint64_t requestSerial,
+ WGPUErrorType type,
+ const char* message) {
switch (type) {
case WGPUErrorType_NoError:
case WGPUErrorType_Validation:
@@ -135,6 +137,15 @@
return true;
}
+ WGPUBuffer Device::CreateBuffer(const WGPUBufferDescriptor* descriptor) {
+ return Buffer::Create(this, descriptor);
+ }
+
+ WGPUCreateBufferMappedResult Device::CreateBufferMapped(
+ const WGPUBufferDescriptor* descriptor) {
+ return Buffer::CreateMapped(this, descriptor);
+ }
+
WGPUQueue Device::GetDefaultQueue() {
mDefaultQueue->refcount++;
return reinterpret_cast<WGPUQueue>(mDefaultQueue);
diff --git a/src/dawn_wire/client/Device.h b/src/dawn_wire/client/Device.h
index 42dff18..5981124 100644
--- a/src/dawn_wire/client/Device.h
+++ b/src/dawn_wire/client/Device.h
@@ -32,14 +32,18 @@
~Device();
Client* GetClient();
- void HandleError(WGPUErrorType errorType, const char* message);
- void HandleDeviceLost(const char* message);
void SetUncapturedErrorCallback(WGPUErrorCallback errorCallback, void* errorUserdata);
void SetDeviceLostCallback(WGPUDeviceLostCallback errorCallback, void* errorUserdata);
-
void PushErrorScope(WGPUErrorFilter filter);
- bool RequestPopErrorScope(WGPUErrorCallback callback, void* userdata);
- bool PopErrorScope(uint64_t requestSerial, WGPUErrorType type, const char* message);
+ bool PopErrorScope(WGPUErrorCallback callback, void* userdata);
+ WGPUBuffer CreateBuffer(const WGPUBufferDescriptor* descriptor);
+ WGPUCreateBufferMappedResult CreateBufferMapped(const WGPUBufferDescriptor* descriptor);
+
+ void HandleError(WGPUErrorType errorType, const char* message);
+ void HandleDeviceLost(const char* message);
+ bool OnPopErrorScopeCallback(uint64_t requestSerial,
+ WGPUErrorType type,
+ const char* message);
WGPUQueue GetDefaultQueue();