From 40515312f64972661d910f7ab369cff822f6d449 Mon Sep 17 00:00:00 2001 From: Ella Stanforth Date: Sun, 29 Jun 2025 15:40:35 +0100 Subject: [PATCH] v3dv: Add normalisation flags to the format table These indicate if we need to apply software packing and unpacking for render targets of these formats. Reviewed-by: Iago Toral Quiroga Part-of: --- src/broadcom/vulkan/v3dv_private.h | 6 ++++++ src/broadcom/vulkan/v3dvx_formats.c | 33 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 7e1ebb39ded..5f993a3a1b7 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -627,6 +627,12 @@ struct v3dv_format_plane { /* Whether the return value is 16F/I/UI or 32F/I/UI. */ uint8_t return_size; + + /* Needs software unorm packing */ + bool unorm; + + /* Needs software snorm packing */ + bool snorm; }; struct v3dv_format { diff --git a/src/broadcom/vulkan/v3dvx_formats.c b/src/broadcom/vulkan/v3dvx_formats.c index 5c4fc95d984..9bc3e2143cb 100644 --- a/src/broadcom/vulkan/v3dvx_formats.c +++ b/src/broadcom/vulkan/v3dvx_formats.c @@ -45,6 +45,39 @@ TEXTURE_DATA_FORMAT_##tex, \ swiz, \ return_size, \ + false, \ + false, \ + }}, \ + supports_filtering, \ + } + +/* Format requiring software unorm packing */ +#define FORMAT_UNORM(vk, rt, tex, swiz, return_size, supports_filtering) \ + [VK_ENUM_OFFSET(VK_FORMAT_##vk)] = { \ + 1, \ + {{ \ + V3D_OUTPUT_IMAGE_FORMAT_##rt, \ + TEXTURE_DATA_FORMAT_##tex, \ + swiz, \ + return_size, \ + true, \ + false, \ + }}, \ + supports_filtering, \ + } + + +/* Format requiring software snorm packing */ +#define FORMAT_SNORM(vk, rt, tex, swiz, return_size, supports_filtering) \ + [VK_ENUM_OFFSET(VK_FORMAT_##vk)] = { \ + 1, \ + {{ \ + V3D_OUTPUT_IMAGE_FORMAT_##rt, \ + TEXTURE_DATA_FORMAT_##tex, \ + swiz, \ + return_size, \ + false, \ + true, \ }}, \ supports_filtering, \ }