nir: Optimize out discard_ifs with a constant 0 argument.

I found this in a shader that was doing an alpha test when alpha is fixed
at 1.0.

v2: Rebase on master (now the const value is "u32" not "u").

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> (v1)
This commit is contained in:
Eric Anholt 2016-03-15 18:32:19 -07:00
parent 8d8c440ebf
commit 1aa8a0392f
1 changed files with 8 additions and 0 deletions

View File

@ -155,6 +155,14 @@ constant_fold_intrinsic_instr(nir_intrinsic_instr *instr)
progress |= constant_fold_deref(&instr->instr, instr->variables[i]);
}
if (instr->intrinsic == nir_intrinsic_discard_if) {
nir_const_value *src_val = nir_src_as_const_value(instr->src[0]);
if (src_val && src_val->u32[0] == 0) {
nir_instr_remove(&instr->instr);
progress = true;
}
}
return progress;
}