intel/fs: Use a pure vertical stride for large register strides
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 2 Nov 2017 21:52:49 +0000 (14:52 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 7 Nov 2017 18:37:52 +0000 (10:37 -0800)
commite8c9e65185de3e821e1e482e77906d1d51efa3ec
tree4fb62ea6392217387ed81a6fc7fe63dc98bd5e4c
parentbd24f4890f7f4b4a2c2c6e92163f655904b8709a
intel/fs: Use a pure vertical stride for large register strides

Register strides higher than 4 are uncommon but they can happen.  For
instance, if you have a 64-bit extract_u8 operation, we turn that into
UB -> UQ MOV with a source stride of 8.  Our previous calculation would
try to generate a stride of <32;8,8>:ub which is invalid because the
maximum horizontal stride is 4.  To solve this problem, we instead use a
stride of <8;1,0>.  As noted in the comment, this does not work as a
destination but that's ok as very few things actually generate that
stride.

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Cc: mesa-stable@lists.freedesktop.org
src/intel/compiler/brw_fs_generator.cpp