summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeon/r600_pipe_common.c
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2016-07-16 21:52:20 +0200
committerMarek Olšák <marek.olsak@amd.com>2016-07-23 13:33:42 +0200
commit700de07771a1b6ce2a63b063fcc196c5b26cffe3 (patch)
tree78705e4c2d767c33c1d978dcd69ae518248f584b /src/gallium/drivers/radeon/r600_pipe_common.c
parent8e3e9d283976c30a8ba9b51821bc61ddf782e2b0 (diff)
downloadexternal_mesa3d-700de07771a1b6ce2a63b063fcc196c5b26cffe3.zip
external_mesa3d-700de07771a1b6ce2a63b063fcc196c5b26cffe3.tar.gz
external_mesa3d-700de07771a1b6ce2a63b063fcc196c5b26cffe3.tar.bz2
radeonsi: implement buffer_subdata without indirect calls
There is less noise in CPU profile data now. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Diffstat (limited to 'src/gallium/drivers/radeon/r600_pipe_common.c')
-rw-r--r--src/gallium/drivers/radeon/r600_pipe_common.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
index 4ef58ca..caf2552 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.c
+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
@@ -400,7 +400,8 @@ static void r600_set_debug_callback(struct pipe_context *ctx,
}
bool r600_common_context_init(struct r600_common_context *rctx,
- struct r600_common_screen *rscreen)
+ struct r600_common_screen *rscreen,
+ unsigned context_flags)
{
util_slab_create(&rctx->pool_transfers,
sizeof(struct r600_transfer), 64,
@@ -422,12 +423,20 @@ bool r600_common_context_init(struct r600_common_context *rctx,
rctx->b.transfer_map = u_transfer_map_vtbl;
rctx->b.transfer_flush_region = u_transfer_flush_region_vtbl;
rctx->b.transfer_unmap = u_transfer_unmap_vtbl;
- rctx->b.buffer_subdata = u_default_buffer_subdata;
rctx->b.texture_subdata = u_default_texture_subdata;
rctx->b.memory_barrier = r600_memory_barrier;
rctx->b.flush = r600_flush_from_st;
rctx->b.set_debug_callback = r600_set_debug_callback;
+ /* evergreen_compute.c has a special codepath for global buffers.
+ * Everything else can use the direct path.
+ */
+ if ((rscreen->chip_class == EVERGREEN || rscreen->chip_class == CAYMAN) &&
+ (context_flags & PIPE_CONTEXT_COMPUTE_ONLY))
+ rctx->b.buffer_subdata = u_default_buffer_subdata;
+ else
+ rctx->b.buffer_subdata = r600_buffer_subdata;
+
if (rscreen->info.drm_major == 2 && rscreen->info.drm_minor >= 43) {
rctx->b.get_device_reset_status = r600_get_reset_status;
rctx->gpu_reset_counter =