r600g: use last_gfx_fence like radeonsi
authorMarek Olšák <marek.olsak@amd.com>
Thu, 14 Jul 2016 23:06:58 +0000 (01:06 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 3 Aug 2016 15:46:46 +0000 (17:46 +0200)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/r600/r600_hw_context.c

index ea6902f3ee041d3becb11dd585fb4b02be62597f..2ddea13cf65f76827f85c40b67ba047bef7e37ee 100644 (file)
@@ -252,9 +252,16 @@ void r600_context_gfx_flush(void *context, unsigned flags,
 {
        struct r600_context *ctx = context;
        struct radeon_winsys_cs *cs = ctx->b.gfx.cs;
-
-       if (!radeon_emitted(cs, ctx->b.initial_gfx_cs_size) && !fence)
+       struct radeon_winsys *ws = ctx->b.ws;
+
+       if (!radeon_emitted(cs, ctx->b.initial_gfx_cs_size) &&
+           (!fence || ctx->b.last_gfx_fence)) {
+               if (fence)
+                       ws->fence_reference(fence, ctx->b.last_gfx_fence);
+               if (!(flags & RADEON_FLUSH_ASYNC))
+                       ws->cs_sync_flush(cs);
                return;
+       }
 
        r600_preflush_suspend_features(&ctx->b);
 
@@ -275,7 +282,9 @@ void r600_context_gfx_flush(void *context, unsigned flags,
        }
 
        /* Flush the CS. */
-       ctx->b.ws->cs_flush(cs, flags, fence);
+       ws->cs_flush(cs, flags, &ctx->b.last_gfx_fence);
+       if (fence)
+               ws->fence_reference(fence, ctx->b.last_gfx_fence);
 
        r600_begin_new_cs(ctx);
 }