From 50dfab27979cd85f4f7be3d0d574c055abd16954 Mon Sep 17 00:00:00 2001
From: Philip Rebohle <philip.rebohle@tu-dortmund.de>
Date: Fri, 10 Aug 2018 19:04:38 +0200
Subject: [PATCH] [dxgi] Re-enable SRGB-to-UNORM compatibility

D3D11 is highly inconsistent here and seems to allow UNORM
render target views for SRGB images, but not UAVs.
---
 src/dxgi/dxgi_format.cpp | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/dxgi/dxgi_format.cpp b/src/dxgi/dxgi_format.cpp
index d9503883..e5746ce1 100644
--- a/src/dxgi/dxgi_format.cpp
+++ b/src/dxgi/dxgi_format.cpp
@@ -609,7 +609,8 @@ namespace dxvk {
     { VK_FORMAT_R8G8B8A8_UNORM,
       VK_FORMAT_R8G8B8A8_SRGB },
     // DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
-    { },
+    { VK_FORMAT_R8G8B8A8_UNORM,
+      VK_FORMAT_R8G8B8A8_SRGB },
     // DXGI_FORMAT_R8G8B8A8_UINT
     { },
     // DXGI_FORMAT_R8G8B8A8_SNORM
@@ -713,7 +714,8 @@ namespace dxvk {
     { VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
       VK_FORMAT_BC1_RGBA_SRGB_BLOCK },
     // DXGI_FORMAT_BC1_UNORM_SRGB
-    { },
+    { VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
+      VK_FORMAT_BC1_RGBA_SRGB_BLOCK },
     // DXGI_FORMAT_BC2_TYPELESS
     { VK_FORMAT_BC2_UNORM_BLOCK,
       VK_FORMAT_BC2_SRGB_BLOCK },
@@ -721,7 +723,8 @@ namespace dxvk {
     { VK_FORMAT_BC2_UNORM_BLOCK,
       VK_FORMAT_BC2_SRGB_BLOCK },
     // DXGI_FORMAT_BC2_UNORM_SRGB
-    { },
+    { VK_FORMAT_BC2_UNORM_BLOCK,
+      VK_FORMAT_BC2_SRGB_BLOCK },
     // DXGI_FORMAT_BC3_TYPELESS
     { VK_FORMAT_BC3_UNORM_BLOCK,
       VK_FORMAT_BC3_SRGB_BLOCK },
@@ -729,7 +732,8 @@ namespace dxvk {
     { VK_FORMAT_BC3_UNORM_BLOCK,
       VK_FORMAT_BC3_SRGB_BLOCK },
     // DXGI_FORMAT_BC3_UNORM_SRGB
-    { },
+    { VK_FORMAT_BC3_UNORM_BLOCK,
+      VK_FORMAT_BC3_SRGB_BLOCK },
     // DXGI_FORMAT_BC4_TYPELESS
     { VK_FORMAT_BC4_UNORM_BLOCK,
       VK_FORMAT_BC4_SNORM_BLOCK },
@@ -758,12 +762,14 @@ namespace dxvk {
     { VK_FORMAT_B8G8R8A8_UNORM,
       VK_FORMAT_B8G8R8A8_SRGB },
     // DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
-    { },
+    { VK_FORMAT_B8G8R8A8_UNORM,
+      VK_FORMAT_B8G8R8A8_SRGB },
     // DXGI_FORMAT_B8G8R8X8_TYPELESS
     { VK_FORMAT_B8G8R8A8_UNORM,
       VK_FORMAT_B8G8R8A8_SRGB },
     // DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
-    { },
+    { VK_FORMAT_B8G8R8A8_UNORM,
+      VK_FORMAT_B8G8R8A8_SRGB },
     // DXGI_FORMAT_BC6H_TYPELESS
     { VK_FORMAT_BC6H_UFLOAT_BLOCK,
       VK_FORMAT_BC6H_SFLOAT_BLOCK },
@@ -778,7 +784,8 @@ namespace dxvk {
     { VK_FORMAT_BC7_UNORM_BLOCK,
       VK_FORMAT_BC7_SRGB_BLOCK },
     // DXGI_FORMAT_BC7_UNORM_SRGB
-    { },
+    { VK_FORMAT_BC7_UNORM_BLOCK,
+      VK_FORMAT_BC7_SRGB_BLOCK },
     // DXGI_FORMAT_AYUV
     { }, // Unsupported
     // DXGI_FORMAT_Y410