From 14c44aacffbb03e62ab0da10e758eca3377109ad Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 12 Mar 2024 10:00:54 -0400 Subject: [PATCH] dri: plumb a 'implicit' param through createNewScreen interfaces Acked-by: Dave Airlie Part-of: --- include/GL/internal/dri_interface.h | 33 ++++++++++++++++-- include/GL/internal/mesa_interface.h | 5 ++- src/egl/drivers/dri2/egl_dri2.c | 20 +++++------ src/gallium/frontends/dri/dri2.c | 6 ++-- src/gallium/frontends/dri/dri_util.c | 52 ++++++++++++++++++++-------- src/gallium/frontends/dri/dri_util.h | 5 +++ src/gallium/frontends/dri/drisw.c | 3 +- src/gallium/frontends/dri/kopper.c | 3 +- src/gbm/backends/dri/gbm_dri.c | 16 ++++----- src/glx/dri2_glx.c | 8 ++--- src/glx/dri3_glx.c | 12 +++---- src/glx/drisw_glx.c | 14 ++++---- 12 files changed, 120 insertions(+), 57 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 11c8d9db32f..f171d5084a8 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -915,7 +915,7 @@ struct __DRIframebufferRec { * extension. Version 1 is required by the X server, and version 3 is used. */ #define __DRI_SWRAST "DRI_SWRast" -#define __DRI_SWRAST_VERSION 5 +#define __DRI_SWRAST_VERSION 6 struct __DRIswrastExtensionRec { __DRIextension base; @@ -967,6 +967,18 @@ struct __DRIswrastExtensionRec { */ int (*queryBufferAge)(__DRIdrawable *drawable); + /** + * createNewScreen() with the driver extensions passed in and implicit load flag. + * + * \since version 6 + */ + __DRIscreen *(*createNewScreen3)(int screen, + const __DRIextension **loader_extensions, + const __DRIextension **driver_extensions, + const __DRIconfig ***driver_configs, + bool implicit, + void *loaderPrivate); + }; /** Common DRI function definitions, shared among DRI2 and Image extensions @@ -978,6 +990,13 @@ typedef __DRIscreen * const __DRIextension **driver_extensions, const __DRIconfig ***driver_configs, void *loaderPrivate); +typedef __DRIscreen * +(*__DRIcreateNewScreen3Func)(int screen, int fd, + const __DRIextension **extensions, + const __DRIextension **driver_extensions, + const __DRIconfig ***driver_configs, + bool implicit, + void *loaderPrivate); typedef __DRIdrawable * (*__DRIcreateNewDrawableFunc)(__DRIscreen *screen, @@ -1113,7 +1132,7 @@ struct __DRIdri2LoaderExtensionRec { * constructors for DRI2. The X server uses up to version 4. */ #define __DRI_DRI2 "DRI_DRI2" -#define __DRI_DRI2_VERSION 4 +#define __DRI_DRI2_VERSION 5 #define __DRI_API_OPENGL 0 /**< OpenGL compatibility profile */ #define __DRI_API_GLES 1 /**< OpenGL ES 1.x */ @@ -1232,6 +1251,13 @@ struct __DRIdri2ExtensionRec { * \since version 4 */ __DRIcreateNewScreen2Func createNewScreen2; + + /** + * createNewScreen with the driver's extension list passed in and implicit load flag. + * + * \since version 5 + */ + __DRIcreateNewScreen3Func createNewScreen3; }; @@ -2045,7 +2071,7 @@ struct __DRIimageLoaderExtensionRec { */ #define __DRI_IMAGE_DRIVER "DRI_IMAGE_DRIVER" -#define __DRI_IMAGE_DRIVER_VERSION 1 +#define __DRI_IMAGE_DRIVER_VERSION 2 struct __DRIimageDriverExtensionRec { __DRIextension base; @@ -2055,6 +2081,7 @@ struct __DRIimageDriverExtensionRec { __DRIcreateNewDrawableFunc createNewDrawable; __DRIcreateContextAttribsFunc createContextAttribs; __DRIgetAPIMaskFunc getAPIMask; + __DRIcreateNewScreen3Func createNewScreen3; }; /** diff --git a/include/GL/internal/mesa_interface.h b/include/GL/internal/mesa_interface.h index a56509439e2..4e544f1a921 100644 --- a/include/GL/internal/mesa_interface.h +++ b/include/GL/internal/mesa_interface.h @@ -33,7 +33,7 @@ typedef struct __DRImesaCoreExtensionRec __DRImesaCoreExtension; #define __DRI_MESA "DRI_Mesa" -#define __DRI_MESA_VERSION 1 +#define __DRI_MESA_VERSION 2 struct dri_screen; @@ -63,6 +63,9 @@ struct __DRImesaCoreExtensionRec { const __DRIconfig **(*initScreen)(struct dri_screen *screen); int (*queryCompatibleRenderOnlyDeviceFd)(int kms_only_fd); + + /* version 2 */ + __DRIcreateNewScreen3Func createNewScreen3; }; #endif /* MESA_INTERFACE_H */ diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 351982b86c9..4aaae9a7de5 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -601,8 +601,8 @@ const __DRIimageLookupExtension image_lookup_extension = { static const struct dri_extension_match dri3_driver_extensions[] = { {__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false}, - {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false}, - {__DRI_IMAGE_DRIVER, 1, offsetof(struct dri2_egl_display, image_driver), + {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false}, + {__DRI_IMAGE_DRIVER, 2, offsetof(struct dri2_egl_display, image_driver), false}, {__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions), true}, @@ -610,8 +610,8 @@ static const struct dri_extension_match dri3_driver_extensions[] = { static const struct dri_extension_match dri2_driver_extensions[] = { {__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false}, - {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false}, - {__DRI_DRI2, 4, offsetof(struct dri2_egl_display, dri2), false}, + {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false}, + {__DRI_DRI2, 5, offsetof(struct dri2_egl_display, dri2), false}, {__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions), true}, }; @@ -624,8 +624,8 @@ static const struct dri_extension_match dri2_core_extensions[] = { static const struct dri_extension_match swrast_driver_extensions[] = { {__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false}, - {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false}, - {__DRI_SWRAST, 4, offsetof(struct dri2_egl_display, swrast), false}, + {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false}, + {__DRI_SWRAST, 5, offsetof(struct dri2_egl_display, swrast), false}, {__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions), true}, }; @@ -915,18 +915,18 @@ dri2_create_screen(_EGLDisplay *disp) * will not crash. */ if (strcmp(dri2_dpy->driver_name, driver_name_display_gpu) == 0) { - dri2_dpy->dri_screen_display_gpu = dri2_dpy->mesa->createNewScreen( + dri2_dpy->dri_screen_display_gpu = dri2_dpy->mesa->createNewScreen3( 0, dri2_dpy->fd_display_gpu, dri2_dpy->loader_extensions, - dri2_dpy->driver_extensions, &dri2_dpy->driver_configs, disp); + dri2_dpy->driver_extensions, &dri2_dpy->driver_configs, false, disp); } free(driver_name_display_gpu); } } int screen_fd = dri2_dpy->swrast ? -1 : dri2_dpy->fd_render_gpu; - dri2_dpy->dri_screen_render_gpu = dri2_dpy->mesa->createNewScreen( + dri2_dpy->dri_screen_render_gpu = dri2_dpy->mesa->createNewScreen3( 0, screen_fd, dri2_dpy->loader_extensions, dri2_dpy->driver_extensions, - &dri2_dpy->driver_configs, disp); + &dri2_dpy->driver_configs, false, disp); if (dri2_dpy->dri_screen_render_gpu == NULL) { _eglLog(_EGL_WARNING, "egl: failed to create dri2 screen"); diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c index b5137183b0c..fb24015dd12 100644 --- a/src/gallium/frontends/dri/dri2.c +++ b/src/gallium/frontends/dri/dri2.c @@ -2448,12 +2448,13 @@ dri_query_compatible_render_only_device_fd(int kms_only_fd) } static const struct __DRImesaCoreExtensionRec mesaCoreExtension = { - .base = { __DRI_MESA, 1 }, + .base = { __DRI_MESA, 2 }, .version_string = MESA_INTERFACE_VERSION_STRING, .createNewScreen = driCreateNewScreen2, .createContext = driCreateContextAttribs, .initScreen = dri2_init_screen, .queryCompatibleRenderOnlyDeviceFd = dri_query_compatible_render_only_device_fd, + .createNewScreen3 = driCreateNewScreen3, }; /* This is the table of extensions that the loader will dlsym() for. */ @@ -2467,11 +2468,12 @@ const __DRIextension *galliumdrm_driver_extensions[] = { }; static const struct __DRImesaCoreExtensionRec swkmsMesaCoreExtension = { - .base = { __DRI_MESA, 1 }, + .base = { __DRI_MESA, 2 }, .version_string = MESA_INTERFACE_VERSION_STRING, .createNewScreen = driCreateNewScreen2, .createContext = driCreateContextAttribs, .initScreen = dri_swrast_kms_init_screen, + .createNewScreen3 = driCreateNewScreen3, }; const __DRIextension *dri_swrast_kms_driver_extensions[] = { diff --git a/src/gallium/frontends/dri/dri_util.c b/src/gallium/frontends/dri/dri_util.c index 6b808665b28..c1ce20f53b9 100644 --- a/src/gallium/frontends/dri/dri_util.c +++ b/src/gallium/frontends/dri/dri_util.c @@ -97,10 +97,10 @@ setupLoaderExtensions(struct dri_screen *screen, * Display. */ __DRIscreen * -driCreateNewScreen2(int scrn, int fd, +driCreateNewScreen3(int scrn, int fd, const __DRIextension **loader_extensions, const __DRIextension **driver_extensions, - const __DRIconfig ***driver_configs, void *data) + const __DRIconfig ***driver_configs, bool implicit, void *data) { static const __DRIextension *emptyExtensionList[] = { NULL }; struct dri_screen *screen; @@ -173,14 +173,25 @@ driCreateNewScreen2(int scrn, int fd, return opaque_dri_screen(screen); } +__DRIscreen * +driCreateNewScreen2(int scrn, int fd, + const __DRIextension **loader_extensions, + const __DRIextension **driver_extensions, + const __DRIconfig ***driver_configs, void *data) +{ + return driCreateNewScreen3(scrn, fd, loader_extensions, + driver_extensions, + driver_configs, false, data); +} + static __DRIscreen * dri2CreateNewScreen(int scrn, int fd, const __DRIextension **extensions, const __DRIconfig ***driver_configs, void *data) { - return driCreateNewScreen2(scrn, fd, extensions, + return driCreateNewScreen3(scrn, fd, extensions, galliumdrm_driver_extensions, - driver_configs, data); + driver_configs, false, data); } static __DRIscreen * @@ -188,9 +199,9 @@ swkmsCreateNewScreen(int scrn, int fd, const __DRIextension **extensions, const __DRIconfig ***driver_configs, void *data) { - return driCreateNewScreen2(scrn, fd, extensions, + return driCreateNewScreen3(scrn, fd, extensions, dri_swrast_kms_driver_extensions, - driver_configs, data); + driver_configs, false, data); } /** swrast driver createNewScreen entrypoint. */ @@ -198,9 +209,9 @@ static __DRIscreen * driSWRastCreateNewScreen(int scrn, const __DRIextension **extensions, const __DRIconfig ***driver_configs, void *data) { - return driCreateNewScreen2(scrn, -1, extensions, + return driCreateNewScreen3(scrn, -1, extensions, galliumsw_driver_extensions, - driver_configs, data); + driver_configs, false, data); } static __DRIscreen * @@ -208,8 +219,17 @@ driSWRastCreateNewScreen2(int scrn, const __DRIextension **extensions, const __DRIextension **driver_extensions, const __DRIconfig ***driver_configs, void *data) { - return driCreateNewScreen2(scrn, -1, extensions, driver_extensions, - driver_configs, data); + return driCreateNewScreen3(scrn, -1, extensions, driver_extensions, + driver_configs, false, data); +} + +static __DRIscreen * +driSWRastCreateNewScreen3(int scrn, const __DRIextension **extensions, + const __DRIextension **driver_extensions, + const __DRIconfig ***driver_configs, bool implicit, void *data) +{ + return driCreateNewScreen3(scrn, -1, extensions, driver_extensions, + driver_configs, implicit, data); } /** @@ -898,7 +918,7 @@ const __DRIcoreExtension driCoreExtension = { /** DRI2 interface */ const __DRIdri2Extension driDRI2Extension = { - .base = { __DRI_DRI2, 4 }, + .base = { __DRI_DRI2, 5 }, .createNewScreen = dri2CreateNewScreen, .createNewDrawable = driCreateNewDrawable, @@ -909,10 +929,11 @@ const __DRIdri2Extension driDRI2Extension = { .releaseBuffer = dri2ReleaseBuffer, .createContextAttribs = driCreateContextAttribs, .createNewScreen2 = driCreateNewScreen2, + .createNewScreen3 = driCreateNewScreen3, }; const __DRIdri2Extension swkmsDRI2Extension = { - .base = { __DRI_DRI2, 4 }, + .base = { __DRI_DRI2, 5 }, .createNewScreen = swkmsCreateNewScreen, .createNewDrawable = driCreateNewDrawable, @@ -923,12 +944,13 @@ const __DRIdri2Extension swkmsDRI2Extension = { .releaseBuffer = dri2ReleaseBuffer, .createContextAttribs = driCreateContextAttribs, .createNewScreen2 = driCreateNewScreen2, + .createNewScreen3 = driCreateNewScreen3, }; #endif const __DRIswrastExtension driSWRastExtension = { - .base = { __DRI_SWRAST, 4 }, + .base = { __DRI_SWRAST, 5 }, .createNewScreen = driSWRastCreateNewScreen, .createNewDrawable = driCreateNewDrawable, @@ -936,6 +958,7 @@ const __DRIswrastExtension driSWRastExtension = { .createContextAttribs = driCreateContextAttribs, .createNewScreen2 = driSWRastCreateNewScreen2, .queryBufferAge = driSWRastQueryBufferAge, + .createNewScreen3 = driSWRastCreateNewScreen3, }; const __DRI2configQueryExtension dri2ConfigQueryExtension = { @@ -1138,10 +1161,11 @@ driImageFormatToGLFormat(uint32_t image_format) /** Image driver interface */ const __DRIimageDriverExtension driImageDriverExtension = { - .base = { __DRI_IMAGE_DRIVER, 1 }, + .base = { __DRI_IMAGE_DRIVER, 2 }, .createNewScreen2 = driCreateNewScreen2, .createNewDrawable = driCreateNewDrawable, .getAPIMask = driGetAPIMask, .createContextAttribs = driCreateContextAttribs, + .createNewScreen3 = driCreateNewScreen3, }; diff --git a/src/gallium/frontends/dri/dri_util.h b/src/gallium/frontends/dri/dri_util.h index a358487f006..13ff279a202 100644 --- a/src/gallium/frontends/dri/dri_util.h +++ b/src/gallium/frontends/dri/dri_util.h @@ -103,6 +103,11 @@ struct __DriverContextConfig { #define __DRIVER_CONTEXT_ATTRIB_NO_ERROR (1 << 3) #define __DRIVER_CONTEXT_ATTRIB_PROTECTED (1 << 4) +__DRIscreen * +driCreateNewScreen3(int scrn, int fd, + const __DRIextension **loader_extensions, + const __DRIextension **driver_extensions, + const __DRIconfig ***driver_configs, bool implicit, void *data); __DRIscreen * driCreateNewScreen2(int scrn, int fd, const __DRIextension **loader_extensions, diff --git a/src/gallium/frontends/dri/drisw.c b/src/gallium/frontends/dri/drisw.c index 509231a57bd..f92c3cbe091 100644 --- a/src/gallium/frontends/dri/drisw.c +++ b/src/gallium/frontends/dri/drisw.c @@ -656,11 +656,12 @@ const __DRIcopySubBufferExtension driSWCopySubBufferExtension = { }; static const struct __DRImesaCoreExtensionRec mesaCoreExtension = { - .base = { __DRI_MESA, 1 }, + .base = { __DRI_MESA, 2 }, .version_string = MESA_INTERFACE_VERSION_STRING, .createNewScreen = driCreateNewScreen2, .createContext = driCreateContextAttribs, .initScreen = drisw_init_screen, + .createNewScreen3 = driCreateNewScreen3, }; /* This is the table of extensions that the loader will dlsym() for. */ diff --git a/src/gallium/frontends/dri/kopper.c b/src/gallium/frontends/dri/kopper.c index a3cf88078b0..45f6d2b093d 100644 --- a/src/gallium/frontends/dri/kopper.c +++ b/src/gallium/frontends/dri/kopper.c @@ -940,11 +940,12 @@ const __DRIkopperExtension driKopperExtension = { }; static const struct __DRImesaCoreExtensionRec mesaCoreExtension = { - .base = { __DRI_MESA, 1 }, + .base = { __DRI_MESA, 2 }, .version_string = MESA_INTERFACE_VERSION_STRING, .createNewScreen = driCreateNewScreen2, .createContext = driCreateContextAttribs, .initScreen = kopper_init_screen, + .createNewScreen3 = driCreateNewScreen3, }; const __DRIextension *galliumvk_driver_extensions[] = { diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index 9cccb34e729..d8a0574d16a 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -250,14 +250,14 @@ static struct dri_extension_match dri_core_extensions[] = { static struct dri_extension_match gbm_dri_device_extensions[] = { { __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false }, - { __DRI_MESA, 1, offsetof(struct gbm_dri_device, mesa), false }, - { __DRI_IMAGE_DRIVER, 1, offsetof(struct gbm_dri_device, image_driver), false }, + { __DRI_MESA, 2, offsetof(struct gbm_dri_device, mesa), false }, + { __DRI_IMAGE_DRIVER, 2, offsetof(struct gbm_dri_device, image_driver), false }, }; static struct dri_extension_match gbm_swrast_device_extensions[] = { { __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false }, - { __DRI_MESA, 1, offsetof(struct gbm_dri_device, mesa), false }, - { __DRI_SWRAST, 4, offsetof(struct gbm_dri_device, swrast), false }, + { __DRI_MESA, 2, offsetof(struct gbm_dri_device, mesa), false }, + { __DRI_SWRAST, 5, offsetof(struct gbm_dri_device, swrast), false }, { __DRI_KOPPER, 1, offsetof(struct gbm_dri_device, kopper), true }, }; @@ -315,10 +315,10 @@ dri_screen_create_for_driver(struct gbm_dri_device *dri, char *driver_name) dri->driver_extensions = extensions; dri->loader_extensions = gbm_dri_screen_extensions; - dri->screen = dri->mesa->createNewScreen(0, swrast ? -1 : dri->base.v0.fd, - dri->loader_extensions, - dri->driver_extensions, - &dri->driver_configs, dri); + dri->screen = dri->mesa->createNewScreen3(0, swrast ? -1 : dri->base.v0.fd, + dri->loader_extensions, + dri->driver_extensions, + &dri->driver_configs, false, dri); if (dri->screen == NULL) goto close_driver; diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index df9f8a27b28..e97f4769258 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -1064,17 +1064,17 @@ dri2CreateScreen(int screen, struct glx_display * priv, bool implicit) static const struct dri_extension_match exts[] = { { __DRI_CORE, 1, offsetof(struct dri2_screen, core), false }, - { __DRI_DRI2, 4, offsetof(struct dri2_screen, dri2), false }, - { __DRI_MESA, 1, offsetof(struct dri2_screen, mesa), false }, + { __DRI_DRI2, 5, offsetof(struct dri2_screen, dri2), false }, + { __DRI_MESA, 2, offsetof(struct dri2_screen, mesa), false }, }; if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions)) goto handle_error; psc->driScreen = - psc->dri2->createNewScreen2(screen, psc->fd, + psc->dri2->createNewScreen3(screen, psc->fd, (const __DRIextension **)&pdp->loader_extensions[0], extensions, - &driver_configs, psc); + &driver_configs, implicit, psc); if (psc->driScreen == NULL) { ErrorMessageF("glx: failed to create dri2 screen\n"); diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c index bae358220cf..566bfc7f7c2 100644 --- a/src/glx/dri3_glx.c +++ b/src/glx/dri3_glx.c @@ -848,8 +848,8 @@ dri3_create_screen(int screen, struct glx_display * priv, bool implicit) static const struct dri_extension_match exts[] = { { __DRI_CORE, 1, offsetof(struct dri3_screen, core), false }, - { __DRI_IMAGE_DRIVER, 1, offsetof(struct dri3_screen, image_driver), false }, - { __DRI_MESA, 1, offsetof(struct dri3_screen, mesa), false }, + { __DRI_IMAGE_DRIVER, 2, offsetof(struct dri3_screen, image_driver), false }, + { __DRI_MESA, 2, offsetof(struct dri3_screen, mesa), false }, }; if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions)) goto handle_error; @@ -865,10 +865,10 @@ dri3_create_screen(int screen, struct glx_display * priv, bool implicit) */ if (strcmp(driverName, driverNameDisplayGPU) == 0) { psc->driScreenDisplayGPU = - psc->image_driver->createNewScreen2(screen, psc->fd_display_gpu, + psc->image_driver->createNewScreen3(screen, psc->fd_display_gpu, pdp->loader_extensions, extensions, - &driver_configs, psc); + &driver_configs, implicit, psc); } free(driverNameDisplayGPU); @@ -876,10 +876,10 @@ dri3_create_screen(int screen, struct glx_display * priv, bool implicit) } psc->driScreenRenderGPU = - psc->image_driver->createNewScreen2(screen, psc->fd_render_gpu, + psc->image_driver->createNewScreen3(screen, psc->fd_render_gpu, pdp->loader_extensions, extensions, - &driver_configs, psc); + &driver_configs, implicit, psc); if (psc->driScreenRenderGPU == NULL) { ErrorMessageF("glx: failed to create dri3 screen\n"); diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index 0328ba5bf82..29c02e72551 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -934,7 +934,7 @@ kopperGetSwapInterval(__GLXDRIdrawable *pdraw) static struct glx_screen * driswCreateScreenDriver(int screen, struct glx_display *priv, - const char *driver) + const char *driver, bool implicit) { __GLXDRIscreen *psp; const __DRIconfig **driver_configs; @@ -967,18 +967,18 @@ driswCreateScreenDriver(int screen, struct glx_display *priv, static const struct dri_extension_match exts[] = { { __DRI_CORE, 1, offsetof(struct drisw_screen, core), false }, - { __DRI_SWRAST, 4, offsetof(struct drisw_screen, swrast), false }, + { __DRI_SWRAST, 5, offsetof(struct drisw_screen, swrast), false }, { __DRI_KOPPER, 1, offsetof(struct drisw_screen, kopper), true }, { __DRI_COPY_SUB_BUFFER, 1, offsetof(struct drisw_screen, copySubBuffer), true }, - { __DRI_MESA, 1, offsetof(struct drisw_screen, mesa), false }, + { __DRI_MESA, 2, offsetof(struct drisw_screen, mesa), false }, }; if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions)) goto handle_error; psc->driScreen = - psc->swrast->createNewScreen2(screen, loader_extensions_local, + psc->swrast->createNewScreen3(screen, loader_extensions_local, extensions, - &driver_configs, psc); + &driver_configs, implicit, psc); if (psc->driScreen == NULL) { ErrorMessageF("glx: failed to create drisw screen\n"); goto handle_error; @@ -1064,10 +1064,10 @@ driswCreateScreen(int screen, struct glx_display *priv, bool implicit) { const struct drisw_display *pdpyp = (struct drisw_display *)priv->driswDisplay; if (pdpyp->zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) { - return driswCreateScreenDriver(screen, priv, "zink"); + return driswCreateScreenDriver(screen, priv, "zink", implicit); } - return driswCreateScreenDriver(screen, priv, "swrast"); + return driswCreateScreenDriver(screen, priv, "swrast", implicit); } /* Called from __glXFreeDisplayPrivate.