MetalBackend: Enable multithread support.
Bug: dawn:1662
Change-Id: If2f74b4bbce9d108fcd5906c2105f9ebd95845fe
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/124400
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Quyen Le <lehoangquyen@chromium.org>
diff --git a/src/dawn/native/metal/MetalBackend.mm b/src/dawn/native/metal/MetalBackend.mm
index 9bdf138..0bbc265 100644
--- a/src/dawn/native/metal/MetalBackend.mm
+++ b/src/dawn/native/metal/MetalBackend.mm
@@ -38,6 +38,7 @@
waitEvents.push_back(
{static_cast<id<MTLSharedEvent>>(waitEvent.sharedEvent), waitEvent.signaledValue});
}
+ auto deviceLock(backendDevice->GetScopedLock());
Ref<TextureBase> texture = backendDevice->CreateTextureWrappingIOSurface(
cDescriptor, cDescriptor->ioSurface, std::move(waitEvents));
return ToAPI(texture.Detach());
@@ -46,11 +47,15 @@
void IOSurfaceEndAccess(WGPUTexture cTexture,
ExternalImageIOSurfaceEndAccessDescriptor* descriptor) {
Texture* texture = ToBackend(FromAPI(cTexture));
+ auto device = texture->GetDevice();
+ auto deviceLock(device->GetScopedLock());
texture->IOSurfaceEndAccess(descriptor);
}
void WaitForCommandsToBeScheduled(WGPUDevice device) {
- ToBackend(FromAPI(device))->WaitForCommandsToBeScheduled();
+ Device* backendDevice = ToBackend(FromAPI(device));
+ auto deviceLock(backendDevice->GetScopedLock());
+ backendDevice->WaitForCommandsToBeScheduled();
}
} // namespace dawn::native::metal