Mesa (master): panfrost: Fix formats converting uninit from AFBC

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Apr 23 14:39:53 UTC 2021


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

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Thu Apr 22 19:14:47 2021 -0400

panfrost: Fix formats converting uninit from AFBC

If no slices were valid (the resource is uninitialized), we were reading
a bogus PIPE_FORMAT_NONE format from the blit.dst.format. Fix this --
and guard against scope similar issues -- by hoisting the blit
assignments out of the loop so they're valid.

Fixes: 9d0ad7fd2e1 ("panfrost: Patch the gallium driver to use pan_image_layout_init()")
Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10415>

---

 .../panfrost/ci/deqp-panfrost-g52-fails.txt        | 28 ------------------
 src/gallium/drivers/panfrost/pan_resource.c        | 33 +++++++++++-----------
 2 files changed, 16 insertions(+), 45 deletions(-)

diff --git a/src/gallium/drivers/panfrost/ci/deqp-panfrost-g52-fails.txt b/src/gallium/drivers/panfrost/ci/deqp-panfrost-g52-fails.txt
index 81a6149ff97..c13e4ef2a34 100644
--- a/src/gallium/drivers/panfrost/ci/deqp-panfrost-g52-fails.txt
+++ b/src/gallium/drivers/panfrost/ci/deqp-panfrost-g52-fails.txt
@@ -41,34 +41,6 @@ dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.8,F
 dEQP-GLES31.functional.draw_buffers_indexed.random.max_required_draw_buffers.9,Fail
 dEQP-GLES31.functional.draw_indirect.draw_elements_indirect.line_strip.instanced_attributes,Fail
 dEQP-GLES31.functional.draw_indirect.random.31,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32f,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32i,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_r32ui,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8i,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8_snorm,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.format_reinterpret.rgba8_rgba8ui,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.load_store.rgba8_single_layer,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8,Fail
-dEQP-GLES31.functional.image_load_store.2d_array.store.rgba8_single_layer,Fail
-dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32f,Fail
-dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32i,Fail
-dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_r32ui,Fail
-dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8i,Fail
-dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8_snorm,Fail
-dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba8_rgba8ui,Fail
-dEQP-GLES31.functional.image_load_store.2d.load_store.rgba8,Fail
-dEQP-GLES31.functional.image_load_store.2d.store.rgba8,Fail
-dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32f,Fail
-dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32i,Fail
-dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_r32ui,Fail
-dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8i,Fail
-dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8_snorm,Fail
-dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba8_rgba8ui,Fail
-dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8,Fail
-dEQP-GLES31.functional.image_load_store.3d.load_store.rgba8_single_layer,Fail
-dEQP-GLES31.functional.image_load_store.3d.store.rgba8,Fail
-dEQP-GLES31.functional.image_load_store.3d.store.rgba8_single_layer,Fail
 dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_array,Fail
 dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_max_array,Fail
 dEQP-GLES31.functional.layout_binding.image.image2d.vertex_binding_max,Fail
diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c
index 143eccbd507..4dd219fe991 100644
--- a/src/gallium/drivers/panfrost/pan_resource.c
+++ b/src/gallium/drivers/panfrost/pan_resource.c
@@ -1007,8 +1007,7 @@ pan_resource_modifier_convert(struct panfrost_context *ctx,
                 panfrost_resource_create_with_modifier(
                         ctx->base.screen, &rsrc->base, modifier);
         struct panfrost_resource *tmp_rsrc = pan_resource(tmp_prsrc);
-
-        struct pipe_blit_info blit = {0};
+        enum pipe_format blit_fmt = pan_blit_format(tmp_rsrc->base.format);
 
         unsigned depth = rsrc->base.target == PIPE_TEXTURE_3D ?
                 rsrc->base.depth0 : rsrc->base.array_size;
@@ -1016,22 +1015,22 @@ pan_resource_modifier_convert(struct panfrost_context *ctx,
         struct pipe_box box =
                 { 0, 0, 0, rsrc->base.width0, rsrc->base.height0, depth };
 
-        for (int i = 0; i <= rsrc->base.last_level; i++) {
-                if (!rsrc->state.slices[i].data_valid)
-                        continue;
+        struct pipe_blit_info blit = {
+                .dst.resource = &tmp_rsrc->base,
+                .dst.format   = blit_fmt,
+                .dst.box      = box,
+                .src.resource = &rsrc->base,
+                .src.format   = pan_blit_format(rsrc->base.format),
+                .src.box      = box,
+                .mask         = util_format_get_mask(blit_fmt),
+                .filter       = PIPE_TEX_FILTER_NEAREST
+        };
 
-                blit.dst.resource = &tmp_rsrc->base;
-                blit.dst.format   = pan_blit_format(tmp_rsrc->base.format);
-                blit.dst.level    = i;
-                blit.dst.box      = box;
-                blit.src.resource = &rsrc->base;
-                blit.src.format   = pan_blit_format(rsrc->base.format);
-                blit.src.level    = i;
-                blit.src.box      = box;
-                blit.mask = util_format_get_mask(blit.dst.format);
-                blit.filter = PIPE_TEX_FILTER_NEAREST;
-
-                panfrost_blit(&ctx->base, &blit);
+        for (int i = 0; i <= rsrc->base.last_level; i++) {
+                if (rsrc->state.slices[i].data_valid) {
+                        blit.dst.level = blit.src.level  = i;
+                        panfrost_blit(&ctx->base, &blit);
+                }
         }
 
         panfrost_bo_unreference(rsrc->image.data.bo);



More information about the mesa-commit mailing list