diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 507d6e64bd8..fc71479d68a 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -917,7 +917,13 @@ static HRESULT wined3d_swapchain_vk_create_vulkan_swapchain(struct wined3d_swapc
         goto fail;
     }
 
-    image_count = desc->backbuffer_count;
+    /* CW HACK 18838: Create MoltenVK swapchains with 3 images, as
+     * recommended by the MoltenVK documentation. Performance of full-screen
+     * swapchains is atrocious with the only other supported image count of 2. */
+    if (adapter_vk->driver_properties.driverID == VK_DRIVER_ID_MOLTENVK)
+        image_count = 3;
+    else
+        image_count = desc->backbuffer_count;
     if (image_count < surface_caps.minImageCount)
         image_count = surface_caps.minImageCount;
     else if (surface_caps.maxImageCount && image_count > surface_caps.maxImageCount)
