glsl/linker: Fix unmatched TCS outputs being reduced to local variable
authorDanylo Piliaiev <danylo.piliaiev@globallogic.com>
Wed, 2 Jan 2019 13:55:08 +0000 (15:55 +0200)
committerTimothy Arceri <tarceri@itsqueeze.com>
Tue, 8 Jan 2019 23:31:13 +0000 (10:31 +1100)
Always match TCS outputs since they are shared by all invocations
within the patch and should not be converted to local variables.

This is one of the issues found in Downward.

Signed-off-by: Danylo Piliaiev <danylo.piliaiev@globallogic.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104297

src/compiler/glsl/linker.cpp

index 08e9fb721f8f990f1db6419c7c496c0c05661d61..d9b9f60067f591699c8ccf5b53fbb6e0bdd998d1 100644 (file)
@@ -3185,6 +3185,12 @@ match_explicit_outputs_to_inputs(gl_linked_shader *producer,
          const unsigned idx = var->data.location - VARYING_SLOT_VAR0;
          if (explicit_locations[idx][var->data.location_frac] == NULL)
             explicit_locations[idx][var->data.location_frac] = var;
+
+         /* Always match TCS outputs. They are shared by all invocations
+          * within a patch and can be used as shared memory.
+          */
+         if (producer->Stage == MESA_SHADER_TESS_CTRL)
+            var->data.is_unmatched_generic_inout = 0;
       }
    }