[Mesa-dev] Mesa (master): mesa: Add channel-wise copy propagation to ir_to_mesa.
Brian Paul
brianp at vmware.com
Fri Jan 14 15:22:29 PST 2011
On 01/14/2011 02:58 PM, Eric Anholt wrote:
> Module: Mesa
> Branch: master
> Commit: 34a9da4eb4dd41dc874f1a175e993e42d4ff4b2a
> URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=34a9da4eb4dd41dc874f1a175e993e42d4ff4b2a
>
> Author: Eric Anholt<eric at anholt.net>
> Date: Wed Jan 12 18:25:33 2011 -0800
>
> mesa: Add channel-wise copy propagation to ir_to_mesa.
>
> This catches more opportunities than the prog_optimize.c code on
> openarena's fixed function shaders turned to GLSL, mostly due to
> looking at multiple source instructions for copy propagation
> opportunities. It should also be much more CPU efficient than
> prog_optimize.c's code.
>
> ---
>
> src/mesa/program/ir_to_mesa.cpp | 129 +++++++++++++++++++++++++++++++++++++++
> 1 files changed, 129 insertions(+), 0 deletions(-)
>
> diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
> index c601ef6..0d40b09 100644
> --- a/src/mesa/program/ir_to_mesa.cpp
> +++ b/src/mesa/program/ir_to_mesa.cpp
> @@ -295,6 +295,8 @@ public:
>
> bool process_move_condition(ir_rvalue *ir);
>
> + void copy_propagate(void);
> +
> void *mem_ctx;
> };
>
> @@ -2616,6 +2618,131 @@ set_uniform_initializers(struct gl_context *ctx,
> talloc_free(mem_ctx);
> }
>
> +/*
> + * On a basic block basis, tracks available PROGRAM_TEMPORARY register
> + * channels for copy propagation and updates following instructions to
> + * use the original versions.
> + *
> + * The ir_to_mesa_visitor lazily produces code assuming that this pass
> + * will occur. As an example, a TXP production before this pass:
> + *
> + * 0: MOV TEMP[1], INPUT[4].xyyy;
> + * 1: MOV TEMP[1].w, INPUT[4].wwww;
> + * 2: TXP TEMP[2], TEMP[1], texture[0], 2D;
> + *
> + * and after:
> + *
> + * 0: MOV TEMP[1], INPUT[4].xyyy;
> + * 1: MOV TEMP[1].w, INPUT[4].wwww;
> + * 2: TXP TEMP[2], INPUT[4].xyyw, texture[0], 2D;
> + *
> + * which allows for dead code elimination on TEMP[1]'s writes.
> + */
> +void
> +ir_to_mesa_visitor::copy_propagate(void)
> +{
> + ir_to_mesa_instruction *acp[this->next_temp * 4];
This does not compile with MSVC:
src\mesa\program\ir_to_mesa.cpp(2644) : error C2466: cannot allocate
an array of constant size 0
src\mesa\program\ir_to_mesa.cpp(2644) : error C2133: 'acp' : unknown size
src\mesa\program\ir_to_mesa.cpp(2646) : error C2070:
'ir_to_mesa_instruction *[]': illegal sizeof operand
src\mesa\program\ir_to_mesa.cpp(2709) : error C2070:
'ir_to_mesa_instruction *[]': illegal sizeof operand
src\mesa\program\ir_to_mesa.cpp(2718) : error C2070:
'ir_to_mesa_instruction *[]': illegal sizeof operand
-Brian
More information about the mesa-dev
mailing list