i965: Defeat the register stride checker in pull uniform messages.
authorSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Thu, 9 Jun 2016 11:03:59 +0000 (13:03 +0200)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 14 Jun 2016 02:36:59 +0000 (19:36 -0700)
commita0ed8503b753574b14df3dc280fd917ae7c207f8
tree8826485db5e530e3dafef78cee9e3dd34133f6f4
parented3ba651f6faa4ea94dde16fa880781090785477
i965: Defeat the register stride checker in pull uniform messages.

Pulling DF uniforms from pull constant buffer generates messages like:
    send(4)         g12<1>DF        g12<0,1,0>F
         sampler ld SIMD4x2 Surface = 1 Sampler = 0 mlen 1 rlen 1

which produces GPU hangs in Cherryview/Braswell:

    "For 64-bit Align1 operation or multiplication of dwords in CHV,
     source horizontal stride must be aligned to qword."

This seems to be documented in the Cherryview PRM, Volume 7, Page 843:

    "When source or destination datatype is 64b or operation is integer
     DWord multiply, regioning in Align1 must follow these rules:

     1. Source and Destination horizontal stride must be aligned to the
        same qword."

We should set the destination type to UD, D, or F so that
the register stride checker doesn't notice.  The destination type of
send messages is basically irrelevant anyway.

Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95462
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_fs_generator.cpp