gallium+(u_threaded,r300,r600,radeonsi): move transfer offset into pipe_transfer

Let's use the 4 bytes of unused padding usefully in pipe_transfer.

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10527>
This commit is contained in:
Marek Olšák
2021-04-22 00:11:18 -04:00
committed by Marge Bot
parent 6005b86893
commit 967757a208
8 changed files with 13 additions and 17 deletions
@@ -1710,7 +1710,7 @@ tc_transfer_map(struct pipe_context *_pipe,
u_upload_alloc(tc->base.stream_uploader, 0,
box->width + (box->x % tc->map_buffer_alignment),
tc->map_buffer_alignment, &ttrans->offset,
tc->map_buffer_alignment, &ttrans->b.offset,
&ttrans->staging, (void**)&map);
if (!map) {
slab_free(&tc->pool_transfers, ttrans);
@@ -1806,7 +1806,7 @@ tc_buffer_do_flush_region(struct threaded_context *tc,
if (ttrans->staging) {
struct pipe_box src_box;
u_box_1d(ttrans->offset + ttrans->b.box.x % tc->map_buffer_alignment +
u_box_1d(ttrans->b.offset + ttrans->b.box.x % tc->map_buffer_alignment +
(box->x - ttrans->b.box.x),
box->width, &src_box);
@@ -298,10 +298,6 @@ struct threaded_transfer {
/* Staging buffer for DISCARD_RANGE transfers. */
struct pipe_resource *staging;
/* Offset into the staging buffer, because the backing buffer is
* sub-allocated. */
unsigned offset;
};
struct threaded_query {
+2 -5
View File
@@ -33,9 +33,6 @@ struct r300_transfer {
/* Parent class */
struct pipe_transfer transfer;
/* Offset from start of buffer. */
unsigned offset;
/* Linear texture. */
struct r300_resource *linear_texture;
};
@@ -206,7 +203,7 @@ r300_texture_transfer_map(struct pipe_context *ctx,
/* Unpipelined transfer. */
trans->transfer.stride = tex->tex.stride_in_bytes[level];
trans->transfer.layer_stride = tex->tex.layer_size_in_bytes[level];
trans->offset = r300_texture_get_offset(tex, level, box->z);
trans->transfer.offset = r300_texture_get_offset(tex, level, box->z);
if (referenced_cs &&
!(usage & PIPE_MAP_UNSYNCHRONIZED)) {
@@ -237,7 +234,7 @@ r300_texture_transfer_map(struct pipe_context *ctx,
}
*transfer = &trans->transfer;
return map + trans->offset +
return map + trans->transfer.offset +
box->y / util_format_get_blockheight(format) * trans->transfer.stride +
box->x / util_format_get_blockwidth(format) * util_format_get_blocksize(format);
}
@@ -322,7 +322,7 @@ static void *r600_buffer_get_transfer(struct pipe_context *ctx,
transfer->b.b.stride = 0;
transfer->b.b.layer_stride = 0;
transfer->b.staging = NULL;
transfer->offset = offset;
transfer->b.b.offset = offset;
transfer->staging = staging;
*ptransfer = &transfer->b.b;
return data;
@@ -490,7 +490,7 @@ static void r600_buffer_do_flush_region(struct pipe_context *ctx,
dst = transfer->resource;
src = &rtransfer->staging->b.b;
soffset = rtransfer->offset + box->x % R600_MAP_BUFFER_ALIGNMENT;
soffset = rtransfer->b.b.offset + box->x % R600_MAP_BUFFER_ALIGNMENT;
u_box_1d(soffset, box->width, &dma_box);
@@ -178,7 +178,6 @@ struct r600_resource {
struct r600_transfer {
struct threaded_transfer b;
struct r600_resource *staging;
unsigned offset;
};
struct r600_fmask_info {
+2 -2
View File
@@ -319,8 +319,8 @@ static void *si_buffer_get_transfer(struct pipe_context *ctx, struct pipe_resour
transfer->b.b.box = *box;
transfer->b.b.stride = 0;
transfer->b.b.layer_stride = 0;
transfer->b.b.offset = offset;
transfer->b.staging = NULL;
transfer->offset = offset;
transfer->staging = staging;
*ptransfer = &transfer->b.b;
return data;
@@ -480,7 +480,7 @@ static void si_buffer_do_flush_region(struct pipe_context *ctx, struct pipe_tran
if (stransfer->staging) {
unsigned src_offset =
stransfer->offset + transfer->box.x % SI_MAP_BUFFER_ALIGNMENT + (box->x - transfer->box.x);
stransfer->b.b.offset + transfer->box.x % SI_MAP_BUFFER_ALIGNMENT + (box->x - transfer->box.x);
/* Copy the staging buffer into the original one. */
si_copy_buffer(sctx, transfer->resource, &stransfer->staging->b.b, box->x, src_offset,
-1
View File
@@ -337,7 +337,6 @@ struct si_resource {
struct si_transfer {
struct threaded_transfer b;
struct si_resource *staging;
unsigned offset;
};
struct si_texture {
+5
View File
@@ -586,6 +586,11 @@ struct pipe_transfer
struct pipe_box box; /**< region of the resource to access */
unsigned stride; /**< row stride in bytes */
unsigned layer_stride; /**< image/layer stride in bytes */
/* Offset into a driver-internal staging buffer to make use of unused
* padding in this structure.
*/
unsigned offset;
};