Module: Mesa Branch: master Commit: ae0a4a1299f649ff550a0dfd59d60fc8b91df54f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ae0a4a1299f649ff550a0dfd59d60fc8b91df54f
Author: Marek Olšák <marek.ol...@amd.com> Date: Fri Sep 9 02:04:00 2016 +0200 glsl: remove interpolateAt* instructions for demoted inputs This fixes 8 fs-interpolateat* piglit crashes on radeonsi, because it can't handle non-input operands in interpolateAt*. Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com> --- src/compiler/glsl/link_varyings.cpp | 5 +++++ src/compiler/glsl/opt_algebraic.cpp | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp index 8c436c2..e622b3e 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -593,6 +593,11 @@ remove_unused_shader_inputs_and_outputs(bool is_separate_shader_object, */ if (var->data.is_unmatched_generic_inout && !var->data.is_xfb_only) { assert(var->data.mode != ir_var_temporary); + + /* Assign zeros to demoted inputs to allow more optimizations. */ + if (var->data.mode == ir_var_shader_in && !var->constant_value) + var->constant_value = ir_constant::zero(var, var->type); + var->data.mode = ir_var_auto; } } diff --git a/src/compiler/glsl/opt_algebraic.cpp b/src/compiler/glsl/opt_algebraic.cpp index f5858c8..2829a78 100644 --- a/src/compiler/glsl/opt_algebraic.cpp +++ b/src/compiler/glsl/opt_algebraic.cpp @@ -961,6 +961,16 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) return ir->operands[2]; break; + /* Remove interpolateAt* instructions for demoted inputs. They are + * assigned a constant expression to facilitate this. + */ + case ir_unop_interpolate_at_centroid: + case ir_binop_interpolate_at_offset: + case ir_binop_interpolate_at_sample: + if (op_const[0]) + return ir->operands[0]; + break; + default: break; } _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit