Mesa (master): panfrost: Fix AFBC body_size for shared resources

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Apr 12 16:18:43 UTC 2021


Module: Mesa
Branch: master
Commit: 23b060bba787030542b681ab8f86916c319fd8fa
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=23b060bba787030542b681ab8f86916c319fd8fa

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Fri Apr  9 19:14:14 2021 -0400

panfrost: Fix AFBC body_size for shared resources

Accidental read-before-write due to incorrect statement ordering. I love
SSA as much as anyone, but not everything is a parallel copy.

Fixes faults in glamor in 21.0 when using GIMP on v5.

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Fixes: e8b997e1758 ("panfrost: Add AFBC slice.body_size and slice.{row,surface}_stride fields")
Closes: #4389
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10148>

---

 src/gallium/drivers/panfrost/pan_mfbd.c     | 1 +
 src/gallium/drivers/panfrost/pan_resource.c | 8 +++++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/panfrost/pan_mfbd.c b/src/gallium/drivers/panfrost/pan_mfbd.c
index d5278417c6b..405b04b7007 100644
--- a/src/gallium/drivers/panfrost/pan_mfbd.c
+++ b/src/gallium/drivers/panfrost/pan_mfbd.c
@@ -184,6 +184,7 @@ panfrost_mfbd_rt_set_buf(struct pipe_surface *surf,
                         rt->afbc.chunk_size = 9;
                         rt->midgard_afbc.sparse = true;
                         rt->afbc.body_size = slice->afbc.body_size;
+                        assert(rt->afbc.body_size > 0);
                 }
 
                 panfrost_get_afbc_pointers(rsrc, level, first_layer,
diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c
index 4aaa15ed7f7..31c9b6c403e 100644
--- a/src/gallium/drivers/panfrost/pan_resource.c
+++ b/src/gallium/drivers/panfrost/pan_resource.c
@@ -127,14 +127,16 @@ panfrost_resource_from_handle(struct pipe_screen *pscreen,
                 unsigned tile_h =
                         panfrost_block_dim(whandle->modifier, false, 0);
 
-                rsc->layout.slices[0].afbc.body_size =
-                        rsc->layout.slices[0].row_stride *
-                        DIV_ROUND_UP(templat->height0, tile_h);
                 rsc->layout.slices[0].afbc.header_size =
                         panfrost_afbc_header_size(templat->width0, templat->height0);
+
                 rsc->layout.slices[0].afbc.row_stride =
                         DIV_ROUND_UP(templat->width0, tile_w) *
                         AFBC_HEADER_BYTES_PER_TILE;
+
+                rsc->layout.slices[0].afbc.body_size =
+                        rsc->layout.slices[0].row_stride *
+                        DIV_ROUND_UP(templat->height0, tile_h);
         }
 
         if (dev->ro) {



More information about the mesa-commit mailing list