Mesa (master): glsl: Disable structure splitting for shader ins/outs.

Paul Berry stereotype441 at kemper.freedesktop.org
Fri Jan 25 00:32:26 UTC 2013


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

Author: Paul Berry <stereotype441 at gmail.com>
Date:   Fri Jan 11 13:34:40 2013 -0800

glsl: Disable structure splitting for shader ins/outs.

Previously, it didn't matter whether structure splitting tried to
split shader ins/outs, because structs were prohibited from being used
for shader ins/outs.  However, GLSL 3.00 ES supports varying structs.
In order for varying structs to work, we need to make sure that
structure splitting doesn't get applied to them, because if it does,
then the linker won't be able to match up varyings properly.

Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/glsl/opt_structure_splitting.cpp |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/glsl/opt_structure_splitting.cpp b/src/glsl/opt_structure_splitting.cpp
index 9b3f048..806c079 100644
--- a/src/glsl/opt_structure_splitting.cpp
+++ b/src/glsl/opt_structure_splitting.cpp
@@ -104,7 +104,8 @@ ir_structure_reference_visitor::get_variable_entry(ir_variable *var)
 {
    assert(var);
 
-   if (!var->type->is_record() || var->mode == ir_var_uniform)
+   if (!var->type->is_record() || var->mode == ir_var_uniform
+       || var->mode == ir_var_shader_in || var->mode == ir_var_shader_out)
       return NULL;
 
    foreach_iter(exec_list_iterator, iter, this->variable_list) {




More information about the mesa-commit mailing list