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;
|
__DRIcreateNewScreen2Func createNewScreen;
|
||||||
|
|
||||||
|
__DRIcreateContextAttribsFunc createContext;
|
||||||
|
|
||||||
/* driver function for finishing initialization inside createNewScreen(). */
|
/* driver function for finishing initialization inside createNewScreen(). */
|
||||||
const __DRIconfig **(*initScreen)(struct dri_screen *screen);
|
const __DRIconfig **(*initScreen)(struct dri_screen *screen);
|
||||||
};
|
};
|
||||||
|
@@ -1505,38 +1505,15 @@ dri2_create_context(_EGLDisplay *disp, _EGLConfig *conf,
|
|||||||
&num_attribs))
|
&num_attribs))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (dri2_dpy->image_driver) {
|
|
||||||
dri2_ctx->dri_context =
|
dri2_ctx->dri_context =
|
||||||
dri2_dpy->image_driver->createContextAttribs(dri2_dpy->dri_screen,
|
dri2_dpy->mesa->createContext(dri2_dpy->dri_screen,
|
||||||
api,
|
api,
|
||||||
dri_config,
|
dri_config,
|
||||||
shared,
|
shared,
|
||||||
num_attribs / 2,
|
num_attribs / 2,
|
||||||
ctx_attribs,
|
ctx_attribs,
|
||||||
& error,
|
&error,
|
||||||
dri2_ctx);
|
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_create_context_attribs_error(error);
|
dri2_create_context_attribs_error(error);
|
||||||
|
|
||||||
if (!dri2_ctx->dri_context)
|
if (!dri2_ctx->dri_context)
|
||||||
|
@@ -2401,6 +2401,7 @@ static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
|||||||
.base = { __DRI_MESA, 1 },
|
.base = { __DRI_MESA, 1 },
|
||||||
.version_string = MESA_INTERFACE_VERSION_STRING,
|
.version_string = MESA_INTERFACE_VERSION_STRING,
|
||||||
.createNewScreen = driCreateNewScreen2,
|
.createNewScreen = driCreateNewScreen2,
|
||||||
|
.createContext = driCreateContextAttribs,
|
||||||
.initScreen = dri2_init_screen,
|
.initScreen = dri2_init_screen,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2418,6 +2419,7 @@ static const struct __DRImesaCoreExtensionRec swkmsMesaCoreExtension = {
|
|||||||
.base = { __DRI_MESA, 1 },
|
.base = { __DRI_MESA, 1 },
|
||||||
.version_string = MESA_INTERFACE_VERSION_STRING,
|
.version_string = MESA_INTERFACE_VERSION_STRING,
|
||||||
.createNewScreen = driCreateNewScreen2,
|
.createNewScreen = driCreateNewScreen2,
|
||||||
|
.createContext = driCreateContextAttribs,
|
||||||
.initScreen = dri_swrast_kms_init_screen,
|
.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,
|
driCreateContextAttribs(__DRIscreen *psp, int api,
|
||||||
const __DRIconfig *config,
|
const __DRIconfig *config,
|
||||||
__DRIcontext *shared,
|
__DRIcontext *shared,
|
||||||
|
@@ -108,6 +108,14 @@ driCreateNewScreen2(int scrn, int fd,
|
|||||||
const __DRIextension **loader_extensions,
|
const __DRIextension **loader_extensions,
|
||||||
const __DRIextension **driver_extensions,
|
const __DRIextension **driver_extensions,
|
||||||
const __DRIconfig ***driver_configs, void *data);
|
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
|
extern uint32_t
|
||||||
driGLFormatToImageFormat(mesa_format format);
|
driGLFormatToImageFormat(mesa_format format);
|
||||||
|
@@ -627,6 +627,7 @@ static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
|||||||
.base = { __DRI_MESA, 1 },
|
.base = { __DRI_MESA, 1 },
|
||||||
.version_string = MESA_INTERFACE_VERSION_STRING,
|
.version_string = MESA_INTERFACE_VERSION_STRING,
|
||||||
.createNewScreen = driCreateNewScreen2,
|
.createNewScreen = driCreateNewScreen2,
|
||||||
|
.createContext = driCreateContextAttribs,
|
||||||
.initScreen = drisw_init_screen,
|
.initScreen = drisw_init_screen,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -955,6 +955,7 @@ static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
|||||||
.base = { __DRI_MESA, 1 },
|
.base = { __DRI_MESA, 1 },
|
||||||
.version_string = MESA_INTERFACE_VERSION_STRING,
|
.version_string = MESA_INTERFACE_VERSION_STRING,
|
||||||
.createNewScreen = driCreateNewScreen2,
|
.createNewScreen = driCreateNewScreen2,
|
||||||
|
.createContext = driCreateContextAttribs,
|
||||||
.initScreen = kopper_init_screen,
|
.initScreen = kopper_init_screen,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user