radeonsi/gfx9: fix a hang with an empty first IB
authorMarek Olšák <marek.olsak@amd.com>
Tue, 17 Apr 2018 19:28:04 +0000 (15:28 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 18 Apr 2018 18:42:06 +0000 (14:42 -0400)
This packet causes the no-op IB detection to fail, so the IB is always
submitted. Also fix the no-op IB detection by moving the begin call.

Cc: 18.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_pipe.c

index 466546b76b731e3e87019453becd05341403417d..bf88346ca1ef2e0d45a25504b90fdecce3d85be6 100644 (file)
@@ -474,9 +474,6 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
 
        sctx->sample_mask.sample_mask = 0xffff;
 
-       /* these must be last */
-       si_begin_new_gfx_cs(sctx);
-
        if (sctx->chip_class >= GFX9) {
                sctx->wait_mem_scratch = (struct r600_resource*)
                        pipe_buffer_create(screen, 0, PIPE_USAGE_DEFAULT, 4);
@@ -492,6 +489,8 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
                radeon_emit(cs, sctx->wait_mem_scratch->gpu_address);
                radeon_emit(cs, sctx->wait_mem_scratch->gpu_address >> 32);
                radeon_emit(cs, sctx->wait_mem_number);
+               radeon_add_to_buffer_list(sctx, cs, sctx->wait_mem_scratch,
+                                         RADEON_USAGE_WRITE, RADEON_PRIO_FENCE);
        }
 
        /* CIK cannot unbind a constant buffer (S_BUFFER_LOAD doesn't skip loads
@@ -564,6 +563,8 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
        util_dynarray_init(&sctx->resident_img_needs_color_decompress, NULL);
        util_dynarray_init(&sctx->resident_tex_needs_depth_decompress, NULL);
 
+       /* this must be last */
+       si_begin_new_gfx_cs(sctx);
        return &sctx->b;
 fail:
        fprintf(stderr, "radeonsi: Failed to create a context.\n");