summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2016-11-17 21:55:38 +0100
committerNicolai Hähnle <[email protected]>2016-11-21 08:21:31 +0100
commit0d383a79a8f13bb00ed5e5d84f41071b43c7e92d (patch)
treefc5e6b1edaa0b45acafb3296cafc4e366b8f05cc
parent42d5e91a2ae235c007c5d17935be9bb1c4ff388e (diff)
glsl/lower_output_reads: fix geometry shader output handling with conditional emit
Consider a geometry shader that contains code like this: some_out = expr; if (cond) { ... EmitVertex(); } else { ... EmitVertex(); } Both branches should see the correct value of some_out. Since this is a rather subtle and rare case, I'm submitting a piglit test for this as well. GLSL says that the values of output variables are undefined after EmitVertex(). With this change, the values will now be defined and unmodified. This may reduce optimization opportunities in the probably quite rare case where subsequent compiler passes cannot prove that the value of the output variable is overwritten. Cc: 13.0 <[email protected]> Reviewed-by: Edward O'Callaghan <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
-rw-r--r--src/compiler/glsl/lower_output_reads.cpp1
1 files changed, 0 insertions, 1 deletions
diff --git a/src/compiler/glsl/lower_output_reads.cpp b/src/compiler/glsl/lower_output_reads.cpp
index 732f4d3d849..8a375ac0ad5 100644
--- a/src/compiler/glsl/lower_output_reads.cpp
+++ b/src/compiler/glsl/lower_output_reads.cpp
@@ -157,7 +157,6 @@ ir_visitor_status
output_read_remover::visit_leave(ir_emit_vertex *ir)
{
hash_table_call_foreach(replacements, emit_return_copy, ir);
- _mesa_hash_table_clear(replacements, NULL);
return visit_continue;
}