freedreno/ir3: fix lockups with lame FRAG shaders
authorRob Clark <robclark@freedesktop.org>
Fri, 3 Oct 2014 14:02:31 +0000 (10:02 -0400)
committerRob Clark <robclark@freedesktop.org>
Fri, 3 Oct 2014 18:19:52 +0000 (14:19 -0400)
commitaf4d08839581c2372f17f75f1ad0fd1284ea7d8b
tree4b0f6995e4111153dad63c126ae651a4f63b2a8b
parentcabc93c5adc9ea62be901621eff5ce4cb9574791
freedreno/ir3: fix lockups with lame FRAG shaders

Shaders like:

  FRAG
  PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1
  DCL IN[0], GENERIC[0], PERSPECTIVE
  DCL OUT[0], COLOR
  DCL SAMP[0]
  DCL TEMP[0], LOCAL
  IMM[0] FLT32 {    0.0000,     1.0000,     0.0000,     0.0000}
    0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D
    1: MOV OUT[0], IMM[0].xyxx
    2: END

cause unhappyness.  They have an IN[], but once this is compiled the
useless TEX instruction goes away.  Leaving a varying that is never
fetched, which makes the hw unhappy.

In the process fix a signed vs unsigned compare.  If the vertex shader
has max_reg=-1, MAX2() vs an unsigned would not give the desired result.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3.h
src/gallium/drivers/freedreno/ir3/ir3_compiler.c
src/gallium/drivers/freedreno/ir3/ir3_ra.c
src/gallium/drivers/freedreno/ir3/ir3_shader.c