From 4cdf38d3922c601ba70bbe0e7d71fdddb4440e0e Mon Sep 17 00:00:00 2001 From: Conor McCarthy Date: Mon, 15 Apr 2024 13:58:30 +1000 Subject: [PATCH] vkd3d: Support DXGI_FORMAT_B5G6R5_UNORM. --- libs/vkd3d/command.c | 6 ++++++ libs/vkd3d/utils.c | 1 + tests/d3d12.c | 5 ++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index 7115a74a..2b3f2869 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -5414,6 +5414,12 @@ static const struct vkd3d_format *vkd3d_fixup_clear_uav_uint_colour(struct d3d12 | ((colour->uint32[2] & 0x3ff) << 22); return vkd3d_get_format(device, DXGI_FORMAT_R32_UINT, false); + case DXGI_FORMAT_B5G6R5_UNORM: + colour->uint32[0] = (colour->uint32[2] & 0x1f) + | ((colour->uint32[1] & 0x3f) << 5) + | ((colour->uint32[0] & 0x1f) << 11); + return vkd3d_get_format(device, DXGI_FORMAT_R16_UINT, false); + default: return NULL; } diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c index ac79ae5d..c62dc55a 100644 --- a/libs/vkd3d/utils.c +++ b/libs/vkd3d/utils.c @@ -87,6 +87,7 @@ static const struct vkd3d_format vkd3d_formats[] = {DXGI_FORMAT_R8_SNORM, VK_FORMAT_R8_SNORM, 1, 1, 1, 1, COLOR, 1}, {DXGI_FORMAT_R8_SINT, VK_FORMAT_R8_SINT, 1, 1, 1, 1, COLOR, 1, SINT}, {DXGI_FORMAT_A8_UNORM, VK_FORMAT_R8_UNORM, 1, 1, 1, 1, COLOR, 1}, + {DXGI_FORMAT_B5G6R5_UNORM, VK_FORMAT_R5G6B5_UNORM_PACK16, 2, 1, 1, 1, COLOR, 1}, {DXGI_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8A8_UNORM, 4, 1, 1, 1, COLOR, 1}, {DXGI_FORMAT_B8G8R8X8_UNORM, VK_FORMAT_B8G8R8A8_UNORM, 4, 1, 1, 1, COLOR, 1}, {DXGI_FORMAT_B8G8R8A8_TYPELESS, VK_FORMAT_B8G8R8A8_UNORM, 4, 1, 1, 1, COLOR, 1, TYPELESS}, diff --git a/tests/d3d12.c b/tests/d3d12.c index 61f6f05e..dcb4a638 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -954,7 +954,6 @@ static void test_check_feature_support(void) is_todo = format == DXGI_FORMAT_R9G9B9E5_SHAREDEXP || format == DXGI_FORMAT_R8G8_B8G8_UNORM || format == DXGI_FORMAT_G8R8_G8B8_UNORM - || format == DXGI_FORMAT_B5G6R5_UNORM || format == DXGI_FORMAT_B5G5R5A1_UNORM || format == DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM || (DXGI_FORMAT_AYUV <= format && format <= DXGI_FORMAT_B4G4R4A4_UNORM); @@ -5750,7 +5749,7 @@ static void test_clear_unordered_access_view_image(void) {DXGI_FORMAT_R8G8B8A8_UINT, 1, 1, 0, 0, 1, 0, {}, {0x123, 0, 0, 0}, 0x00000023, false, true}, {DXGI_FORMAT_R8G8B8A8_UNORM, 1, 1, 0, 0, 1, 0, {}, {1, 2, 3, 4}, 0x04030201}, {DXGI_FORMAT_R11G11B10_FLOAT, 1, 1, 0, 0, 1, 0, {}, {1, 2, 3, 4}, 0x00c01001}, - {DXGI_FORMAT_B5G6R5_UNORM, 1, 1, 0, 0, 1, 0, {}, {1, 2, 3, 4}, 0x00000843, false, true}, + {DXGI_FORMAT_B5G6R5_UNORM, 1, 1, 0, 0, 1, 0, {}, {1, 2, 3, 4}, 0x00000843}, {DXGI_FORMAT_B5G5R5A1_UNORM, 1, 1, 0, 0, 1, 0, {}, {1, 2, 3, 1}, 0x00008443, false, true}, {DXGI_FORMAT_B4G4R4A4_UNORM, 1, 1, 0, 0, 1, 0, {}, {1, 2, 3, 1}, 0x00001123, false, true, true}, /* Test float clears with formats. */ @@ -5767,7 +5766,7 @@ static void test_clear_unordered_access_view_image(void) 0x00000380, true}, {DXGI_FORMAT_B5G6R5_UNORM, 1, 1, 0, 0, 1, 0, {}, {0x3f000000 /* 0.5f */, 0x3f800000 /* 1.0f */, 0x40000000 /* -1.0f */, 0}, - 0x87ff, true, true}, + 0x87ff, true}, {DXGI_FORMAT_B5G5R5A1_UNORM, 1, 1, 0, 0, 1, 0, {}, {0x3f000000 /* 0.5f */, 0x3e800000 /* 0.25f */, 0x3e000000 /* 0.125f */, 0x3f800000 /* 1.0f */}, 0xc104, true, true},