Verify that interface blocks match when linking separate shader stages into a program.
Fixes piglit glsl-1.50 tests: * linker/interface-blocks-vs-fs-member-count-mismatch.shader_test * linker/interface-blocks-vs-fs-member-order-mismatch.shader_test Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> --- src/glsl/interface_blocks.cpp | 14 ++++++++++++++ src/glsl/interface_blocks.h | 3 +++ src/glsl/linker.cpp | 3 +++ 3 files changed, 20 insertions(+) diff --git a/src/glsl/interface_blocks.cpp b/src/glsl/interface_blocks.cpp index f3daccf..4da40b0 100644 --- a/src/glsl/interface_blocks.cpp +++ b/src/glsl/interface_blocks.cpp @@ -88,3 +88,17 @@ cross_validate_interface_blocks(struct gl_shader **shader_list, return ok; } +bool +validate_program_interface_blocks(const struct gl_shader_program *prog) +{ + bool ok = true; + struct gl_shader *shader_list[2]; + + shader_list[0] = prog->_LinkedShaders[MESA_SHADER_VERTEX]; + shader_list[1] = prog->_LinkedShaders[MESA_SHADER_FRAGMENT]; + + ok = cross_validate_interface_blocks((struct gl_shader **) &shader_list, 2); + + return ok; +} + diff --git a/src/glsl/interface_blocks.h b/src/glsl/interface_blocks.h index 76ab725..fa4f873 100644 --- a/src/glsl/interface_blocks.h +++ b/src/glsl/interface_blocks.h @@ -29,4 +29,7 @@ bool cross_validate_interface_blocks(struct gl_shader **shader_list, unsigned num_shaders); +bool +validate_program_interface_blocks(const struct gl_shader_program *prog); + #endif /* GLSL_INTERFACE_BLOCKS_H */ diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 5bc5132..45c60f6 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -1724,6 +1724,9 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog) sh); } + if (!validate_program_interface_blocks(prog)) + goto done; + /* Here begins the inter-stage linking phase. Some initial validation is * performed, then locations are assigned for uniforms, attributes, and * varyings. -- 1.7.10.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev