diff options
author | Adam Jackson <ajax@redhat.com> | 2020-11-10 16:06:47 -0500 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-12-01 18:40:18 +0000 |
commit | 63822802ef3de4d7a10b96e86e3de4a4f07b77c7 (patch) | |
tree | 8351a8e429ee398ec3ceb8e5903705ac8df19135 /src/glx/dri2_glx.c | |
parent | c4ed0e8f3fb63d753e50576d7402c52cb30b0283 (diff) |
glx: Handle create_context in terms of create_context_attribs
For the DRI backends we factor this out to a dri_common_create_context
method. Indirect gets the same transformation but doesn't use the common
method since it can't rely on DRI being built.
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7660>
Diffstat (limited to 'src/glx/dri2_glx.c')
-rw-r--r-- | src/glx/dri2_glx.c | 53 |
1 files changed, 1 insertions, 52 deletions
diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index efb6f1f1275..15252b5b269 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -177,57 +177,6 @@ dri2_unbind_context(struct glx_context *context, struct glx_context *new) } static struct glx_context * -dri2_create_context(struct glx_screen *base, - struct glx_config *config_base, - struct glx_context *shareList, int renderType) -{ - struct dri2_context *pcp, *pcp_shared; - struct dri2_screen *psc = (struct dri2_screen *) base; - __GLXDRIconfigPrivate *config = (__GLXDRIconfigPrivate *) config_base; - __DRIcontext *shared = NULL; - - /* Check the renderType value */ - if (!validate_renderType_against_config(config_base, renderType)) - return NULL; - - if (shareList) { - /* If the shareList context is not a DRI2 context, we cannot possibly - * create a DRI2 context that shares it. - */ - if (shareList->vtable->destroy != dri2_destroy_context) { - return NULL; - } - - pcp_shared = (struct dri2_context *) shareList; - shared = pcp_shared->driContext; - } - - pcp = calloc(1, sizeof *pcp); - if (pcp == NULL) - return NULL; - - if (!glx_context_init(&pcp->base, &psc->base, &config->base)) { - free(pcp); - return NULL; - } - - pcp->base.renderType = renderType; - - pcp->driContext = - (*psc->dri2->createNewContext) (psc->driScreen, - config->driConfig, shared, pcp); - - if (pcp->driContext == NULL) { - free(pcp); - return NULL; - } - - pcp->base.vtable = &dri2_context_vtable; - - return &pcp->base; -} - -static struct glx_context * dri2_create_context_attribs(struct glx_screen *base, struct glx_config *config_base, struct glx_context *shareList, @@ -1219,7 +1168,7 @@ dri2_get_driver_name(struct glx_screen *glx_screen) } static const struct glx_screen_vtable dri2_screen_vtable = { - .create_context = dri2_create_context, + .create_context = dri_common_create_context, .create_context_attribs = dri2_create_context_attribs, .query_renderer_integer = dri2_query_renderer_integer, .query_renderer_string = dri2_query_renderer_string, |