dawn_wire: Implement device-related callbacks for multiple devices
Bug: dawn:565
Change-Id: Ic80a3bc1bbfd479af04e77afa0eb3f4ca3387ecd
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/38282
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn_wire/client/ClientDoers.cpp b/src/dawn_wire/client/ClientDoers.cpp
index cd9b5ab..75688de 100644
--- a/src/dawn_wire/client/ClientDoers.cpp
+++ b/src/dawn_wire/client/ClientDoers.cpp
@@ -20,7 +20,9 @@
namespace dawn_wire { namespace client {
- bool Client::DoDeviceUncapturedErrorCallback(WGPUErrorType errorType, const char* message) {
+ bool Client::DoDeviceUncapturedErrorCallback(Device* device,
+ WGPUErrorType errorType,
+ const char* message) {
switch (errorType) {
case WGPUErrorType_NoError:
case WGPUErrorType_Validation:
@@ -31,19 +33,20 @@
default:
return false;
}
- mDevice->HandleError(errorType, message);
+ device->HandleError(errorType, message);
return true;
}
- bool Client::DoDeviceLostCallback(char const* message) {
- mDevice->HandleDeviceLost(message);
+ bool Client::DoDeviceLostCallback(Device* device, char const* message) {
+ device->HandleDeviceLost(message);
return true;
}
- bool Client::DoDevicePopErrorScopeCallback(uint64_t requestSerial,
+ bool Client::DoDevicePopErrorScopeCallback(Device* device,
+ uint64_t requestSerial,
WGPUErrorType errorType,
const char* message) {
- return mDevice->OnPopErrorScopeCallback(requestSerial, errorType, message);
+ return device->OnPopErrorScopeCallback(requestSerial, errorType, message);
}
bool Client::DoBufferMapAsyncCallback(Buffer* buffer,
@@ -82,16 +85,26 @@
return true;
}
- bool Client::DoDeviceCreateReadyComputePipelineCallback(uint64_t requestSerial,
+ bool Client::DoDeviceCreateReadyComputePipelineCallback(Device* device,
+ uint64_t requestSerial,
WGPUCreateReadyPipelineStatus status,
const char* message) {
- return mDevice->OnCreateReadyComputePipelineCallback(requestSerial, status, message);
+ // The device might have been deleted or recreated so this isn't an error.
+ if (device == nullptr) {
+ return true;
+ }
+ return device->OnCreateReadyComputePipelineCallback(requestSerial, status, message);
}
- bool Client::DoDeviceCreateReadyRenderPipelineCallback(uint64_t requestSerial,
+ bool Client::DoDeviceCreateReadyRenderPipelineCallback(Device* device,
+ uint64_t requestSerial,
WGPUCreateReadyPipelineStatus status,
const char* message) {
- return mDevice->OnCreateReadyRenderPipelineCallback(requestSerial, status, message);
+ // The device might have been deleted or recreated so this isn't an error.
+ if (device == nullptr) {
+ return true;
+ }
+ return device->OnCreateReadyRenderPipelineCallback(requestSerial, status, message);
}
}} // namespace dawn_wire::client