[metal] Add GetMTLDevice to MetalBackend

Add metal::GetMTLDevice() method to MetalBackend to be used later
for HDRMetalCopier by chromium.

Bug: chromium:40260111
Change-Id: I1559c27131be97c48f95eb0f4ec7291ab1d04853
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/193002
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org>
diff --git a/include/dawn/native/MetalBackend.h b/include/dawn/native/MetalBackend.h
index b4d6c34..a0ff892 100644
--- a/include/dawn/native/MetalBackend.h
+++ b/include/dawn/native/MetalBackend.h
@@ -31,6 +31,10 @@
 #include "dawn/native/dawn_native_export.h"
 #include "dawn/webgpu.h"
 
+#if defined(__OBJC__)
+#import <Metal/Metal.h>
+#endif
+
 namespace dawn::native::metal {
 
 // When making Metal interop with other APIs, we need to be careful that QueueSubmit doesn't
@@ -40,6 +44,11 @@
 // scheduled could lead to races in who gets scheduled first and incorrect rendering.
 DAWN_NATIVE_EXPORT void WaitForCommandsToBeScheduled(WGPUDevice device);
 
+#if defined(__OBJC__)
+// Return the MTLDevice corresponding to the WGPUDevice.
+DAWN_NATIVE_EXPORT id<MTLDevice> GetMTLDevice(WGPUDevice device);
+#endif
+
 }  // namespace dawn::native::metal
 
 #endif  // INCLUDE_DAWN_NATIVE_METALBACKEND_H_
diff --git a/src/dawn/native/metal/MetalBackend.mm b/src/dawn/native/metal/MetalBackend.mm
index 6791ebb..fcbfc87e 100644
--- a/src/dawn/native/metal/MetalBackend.mm
+++ b/src/dawn/native/metal/MetalBackend.mm
@@ -42,4 +42,9 @@
     ToBackend(backendDevice->GetQueue())->WaitForCommandsToBeScheduled();
 }
 
+id<MTLDevice> GetMTLDevice(WGPUDevice device) {
+    Device* backendDevice = ToBackend(FromAPI(device));
+    return backendDevice->GetMTLDevice();
+}
+
 }  // namespace dawn::native::metal
diff --git a/src/dawn/tests/end2end/AdapterEnumerationTests.cpp b/src/dawn/tests/end2end/AdapterEnumerationTests.cpp
index 9bc36e2..a811394 100644
--- a/src/dawn/tests/end2end/AdapterEnumerationTests.cpp
+++ b/src/dawn/tests/end2end/AdapterEnumerationTests.cpp
@@ -45,10 +45,6 @@
 #include "dawn/native/D3D12Backend.h"
 #endif  // defined(DAWN_ENABLE_BACKEND_D3D12)
 
-#if defined(DAWN_ENABLE_BACKEND_METAL)
-#include "dawn/native/MetalBackend.h"
-#endif  // defined(DAWN_ENABLE_BACKEND_METAL)
-
 #if defined(DAWN_ENABLE_BACKEND_OPENGL)
 #include "dawn/native/OpenGLBackend.h"
 #endif  // defined(DAWN_ENABLE_BACKEND_OPENGL)
diff --git a/src/dawn/tests/end2end/VideoViewsTests_mac.cpp b/src/dawn/tests/end2end/VideoViewsTests_mac.cpp
index 1d5ca65..67f6b4b 100644
--- a/src/dawn/tests/end2end/VideoViewsTests_mac.cpp
+++ b/src/dawn/tests/end2end/VideoViewsTests_mac.cpp
@@ -34,7 +34,6 @@
 #include "dawn/common/Assert.h"
 #include "dawn/common/CoreFoundationRef.h"
 #include "dawn/common/IOSurfaceUtils.h"
-#include "dawn/native/MetalBackend.h"
 #include "dawn/utils/TextureUtils.h"
 
 namespace dawn {