panfrost: Fix Bifrost blending with depth-only FBO
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 4 May 2020 16:48:50 +0000 (12:48 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 27 May 2020 20:49:41 +0000 (16:49 -0400)
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5232>

src/gallium/drivers/panfrost/pan_cmdstream.c

index a6114f7cdc84bbb35bbf4c68e2837445b1c2c74b..af7ee5b8d6e782302b90cc4620635c7d5606b2aa 100644 (file)
@@ -733,7 +733,6 @@ panfrost_frag_meta_blend_update(struct panfrost_context *ctx,
                 if (dev->quirks & IS_BIFROST) {
                         struct bifrost_blend_rt *brts = rts;
 
-                        brts[i].flags = 0x200;
                         if (blend[i].is_shader) {
                                 /* The blend shader's address needs to be at
                                  * the same top 32 bit as the fragment shader.
@@ -743,7 +742,8 @@ panfrost_frag_meta_blend_update(struct panfrost_context *ctx,
                                        (fs->bo->gpu & (0xffffffffull << 32)));
                                 brts[i].shader = blend[i].shader.gpu;
                                 brts[i].unk2 = 0x0;
-                        } else {
+                                brts[i].flags = 0x200;
+                        } else if (ctx->pipe_framebuffer.nr_cbufs > i) {
                                 enum pipe_format format = ctx->pipe_framebuffer.cbufs[i]->format;
                                 const struct util_format_description *format_desc;
                                 format_desc = util_format_description(format);
@@ -757,6 +757,11 @@ panfrost_frag_meta_blend_update(struct panfrost_context *ctx,
                                 brts[i].unk2 = 0x19;
 
                                 brts[i].shader_type = fs->blend_types[i];
+                                brts[i].flags = 0x200;
+                        } else {
+                                /* Dummy attachment for depth-only */
+                                brts[i].unk2 = 0x3;
+                                brts[i].shader_type = fs->blend_types[i];
                         }
                 } else {
                         struct midgard_blend_rt *mrts = rts;