draw: make sure key size is calculated consistently.
authorRoland Scheidegger <sroland@vmware.com>
Tue, 19 Feb 2013 18:47:08 +0000 (19:47 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 22 Feb 2013 03:34:07 +0000 (04:34 +0100)
commitf972567671a1a9896ad4db85ad87fd36a967addc
tree6aa7ebdfe3b5c3cb3e7516f507eb57a471c5f0fb
parent10bcc843f8898c2466b610d08edc27516e10cc51
draw: make sure key size is calculated consistently.

Some parts calculated key size by using shader information, others by using
the pipe_vertex_element information. Since it is perfectly valid to have more
vertex_elements set than the vertex shader is using those may not be the same,
so we weren't copying over all vertex_element state - this caused the tgsi dump
to assert (iterates over all vertex elements). More importantly in this
situation it would also break vertex texturing completely (since the sampler
state derived from the key is at a different position than expected).
Fix thix by deriving key->nr_vertex_elements from the shader information
instead of the pipe_vertex_element state (unlike dx10, we can't have "holes"
in pipe_vertex_element state, so this should be safe).
(Note that actual llvm shader generation does not use the pipe_vertex_element
state from the key itself in any case (althogh I guess it could) but uses
the one from draw.pt (which should be the same though contains all elements)
instead.)

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/draw/draw_llvm.c