summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@chown.ath.cx>2016-02-18 23:24:38 +0100
committerGrigori Goronzy <greg@chown.ath.cx>2016-02-18 23:24:38 +0100
commit77193b01aedafa335eae60bd5e43053c3f5bf0fc (patch)
tree1ee592dc7d0fe6a83f2d31e0feca53d6c3a3d35d
parentd89db7ebf424eee12bf85b5de36adc3081597541 (diff)
WIP: radeonsi: use VRAM for descriptor and const buffersdescvram
-rw-r--r--src/gallium/drivers/radeon/r600_pipe_common.c10
-rw-r--r--src/gallium/drivers/radeon/r600_pipe_common.h1
-rw-r--r--src/gallium/drivers/radeonsi/si_descriptors.c6
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);