glsl: Don't copy propagate or tree graft precise values.
This is kind of a hack. We currently track precise requirements by decorating ir_variables. Propagating or grafting the RHS of an assignment to a precise value into some other expression tree can lose those decorations. In the long run, it might be better to replace these ir_variable decorations with an "exact" decoration on ir_expression nodes, similar to what NIR does. In the short run, this is probably good enough. It preserves enough information for glsl_to_nir to generate "exact" decorations, and NIR will then handle optimizing these expressions reasonably. Fixes ES31-CTS.gpu_shader5.precise_qualifier. v2: Drop invariant handling, as it shouldn't be necessary (caught by Jason Ekstrand). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
8ec971a997
commit
95d622e16d
|
@ -331,7 +331,8 @@ ir_copy_propagation_visitor::add_copy(ir_assignment *ir)
|
|||
ir->condition = new(ralloc_parent(ir)) ir_constant(false);
|
||||
this->progress = true;
|
||||
} else if (lhs_var->data.mode != ir_var_shader_storage &&
|
||||
lhs_var->data.mode != ir_var_shader_shared) {
|
||||
lhs_var->data.mode != ir_var_shader_shared &&
|
||||
lhs_var->data.precise == rhs_var->data.precise) {
|
||||
entry = new(this->acp) acp_entry(lhs_var, rhs_var);
|
||||
this->acp->push_tail(entry);
|
||||
}
|
||||
|
|
|
@ -493,6 +493,9 @@ ir_copy_propagation_elements_visitor::add_copy(ir_assignment *ir)
|
|||
}
|
||||
}
|
||||
|
||||
if (lhs->var->data.precise != rhs->var->data.precise)
|
||||
return;
|
||||
|
||||
entry = new(this->mem_ctx) acp_entry(lhs->var, rhs->var, write_mask,
|
||||
swizzle);
|
||||
this->acp->push_tail(entry);
|
||||
|
|
|
@ -368,6 +368,9 @@ tree_grafting_basic_block(ir_instruction *bb_first,
|
|||
lhs_var->data.mode == ir_var_shader_shared)
|
||||
continue;
|
||||
|
||||
if (lhs_var->data.precise)
|
||||
continue;
|
||||
|
||||
ir_variable_refcount_entry *entry = info->refs->get_variable_entry(lhs_var);
|
||||
|
||||
if (!entry->declaration ||
|
||||
|
|
Loading…
Reference in New Issue