From 81a90c1e483faff176209728bff5ca7b37c27e2b Mon Sep 17 00:00:00 2001 From: Karmjit Mahil Date: Mon, 5 Sep 2022 09:45:54 +0100 Subject: [PATCH] pvr: Add PBE accum format size in bytes. This will be used later on to implement vkCmdClearAttachments() where we'll need to pick the appropriate clear color shader based on the dwords used. Signed-off-by: Karmjit Mahil Reviewed-by: Frank Binns Part-of: --- src/imagination/vulkan/pvr_formats.c | 36 ++++++++++++++++++++++++++++ src/imagination/vulkan/pvr_formats.h | 1 + 2 files changed, 37 insertions(+) diff --git a/src/imagination/vulkan/pvr_formats.c b/src/imagination/vulkan/pvr_formats.c index e216687fc85..9e56975fc14 100644 --- a/src/imagination/vulkan/pvr_formats.c +++ b/src/imagination/vulkan/pvr_formats.c @@ -245,6 +245,42 @@ uint32_t pvr_get_pbe_accum_format(VkFormat vk_format) return PVR_PBE_ACCUM_FORMAT_INVALID; } +uint32_t pvr_get_pbe_accum_format_size_in_bytes(VkFormat vk_format) +{ + enum pvr_pbe_accum_format pbe_accum_format; + uint32_t nr_components; + + pbe_accum_format = pvr_get_pbe_accum_format(vk_format); + nr_components = vk_format_get_nr_components(vk_format); + + switch (pbe_accum_format) { + case PVR_PBE_ACCUM_FORMAT_U8: + case PVR_PBE_ACCUM_FORMAT_S8: + case PVR_PBE_ACCUM_FORMAT_UINT8: + case PVR_PBE_ACCUM_FORMAT_SINT8: + return nr_components * 1; + + case PVR_PBE_ACCUM_FORMAT_U16: + case PVR_PBE_ACCUM_FORMAT_S16: + case PVR_PBE_ACCUM_FORMAT_F16: + case PVR_PBE_ACCUM_FORMAT_UINT16: + case PVR_PBE_ACCUM_FORMAT_SINT16: + return nr_components * 2; + + case PVR_PBE_ACCUM_FORMAT_F32: + case PVR_PBE_ACCUM_FORMAT_UINT32: + case PVR_PBE_ACCUM_FORMAT_SINT32: + case PVR_PBE_ACCUM_FORMAT_UINT32_MEDP: + case PVR_PBE_ACCUM_FORMAT_SINT32_MEDP: + case PVR_PBE_ACCUM_FORMAT_U1010102: + case PVR_PBE_ACCUM_FORMAT_U24: + return nr_components * 4; + + default: + unreachable("Unknown pbe accum format. Implementation error"); + } +} + static VkFormatFeatureFlags pvr_get_image_format_features(const struct pvr_format *pvr_format, VkImageTiling vk_tiling) diff --git a/src/imagination/vulkan/pvr_formats.h b/src/imagination/vulkan/pvr_formats.h index f2c1ed127f9..3048177fd87 100644 --- a/src/imagination/vulkan/pvr_formats.h +++ b/src/imagination/vulkan/pvr_formats.h @@ -53,6 +53,7 @@ const uint8_t *pvr_get_format_swizzle(VkFormat vk_format); uint32_t pvr_get_tex_format(VkFormat vk_format); uint32_t pvr_get_pbe_packmode(VkFormat vk_format); uint32_t pvr_get_pbe_accum_format(VkFormat vk_format); +uint32_t pvr_get_pbe_accum_format_size_in_bytes(VkFormat vk_format); bool pvr_format_is_pbe_downscalable(VkFormat vk_format); #endif /* PVR_FORMATS_H */