Reviewed-by: Jason Ekstrand <[email protected]> On Mon, Jun 17, 2019 at 5:21 AM Boris Brezillon < [email protected]> wrote:
> The code considers that projector lowering was done even if it's not > really the case. Change the project_src() prototype to return a bool > encoding whether projector lowering happened or not and update the > progress var accordingly in nir_lower_tex_block(). > > This prevents an infinite loop when doing: > > do progress = nir_lower_tex(); while (progress); > > Signed-off-by: Boris Brezillon <[email protected]> > --- > src/compiler/nir/nir_lower_tex.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/src/compiler/nir/nir_lower_tex.c > b/src/compiler/nir/nir_lower_tex.c > index c29581d9b048..73b26dbdb238 100644 > --- a/src/compiler/nir/nir_lower_tex.c > +++ b/src/compiler/nir/nir_lower_tex.c > @@ -39,13 +39,13 @@ > #include "nir_builder.h" > #include "nir_format_convert.h" > > -static void > +static bool > project_src(nir_builder *b, nir_tex_instr *tex) > { > /* Find the projector in the srcs list, if present. */ > int proj_index = nir_tex_instr_src_index(tex, nir_tex_src_projector); > if (proj_index < 0) > - return; > + return false; > > b->cursor = nir_before_instr(&tex->instr); > > @@ -100,6 +100,7 @@ project_src(nir_builder *b, nir_tex_instr *tex) > } > > nir_tex_instr_remove_src(tex, proj_index); > + return true; > } > > static nir_ssa_def * > @@ -1049,8 +1050,7 @@ nir_lower_tex_block(nir_block *block, nir_builder *b, > * as clamping happens *after* projection: > */ > if (lower_txp || sat_mask) { > - project_src(b, tex); > - progress = true; > + progress |= project_src(b, tex); > } > > if ((tex->op == nir_texop_txf && options->lower_txf_offset) || > -- > 2.20.1 > >
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
