From 6a5ed02db33cd9b5b8166c1679b14f85c9648281 Mon Sep 17 00:00:00 2001
From: Philip Rebohle <philip.rebohle@tu-dortmund.de>
Date: Wed, 23 Aug 2023 16:36:58 +0200
Subject: [PATCH] [dxgi] Use VK_FORMAT_A8_UNORM if available

---
 src/dxgi/dxgi_format.cpp | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/dxgi/dxgi_format.cpp b/src/dxgi/dxgi_format.cpp
index 306f773ec..996d36514 100644
--- a/src/dxgi/dxgi_format.cpp
+++ b/src/dxgi/dxgi_format.cpp
@@ -318,12 +318,10 @@ namespace dxvk {
       VK_FORMAT_R8_UINT,
       VK_IMAGE_ASPECT_COLOR_BIT },
     // DXGI_FORMAT_A8_UNORM
-    { VK_FORMAT_R8_UNORM,
+    { VK_FORMAT_A8_UNORM_KHR,
       VK_FORMAT_UNDEFINED,
-      VK_FORMAT_UNDEFINED,
-      VK_IMAGE_ASPECT_COLOR_BIT, 0,
-      { VK_COMPONENT_SWIZZLE_ZERO, VK_COMPONENT_SWIZZLE_ZERO,
-        VK_COMPONENT_SWIZZLE_ZERO, VK_COMPONENT_SWIZZLE_R }},
+      VK_FORMAT_R8_UINT,
+      VK_IMAGE_ASPECT_COLOR_BIT, 0 },
     // DXGI_FORMAT_R1_UNORM
     { }, // Unsupported
     // DXGI_FORMAT_R9G9B9E5_SHAREDEXP
@@ -860,6 +858,16 @@ namespace dxvk {
       RemapDepthFormat(DXGI_FORMAT_X24_TYPELESS_G8_UINT,  VK_FORMAT_D32_SFLOAT_S8_UINT);
       RemapDepthFormat(DXGI_FORMAT_D24_UNORM_S8_UINT,     VK_FORMAT_D32_SFLOAT_S8_UINT);
     }
+
+    // Map A8_UNORM to R8_UNORM with appropriate swizzles if necessary
+    if (!CheckImageFormatSupport(device, VK_FORMAT_A8_UNORM_KHR,
+          VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT |
+          VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT |
+          VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT)) {
+      RemapColorFormat(DXGI_FORMAT_A8_UNORM, VK_FORMAT_R8_UNORM,
+        { VK_COMPONENT_SWIZZLE_ZERO, VK_COMPONENT_SWIZZLE_ZERO,
+          VK_COMPONENT_SWIZZLE_ZERO, VK_COMPONENT_SWIZZLE_R });
+    }
   }