diff options
author | Grigori Goronzy <greg@chown.ath.cx> | 2016-02-18 23:24:38 +0100 |
---|---|---|
committer | Grigori Goronzy <greg@chown.ath.cx> | 2016-02-18 23:24:38 +0100 |
commit | 77193b01aedafa335eae60bd5e43053c3f5bf0fc (patch) | |
tree | 1ee592dc7d0fe6a83f2d31e0feca53d6c3a3d35d | |
parent | d89db7ebf424eee12bf85b5de36adc3081597541 (diff) |
WIP: radeonsi: use VRAM for descriptor and const buffersdescvram
-rw-r--r-- | src/gallium/drivers/radeon/r600_pipe_common.c | 10 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/r600_pipe_common.h | 1 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_descriptors.c | 6 |
3 files changed, 14 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index ea028272cc..cba0cf9991 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -311,6 +311,12 @@ bool r600_common_context_init(struct r600_common_context *rctx, if (!rctx->uploader) return false; + rctx->const_mem = u_upload_create(&rctx->b, 1024 * 1024, + PIPE_BIND_INDEX_BUFFER | + PIPE_BIND_CONSTANT_BUFFER, PIPE_USAGE_DYNAMIC); + if (!rctx->const_mem) + return false; + rctx->ctx = rctx->ws->ctx_create(rctx->ws); if (!rctx->ctx) return false; @@ -338,6 +344,10 @@ void r600_common_context_cleanup(struct r600_common_context *rctx) u_upload_destroy(rctx->uploader); } + if (rctx->const_mem) { + u_upload_destroy(rctx->const_mem); + } + util_slab_destroy(&rctx->pool_transfers); if (rctx->allocator_so_filled_size) { diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h index 97c771922b..2536265cb7 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.h +++ b/src/gallium/drivers/radeon/r600_pipe_common.h @@ -391,6 +391,7 @@ struct r600_common_context { unsigned gpu_reset_counter; struct u_upload_mgr *uploader; + struct u_upload_mgr *const_mem; struct u_suballocator *allocator_so_filled_size; struct util_slab_mempool pool_transfers; diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index 345f2bbc38..9cdf683b06 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -121,7 +121,7 @@ static bool si_upload_descriptors(struct si_context *sctx, if (!desc->list_dirty) return true; - u_upload_alloc(sctx->b.uploader, 0, list_size, 256, + u_upload_alloc(sctx->b.const_mem, 0, list_size, 256, &desc->buffer_offset, (struct pipe_resource**)&desc->buffer, &ptr); if (!desc->buffer) @@ -405,7 +405,7 @@ static bool si_upload_vertex_buffer_descriptors(struct si_context *sctx) * directly through a staging buffer and don't go through * the fine-grained upload path. */ - u_upload_alloc(sctx->b.uploader, 0, count * 16, 256, &desc->buffer_offset, + u_upload_alloc(sctx->b.const_mem, 0, count * 16, 256, &desc->buffer_offset, (struct pipe_resource**)&desc->buffer, (void**)&ptr); if (!desc->buffer) return false; @@ -479,7 +479,7 @@ void si_upload_const_buffer(struct si_context *sctx, struct r600_resource **rbuf { void *tmp; - u_upload_alloc(sctx->b.uploader, 0, size, 256, const_offset, + u_upload_alloc(sctx->b.const_mem, 0, size, 256, const_offset, (struct pipe_resource**)rbuffer, &tmp); if (rbuffer) util_memcpy_cpu_to_le32(tmp, ptr, size); |