asahi: Run lower_blend for all fragment shaders
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 22 Mar 2022 01:31:53 +0000 (21:31 -0400)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 22 May 2022 02:01:32 +0000 (22:01 -0400)
Unify the paths so that colour masks are respected even when regular
blending is off (or when logic ops are used!) Fixes

dEQP-GLES2.functional.color_clear.masked_rgb

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16512>

src/gallium/drivers/asahi/agx_state.c

index 8c8cdd3..9c22e63 100644 (file)
@@ -913,26 +913,19 @@ agx_update_shader(struct agx_context *ctx, struct agx_compiled_shader **out,
 
    nir_shader *nir = nir_shader_clone(NULL, so->nir);
 
-   if (key->blend.blend_enable) {
-      nir_lower_blend_options opts = {
-         .format = { key->rt_formats[0] },
-         .scalar_blend_const = true
-      };
-
-      memcpy(opts.rt, key->blend.rt, sizeof(opts.rt));
-      NIR_PASS_V(nir, nir_lower_blend, &opts);
-   } else if (key->blend.logicop_enable) {
+   if (stage == PIPE_SHADER_FRAGMENT) {
       nir_lower_blend_options opts = {
          .format = { key->rt_formats[0] },
-         .logicop_enable = true,
+         .scalar_blend_const = true,
+         .logicop_enable = key->blend.logicop_enable,
          .logicop_func = key->blend.logicop_func,
       };
 
+      memcpy(opts.rt, key->blend.rt, sizeof(opts.rt));
       NIR_PASS_V(nir, nir_lower_blend, &opts);
-   }
 
-   if (stage == PIPE_SHADER_FRAGMENT)
       NIR_PASS_V(nir, nir_lower_fragcolor, key->nr_cbufs);
+   }
 
    agx_compile_shader_nir(nir, &key->base, &binary, &compiled->info);