freedreno/a5xx: Don't set the VARYING flag for fragcoord-only programs.
authorEric Anholt <eric@anholt.net>
Tue, 25 Aug 2020 21:55:22 +0000 (14:55 -0700)
committerMarge Bot <eric+marge@anholt.net>
Wed, 26 Aug 2020 00:01:50 +0000 (00:01 +0000)
As with a6xx (commits beb02a785785bcc8), the blob doesn't set this flag
for a5xx when fragcoords are used but not proper varyings.  See for
example dEQP-GLES2.functional.shaders.builtin_variable.fragcoord_xyz.

The hope was that this would clear up separate_shader fails/flakes like it
helped with a6xx's flakes, but that didn't happen.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6464>

src/gallium/drivers/freedreno/a5xx/fd5_program.c

index 7065cfe59c76e74e48ea7e0070e442ea73e7ff34..07aecff5a848762689f6b85f829dd42dc7d5e07b 100644 (file)
@@ -489,7 +489,6 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
        OUT_PKT4(ring, REG_A5XX_VPC_CNTL_0, 1);
        OUT_RING(ring, A5XX_VPC_CNTL_0_STRIDE_IN_VPC(l.max_loc) |
                        COND(s[FS].v->total_in > 0, A5XX_VPC_CNTL_0_VARYING) |
-                       COND(s[FS].v->fragcoord_compmask != 0, A5XX_VPC_CNTL_0_VARYING) |
                        0x10000);    // XXX
 
        fd5_context(ctx)->max_loc = l.max_loc;
@@ -524,7 +523,6 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
 
        OUT_PKT4(ring, REG_A5XX_SP_FS_CTRL_REG0, 1);
        OUT_RING(ring, COND(s[FS].v->total_in > 0, A5XX_SP_FS_CTRL_REG0_VARYING) |
-                       COND(s[FS].v->fragcoord_compmask != 0, A5XX_SP_FS_CTRL_REG0_VARYING) |
                        0x40006 | /* XXX set pretty much everywhere */
                        A5XX_SP_FS_CTRL_REG0_THREADSIZE(fssz) |
                        A5XX_SP_FS_CTRL_REG0_HALFREGFOOTPRINT(s[FS].i->max_half_reg + 1) |