diff --git a/src/freedreno/drm/freedreno_bo.c b/src/freedreno/drm/freedreno_bo.c index c668cdf8152..5ae55319096 100644 --- a/src/freedreno/drm/freedreno_bo.c +++ b/src/freedreno/drm/freedreno_bo.c @@ -461,6 +461,9 @@ fd_bo_map(struct fd_bo *bo) uint64_t offset; int ret; + if (bo->alloc_flags & FD_BO_NOMAP) + return NULL; + ret = bo->funcs->offset(bo, &offset); if (ret) { return NULL; diff --git a/src/freedreno/drm/freedreno_drmif.h b/src/freedreno/drm/freedreno_drmif.h index 85c1a77182d..73c7b5ed84d 100644 --- a/src/freedreno/drm/freedreno_drmif.h +++ b/src/freedreno/drm/freedreno_drmif.h @@ -100,8 +100,10 @@ struct fd_fence { /* bo flags: */ #define FD_BO_GPUREADONLY BITSET_BIT(1) #define FD_BO_SCANOUT BITSET_BIT(2) +/* Default caching is WRITECOMBINE: */ #define FD_BO_CACHED_COHERENT BITSET_BIT(3) -/* Default caching is WRITECOMBINE */ +/* Hint that the bo will not be mmap'd: */ +#define FD_BO_NOMAP BITSET_BIT(4) /* bo access flags: (keep aligned to MSM_PREP_x) */ #define FD_BO_PREP_READ BITSET_BIT(0) diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_resource.c b/src/gallium/drivers/freedreno/a5xx/fd5_resource.c index 0aaa3e02135..40cced4a8f1 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_resource.c +++ b/src/gallium/drivers/freedreno/a5xx/fd5_resource.c @@ -49,7 +49,7 @@ setup_lrz(struct fd_resource *rsc) rsc->lrz_height = lrz_height; rsc->lrz_width = lrz_pitch; rsc->lrz_pitch = lrz_pitch; - rsc->lrz = fd_bo_new(screen->dev, size, 0, "lrz"); + rsc->lrz = fd_bo_new(screen->dev, size, FD_BO_NOMAP, "lrz"); } uint32_t diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_gmem.c b/src/gallium/drivers/freedreno/a6xx/fd6_gmem.c index ced8d123c88..d3fabefffe7 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_gmem.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_gmem.c @@ -429,13 +429,13 @@ update_vsc_pipe(struct fd_batch *batch) if (!fd6_ctx->vsc_draw_strm) { fd6_ctx->vsc_draw_strm = fd_bo_new( ctx->screen->dev, VSC_DRAW_STRM_SIZE(fd6_ctx->vsc_draw_strm_pitch), - 0, "vsc_draw_strm"); + FD_BO_NOMAP, "vsc_draw_strm"); } if (!fd6_ctx->vsc_prim_strm) { fd6_ctx->vsc_prim_strm = fd_bo_new( ctx->screen->dev, VSC_PRIM_STRM_SIZE(fd6_ctx->vsc_prim_strm_pitch), - 0, "vsc_prim_strm"); + FD_BO_NOMAP, "vsc_prim_strm"); } OUT_REG( diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c index 5a9cf1ae6f8..190d3322e72 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c @@ -220,7 +220,7 @@ setup_lrz(struct fd_resource *rsc) rsc->lrz_height = lrz_height; rsc->lrz_width = lrz_pitch; rsc->lrz_pitch = lrz_pitch; - rsc->lrz = fd_bo_new(screen->dev, size, 0, "lrz"); + rsc->lrz = fd_bo_new(screen->dev, size, FD_BO_NOMAP, "lrz"); } static uint32_t diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c index 92e691b6db7..094e0643cc3 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.c +++ b/src/gallium/drivers/freedreno/freedreno_resource.c @@ -196,6 +196,7 @@ realloc_bo(struct fd_resource *rsc, uint32_t size) struct pipe_resource *prsc = &rsc->b.b; struct fd_screen *screen = fd_screen(rsc->b.b.screen); uint32_t flags = + COND(rsc->layout.tile_mode, FD_BO_NOMAP) | COND(prsc->usage & PIPE_USAGE_STAGING, FD_BO_CACHED_COHERENT) | COND(prsc->bind & PIPE_BIND_SCANOUT, FD_BO_SCANOUT); /* TODO other flags? */