Mesa (master): gallium/radeon: subclass threaded_transfer

Marek Olšák mareko at kemper.freedesktop.org
Mon May 15 11:05:23 UTC 2017


Module: Mesa
Branch: master
Commit: b40d8026fa8753f71c7a67f8e39f245ddcb99eda
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b40d8026fa8753f71c7a67f8e39f245ddcb99eda

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Wed May  3 01:51:42 2017 +0200

gallium/radeon: subclass threaded_transfer

v2: use assert on rtransfer->b.staging

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
Tested-by: Dieter Nützel <Dieter at nuetzel-hh.de>

---

 src/gallium/drivers/radeon/r600_buffer_common.c | 22 ++++++++++-----------
 src/gallium/drivers/radeon/r600_pipe_common.h   |  2 +-
 src/gallium/drivers/radeon/r600_texture.c       | 26 ++++++++++++-------------
 3 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c
index b57632e077..8ded99e90c 100644
--- a/src/gallium/drivers/radeon/r600_buffer_common.c
+++ b/src/gallium/drivers/radeon/r600_buffer_common.c
@@ -300,16 +300,17 @@ static void *r600_buffer_get_transfer(struct pipe_context *ctx,
 	else
 		transfer = slab_alloc(&rctx->pool_transfers);
 
-	transfer->transfer.resource = NULL;
-	pipe_resource_reference(&transfer->transfer.resource, resource);
-	transfer->transfer.level = 0;
-	transfer->transfer.usage = usage;
-	transfer->transfer.box = *box;
-	transfer->transfer.stride = 0;
-	transfer->transfer.layer_stride = 0;
+	transfer->b.b.resource = NULL;
+	pipe_resource_reference(&transfer->b.b.resource, resource);
+	transfer->b.b.level = 0;
+	transfer->b.b.usage = usage;
+	transfer->b.b.box = *box;
+	transfer->b.b.stride = 0;
+	transfer->b.b.layer_stride = 0;
+	transfer->b.staging = NULL;
 	transfer->offset = offset;
 	transfer->staging = staging;
-	*ptransfer = &transfer->transfer;
+	*ptransfer = &transfer->b.b;
 	return data;
 }
 
@@ -512,9 +513,8 @@ static void r600_buffer_transfer_unmap(struct pipe_context *ctx,
 	    !(transfer->usage & PIPE_TRANSFER_FLUSH_EXPLICIT))
 		r600_buffer_do_flush_region(ctx, transfer, &transfer->box);
 
-	if (rtransfer->staging)
-		r600_resource_reference(&rtransfer->staging, NULL);
-
+	r600_resource_reference(&rtransfer->staging, NULL);
+	assert(rtransfer->b.staging == NULL); /* for threaded context only */
 	pipe_resource_reference(&transfer->resource, NULL);
 
 	/* Don't use pool_transfers_unsync. We are always in the driver
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h
index 34497863f8..a694b974ad 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -184,7 +184,7 @@ struct r600_resource {
 };
 
 struct r600_transfer {
-	struct pipe_transfer		transfer;
+	struct threaded_transfer	b;
 	struct r600_resource		*staging;
 	unsigned			offset;
 };
diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
index 3bcf9667fd..4d72b86f4e 100644
--- a/src/gallium/drivers/radeon/r600_texture.c
+++ b/src/gallium/drivers/radeon/r600_texture.c
@@ -1648,10 +1648,10 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
 	trans = CALLOC_STRUCT(r600_transfer);
 	if (!trans)
 		return NULL;
-	pipe_resource_reference(&trans->transfer.resource, texture);
-	trans->transfer.level = level;
-	trans->transfer.usage = usage;
-	trans->transfer.box = *box;
+	pipe_resource_reference(&trans->b.b.resource, texture);
+	trans->b.b.level = level;
+	trans->b.b.usage = usage;
+	trans->b.b.box = *box;
 
 	if (rtex->is_depth) {
 		struct r600_texture *staging_depth;
@@ -1693,8 +1693,8 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
 
 			/* Just get the strides. */
 			r600_texture_get_offset(rctx->screen, staging_depth, level, NULL,
-						&trans->transfer.stride,
-						&trans->transfer.layer_stride);
+						&trans->b.b.stride,
+						&trans->b.b.layer_stride);
 		} else {
 			/* XXX: only readback the rectangle which is being mapped? */
 			/* XXX: when discard is true, no need to read back from depth texture */
@@ -1711,8 +1711,8 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
 
 			offset = r600_texture_get_offset(rctx->screen, staging_depth,
 							 level, box,
-							 &trans->transfer.stride,
-							 &trans->transfer.layer_stride);
+							 &trans->b.b.stride,
+							 &trans->b.b.layer_stride);
 		}
 
 		trans->staging = (struct r600_resource*)staging_depth;
@@ -1737,8 +1737,8 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
 
 		/* Just get the strides. */
 		r600_texture_get_offset(rctx->screen, staging, 0, NULL,
-					&trans->transfer.stride,
-					&trans->transfer.layer_stride);
+					&trans->b.b.stride,
+					&trans->b.b.layer_stride);
 
 		if (usage & PIPE_TRANSFER_READ)
 			r600_copy_to_staging_texture(ctx, trans);
@@ -1749,8 +1749,8 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
 	} else {
 		/* the resource is mapped directly */
 		offset = r600_texture_get_offset(rctx->screen, rtex, level, box,
-						 &trans->transfer.stride,
-						 &trans->transfer.layer_stride);
+						 &trans->b.b.stride,
+						 &trans->b.b.layer_stride);
 		buf = &rtex->resource;
 	}
 
@@ -1760,7 +1760,7 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
 		return NULL;
 	}
 
-	*ptransfer = &trans->transfer;
+	*ptransfer = &trans->b.b;
 	return map + offset;
 }
 




More information about the mesa-commit mailing list