summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2019-03-28 23:47:10 +0000
committerAlyssa Rosenzweig <[email protected]>2019-03-31 02:36:38 +0000
commit01fce794dcda449928e880c2f43312c1a348cea6 (patch)
tree9dedbe43a1e3af108ca4f35f13ed194325eeae81 /src/gallium
parentc87f3ce97f69212d27ac830d5c37ac0f55e892f8 (diff)
panfrost: Extend tiling for cubemaps
transfer_unmap now tiles for any tiled resource, not just TEXTURE_2D, which should more than just cubemaps! Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/panfrost/pan_resource.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c
index e217b358ecf..3d93fd0dc4d 100644
--- a/src/gallium/drivers/panfrost/pan_resource.c
+++ b/src/gallium/drivers/panfrost/pan_resource.c
@@ -433,8 +433,6 @@ panfrost_tile_texture(struct panfrost_screen *screen, struct panfrost_resource *
unsigned level = trans->base.level;
- assert(!trans->base.box.z);
-
panfrost_texture_swizzle(
trans->base.box.x,
trans->base.box.y,
@@ -443,7 +441,10 @@ panfrost_tile_texture(struct panfrost_screen *screen, struct panfrost_resource *
util_format_get_blocksize(rsrc->base.format),
bo->slices[level].stride,
trans->map,
- bo->cpu + bo->slices[level].offset);
+ bo->cpu
+ + bo->slices[level].offset
+ + bo->cubemap_stride * trans->base.box.z
+ );
}
static void
@@ -454,17 +455,16 @@ panfrost_unmap_bo(struct panfrost_context *ctx,
struct panfrost_bo *bo = (struct panfrost_bo *)pan_resource(transfer->resource)->bo;
if (transfer->usage & PIPE_TRANSFER_WRITE) {
- if (transfer->resource->target == PIPE_TEXTURE_2D) {
- struct panfrost_resource *prsrc = (struct panfrost_resource *) transfer->resource;
-
- /* Gallium thinks writeback happens here; instead, this is our cue to tile */
- if (bo->layout == PAN_AFBC) {
- DBG("Warning: writes to afbc surface can't possibly work out well for you...\n");
- } else if (bo->layout == PAN_TILED) {
- struct pipe_context *gallium = (struct pipe_context *) ctx;
- struct panfrost_screen *screen = pan_screen(gallium->screen);
- panfrost_tile_texture(screen, prsrc, trans);
- }
+ struct panfrost_resource *prsrc = (struct panfrost_resource *) transfer->resource;
+
+ /* Gallium thinks writeback happens here; instead, this is our cue to tile */
+ if (bo->layout == PAN_AFBC) {
+ DBG("Warning: writes to afbc surface can't possibly work out well for you...\n");
+ } else if (bo->layout == PAN_TILED) {
+ struct pipe_context *gallium = (struct pipe_context *) ctx;
+ struct panfrost_screen *screen = pan_screen(gallium->screen);
+ assert(transfer->box.depth == 1);
+ panfrost_tile_texture(screen, prsrc, trans);
}
}