Mesa (master): glsl/linker: always validate explicit locations for first and last interfaces
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Apr 15 22:35:19 UTC 2019
Module: Mesa
Branch: master
Commit: 42351c21bbb9ed5e067737ac72e1da510832ddd7
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=42351c21bbb9ed5e067737ac72e1da510832ddd7
Author: Andres Gomez <agomez at igalia.com>
Date: Fri Mar 8 23:21:58 2019 +0200
glsl/linker: always validate explicit locations for first and last interfaces
Until now, we were only doing this when linking a SSO
program. However, nothing avoids linking a non SSO program which
doesn't have both a VS and FS. In those cases, we also need to report
the usual linking errors, if happening.
v2: Use a better name for the renamed function (Timothy).
Signed-off-by: Andres Gomez <agomez at igalia.com>
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
---
src/compiler/glsl/link_varyings.cpp | 14 ++++++--------
src/compiler/glsl/link_varyings.h | 8 ++++----
src/compiler/glsl/linker.cpp | 15 +++++++--------
3 files changed, 17 insertions(+), 20 deletions(-)
diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp
index 89a1463c878..22ec411837d 100644
--- a/src/compiler/glsl/link_varyings.cpp
+++ b/src/compiler/glsl/link_varyings.cpp
@@ -678,17 +678,15 @@ validate_explicit_variable_location(struct gl_context *ctx,
/**
* Validate explicit locations for the inputs to the first stage and the
- * outputs of the last stage in an SSO program (everything in between is
- * validated in cross_validate_outputs_to_inputs).
+ * outputs of the last stage in a program, if those are not the VS and FS
+ * shaders.
*/
void
-validate_sso_explicit_locations(struct gl_context *ctx,
- struct gl_shader_program *prog,
- gl_shader_stage first_stage,
- gl_shader_stage last_stage)
+validate_first_and_last_interface_explicit_locations(struct gl_context *ctx,
+ struct gl_shader_program *prog,
+ gl_shader_stage first_stage,
+ gl_shader_stage last_stage)
{
- assert(prog->SeparateShader);
-
/* VS inputs and FS outputs are validated in
* assign_attribute_or_color_locations()
*/
diff --git a/src/compiler/glsl/link_varyings.h b/src/compiler/glsl/link_varyings.h
index 16bf1668a4c..d0f7ca355b8 100644
--- a/src/compiler/glsl/link_varyings.h
+++ b/src/compiler/glsl/link_varyings.h
@@ -276,10 +276,10 @@ link_varyings(struct gl_shader_program *prog, unsigned first, unsigned last,
struct gl_context *ctx, void *mem_ctx);
void
-validate_sso_explicit_locations(struct gl_context *ctx,
- struct gl_shader_program *prog,
- gl_shader_stage first,
- gl_shader_stage last);
+validate_first_and_last_interface_explicit_locations(struct gl_context *ctx,
+ struct gl_shader_program *prog,
+ gl_shader_stage first,
+ gl_shader_stage last);
void
cross_validate_outputs_to_inputs(struct gl_context *ctx,
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 5667fb73f1e..efcef9fedf0 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -5141,15 +5141,14 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
prev = i;
}
- /* The cross validation of outputs/inputs above validates explicit locations
- * but for SSO programs we need to do this also for the inputs in the
- * first stage and outputs of the last stage included in the program, since
- * there is no cross validation for these.
+ /* The cross validation of outputs/inputs above validates interstage
+ * explicit locations. We need to do this also for the inputs in the first
+ * stage and outputs of the last stage included in the program, since there
+ * is no cross validation for these.
*/
- if (prog->SeparateShader)
- validate_sso_explicit_locations(ctx, prog,
- (gl_shader_stage) first,
- (gl_shader_stage) last);
+ validate_first_and_last_interface_explicit_locations(ctx, prog,
+ (gl_shader_stage) first,
+ (gl_shader_stage) last);
/* Cross-validate uniform blocks between shader stages */
validate_interstage_uniform_blocks(prog, prog->_LinkedShaders);
More information about the mesa-commit
mailing list