mesa: rework GLSL array code generation
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 19 Nov 2008 21:12:25 +0000 (14:12 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 6 Jan 2009 15:49:40 +0000 (08:49 -0700)
commite779e33261ca42c8acebac216e1b070782e730f2
treed081a3ad45716255151dc44b2d3baf5f834666fb
parentef4bd18a50ec9989fdcff97c10721e748e897c7b
mesa: rework GLSL array code generation

We now express arrays in terms of indirect addressing.  For example:
  dst = a[i];
becomes:
  MOV dst, TEMP[1 + TEMP[2].y];
At instruction-emit time indirect addressing is converted into ARL/
ADDR-relative form:
  ARL ADDR.x, TEMP[2].y;
  MOV dst, TEMP[1 + ADDR.x];
This fixes a number of array-related issues.  Arrays of arrays and complex
array/struct nesting works now.
There may be some regressions, but more work is coming.

(cherry picked from commit ae0ff8097b85d3537a7be1674d55a44a9bd6018e)
src/mesa/shader/slang/slang_codegen.c
src/mesa/shader/slang/slang_emit.c
src/mesa/shader/slang/slang_ir.c
src/mesa/shader/slang/slang_ir.h
src/mesa/shader/slang/slang_vartable.h