From ca8b49d8581b3b1f5a63d2f95007279ca40efd6b Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 20 Nov 2025 18:27:54 +0100 Subject: [PATCH] render/vulkan: add new 16- and 32-bits-per-component pixel formats Compatibility table based on pixfmtdb. --- render/vulkan/pixel_format.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/render/vulkan/pixel_format.c b/render/vulkan/pixel_format.c index 9319d0daa..902feac9a 100644 --- a/render/vulkan/pixel_format.c +++ b/render/vulkan/pixel_format.c @@ -17,11 +17,27 @@ static const struct wlr_vk_format formats[] = { .vk = VK_FORMAT_R8_UNORM, .vk_srgb = VK_FORMAT_R8_SRGB, }, + { + .drm = DRM_FORMAT_R16F, + .vk = VK_FORMAT_R16_SFLOAT, + }, + { + .drm = DRM_FORMAT_R32F, + .vk = VK_FORMAT_R32_SFLOAT, + }, { .drm = DRM_FORMAT_GR88, .vk = VK_FORMAT_R8G8_UNORM, .vk_srgb = VK_FORMAT_R8G8_SRGB, }, + { + .drm = DRM_FORMAT_GR1616F, + .vk = VK_FORMAT_R16G16_SFLOAT, + }, + { + .drm = DRM_FORMAT_GR3232F, + .vk = VK_FORMAT_R32G32_SFLOAT, + }, { .drm = DRM_FORMAT_RGB888, .vk = VK_FORMAT_B8G8R8_UNORM, @@ -126,6 +142,14 @@ static const struct wlr_vk_format formats[] = { // On little endian systems the memory representation of each channel // matches the DRM formats'. #if WLR_LITTLE_ENDIAN + { + .drm = DRM_FORMAT_BGR161616, + .vk = VK_FORMAT_R16G16B16_UNORM, + }, + { + .drm = DRM_FORMAT_BGR161616F, + .vk = VK_FORMAT_R16G16B16_SFLOAT, + }, { .drm = DRM_FORMAT_ABGR16161616, .vk = VK_FORMAT_R16G16B16A16_UNORM, @@ -142,6 +166,14 @@ static const struct wlr_vk_format formats[] = { .drm = DRM_FORMAT_XBGR16161616F, .vk = VK_FORMAT_R16G16B16A16_SFLOAT, }, + { + .drm = DRM_FORMAT_BGR323232F, + .vk = VK_FORMAT_R32G32B32_SFLOAT, + }, + { + .drm = DRM_FORMAT_ABGR32323232F, + .vk = VK_FORMAT_R32G32B32A32_SFLOAT, + }, #endif // YCbCr formats