glsl/linker: Fix out variables linking during single stage
authorVadym Shovkoplias <vadim.shovkoplias@gmail.com>
Wed, 24 Oct 2018 10:28:23 +0000 (13:28 +0300)
committerTimothy Arceri <tarceri@itsqueeze.com>
Mon, 29 Oct 2018 23:19:17 +0000 (10:19 +1100)
Since out variables are copied from shader objects instruction
streams to linked shader instruction steam it should be cloned
at first to keep source instruction steam unaltered.

Fixes: 966a797e433 ("glsl/linker: Link all out vars from a shader
objects on a single stage")

Signed-off-by: Vadym Shovkoplias <vadym.shovkoplias@globallogic.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105731

src/compiler/glsl/linker.cpp

index 7db34ebf95b1205a958b746b2c3338905a8674ad..8b1b03322a0eba7c910a999231e476fcb7df2a0b 100644 (file)
@@ -2269,10 +2269,11 @@ link_output_variables(struct gl_linked_shader *linked_shader,
          if (ir->ir_type != ir_type_variable)
             continue;
 
-         ir_variable *const var = (ir_variable *) ir;
+         ir_variable *var = (ir_variable *) ir;
 
          if (var->data.mode == ir_var_shader_out &&
                !symbols->get_variable(var->name)) {
+            var = var->clone(linked_shader, NULL);
             symbols->add_variable(var);
             linked_shader->ir->push_head(var);
          }