Vulkan: Make ExternalSemaphoreHandle match SystemHandle::Handle

Change-Id: I83be7ab47db3c492fec25eb1e48135fe03afc8ab
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/206614
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/native/vulkan/ExternalHandle.h b/src/dawn/native/vulkan/ExternalHandle.h
index 894304c..e62d7f2 100644
--- a/src/dawn/native/vulkan/ExternalHandle.h
+++ b/src/dawn/native/vulkan/ExternalHandle.h
@@ -32,29 +32,31 @@
 
 namespace dawn::native::vulkan {
 
+// ExternalSemaphoreHandle
+#if DAWN_PLATFORM_IS(WINDOWS)
+using ExternalSemaphoreHandle = HANDLE;
+const ExternalSemaphoreHandle kNullExternalSemaphoreHandle = nullptr;
+#elif DAWN_PLATFORM_IS(FUCHSIA)
+using ExternalSemaphoreHandle = zx_handle_t;
+const ExternalSemaphoreHandle kNullExternalSemaphoreHandle = ZX_HANDLE_INVALID;
+#elif DAWN_PLATFORM_IS(POSIX)
+using ExternalSemaphoreHandle = int;
+const ExternalSemaphoreHandle kNullExternalSemaphoreHandle = -1;
+#else
+#error "Platform not supported."
+#endif
+
+// ExternalMemoryHandle
 #if DAWN_PLATFORM_IS(ANDROID)
-// AHardwareBuffer
 using ExternalMemoryHandle = struct AHardwareBuffer*;
-// File descriptor
-using ExternalSemaphoreHandle = int;
-const ExternalSemaphoreHandle kNullExternalSemaphoreHandle = -1;
 #elif DAWN_PLATFORM_IS(LINUX)
-// File descriptor
 using ExternalMemoryHandle = int;
-// File descriptor
-using ExternalSemaphoreHandle = int;
-const ExternalSemaphoreHandle kNullExternalSemaphoreHandle = -1;
 #elif DAWN_PLATFORM_IS(FUCHSIA)
 // Really a Zircon vmo handle.
 using ExternalMemoryHandle = zx_handle_t;
-// Really a Zircon event handle.
-using ExternalSemaphoreHandle = zx_handle_t;
-const ExternalSemaphoreHandle kNullExternalSemaphoreHandle = ZX_HANDLE_INVALID;
 #else
-// Generic types so that the Null service can compile, not used for real handles
+// Generic types so that the rest of the Vulkan backend compiles.
 using ExternalMemoryHandle = void*;
-using ExternalSemaphoreHandle = void*;
-const ExternalSemaphoreHandle kNullExternalSemaphoreHandle = nullptr;
 #endif
 
 }  // namespace dawn::native::vulkan
diff --git a/src/dawn/native/vulkan/QueueVk.cpp b/src/dawn/native/vulkan/QueueVk.cpp
index 037dbff..2697ae0 100644
--- a/src/dawn/native/vulkan/QueueVk.cpp
+++ b/src/dawn/native/vulkan/QueueVk.cpp
@@ -358,16 +358,8 @@
             for (const auto& fence : fences) {
                 // All semaphores are binary semaphores.
                 DAWN_ASSERT(fence.signaledValue == 1u);
-                ExternalSemaphoreHandle semaphoreHandle = [&]() {
-                    if constexpr (std::is_same_v<ExternalSemaphoreHandle, SystemHandle::Handle>) {
-                        return ToBackend(fence.object)->GetHandle().Get();
-                    } else {
-                        // TODO(crbug.com/dawn/1745): Remove this path and make the semaphore
-                        // service use SystemHandle.
-                        DAWN_UNREACHABLE();
-                        return ExternalSemaphoreHandle{};
-                    }
-                }();
+                ExternalSemaphoreHandle semaphoreHandle =
+                    ToBackend(fence.object)->GetHandle().Get();
 
                 VkSemaphore semaphore;
                 DAWN_TRY_ASSIGN(semaphore, device->GetExternalSemaphoreService()->ImportSemaphore(