spirv: Whack sampler/image pointers to uniform
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 11 Jan 2019 20:17:24 +0000 (14:17 -0600)
committerJason Ekstrand <jason.ekstrand@intel.com>
Sat, 12 Jan 2019 23:55:49 +0000 (17:55 -0600)
commitb57c1ec4219f01bfdb98bcab8fca4c44e87bd1a4
tree2b95e8593fe9afb1557275b2505e738945e48a14
parent2b876bc92260991ad3ad1fd6b38240f6983078e1
spirv: Whack sampler/image pointers to uniform

A long time in a galaxy far far away, there was a GLSLang bug with how
it handled samplers passed in as function parameters.  (The bug can be
found here: https://github.com/KhronosGroup/glslang/issues/179.)
Unfortunately, that version was shipped in several apps and has been
causing heartburn for our SPIR-V parser ever since.

Recent changes to NIR uncovered a moderately old bug in how we work
around this issue.  In particular, we ended up with a deref_cast from
uniform to local which is not a no-op cast so nir_opt_deref wasn't
getting rid of the cast.  The only reason why it worked before was
because someone just happened to call nir_fixup_deref_modes which
"fixed" the cast (that shouldn't be happening) and then a later round of
copy-prop would get rid of it.  The fact that the deref_cast survived
that long without causing trouble for other parts of NIR is a bit
surprising.

Just whacking the mode of the pointer seems to fix it fairly
unobtrusively.  Currently, only apps with this bug will have a local
variable containing an image or sampler.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109304
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/compiler/spirv/vtn_variables.c