[Mesa-dev] [PATCH 1/3] panfrost: Cleanup some indirection in pan_resource
Alyssa Rosenzweig
alyssa at rosenzweig.io
Wed Apr 3 04:05:30 UTC 2019
Signed-off-by: Alyssa Rosenzweig <alyssa at rosenzweig.io>
---
src/gallium/drivers/panfrost/pan_resource.c | 45 ++++++++++-----------
1 file changed, 21 insertions(+), 24 deletions(-)
diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c
index 3d93fd0dc4d..f7df1353d68 100644
--- a/src/gallium/drivers/panfrost/pan_resource.c
+++ b/src/gallium/drivers/panfrost/pan_resource.c
@@ -448,36 +448,33 @@ panfrost_tile_texture(struct panfrost_screen *screen, struct panfrost_resource *
}
static void
-panfrost_unmap_bo(struct panfrost_context *ctx,
- struct pipe_transfer *transfer)
+panfrost_transfer_unmap(struct pipe_context *pctx,
+ struct pipe_transfer *transfer)
{
+ struct panfrost_context *ctx = pan_context(pctx);
+
+ /* Gallium expects writeback here, so we tile */
+
struct panfrost_gtransfer *trans = pan_transfer(transfer);
- struct panfrost_bo *bo = (struct panfrost_bo *)pan_resource(transfer->resource)->bo;
- if (transfer->usage & PIPE_TRANSFER_WRITE) {
+ if (trans->map) {
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);
+ struct panfrost_bo *bo = prsrc->bo;
+
+ if (transfer->usage & PIPE_TRANSFER_WRITE) {
+
+ if (bo->layout == PAN_AFBC) {
+ DBG("Unimplemented: writes to AFBC\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);
+ }
}
- }
-
- free(trans->map);
-}
-
-static void
-panfrost_transfer_unmap(struct pipe_context *pctx,
- struct pipe_transfer *transfer)
-{
- struct panfrost_context *ctx = pan_context(pctx);
- panfrost_unmap_bo(ctx, transfer);
+ free(trans->map);
+ }
/* Derefence the resource */
pipe_resource_reference(&transfer->resource, NULL);
--
2.20.1
More information about the mesa-dev
mailing list