nir: Add an "exact" bit to nir_alu_instr
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
@@ -718,6 +718,17 @@ extern const nir_op_info nir_op_infos[nir_num_opcodes];
|
||||
typedef struct nir_alu_instr {
|
||||
nir_instr instr;
|
||||
nir_op op;
|
||||
|
||||
/** Indicates that this ALU instruction generates an exact value
|
||||
*
|
||||
* This is kind of a mixture of GLSL "precise" and "invariant" and not
|
||||
* really equivalent to either. This indicates that the value generated by
|
||||
* this operation is high-precision and any code transformations that touch
|
||||
* it must ensure that the resulting value is bit-for-bit identical to the
|
||||
* original.
|
||||
*/
|
||||
bool exact;
|
||||
|
||||
nir_alu_dest dest;
|
||||
nir_alu_src src[];
|
||||
} nir_alu_instr;
|
||||
|
@@ -312,6 +312,7 @@ static nir_alu_instr *
|
||||
clone_alu(clone_state *state, const nir_alu_instr *alu)
|
||||
{
|
||||
nir_alu_instr *nalu = nir_alu_instr_create(state->ns, alu->op);
|
||||
nalu->exact = alu->exact;
|
||||
|
||||
__clone_dst(state, &nalu->instr, &nalu->dest.dest, &alu->dest.dest);
|
||||
nalu->dest.saturate = alu->dest.saturate;
|
||||
|
@@ -207,6 +207,8 @@ print_alu_instr(nir_alu_instr *instr, print_state *state)
|
||||
print_alu_dest(&instr->dest, state);
|
||||
|
||||
fprintf(fp, " = %s", nir_op_infos[instr->op].name);
|
||||
if (instr->exact)
|
||||
fprintf(fp, "!");
|
||||
if (instr->dest.saturate)
|
||||
fprintf(fp, ".sat");
|
||||
fprintf(fp, " ");
|
||||
|
Reference in New Issue
Block a user