Reviewed-by: Timothy Arceri <tarc...@itsqueeze.com>

On 8/1/19 1:11 am, Andres Gomez wrote:
The check for location aliasing was always asuming output variables
but this validation is also called for input variables.

Fixes: e2abb75b0e4 ("glsl/linker: validate explicit locations for SSO programs")
Cc: Iago Toral Quiroga <ito...@igalia.com>
Signed-off-by: Andres Gomez <ago...@igalia.com>
---
  src/compiler/glsl/link_varyings.cpp | 15 ++++++++++-----
  1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/compiler/glsl/link_varyings.cpp 
b/src/compiler/glsl/link_varyings.cpp
index 52e493cb599..3969c0120b3 100644
--- a/src/compiler/glsl/link_varyings.cpp
+++ b/src/compiler/glsl/link_varyings.cpp
@@ -481,9 +481,10 @@ check_location_aliasing(struct explicit_location_info 
explicit_locations[][4],
              /* Component aliasing is not alloed */
              if (comp >= component && comp < last_comp) {
                 linker_error(prog,
-                            "%s shader has multiple outputs explicitly "
+                            "%s shader has multiple %sputs explicitly "
                              "assigned to location %d and component %d\n",
                              _mesa_shader_stage_to_string(stage),
+                            var->data.mode == ir_var_shader_in ? "in" : "out",
                              location, comp);
                 return false;
              } else {
@@ -502,10 +503,12 @@ check_location_aliasing(struct explicit_location_info 
explicit_locations[][4],
if (info->interpolation != interpolation) {
                    linker_error(prog,
-                               "%s shader has multiple outputs at explicit "
+                               "%s shader has multiple %sputs at explicit "
                                 "location %u with different interpolation "
                                 "settings\n",
-                               _mesa_shader_stage_to_string(stage), location);
+                               _mesa_shader_stage_to_string(stage),
+                               var->data.mode == ir_var_shader_in ?
+                               "in" : "out", location);
                    return false;
                 }
@@ -513,9 +516,11 @@ check_location_aliasing(struct explicit_location_info explicit_locations[][4],
                     info->sample != sample ||
                     info->patch != patch) {
                    linker_error(prog,
-                               "%s shader has multiple outputs at explicit "
+                               "%s shader has multiple %sputs at explicit "
                                 "location %u with different aux storage\n",
-                               _mesa_shader_stage_to_string(stage), location);
+                               _mesa_shader_stage_to_string(stage),
+                               var->data.mode == ir_var_shader_in ?
+                               "in" : "out", location);
                    return false;
                 }
              }

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

Reply via email to