Mesa (master): glsl: only add outward facing varyings to resourse list for SSO

Timothy Arceri tarceri at kemper.freedesktop.org
Tue Jan 5 23:53:09 UTC 2016


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

Author: Timothy Arceri <timothy.arceri at collabora.com>
Date:   Thu Dec 24 09:50:59 2015 +1100

glsl: only add outward facing varyings to resourse list for SSO

An SSO program can have multiple stages and we only want to add the externally
facing varyings. The current code was adding both the packed inputs and outputs
for the first and last stage of each program.

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan at alterapraxis.com>

---

 src/glsl/linker.cpp |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index a6e81b4..acc63ae 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -3433,7 +3433,7 @@ add_interface_variables(struct gl_shader_program *shProg,
 }
 
 static bool
-add_packed_varyings(struct gl_shader_program *shProg, int stage)
+add_packed_varyings(struct gl_shader_program *shProg, int stage, GLenum type)
 {
    struct gl_shader *sh = shProg->_LinkedShaders[stage];
    GLenum iface;
@@ -3454,10 +3454,13 @@ add_packed_varyings(struct gl_shader_program *shProg, int stage)
          default:
             unreachable("unexpected type");
          }
-         if (!add_program_resource(shProg, iface, var,
-                                   build_stageref(shProg, var->name,
-                                                  var->data.mode)))
-            return false;
+
+         if (type == iface) {
+            if (!add_program_resource(shProg, iface, var,
+                                      build_stageref(shProg, var->name,
+                                                     var->data.mode)))
+               return false;
+         }
       }
    }
    return true;
@@ -3724,9 +3727,9 @@ build_program_resource_list(struct gl_shader_program *shProg)
 
    /* Program interface needs to expose varyings in case of SSO. */
    if (shProg->SeparateShader) {
-      if (!add_packed_varyings(shProg, input_stage))
+      if (!add_packed_varyings(shProg, input_stage, GL_PROGRAM_INPUT))
          return;
-      if (!add_packed_varyings(shProg, output_stage))
+      if (!add_packed_varyings(shProg, output_stage, GL_PROGRAM_OUTPUT))
          return;
    }
 




More information about the mesa-commit mailing list