i965/fs: Don't allow OOB array access of images
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 15 Apr 2016 01:36:05 +0000 (18:36 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 16 Apr 2016 05:47:33 +0000 (22:47 -0700)
commitf30f6e26252ed09eca1922f7c8633c7c7b6e50fe
tree7b5ab8dd29ecd1e803a31bc64e655ea762507270
parent93db828e426b663cb7b1a01f87368a27d2b9377e
i965/fs: Don't allow OOB array access of images

We have had a guard against OOB array access of images on IVB for a long
time, but it can actually cause hangs on any GPU generation.  This can
happen due to getting an untyped SURFACE_STATE for a typed message.  We
didn't used to hit this with the piglit test on anything other than IVB
because the OOB in the test would cause us to go past the top of the pull
constant UBO and we would get a surface index of 0 which is was always a
valid surface.  Now that we're pushing small arrays, we can end up grabbing
garbage from the GRF and going to some random index which causes a hang.
The solution is to just do the bounds check on all hardware.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94944
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Tested-by: Mark Janes <mark.a.janes@intel.com>
src/mesa/drivers/dri/i965/brw_fs_nir.cpp