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

On 24/08/18 18:25, Alejandro Piñeiro wrote:
CCing Timothy just in case he still thinks that the original comment
should remain as it is. In any case, it looks to me, so:

Reviewed-by: Alejandro Piñeiro <apinhe...@igalia.com>


On 23/08/18 12:12, vadym.shovkoplias wrote:
 From Section 4.3.4 (Inputs) of the GLSL 1.50 spec:

     "Only the input variables that are actually read need to be written
      by the previous stage; it is allowed to have superfluous
      declarations of input variables."

Fixes:
     * interstage-multiple-shader-objects.shader_test

v2:
   Update comment in ir.h since the usage of "used" field
   has been extended.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101247
Signed-off-by: Vadym Shovkoplias <vadym.shovkopl...@globallogic.com>
---
  src/compiler/glsl/ir.h                      | 4 ++--
  src/compiler/glsl/link_interface_blocks.cpp | 8 +++++++-
  2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h
index 67b38f48ef..d05d1998a5 100644
--- a/src/compiler/glsl/ir.h
+++ b/src/compiler/glsl/ir.h
@@ -667,8 +667,8 @@ public:
         * variable has been used.  For example, it is an error to redeclare a
         * variable as invariant after it has been used.
         *
-       * This is only maintained in the ast_to_hir.cpp path, not in
-       * Mesa's fixed function or ARB program paths.
+       * This is maintained in the ast_to_hir.cpp path and during linking,
+       * but not in Mesa's fixed function or ARB program paths.
         */
        unsigned used:1;
diff --git a/src/compiler/glsl/link_interface_blocks.cpp b/src/compiler/glsl/link_interface_blocks.cpp
index e5eca9460e..801fbcd5d9 100644
--- a/src/compiler/glsl/link_interface_blocks.cpp
+++ b/src/compiler/glsl/link_interface_blocks.cpp
@@ -417,9 +417,15 @@ validate_interstage_inout_blocks(struct gl_shader_program 
*prog,
         * write to any of the pre-defined outputs (e.g. if the vertex shader
         * does not write to gl_Position, etc), which is allowed and results in
         * undefined behavior.
+       *
+       * From Section 4.3.4 (Inputs) of the GLSL 1.50 spec:
+       *
+       *    "Only the input variables that are actually read need to be written
+       *     by the previous stage; it is allowed to have superfluous
+       *     declarations of input variables."
         */
        if (producer_def == NULL &&
-          !is_builtin_gl_in_block(var, consumer->Stage)) {
+          !is_builtin_gl_in_block(var, consumer->Stage) && var->data.used) {
           linker_error(prog, "Input block `%s' is not an output of "
                        "the previous stage\n", 
var->get_interface_type()->name);
           return;

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

Reply via email to