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:
@@ -57,6 +57,8 @@ struct __DRImesaCoreExtensionRec {
|
||||
*/
|
||||
__DRIcreateNewScreen2Func createNewScreen;
|
||||
|
||||
__DRIcreateContextAttribsFunc createContext;
|
||||
|
||||
/* driver function for finishing initialization inside createNewScreen(). */
|
||||
const __DRIconfig **(*initScreen)(struct dri_screen *screen);
|
||||
};
|
||||
|
@@ -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)
|
||||
|
@@ -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,
|
||||
};
|
||||
|
||||
|
@@ -433,7 +433,7 @@ validate_context_version(struct dri_screen *screen,
|
||||
/*****************************************************************/
|
||||
/*@{*/
|
||||
|
||||
static __DRIcontext *
|
||||
__DRIcontext *
|
||||
driCreateContextAttribs(__DRIscreen *psp, int api,
|
||||
const __DRIconfig *config,
|
||||
__DRIcontext *shared,
|
||||
|
@@ -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);
|
||||
|
@@ -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,
|
||||
};
|
||||
|
||||
|
@@ -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,
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user