gallium/i915: overhaul of fragment shader compilation, constant/immediate allocation
authorBrian <brian@i915.localnet.net>
Fri, 22 Feb 2008 23:48:05 +0000 (16:48 -0700)
committerBrian <brian@i915.localnet.net>
Fri, 22 Feb 2008 23:48:05 +0000 (16:48 -0700)
commitc74900ee5d80c7c2b7cbe4ed87395526a742a13e
tree5d3a1102eb01278587f8978ce47b444c7d27fb92
parent8cd7c1d03ce045bfa39471c3f77a31030195b899
gallium/i915: overhaul of fragment shader compilation, constant/immediate allocation

Before, fragment shaders were translated to i915 hw code at bind time, rather
than create time.  Now there's an i915_fragment_shader struct with the expected
contents that's created by i915_create_fs_state().  Translation to i915 code
takes place there too.

Immediates are handled correctly now.  During program translation we keep
track of which constant buffer slots are free (i.e. not referenced by the
shader).  Then the TGSI immediates and ancillary immediates (introduced for
SIN/COS/etc) are put into those free slots.

When it's time to upload the constant buffer, use the fp->constant_flags[]
array to determine if we should grab an immediate from the shader, or a
user-defined parameter from the gallium constant buffer.
src/gallium/drivers/i915simple/i915_context.h
src/gallium/drivers/i915simple/i915_fpc.h
src/gallium/drivers/i915simple/i915_fpc_emit.c
src/gallium/drivers/i915simple/i915_fpc_translate.c
src/gallium/drivers/i915simple/i915_state.c
src/gallium/drivers/i915simple/i915_state_derived.c
src/gallium/drivers/i915simple/i915_state_emit.c