i965: rewrite the code for handling shader subroutine calls
authorBrian Paul <brianp@vmware.com>
Sat, 14 Feb 2009 00:17:52 +0000 (17:17 -0700)
committerBrian Paul <brianp@vmware.com>
Sat, 14 Feb 2009 00:18:36 +0000 (17:18 -0700)
commitc51c822ee02cb47ddba46da668577d51b7c02831
tree905cafdc5a02f07aa67fc04e66a7fb1734abec20
parent74b6d55864b9264323a09856781f655e453b182b
i965: rewrite the code for handling shader subroutine calls

Previously, the prog_instruction::Data field was used to map original Mesa
instructions to brw instructions in order to resolve subroutine calls.  This
was a rather tangled mess.  Plus it's an obstacle to implementing dynamic
allocation/growing of the instruction buffer (it's still a fixed size).

Mesa's GLSL compiler emits a label for each subroutine and CAL instruction.
Now we use those labels to patch the subroutine calls after code generation
has been done.  We just keep a list of all CAL instructions that needs patching
and a list of all subroutine labels.  It's a simple matter to resolve them.

This also consolidates some redundant post-emit code between brw_vs_emit.c and
brw_wm_glsl.c and removes some loops that cleared the prog_instruction::Data
fields at the end.

Plus, a bunch of new comments.
src/mesa/drivers/dri/i965/brw_eu.c
src/mesa/drivers/dri/i965/brw_eu.h
src/mesa/drivers/dri/i965/brw_vs_emit.c
src/mesa/drivers/dri/i965/brw_wm.h
src/mesa/drivers/dri/i965/brw_wm_fp.c
src/mesa/drivers/dri/i965/brw_wm_glsl.c