Mesa (main): nir/lower_blend: Stop passing the whole options object around

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed May 11 15:40:22 UTC 2022


Module: Mesa
Branch: main
Commit: 730d2b766078f5c7d5bc2377d02884380d435100
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=730d2b766078f5c7d5bc2377d02884380d435100

Author: Jason Ekstrand <jason.ekstrand at collabora.com>
Date:   Tue May  3 10:44:30 2022 -0500

nir/lower_blend: Stop passing the whole options object around

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16309>

---

 src/compiler/nir/nir_lower_blend.c    | 26 ++++++++++++++------------
 src/compiler/nir/nir_lower_blend.h    |  3 ++-
 src/gallium/drivers/asahi/agx_state.c |  4 ++--
 src/panfrost/lib/pan_blend.c          |  2 +-
 src/panfrost/vulkan/panvk_vX_shader.c |  2 +-
 5 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/src/compiler/nir/nir_lower_blend.c b/src/compiler/nir/nir_lower_blend.c
index 8f61346d35d..a0e10c3306b 100644
--- a/src/compiler/nir/nir_lower_blend.c
+++ b/src/compiler/nir/nir_lower_blend.c
@@ -206,13 +206,13 @@ nir_logicop_func(
 static nir_ssa_def *
 nir_blend_logicop(
    nir_builder *b,
-   nir_lower_blend_options options,
+   const nir_lower_blend_options *options,
    unsigned rt,
    nir_ssa_def *src, nir_ssa_def *dst)
 {
    unsigned bit_size = src->bit_size;
    const struct util_format_description *format_desc =
-      util_format_description(options.format[rt]);
+      util_format_description(options->format[rt]);
 
    if (bit_size != 32) {
       src = nir_f2f32(b, src);
@@ -229,7 +229,7 @@ nir_blend_logicop(
    src = nir_format_float_to_unorm(b, src, bits);
    dst = nir_format_float_to_unorm(b, dst, bits);
 
-   nir_ssa_def *out = nir_logicop_func(b, options.logicop_func, src, dst);
+   nir_ssa_def *out = nir_logicop_func(b, options->logicop_func, src, dst);
 
    if (bits[0] < 32) {
        nir_const_value mask[4];
@@ -261,13 +261,13 @@ nir_fsat_signed(nir_builder *b, nir_ssa_def *x)
 static nir_ssa_def *
 nir_blend(
    nir_builder *b,
-   nir_lower_blend_options options,
+   const nir_lower_blend_options *options,
    unsigned rt,
    nir_ssa_def *src, nir_ssa_def *src1, nir_ssa_def *dst)
 {
    /* Grab the blend constant ahead of time */
    nir_ssa_def *bconst;
-   if (options.scalar_blend_const) {
+   if (options->scalar_blend_const) {
       bconst = nir_vec4(b,
                         nir_load_blend_const_color_r_float(b),
                         nir_load_blend_const_color_g_float(b),
@@ -281,7 +281,7 @@ nir_blend(
       bconst = nir_f2f16(b, bconst);
 
    /* Fixed-point framebuffers require their inputs clamped. */
-   enum pipe_format format = options.format[rt];
+   enum pipe_format format = options->format[rt];
 
    /* From section 17.3.6 "Blending" of the OpenGL 4.5 spec:
     *
@@ -316,7 +316,7 @@ nir_blend(
    for (unsigned c = 0; c < 4; ++c) {
       /* Decide properties based on channel */
       nir_lower_blend_channel chan =
-         (c < 3) ? options.rt[rt].rgb : options.rt[rt].alpha;
+         (c < 3) ? options->rt[rt].rgb : options->rt[rt].alpha;
 
       nir_ssa_def *psrc = nir_channel(b, src, c);
       nir_ssa_def *pdst = nir_channel(b, dst, c);
@@ -342,7 +342,7 @@ nir_blend(
 static bool
 nir_lower_blend_instr(nir_builder *b, nir_instr *instr, void *data)
 {
-   nir_lower_blend_options *options = data;
+   const nir_lower_blend_options *options = data;
    if (instr->type != nir_instr_type_intrinsic)
       return false;
 
@@ -389,10 +389,10 @@ nir_lower_blend_instr(nir_builder *b, nir_instr *instr, void *data)
    nir_ssa_def *blended = src;
 
    if (options->logicop_enable) {
-      blended = nir_blend_logicop(b, *options, rt, src, dst);
+      blended = nir_blend_logicop(b, options, rt, src, dst);
    } else if (!util_format_is_pure_integer(options->format[rt])) {
       assert(!util_format_is_scaled(options->format[rt]));
-      blended = nir_blend(b, *options, rt, src, options->src1, dst);
+      blended = nir_blend(b, options, rt, src, options->src1, dst);
    }
 
    /* Apply a colormask */
@@ -416,10 +416,12 @@ nir_lower_blend_instr(nir_builder *b, nir_instr *instr, void *data)
  * This can be done by calling nir_lower_io_arrays_to_elements_no_indirect().
  */
 void
-nir_lower_blend(nir_shader *shader, nir_lower_blend_options options)
+nir_lower_blend(nir_shader *shader, const nir_lower_blend_options *options)
 {
    assert(shader->info.stage == MESA_SHADER_FRAGMENT);
 
    nir_shader_instructions_pass(shader, nir_lower_blend_instr,
-         nir_metadata_block_index | nir_metadata_dominance, &options);
+                                nir_metadata_block_index |
+                                nir_metadata_dominance,
+                                (void *)options);
 }
diff --git a/src/compiler/nir/nir_lower_blend.h b/src/compiler/nir/nir_lower_blend.h
index 4806bf88573..24510c8bd22 100644
--- a/src/compiler/nir/nir_lower_blend.h
+++ b/src/compiler/nir/nir_lower_blend.h
@@ -64,6 +64,7 @@ typedef struct {
    bool scalar_blend_const;
 } nir_lower_blend_options;
 
-void nir_lower_blend(nir_shader *shader, nir_lower_blend_options options);
+void nir_lower_blend(nir_shader *shader,
+                     const nir_lower_blend_options *options);
 
 #endif
diff --git a/src/gallium/drivers/asahi/agx_state.c b/src/gallium/drivers/asahi/agx_state.c
index aef98e0e4d9..8c8cdd31dcf 100644
--- a/src/gallium/drivers/asahi/agx_state.c
+++ b/src/gallium/drivers/asahi/agx_state.c
@@ -920,7 +920,7 @@ agx_update_shader(struct agx_context *ctx, struct agx_compiled_shader **out,
       };
 
       memcpy(opts.rt, key->blend.rt, sizeof(opts.rt));
-      NIR_PASS_V(nir, nir_lower_blend, opts);
+      NIR_PASS_V(nir, nir_lower_blend, &opts);
    } else if (key->blend.logicop_enable) {
       nir_lower_blend_options opts = {
          .format = { key->rt_formats[0] },
@@ -928,7 +928,7 @@ agx_update_shader(struct agx_context *ctx, struct agx_compiled_shader **out,
          .logicop_func = key->blend.logicop_func,
       };
 
-      NIR_PASS_V(nir, nir_lower_blend, opts);
+      NIR_PASS_V(nir, nir_lower_blend, &opts);
    }
 
    if (stage == PIPE_SHADER_FRAGMENT)
diff --git a/src/panfrost/lib/pan_blend.c b/src/panfrost/lib/pan_blend.c
index d9593004ca8..efc7c6cf2fd 100644
--- a/src/panfrost/lib/pan_blend.c
+++ b/src/panfrost/lib/pan_blend.c
@@ -695,7 +695,7 @@ GENX(pan_blend_create_shader)(const struct panfrost_device *dev,
 
         options.src1 = s_src[1];
 
-        NIR_PASS_V(b.shader, nir_lower_blend, options);
+        NIR_PASS_V(b.shader, nir_lower_blend, &options);
         nir_shader_instructions_pass(b.shader, pan_inline_blend_constants,
                         nir_metadata_block_index | nir_metadata_dominance,
                         (void *) state->constants);
diff --git a/src/panfrost/vulkan/panvk_vX_shader.c b/src/panfrost/vulkan/panvk_vX_shader.c
index 45306d5fe2f..bd4f7caa54e 100644
--- a/src/panfrost/vulkan/panvk_vX_shader.c
+++ b/src/panfrost/vulkan/panvk_vX_shader.c
@@ -464,7 +464,7 @@ panvk_lower_blend(struct panfrost_device *pdev,
       nir_remove_dead_variables(nir, nir_var_shader_out, NULL);
 #endif
 
-      NIR_PASS_V(nir, nir_lower_blend, options);
+      NIR_PASS_V(nir, nir_lower_blend, &options);
 
       if (static_blend_constants) {
          const nir_const_value constants[4] = {



More information about the mesa-commit mailing list