This addresses the potential issue I was worried about when I worked on my patch series for expanding get_range that I sent a while back. With the "the the " in the commit message fixed:
Reviewed-by: Thomas Helland <thomashellan...@gmail.com> This conflicts with my series, but I'll need to do some work on it either way so I'll rebase on top of this once it hits master. 2014-11-27 9:45 GMT+01:00 Abdiel Janulgue <abdiel.janul...@linux.intel.com>: > Add the the same restriction as in the previous try_emit_sat when trying > to optimize clamp. Fixes an infinite loop in swrast where the lowering > pass unpacks saturate into clamp but the opt_algebraic pass tries to do > the opposite. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83463 > > Tested-by: Vinson Lee <v...@freedesktop.org> > Signed-off-by: Abdiel Janulgue <abdiel.janul...@linux.intel.com> > --- > src/glsl/opt_algebraic.cpp | 3 ++- > src/mesa/main/mtypes.h | 1 + > src/mesa/program/ir_to_mesa.cpp | 3 ++- > 3 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp > index 430f5cb..62b14dd 100644 > --- a/src/glsl/opt_algebraic.cpp > +++ b/src/glsl/opt_algebraic.cpp > @@ -679,7 +679,8 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) > > case ir_binop_min: > case ir_binop_max: > - if (ir->type->base_type != GLSL_TYPE_FLOAT) > + if (ir->type->base_type != GLSL_TYPE_FLOAT || > + options->EmitNoSat) > break; > > /* Replace min(max) operations and its commutative combinations with > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index 7389baa..199443a 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -2990,6 +2990,7 @@ struct gl_shader_compiler_options > GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ > GLboolean EmitNoNoise; /**< Emit NOISE opcodes? */ > GLboolean EmitNoPow; /**< Emit POW opcodes? */ > + GLboolean EmitNoSat; > GLboolean LowerClipDistance; /**< Lower gl_ClipDistance from float[8] to > vec4[2]? */ > > /** > diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp > index 5cd9058..44fd315 100644 > --- a/src/mesa/program/ir_to_mesa.cpp > +++ b/src/mesa/program/ir_to_mesa.cpp > @@ -2935,7 +2935,7 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct > gl_shader_program *prog) > > bool progress; > exec_list *ir = prog->_LinkedShaders[i]->ir; > - const struct gl_shader_compiler_options *options = > + struct gl_shader_compiler_options *options = > > &ctx->Const.ShaderCompilerOptions[prog->_LinkedShaders[i]->Stage]; > > do { > @@ -2949,6 +2949,7 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct > gl_shader_program *prog) > | ((options->EmitNoPow) ? POW_TO_EXP2 : 0) > | ((target == GL_VERTEX_PROGRAM_ARB) ? > SAT_TO_CLAMP > : 0))); > + options->EmitNoSat = (target == GL_VERTEX_PROGRAM_ARB); > > progress = do_lower_jumps(ir, true, true, options->EmitNoMainReturn, > options->EmitNoCont, options->EmitNoLoops) || progress; > > -- > 1.9.1 > > _______________________________________________ > 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