Mesa (main): mesa/st: add nir shader to clear color buffers using constant value

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu May 19 11:47:42 UTC 2022


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

Author: Indrajit Kumar Das <indrajit-kumar.das at amd.com>
Date:   Fri May 13 17:21:20 2022 +0530

mesa/st: add nir shader to clear color buffers using constant value

v2: use load_uniform instead of load_ubo to fix vc4

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15318>

---

 src/mesa/state_tracker/st_nir.h          |  4 ++++
 src/mesa/state_tracker/st_nir_builtins.c | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/src/mesa/state_tracker/st_nir.h b/src/mesa/state_tracker/st_nir.h
index 58003d82b60..28fa476589b 100644
--- a/src/mesa/state_tracker/st_nir.h
+++ b/src/mesa/state_tracker/st_nir.h
@@ -74,6 +74,10 @@ st_nir_make_passthrough_shader(struct st_context *st,
                                unsigned sysval_mask);
 void
 st_nir_add_point_size(struct nir_shader *nir);
+
+struct pipe_shader_state *
+st_nir_make_clearcolor_shader(struct st_context *st);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/mesa/state_tracker/st_nir_builtins.c b/src/mesa/state_tracker/st_nir_builtins.c
index 06959dcd078..bfbe0a939b8 100644
--- a/src/mesa/state_tracker/st_nir_builtins.c
+++ b/src/mesa/state_tracker/st_nir_builtins.c
@@ -131,3 +131,35 @@ st_nir_make_passthrough_shader(struct st_context *st,
 
    return st_nir_finish_builtin_shader(st, b.shader);
 }
+
+/**
+ * Make a simple shader that reads color value from a constant buffer
+ * and uses it to clear all color buffers.
+ */
+struct pipe_shader_state *
+st_nir_make_clearcolor_shader(struct st_context *st)
+{
+   const nir_shader_compiler_options *options =
+      st_get_nir_compiler_options(st, MESA_SHADER_FRAGMENT);
+
+   nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_FRAGMENT, options,
+                                                  "clear color FS");
+   b.shader->info.num_ubos = 1;
+   b.shader->num_outputs = 1;
+   b.shader->num_uniforms = 1;
+
+   /* Read clear color from constant buffer */
+   nir_ssa_def *clear_color = nir_load_uniform(&b, 4, 32, nir_imm_int(&b,0),
+                                               .range = 16,
+                                               .dest_type = nir_type_float32);
+
+   nir_variable *color_out =
+      nir_variable_create(b.shader, nir_var_shader_out, glsl_vec_type(4),
+                             "outcolor");
+   color_out->data.location = FRAG_RESULT_COLOR;
+
+   /* Write out the color */
+   nir_store_var(&b, color_out, clear_color, 0xf);
+
+   return st_nir_finish_builtin_shader(st, b.shader);
+}



More information about the mesa-commit mailing list