summaryrefslogtreecommitdiff
path: root/mesa_codegen.brg
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-05-10 10:06:36 -0700
committerEric Anholt <eric@anholt.net>2010-06-24 15:05:20 -0700
commitbdbd9f112e2832eeddce8fc4f70f11005bbe4027 (patch)
tree8e4110160392f1777ec414068a2b1f411f43cc1b /mesa_codegen.brg
parent4e5e0f018baedb2d0aa0e1f43efe339da16a09c6 (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.brg15
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.
#