Module: Mesa
Branch: main
Commit: 3808cb0696264d88a5813d18963acfccbb30a7be
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3808cb0696264d88a5813d18963acfccbb30a7be

Author: SoroushIMG <[email protected]>
Date:   Sat Jun 17 13:59:00 2023 +0100

pvr: fix mipmap size calculation for bc formats

The block size given by vk_format_get_blocksize is in blocks, not
texels.

dEQP tests affected:
  dEQP-VK.pipeline.monolithic.image_view.view_type*
    .format.eac*lod_base_mip_level

Fixes: 8991e6464 ("pvr: Add a Vulkan driver for Imagination Technologies 
PowerVR Rogue GPUs")
Signed-off-by: SoroushIMG <[email protected]>
Reviewed-by: Frank Binns <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25344>

---

 src/imagination/vulkan/pvr_image.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/imagination/vulkan/pvr_image.c 
b/src/imagination/vulkan/pvr_image.c
index 2858eb76c2c..88c4bed45fb 100644
--- a/src/imagination/vulkan/pvr_image.c
+++ b/src/imagination/vulkan/pvr_image.c
@@ -85,6 +85,8 @@ static void pvr_image_setup_mip_levels(struct pvr_image 
*image)
    const uint32_t extent_alignment =
       image->vk.image_type == VK_IMAGE_TYPE_3D ? 4 : 1;
    const unsigned int cpp = vk_format_get_blocksize(image->vk.format);
+   VkExtent3D extent =
+      vk_image_extent_to_elements(&image->vk, image->physical_extent);
 
    /* Mip-mapped textures that are non-dword aligned need dword-aligned levels
     * so they can be TQd from.
@@ -96,9 +98,9 @@ static void pvr_image_setup_mip_levels(struct pvr_image 
*image)
    image->layer_size = 0;
 
    for (uint32_t i = 0; i < image->vk.mip_levels; i++) {
-      const uint32_t height = u_minify(image->physical_extent.height, i);
-      const uint32_t width = u_minify(image->physical_extent.width, i);
-      const uint32_t depth = u_minify(image->physical_extent.depth, i);
+      const uint32_t height = u_minify(extent.height, i);
+      const uint32_t width = u_minify(extent.width, i);
+      const uint32_t depth = u_minify(extent.depth, i);
       struct pvr_mip_level *mip_level = &image->mip_levels[i];
 
       mip_level->pitch = cpp * ALIGN(width, extent_alignment);

Reply via email to