glsl: Fix varying struct locations when varying packing is disabled.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 30 Dec 2015 10:33:00 +0000 (02:33 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 31 Dec 2015 00:04:12 +0000 (16:04 -0800)
commit7cdc2b9ca0ab60b282416b975a2ac6d7abcd42ad
treedebe7beedbc1ebc6534f127cbe1b29d19e0c12d4
parent4acf71c89b5ef5e2fe8c1a3d7ecf6031e191463c
glsl: Fix varying struct locations when varying packing is disabled.

varying_matches::record tries to compute the number of components in
each varying, which varying_matches::assign_locations uses to assign
locations.  With varying packing, it uses glsl_type::component_slots()
to come up with a reasonable value.

Without varying packing, it fell back to an open-coded computation
that didn't bother to handle structs at all.  I believe we can simply
use 4 * glsl_type::count_attribute_slots(false), which already handles
these cases correctly.

Partially fixes rendering in GFXBench 4.0's tessellation benchmark.
(NVE0 is almost right after this, but i965 is still mostly garbage.)

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
src/glsl/link_varyings.cpp