From 00642ab6edb784433b6225caab821bdb72d6060a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 19 Aug 2020 16:42:04 -0400 Subject: [PATCH] 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 Part-of: --- 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