freedreno/ir3: create fragcoord instructions in input block
authorRob Clark <robdclark@chromium.org>
Mon, 27 Jan 2020 16:26:04 +0000 (08:26 -0800)
committerMarge Bot <eric+marge@anholt.net>
Sat, 1 Feb 2020 02:40:22 +0000 (02:40 +0000)
This was somehow working to create the instructions in a random block,
and use the value in other blocks, by dumb luck.  But two-pass-RA's
better choice of register assignment causes a couple dEQPs to start
failing without this fix:

dEQP-GLES3.functional.shaders.metamorphic.bubblesort_flag.variant_1
dEQP-GLES3.functional.shaders.metamorphic.bubblesort_flag.variant_2

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3569>

src/freedreno/ir3/ir3_compiler_nir.c

index a7536cf..747b66a 100644 (file)
@@ -1306,12 +1306,12 @@ static struct ir3_instruction *
 get_frag_coord(struct ir3_context *ctx)
 {
        if (!ctx->frag_coord) {
-               struct ir3_block *b = ctx->block;
+               struct ir3_block *b = ctx->in_block;
                struct ir3_instruction *xyzw[4];
                struct ir3_instruction *hw_frag_coord;
 
                hw_frag_coord = create_sysval_input(ctx, SYSTEM_VALUE_FRAG_COORD, 0xf);
-               ir3_split_dest(ctx->block, xyzw, hw_frag_coord, 0, 4);
+               ir3_split_dest(b, xyzw, hw_frag_coord, 0, 4);
 
                /* for frag_coord.xy, we get unsigned values.. we need
                 * to subtract (integer) 8 and divide by 16 (right-