diff options
author | Kenneth Graunke <[email protected]> | 2016-04-03 02:02:12 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-04-12 15:57:48 -0700 |
commit | 95d622e16df0ddbf52e43a34bd6ed6dd15e3bdee (patch) | |
tree | 5e8821f5804efc214feb7073fa6e91e36eaae1d3 /src/compiler/glsl/opt_tree_grafting.cpp | |
parent | 8ec971a9972e5343cfb28da6f48650caba0a7e50 (diff) |
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 <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/compiler/glsl/opt_tree_grafting.cpp')
-rw-r--r-- | src/compiler/glsl/opt_tree_grafting.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/compiler/glsl/opt_tree_grafting.cpp b/src/compiler/glsl/opt_tree_grafting.cpp index 812f996fb81..a40e5f71609 100644 --- a/src/compiler/glsl/opt_tree_grafting.cpp +++ b/src/compiler/glsl/opt_tree_grafting.cpp @@ -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 || |