nir: Introduce nir_intrinsic_discard_if.
This is a conditional discard, which takes a boolean source. Note that we don't generate ir_discard::condition today, so this shouldn't break drivers (since none implement this intrinsic yet). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Connor Abbott <cwabbott0@gmail.com> Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
@@ -563,8 +563,14 @@ nir_visitor::visit(ir_discard *ir)
|
||||
* discards will be immediately followed by a return.
|
||||
*/
|
||||
|
||||
nir_intrinsic_instr *discard =
|
||||
nir_intrinsic_instr_create(this->shader, nir_intrinsic_discard);
|
||||
nir_intrinsic_instr *discard;
|
||||
if (ir->condition) {
|
||||
discard = nir_intrinsic_instr_create(this->shader,
|
||||
nir_intrinsic_discard_if);
|
||||
discard->src[0] = evaluate_rvalue(ir->condition);
|
||||
} else {
|
||||
discard = nir_intrinsic_instr_create(this->shader, nir_intrinsic_discard);
|
||||
}
|
||||
nir_instr_insert_after_cf_list(this->cf_node_list, &discard->instr);
|
||||
}
|
||||
|
||||
|
@@ -68,6 +68,8 @@ INTRINSIC(interp_var_at_offset, 1, ARR(2), true, 0, 1, 0,
|
||||
#define BARRIER(name) INTRINSIC(name, 0, ARR(), false, 0, 0, 0, 0)
|
||||
|
||||
BARRIER(discard)
|
||||
/** A conditional discard, with a single boolean source. */
|
||||
INTRINSIC(discard_if, 1, ARR(1), false, 0, 0, 0, 0)
|
||||
|
||||
INTRINSIC(emit_vertex, 0, ARR(), false, 0, 0, 1, 0)
|
||||
INTRINSIC(end_primitive, 0, ARR(), false, 0, 0, 1, 0)
|
||||
|
Reference in New Issue
Block a user