diff options
author | Eric Anholt <eric@anholt.net> | 2010-05-10 10:06:36 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2010-06-24 15:05:20 -0700 |
commit | bdbd9f112e2832eeddce8fc4f70f11005bbe4027 (patch) | |
tree | 8e4110160392f1777ec414068a2b1f411f43cc1b /mesa_codegen.brg | |
parent | 4e5e0f018baedb2d0aa0e1f43efe339da16a09c6 (diff) |
ir_to_mesa: Add support for variable indexing of temporary arrays.
Fixes loop-01.vert, loop-02.vert.
Diffstat (limited to 'mesa_codegen.brg')
-rw-r--r-- | mesa_codegen.brg | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/mesa_codegen.brg b/mesa_codegen.brg index a906542dd5..109e8b2d51 100644 --- a/mesa_codegen.brg +++ b/mesa_codegen.brg @@ -48,6 +48,7 @@ # generate in its trees. %term assign %term reference_vec4 +%term array_reference_vec4_vec4 %term exp_vec4 %term exp2_vec4 %term log_vec4 @@ -93,6 +94,20 @@ # so it can be used as an argument for pretty much anything. vec4: reference_vec4 0 +# A reference of a variable is just a vec4 register location, +# so it can be used as an argument for pretty much anything. +vec4: array_reference_vec4_vec4 1 +{ + ir_to_mesa_dst_reg address_reg = {PROGRAM_ADDRESS, 0, WRITEMASK_X}; + + ir_to_mesa_emit_op1_full(tree->v, tree->ir, OPCODE_ARL, + address_reg, + tree->right->src_reg); + ir_to_mesa_emit_op1_full(tree->v, tree->ir, OPCODE_MOV, + tree->dst_reg, + tree->left->src_reg); +} + # Here's the rule everyone will hit: Moving the result of an # expression into a variable-dereference register location. # |