freedreno/a3xx: clear cached fp when switching blit prog
authorRob Clark <robclark@freedesktop.org>
Sun, 9 Aug 2015 12:38:25 +0000 (08:38 -0400)
committerRob Clark <robclark@freedesktop.org>
Mon, 10 Aug 2015 11:12:54 +0000 (07:12 -0400)
For gmem restore (mem2gmem), we swap blit programs, in order to have a
different frag shader for depth vs color restore.  But we weren't
actually clearing the cached fp, so it would not actually change the
frag shader as expected.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/a3xx/fd3_gmem.c

index 302452657b641a7480f6081f268feca5f0bf9c3c..9a5b45e2fcb4916709d784496ac1d6cbf8374ddb 100644 (file)
@@ -651,6 +651,7 @@ fd3_emit_tile_mem2gmem(struct fd_context *ctx, struct fd_tile *tile)
 
        if (fd_gmem_needs_restore(ctx, tile, FD_BUFFER_COLOR)) {
                emit.prog = &ctx->blit_prog[pfb->nr_cbufs - 1];
+               emit.fp = NULL;      /* frag shader changed so clear cache */
                fd3_program_emit(ring, &emit, pfb->nr_cbufs, pfb->cbufs);
                emit_mem2gmem_surf(ctx, gmem->cbuf_base, pfb->cbufs, pfb->nr_cbufs, bin_w);
        }
@@ -671,6 +672,7 @@ fd3_emit_tile_mem2gmem(struct fd_context *ctx, struct fd_tile *tile)
                                emit.prog = &ctx->blit_zs;
                        emit.key.half_precision = false;
                }
+               emit.fp = NULL;      /* frag shader changed so clear cache */
                fd3_program_emit(ring, &emit, 1, &pfb->zsbuf);
                emit_mem2gmem_surf(ctx, gmem->zsbuf_base, &pfb->zsbuf, 1, bin_w);
        }