[Mesa-dev] [PATCH 2/2] RFC i965: Share the GTT between non-robust contexts

Chris Wilson chris at chris-wilson.co.uk
Fri Dec 15 16:27:03 UTC 2017


Quoting Jason Ekstrand (2017-12-15 16:21:42)
> On Fri, Dec 15, 2017 at 5:42 AM, Chris Wilson <chris at chris-wilson.co.uk> wrote:
> 
>     Every client (everyone instance that opens /dev/dri/card0 or the render
>     nodes), receives a unique per-process GTT (where supported by the
>     hardware, unfortunately that means only Broadwell and later). Every
>     context created by each client, in turns receives its own unique ppGTT.
>     This is overkill in terms of allocations and tracking, both in the
>     kernel and in the hardware, as we could be sharing the per-client GTT
>     amongst all of its contexts. The downside is that context segregation is
>     reduced, a stray write from one context may affect another, and so we
>     must honour any client requests that require robust segregation (e.g.
>     ARB_robustness).
> 
>     Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
>     ---
>      src/mesa/drivers/dri/i965/brw_bufmgr.c  | 23 +++++++++++++++++------
>      src/mesa/drivers/dri/i965/brw_bufmgr.h  |  2 +-
>      src/mesa/drivers/dri/i965/brw_context.c |  2 +-
>      3 files changed, 19 insertions(+), 8 deletions(-)
> 
>     diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/
>     i965/brw_bufmgr.c
>     index 52b5bf97a1..d8a9635f5d 100644
>     --- a/src/mesa/drivers/dri/i965/brw_bufmgr.c
>     +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c
>     @@ -1297,13 +1297,24 @@ init_cache_buckets(struct brw_bufmgr *bufmgr)
>      }
> 
>      uint32_t
>     -brw_create_hw_context(struct brw_bufmgr *bufmgr)
>     +brw_create_hw_context(struct brw_bufmgr *bufmgr, unsigned int flags)
>      {
>     -   struct drm_i915_gem_context_create create = { };
>     -   int ret = drmIoctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &
>     create);
>     -   if (ret != 0) {
>     -      DBG("DRM_IOCTL_I915_GEM_CONTEXT_CREATE failed: %s\n", strerror
>     (errno));
>     -      return 0;
>     +   struct local_i915_gem_context_create_v2 {
>     +      uint32_t ctx_id; /* out */
>     +      uint32_t flags;
>     +#define I915_GEM_CONTEXT_SHARE_GTT 0x1
>     +      uint32_t share_ctx;
> 
> 
> So, we've left share_ctx as 0.  What does that mean?  Does that mean that we
> share with some context that was implicitly created by opening /dev/dri/card0? 
> Does it mean we share with the default context and therefore other processes? 

The default context, 0, is per fd.
-Chris


More information about the mesa-dev mailing list