diff options
author | Marek Olšák <marek.olsak@amd.com> | 2017-11-19 21:29:46 +0100 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2017-11-25 17:16:56 +0100 |
commit | bd57f45168188caabce3aebed287a9d32bc00537 (patch) | |
tree | 935da2ae073a1890e39dcc554e7e096a33c1562b /src/gallium/state_trackers | |
parent | 11e25eb7f4538ab7f1ca5d06e8e1ae09be10ad45 (diff) |
gallium/hud: add HUD sharing within a context share group
This is needed for profiling multi-context applications like Chrome.
One context can record queries and another context can draw the HUD.
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r-- | src/gallium/state_trackers/dri/dri_context.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/gallium/state_trackers/dri/dri_context.c b/src/gallium/state_trackers/dri/dri_context.c index d4ac8adee1..6e28553146 100644 --- a/src/gallium/state_trackers/dri/dri_context.c +++ b/src/gallium/state_trackers/dri/dri_context.c @@ -116,8 +116,10 @@ dri_create_context(gl_api api, const struct gl_config * visual, && (ctx_config->release_behavior == __DRI_CTX_RELEASE_BEHAVIOR_NONE)) attribs.flags |= ST_CONTEXT_FLAG_RELEASE_NONE; + struct dri_context *share_ctx = NULL; if (sharedContextPrivate) { - st_share = ((struct dri_context *)sharedContextPrivate)->st; + share_ctx = (struct dri_context *)sharedContextPrivate; + st_share = share_ctx->st; } ctx = CALLOC_STRUCT(dri_context); @@ -168,7 +170,8 @@ dri_create_context(gl_api api, const struct gl_config * visual, if (ctx->st->cso_context) { ctx->pp = pp_init(ctx->st->pipe, screen->pp_enabled, ctx->st->cso_context); - ctx->hud = hud_create(ctx->st->cso_context, NULL); + ctx->hud = hud_create(ctx->st->cso_context, + share_ctx ? share_ctx->hud : NULL); } /* Do this last. */ @@ -222,6 +225,7 @@ dri_destroy_context(__DRIcontext * cPriv) free(ctx); } +/* This is called inside MakeCurrent to unbind the context. */ GLboolean dri_unbind_context(__DRIcontext * cPriv) { @@ -236,6 +240,10 @@ dri_unbind_context(__DRIcontext * cPriv) if (st->thread_finish) st->thread_finish(st); + /* Record HUD queries for the duration the context was "current". */ + if (ctx->hud) + hud_record_only(ctx->hud, st->pipe); + stapi->make_current(stapi, NULL, NULL, NULL); } } |