summaryrefslogtreecommitdiffstats
path: root/src/libs/dxvk-native-1.9.2a/src/dxgi/dxgi_format.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/dxvk-native-1.9.2a/src/dxgi/dxgi_format.cpp')
-rw-r--r--src/libs/dxvk-native-1.9.2a/src/dxgi/dxgi_format.cpp976
1 files changed, 976 insertions, 0 deletions
diff --git a/src/libs/dxvk-native-1.9.2a/src/dxgi/dxgi_format.cpp b/src/libs/dxvk-native-1.9.2a/src/dxgi/dxgi_format.cpp
new file mode 100644
index 00000000..f628e5d9
--- /dev/null
+++ b/src/libs/dxvk-native-1.9.2a/src/dxgi/dxgi_format.cpp
@@ -0,0 +1,976 @@
+#include "dxgi_format.h"
+
+#include <array>
+
+namespace dxvk {
+
+ const std::array<DXGI_VK_FORMAT_MAPPING, 133> g_dxgiFormats = {{
+ // DXGI_FORMAT_UNKNOWN
+ { },
+ // DXGI_FORMAT_R32G32B32A32_TYPELESS
+ { VK_FORMAT_R32G32B32A32_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32B32A32_UINT },
+ // DXGI_FORMAT_R32G32B32A32_FLOAT
+ { VK_FORMAT_R32G32B32A32_SFLOAT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32B32A32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G32B32A32_UINT
+ { VK_FORMAT_R32G32B32A32_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32B32A32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G32B32A32_SINT
+ { VK_FORMAT_R32G32B32A32_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32B32A32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G32B32_TYPELESS
+ { VK_FORMAT_R32G32B32_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32B32_UINT },
+ // DXGI_FORMAT_R32G32B32_FLOAT
+ { VK_FORMAT_R32G32B32_SFLOAT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32B32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G32B32_UINT
+ { VK_FORMAT_R32G32B32_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32B32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G32B32_SINT
+ { VK_FORMAT_R32G32B32_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32B32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16B16A16_TYPELESS
+ { VK_FORMAT_R16G16B16A16_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16B16A16_UINT },
+ // DXGI_FORMAT_R16G16B16A16_FLOAT
+ { VK_FORMAT_R16G16B16A16_SFLOAT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16B16A16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16B16A16_UNORM
+ { VK_FORMAT_R16G16B16A16_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16B16A16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16B16A16_UINT
+ { VK_FORMAT_R16G16B16A16_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16B16A16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16B16A16_SNORM
+ { VK_FORMAT_R16G16B16A16_SNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16B16A16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16B16A16_SINT
+ { VK_FORMAT_R16G16B16A16_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16B16A16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G32_TYPELESS
+ { VK_FORMAT_R32G32_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32_UINT },
+ // DXGI_FORMAT_R32G32_FLOAT
+ { VK_FORMAT_R32G32_SFLOAT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G32_UINT
+ { VK_FORMAT_R32G32_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G32_SINT
+ { VK_FORMAT_R32G32_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32G32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32G8X24_TYPELESS
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D32_SFLOAT_S8_UINT,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_D32_FLOAT_S8X24_UINT
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D32_SFLOAT_S8_UINT,
+ VK_FORMAT_UNDEFINED,
+ 0, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT },
+ // DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D32_SFLOAT_S8_UINT,
+ VK_FORMAT_UNDEFINED,
+ 0, VK_IMAGE_ASPECT_DEPTH_BIT },
+ // DXGI_FORMAT_X32_TYPELESS_G8X24_UINT
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D32_SFLOAT_S8_UINT,
+ VK_FORMAT_UNDEFINED,
+ 0, VK_IMAGE_ASPECT_STENCIL_BIT },
+ // DXGI_FORMAT_R10G10B10A2_TYPELESS
+ { VK_FORMAT_A2B10G10R10_UNORM_PACK32,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_A2B10G10R10_UINT_PACK32 },
+ // DXGI_FORMAT_R10G10B10A2_UNORM
+ { VK_FORMAT_A2B10G10R10_UNORM_PACK32,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_A2B10G10R10_UINT_PACK32,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R10G10B10A2_UINT
+ { VK_FORMAT_A2B10G10R10_UINT_PACK32,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_A2B10G10R10_UINT_PACK32,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R11G11B10_FLOAT
+ { VK_FORMAT_B10G11R11_UFLOAT_PACK32,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8B8A8_TYPELESS
+ { VK_FORMAT_R8G8B8A8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8B8A8_UINT },
+ // DXGI_FORMAT_R8G8B8A8_UNORM
+ { VK_FORMAT_R8G8B8A8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8B8A8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
+ { VK_FORMAT_R8G8B8A8_SRGB,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8B8A8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8B8A8_UINT
+ { VK_FORMAT_R8G8B8A8_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8B8A8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8B8A8_SNORM
+ { VK_FORMAT_R8G8B8A8_SNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8B8A8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8B8A8_SINT
+ { VK_FORMAT_R8G8B8A8_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8B8A8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16_TYPELESS
+ { VK_FORMAT_R16G16_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16_UINT },
+ // DXGI_FORMAT_R16G16_FLOAT
+ { VK_FORMAT_R16G16_SFLOAT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16_UNORM
+ { VK_FORMAT_R16G16_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16_UINT
+ { VK_FORMAT_R16G16_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16_SNORM
+ { VK_FORMAT_R16G16_SNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16G16_SINT
+ { VK_FORMAT_R16G16_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16G16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32_TYPELESS
+ { VK_FORMAT_R32_UINT,
+ VK_FORMAT_D32_SFLOAT,
+ VK_FORMAT_R32_UINT },
+ // DXGI_FORMAT_D32_FLOAT
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D32_SFLOAT,
+ VK_FORMAT_UNDEFINED,
+ 0, VK_IMAGE_ASPECT_DEPTH_BIT },
+ // DXGI_FORMAT_R32_FLOAT
+ { VK_FORMAT_R32_SFLOAT,
+ VK_FORMAT_D32_SFLOAT,
+ VK_FORMAT_R32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT,
+ VK_IMAGE_ASPECT_DEPTH_BIT },
+ // DXGI_FORMAT_R32_UINT
+ { VK_FORMAT_R32_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R32_SINT
+ { VK_FORMAT_R32_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R32_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R24G8_TYPELESS
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D24_UNORM_S8_UINT,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_D24_UNORM_S8_UINT
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D24_UNORM_S8_UINT,
+ VK_FORMAT_UNDEFINED,
+ 0, VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT },
+ // DXGI_FORMAT_R24_UNORM_X8_TYPELESS
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D24_UNORM_S8_UINT,
+ VK_FORMAT_UNDEFINED,
+ 0, VK_IMAGE_ASPECT_DEPTH_BIT },
+ // DXGI_FORMAT_X24_TYPELESS_G8_UINT
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D24_UNORM_S8_UINT,
+ VK_FORMAT_UNDEFINED,
+ 0, VK_IMAGE_ASPECT_STENCIL_BIT },
+ // DXGI_FORMAT_R8G8_TYPELESS
+ { VK_FORMAT_R8G8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8_UINT },
+ // DXGI_FORMAT_R8G8_UNORM
+ { VK_FORMAT_R8G8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8_UINT
+ { VK_FORMAT_R8G8_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8_SNORM
+ { VK_FORMAT_R8G8_SNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8_SINT
+ { VK_FORMAT_R8G8_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16_TYPELESS
+ { VK_FORMAT_R16_UNORM,
+ VK_FORMAT_D16_UNORM,
+ VK_FORMAT_R16_UINT },
+ // DXGI_FORMAT_R16_FLOAT
+ { VK_FORMAT_R16_SFLOAT,
+ VK_FORMAT_D16_UNORM,
+ VK_FORMAT_R16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_D16_UNORM
+ { VK_FORMAT_UNDEFINED,
+ VK_FORMAT_D16_UNORM,
+ VK_FORMAT_UNDEFINED,
+ 0, VK_IMAGE_ASPECT_DEPTH_BIT },
+ // DXGI_FORMAT_R16_UNORM
+ { VK_FORMAT_R16_UNORM,
+ VK_FORMAT_D16_UNORM,
+ VK_FORMAT_R16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT,
+ VK_IMAGE_ASPECT_DEPTH_BIT },
+ // DXGI_FORMAT_R16_UINT
+ { VK_FORMAT_R16_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16_SNORM
+ { VK_FORMAT_R16_SNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R16_SINT
+ { VK_FORMAT_R16_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R16_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8_TYPELESS
+ { VK_FORMAT_R8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8_UINT },
+ // DXGI_FORMAT_R8_UNORM
+ { VK_FORMAT_R8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8_UINT
+ { VK_FORMAT_R8_UINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8_SNORM
+ { VK_FORMAT_R8_SNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8_SINT
+ { VK_FORMAT_R8_SINT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_A8_UNORM
+ { VK_FORMAT_R8_UNORM,
+ 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 }},
+ // DXGI_FORMAT_R1_UNORM
+ { }, // Unsupported
+ // DXGI_FORMAT_R9G9B9E5_SHAREDEXP
+ { VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_R8G8_B8G8_UNORM
+ { VK_FORMAT_B8G8R8G8_422_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_G8R8_G8B8_UNORM
+ { VK_FORMAT_G8B8G8R8_422_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC1_TYPELESS
+ { VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_BC1_UNORM
+ { VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC1_UNORM_SRGB
+ { VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC2_TYPELESS
+ { VK_FORMAT_BC2_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_BC2_UNORM
+ { VK_FORMAT_BC2_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC2_UNORM_SRGB
+ { VK_FORMAT_BC2_SRGB_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC3_TYPELESS
+ { VK_FORMAT_BC3_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_BC3_UNORM
+ { VK_FORMAT_BC3_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC3_UNORM_SRGB
+ { VK_FORMAT_BC3_SRGB_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC4_TYPELESS
+ { VK_FORMAT_BC4_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_BC4_UNORM
+ { VK_FORMAT_BC4_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC4_SNORM
+ { VK_FORMAT_BC4_SNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC5_TYPELESS
+ { VK_FORMAT_BC5_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_BC5_UNORM
+ { VK_FORMAT_BC5_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC5_SNORM
+ { VK_FORMAT_BC5_SNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_B5G6R5_UNORM
+ { VK_FORMAT_R5G6B5_UNORM_PACK16,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_B5G5R5A1_UNORM
+ { VK_FORMAT_A1R5G5B5_UNORM_PACK16,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_B8G8R8A8_UNORM
+ { VK_FORMAT_B8G8R8A8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_B8G8R8X8_UNORM
+ { VK_FORMAT_B8G8R8A8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT, 0,
+ { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G,
+ VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_ONE }},
+ // DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM
+ { }, // Unsupported
+ // DXGI_FORMAT_B8G8R8A8_TYPELESS
+ { VK_FORMAT_B8G8R8A8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
+ { VK_FORMAT_B8G8R8A8_SRGB,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_B8G8R8X8_TYPELESS
+ { VK_FORMAT_B8G8R8A8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
+ { VK_FORMAT_B8G8R8A8_SRGB,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT, 0,
+ { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G,
+ VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_ONE }},
+ // DXGI_FORMAT_BC6H_TYPELESS
+ { VK_FORMAT_BC6H_UFLOAT_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_BC6H_UF16
+ { VK_FORMAT_BC6H_UFLOAT_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC6H_SF16
+ { VK_FORMAT_BC6H_SFLOAT_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC7_TYPELESS
+ { VK_FORMAT_BC7_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED },
+ // DXGI_FORMAT_BC7_UNORM
+ { VK_FORMAT_BC7_UNORM_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_BC7_UNORM_SRGB
+ { VK_FORMAT_BC7_SRGB_BLOCK,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_AYUV
+ { VK_FORMAT_R8G8B8A8_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_R8G8B8A8_UINT,
+ VK_IMAGE_ASPECT_COLOR_BIT, 0,
+ { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_B,
+ VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_A } },
+ // DXGI_FORMAT_Y410
+ { }, // Unsupported
+ // DXGI_FORMAT_Y416
+ { }, // Unsupported
+ // DXGI_FORMAT_NV12
+ { VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT },
+ // DXGI_FORMAT_P010
+ { }, // Unsupported
+ // DXGI_FORMAT_P016
+ { }, // Unsupported
+ // DXGI_FORMAT_420_OPAQUE
+ { VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT },
+ // DXGI_FORMAT_YUY2
+ { VK_FORMAT_G8B8G8R8_422_UNORM,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_Y210
+ { }, // Unsupported
+ // DXGI_FORMAT_Y216
+ { }, // Unsupported
+ // DXGI_FORMAT_NV11
+ { }, // Unsupported
+ // DXGI_FORMAT_AI44
+ { }, // Unsupported
+ // DXGI_FORMAT_IA44
+ { }, // Unsupported
+ // DXGI_FORMAT_P8
+ { }, // Unsupported
+ // DXGI_FORMAT_A8P8
+ { }, // Unsupported
+ // DXGI_FORMAT_B4G4R4A4_UNORM
+ { VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,
+ VK_FORMAT_UNDEFINED,
+ VK_FORMAT_UNDEFINED,
+ VK_IMAGE_ASPECT_COLOR_BIT },
+ // DXGI_FORMAT_P208
+ { }, // Unsupported
+ // DXGI_FORMAT_V208
+ { }, // Unsupported
+ // DXGI_FORMAT_V408
+ { }, // Unsupported
+ }};
+
+
+ const std::array<DXGI_VK_FORMAT_FAMILY, 133> g_dxgiFamilies = {{
+ // DXGI_FORMAT_UNKNOWN
+ { },
+ // DXGI_FORMAT_R32G32B32A32_TYPELESS
+ { VK_FORMAT_R32G32B32A32_UINT,
+ VK_FORMAT_R32G32B32A32_SINT,
+ VK_FORMAT_R32G32B32A32_SFLOAT },
+ // DXGI_FORMAT_R32G32B32A32_FLOAT
+ { },
+ // DXGI_FORMAT_R32G32B32A32_UINT
+ { },
+ // DXGI_FORMAT_R32G32B32A32_SINT
+ { },
+ // DXGI_FORMAT_R32G32B32_TYPELESS
+ { VK_FORMAT_R32G32B32_UINT,
+ VK_FORMAT_R32G32B32_SINT,
+ VK_FORMAT_R32G32B32_SFLOAT },
+ // DXGI_FORMAT_R32G32B32_FLOAT
+ { },
+ // DXGI_FORMAT_R32G32B32_UINT
+ { },
+ // DXGI_FORMAT_R32G32B32_SINT
+ { },
+ // DXGI_FORMAT_R16G16B16A16_TYPELESS
+ { VK_FORMAT_R16G16B16A16_UNORM,
+ VK_FORMAT_R16G16B16A16_SNORM,
+ VK_FORMAT_R16G16B16A16_UINT,
+ VK_FORMAT_R16G16B16A16_SINT,
+ VK_FORMAT_R16G16B16A16_SFLOAT },
+ // DXGI_FORMAT_R16G16B16A16_FLOAT
+ { },
+ // DXGI_FORMAT_R16G16B16A16_UNORM
+ { },
+ // DXGI_FORMAT_R16G16B16A16_UINT
+ { },
+ // DXGI_FORMAT_R16G16B16A16_SNORM
+ { },
+ // DXGI_FORMAT_R16G16B16A16_SINT
+ { },
+ // DXGI_FORMAT_R32G32_TYPELESS
+ { VK_FORMAT_R32G32_UINT,
+ VK_FORMAT_R32G32_SINT,
+ VK_FORMAT_R32G32_SFLOAT },
+ // DXGI_FORMAT_R32G32_FLOAT
+ { },
+ // DXGI_FORMAT_R32G32_UINT
+ { },
+ // DXGI_FORMAT_R32G32_SINT
+ { },
+ // DXGI_FORMAT_R32G8X24_TYPELESS
+ { },
+ // DXGI_FORMAT_D32_FLOAT_S8X24_UINT
+ { },
+ // DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS
+ { },
+ // DXGI_FORMAT_X32_TYPELESS_G8X24_UINT
+ { },
+ // DXGI_FORMAT_R10G10B10A2_TYPELESS
+ { VK_FORMAT_A2B10G10R10_UNORM_PACK32,
+ VK_FORMAT_A2B10G10R10_UINT_PACK32 },
+ // DXGI_FORMAT_R10G10B10A2_UNORM
+ { },
+ // DXGI_FORMAT_R10G10B10A2_UINT
+ { },
+ // DXGI_FORMAT_R11G11B10_FLOAT
+ { },
+ // DXGI_FORMAT_R8G8B8A8_TYPELESS
+ { VK_FORMAT_R8G8B8A8_UNORM,
+ VK_FORMAT_R8G8B8A8_SNORM,
+ VK_FORMAT_R8G8B8A8_SRGB,
+ VK_FORMAT_R8G8B8A8_UINT,
+ VK_FORMAT_R8G8B8A8_SINT },
+ // DXGI_FORMAT_R8G8B8A8_UNORM
+ { 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
+ { },
+ // DXGI_FORMAT_R8G8B8A8_SINT
+ { },
+ // DXGI_FORMAT_R16G16_TYPELESS
+ { VK_FORMAT_R16G16_UNORM,
+ VK_FORMAT_R16G16_SNORM,
+ VK_FORMAT_R16G16_UINT,
+ VK_FORMAT_R16G16_SINT,
+ VK_FORMAT_R16G16_SFLOAT },
+ // DXGI_FORMAT_R16G16_FLOAT
+ { },
+ // DXGI_FORMAT_R16G16_UNORM
+ { },
+ // DXGI_FORMAT_R16G16_UINT
+ { },
+ // DXGI_FORMAT_R16G16_SNORM
+ { },
+ // DXGI_FORMAT_R16G16_SINT
+ { },
+ // DXGI_FORMAT_R32_TYPELESS
+ { VK_FORMAT_R32_UINT,
+ VK_FORMAT_R32_SINT,
+ VK_FORMAT_R32_SFLOAT },
+ // DXGI_FORMAT_D32_FLOAT
+ { },
+ // DXGI_FORMAT_R32_FLOAT
+ { },
+ // DXGI_FORMAT_R32_UINT
+ { },
+ // DXGI_FORMAT_R32_SINT
+ { },
+ // DXGI_FORMAT_R24G8_TYPELESS
+ { },
+ // DXGI_FORMAT_D24_UNORM_S8_UINT
+ { },
+ // DXGI_FORMAT_R24_UNORM_X8_TYPELESS
+ { },
+ // DXGI_FORMAT_X24_TYPELESS_G8_UINT
+ { },
+ // DXGI_FORMAT_R8G8_TYPELESS
+ { VK_FORMAT_R8G8_UNORM,
+ VK_FORMAT_R8G8_SNORM,
+ VK_FORMAT_R8G8_UINT,
+ VK_FORMAT_R8G8_SINT },
+ // DXGI_FORMAT_R8G8_UNORM
+ { },
+ // DXGI_FORMAT_R8G8_UINT
+ { },
+ // DXGI_FORMAT_R8G8_SNORM
+ { },
+ // DXGI_FORMAT_R8G8_SINT
+ { },
+ // DXGI_FORMAT_R16_TYPELESS
+ { VK_FORMAT_R16_UNORM,
+ VK_FORMAT_R16_SNORM,
+ VK_FORMAT_R16_UINT,
+ VK_FORMAT_R16_SINT,
+ VK_FORMAT_R16_SFLOAT },
+ // DXGI_FORMAT_R16_FLOAT
+ { },
+ // DXGI_FORMAT_D16_UNORM
+ { },
+ // DXGI_FORMAT_R16_UNORM
+ { },
+ // DXGI_FORMAT_R16_UINT
+ { },
+ // DXGI_FORMAT_R16_SNORM
+ { },
+ // DXGI_FORMAT_R16_SINT
+ { },
+ // DXGI_FORMAT_R8_TYPELESS
+ { VK_FORMAT_R8_UNORM,
+ VK_FORMAT_R8_SNORM,
+ VK_FORMAT_R8_UINT,
+ VK_FORMAT_R8_SINT },
+ // DXGI_FORMAT_R8_UNORM
+ { },
+ // DXGI_FORMAT_R8_UINT
+ { },
+ // DXGI_FORMAT_R8_SNORM
+ { },
+ // DXGI_FORMAT_R8_SINT
+ { },
+ // DXGI_FORMAT_A8_UNORM
+ { },
+ // DXGI_FORMAT_R1_UNORM
+ { }, // Unsupported
+ // DXGI_FORMAT_R9G9B9E5_SHAREDEXP
+ { },
+ // DXGI_FORMAT_R8G8_B8G8_UNORM
+ { },
+ // DXGI_FORMAT_G8R8_G8B8_UNORM
+ { },
+ // DXGI_FORMAT_BC1_TYPELESS
+ { VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
+ VK_FORMAT_BC1_RGBA_SRGB_BLOCK },
+ // DXGI_FORMAT_BC1_UNORM
+ { 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 },
+ // DXGI_FORMAT_BC2_UNORM
+ { 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 },
+ // DXGI_FORMAT_BC3_UNORM
+ { 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 },
+ // DXGI_FORMAT_BC4_UNORM
+ { },
+ // DXGI_FORMAT_BC4_SNORM
+ { },
+ // DXGI_FORMAT_BC5_TYPELESS
+ { VK_FORMAT_BC5_UNORM_BLOCK,
+ VK_FORMAT_BC5_SNORM_BLOCK },
+ // DXGI_FORMAT_BC5_UNORM
+ { },
+ // DXGI_FORMAT_BC5_SNORM
+ { },
+ // DXGI_FORMAT_B5G6R5_UNORM
+ { },
+ // DXGI_FORMAT_B5G5R5A1_UNORM
+ { },
+ // DXGI_FORMAT_B8G8R8A8_UNORM
+ { VK_FORMAT_B8G8R8A8_UNORM,
+ VK_FORMAT_B8G8R8A8_SRGB },
+ // DXGI_FORMAT_B8G8R8X8_UNORM
+ { VK_FORMAT_B8G8R8A8_UNORM,
+ VK_FORMAT_B8G8R8A8_SRGB },
+ // DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM
+ { }, // Unsupported
+ // DXGI_FORMAT_B8G8R8A8_TYPELESS
+ { 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 },
+ // DXGI_FORMAT_BC6H_UF16
+ { },
+ // DXGI_FORMAT_BC6H_SF16
+ { },
+ // DXGI_FORMAT_BC7_TYPELESS
+ { VK_FORMAT_BC7_UNORM_BLOCK,
+ VK_FORMAT_BC7_SRGB_BLOCK },
+ // DXGI_FORMAT_BC7_UNORM
+ { 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
+ { VK_FORMAT_R8G8B8A8_UNORM,
+ VK_FORMAT_R8G8B8A8_UINT },
+ // DXGI_FORMAT_Y410
+ { }, // Unsupported
+ // DXGI_FORMAT_Y416
+ { }, // Unsupported
+ // DXGI_FORMAT_NV12
+ { VK_FORMAT_R8_UNORM,
+ VK_FORMAT_R8G8_UNORM,
+ VK_FORMAT_R8_UINT,
+ VK_FORMAT_R8G8_UINT },
+ // DXGI_FORMAT_P010
+ { }, // Unsupported
+ // DXGI_FORMAT_P016
+ { }, // Unsupported
+ // DXGI_FORMAT_420_OPAQUE
+ { VK_FORMAT_R8_UNORM,
+ VK_FORMAT_R8G8_UNORM,
+ VK_FORMAT_R8_UINT,
+ VK_FORMAT_R8G8_UINT },
+ // DXGI_FORMAT_YUY2
+ { VK_FORMAT_G8B8G8R8_422_UNORM,
+ VK_FORMAT_R8G8B8A8_UNORM,
+ VK_FORMAT_R8G8B8A8_UINT },
+ // DXGI_FORMAT_Y210
+ { }, // Unsupported
+ // DXGI_FORMAT_Y216
+ { }, // Unsupported
+ // DXGI_FORMAT_NV11
+ { }, // Unsupported
+ // DXGI_FORMAT_AI44
+ { }, // Unsupported
+ // DXGI_FORMAT_IA44
+ { }, // Unsupported
+ // DXGI_FORMAT_P8
+ { }, // Unsupported
+ // DXGI_FORMAT_A8P8
+ { }, // Unsupported
+ // DXGI_FORMAT_B4G4R4A4_UNORM
+ { }, // Unsupported
+ // DXGI_FORMAT_P208
+ { }, // Unsupported
+ // DXGI_FORMAT_V208
+ { }, // Unsupported
+ // DXGI_FORMAT_V408
+ { }, // Unsupported
+ }};
+
+
+ DXGIVkFormatTable::DXGIVkFormatTable(const Rc<DxvkAdapter>& adapter)
+ : m_dxgiFormats (g_dxgiFormats), m_dxgiFamilies(g_dxgiFamilies) {
+ // AMD do not support 24-bit depth buffers on Vulkan,
+ // so we have to fall back to a 32-bit depth format.
+ if (!CheckImageFormatSupport(adapter, VK_FORMAT_D24_UNORM_S8_UINT,
+ VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
+ VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
+ Logger::info("DXGI: VK_FORMAT_D24_UNORM_S8_UINT -> VK_FORMAT_D32_SFLOAT_S8_UINT");
+ RemapDepthFormat(DXGI_FORMAT_R24G8_TYPELESS, VK_FORMAT_D32_SFLOAT_S8_UINT);
+ RemapDepthFormat(DXGI_FORMAT_R24_UNORM_X8_TYPELESS, VK_FORMAT_D32_SFLOAT_S8_UINT);
+ 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);
+ }
+
+ if (!adapter->features().ext4444Formats.formatA4R4G4B4) {
+ RemapColorFormat(DXGI_FORMAT_B4G4R4A4_UNORM, VK_FORMAT_B4G4R4A4_UNORM_PACK16,
+ { VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_R,
+ VK_COMPONENT_SWIZZLE_A, VK_COMPONENT_SWIZZLE_B });
+ }
+ }
+
+
+ DXGIVkFormatTable::~DXGIVkFormatTable() {
+
+ }
+
+
+ DXGI_VK_FORMAT_INFO DXGIVkFormatTable::GetFormatInfo(
+ DXGI_FORMAT Format,
+ DXGI_VK_FORMAT_MODE Mode) const {
+ return GetFormatInfoFromMapping(
+ GetFormatMapping(Format), Mode);
+ }
+
+
+ DXGI_VK_FORMAT_INFO DXGIVkFormatTable::GetPackedFormatInfo(
+ DXGI_FORMAT Format,
+ DXGI_VK_FORMAT_MODE Mode) const {
+ return GetFormatInfoFromMapping(
+ GetPackedFormatMapping(Format), Mode);
+ }
+
+
+ DXGI_VK_FORMAT_FAMILY DXGIVkFormatTable::GetFormatFamily(
+ DXGI_FORMAT Format,
+ DXGI_VK_FORMAT_MODE Mode) const {
+ if (Mode == DXGI_VK_FORMAT_MODE_DEPTH)
+ return DXGI_VK_FORMAT_FAMILY();
+
+ const size_t formatId = size_t(Format);
+
+ return formatId < m_dxgiFamilies.size()
+ ? m_dxgiFamilies[formatId]
+ : m_dxgiFamilies[0];
+ }
+
+
+ DXGI_VK_FORMAT_INFO DXGIVkFormatTable::GetFormatInfoFromMapping(
+ const DXGI_VK_FORMAT_MAPPING* pMapping,
+ DXGI_VK_FORMAT_MODE Mode) const {
+ switch (Mode) {
+ case DXGI_VK_FORMAT_MODE_ANY:
+ return pMapping->FormatColor != VK_FORMAT_UNDEFINED
+ ? DXGI_VK_FORMAT_INFO { pMapping->FormatColor, pMapping->AspectColor, pMapping->Swizzle }
+ : DXGI_VK_FORMAT_INFO { pMapping->FormatDepth, pMapping->AspectDepth };
+
+ case DXGI_VK_FORMAT_MODE_COLOR:
+ return { pMapping->FormatColor, pMapping->AspectColor, pMapping->Swizzle };
+
+ case DXGI_VK_FORMAT_MODE_DEPTH:
+ return { pMapping->FormatDepth, pMapping->AspectDepth };
+
+ case DXGI_VK_FORMAT_MODE_RAW:
+ return { pMapping->FormatRaw, pMapping->AspectColor };
+ }
+
+ Logger::err("DXGI: GetFormatInfoFromMapping: Internal error");
+ return DXGI_VK_FORMAT_INFO();
+ }
+
+
+ const DXGI_VK_FORMAT_MAPPING* DXGIVkFormatTable::GetFormatMapping(
+ DXGI_FORMAT Format) const {
+ const size_t formatId = size_t(Format);
+
+ return formatId < m_dxgiFormats.size()
+ ? &m_dxgiFormats[formatId]
+ : &m_dxgiFormats[0];
+ }
+
+
+ const DXGI_VK_FORMAT_MAPPING* DXGIVkFormatTable::GetPackedFormatMapping(
+ DXGI_FORMAT Format) const {
+ const size_t formatId = size_t(Format);
+
+ return formatId < g_dxgiFormats.size()
+ ? &g_dxgiFormats[formatId]
+ : &g_dxgiFormats[0];
+ }
+
+
+ bool DXGIVkFormatTable::CheckImageFormatSupport(
+ const Rc<DxvkAdapter>& Adapter,
+ VkFormat Format,
+ VkFormatFeatureFlags Features) const {
+ VkFormatProperties supported = Adapter->formatProperties(Format);
+
+ return (supported.linearTilingFeatures & Features) == Features
+ || (supported.optimalTilingFeatures & Features) == Features;
+ }
+
+
+ void DXGIVkFormatTable::RemapDepthFormat(
+ DXGI_FORMAT Format,
+ VkFormat Target) {
+ m_dxgiFormats[uint32_t(Format)].FormatDepth = Target;
+ }
+
+
+ void DXGIVkFormatTable::RemapColorFormat(
+ DXGI_FORMAT Format,
+ VkFormat Target,
+ VkComponentMapping Swizzle) {
+ m_dxgiFormats[uint32_t(Format)].FormatColor = Target;
+ m_dxgiFormats[uint32_t(Format)].Swizzle = Swizzle;
+ }
+
+} \ No newline at end of file