Signed-off-by: Alyssa Rosenzweig <aly...@rosenzweig.io>
---
 .../drivers/panfrost/include/panfrost-job.h       |  6 ++++--
 src/gallium/drivers/panfrost/pandecode/decode.c   | 15 ++++++++++++++-
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/panfrost/include/panfrost-job.h 
b/src/gallium/drivers/panfrost/include/panfrost-job.h
index 97fcb0380dd..c2d922678b8 100644
--- a/src/gallium/drivers/panfrost/include/panfrost-job.h
+++ b/src/gallium/drivers/panfrost/include/panfrost-job.h
@@ -424,8 +424,10 @@ struct mali_blend_meta {
 
         u64 unk1;
 
-        /* For programmable blending, these turn into the blend_shader address 
*/
-        struct mali_blend_equation blend_equation_1;
+        union {
+                struct mali_blend_equation blend_equation_1;
+                mali_ptr blend_shader;
+        };
 
         u64 zero2;
         struct mali_blend_equation blend_equation_2;
diff --git a/src/gallium/drivers/panfrost/pandecode/decode.c 
b/src/gallium/drivers/panfrost/pandecode/decode.c
index bb6f4b19711..9936249e524 100644
--- a/src/gallium/drivers/panfrost/pandecode/decode.c
+++ b/src/gallium/drivers/panfrost/pandecode/decode.c
@@ -1278,7 +1278,20 @@ pandecode_replay_vertex_tiler_postfix_pre(const struct 
mali_vertex_tiler_postfix
 
 #ifndef BIFROST
                                 pandecode_prop("unk1 = 0x%" PRIx64, b->unk1);
-                                
pandecode_replay_blend_equation(&b->blend_equation_1, "_1");
+
+                                /* Depending on unk1, we determine if there's a
+                                 * blend shader */
+
+                                if ((b->unk1 & 0xF) >= 0x2) {
+                                        blend_shader = true;
+                                        
pandecode_replay_shader_address("blend_shader", b->blend_shader);
+                                } else {
+                                        
pandecode_replay_blend_equation(&b->blend_equation_1, "_1");
+                                }
+
+                                /* This is always an equation, I think. If
+                                 * there's a shader, it just defaults to
+                                 * REPLACE (0x122) */
                                 
pandecode_replay_blend_equation(&b->blend_equation_2, "_2");
 
                                 if (b->zero2) {
-- 
2.20.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to