On the one hand, this really should use the metadata framework since it is metadata. On the other hand, this would get invalidated *all the time* so it doesn't seem so useful to have a dirty flag for it. Maybe add a comment explaining this? Other than that,
Connor Abbott <cwabbo...@gmail.com> On Thu, Feb 5, 2015 at 5:29 PM, Jason Ekstrand <ja...@jlekstrand.net> wrote: > This index, unlike the others, has to be manually updated by passes that > want to use it. > --- > src/glsl/nir/nir.c | 20 ++++++++++++++++++++ > src/glsl/nir/nir.h | 4 ++++ > 2 files changed, 24 insertions(+) > > diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c > index 8ea7bb5..6758a72 100644 > --- a/src/glsl/nir/nir.c > +++ b/src/glsl/nir/nir.c > @@ -352,6 +352,7 @@ instr_init(nir_instr *instr, nir_instr_type type) > { > instr->type = type; > instr->block = NULL; > + instr->index = UINT_MAX; > exec_node_init(&instr->node); > } > > @@ -2081,3 +2082,22 @@ nir_index_ssa_defs(nir_function_impl *impl) > nir_foreach_block(impl, index_ssa_block, &index); > impl->ssa_alloc = index; > } > + > +static bool > +index_instrs_block(nir_block *block, void *state) > +{ > + unsigned *index = (unsigned *)state; > + > + nir_foreach_instr(block, instr) > + instr->index = (*index)++; > + > + return true; > +} > + > +unsigned > +nir_index_instrs(nir_function_impl *impl) > +{ > + unsigned index = 0; > + nir_foreach_block(impl, index_instrs_block, &index); > + return index; > +} > diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h > index 8e5e686..c49c731 100644 > --- a/src/glsl/nir/nir.h > +++ b/src/glsl/nir/nir.h > @@ -411,6 +411,9 @@ typedef struct { > nir_instr_type type; > struct nir_block *block; > > + /** generic instruction index. */ > + unsigned index; > + > /* flag for dead code elimination (see nir_opt_dce.c) */ > bool live; > } nir_instr; > @@ -1504,6 +1507,7 @@ nir_if *nir_block_get_following_if(nir_block *block); > void nir_index_local_regs(nir_function_impl *impl); > void nir_index_global_regs(nir_shader *shader); > void nir_index_ssa_defs(nir_function_impl *impl); > +unsigned nir_index_instrs(nir_function_impl *impl); > > void nir_index_blocks(nir_function_impl *impl); > > -- > 2.2.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev