--- I'm going to squash this into the commit, to resolve some bools on platforms where Const.UniformBooleanTrue == 1. Fixes some piglit failures on GM45.
src/mesa/drivherers/dri/i965/brw_fs_visitor.cpp | 33 +++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index c022dc3..bb4a9be 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -2184,18 +2184,39 @@ fs_visitor::emit_bool_to_cond_code(ir_rvalue *ir) break; case ir_binop_logic_xor: - inst = emit(XOR(reg_null_d, op[0], op[1])); - inst->conditional_mod = BRW_CONDITIONAL_NZ; + if (ctx->Const.UniformBooleanTrue == 1) { + fs_reg dst = fs_reg(this, glsl_type::uint_type); + emit(XOR(dst, op[0], op[1])); + inst = emit(AND(reg_null_d, dst, fs_reg(1))); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + } else { + inst = emit(XOR(reg_null_d, op[0], op[1])); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + } break; case ir_binop_logic_or: - inst = emit(OR(reg_null_d, op[0], op[1])); - inst->conditional_mod = BRW_CONDITIONAL_NZ; + if (ctx->Const.UniformBooleanTrue == 1) { + fs_reg dst = fs_reg(this, glsl_type::uint_type); + emit(OR(dst, op[0], op[1])); + inst = emit(AND(reg_null_d, dst, fs_reg(1))); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + } else { + inst = emit(OR(reg_null_d, op[0], op[1])); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + } break; case ir_binop_logic_and: - inst = emit(AND(reg_null_d, op[0], op[1])); - inst->conditional_mod = BRW_CONDITIONAL_NZ; + if (ctx->Const.UniformBooleanTrue == 1) { + fs_reg dst = fs_reg(this, glsl_type::uint_type); + emit(AND(dst, op[0], op[1])); + inst = emit(AND(reg_null_d, dst, fs_reg(1))); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + } else { + inst = emit(AND(reg_null_d, op[0], op[1])); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + } break; case ir_unop_f2b: -- 1.8.5.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev