From: Jason Ekstrand Date: Sat, 18 Jul 2020 23:24:25 +0000 (-0500) Subject: nir: Add nir_foreach_shader_in/out_variable helpers X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=commitdiff_plain;h=2956d53400fdabe7a52d7ca6154827fea160abf2 nir: Add nir_foreach_shader_in/out_variable helpers Reviewed-by: Jose Maria Casanova Crespo Part-of: --- diff --git a/src/amd/compiler/aco_instruction_selection_setup.cpp b/src/amd/compiler/aco_instruction_selection_setup.cpp index 0ef682dc135..f39f8476b80 100644 --- a/src/amd/compiler/aco_instruction_selection_setup.cpp +++ b/src/amd/compiler/aco_instruction_selection_setup.cpp @@ -1103,11 +1103,11 @@ setup_vs_output_info(isel_context *ctx, nir_shader *nir, void setup_vs_variables(isel_context *ctx, nir_shader *nir) { - nir_foreach_variable(variable, &nir->inputs) + nir_foreach_shader_in_variable(variable, nir) { variable->data.driver_location = variable->data.location * 4; } - nir_foreach_variable(variable, &nir->outputs) + nir_foreach_shader_out_variable(variable, nir) { if (ctx->stage == vertex_vs || ctx->stage == ngg_vertex_gs) variable->data.driver_location = variable->data.location * 4; @@ -1137,7 +1137,7 @@ void setup_gs_variables(isel_context *ctx, nir_shader *nir) if (ctx->stage == vertex_geometry_gs || ctx->stage == tess_eval_geometry_gs) ctx->program->config->lds_size = ctx->program->info->gs_ring_info.lds_size; /* Already in units of the alloc granularity */ - nir_foreach_variable(variable, &nir->outputs) { + nir_foreach_shader_out_variable(variable, nir) { variable->data.driver_location = variable->data.location * 4; } @@ -1201,7 +1201,7 @@ setup_tcs_info(isel_context *ctx, nir_shader *nir, nir_shader *vs) void setup_tcs_variables(isel_context *ctx, nir_shader *nir) { - nir_foreach_variable(variable, &nir->outputs) { + nir_foreach_shader_out_variable(variable, nir) { assert(variable->data.location >= 0 && variable->data.location <= UINT8_MAX); if (variable->data.location == VARYING_SLOT_TESS_LEVEL_OUTER) @@ -1222,7 +1222,7 @@ setup_tes_variables(isel_context *ctx, nir_shader *nir) ctx->tcs_num_patches = ctx->args->options->key.tes.num_patches; ctx->tcs_num_outputs = ctx->program->info->tes.num_linked_inputs; - nir_foreach_variable(variable, &nir->outputs) { + nir_foreach_shader_out_variable(variable, nir) { if (ctx->stage == tess_eval_vs || ctx->stage == ngg_tess_eval_gs) variable->data.driver_location = variable->data.location * 4; } @@ -1239,7 +1239,7 @@ setup_variables(isel_context *ctx, nir_shader *nir) { switch (nir->info.stage) { case MESA_SHADER_FRAGMENT: { - nir_foreach_variable(variable, &nir->outputs) + nir_foreach_shader_out_variable(variable, nir) { int idx = variable->data.location + variable->data.index; variable->data.driver_location = idx * 4; diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 47539cfb56a..94b920f748a 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -5354,7 +5354,7 @@ void ac_nir_translate(struct ac_llvm_context *ac, struct ac_shader_abi *abi, ctx.main_function = LLVMGetBasicBlockParent(LLVMGetInsertBlock(ctx.ac.builder)); - nir_foreach_variable(variable, &nir->outputs) + nir_foreach_shader_out_variable(variable, nir) ac_handle_shader_output_decl(&ctx.ac, ctx.abi, nir, variable, ctx.stage); diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c index cc98eef0b99..b962f25e6d6 100644 --- a/src/amd/vulkan/radv_nir_to_llvm.c +++ b/src/amd/vulkan/radv_nir_to_llvm.c @@ -1367,7 +1367,7 @@ handle_vs_input_decl(struct radv_shader_context *ctx, static void handle_vs_inputs(struct radv_shader_context *ctx, struct nir_shader *nir) { - nir_foreach_variable(variable, &nir->inputs) + nir_foreach_shader_in_variable(variable, nir) handle_vs_input_decl(ctx, variable); } @@ -1377,7 +1377,7 @@ prepare_interp_optimize(struct radv_shader_context *ctx, { bool uses_center = false; bool uses_centroid = false; - nir_foreach_variable(variable, &nir->inputs) { + nir_foreach_shader_in_variable(variable, nir) { if (glsl_get_base_type(glsl_without_array(variable->type)) != GLSL_TYPE_FLOAT || variable->data.sample) continue; @@ -4090,7 +4090,7 @@ LLVMModuleRef ac_translate_nir_to_llvm(struct ac_llvm_compiler *ac_llvm, ac_emit_barrier(&ctx.ac, ctx.stage); } - nir_foreach_variable(variable, &shaders[i]->outputs) + nir_foreach_shader_out_variable(variable, shaders[i]) scan_shader_output_decl(&ctx, variable, shaders[i], shaders[i]->info.stage); ac_setup_rings(&ctx); @@ -4409,7 +4409,7 @@ radv_compile_gs_copy_shader(struct ac_llvm_compiler *ac_llvm, ac_setup_rings(&ctx); - nir_foreach_variable(variable, &geom_shader->outputs) { + nir_foreach_shader_out_variable(variable, geom_shader) { scan_shader_output_decl(&ctx, variable, geom_shader, MESA_SHADER_VERTEX); ac_handle_shader_output_decl(&ctx.ac, &ctx.abi, geom_shader, variable, MESA_SHADER_VERTEX); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 2c5a89b2559..9d5eb0598be 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -586,7 +586,7 @@ type_size_vec4(const struct glsl_type *type, bool bindless) static nir_variable * find_layer_in_var(nir_shader *nir) { - nir_foreach_variable(var, &nir->inputs) { + nir_foreach_shader_in_variable(var, nir) { if (var->data.location == VARYING_SLOT_LAYER) { return var; } diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index eca46c81157..8f2b6a1f5b1 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -679,14 +679,14 @@ radv_nir_shader_info_pass(const struct nir_shader *nir, info->loads_dynamic_offsets = true; } - nir_foreach_variable(variable, &nir->inputs) + nir_foreach_shader_in_variable(variable, nir) gather_info_input_decl(nir, variable, info, key); nir_foreach_block(block, func->impl) { gather_info_block(nir, block, info); } - nir_foreach_variable(variable, &nir->outputs) + nir_foreach_shader_out_variable(variable, nir) gather_info_output_decl(nir, variable, info, key); if (nir->info.stage == MESA_SHADER_VERTEX || diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index fa4910fea3f..17359c72ff1 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -1517,7 +1517,7 @@ ntq_setup_vs_inputs(struct v3d_compile *c) * from the start of the attribute to the number of components we * declare we need in c->vattr_sizes[]. */ - nir_foreach_variable(var, &c->s->inputs) { + nir_foreach_shader_in_variable(var, c->s) { /* No VS attribute array support. */ assert(MAX2(glsl_get_length(var->type), 1) == 1); @@ -1582,7 +1582,7 @@ ntq_setup_vs_inputs(struct v3d_compile *c) static bool program_reads_point_coord(struct v3d_compile *c) { - nir_foreach_variable(var, &c->s->inputs) { + nir_foreach_shader_in_variable(var, c->s) { if (util_varying_is_point_coord(var->data.location, c->fs_key->point_sprite_mask)) { return true; @@ -1598,13 +1598,13 @@ get_sorted_input_variables(struct v3d_compile *c, nir_variable ***vars) { *num_entries = 0; - nir_foreach_variable(var, &c->s->inputs) + nir_foreach_shader_in_variable(var, c->s) (*num_entries)++; *vars = ralloc_array(c, nir_variable *, *num_entries); unsigned i = 0; - nir_foreach_variable(var, &c->s->inputs) + nir_foreach_shader_in_variable(var, c->s) (*vars)[i++] = var; /* Sort the variables so that we emit the input setup in @@ -1687,7 +1687,7 @@ ntq_setup_outputs(struct v3d_compile *c) if (c->s->info.stage != MESA_SHADER_FRAGMENT) return; - nir_foreach_variable(var, &c->s->outputs) { + nir_foreach_shader_out_variable(var, c->s) { unsigned array_len = MAX2(glsl_get_length(var->type), 1); unsigned loc = var->data.driver_location * 4; diff --git a/src/broadcom/compiler/v3d_nir_lower_io.c b/src/broadcom/compiler/v3d_nir_lower_io.c index 4b616b054a7..4761b58722e 100644 --- a/src/broadcom/compiler/v3d_nir_lower_io.c +++ b/src/broadcom/compiler/v3d_nir_lower_io.c @@ -173,7 +173,7 @@ v3d_nir_lower_vpm_output(struct v3d_compile *c, nir_builder *b, nir_ssa_def *src = nir_ssa_for_src(b, intr->src[0], intr->num_components); nir_variable *var = NULL; - nir_foreach_variable(scan_var, &c->s->outputs) { + nir_foreach_shader_out_variable(scan_var, c->s) { int components = scan_var->data.compact ? glsl_get_length(scan_var->type) : glsl_get_components(scan_var->type); @@ -368,7 +368,7 @@ static void v3d_nir_lower_io_update_output_var_base(struct v3d_compile *c, struct v3d_nir_lower_io_state *state) { - nir_foreach_variable_safe(var, &c->s->outputs) { + nir_foreach_shader_out_variable_safe(var, c->s) { if (var->data.location == VARYING_SLOT_POS && state->pos_vpm_offset != -1) { var->data.driver_location = state->pos_vpm_offset; diff --git a/src/broadcom/compiler/v3d_nir_lower_logic_ops.c b/src/broadcom/compiler/v3d_nir_lower_logic_ops.c index 832f6bb6a9d..90ee3299c0e 100644 --- a/src/broadcom/compiler/v3d_nir_lower_logic_ops.c +++ b/src/broadcom/compiler/v3d_nir_lower_logic_ops.c @@ -352,7 +352,7 @@ v3d_nir_lower_logic_ops_block(nir_block *block, struct v3d_compile *c) if (intr->intrinsic != nir_intrinsic_store_output) continue; - nir_foreach_variable(var, &c->s->outputs) { + nir_foreach_shader_out_variable(var, c->s) { const int driver_loc = var->data.driver_location; if (driver_loc != nir_intrinsic_base(intr)) continue; diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 4482f7825a6..44587d3e6e9 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -859,7 +859,7 @@ v3d_nir_lower_gs_early(struct v3d_compile *c) static void v3d_fixup_fs_output_types(struct v3d_compile *c) { - nir_foreach_variable(var, &c->s->outputs) { + nir_foreach_shader_out_variable(var, c->s) { uint32_t mask = 0; switch (var->data.location) { diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index d6616a80bc8..c33cdc69032 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -2209,14 +2209,14 @@ nir_remap_dual_slot_attributes(nir_shader *shader, uint64_t *dual_slot) assert(shader->info.stage == MESA_SHADER_VERTEX); *dual_slot = 0; - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { if (glsl_type_is_dual_slot(glsl_without_array(var->type))) { unsigned slots = glsl_count_attribute_slots(var->type, true); *dual_slot |= BITFIELD64_MASK(slots) << var->data.location; } } - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { var->data.location += util_bitcount64(*dual_slot & BITFIELD64_MASK(var->data.location)); } diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 02d0a6000da..b15de3b5dd3 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -624,6 +624,18 @@ typedef struct nir_variable { #define nir_foreach_variable_safe(var, var_list) \ foreach_list_typed_safe(nir_variable, var, node, var_list) +#define nir_foreach_shader_in_variable(var, shader) \ + nir_foreach_variable(var, &(shader)->inputs) + +#define nir_foreach_shader_in_variable_safe(var, shader) \ + nir_foreach_variable_safe(var, &(shader)->inputs) + +#define nir_foreach_shader_out_variable(var, shader) \ + nir_foreach_variable(var, &(shader)->outputs) + +#define nir_foreach_shader_out_variable_safe(var, shader) \ + nir_foreach_variable_safe(var, &(shader)->outputs) + static inline bool nir_variable_is_global(const nir_variable *var) { diff --git a/src/compiler/nir/nir_gather_xfb_info.c b/src/compiler/nir/nir_gather_xfb_info.c index 7a3ce7966d3..46dd598d3e1 100644 --- a/src/compiler/nir/nir_gather_xfb_info.c +++ b/src/compiler/nir/nir_gather_xfb_info.c @@ -202,7 +202,7 @@ nir_gather_xfb_info_with_varyings(const nir_shader *shader, unsigned num_outputs = 0; unsigned num_varyings = 0; nir_xfb_varyings_info *varyings_info = NULL; - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { if (var->data.explicit_xfb_buffer) { num_outputs += glsl_count_attribute_slots(var->type, false); num_varyings += glsl_varying_count(var->type); @@ -218,7 +218,7 @@ nir_gather_xfb_info_with_varyings(const nir_shader *shader, } /* Walk the list of outputs and add them to the array */ - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { if (!var->data.explicit_xfb_buffer) continue; diff --git a/src/compiler/nir/nir_linking_helpers.c b/src/compiler/nir/nir_linking_helpers.c index 74508440eb1..d3a249edd82 100644 --- a/src/compiler/nir/nir_linking_helpers.c +++ b/src/compiler/nir/nir_linking_helpers.c @@ -175,7 +175,7 @@ nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer) uint64_t read[4] = { 0 }, written[4] = { 0 }; uint64_t patches_read[4] = { 0 }, patches_written[4] = { 0 }; - nir_foreach_variable(var, &producer->outputs) { + nir_foreach_shader_out_variable(var, producer) { for (unsigned i = 0; i < get_num_components(var); i++) { if (var->data.patch) { patches_written[var->data.location_frac + i] |= @@ -187,7 +187,7 @@ nir_remove_unused_varyings(nir_shader *producer, nir_shader *consumer) } } - nir_foreach_variable(var, &consumer->inputs) { + nir_foreach_shader_in_variable(var, consumer) { for (unsigned i = 0; i < get_num_components(var); i++) { if (var->data.patch) { patches_read[var->data.location_frac + i] |= @@ -493,7 +493,7 @@ gather_varying_component_info(nir_shader *producer, nir_shader *consumer, /* Count the number of varying that can be packed and create a mapping * of those varyings to the array we will pass to qsort. */ - nir_foreach_variable(var, &producer->outputs) { + nir_foreach_shader_out_variable(var, producer) { /* Only remap things that aren't builtins. */ if (var->data.location >= VARYING_SLOT_VAR0 && @@ -838,7 +838,7 @@ nir_link_xfb_varyings(nir_shader *producer, nir_shader *consumer) { nir_variable *input_vars[MAX_VARYING] = { 0 }; - nir_foreach_variable(var, &consumer->inputs) { + nir_foreach_shader_in_variable(var, consumer) { if (var->data.location >= VARYING_SLOT_VAR0 && var->data.location - VARYING_SLOT_VAR0 < MAX_VARYING) { @@ -847,7 +847,7 @@ nir_link_xfb_varyings(nir_shader *producer, nir_shader *consumer) } } - nir_foreach_variable(var, &producer->outputs) { + nir_foreach_shader_out_variable(var, producer) { if (var->data.location >= VARYING_SLOT_VAR0 && var->data.location - VARYING_SLOT_VAR0 < MAX_VARYING) { @@ -872,7 +872,7 @@ does_varying_match(nir_variable *out_var, nir_variable *in_var) static nir_variable * get_matching_input_var(nir_shader *consumer, nir_variable *out_var) { - nir_foreach_variable(var, &consumer->inputs) { + nir_foreach_shader_in_variable(var, consumer) { if (does_varying_match(out_var, var)) return var; } @@ -1253,7 +1253,7 @@ nir_assign_linked_io_var_locations(nir_shader *producer, nir_shader *consumer) uint64_t producer_output_mask = 0; uint64_t producer_patch_output_mask = 0; - nir_foreach_variable(variable, &producer->outputs) { + nir_foreach_shader_out_variable(variable, producer) { uint64_t mask = get_linked_variable_io_mask(variable, producer->info.stage); uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch); @@ -1266,7 +1266,7 @@ nir_assign_linked_io_var_locations(nir_shader *producer, nir_shader *consumer) uint64_t consumer_input_mask = 0; uint64_t consumer_patch_input_mask = 0; - nir_foreach_variable(variable, &consumer->inputs) { + nir_foreach_shader_in_variable(variable, consumer) { uint64_t mask = get_linked_variable_io_mask(variable, consumer->info.stage); uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch); @@ -1279,7 +1279,7 @@ nir_assign_linked_io_var_locations(nir_shader *producer, nir_shader *consumer) uint64_t io_mask = producer_output_mask | consumer_input_mask; uint64_t patch_io_mask = producer_patch_output_mask | consumer_patch_input_mask; - nir_foreach_variable(variable, &producer->outputs) { + nir_foreach_shader_out_variable(variable, producer) { uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch); if (variable->data.patch) @@ -1288,7 +1288,7 @@ nir_assign_linked_io_var_locations(nir_shader *producer, nir_shader *consumer) variable->data.driver_location = util_bitcount64(io_mask & u_bit_consecutive64(0, loc)) * 4; } - nir_foreach_variable(variable, &consumer->inputs) { + nir_foreach_shader_in_variable(variable, consumer) { uint64_t loc = get_linked_variable_location(variable->data.location, variable->data.patch); if (variable->data.patch) diff --git a/src/compiler/nir/nir_lower_alpha_test.c b/src/compiler/nir/nir_lower_alpha_test.c index b652fb796be..29c520cfd9d 100644 --- a/src/compiler/nir/nir_lower_alpha_test.c +++ b/src/compiler/nir/nir_lower_alpha_test.c @@ -61,7 +61,7 @@ nir_lower_alpha_test(nir_shader *shader, enum compare_func func, break; case nir_intrinsic_store_output: /* already had i/o lowered.. lookup the matching output var: */ - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { int drvloc = var->data.driver_location; if (nir_intrinsic_base(intr) == drvloc) { out = var; diff --git a/src/compiler/nir/nir_lower_bitmap.c b/src/compiler/nir/nir_lower_bitmap.c index 880053d31fe..f9173a64796 100644 --- a/src/compiler/nir/nir_lower_bitmap.c +++ b/src/compiler/nir/nir_lower_bitmap.c @@ -58,7 +58,7 @@ get_texcoord(nir_shader *shader) nir_variable *texcoord = NULL; /* find gl_TexCoord, if it exists: */ - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { if (var->data.location == VARYING_SLOT_TEX0) { texcoord = var; break; diff --git a/src/compiler/nir/nir_lower_clamp_color_outputs.c b/src/compiler/nir/nir_lower_clamp_color_outputs.c index 07ed1d7925b..e5aa9d994c5 100644 --- a/src/compiler/nir/nir_lower_clamp_color_outputs.c +++ b/src/compiler/nir/nir_lower_clamp_color_outputs.c @@ -68,7 +68,7 @@ lower_intrinsic(lower_state *state, nir_intrinsic_instr *intr) break; case nir_intrinsic_store_output: /* already had i/o lowered.. lookup the matching output var: */ - nir_foreach_variable(var, &state->shader->outputs) { + nir_foreach_shader_out_variable(var, state->shader) { int drvloc = var->data.driver_location; if (nir_intrinsic_base(intr) == drvloc) { out = var; diff --git a/src/compiler/nir/nir_lower_clip.c b/src/compiler/nir/nir_lower_clip.c index e0679c65240..3a4775f971b 100644 --- a/src/compiler/nir/nir_lower_clip.c +++ b/src/compiler/nir/nir_lower_clip.c @@ -184,7 +184,7 @@ find_clipvertex_and_position_outputs(nir_shader *shader, nir_variable **clipvertex, nir_variable **position) { - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { switch (var->data.location) { case VARYING_SLOT_POS: *position = var; @@ -464,7 +464,7 @@ fs_has_clip_dist_input_var(nir_shader *shader, nir_variable **io_vars, unsigned *ucp_enables) { assert(shader->info.stage == MESA_SHADER_FRAGMENT); - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { switch (var->data.location) { case VARYING_SLOT_CLIP_DIST0: assert(var->data.compact); diff --git a/src/compiler/nir/nir_lower_clip_disable.c b/src/compiler/nir/nir_lower_clip_disable.c index 2925d033bd0..ae086459c0c 100644 --- a/src/compiler/nir/nir_lower_clip_disable.c +++ b/src/compiler/nir/nir_lower_clip_disable.c @@ -101,7 +101,7 @@ nir_lower_clip_disable(nir_shader *shader, unsigned clip_plane_enable) { bool progress = false; - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { if (var->data.location == VARYING_SLOT_CLIP_DIST0) { unsigned size = glsl_get_length(var->type); /* if currently-enabled planes match used planes then no-op */ diff --git a/src/compiler/nir/nir_lower_drawpixels.c b/src/compiler/nir/nir_lower_drawpixels.c index f2e64722be8..b4b2cfd6b83 100644 --- a/src/compiler/nir/nir_lower_drawpixels.c +++ b/src/compiler/nir/nir_lower_drawpixels.c @@ -45,7 +45,7 @@ get_texcoord(lower_drawpixels_state *state) nir_variable *texcoord = NULL; /* find gl_TexCoord, if it exists: */ - nir_foreach_variable(var, &state->shader->inputs) { + nir_foreach_shader_in_variable(var, state->shader) { if (var->data.location == VARYING_SLOT_TEX0) { texcoord = var; break; @@ -267,7 +267,7 @@ lower_drawpixels_block(lower_drawpixels_state *state, nir_block *block) /* The intrinsic doesn't carry the variable. We need to find it * manually. */ - nir_foreach_variable(var, &state->b.shader->inputs) { + nir_foreach_shader_in_variable(var, state->b.shader) { if ((var->data.driver_location == nir_intrinsic_base(intr)) && (nir_intrinsic_component(intr) >= var->data.location_frac && nir_intrinsic_component(intr) < diff --git a/src/compiler/nir/nir_lower_flatshade.c b/src/compiler/nir/nir_lower_flatshade.c index 81857847398..15fbb7d13d5 100644 --- a/src/compiler/nir/nir_lower_flatshade.c +++ b/src/compiler/nir/nir_lower_flatshade.c @@ -42,7 +42,7 @@ nir_lower_flatshade(nir_shader *shader) { bool progress = false; - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { progress |= lower_input(shader, var); } diff --git a/src/compiler/nir/nir_lower_input_attachments.c b/src/compiler/nir/nir_lower_input_attachments.c index 16c7509f5f1..75b9e1faff9 100644 --- a/src/compiler/nir/nir_lower_input_attachments.c +++ b/src/compiler/nir/nir_lower_input_attachments.c @@ -27,7 +27,7 @@ static nir_ssa_def * load_frag_coord(nir_builder *b) { - nir_foreach_variable(var, &b->shader->inputs) { + nir_foreach_shader_in_variable(var, b->shader) { if (var->data.location == VARYING_SLOT_POS) return nir_load_var(b, var); } diff --git a/src/compiler/nir/nir_lower_mediump_outputs.c b/src/compiler/nir/nir_lower_mediump_outputs.c index 13c03f9b624..eabdcbd8dd0 100644 --- a/src/compiler/nir/nir_lower_mediump_outputs.c +++ b/src/compiler/nir/nir_lower_mediump_outputs.c @@ -47,7 +47,7 @@ nir_lower_mediump_outputs(nir_shader *nir) if (intr->intrinsic != nir_intrinsic_store_output) continue; - nir_foreach_variable (var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { if (var->data.driver_location != nir_intrinsic_base(intr)) continue; /* not found yet */ diff --git a/src/compiler/nir/nir_lower_point_size_mov.c b/src/compiler/nir/nir_lower_point_size_mov.c index f5e18d75baf..efe162c8d8f 100644 --- a/src/compiler/nir/nir_lower_point_size_mov.c +++ b/src/compiler/nir/nir_lower_point_size_mov.c @@ -72,7 +72,7 @@ nir_lower_point_size_mov(nir_shader *shader, shader->info.stage != MESA_SHADER_COMPUTE); nir_variable *out = NULL; - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { if (var->data.location == VARYING_SLOT_PSIZ) { out = var; break; diff --git a/src/compiler/nir/nir_lower_two_sided_color.c b/src/compiler/nir/nir_lower_two_sided_color.c index 80cf27f6ffa..700d759d27f 100644 --- a/src/compiler/nir/nir_lower_two_sided_color.c +++ b/src/compiler/nir/nir_lower_two_sided_color.c @@ -69,7 +69,7 @@ create_input(nir_shader *shader, gl_varying_slot slot, static nir_variable * create_face_input(nir_shader *shader) { - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { if (var->data.location == VARYING_SLOT_FACE) return var; } @@ -108,7 +108,7 @@ static int setup_inputs(lower_2side_state *state) { /* find color inputs: */ - nir_foreach_variable(var, &state->shader->inputs) { + nir_foreach_shader_in_variable(var, state->shader) { switch (var->data.location) { case VARYING_SLOT_COL0: case VARYING_SLOT_COL1: diff --git a/src/compiler/nir/nir_range_analysis.c b/src/compiler/nir/nir_range_analysis.c index 87ee919710d..3d2ff8b2c84 100644 --- a/src/compiler/nir/nir_range_analysis.c +++ b/src/compiler/nir/nir_range_analysis.c @@ -1141,7 +1141,7 @@ search_phi_bcsel(nir_ssa_scalar scalar, nir_ssa_scalar *buf, unsigned buf_size, static nir_variable * lookup_input(nir_shader *shader, unsigned driver_location) { - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { if (driver_location == var->data.driver_location) return var; } diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c index 8c4df26b99a..77c0b800d9a 100644 --- a/src/freedreno/ir3/ir3_compiler_nir.c +++ b/src/freedreno/ir3/ir3_compiler_nir.c @@ -3342,7 +3342,7 @@ emit_instructions(struct ir3_context *ctx) } /* Setup inputs: */ - nir_foreach_variable (var, &ctx->s->inputs) { + nir_foreach_shader_in_variable (var, ctx->s) { setup_input(ctx, var); } @@ -3390,7 +3390,7 @@ emit_instructions(struct ir3_context *ctx) } /* Setup outputs: */ - nir_foreach_variable (var, &ctx->s->outputs) { + nir_foreach_shader_out_variable (var, ctx->s) { setup_output(ctx, var); } diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c index 068191a903a..b4b62ef99b3 100644 --- a/src/freedreno/ir3/ir3_nir.c +++ b/src/freedreno/ir3/ir3_nir.c @@ -310,7 +310,7 @@ static bool ir3_nir_lower_layer_id(nir_shader *nir) { unsigned layer_id_loc = ~0; - nir_foreach_variable(var, &nir->inputs) { + nir_foreach_shader_in_variable(var, nir) { if (var->data.location == VARYING_SLOT_LAYER) { layer_id_loc = var->data.driver_location; break; diff --git a/src/freedreno/ir3/ir3_nir_lower_tess.c b/src/freedreno/ir3/ir3_nir_lower_tess.c index 730b550230d..06ae6c6de2c 100644 --- a/src/freedreno/ir3/ir3_nir_lower_tess.c +++ b/src/freedreno/ir3/ir3_nir_lower_tess.c @@ -928,8 +928,8 @@ ir3_link_geometry_stages(const struct ir3_shader_variant *producer, unreachable("bad shader stage"); } - nir_foreach_variable(in_var, &consumer->shader->nir->inputs) { - nir_foreach_variable(out_var, &producer->shader->nir->outputs) { + nir_foreach_shader_in_variable(in_var, consumer->shader->nir) { + nir_foreach_shader_out_variable(out_var, producer->shader->nir) { if (in_var->data.location == out_var->data.location) { locs[in_var->data.driver_location] = producer->output_loc[out_var->data.driver_location] * factor; diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir.c b/src/gallium/auxiliary/gallivm/lp_bld_nir.c index 8daa0e09d8d..d2336c17365 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir.c @@ -1963,7 +1963,7 @@ bool lp_build_nir_llvm( nir_remove_dead_derefs(nir); nir_remove_dead_variables(nir, nir_var_function_temp, NULL); - nir_foreach_variable(variable, &nir->outputs) + nir_foreach_shader_out_variable(variable, nir) handle_shader_output_decl(bld_base, nir, variable); bld_base->regs = _mesa_hash_table_create(NULL, _mesa_hash_pointer, diff --git a/src/gallium/auxiliary/nir/nir_draw_helpers.c b/src/gallium/auxiliary/nir/nir_draw_helpers.c index 33fdf4aee69..3349d0f5eb0 100644 --- a/src/gallium/auxiliary/nir/nir_draw_helpers.c +++ b/src/gallium/auxiliary/nir/nir_draw_helpers.c @@ -49,7 +49,7 @@ typedef struct { static nir_ssa_def * load_frag_coord(nir_builder *b) { - nir_foreach_variable(var, &b->shader->inputs) { + nir_foreach_shader_in_variable(var, b->shader) { if (var->data.location == VARYING_SLOT_POS) return nir_load_var(b, var); } @@ -216,7 +216,7 @@ nir_lower_aaline_fs(struct nir_shader *shader, int *varying) return; int highest_location = -1, highest_drv_location = -1; - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { if ((int)var->data.location > highest_location) highest_location = var->data.location; if ((int)var->data.driver_location > highest_drv_location) @@ -340,7 +340,7 @@ nir_lower_aapoint_fs(struct nir_shader *shader, int *varying) return; int highest_location = -1, highest_drv_location = -1; - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { if ((int)var->data.location > highest_location) highest_location = var->data.location; if ((int)var->data.driver_location > highest_drv_location) diff --git a/src/gallium/auxiliary/nir/nir_to_tgsi_info.c b/src/gallium/auxiliary/nir/nir_to_tgsi_info.c index b9af10f2ca1..25b7066bc6e 100644 --- a/src/gallium/auxiliary/nir/nir_to_tgsi_info.c +++ b/src/gallium/auxiliary/nir/nir_to_tgsi_info.c @@ -489,7 +489,7 @@ void nir_tgsi_scan_shader(const struct nir_shader *nir, i = 0; uint64_t processed_inputs = 0; - nir_foreach_variable(variable, &nir->inputs) { + nir_foreach_shader_in_variable(variable, nir) { unsigned semantic_name, semantic_index; const struct glsl_type *type = variable->type; @@ -573,7 +573,7 @@ void nir_tgsi_scan_shader(const struct nir_shader *nir, i = 0; uint64_t processed_outputs = 0; unsigned num_outputs = 0; - nir_foreach_variable(variable, &nir->outputs) { + nir_foreach_shader_out_variable(variable, nir) { unsigned semantic_name, semantic_index; i = variable->data.driver_location; diff --git a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c index ebaeb7bb5c8..3352510ac05 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c +++ b/src/gallium/drivers/etnaviv/etnaviv_compiler_nir.c @@ -1068,7 +1068,7 @@ etna_compile_shader_nir(struct etna_shader_variant *v) /* setup input linking */ struct etna_shader_io_file *sf = &v->infile; if (s->info.stage == MESA_SHADER_VERTEX) { - nir_foreach_variable(var, &s->inputs) { + nir_foreach_shader_in_variable(var, s) { unsigned idx = var->data.driver_location; sf->reg[idx].reg = idx; sf->reg[idx].slot = var->data.location; @@ -1077,7 +1077,7 @@ etna_compile_shader_nir(struct etna_shader_variant *v) } } else { unsigned count = 0; - nir_foreach_variable(var, &s->inputs) { + nir_foreach_shader_in_variable(var, s) { unsigned idx = var->data.driver_location; sf->reg[idx].reg = idx + 1; sf->reg[idx].slot = var->data.location; diff --git a/src/gallium/drivers/freedreno/a2xx/ir2_nir.c b/src/gallium/drivers/freedreno/a2xx/ir2_nir.c index 44e53afaa3c..88136861871 100644 --- a/src/gallium/drivers/freedreno/a2xx/ir2_nir.c +++ b/src/gallium/drivers/freedreno/a2xx/ir2_nir.c @@ -127,7 +127,7 @@ ir2_optimize_nir(nir_shader *s, bool lower) /* TODO we dont want to get shaders writing to depth for depth textures */ if (s->info.stage == MESA_SHADER_FRAGMENT) { - nir_foreach_variable(var, &s->outputs) { + nir_foreach_shader_out_variable(var, s) { if (var->data.location == FRAG_RESULT_DEPTH) return -1; } @@ -495,7 +495,7 @@ load_input(struct ir2_context *ctx, nir_dest *dst, unsigned idx) } /* get slot from idx */ - nir_foreach_variable(var, &ctx->nir->inputs) { + nir_foreach_shader_in_variable(var, ctx->nir) { if (var->data.driver_location == idx) { slot = var->data.location; break; @@ -538,7 +538,7 @@ output_slot(struct ir2_context *ctx, nir_intrinsic_instr *intr) { int slot = -1; unsigned idx = nir_intrinsic_base(intr); - nir_foreach_variable(var, &ctx->nir->outputs) { + nir_foreach_shader_out_variable(var, ctx->nir) { if (var->data.driver_location == idx) { slot = var->data.location; break; @@ -1129,7 +1129,7 @@ ir2_nir_compile(struct ir2_context *ctx, bool binning) } /* Setup inputs: */ - nir_foreach_variable(in, &ctx->nir->inputs) + nir_foreach_shader_in_variable(in, ctx->nir) setup_input(ctx, in); if (so->type == MESA_SHADER_FRAGMENT) { diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 91336dfa2fd..0640828ca2c 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -274,7 +274,7 @@ iris_fix_edge_flags(nir_shader *nir) } nir_variable *var = NULL; - nir_foreach_variable(v, &nir->outputs) { + nir_foreach_shader_out_variable(v, nir) { if (v->data.location == VARYING_SLOT_EDGE) { var = v; break; diff --git a/src/gallium/drivers/lima/ir/gp/nir.c b/src/gallium/drivers/lima/ir/gp/nir.c index 223db082424..fd7acc77773 100644 --- a/src/gallium/drivers/lima/ir/gp/nir.c +++ b/src/gallium/drivers/lima/ir/gp/nir.c @@ -487,7 +487,7 @@ bool gpir_compile_nir(struct lima_vs_shader_state *prog, struct nir_shader *nir, if (!gpir_codegen_prog(comp)) goto err_out0; - nir_foreach_variable(var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { bool varying = true; switch (var->data.location) { case VARYING_SLOT_POS: diff --git a/src/gallium/drivers/lima/ir/pp/nir.c b/src/gallium/drivers/lima/ir/pp/nir.c index a2f3406e414..f101cfcd1ef 100644 --- a/src/gallium/drivers/lima/ir/pp/nir.c +++ b/src/gallium/drivers/lima/ir/pp/nir.c @@ -916,7 +916,7 @@ bool ppir_compile_nir(struct lima_fs_shader_state *prog, struct nir_shader *nir, } /* Validate outputs, we support only gl_FragColor */ - nir_foreach_variable(var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { switch (var->data.location) { case FRAG_RESULT_COLOR: case FRAG_RESULT_DATA0: diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp index c5b11726cec..4475d7cf806 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp @@ -972,7 +972,7 @@ bool Converter::assignSlots() { if (prog->getType() == Program::TYPE_COMPUTE) return true; - nir_foreach_variable(var, &nir->inputs) { + nir_foreach_shader_in_variable(var, nir) { const glsl_type *type = var->type; int slot = var->data.location; uint16_t slots = calcSlots(type, prog->getType(), nir->info, true, var); @@ -1028,7 +1028,7 @@ bool Converter::assignSlots() { info->numInputs = std::max(info->numInputs, vary); } - nir_foreach_variable(var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { const glsl_type *type = var->type; int slot = var->data.location; uint16_t slots = calcSlots(type, prog->getType(), nir->info, false, var); diff --git a/src/gallium/drivers/r600/sfn/sfn_nir.cpp b/src/gallium/drivers/r600/sfn/sfn_nir.cpp index 0a4246fb067..250c9e7d2cf 100644 --- a/src/gallium/drivers/r600/sfn/sfn_nir.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_nir.cpp @@ -266,7 +266,7 @@ bool ShaderFromNir::emit_instruction(nir_instr *instr) bool ShaderFromNir::process_declaration() { // scan declarations - nir_foreach_variable(variable, &sh->inputs) { + nir_foreach_shader_in_variable(variable, sh) { if (!impl->process_inputs(variable)) { fprintf(stderr, "R600: error parsing input varible %s\n", variable->name); return false; @@ -274,7 +274,7 @@ bool ShaderFromNir::process_declaration() } // scan declarations - nir_foreach_variable(variable, &sh->outputs) { + nir_foreach_shader_out_variable(variable, sh) { if (!impl->process_outputs(variable)) { fprintf(stderr, "R600: error parsing outputs varible %s\n", variable->name); return false; diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c b/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c index a168cec39d7..62ec43cd195 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c @@ -235,7 +235,7 @@ void si_llvm_load_vs_inputs(struct si_shader_context *ctx, struct nir_shader *ni { uint64_t processed_inputs = 0; - nir_foreach_variable (variable, &nir->inputs) { + nir_foreach_shader_in_variable (variable, nir) { unsigned attrib_count = glsl_count_attribute_slots(variable->type, true); unsigned input_idx = variable->data.driver_location; unsigned loc = variable->data.location; diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index f26a93c16bc..395305f7f8a 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -610,7 +610,7 @@ void si_nir_scan_shader(const struct nir_shader *nir, struct si_shader_info *inf i = 0; uint64_t processed_inputs = 0; - nir_foreach_variable (variable, &nir->inputs) { + nir_foreach_shader_in_variable (variable, nir) { unsigned semantic_name, semantic_index; const struct glsl_type *type = variable->type; @@ -691,7 +691,7 @@ void si_nir_scan_shader(const struct nir_shader *nir, struct si_shader_info *inf } } - nir_foreach_variable (variable, &nir->outputs) { + nir_foreach_shader_out_variable (variable, nir) { const struct glsl_type *type = variable->type; if (nir_is_per_vertex_io(variable, nir->info.stage)) { assert(glsl_type_is_array(type)); @@ -874,11 +874,11 @@ void si_nir_adjust_driver_locations(struct nir_shader *nir) * as individual components. */ if (nir->info.stage != MESA_SHADER_FRAGMENT) { - nir_foreach_variable (variable, &nir->inputs) + nir_foreach_shader_in_variable (variable, nir) variable->data.driver_location *= 4; } - nir_foreach_variable (variable, &nir->outputs) + nir_foreach_shader_out_variable (variable, nir) variable->data.driver_location *= 4; } diff --git a/src/gallium/drivers/v3d/v3d_program.c b/src/gallium/drivers/v3d/v3d_program.c index 07a596d3eaf..3a431de56bf 100644 --- a/src/gallium/drivers/v3d/v3d_program.c +++ b/src/gallium/drivers/v3d/v3d_program.c @@ -47,7 +47,7 @@ v3d_setup_shared_precompile_key(struct v3d_uncompiled_shader *uncompiled, static gl_varying_slot v3d_get_slot_for_driver_location(nir_shader *s, uint32_t driver_location) { - nir_foreach_variable(var, &s->outputs) { + nir_foreach_shader_out_variable(var, s) { if (var->data.driver_location == driver_location) { return var->data.location; } @@ -180,7 +180,7 @@ precompile_all_outputs(nir_shader *s, struct v3d_varying_slot *outputs, uint8_t *num_outputs) { - nir_foreach_variable(var, &s->outputs) { + nir_foreach_shader_out_variable(var, s) { const int array_len = MAX2(glsl_get_length(var->type), 1); for (int j = 0; j < array_len; j++) { const int slot = var->data.location + j; @@ -212,7 +212,7 @@ v3d_shader_precompile(struct v3d_context *v3d, .base.shader_state = so, }; - nir_foreach_variable(var, &s->outputs) { + nir_foreach_shader_out_variable(var, s) { if (var->data.location == FRAG_RESULT_COLOR) { key.cbufs |= 1 << 0; } else if (var->data.location >= FRAG_RESULT_DATA0) { diff --git a/src/gallium/drivers/vc4/vc4_nir_lower_blend.c b/src/gallium/drivers/vc4/vc4_nir_lower_blend.c index 192abe99291..dcd0a12373c 100644 --- a/src/gallium/drivers/vc4/vc4_nir_lower_blend.c +++ b/src/gallium/drivers/vc4/vc4_nir_lower_blend.c @@ -589,7 +589,7 @@ vc4_nir_lower_blend_block(nir_block *block, struct vc4_compile *c) continue; nir_variable *output_var = NULL; - nir_foreach_variable(var, &c->s->outputs) { + nir_foreach_shader_out_variable(var, c->s) { if (var->data.driver_location == nir_intrinsic_base(intr)) { output_var = var; diff --git a/src/gallium/drivers/vc4/vc4_nir_lower_io.c b/src/gallium/drivers/vc4/vc4_nir_lower_io.c index 39ecfb6e50c..eb9bcfffd66 100644 --- a/src/gallium/drivers/vc4/vc4_nir_lower_io.c +++ b/src/gallium/drivers/vc4/vc4_nir_lower_io.c @@ -240,7 +240,7 @@ vc4_nir_lower_fs_input(struct vc4_compile *c, nir_builder *b, } nir_variable *input_var = NULL; - nir_foreach_variable(var, &c->s->inputs) { + nir_foreach_shader_in_variable(var, c->s) { if (var->data.driver_location == nir_intrinsic_base(intr)) { input_var = var; break; @@ -291,7 +291,7 @@ vc4_nir_lower_output(struct vc4_compile *c, nir_builder *b, nir_intrinsic_instr *intr) { nir_variable *output_var = NULL; - nir_foreach_variable(var, &c->s->outputs) { + nir_foreach_shader_out_variable(var, c->s) { if (var->data.driver_location == nir_intrinsic_base(intr)) { output_var = var; break; diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index 6a429d427b1..9c89ef6843f 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -1580,13 +1580,13 @@ static void ntq_setup_inputs(struct vc4_compile *c) { unsigned num_entries = 0; - nir_foreach_variable(var, &c->s->inputs) + nir_foreach_shader_in_variable(var, c->s) num_entries++; nir_variable *vars[num_entries]; unsigned i = 0; - nir_foreach_variable(var, &c->s->inputs) + nir_foreach_shader_in_variable(var, c->s) vars[i++] = var; /* Sort the variables so that we emit the input setup in @@ -1625,7 +1625,7 @@ ntq_setup_inputs(struct vc4_compile *c) static void ntq_setup_outputs(struct vc4_compile *c) { - nir_foreach_variable(var, &c->s->outputs) { + nir_foreach_shader_out_variable(var, c->s) { unsigned array_len = MAX2(glsl_get_length(var->type), 1); unsigned loc = var->data.driver_location * 4; diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index f8abd901640..9fad2bbd433 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -2305,10 +2305,10 @@ nir_to_spirv(struct nir_shader *s, const struct pipe_stream_output_info *so_info ctx.so_outputs = _mesa_hash_table_create(ctx.mem_ctx, _mesa_hash_u32, _mesa_key_u32_equal); - nir_foreach_variable(var, &s->inputs) + nir_foreach_shader_in_variable(var, s) emit_input(&ctx, var); - nir_foreach_variable(var, &s->outputs) + nir_foreach_shader_out_variable(var, s) emit_output(&ctx, var); if (so_info) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index a17bc19432e..865e1409ff7 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -183,7 +183,7 @@ optimize_nir(struct nir_shader *s) static bool check_psiz(struct nir_shader *s) { - nir_foreach_variable(var, &s->outputs) { + nir_foreach_shader_out_variable(var, s) { if (var->data.location == VARYING_SLOT_PSIZ) { /* genuine PSIZ outputs will have this set */ return !!var->data.explicit_location; diff --git a/src/gallium/frontends/clover/nir/invocation.cpp b/src/gallium/frontends/clover/nir/invocation.cpp index 8b52379314c..550585375b5 100644 --- a/src/gallium/frontends/clover/nir/invocation.cpp +++ b/src/gallium/frontends/clover/nir/invocation.cpp @@ -101,7 +101,7 @@ module clover::nir::spirv_to_nir(const module &mod, const device &dev, // Calculate input offsets. unsigned offset = 0; - nir_foreach_variable_safe(var, &nir->inputs) { + nir_foreach_shader_in_variable_safe(var, nir) { offset = align(offset, glsl_get_cl_alignment(var->type)); var->data.driver_location = offset; offset += glsl_get_cl_size(var->type); diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp index 4ba0c8ed073..a89c53ea5a5 100644 --- a/src/intel/compiler/brw_fs.cpp +++ b/src/intel/compiler/brw_fs.cpp @@ -8335,7 +8335,7 @@ brw_compute_flat_inputs(struct brw_wm_prog_data *prog_data, { prog_data->flat_inputs = 0; - nir_foreach_variable(var, &shader->inputs) { + nir_foreach_shader_in_variable(var, shader) { unsigned slots = glsl_count_attribute_slots(var->type, false); for (unsigned s = 0; s < slots; s++) { int input_index = prog_data->urb_setup[var->data.location + s]; diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 15df3dc7763..afbb436b95a 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -59,7 +59,7 @@ fs_visitor::nir_setup_outputs() * allocating them. With ARB_enhanced_layouts, multiple output variables * may occupy the same slot, but have different type sizes. */ - nir_foreach_variable(var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { const int loc = var->data.driver_location; const unsigned var_vec4s = var->data.compact ? DIV_ROUND_UP(glsl_get_length(var->type), 4) diff --git a/src/intel/compiler/brw_interpolation_map.c b/src/intel/compiler/brw_interpolation_map.c index 454cc3e2c24..e7c3919f41f 100644 --- a/src/intel/compiler/brw_interpolation_map.c +++ b/src/intel/compiler/brw_interpolation_map.c @@ -75,7 +75,7 @@ brw_setup_vue_interpolation(struct brw_vue_map *vue_map, nir_shader *nir, prog_data->contains_noperspective_varying = true; } - foreach_list_typed(nir_variable, var, node, &nir->inputs) { + nir_foreach_shader_in_variable(var, nir) { unsigned location = var->data.location; unsigned slot_count = glsl_count_attribute_slots(var->type, false); diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c index 61c1e190b23..22f4d24e2be 100644 --- a/src/intel/compiler/brw_nir.c +++ b/src/intel/compiler/brw_nir.c @@ -163,9 +163,8 @@ brw_nir_lower_vs_inputs(nir_shader *nir, const uint8_t *vs_attrib_wa_flags) { /* Start with the location of the variable's base. */ - foreach_list_typed(nir_variable, var, node, &nir->inputs) { + nir_foreach_shader_in_variable(var, nir) var->data.driver_location = var->data.location; - } /* Now use nir_lower_io to walk dereference chains. Attribute arrays are * loaded as one vec4 or dvec4 per element (or matrix column), depending on @@ -290,9 +289,8 @@ void brw_nir_lower_vue_inputs(nir_shader *nir, const struct brw_vue_map *vue_map) { - foreach_list_typed(nir_variable, var, node, &nir->inputs) { + nir_foreach_shader_in_variable(var, nir) var->data.driver_location = var->data.location; - } /* Inputs are stored in vec4 slots, so use type_size_vec4(). */ nir_lower_io(nir, nir_var_shader_in, type_size_vec4, @@ -343,9 +341,8 @@ brw_nir_lower_vue_inputs(nir_shader *nir, void brw_nir_lower_tes_inputs(nir_shader *nir, const struct brw_vue_map *vue_map) { - foreach_list_typed(nir_variable, var, node, &nir->inputs) { + nir_foreach_shader_in_variable(var, nir) var->data.driver_location = var->data.location; - } nir_lower_io(nir, nir_var_shader_in, type_size_vec4, nir_lower_io_lower_64bit_to_32); @@ -372,7 +369,7 @@ brw_nir_lower_fs_inputs(nir_shader *nir, const struct gen_device_info *devinfo, const struct brw_wm_prog_key *key) { - foreach_list_typed(nir_variable, var, node, &nir->inputs) { + nir_foreach_shader_in_variable(var, nir) { var->data.driver_location = var->data.location; /* Apply default interpolation mode. @@ -416,7 +413,7 @@ brw_nir_lower_fs_inputs(nir_shader *nir, void brw_nir_lower_vue_outputs(nir_shader *nir) { - nir_foreach_variable(var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { var->data.driver_location = var->data.location; } @@ -428,7 +425,7 @@ void brw_nir_lower_tcs_outputs(nir_shader *nir, const struct brw_vue_map *vue_map, GLenum tes_primitive_mode) { - nir_foreach_variable(var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { var->data.driver_location = var->data.location; } @@ -454,7 +451,7 @@ brw_nir_lower_tcs_outputs(nir_shader *nir, const struct brw_vue_map *vue_map, void brw_nir_lower_fs_outputs(nir_shader *nir) { - nir_foreach_variable(var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { var->data.driver_location = SET_FIELD(var->data.index, BRW_NIR_FRAG_OUTPUT_INDEX) | SET_FIELD(var->data.location, BRW_NIR_FRAG_OUTPUT_LOCATION); diff --git a/src/intel/compiler/brw_nir_lower_alpha_to_coverage.c b/src/intel/compiler/brw_nir_lower_alpha_to_coverage.c index 660d218e764..1eed9cd62b4 100644 --- a/src/intel/compiler/brw_nir_lower_alpha_to_coverage.c +++ b/src/intel/compiler/brw_nir_lower_alpha_to_coverage.c @@ -89,7 +89,7 @@ brw_nir_lower_alpha_to_coverage(nir_shader *shader) /* Bail out early if we don't have gl_SampleMask */ bool is_sample_mask = false; - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { if (var->data.location == FRAG_RESULT_SAMPLE_MASK) { is_sample_mask = true; break; @@ -115,7 +115,7 @@ brw_nir_lower_alpha_to_coverage(nir_shader *shader) switch (intr->intrinsic) { case nir_intrinsic_store_output: - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { int drvloc = var->data.driver_location; if (nir_intrinsic_base(intr) == drvloc) { out = var; diff --git a/src/intel/vulkan/anv_nir_lower_multiview.c b/src/intel/vulkan/anv_nir_lower_multiview.c index d239074c61b..75bc01868ba 100644 --- a/src/intel/vulkan/anv_nir_lower_multiview.c +++ b/src/intel/vulkan/anv_nir_lower_multiview.c @@ -172,7 +172,7 @@ lower_multiview_with_primitive_replication(nir_shader *shader, /* Update position to refer to an array. */ nir_variable *pos_var = NULL; - nir_foreach_variable(var, &shader->outputs) { + nir_foreach_shader_out_variable(var, shader) { if (var->data.location == VARYING_SLOT_POS) { assert(var->type == glsl_vec4_type()); var->type = glsl_array_type(glsl_vec4_type(), view_count, 0); @@ -571,7 +571,7 @@ anv_check_for_primitive_replication(nir_shader **shaders, return false; bool vs_writes_position = false; - nir_foreach_variable(var, &shaders[MESA_SHADER_VERTEX]->outputs) { + nir_foreach_shader_out_variable(var, shaders[MESA_SHADER_VERTEX]) { if (var->data.location == VARYING_SLOT_POS) { vs_writes_position = true; break; diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 82a2752b760..ca265056d70 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -1013,7 +1013,7 @@ anv_pipeline_link_fs(const struct brw_compiler *compiler, */ nir_function_impl *impl = nir_shader_get_entrypoint(stage->nir); bool deleted_output = false; - nir_foreach_variable_safe(var, &stage->nir->outputs) { + nir_foreach_shader_out_variable_safe(var, stage->nir) { /* TODO: We don't delete depth/stencil writes. We probably could if the * subpass doesn't have a depth/stencil attachment. */ diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c index fcdeec1047d..67589a81327 100644 --- a/src/mesa/program/prog_to_nir.c +++ b/src/mesa/program/prog_to_nir.c @@ -815,7 +815,7 @@ ptn_add_output_stores(struct ptn_compile *c) { nir_builder *b = &c->build; - nir_foreach_variable(var, &b->shader->outputs) { + nir_foreach_shader_out_variable(var, b->shader) { nir_ssa_def *src = nir_load_reg(b, c->output_regs[var->data.location]); if (c->prog->Target == GL_FRAGMENT_PROGRAM_ARB && var->data.location == FRAG_RESULT_DEPTH) { diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 78753f781af..6b1c1d6c391 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -107,7 +107,7 @@ st_nir_assign_vs_in_locations(struct nir_shader *nir) bool removed_inputs = false; nir->num_inputs = util_bitcount64(nir->info.inputs_read); - nir_foreach_variable_safe(var, &nir->inputs) { + nir_foreach_shader_in_variable_safe(var, nir) { /* NIR already assigns dual-slot inputs to two locations so all we have * to do is compact everything down. */ diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 97861cc404e..0b5deea61d6 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -1285,7 +1285,7 @@ st_create_fp_variant(struct st_context *st, if (key->persample_shading) { nir_shader *shader = state.ir.nir; - nir_foreach_variable(var, &shader->inputs) + nir_foreach_shader_in_variable(var, shader) var->data.sample = true; finalize = true; } diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index bd5377b4a39..4ca807ab40f 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -279,7 +279,7 @@ midgard_nir_lower_zs_store(nir_shader *nir) nir_variable *z_var = NULL, *s_var = NULL; - nir_foreach_variable(var, &nir->outputs) { + nir_foreach_shader_out_variable(var, nir) { if (var->data.location == FRAG_RESULT_DEPTH) z_var = var; else if (var->data.location == FRAG_RESULT_STENCIL)