GPUDevice: Add D24S8/D32F/D32FS8 types

This commit is contained in:
Stenzek 2024-06-29 12:37:23 +10:00
parent 3f25db79b8
commit d8bd35e8d6
No known key found for this signature in database
6 changed files with 93 additions and 70 deletions

View file

@ -470,29 +470,32 @@ std::optional<DynamicHeapArray<u8>> D3DCommon::CompileShader(u32 shader_model, b
static constexpr std::array<D3DCommon::DXGIFormatMapping, static_cast<int>(GPUTexture::Format::MaxCount)> static constexpr std::array<D3DCommon::DXGIFormatMapping, static_cast<int>(GPUTexture::Format::MaxCount)>
s_format_mapping = {{ s_format_mapping = {{
// clang-format off // clang-format off
// d3d_format srv_format rtv_format dsv_format // d3d_format srv_format rtv_format dsv_format
{DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // Unknown {DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN }, // Unknown
{DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN }, // RGBA8 {DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN }, // RGBA8
{DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN }, // BGRA8 {DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN }, // BGRA8
{DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_UNKNOWN }, // RGB565 {DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_B5G6R5_UNORM, DXGI_FORMAT_UNKNOWN }, // RGB565
{DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_UNKNOWN }, // RGBA5551 {DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_B5G5R5A1_UNORM, DXGI_FORMAT_UNKNOWN }, // RGBA5551
{DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_UNKNOWN }, // R8 {DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_UNKNOWN }, // R8
{DXGI_FORMAT_R16_TYPELESS, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D16_UNORM }, // D16 {DXGI_FORMAT_R16_TYPELESS, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D16_UNORM }, // D16
{DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_UNKNOWN }, // R16 {DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_D24_UNORM_S8_UINT }, // D24S8
{DXGI_FORMAT_R16_SINT, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_UNKNOWN }, // R16I {DXGI_FORMAT_R32_TYPELESS, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_D32_FLOAT }, // D32F
{DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_UINT, DXGI_FORMAT_UNKNOWN }, // R16U {DXGI_FORMAT_R32G8X24_TYPELESS, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, DXGI_FORMAT_D32_FLOAT_S8X24_UINT }, // D32FS8
{DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_UNKNOWN }, // R16F {DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_UNKNOWN }, // R16
{DXGI_FORMAT_R32_SINT, DXGI_FORMAT_R32_SINT, DXGI_FORMAT_R32_SINT, DXGI_FORMAT_UNKNOWN }, // R32I {DXGI_FORMAT_R16_SINT, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_UNKNOWN }, // R16I
{DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_UNKNOWN }, // R32U {DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_UINT, DXGI_FORMAT_UNKNOWN }, // R16U
{DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_UNKNOWN }, // R32F {DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_UNKNOWN }, // R16F
{DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_UNKNOWN }, // RG8 {DXGI_FORMAT_R32_SINT, DXGI_FORMAT_R32_SINT, DXGI_FORMAT_R32_SINT, DXGI_FORMAT_UNKNOWN }, // R32I
{DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_UNKNOWN }, // RG16 {DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_UNKNOWN }, // R32U
{DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_UNKNOWN }, // RG16F {DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_UNKNOWN }, // R32F
{DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_UNKNOWN }, // RG32F {DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_UNKNOWN }, // RG8
{DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_UNKNOWN }, // RGBA16 {DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_R16G16_UNORM, DXGI_FORMAT_UNKNOWN }, // RG16
{DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_UNKNOWN }, // RGBA16F {DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_UNKNOWN }, // RG16F
{DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN }, // RGBA32F {DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_UNKNOWN }, // RG32F
{DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_UNKNOWN }, // RGB10A2 {DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_UNKNOWN }, // RGBA16
{DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_UNKNOWN }, // RGBA16F
{DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN }, // RGBA32F
{DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_UNKNOWN }, // RGB10A2
// clang-format on // clang-format on
}}; }};

View file

@ -33,6 +33,9 @@ const char* GPUTexture::GetFormatName(Format format)
"RGB5551", // RGBA5551 "RGB5551", // RGBA5551
"R8", // R8 "R8", // R8
"D16", // D16 "D16", // D16
"D24S8", // D24S8
"D32F", // D32F
"D32FS8S", // D32FS8
"R16", // R16 "R16", // R16
"R16I", // R16I "R16I", // R16I
"R16U", // R16U "R16U", // R16U
@ -149,6 +152,9 @@ u32 GPUTexture::GetPixelSize(GPUTexture::Format format)
2, // RGBA5551 2, // RGBA5551
1, // R8 1, // R8
2, // D16 2, // D16
4, // D24S8
4, // D32F
8, // D32FS8
2, // R16 2, // R16
2, // R16I 2, // R16I
2, // R16U 2, // R16U
@ -171,13 +177,12 @@ u32 GPUTexture::GetPixelSize(GPUTexture::Format format)
bool GPUTexture::IsDepthFormat(Format format) bool GPUTexture::IsDepthFormat(Format format)
{ {
return (format == Format::D16); return (format >= Format::D16 && format <= Format::D32FS8);
} }
bool GPUTexture::IsDepthStencilFormat(Format format) bool GPUTexture::IsDepthStencilFormat(Format format)
{ {
// None needed yet. return (format == Format::D24S8 || format == Format::D32FS8);
return false;
} }
bool GPUTexture::IsCompressedFormat(Format format) bool GPUTexture::IsCompressedFormat(Format format)

View file

@ -41,6 +41,9 @@ public:
RGBA5551, RGBA5551,
R8, R8,
D16, D16,
D24S8,
D32F,
D32FS8,
R16, R16,
R16I, R16I,
R16U, R16U,

View file

@ -39,6 +39,9 @@ static constexpr std::array<MTLPixelFormat, static_cast<u32>(GPUTexture::Format:
MTLPixelFormatA1BGR5Unorm, // RGBA5551 MTLPixelFormatA1BGR5Unorm, // RGBA5551
MTLPixelFormatR8Unorm, // R8 MTLPixelFormatR8Unorm, // R8
MTLPixelFormatDepth16Unorm, // D16 MTLPixelFormatDepth16Unorm, // D16
MTLPixelFormatDepth24Unorm_Stencil8, // D24S8
MTLPixelFormatDepth32Float, // D32F
MTLPixelFormatDepth32Float_Stencil8, // D32FS8
MTLPixelFormatR16Unorm, // R16 MTLPixelFormatR16Unorm, // R16
MTLPixelFormatR16Sint, // R16I MTLPixelFormatR16Sint, // R16I
MTLPixelFormatR16Uint, // R16U MTLPixelFormatR16Uint, // R16U

View file

@ -29,55 +29,61 @@ const std::tuple<GLenum, GLenum, GLenum>& OpenGLTexture::GetPixelFormatMapping(G
{ {
static constexpr std::array<std::tuple<GLenum, GLenum, GLenum>, static_cast<u32>(GPUTexture::Format::MaxCount)> static constexpr std::array<std::tuple<GLenum, GLenum, GLenum>, static_cast<u32>(GPUTexture::Format::MaxCount)>
mapping = {{ mapping = {{
{}, // Unknown {}, // Unknown
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE}, // RGBA8 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE}, // RGBA8
{GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8
{GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // RGB565 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // RGB565
{GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // RGBA5551 {GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // RGBA5551
{GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8 {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8
{GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_SHORT}, // D16 {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_SHORT}, // D16
{GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT}, // D24S8
{GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16I {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // D32F
{GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16U {GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, GL_FLOAT}, // D32FS8
{GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16F {GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16
{GL_R32I, GL_RED_INTEGER, GL_INT}, // R32I {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16I
{GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32U {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16U
{GL_R32F, GL_RED, GL_FLOAT}, // R32F {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16F
{GL_RG8, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // RG8 {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32I
{GL_RG16F, GL_RG, GL_UNSIGNED_SHORT}, // RG16 {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32U
{GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16F {GL_R32F, GL_RED, GL_FLOAT}, // R32F
{GL_RG32F, GL_RG, GL_FLOAT}, // RG32F {GL_RG8, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // RG8
{GL_RGBA16, GL_RGBA, GL_UNSIGNED_BYTE}, // RGBA16 {GL_RG16F, GL_RG, GL_UNSIGNED_SHORT}, // RG16
{GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16F {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16F
{GL_RGBA32F, GL_RGBA, GL_FLOAT}, // RGBA32F {GL_RG32F, GL_RG, GL_FLOAT}, // RG32F
{GL_RGB10_A2, GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV}, // RGB10A2 {GL_RGBA16, GL_RGBA, GL_UNSIGNED_BYTE}, // RGBA16
{GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16F
{GL_RGBA32F, GL_RGBA, GL_FLOAT}, // RGBA32F
{GL_RGB10_A2, GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV}, // RGB10A2
}}; }};
// GLES doesn't have the non-normalized 16-bit formats.. use float and hope for the best, lol. // GLES doesn't have the non-normalized 16-bit formats.. use float and hope for the best, lol.
static constexpr std::array<std::tuple<GLenum, GLenum, GLenum>, static_cast<u32>(GPUTexture::Format::MaxCount)> static constexpr std::array<std::tuple<GLenum, GLenum, GLenum>, static_cast<u32>(GPUTexture::Format::MaxCount)>
mapping_gles = {{ mapping_gles = {{
{}, // Unknown {}, // Unknown
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE}, // RGBA8 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE}, // RGBA8
{GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // BGRA8
{GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // RGB565 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // RGB565
{GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // RGBA5551 {GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // RGBA5551
{GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8 {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8
{GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_SHORT}, // D16 {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_SHORT}, // D16
{GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT}, // D24S8
{GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16I {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // D32F
{GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16U {GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, GL_FLOAT}, // D32FS8
{GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16F {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16
{GL_R32I, GL_RED_INTEGER, GL_INT}, // R32I {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16I
{GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32U {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16U
{GL_R32F, GL_RED, GL_FLOAT}, // R32F {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16F
{GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // RG8 {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32I
{GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16 {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32U
{GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16F {GL_R32F, GL_RED, GL_FLOAT}, // R32F
{GL_RG32F, GL_RG, GL_FLOAT}, // RG32F {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // RG8
{GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16 {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16
{GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16F {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // RG16F
{GL_RGBA32F, GL_RGBA, GL_FLOAT}, // RGBA32F {GL_RG32F, GL_RG, GL_FLOAT}, // RG32F
{GL_RGB10_A2, GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV}, // RGB10A2 {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16
{GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // RGBA16F
{GL_RGBA32F, GL_RGBA, GL_FLOAT}, // RGBA32F
{GL_RGB10_A2, GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV}, // RGB10A2
}}; }};
return gles ? mapping_gles[static_cast<u32>(format)] : mapping[static_cast<u32>(format)]; return gles ? mapping_gles[static_cast<u32>(format)] : mapping[static_cast<u32>(format)];

View file

@ -78,6 +78,9 @@ const std::array<VkFormat, static_cast<u32>(GPUTexture::Format::MaxCount)> Vulka
VK_FORMAT_R5G5B5A1_UNORM_PACK16, // RGBA5551 VK_FORMAT_R5G5B5A1_UNORM_PACK16, // RGBA5551
VK_FORMAT_R8_UNORM, // R8 VK_FORMAT_R8_UNORM, // R8
VK_FORMAT_D16_UNORM, // D16 VK_FORMAT_D16_UNORM, // D16
VK_FORMAT_D24_UNORM_S8_UINT, // D24S8
VK_FORMAT_D32_SFLOAT, // D32F
VK_FORMAT_D32_SFLOAT_S8_UINT, // D32FS8
VK_FORMAT_R16_UNORM, // R16 VK_FORMAT_R16_UNORM, // R16
VK_FORMAT_R16_SINT, // R16I VK_FORMAT_R16_SINT, // R16I
VK_FORMAT_R16_UINT, // R16U VK_FORMAT_R16_UINT, // R16U