[Mesa-dev] [PATCH 7/9] i965: Use snoop bo for accessing query results on !llc

Ian Romanick idr at freedesktop.org
Thu Jun 15 00:16:28 UTC 2017


On 06/09/2017 06:01 AM, Chris Wilson wrote:
> Ony non-llc architectures where we are primarily reading back the

  On

> results of the GPU queries, then we can improve performance by using a
> cacheable mapping of the results. Unfortunately, enabling snooping makes
> the writes from the GPU slower, which may adversely affect pipelined
> query operations (where the results are used directly by the GPU and not
> CPU).
> 
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Kenneth Graunke <kenneth at whitecape.org>
> Cc: Matt Turner <mattst88 at gmail.com>
> ---
>  src/mesa/drivers/dri/i965/brw_bufmgr.c    | 21 +++++++++++++++++++++
>  src/mesa/drivers/dri/i965/brw_bufmgr.h    |  2 ++
>  src/mesa/drivers/dri/i965/gen6_queryobj.c |  2 ++
>  3 files changed, 25 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c
> index 9028b538c6..824bc55fb2 100644
> --- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
> +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
> @@ -626,6 +626,27 @@ brw_bo_unreference(struct brw_bo *bo)
>     }
>  }
>  
> +static bool __brw_bo_set_caching(struct brw_bo *bo, int caching)
> +{
> +   struct drm_i915_gem_caching arg = {
> +      .handle = bo->gem_handle,
> +      .caching = caching
> +   };
> +   return drmIoctl(bo->bufmgr->fd, DRM_IOCTL_I915_GEM_SET_CACHING, &arg) == 0;
> +}
> +
> +void brw_bo_set_cache_coherent(struct brw_bo *bo)
> +{
> +   if (bo->cache_coherent)
> +      return;
> +
> +   if (!__brw_bo_set_caching(bo, I915_CACHING_CACHED))
> +      return;
> +
> +   bo->reusable = false;
> +   bo->cache_coherent = true;
> +}
> +
>  static void
>  set_domain(struct brw_context *brw, const char *action,
>             struct brw_bo *bo, uint32_t read_domains, uint32_t write_domain)
> diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.h b/src/mesa/drivers/dri/i965/brw_bufmgr.h
> index 214b75bf1a..188d6c5ee0 100644
> --- a/src/mesa/drivers/dri/i965/brw_bufmgr.h
> +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.h
> @@ -188,6 +188,8 @@ void brw_bo_unreference(struct brw_bo *bo);
>  #define MAP_INTERNAL_MASK       (0xff << 24)
>  #define MAP_RAW                 (0x01 << 24)
>  
> +void brw_bo_set_cache_coherent(struct brw_bo *bo);
> +
>  /**
>   * Maps the buffer into userspace.
>   *
> diff --git a/src/mesa/drivers/dri/i965/gen6_queryobj.c b/src/mesa/drivers/dri/i965/gen6_queryobj.c
> index 18af608166..5c95a4bae9 100644
> --- a/src/mesa/drivers/dri/i965/gen6_queryobj.c
> +++ b/src/mesa/drivers/dri/i965/gen6_queryobj.c
> @@ -316,6 +316,8 @@ static int gen6_alloc_query(struct brw_context *brw,
>        brw_bo_unreference(query->bo);
>  
>     query->bo = brw_bo_alloc(brw->bufmgr, "query results", 4096, 4096);
> +   brw_bo_set_cache_coherent(query->bo);
> +
>     query->results = brw_bo_map(brw, query->bo,
>                                 MAP_READ | MAP_COHERENT | MAP_ASYNC);
>  
> 



More information about the mesa-dev mailing list