summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoe Hao Cheng <haochengho12907@gmail.com>2020-12-27 01:43:52 +0800
committerMarge Bot <eric+marge@anholt.net>2020-12-28 21:12:53 +0000
commit5a1518e86b4ae743162f92fefd7c41804cac611f (patch)
tree16dea5d495ba682f1821592f63b6d4ae9261dcd9
parent0f5726c5035249a6398f8db884d199bffed14a77 (diff)
zink: add support for VK_EXT_4444_formats
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8240>
-rw-r--r--src/gallium/drivers/zink/zink_device_info.py3
-rw-r--r--src/gallium/drivers/zink/zink_format.c2
-rw-r--r--src/gallium/drivers/zink/zink_screen.c6
3 files changed, 11 insertions, 0 deletions
diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py
index 6c6957567d5..f849356105f 100644
--- a/src/gallium/drivers/zink/zink_device_info.py
+++ b/src/gallium/drivers/zink/zink_device_info.py
@@ -113,6 +113,9 @@ EXTENSIONS = [
properties=True,
features=True,
guard=True),
+ Extension("VK_EXT_4444_formats",
+ alias="format_4444",
+ features=True),
]
# constructor: Versions(device_version(major, minor, patch), struct_version(major, minor))
diff --git a/src/gallium/drivers/zink/zink_format.c b/src/gallium/drivers/zink/zink_format.c
index 91f51f64ffc..e5a85c9e59d 100644
--- a/src/gallium/drivers/zink/zink_format.c
+++ b/src/gallium/drivers/zink/zink_format.c
@@ -93,6 +93,8 @@ static const VkFormat formats[PIPE_FORMAT_COUNT] = {
// other color formats
[PIPE_FORMAT_A4B4G4R4_UNORM] = VK_FORMAT_R4G4B4A4_UNORM_PACK16,
[PIPE_FORMAT_A4R4G4B4_UNORM] = VK_FORMAT_B4G4R4A4_UNORM_PACK16,
+ [PIPE_FORMAT_B4G4R4A4_UNORM] = VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,
+ [PIPE_FORMAT_R4G4B4A4_UNORM] = VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT,
[PIPE_FORMAT_B5G6R5_UNORM] = VK_FORMAT_R5G6B5_UNORM_PACK16,
[PIPE_FORMAT_R5G6B5_UNORM] = VK_FORMAT_B5G6R5_UNORM_PACK16,
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index b706ead2cc7..8aaaa32883c 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -804,6 +804,12 @@ zink_get_format(struct zink_screen *screen, enum pipe_format format)
return VK_FORMAT_D32_SFLOAT_S8_UINT;
}
+ if ((ret == VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT &&
+ !screen->info.format_4444_feats.formatA4B4G4R4) ||
+ (ret == VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT &&
+ !screen->info.format_4444_feats.formatA4R4G4B4))
+ return VK_FORMAT_UNDEFINED;
+
return ret;
}