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 */