summaryrefslogtreecommitdiff
path: root/src/gallium
diff options
context:
space:
mode:
authorEmma Anholt <emma@anholt.net>2023-05-02 15:40:51 -0700
committerMarge Bot <emma+marge@anholt.net>2023-05-16 18:57:28 +0000
commit0f25bb8283b7f1354549d4e74d7189ceb719bdbe (patch)
tree1317adc2388b29cc2617c9478e1873480a4f2caa /src/gallium
parente31b7a3f9edc305cff4671cfadc7a99265d1b187 (diff)
downloadmesa-0f25bb8283b7f1354549d4e74d7189ceb719bdbe.tar.gz
nir: Add helpers for lazy var creation.
This should make writing some lowering/meta code easier. It also keeps the num_inputs/outputs updated, when sometimes passes forgot to do so (for example, nir_lower_input_attachments updated for one of the two vars it creates). The names of the variables change in many cases, but it's probably nicer to see "VERT_ATTRIB_POS" than "in_0" or whatever. I've only converted mesa core (compiler and GL), not all the driver meta code. Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22809>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/nir/nir_draw_helpers.c11
-rw-r--r--src/gallium/auxiliary/nir/nir_to_tgsi.c15
2 files changed, 5 insertions, 21 deletions
diff --git a/src/gallium/auxiliary/nir/nir_draw_helpers.c b/src/gallium/auxiliary/nir/nir_draw_helpers.c
index ad0d6d15ea1..2b362433f77 100644
--- a/src/gallium/auxiliary/nir/nir_draw_helpers.c
+++ b/src/gallium/auxiliary/nir/nir_draw_helpers.c
@@ -50,16 +50,9 @@ typedef struct {
static nir_ssa_def *
load_frag_coord(nir_builder *b)
{
- nir_foreach_shader_in_variable(var, b->shader) {
- if (var->data.location == VARYING_SLOT_POS)
- return nir_load_var(b, var);
- }
-
- nir_variable *pos = nir_variable_create(b->shader, nir_var_shader_in,
- glsl_vec4_type(), NULL);
- pos->data.location = VARYING_SLOT_POS;
+ nir_variable *pos = nir_get_variable_with_location(b->shader, nir_var_shader_in,
+ VARYING_SLOT_POS, glsl_vec4_type());
pos->data.interpolation = INTERP_MODE_NOPERSPECTIVE;
- pos->data.driver_location = b->shader->num_inputs++;
return nir_load_var(b, pos);
}
diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi.c b/src/gallium/auxiliary/nir/nir_to_tgsi.c
index 5d60915392f..cb95afa5383 100644
--- a/src/gallium/auxiliary/nir/nir_to_tgsi.c
+++ b/src/gallium/auxiliary/nir/nir_to_tgsi.c
@@ -3673,15 +3673,8 @@ nir_lower_primid_sysval_to_input_filter(const nir_instr *instr, const void *_dat
static nir_ssa_def *
nir_lower_primid_sysval_to_input_lower(nir_builder *b, nir_instr *instr, void *data)
{
- nir_variable *var = *(nir_variable **)data;
- if (!var) {
- var = nir_variable_create(b->shader, nir_var_shader_in, glsl_uint_type(), "gl_PrimitiveID");
- var->data.location = VARYING_SLOT_PRIMITIVE_ID;
- b->shader->info.inputs_read |= VARYING_BIT_PRIMITIVE_ID;
- var->data.driver_location = b->shader->num_inputs++;
-
- *(nir_variable **)data = var;
- }
+ nir_variable *var = nir_get_variable_with_location(b->shader, nir_var_shader_in,
+ VARYING_SLOT_PRIMITIVE_ID, glsl_uint_type());
nir_io_semantics semantics = {
.location = var->data.location,
@@ -3695,11 +3688,9 @@ nir_lower_primid_sysval_to_input_lower(nir_builder *b, nir_instr *instr, void *d
static bool
nir_lower_primid_sysval_to_input(nir_shader *s)
{
- nir_variable *input = NULL;
-
return nir_shader_lower_instructions(s,
nir_lower_primid_sysval_to_input_filter,
- nir_lower_primid_sysval_to_input_lower, &input);
+ nir_lower_primid_sysval_to_input_lower, NULL);
}
const void *