summaryrefslogtreecommitdiff
path: root/src/glsl/linker.cpp
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-07-19 12:33:54 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-07-19 12:36:32 -0700
commit9303e358cb3062f62c39961ebd4708bf63db03c1 (patch)
treed9259f5ccbcc037fc772a76a902562646952aec7 /src/glsl/linker.cpp
parent5304493c40c5f450568fb518cb09940a72c1bc1d (diff)
linker: Move global instructions from the linked shader first
For the shader containing 'main', use the linked shader (i.e., the clone of the original shader that contained main) as the source for global instructions to move into main.
Diffstat (limited to 'src/glsl/linker.cpp')
-rw-r--r--src/glsl/linker.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index c71c07d6e9..d46744eeda 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -687,12 +687,16 @@ link_intrastage_shaders(struct gl_shader_program *prog,
/* Move any instructions other than variable declarations or function
* declarations into main.
*/
- exec_node *insertion_point = (exec_node *) &main_sig->body;
+ exec_node *insertion_point =
+ move_non_declarations(linked->ir, (exec_node *) &main_sig->body, false,
+ linked);
+
for (unsigned i = 0; i < num_shaders; i++) {
+ if (shader_list[i] == main)
+ continue;
+
insertion_point = move_non_declarations(shader_list[i]->ir,
- insertion_point,
- (shader_list[i] != main),
- linked);
+ insertion_point, true, linked);
}
/* Resolve initializers for global variables in the linked shader.