mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 20:18:12 +02:00
freedreno: Introduce a fd_resource_layer_stride() helper.
This factors out a bit of duplicated code, but will also make the shared resource layout transition process clearer. Acked-by: Rob Clark <robdclark@chromium.org>
This commit is contained in:
parent
9e9a26c768
commit
6b09227ede
2 changed files with 15 additions and 11 deletions
|
|
@ -531,7 +531,7 @@ fd_resource_transfer_map(struct pipe_context *pctx,
|
||||||
ptrans->usage = usage;
|
ptrans->usage = usage;
|
||||||
ptrans->box = *box;
|
ptrans->box = *box;
|
||||||
ptrans->stride = util_format_get_nblocksx(format, slice->pitch) * rsc->cpp;
|
ptrans->stride = util_format_get_nblocksx(format, slice->pitch) * rsc->cpp;
|
||||||
ptrans->layer_stride = rsc->layer_first ? rsc->layer_size : slice->size0;
|
ptrans->layer_stride = fd_resource_layer_stride(rsc, level);
|
||||||
|
|
||||||
/* we always need a staging texture for tiled buffers:
|
/* we always need a staging texture for tiled buffers:
|
||||||
*
|
*
|
||||||
|
|
@ -550,8 +550,7 @@ fd_resource_transfer_map(struct pipe_context *pctx,
|
||||||
trans->staging_prsc = &staging_rsc->base;
|
trans->staging_prsc = &staging_rsc->base;
|
||||||
trans->base.stride = util_format_get_nblocksx(format,
|
trans->base.stride = util_format_get_nblocksx(format,
|
||||||
staging_slice->pitch) * staging_rsc->cpp;
|
staging_slice->pitch) * staging_rsc->cpp;
|
||||||
trans->base.layer_stride = staging_rsc->layer_first ?
|
trans->base.layer_stride = fd_resource_layer_stride(staging_rsc, 0);
|
||||||
staging_rsc->layer_size : staging_slice->size0;
|
|
||||||
trans->staging_box = *box;
|
trans->staging_box = *box;
|
||||||
trans->staging_box.x = 0;
|
trans->staging_box.x = 0;
|
||||||
trans->staging_box.y = 0;
|
trans->staging_box.y = 0;
|
||||||
|
|
@ -667,8 +666,8 @@ fd_resource_transfer_map(struct pipe_context *pctx,
|
||||||
trans->staging_prsc = &staging_rsc->base;
|
trans->staging_prsc = &staging_rsc->base;
|
||||||
trans->base.stride = util_format_get_nblocksx(format,
|
trans->base.stride = util_format_get_nblocksx(format,
|
||||||
staging_slice->pitch) * staging_rsc->cpp;
|
staging_slice->pitch) * staging_rsc->cpp;
|
||||||
trans->base.layer_stride = staging_rsc->layer_first ?
|
trans->base.layer_stride =
|
||||||
staging_rsc->layer_size : staging_slice->size0;
|
fd_resource_layer_stride(staging_rsc, 0);
|
||||||
trans->staging_box = *box;
|
trans->staging_box = *box;
|
||||||
trans->staging_box.x = 0;
|
trans->staging_box.x = 0;
|
||||||
trans->staging_box.y = 0;
|
trans->staging_box.y = 0;
|
||||||
|
|
|
||||||
|
|
@ -156,17 +156,22 @@ fd_resource_slice(struct fd_resource *rsc, unsigned level)
|
||||||
return &rsc->slices[level];
|
return &rsc->slices[level];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
fd_resource_layer_stride(struct fd_resource *rsc, unsigned level)
|
||||||
|
{
|
||||||
|
if (rsc->layer_first)
|
||||||
|
return rsc->layer_size;
|
||||||
|
else
|
||||||
|
return fd_resource_slice(rsc, level)->size0;
|
||||||
|
}
|
||||||
|
|
||||||
/* get offset for specified mipmap level and texture/array layer */
|
/* get offset for specified mipmap level and texture/array layer */
|
||||||
static inline uint32_t
|
static inline uint32_t
|
||||||
fd_resource_offset(struct fd_resource *rsc, unsigned level, unsigned layer)
|
fd_resource_offset(struct fd_resource *rsc, unsigned level, unsigned layer)
|
||||||
{
|
{
|
||||||
struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
|
struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
|
||||||
unsigned offset;
|
unsigned offset = slice->offset;
|
||||||
if (rsc->layer_first) {
|
offset += fd_resource_layer_stride(rsc, level) * layer;
|
||||||
offset = slice->offset + (rsc->layer_size * layer);
|
|
||||||
} else {
|
|
||||||
offset = slice->offset + (slice->size0 * layer);
|
|
||||||
}
|
|
||||||
debug_assert(offset < fd_bo_size(rsc->bo));
|
debug_assert(offset < fd_bo_size(rsc->bo));
|
||||||
return offset + rsc->offset;
|
return offset + rsc->offset;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue