From 42b8fc333894b0c7dbae16b19f1e4a75cf79ea5f Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 23 Nov 2021 17:37:08 +0100 Subject: [PATCH] vkd3d: Introduce new format compatibility table. Signed-off-by: Philip Rebohle --- libs/vkd3d/utils.c | 233 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c index af44d39c..e46dd5f6 100644 --- a/libs/vkd3d/utils.c +++ b/libs/vkd3d/utils.c @@ -153,6 +153,239 @@ static const struct vkd3d_format vkd3d_depth_stencil_formats[] = #undef SINT #undef UINT +static const struct vkd3d_format_compatibility_info_2 +{ + DXGI_FORMAT image_format; + DXGI_FORMAT view_formats[VKD3D_MAX_COMPATIBLE_FORMAT_COUNT]; + DXGI_FORMAT uint_format; /* for ClearUAVUint */ +} +vkd3d_format_compatibility_info_2[] = +{ + {DXGI_FORMAT_R32G32B32A32_TYPELESS, + {DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_SINT}, + DXGI_FORMAT_R32G32B32A32_UINT}, + {DXGI_FORMAT_R32G32B32A32_FLOAT, {}, + DXGI_FORMAT_R32G32B32A32_UINT}, + {DXGI_FORMAT_R32G32B32A32_UINT, + {DXGI_FORMAT_R32G32B32A32_SINT}, + DXGI_FORMAT_R32G32B32A32_UINT}, + {DXGI_FORMAT_R32G32B32A32_SINT, + {DXGI_FORMAT_R32G32B32A32_UINT}, + DXGI_FORMAT_R32G32B32A32_UINT}, + + {DXGI_FORMAT_R32G32B32_TYPELESS, + {DXGI_FORMAT_R32G32B32_FLOAT, DXGI_FORMAT_R32G32B32_UINT, DXGI_FORMAT_R32G32B32_SINT}, + DXGI_FORMAT_R32G32B32_UINT}, + {DXGI_FORMAT_R32G32B32_FLOAT, {}, + DXGI_FORMAT_R32G32B32_UINT}, + {DXGI_FORMAT_R32G32B32_UINT, + {DXGI_FORMAT_R32G32B32_SINT}, + DXGI_FORMAT_R32G32B32_UINT}, + {DXGI_FORMAT_R32G32B32_SINT, + {DXGI_FORMAT_R32G32B32_UINT}, + DXGI_FORMAT_R32G32B32_UINT}, + + {DXGI_FORMAT_R16G16B16A16_TYPELESS, + {DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_SNORM, DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_SINT}, + DXGI_FORMAT_R16G16B16A16_UINT}, + {DXGI_FORMAT_R16G16B16A16_FLOAT, {}, + DXGI_FORMAT_R16G16B16A16_UINT}, + {DXGI_FORMAT_R16G16B16A16_UINT, + {DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_SNORM}, + DXGI_FORMAT_R16G16B16A16_UINT}, + {DXGI_FORMAT_R16G16B16A16_SINT, + {DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_SNORM}, + DXGI_FORMAT_R16G16B16A16_UINT}, + {DXGI_FORMAT_R16G16B16A16_UNORM, + {DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_SINT}, + DXGI_FORMAT_R16G16B16A16_UINT}, + {DXGI_FORMAT_R16G16B16A16_SNORM, + {DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_SINT}, + DXGI_FORMAT_R16G16B16A16_UINT}, + + {DXGI_FORMAT_R32G32_TYPELESS, + {DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_SINT}, + DXGI_FORMAT_R32G32_UINT}, + {DXGI_FORMAT_R32G32_FLOAT, {}, + DXGI_FORMAT_R32G32_UINT}, + {DXGI_FORMAT_R32G32_UINT, + {DXGI_FORMAT_R32G32_SINT}, + DXGI_FORMAT_R32G32_UINT}, + {DXGI_FORMAT_R32G32_SINT, + {DXGI_FORMAT_R32G32_UINT}, + DXGI_FORMAT_R32G32_UINT}, + + {DXGI_FORMAT_R10G10B10A2_TYPELESS, + {DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UINT}, + DXGI_FORMAT_R10G10B10A2_UINT}, + {DXGI_FORMAT_R10G10B10A2_UINT, + {DXGI_FORMAT_R10G10B10A2_UNORM}, + DXGI_FORMAT_R10G10B10A2_UINT}, + {DXGI_FORMAT_R10G10B10A2_UNORM, + {DXGI_FORMAT_R10G10B10A2_UINT}, + DXGI_FORMAT_R10G10B10A2_UINT}, + + {DXGI_FORMAT_R11G11B10_FLOAT, {}, + DXGI_FORMAT_R32_UINT}, + + {DXGI_FORMAT_R8G8_TYPELESS, + {DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_R8G8_SINT, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_SNORM}, + DXGI_FORMAT_R8G8_UINT}, + {DXGI_FORMAT_R8G8_UINT, + {DXGI_FORMAT_R8G8_SINT, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_SNORM}, + DXGI_FORMAT_R8G8_UINT}, + {DXGI_FORMAT_R8G8_SINT, + {DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_SNORM}, + DXGI_FORMAT_R8G8_UINT}, + {DXGI_FORMAT_R8G8_UNORM, + {DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_R8G8_SINT}, + DXGI_FORMAT_R8G8_UINT}, + {DXGI_FORMAT_R8G8_SNORM, + {DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_R8G8_SINT}, + DXGI_FORMAT_R8G8_UINT}, + + {DXGI_FORMAT_R8G8B8A8_TYPELESS, + {DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_R8G8B8A8_SNORM}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_R8G8B8A8_UINT, + {DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_R8G8B8A8_SNORM}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_R8G8B8A8_SINT, + {DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_R8G8B8A8_SNORM}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, + {DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_UNORM}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_R8G8B8A8_UNORM, + {DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_R8G8B8A8_SNORM, + {DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_SINT}, + DXGI_FORMAT_R8G8B8A8_UINT}, + + {DXGI_FORMAT_R16G16_TYPELESS, + {DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_R16G16_SINT, DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R16G16_SNORM}, + DXGI_FORMAT_R16G16_UINT}, + {DXGI_FORMAT_R16G16_FLOAT, {}, + DXGI_FORMAT_R16G16_UINT}, + {DXGI_FORMAT_R16G16_UINT, + {DXGI_FORMAT_R16G16_SINT, DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R16G16_SNORM}, + DXGI_FORMAT_R16G16_UINT}, + {DXGI_FORMAT_R16G16_SINT, + {DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R16G16_SNORM}, + DXGI_FORMAT_R16G16_UINT}, + {DXGI_FORMAT_R16G16_UNORM, + {DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_R16G16_SINT}, + DXGI_FORMAT_R16G16_UINT}, + {DXGI_FORMAT_R16G16_SNORM, + {DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_R16G16_SINT}, + DXGI_FORMAT_R16G16_UINT}, + + {DXGI_FORMAT_R32_TYPELESS, + {DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_SINT}, + DXGI_FORMAT_R32_UINT}, + {DXGI_FORMAT_R32_FLOAT, {}, + DXGI_FORMAT_R32_UINT}, + {DXGI_FORMAT_R32_UINT, + {DXGI_FORMAT_R32_SINT}, + DXGI_FORMAT_R32_UINT}, + {DXGI_FORMAT_R32_SINT, + {DXGI_FORMAT_R32_UINT}, + DXGI_FORMAT_R32_UINT}, + + {DXGI_FORMAT_R16_TYPELESS, + {DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_SNORM}, + DXGI_FORMAT_R16_UINT}, + {DXGI_FORMAT_R16_FLOAT, {}, + DXGI_FORMAT_R16_UINT}, + {DXGI_FORMAT_R16_UINT, + {DXGI_FORMAT_R16_SINT, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_SNORM}, + DXGI_FORMAT_R16_UINT}, + {DXGI_FORMAT_R16_SINT, + {DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_SNORM}, + DXGI_FORMAT_R16_UINT}, + {DXGI_FORMAT_R16_UNORM, + {DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_SINT}, + DXGI_FORMAT_R16_UINT}, + {DXGI_FORMAT_R16_SNORM, + {DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_SINT}, + DXGI_FORMAT_R16_UINT}, + + {DXGI_FORMAT_R8_TYPELESS, + {DXGI_FORMAT_R8_UINT, DXGI_FORMAT_R8_SINT, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_SNORM, DXGI_FORMAT_A8_UNORM}, + DXGI_FORMAT_R8_UINT}, + {DXGI_FORMAT_R8_UINT, + {DXGI_FORMAT_R8_SINT, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_SNORM, DXGI_FORMAT_A8_UNORM}, + DXGI_FORMAT_R8_UINT}, + {DXGI_FORMAT_R8_SINT, + {DXGI_FORMAT_R8_UINT, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_SNORM, DXGI_FORMAT_A8_UNORM}, + DXGI_FORMAT_R8_UINT}, + {DXGI_FORMAT_R8_UNORM, + {DXGI_FORMAT_R8_UINT, DXGI_FORMAT_R8_SINT, DXGI_FORMAT_A8_UNORM}, + DXGI_FORMAT_R8_UINT}, + {DXGI_FORMAT_R8_SNORM, + {DXGI_FORMAT_R8_UINT, DXGI_FORMAT_R8_SINT}, + DXGI_FORMAT_R8_UINT}, + {DXGI_FORMAT_A8_UNORM, + {DXGI_FORMAT_R8_UINT, DXGI_FORMAT_R8_SINT, DXGI_FORMAT_R8_UNORM}, + DXGI_FORMAT_R8_UINT}, + + {DXGI_FORMAT_B8G8R8A8_TYPELESS, + {DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_B8G8R8A8_UNORM, + {DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, + {DXGI_FORMAT_B8G8R8A8_UNORM}, + DXGI_FORMAT_R8G8B8A8_UINT}, + + {DXGI_FORMAT_B8G8R8X8_TYPELESS, + {DXGI_FORMAT_B8G8R8X8_UNORM, DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_B8G8R8X8_UNORM, + {DXGI_FORMAT_B8G8R8X8_UNORM_SRGB}, + DXGI_FORMAT_R8G8B8A8_UINT}, + {DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, + {DXGI_FORMAT_B8G8R8X8_UNORM}, + DXGI_FORMAT_R8G8B8A8_UINT}, + + {DXGI_FORMAT_BC1_TYPELESS, + {DXGI_FORMAT_BC1_UNORM, DXGI_FORMAT_BC1_UNORM_SRGB}}, + {DXGI_FORMAT_BC1_UNORM, + {DXGI_FORMAT_BC1_UNORM_SRGB}}, + {DXGI_FORMAT_BC1_UNORM_SRGB, + {DXGI_FORMAT_BC1_UNORM}}, + + {DXGI_FORMAT_BC2_TYPELESS, + {DXGI_FORMAT_BC2_UNORM, DXGI_FORMAT_BC2_UNORM_SRGB}}, + {DXGI_FORMAT_BC2_UNORM, + {DXGI_FORMAT_BC2_UNORM_SRGB}}, + {DXGI_FORMAT_BC2_UNORM_SRGB, + {DXGI_FORMAT_BC2_UNORM}}, + + {DXGI_FORMAT_BC3_TYPELESS, + {DXGI_FORMAT_BC3_UNORM, DXGI_FORMAT_BC3_UNORM_SRGB}}, + {DXGI_FORMAT_BC3_UNORM, + {DXGI_FORMAT_BC3_UNORM_SRGB}}, + {DXGI_FORMAT_BC3_UNORM_SRGB, + {DXGI_FORMAT_BC3_UNORM}}, + + {DXGI_FORMAT_BC4_TYPELESS, + {DXGI_FORMAT_BC4_UNORM, DXGI_FORMAT_BC4_SNORM}}, + {DXGI_FORMAT_BC5_TYPELESS, + {DXGI_FORMAT_BC5_UNORM, DXGI_FORMAT_BC5_SNORM}}, + {DXGI_FORMAT_BC6H_TYPELESS, + {DXGI_FORMAT_BC6H_UF16, DXGI_FORMAT_BC6H_SF16}}, + + {DXGI_FORMAT_BC7_TYPELESS, + {DXGI_FORMAT_BC7_UNORM, DXGI_FORMAT_BC7_UNORM_SRGB}}, + {DXGI_FORMAT_BC7_UNORM, + {DXGI_FORMAT_BC7_UNORM_SRGB}}, + {DXGI_FORMAT_BC7_UNORM_SRGB, + {DXGI_FORMAT_BC7_UNORM}}, +}; + static const struct vkd3d_format_compatibility_info { DXGI_FORMAT format;