freedreno: add fd_transfer to wrap around pipe_transfer
authorIlia Mirkin <imirkin@alum.mit.edu>
Mon, 6 Apr 2015 05:39:14 +0000 (01:39 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Tue, 28 Apr 2015 00:17:07 +0000 (20:17 -0400)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/freedreno/freedreno_context.c
src/gallium/drivers/freedreno/freedreno_resource.c
src/gallium/drivers/freedreno/freedreno_resource.h

index 5fca57c5a3a9721f60ed6e59bdebff0e153667aa..5d92da42e566ba3241f486f679792b276a200713 100644 (file)
@@ -222,7 +222,7 @@ fd_context_init(struct fd_context *ctx, struct pipe_screen *pscreen,
 
        util_dynarray_init(&ctx->draw_patches);
 
-       util_slab_create(&ctx->transfer_pool, sizeof(struct pipe_transfer),
+       util_slab_create(&ctx->transfer_pool, sizeof(struct fd_transfer),
                        16, UTIL_SLAB_SINGLETHREADED);
 
        fd_draw_init(pctx);
index 985b663d618f26e109ec0d0d8ff13c0221232e94..e8da68e116be7441a73d908973223ff9301d1787 100644 (file)
@@ -140,6 +140,7 @@ fd_resource_transfer_map(struct pipe_context *pctx,
        struct fd_context *ctx = fd_context(pctx);
        struct fd_resource *rsc = fd_resource(prsc);
        struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
+       struct fd_transfer *trans;
        struct pipe_transfer *ptrans;
        enum pipe_format format = prsc->format;
        uint32_t op = 0;
@@ -154,7 +155,8 @@ fd_resource_transfer_map(struct pipe_context *pctx,
                return NULL;
 
        /* util_slab_alloc() doesn't zero: */
-       memset(ptrans, 0, sizeof(*ptrans));
+       trans = fd_transfer(ptrans);
+       memset(trans, 0, sizeof(*trans));
 
        pipe_resource_reference(&ptrans->resource, prsc);
        ptrans->level = level;
index a2a540ce5069cf31824857a66d62beaa66953094..f80acb1e1883da077f44ad484427e91ecf8079dc 100644 (file)
@@ -81,6 +81,17 @@ fd_resource(struct pipe_resource *ptex)
        return (struct fd_resource *)ptex;
 }
 
+struct fd_transfer {
+       struct pipe_transfer base;
+       void *staging;
+};
+
+static INLINE struct fd_transfer *
+fd_transfer(struct pipe_transfer *ptrans)
+{
+       return (struct fd_transfer *)ptrans;
+}
+
 static INLINE struct fd_resource_slice *
 fd_resource_slice(struct fd_resource *rsc, unsigned level)
 {