diff options
author | Ian Romanick <[email protected]> | 2010-07-19 12:33:54 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2010-07-19 12:36:32 -0700 |
commit | 9303e358cb3062f62c39961ebd4708bf63db03c1 (patch) | |
tree | d9259f5ccbcc037fc772a76a902562646952aec7 /src/glsl | |
parent | 5304493c40c5f450568fb518cb09940a72c1bc1d (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')
-rw-r--r-- | src/glsl/linker.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index c71c07d6e97..d46744eeda5 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. |