diff options
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_context.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_resource.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_resource.h | 11 |
3 files changed, 15 insertions, 2 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_context.c b/src/gallium/drivers/freedreno/freedreno_context.c index 5fca57c5a3a..5d92da42e56 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.c +++ b/src/gallium/drivers/freedreno/freedreno_context.c @@ -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); diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c index 985b663d618..e8da68e116b 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.c +++ b/src/gallium/drivers/freedreno/freedreno_resource.c @@ -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; diff --git a/src/gallium/drivers/freedreno/freedreno_resource.h b/src/gallium/drivers/freedreno/freedreno_resource.h index a2a540ce506..f80acb1e188 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.h +++ b/src/gallium/drivers/freedreno/freedreno_resource.h @@ -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) { |