Module: Mesa Branch: master Commit: 8034e7d6f1be3c9c1a9626b64830617ccf000ecc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8034e7d6f1be3c9c1a9626b64830617ccf000ecc
Author: Kenneth Graunke <kenn...@whitecape.org> Date: Tue Jul 28 18:16:37 2015 -0700 glsl: Convert TES gl_PatchVerticesIn into a constant when using a TCS. When a TCS is present, the TES input gl_PatchVerticesIn is actually a constant - it's simply the # of output vertices specified by the TCS layout qualifiers. So, we can replace the system value with a constant, which may allow further optimization, and will likely be more efficient. If the TCS is absent, we can't do this optimization. Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> Reviewed-by: Marek Olšák <marek.ol...@amd.com> --- src/glsl/linker.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 424b92a..cfd8f81 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -2282,6 +2282,22 @@ resize_tes_inputs(struct gl_context *ctx, foreach_in_list(ir_instruction, ir, tes->ir) { ir->accept(&input_resize_visitor); } + + if (tcs) { + /* Convert the gl_PatchVerticesIn system value into a constant, since + * the value is known at this point. + */ + foreach_in_list(ir_instruction, ir, tes->ir) { + ir_variable *var = ir->as_variable(); + if (var && var->data.mode == ir_var_system_value && + var->data.location == SYSTEM_VALUE_VERTICES_IN) { + void *mem_ctx = ralloc_parent(var); + var->data.mode = ir_var_auto; + var->data.location = 0; + var->constant_value = new(mem_ctx) ir_constant(num_vertices); + } + } + } } /** _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit