summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2019-06-07 09:23:16 -0700
committerRob Clark <[email protected]>2019-06-11 10:55:27 -0700
commit3c9a31eb50ce598c89bc93a8ebb33acb5f3ba53f (patch)
tree08b65f41b0ff8c9bb811d249780f7d263ac45cab
parent3b05a120a319121dc5a174fc3a61fd96cc51b7d2 (diff)
freedreno: add modifier param to fd_try_shadow_resource()
To uncompress UBWC, I want to re-use the shadow path, but we'll need a way to request that the new buffer is not compressed. Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Kristian H. Kristensen <[email protected]>
-rw-r--r--src/gallium/drivers/freedreno/freedreno_resource.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c
index e83143f239c..dc5d1463155 100644
--- a/src/gallium/drivers/freedreno/freedreno_resource.c
+++ b/src/gallium/drivers/freedreno/freedreno_resource.c
@@ -138,7 +138,7 @@ do_blit(struct fd_context *ctx, const struct pipe_blit_info *blit, bool fallback
static bool
fd_try_shadow_resource(struct fd_context *ctx, struct fd_resource *rsc,
- unsigned level, const struct pipe_box *box)
+ unsigned level, const struct pipe_box *box, uint64_t modifier)
{
struct pipe_context *pctx = &ctx->base;
struct pipe_resource *prsc = &rsc->base;
@@ -168,7 +168,8 @@ fd_try_shadow_resource(struct fd_context *ctx, struct fd_resource *rsc,
return false;
struct pipe_resource *pshadow =
- pctx->screen->resource_create(pctx->screen, prsc);
+ pctx->screen->resource_create_with_modifiers(pctx->screen,
+ prsc, &modifier, 1);
if (!pshadow)
return false;
@@ -582,7 +583,8 @@ fd_resource_transfer_map(struct pipe_context *pctx,
/* try shadowing only if it avoids a flush, otherwise staging would
* be better:
*/
- if (needs_flush && fd_try_shadow_resource(ctx, rsc, level, box)) {
+ if (needs_flush && fd_try_shadow_resource(ctx, rsc, level,
+ box, DRM_FORMAT_MOD_LINEAR)) {
needs_flush = busy = false;
rebind_resource(ctx, prsc);
ctx->stats.shadow_uploads++;