dri: Add createContext hook to __DRI_MESA.

Again, reduces switching on driver type in the loader.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Acked-by: Eric Engestrom <eric@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20069>
This commit is contained in:
Emma Anholt
2022-11-29 12:04:21 -08:00
committed by Marge Bot
parent cdc7475f72
commit 133e2f8ac3
7 changed files with 24 additions and 33 deletions

View File

@@ -57,6 +57,8 @@ struct __DRImesaCoreExtensionRec {
*/
__DRIcreateNewScreen2Func createNewScreen;
__DRIcreateContextAttribsFunc createContext;
/* driver function for finishing initialization inside createNewScreen(). */
const __DRIconfig **(*initScreen)(struct dri_screen *screen);
};

View File

@@ -1505,38 +1505,15 @@ dri2_create_context(_EGLDisplay *disp, _EGLConfig *conf,
&num_attribs))
goto cleanup;
if (dri2_dpy->image_driver) {
dri2_ctx->dri_context =
dri2_dpy->image_driver->createContextAttribs(dri2_dpy->dri_screen,
api,
dri_config,
shared,
num_attribs / 2,
ctx_attribs,
& error,
dri2_ctx);
} else if (dri2_dpy->dri2) {
dri2_ctx->dri_context =
dri2_dpy->dri2->createContextAttribs(dri2_dpy->dri_screen,
api,
dri_config,
shared,
num_attribs / 2,
ctx_attribs,
& error,
dri2_ctx);
} else {
assert(dri2_dpy->swrast);
dri2_ctx->dri_context =
dri2_dpy->swrast->createContextAttribs(dri2_dpy->dri_screen,
api,
dri_config,
shared,
num_attribs / 2,
ctx_attribs,
& error,
dri2_ctx);
}
dri2_ctx->dri_context =
dri2_dpy->mesa->createContext(dri2_dpy->dri_screen,
api,
dri_config,
shared,
num_attribs / 2,
ctx_attribs,
&error,
dri2_ctx);
dri2_create_context_attribs_error(error);
if (!dri2_ctx->dri_context)

View File

@@ -2401,6 +2401,7 @@ static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
.base = { __DRI_MESA, 1 },
.version_string = MESA_INTERFACE_VERSION_STRING,
.createNewScreen = driCreateNewScreen2,
.createContext = driCreateContextAttribs,
.initScreen = dri2_init_screen,
};
@@ -2418,6 +2419,7 @@ static const struct __DRImesaCoreExtensionRec swkmsMesaCoreExtension = {
.base = { __DRI_MESA, 1 },
.version_string = MESA_INTERFACE_VERSION_STRING,
.createNewScreen = driCreateNewScreen2,
.createContext = driCreateContextAttribs,
.initScreen = dri_swrast_kms_init_screen,
};

View File

@@ -433,7 +433,7 @@ validate_context_version(struct dri_screen *screen,
/*****************************************************************/
/*@{*/
static __DRIcontext *
__DRIcontext *
driCreateContextAttribs(__DRIscreen *psp, int api,
const __DRIconfig *config,
__DRIcontext *shared,

View File

@@ -108,6 +108,14 @@ driCreateNewScreen2(int scrn, int fd,
const __DRIextension **loader_extensions,
const __DRIextension **driver_extensions,
const __DRIconfig ***driver_configs, void *data);
__DRIcontext *
driCreateContextAttribs(__DRIscreen *psp, int api,
const __DRIconfig *config,
__DRIcontext *shared,
unsigned num_attribs,
const uint32_t *attribs,
unsigned *error,
void *data);
extern uint32_t
driGLFormatToImageFormat(mesa_format format);

View File

@@ -627,6 +627,7 @@ static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
.base = { __DRI_MESA, 1 },
.version_string = MESA_INTERFACE_VERSION_STRING,
.createNewScreen = driCreateNewScreen2,
.createContext = driCreateContextAttribs,
.initScreen = drisw_init_screen,
};

View File

@@ -955,6 +955,7 @@ static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
.base = { __DRI_MESA, 1 },
.version_string = MESA_INTERFACE_VERSION_STRING,
.createNewScreen = driCreateNewScreen2,
.createContext = driCreateContextAttribs,
.initScreen = kopper_init_screen,
};