i965: Skip allocating UNIFORM file storage for uniforms of size 0.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 12 Sep 2014 05:07:40 +0000 (22:07 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 12 Sep 2014 23:35:39 +0000 (16:35 -0700)
commit2408f166db1d81f2e9cc86b3f413ddba5ba537fa
tree6aee859c9ad6ddcedd09fcbc62bc18bab142c882
parent6b6145204dd4a1112f6e1fe10162636141495b79
i965: Skip allocating UNIFORM file storage for uniforms of size 0.

Samplers take up zero slots and therefore don't exist in the params
array, nor are they included in stage_prog_data->nr_params.  There's no
need to store their size in param_size, as it's only used for dealing
with arrays of "real" uniforms (ones uploaded as shader constants).

We run into all kinds of problems trying to refer to the uniform storage
for variables that don't have uniform storage.  For one, we may use some
other variable's index, or access out of bounds in arrays.  In the FS
backend, our extra 2 * MaxSamplerImageUnits params for texture rectangle
rescaling paper over a lot of problems.  In the VS backend, we claim
samplers take up a slot, which also papers over problems.

Instead, just skip allocating storage for variables that don't have any.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Tested-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp