aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/radeon/r600_buffer_common.c
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2017-03-12 14:19:31 +0100
committerMarek Olšák <[email protected]>2017-05-15 13:01:33 +0200
commit7166773f90d541103b85e35227d59d82b416aa45 (patch)
tree183b863ca216e09c9bd078d087065264c04430ca /src/gallium/drivers/radeon/r600_buffer_common.c
parent04299f7e5dc1139f2e49da17a99455d830f3362b (diff)
radeonsi: implement replace_buffer_storage for the threaded context
Reviewed-by: Nicolai Hähnle <[email protected]> Tested-by: Dieter Nützel <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeon/r600_buffer_common.c')
-rw-r--r--src/gallium/drivers/radeon/r600_buffer_common.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c
index 8ded99e90ca..fb74b45d2fa 100644
--- a/src/gallium/drivers/radeon/r600_buffer_common.c
+++ b/src/gallium/drivers/radeon/r600_buffer_common.c
@@ -273,6 +273,29 @@ r600_invalidate_buffer(struct r600_common_context *rctx,
return true;
}
+/* Replace the storage of dst with src. */
+void r600_replace_buffer_storage(struct pipe_context *ctx,
+ struct pipe_resource *dst,
+ struct pipe_resource *src)
+{
+ struct r600_common_context *rctx = (struct r600_common_context *)ctx;
+ struct r600_resource *rdst = r600_resource(dst);
+ struct r600_resource *rsrc = r600_resource(src);
+ uint64_t old_gpu_address = rdst->gpu_address;
+
+ pb_reference(&rdst->buf, rsrc->buf);
+ rdst->gpu_address = rsrc->gpu_address;
+
+ assert(rdst->vram_usage == rsrc->vram_usage);
+ assert(rdst->gart_usage == rsrc->gart_usage);
+ assert(rdst->bo_size == rsrc->bo_size);
+ assert(rdst->bo_alignment == rsrc->bo_alignment);
+ assert(rdst->domains == rsrc->domains);
+ assert(rdst->flags == rsrc->flags);
+
+ rctx->rebind_buffer(ctx, dst, old_gpu_address);
+}
+
void r600_invalidate_resource(struct pipe_context *ctx,
struct pipe_resource *resource)
{