pvr: fix texel unwind workaround mappings
authorOskar Rundgren <oskar.rundgren@imgtec.com>
Sun, 7 May 2023 11:53:01 +0000 (12:53 +0100)
committerMarge Bot <emma+marge@anholt.net>
Wed, 17 May 2023 08:18:26 +0000 (08:18 +0000)
Fix the rectangle mappings used with texel unwind workaround (unaligned address).

Signed-off-by: Oskar Rundgren <oskar.rundgren@imgtec.com>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22958>

src/imagination/vulkan/pvr_job_transfer.c

index 95b82d3..bd208a0 100644 (file)
@@ -4887,20 +4887,22 @@ static void pvr_unwind_rects(uint32_t width,
 
          mappings[new_mapping] = mappings[i];
 
-         new_rect->extent.width =
-            (new_rect->extent.width + new_rect->offset.x) - split_point;
+         rect->extent.width = split_point - rect->offset.x;
          new_rect->offset.x = split_point;
 
          if (input) {
-            mappings[i].dst_rect.extent.width -= new_rect->extent.width;
+            mappings[i].dst_rect.extent.width -=
+               new_rect->extent.width - split_point;
             mappings[new_mapping].dst_rect.offset.x =
                mappings[i].dst_rect.offset.x +
                mappings[i].dst_rect.extent.width;
          } else {
-            mappings[i].src_rect.extent.width -= new_rect->extent.width;
+            mappings[i].src_rect.extent.width -=
+               new_rect->extent.width - split_point;
             mappings[new_mapping].src_rect.offset.x =
                mappings[i].src_rect.offset.x +
                mappings[i].src_rect.extent.width;
+            mappings[new_mapping].src_rect.extent.width = texel_unwind;
          }
 
          rect->offset.x += texel_unwind;
@@ -4909,6 +4911,7 @@ static void pvr_unwind_rects(uint32_t width,
          new_rect->offset.x =
             (int32_t)texel_unwind - (int32_t)width + new_rect->offset.x;
          new_rect->offset.y++;
+         new_rect->extent.width = texel_unwind - width + new_rect->extent.width;
 
          new_mappings++;
       }