diff options
author | Marek Olšák <[email protected]> | 2013-11-29 17:28:23 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2013-12-12 18:34:11 +0100 |
commit | 91aca8c662faf0ec311968b2897a72a6d08b199d (patch) | |
tree | 97a5c26785cb01493158a8e2cb3c2c5965c5b08d /src/gallium/drivers/radeon/r600_pipe_common.c | |
parent | 12806449fa35aff47ad6f4615ede55776c9f66c8 (diff) |
r600g,radeonsi: consolidate buffer code, add handling of DISCARD_RANGE for SI
This adds 2 optimizations for radeonsi:
- handling of DISCARD_RANGE
- mapping an uninitialized buffer range is automatically UNSYNCHRONIZED
Reviewed-by: Michel Dänzer <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeon/r600_pipe_common.c')
-rw-r--r-- | src/gallium/drivers/radeon/r600_pipe_common.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index 1ad47e1481b..28921beea82 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -28,6 +28,7 @@ #include "r600_cs.h" #include "tgsi/tgsi_parse.h" #include "util/u_format_s3tc.h" +#include "util/u_upload_mgr.h" #include <inttypes.h> static const struct debug_named_value common_debug_options[] = { @@ -223,6 +224,10 @@ void r600_common_screen_cleanup(struct r600_common_screen *rscreen) bool r600_common_context_init(struct r600_common_context *rctx, struct r600_common_screen *rscreen) { + util_slab_create(&rctx->pool_transfers, + sizeof(struct r600_transfer), 64, + UTIL_SLAB_SINGLETHREADED); + rctx->ws = rscreen->ws; rctx->family = rscreen->family; rctx->chip_class = rscreen->chip_class; @@ -234,11 +239,23 @@ bool r600_common_context_init(struct r600_common_context *rctx, if (!rctx->allocator_so_filled_size) return false; + rctx->uploader = u_upload_create(&rctx->b, 1024 * 1024, 256, + PIPE_BIND_INDEX_BUFFER | + PIPE_BIND_CONSTANT_BUFFER); + if (!rctx->uploader) + return false; + return true; } void r600_common_context_cleanup(struct r600_common_context *rctx) { + if (rctx->uploader) { + u_upload_destroy(rctx->uploader); + } + + util_slab_destroy(&rctx->pool_transfers); + if (rctx->allocator_so_filled_size) { u_suballocator_destroy(rctx->allocator_so_filled_size); } |