From: Marek Olšák <marek.ol...@amd.com> This fixes 8 fs-interpolateat* piglit crashes on radeonsi, because it can't handle non-input operands in interpolateAt*. --- 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 1fad310..85ca044 100644 --- a/src/compiler/glsl/link_varyings.cpp +++ b/src/compiler/glsl/link_varyings.cpp @@ -586,20 +586,25 @@ remove_unused_shader_inputs_and_outputs(bool is_separate_shader_object, if (var == NULL || var->data.mode != int(mode)) continue; /* A shader 'in' or 'out' variable is only really an input or output if * its value is used by other shader stages. This will cause the * variable to have a location assigned. */ 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; } } /* Eliminate code that is now dead due to unused inputs/outputs being * demoted. */ while (do_dead_code(sh->ir, false)) ; 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 @@ -954,20 +954,30 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir) } break; case ir_triop_csel: if (is_vec_one(op_const[0])) return ir->operands[1]; if (is_vec_zero(op_const[0])) 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; } return ir; } void ir_algebraic_visitor::handle_rvalue(ir_rvalue **rvalue) { -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev