Mesa (master): zink: create a struct for tracking push constant layout

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Feb 16 01:00:33 UTC 2021


Module: Mesa
Branch: master
Commit: 00642ab6edb784433b6225caab821bdb72d6060a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=00642ab6edb784433b6225caab821bdb72d6060a

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed Aug 19 16:42:04 2020 -0400

zink: create a struct for tracking push constant layout

it'll be helpful to update this as we add more values here so we can
avoid having to update all the users

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8971>

---

 src/gallium/drivers/zink/zink_compiler.c | 8 ++++++--
 src/gallium/drivers/zink/zink_program.h  | 5 +++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c
index 999b2f0aefc..9af61879137 100644
--- a/src/gallium/drivers/zink/zink_compiler.c
+++ b/src/gallium/drivers/zink/zink_compiler.c
@@ -657,8 +657,12 @@ zink_shader_tcs_create(struct zink_context *ctx, struct zink_shader *vs)
                                                  glsl_struct_type(fields, 2, "struct", false), "pushconst");
    pushconst->data.location = VARYING_SLOT_VAR0;
 
-   nir_ssa_def *load_inner = nir_load_push_constant(&b, 2, 32, nir_imm_int(&b, 0), .base = 0, .range = 8);
-   nir_ssa_def *load_outer = nir_load_push_constant(&b, 4, 32, nir_imm_int(&b, 8), .base = 8, .range = 16);
+   nir_ssa_def *load_inner = nir_load_push_constant(&b, 2, 32,
+                                                    nir_imm_int(&b, offsetof(struct zink_push_constant, default_inner_level)),
+                                                    .base = offsetof(struct zink_push_constant, default_inner_level), .range = 8);
+   nir_ssa_def *load_outer = nir_load_push_constant(&b, 4, 32,
+                                                    nir_imm_int(&b, offsetof(struct zink_push_constant, default_outer_level)),
+                                                    .base = offsetof(struct zink_push_constant, default_outer_level), .range = 16);
 
    for (unsigned i = 0; i < 2; i++) {
       nir_deref_instr *store_idx = nir_build_deref_array_imm(&b, nir_build_deref_var(&b, gl_TessLevelInner), i);
diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h
index 60f9173e457..372ad7900d1 100644
--- a/src/gallium/drivers/zink/zink_program.h
+++ b/src/gallium/drivers/zink/zink_program.h
@@ -40,6 +40,11 @@ struct zink_gfx_pipeline_state;
 struct hash_table;
 struct set;
 
+struct zink_push_constant {
+   float default_inner_level[2];
+   float default_outer_level[4];
+};
+
 /* a shader module is used for directly reusing a shader module between programs,
  * e.g., in the case where we're swapping out only one shader,
  * allowing us to skip going through shader keys



More information about the mesa-commit mailing list