radeonsi: use a separate allocator for fine fences
authorMarek Olšák <marek.olsak@amd.com>
Tue, 5 Dec 2017 19:04:11 +0000 (20:04 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 6 Dec 2017 14:19:02 +0000 (15:19 +0100)
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeon/r600_pipe_common.c
src/gallium/drivers/radeon/r600_pipe_common.h
src/gallium/drivers/radeonsi/si_fence.c

index d85f9f0311032e695ec8bade4bf441b2065f21c4..9090e65aaa8b38d9bf547bded486911ac7f8b72a 100644 (file)
@@ -454,6 +454,11 @@ bool si_common_context_init(struct r600_common_context *rctx,
        if (!rctx->b.const_uploader)
                return false;
 
+       rctx->cached_gtt_allocator = u_upload_create(&rctx->b, 16 * 1024,
+                                                    0, PIPE_USAGE_STAGING, 0);
+       if (!rctx->cached_gtt_allocator)
+               return false;
+
        rctx->ctx = rctx->ws->ctx_create(rctx->ws);
        if (!rctx->ctx)
                return false;
@@ -498,6 +503,8 @@ void si_common_context_cleanup(struct r600_common_context *rctx)
                u_upload_destroy(rctx->b.stream_uploader);
        if (rctx->b.const_uploader)
                u_upload_destroy(rctx->b.const_uploader);
+       if (rctx->cached_gtt_allocator)
+               u_upload_destroy(rctx->cached_gtt_allocator);
 
        slab_destroy_child(&rctx->pool_transfers);
        slab_destroy_child(&rctx->pool_transfers_unsync);
index d1fdea074e9699b9b550804fdc04dbd237ad8d08..a8e632cf4ca013fd368c83d3a76d857b9859d8f8 100644 (file)
@@ -395,6 +395,7 @@ struct r600_common_context {
        struct pipe_fence_handle        *last_gfx_fence;
        struct pipe_fence_handle        *last_sdma_fence;
        struct r600_resource            *eop_bug_scratch;
+       struct u_upload_mgr             *cached_gtt_allocator;
        unsigned                        num_gfx_cs_flushes;
        unsigned                        initial_gfx_cs_size;
        unsigned                        gpu_reset_counter;
index 0d165a14b5478ffa79aece3c3164be585fe64749..3c4d75462af0a7c49c5626963c37ccdb2f33df16 100644 (file)
@@ -151,7 +151,7 @@ static void si_fine_fence_set(struct si_context *ctx,
        assert(util_bitcount(flags & (PIPE_FLUSH_TOP_OF_PIPE | PIPE_FLUSH_BOTTOM_OF_PIPE)) == 1);
 
        /* Use uncached system memory for the fence. */
-       u_upload_alloc(ctx->b.b.stream_uploader, 0, 4, 4,
+       u_upload_alloc(ctx->b.cached_gtt_allocator, 0, 4, 4,
                       &fine->offset, (struct pipe_resource **)&fine->buf, (void **)&fence_ptr);
        if (!fine->buf)
                return;