GL_ARB_separate_shader_objects allow to match by name variable or block
interface. Input varying can't be removed because it is will impact the
location assignment.

It fixes the bug 79783 and likely any application that uses
GL_ARB_separate_shader_objects extension.

piglit test: arb_separate_shader_object-rendezvous_by_name

Signed-off-by: Gregory Hainaut <gregory.hain...@gmail.com>
---
 src/glsl/opt_dead_code.cpp | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/glsl/opt_dead_code.cpp b/src/glsl/opt_dead_code.cpp
index 071485a..37329f6 100644
--- a/src/glsl/opt_dead_code.cpp
+++ b/src/glsl/opt_dead_code.cpp
@@ -75,6 +75,24 @@ do_dead_code(exec_list *instructions, bool 
uniform_locations_assigned)
          || !entry->declaration)
         continue;
 
+      /* Section 7.4.1 (Shader Interface Matching) of the OpenGL 4.5
+       * (Core Profile) spec says:
+       *
+       *    "With separable program objects, interfaces between shader
+       *    stages may involve the outputs from one program object and the
+       *    inputs from a second program object.  For such interfaces, it is
+       *    not possible to detect mismatches at link time, because the
+       *    programs are linked separately. When each such program is
+       *    linked, all inputs or outputs interfacing with another program
+       *    stage are treated as active."
+       */
+      if (entry->var->data.always_active_io &&
+            (!entry->var->data.explicit_location ||
+             entry->var->data.location >= VARYING_SLOT_VAR0) &&
+            (entry->var->data.mode == ir_var_shader_in ||
+             entry->var->data.mode == ir_var_shader_out))
+         continue;
+
       if (entry->assign) {
         /* Remove a single dead assignment to the variable we found.
          * Don't do so if it's a shader or function output or a shader
-- 
2.1.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to