pvr: Add PBE accum format size in bytes.
authorKarmjit Mahil <Karmjit.Mahil@imgtec.com>
Mon, 5 Sep 2022 08:45:54 +0000 (09:45 +0100)
committerMarge Bot <emma+marge@anholt.net>
Tue, 25 Oct 2022 10:15:09 +0000 (10:15 +0000)
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 <Karmjit.Mahil@imgtec.com>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19218>

src/imagination/vulkan/pvr_formats.c
src/imagination/vulkan/pvr_formats.h

index e216687..9e56975 100644 (file)
@@ -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)
index f2c1ed1..3048177 100644 (file)
@@ -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 */