From: Jonathan Marek Date: Mon, 19 Nov 2018 21:02:15 +0000 (-0500) Subject: freedreno: use MSM_BO_SCANOUT with scanout buffers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e68cd912518b924e025947adf7c3accc69993bba;p=mesa.git freedreno: use MSM_BO_SCANOUT with scanout buffers Signed-off-by: Jonathan Marek --- diff --git a/src/freedreno/drm/freedreno_drmif.h b/src/freedreno/drm/freedreno_drmif.h index 6468eac4a07..e12ab970c8f 100644 --- a/src/freedreno/drm/freedreno_drmif.h +++ b/src/freedreno/drm/freedreno_drmif.h @@ -63,6 +63,7 @@ enum fd_param_id { #define DRM_FREEDRENO_GEM_CACHE_WBACKWA 0x00800000 #define DRM_FREEDRENO_GEM_CACHE_MASK 0x00f00000 #define DRM_FREEDRENO_GEM_GPUREADONLY 0x01000000 +#define DRM_FREEDRENO_GEM_SCANOUT 0x02000000 /* bo access flags: (keep aligned to MSM_PREP_x) */ #define DRM_FREEDRENO_PREP_READ 0x01 diff --git a/src/freedreno/drm/msm_bo.c b/src/freedreno/drm/msm_bo.c index da3315c9ab6..d93dfbeab2e 100644 --- a/src/freedreno/drm/msm_bo.c +++ b/src/freedreno/drm/msm_bo.c @@ -142,6 +142,9 @@ int msm_bo_new_handle(struct fd_device *dev, }; int ret; + if (flags & DRM_FREEDRENO_GEM_SCANOUT) + req.flags |= MSM_BO_SCANOUT; + ret = drmCommandWriteRead(dev->fd, DRM_MSM_GEM_NEW, &req, sizeof(req)); if (ret) diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c index 54d73858962..bd7be94c859 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.c +++ b/src/gallium/drivers/freedreno/freedreno_resource.c @@ -99,7 +99,9 @@ realloc_bo(struct fd_resource *rsc, uint32_t size) { struct fd_screen *screen = fd_screen(rsc->base.screen); uint32_t flags = DRM_FREEDRENO_GEM_CACHE_WCOMBINE | - DRM_FREEDRENO_GEM_TYPE_KMEM; /* TODO */ + DRM_FREEDRENO_GEM_TYPE_KMEM | + COND(rsc->base.bind & PIPE_BIND_SCANOUT, DRM_FREEDRENO_GEM_SCANOUT); + /* TODO other flags? */ /* if we start using things other than write-combine, * be sure to check for PIPE_RESOURCE_FLAG_MAP_COHERENT