asahi: Handle linear display targets as well as tiled
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Mon, 31 May 2021 22:08:14 +0000 (18:08 -0400)
committerMarge Bot <eric+marge@anholt.net>
Tue, 1 Jun 2021 01:31:02 +0000 (01:31 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11086>

src/gallium/drivers/asahi/agx_pipe.c

index fa76af1..5eee838 100644 (file)
@@ -593,9 +593,13 @@ agx_flush_frontbuffer(struct pipe_screen *_screen,
    void *map = winsys->displaytarget_map(winsys, rsrc->dt, PIPE_USAGE_DEFAULT);
    assert(map != NULL);
 
-   agx_detile(rsrc->bo->ptr.cpu, map,
-              rsrc->base.width0, 32, rsrc->dt_stride / 4,
-              0, 0, rsrc->base.width0, rsrc->base.height0);
+   if (rsrc->modifier == DRM_FORMAT_MOD_APPLE_64X64_MORTON_ORDER) {
+      agx_detile(rsrc->bo->ptr.cpu, map,
+                 rsrc->base.width0, 32, rsrc->dt_stride / 4,
+                 0, 0, rsrc->base.width0, rsrc->base.height0);
+   } else {
+      memcpy(map, rsrc->bo->ptr.cpu, rsrc->dt_stride * rsrc->base.height0);
+   }
 
    winsys->displaytarget_display(winsys, rsrc->dt, context_private, box);
 }