This simplifies drivers using the draw module and removes the last dependency
on vertex-shader "internals". Since the draw module is producing the
post-transformed vertices, it makes sense to ask it where specific vertex
attributes are located.
This could also simplify some things in the state tracker code for selection,
feedback, rasterpos...
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.
For hardware without native polygon stipple. Create a 32x32 alpha texture
that encodes the stipple pattern. Modify the user's fragment program to
sample the texture (with gl_FragCoord) and kill the fragment according to
the texel value.
Temporarily enabled in softpipe driver, replacing the sp_quad_stipple.c step.
AA points are drawn by converting the point to a quad, then modifying the
user's fragment shader to compute a coverage value. The final fragment
color's alpha is modulated by the coverage value. Fragments outside the
point's radius are killed.
If a structure is marked as being aligned the SPE compiler performs
extra optimizations (sadly, only -O2 is used) when reading the
structure. Since most of the structures sent in batch buffers are
only 8-byte aligned, this resulted in mysterous bugs with -O2.