Mesa (master): glsl: Make add_interface_variables only consider the appropriate stage.

Kenneth Graunke kwg at kemper.freedesktop.org
Sat Apr 2 05:05:34 UTC 2016


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

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Tue Mar 29 11:41:46 2016 -0700

glsl: Make add_interface_variables only consider the appropriate stage.

add_interface_variables() is supposed to add variables for the inputs of
the first shader stage linked into a program, and the outputs of the
last shader stage linked into a program.

>From the ARB_program_interface_query specification:

"* PROGRAM_INPUT corresponds to the set of active input variables used by
   the first shader stage of <program>.  If <program> includes multiple
   shader stages, input variables from any shader stage other than the
   first will not be enumerated.

 * PROGRAM_OUTPUT corresponds to the set of active output variables
   (section 2.14.11) used by the last shader stage of <program>.  If
   <program> includes multiple shader stages, output variables from any
   shader stage other than the last will not be enumerated."

Previously, we used build_stageref here, which walks over all linked
shaders in the program.  This meant that internal varyings would be
visible.  We don't actually need any of build_stageref's code: we
already explicitly skip packed varyings, handle modes, and the name
comparisons just do a fuzzy string comparison of name with itself.

Fixes two tests: dEQP-GLES31.functional.program_interface_query.
program_{input,output}.referenced_by.referenced_by_vertex_fragment.

These tests have a VS and FS linked together into a single program.
Both stages have an input called "shaderInput".  But the FS input
should not be visible because it isn't the first stage.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri at collabora.com>

---

 src/compiler/glsl/linker.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 3f06e3b..a8d9cf4 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -3574,7 +3574,7 @@ add_interface_variables(struct gl_shader_program *shProg,
       if (!sha_v)
          return false;
 
-      stages |= build_stageref(shProg, sha_v->name, sha_v->mode);
+      stages |= 1 << stage;
 
       if (!add_program_resource(shProg, programInterface, sha_v, stages))
          return false;




More information about the mesa-commit mailing list