ir_to_mesa: Add support for conditional discards.

NOTE: This is a candidate for the 7.9 branch.

Signed-off-by: Marek Olšák <maraeo@gmail.com>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Marek Olšák 2010-11-25 03:13:36 -08:00 committed by Kenneth Graunke
parent 2ca9256911
commit ead2ea89f4

View file

@ -2166,9 +2166,14 @@ ir_to_mesa_visitor::visit(ir_discard *ir)
{
struct gl_fragment_program *fp = (struct gl_fragment_program *)this->prog;
assert(ir->condition == NULL); /* FINISHME */
if (ir->condition) {
ir->condition->accept(this);
this->result.negate = ~this->result.negate;
ir_to_mesa_emit_op1(ir, OPCODE_KIL, ir_to_mesa_undef_dst, this->result);
} else {
ir_to_mesa_emit_op0(ir, OPCODE_KIL_NV);
}
ir_to_mesa_emit_op0(ir, OPCODE_KIL_NV);
fp->UsesKill = GL_TRUE;
}