Mesa (master): glsl/lower_output_reads: fix geometry shader output handling with conditional emit

Nicolai Hähnle nh at kemper.freedesktop.org
Mon Nov 21 07:27:08 UTC 2016


Module: Mesa
Branch: master
Commit: 0d383a79a8f13bb00ed5e5d84f41071b43c7e92d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0d383a79a8f13bb00ed5e5d84f41071b43c7e92d

Author: Nicolai Hähnle <nicolai.haehnle at amd.com>
Date:   Thu Nov 17 21:55:38 2016 +0100

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 <mesa-stable at lists.freedesktop.org>
Reviewed-by: Edward O'Callaghan <funfunctor at folklore1984.net>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/compiler/glsl/lower_output_reads.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/compiler/glsl/lower_output_reads.cpp b/src/compiler/glsl/lower_output_reads.cpp
index 732f4d3..8a375ac 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;
 }
 




More information about the mesa-commit mailing list