panfrost: Distribute out constant colour code
authorAlyssa Rosenzweig <alyssa@collabora.com>
Fri, 14 May 2021 19:23:44 +0000 (15:23 -0400)
committerMarge Bot <eric+marge@anholt.net>
Tue, 18 May 2021 22:51:56 +0000 (22:51 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10869>

src/gallium/drivers/panfrost/pan_blend_cso.c
src/gallium/drivers/panfrost/pan_blend_cso.h
src/gallium/drivers/panfrost/pan_cmdstream.c

index 6846d19..d0189e2 100644 (file)
@@ -182,12 +182,7 @@ panfrost_get_blend_for_context(struct panfrost_context *ctx, unsigned rti, struc
                         ctx->blend_color.color);
 
         if (ff) {
-                struct panfrost_blend_final final = {
-                        .equation.constant = pan_blend_get_constant(
-                                        blend->info[rti].constant_mask,
-                                        ctx->blend_color.color),
-                };
-
+                struct panfrost_blend_final final = {};
                 return final;
         }
 
index 9acac75..d179395 100644 (file)
@@ -44,10 +44,6 @@ struct panfrost_blend_shader_final {
         unsigned first_tag;
 };
 
-struct panfrost_blend_equation_final {
-        float constant;
-};
-
 struct pan_blend_info {
         unsigned constant_mask : 4;
         bool fixed_function : 1;
@@ -69,11 +65,7 @@ struct panfrost_blend_state {
 struct panfrost_blend_final {
         /* Set for a shader, clear for an equation */
         bool is_shader;
-
-        union {
-                struct panfrost_blend_shader_final shader;
-                struct panfrost_blend_equation_final equation;
-        };
+        struct panfrost_blend_shader_final shader;
 };
 
 void
index 6dee5ae..935c6f1 100644 (file)
@@ -367,7 +367,11 @@ panfrost_emit_bifrost_blend(struct panfrost_batch *batch,
                                         chan_size = MAX2(format_desc->channel[0].size, chan_size);
 
                                 /* Fixed point constant */
-                                u16 constant = blend[i].equation.constant * ((1 << chan_size) - 1);
+                                float constant_f = pan_blend_get_constant(
+                                                info.constant_mask,
+                                                ctx->blend_color.color);
+
+                                u16 constant = constant_f * ((1 << chan_size) - 1);
                                 constant <<= 16 - chan_size;
                                 cfg.bifrost.constant = constant;
 
@@ -439,7 +443,9 @@ panfrost_emit_midgard_blend(struct panfrost_batch *batch,
                         if (blend[i].is_shader) {
                                 cfg.midgard.shader_pc = blend[i].shader.gpu | blend[i].shader.first_tag;
                         } else {
-                                cfg.midgard.constant = blend[i].equation.constant;
+                                cfg.midgard.constant = pan_blend_get_constant(
+                                                info.constant_mask,
+                                                ctx->blend_color.color);
                         }
                 }
 
@@ -582,7 +588,9 @@ panfrost_prepare_midgard_fs_state(struct panfrost_context *ctx,
                         state->sfbd_blend_shader = blend[0].shader.gpu |
                                                    blend[0].shader.first_tag;
                 } else {
-                        state->sfbd_blend_constant = blend[0].equation.constant;
+                        state->sfbd_blend_constant = pan_blend_get_constant(
+                                        so->info[0].constant_mask,
+                                        ctx->blend_color.color);
                 }
         } else if (dev->quirks & MIDGARD_SFBD) {
                 /* If there is no colour buffer, leaving fields default is