mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
radeonsi: move barriers out of si_copy_buffer
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31193>
This commit is contained in:
parent
1ee394c34d
commit
e805c35986
5 changed files with 22 additions and 11 deletions
|
|
@ -108,6 +108,8 @@ bool si_vid_resize_buffer(struct pipe_context *context, struct radeon_cmdbuf *cs
|
|||
ws->buffer_unmap(ws, new_buf->res->buf);
|
||||
ws->buffer_unmap(ws, old_buf.res->buf);
|
||||
} else {
|
||||
unsigned flags = SI_OP_SYNC_BEFORE;
|
||||
si_barrier_before_simple_buffer_op(sctx, flags, &new_buf->res->b.b, &old_buf.res->b.b);
|
||||
if (buf_ofst_info) {
|
||||
uint64_t dst_offset = 0, src_offset = 0;
|
||||
for (int i = 0; i < buf_ofst_info->num_units; i++) {
|
||||
|
|
|
|||
|
|
@ -965,7 +965,11 @@ void si_resource_copy_region(struct pipe_context *ctx, struct pipe_resource *dst
|
|||
|
||||
/* Handle buffers first. */
|
||||
if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) {
|
||||
si_copy_buffer(sctx, dst, src, dstx, src_box->x, src_box->width, SI_OP_SYNC_BEFORE_AFTER);
|
||||
unsigned flags = SI_OP_SYNC_BEFORE_AFTER;
|
||||
|
||||
si_barrier_before_simple_buffer_op(sctx, flags, dst, src);
|
||||
si_copy_buffer(sctx, dst, src, dstx, src_box->x, src_box->width, flags);
|
||||
si_barrier_after_simple_buffer_op(sctx, flags, dst, src);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -445,8 +445,12 @@ static void *si_buffer_transfer_map(struct pipe_context *ctx, struct pipe_resour
|
|||
box->width + (box->x % SI_MAP_BUFFER_ALIGNMENT), 256);
|
||||
if (staging) {
|
||||
/* Copy the VRAM buffer to the staging buffer. */
|
||||
unsigned flags = SI_OP_SYNC_BEFORE_AFTER;
|
||||
|
||||
si_barrier_before_simple_buffer_op(sctx, flags, &staging->b.b, resource);
|
||||
si_copy_buffer(sctx, &staging->b.b, resource, box->x % SI_MAP_BUFFER_ALIGNMENT,
|
||||
box->x, box->width, SI_OP_SYNC_BEFORE_AFTER);
|
||||
box->x, box->width, flags);
|
||||
si_barrier_after_simple_buffer_op(sctx, flags, &staging->b.b, resource);
|
||||
|
||||
data = si_buffer_map(sctx, staging, usage & ~PIPE_MAP_UNSYNCHRONIZED);
|
||||
if (!data) {
|
||||
|
|
@ -480,10 +484,13 @@ static void si_buffer_do_flush_region(struct pipe_context *ctx, struct pipe_tran
|
|||
if (stransfer->staging) {
|
||||
unsigned src_offset =
|
||||
stransfer->b.b.offset + transfer->box.x % SI_MAP_BUFFER_ALIGNMENT + (box->x - transfer->box.x);
|
||||
unsigned flags = SI_OP_SYNC_BEFORE_AFTER;
|
||||
|
||||
/* Copy the staging buffer into the original one. */
|
||||
si_barrier_before_simple_buffer_op(sctx, flags, transfer->resource, &stransfer->staging->b.b);
|
||||
si_copy_buffer(sctx, transfer->resource, &stransfer->staging->b.b, box->x, src_offset,
|
||||
box->width, SI_OP_SYNC_BEFORE_AFTER);
|
||||
box->width, flags);
|
||||
si_barrier_after_simple_buffer_op(sctx, flags, transfer->resource, &stransfer->staging->b.b);
|
||||
}
|
||||
|
||||
util_range_add(&buf->b.b, &buf->valid_buffer_range, box->x, box->x + box->width);
|
||||
|
|
|
|||
|
|
@ -458,16 +458,11 @@ void si_copy_buffer(struct si_context *sctx, struct pipe_resource *dst, struct p
|
|||
if (!size)
|
||||
return;
|
||||
|
||||
si_barrier_before_simple_buffer_op(sctx, flags, dst, src);
|
||||
|
||||
if (si_compute_clear_copy_buffer(sctx, dst, dst_offset, src, src_offset, size, NULL, 0, flags,
|
||||
0, true)) {
|
||||
si_barrier_after_simple_buffer_op(sctx, flags, dst, src);
|
||||
0, true))
|
||||
return;
|
||||
}
|
||||
|
||||
si_cp_dma_copy_buffer(sctx, dst, src, dst_offset, src_offset, size, flags);
|
||||
si_barrier_after_simple_buffer_op(sctx, flags, dst, src);
|
||||
}
|
||||
|
||||
void si_compute_shorten_ubyte_buffer(struct si_context *sctx, struct pipe_resource *dst, struct pipe_resource *src,
|
||||
|
|
|
|||
|
|
@ -207,8 +207,11 @@ void si_test_dma_perf(struct si_screen *sscreen)
|
|||
|
||||
if (method == METHOD_DEFAULT) {
|
||||
if (is_copy) {
|
||||
si_copy_buffer(sctx, dst, src, dst_offset, src_offset, size,
|
||||
SI_OP_SYNC_BEFORE_AFTER);
|
||||
unsigned flags = SI_OP_SYNC_BEFORE_AFTER;
|
||||
|
||||
si_barrier_before_simple_buffer_op(sctx, flags, dst, src);
|
||||
si_copy_buffer(sctx, dst, src, dst_offset, src_offset, size, flags);
|
||||
si_barrier_after_simple_buffer_op(sctx, flags, dst, src);
|
||||
} else {
|
||||
sctx->b.clear_buffer(&sctx->b, dst, dst_offset, size, &clear_value,
|
||||
clear_value_size);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue