panfrost: Map with size of first layer for 3D textures

As that's what Gallium expects in transfer.layer_stride.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Tomeu Vizoso 2020-01-02 11:27:00 +01:00 committed by Alyssa Rosenzweig
parent ed3eede296
commit 14bc4c7cce
2 changed files with 8 additions and 2 deletions

View File

@ -322,6 +322,8 @@ panfrost_setup_slices(struct panfrost_resource *pres, size_t *bo_size)
unsigned slice_one_size = slice->stride * effective_height;
unsigned slice_full_size = slice_one_size * effective_depth;
slice->size0 = slice_one_size;
/* Report 2D size for 3D texturing */
if (l == 0)
@ -665,7 +667,10 @@ panfrost_transfer_map(struct pipe_context *pctx,
return transfer->map;
} else {
transfer->base.stride = rsrc->slices[level].stride;
transfer->base.layer_stride = rsrc->cubemap_stride;
if (resource->target == PIPE_TEXTURE_3D)
transfer->base.layer_stride = rsrc->slices[level].size0;
else
transfer->base.layer_stride = rsrc->cubemap_stride;
/* By mapping direct-write, we're implicitly already
* initialized (maybe), so be conservative */
@ -675,7 +680,7 @@ panfrost_transfer_map(struct pipe_context *pctx,
return bo->cpu
+ rsrc->slices[level].offset
+ transfer->base.box.z * rsrc->cubemap_stride
+ transfer->base.box.z * transfer->base.layer_stride
+ transfer->base.box.y * rsrc->slices[level].stride
+ transfer->base.box.x * bytes_per_pixel;
}

View File

@ -43,6 +43,7 @@ enum panfrost_memory_layout {
struct panfrost_slice {
unsigned offset;
unsigned stride;
unsigned size0;
/* If there is a header preceding each slice, how big is
* that header? Used for AFBC */