dri: plumb a 'implicit' param through createNewScreen interfaces
Acked-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28139>
This commit is contained in:

committed by
Marge Bot

parent
014bbae4bf
commit
14c44aacff
@@ -915,7 +915,7 @@ struct __DRIframebufferRec {
|
|||||||
* extension. Version 1 is required by the X server, and version 3 is used.
|
* extension. Version 1 is required by the X server, and version 3 is used.
|
||||||
*/
|
*/
|
||||||
#define __DRI_SWRAST "DRI_SWRast"
|
#define __DRI_SWRAST "DRI_SWRast"
|
||||||
#define __DRI_SWRAST_VERSION 5
|
#define __DRI_SWRAST_VERSION 6
|
||||||
|
|
||||||
struct __DRIswrastExtensionRec {
|
struct __DRIswrastExtensionRec {
|
||||||
__DRIextension base;
|
__DRIextension base;
|
||||||
@@ -967,6 +967,18 @@ struct __DRIswrastExtensionRec {
|
|||||||
*/
|
*/
|
||||||
int (*queryBufferAge)(__DRIdrawable *drawable);
|
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
|
/** Common DRI function definitions, shared among DRI2 and Image extensions
|
||||||
@@ -978,6 +990,13 @@ typedef __DRIscreen *
|
|||||||
const __DRIextension **driver_extensions,
|
const __DRIextension **driver_extensions,
|
||||||
const __DRIconfig ***driver_configs,
|
const __DRIconfig ***driver_configs,
|
||||||
void *loaderPrivate);
|
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 *
|
typedef __DRIdrawable *
|
||||||
(*__DRIcreateNewDrawableFunc)(__DRIscreen *screen,
|
(*__DRIcreateNewDrawableFunc)(__DRIscreen *screen,
|
||||||
@@ -1113,7 +1132,7 @@ struct __DRIdri2LoaderExtensionRec {
|
|||||||
* constructors for DRI2. The X server uses up to version 4.
|
* constructors for DRI2. The X server uses up to version 4.
|
||||||
*/
|
*/
|
||||||
#define __DRI_DRI2 "DRI_DRI2"
|
#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_OPENGL 0 /**< OpenGL compatibility profile */
|
||||||
#define __DRI_API_GLES 1 /**< OpenGL ES 1.x */
|
#define __DRI_API_GLES 1 /**< OpenGL ES 1.x */
|
||||||
@@ -1232,6 +1251,13 @@ struct __DRIdri2ExtensionRec {
|
|||||||
* \since version 4
|
* \since version 4
|
||||||
*/
|
*/
|
||||||
__DRIcreateNewScreen2Func createNewScreen2;
|
__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 "DRI_IMAGE_DRIVER"
|
||||||
#define __DRI_IMAGE_DRIVER_VERSION 1
|
#define __DRI_IMAGE_DRIVER_VERSION 2
|
||||||
|
|
||||||
struct __DRIimageDriverExtensionRec {
|
struct __DRIimageDriverExtensionRec {
|
||||||
__DRIextension base;
|
__DRIextension base;
|
||||||
@@ -2055,6 +2081,7 @@ struct __DRIimageDriverExtensionRec {
|
|||||||
__DRIcreateNewDrawableFunc createNewDrawable;
|
__DRIcreateNewDrawableFunc createNewDrawable;
|
||||||
__DRIcreateContextAttribsFunc createContextAttribs;
|
__DRIcreateContextAttribsFunc createContextAttribs;
|
||||||
__DRIgetAPIMaskFunc getAPIMask;
|
__DRIgetAPIMaskFunc getAPIMask;
|
||||||
|
__DRIcreateNewScreen3Func createNewScreen3;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
typedef struct __DRImesaCoreExtensionRec __DRImesaCoreExtension;
|
typedef struct __DRImesaCoreExtensionRec __DRImesaCoreExtension;
|
||||||
|
|
||||||
#define __DRI_MESA "DRI_Mesa"
|
#define __DRI_MESA "DRI_Mesa"
|
||||||
#define __DRI_MESA_VERSION 1
|
#define __DRI_MESA_VERSION 2
|
||||||
|
|
||||||
struct dri_screen;
|
struct dri_screen;
|
||||||
|
|
||||||
@@ -63,6 +63,9 @@ struct __DRImesaCoreExtensionRec {
|
|||||||
const __DRIconfig **(*initScreen)(struct dri_screen *screen);
|
const __DRIconfig **(*initScreen)(struct dri_screen *screen);
|
||||||
|
|
||||||
int (*queryCompatibleRenderOnlyDeviceFd)(int kms_only_fd);
|
int (*queryCompatibleRenderOnlyDeviceFd)(int kms_only_fd);
|
||||||
|
|
||||||
|
/* version 2 */
|
||||||
|
__DRIcreateNewScreen3Func createNewScreen3;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* MESA_INTERFACE_H */
|
#endif /* MESA_INTERFACE_H */
|
||||||
|
@@ -601,8 +601,8 @@ const __DRIimageLookupExtension image_lookup_extension = {
|
|||||||
|
|
||||||
static const struct dri_extension_match dri3_driver_extensions[] = {
|
static const struct dri_extension_match dri3_driver_extensions[] = {
|
||||||
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
|
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
|
||||||
{__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false},
|
{__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false},
|
||||||
{__DRI_IMAGE_DRIVER, 1, offsetof(struct dri2_egl_display, image_driver),
|
{__DRI_IMAGE_DRIVER, 2, offsetof(struct dri2_egl_display, image_driver),
|
||||||
false},
|
false},
|
||||||
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
|
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
|
||||||
true},
|
true},
|
||||||
@@ -610,8 +610,8 @@ static const struct dri_extension_match dri3_driver_extensions[] = {
|
|||||||
|
|
||||||
static const struct dri_extension_match dri2_driver_extensions[] = {
|
static const struct dri_extension_match dri2_driver_extensions[] = {
|
||||||
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
|
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
|
||||||
{__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false},
|
{__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false},
|
||||||
{__DRI_DRI2, 4, offsetof(struct dri2_egl_display, dri2), false},
|
{__DRI_DRI2, 5, offsetof(struct dri2_egl_display, dri2), false},
|
||||||
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
|
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
|
||||||
true},
|
true},
|
||||||
};
|
};
|
||||||
@@ -624,8 +624,8 @@ static const struct dri_extension_match dri2_core_extensions[] = {
|
|||||||
|
|
||||||
static const struct dri_extension_match swrast_driver_extensions[] = {
|
static const struct dri_extension_match swrast_driver_extensions[] = {
|
||||||
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
|
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
|
||||||
{__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false},
|
{__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false},
|
||||||
{__DRI_SWRAST, 4, offsetof(struct dri2_egl_display, swrast), false},
|
{__DRI_SWRAST, 5, offsetof(struct dri2_egl_display, swrast), false},
|
||||||
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
|
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
|
||||||
true},
|
true},
|
||||||
};
|
};
|
||||||
@@ -915,18 +915,18 @@ dri2_create_screen(_EGLDisplay *disp)
|
|||||||
* will not crash.
|
* will not crash.
|
||||||
*/
|
*/
|
||||||
if (strcmp(dri2_dpy->driver_name, driver_name_display_gpu) == 0) {
|
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,
|
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);
|
free(driver_name_display_gpu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int screen_fd = dri2_dpy->swrast ? -1 : dri2_dpy->fd_render_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,
|
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) {
|
if (dri2_dpy->dri_screen_render_gpu == NULL) {
|
||||||
_eglLog(_EGL_WARNING, "egl: failed to create dri2 screen");
|
_eglLog(_EGL_WARNING, "egl: failed to create dri2 screen");
|
||||||
|
@@ -2448,12 +2448,13 @@ dri_query_compatible_render_only_device_fd(int kms_only_fd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
||||||
.base = { __DRI_MESA, 1 },
|
.base = { __DRI_MESA, 2 },
|
||||||
.version_string = MESA_INTERFACE_VERSION_STRING,
|
.version_string = MESA_INTERFACE_VERSION_STRING,
|
||||||
.createNewScreen = driCreateNewScreen2,
|
.createNewScreen = driCreateNewScreen2,
|
||||||
.createContext = driCreateContextAttribs,
|
.createContext = driCreateContextAttribs,
|
||||||
.initScreen = dri2_init_screen,
|
.initScreen = dri2_init_screen,
|
||||||
.queryCompatibleRenderOnlyDeviceFd = dri_query_compatible_render_only_device_fd,
|
.queryCompatibleRenderOnlyDeviceFd = dri_query_compatible_render_only_device_fd,
|
||||||
|
.createNewScreen3 = driCreateNewScreen3,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This is the table of extensions that the loader will dlsym() for. */
|
/* 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 = {
|
static const struct __DRImesaCoreExtensionRec swkmsMesaCoreExtension = {
|
||||||
.base = { __DRI_MESA, 1 },
|
.base = { __DRI_MESA, 2 },
|
||||||
.version_string = MESA_INTERFACE_VERSION_STRING,
|
.version_string = MESA_INTERFACE_VERSION_STRING,
|
||||||
.createNewScreen = driCreateNewScreen2,
|
.createNewScreen = driCreateNewScreen2,
|
||||||
.createContext = driCreateContextAttribs,
|
.createContext = driCreateContextAttribs,
|
||||||
.initScreen = dri_swrast_kms_init_screen,
|
.initScreen = dri_swrast_kms_init_screen,
|
||||||
|
.createNewScreen3 = driCreateNewScreen3,
|
||||||
};
|
};
|
||||||
|
|
||||||
const __DRIextension *dri_swrast_kms_driver_extensions[] = {
|
const __DRIextension *dri_swrast_kms_driver_extensions[] = {
|
||||||
|
@@ -97,10 +97,10 @@ setupLoaderExtensions(struct dri_screen *screen,
|
|||||||
* Display.
|
* Display.
|
||||||
*/
|
*/
|
||||||
__DRIscreen *
|
__DRIscreen *
|
||||||
driCreateNewScreen2(int scrn, int fd,
|
driCreateNewScreen3(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, bool implicit, void *data)
|
||||||
{
|
{
|
||||||
static const __DRIextension *emptyExtensionList[] = { NULL };
|
static const __DRIextension *emptyExtensionList[] = { NULL };
|
||||||
struct dri_screen *screen;
|
struct dri_screen *screen;
|
||||||
@@ -173,14 +173,25 @@ driCreateNewScreen2(int scrn, int fd,
|
|||||||
return opaque_dri_screen(screen);
|
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 *
|
static __DRIscreen *
|
||||||
dri2CreateNewScreen(int scrn, int fd,
|
dri2CreateNewScreen(int scrn, int fd,
|
||||||
const __DRIextension **extensions,
|
const __DRIextension **extensions,
|
||||||
const __DRIconfig ***driver_configs, void *data)
|
const __DRIconfig ***driver_configs, void *data)
|
||||||
{
|
{
|
||||||
return driCreateNewScreen2(scrn, fd, extensions,
|
return driCreateNewScreen3(scrn, fd, extensions,
|
||||||
galliumdrm_driver_extensions,
|
galliumdrm_driver_extensions,
|
||||||
driver_configs, data);
|
driver_configs, false, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static __DRIscreen *
|
static __DRIscreen *
|
||||||
@@ -188,9 +199,9 @@ swkmsCreateNewScreen(int scrn, int fd,
|
|||||||
const __DRIextension **extensions,
|
const __DRIextension **extensions,
|
||||||
const __DRIconfig ***driver_configs, void *data)
|
const __DRIconfig ***driver_configs, void *data)
|
||||||
{
|
{
|
||||||
return driCreateNewScreen2(scrn, fd, extensions,
|
return driCreateNewScreen3(scrn, fd, extensions,
|
||||||
dri_swrast_kms_driver_extensions,
|
dri_swrast_kms_driver_extensions,
|
||||||
driver_configs, data);
|
driver_configs, false, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** swrast driver createNewScreen entrypoint. */
|
/** swrast driver createNewScreen entrypoint. */
|
||||||
@@ -198,9 +209,9 @@ static __DRIscreen *
|
|||||||
driSWRastCreateNewScreen(int scrn, const __DRIextension **extensions,
|
driSWRastCreateNewScreen(int scrn, const __DRIextension **extensions,
|
||||||
const __DRIconfig ***driver_configs, void *data)
|
const __DRIconfig ***driver_configs, void *data)
|
||||||
{
|
{
|
||||||
return driCreateNewScreen2(scrn, -1, extensions,
|
return driCreateNewScreen3(scrn, -1, extensions,
|
||||||
galliumsw_driver_extensions,
|
galliumsw_driver_extensions,
|
||||||
driver_configs, data);
|
driver_configs, false, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static __DRIscreen *
|
static __DRIscreen *
|
||||||
@@ -208,8 +219,17 @@ driSWRastCreateNewScreen2(int scrn, const __DRIextension **extensions,
|
|||||||
const __DRIextension **driver_extensions,
|
const __DRIextension **driver_extensions,
|
||||||
const __DRIconfig ***driver_configs, void *data)
|
const __DRIconfig ***driver_configs, void *data)
|
||||||
{
|
{
|
||||||
return driCreateNewScreen2(scrn, -1, extensions, driver_extensions,
|
return driCreateNewScreen3(scrn, -1, extensions, driver_extensions,
|
||||||
driver_configs, data);
|
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 */
|
/** DRI2 interface */
|
||||||
const __DRIdri2Extension driDRI2Extension = {
|
const __DRIdri2Extension driDRI2Extension = {
|
||||||
.base = { __DRI_DRI2, 4 },
|
.base = { __DRI_DRI2, 5 },
|
||||||
|
|
||||||
.createNewScreen = dri2CreateNewScreen,
|
.createNewScreen = dri2CreateNewScreen,
|
||||||
.createNewDrawable = driCreateNewDrawable,
|
.createNewDrawable = driCreateNewDrawable,
|
||||||
@@ -909,10 +929,11 @@ const __DRIdri2Extension driDRI2Extension = {
|
|||||||
.releaseBuffer = dri2ReleaseBuffer,
|
.releaseBuffer = dri2ReleaseBuffer,
|
||||||
.createContextAttribs = driCreateContextAttribs,
|
.createContextAttribs = driCreateContextAttribs,
|
||||||
.createNewScreen2 = driCreateNewScreen2,
|
.createNewScreen2 = driCreateNewScreen2,
|
||||||
|
.createNewScreen3 = driCreateNewScreen3,
|
||||||
};
|
};
|
||||||
|
|
||||||
const __DRIdri2Extension swkmsDRI2Extension = {
|
const __DRIdri2Extension swkmsDRI2Extension = {
|
||||||
.base = { __DRI_DRI2, 4 },
|
.base = { __DRI_DRI2, 5 },
|
||||||
|
|
||||||
.createNewScreen = swkmsCreateNewScreen,
|
.createNewScreen = swkmsCreateNewScreen,
|
||||||
.createNewDrawable = driCreateNewDrawable,
|
.createNewDrawable = driCreateNewDrawable,
|
||||||
@@ -923,12 +944,13 @@ const __DRIdri2Extension swkmsDRI2Extension = {
|
|||||||
.releaseBuffer = dri2ReleaseBuffer,
|
.releaseBuffer = dri2ReleaseBuffer,
|
||||||
.createContextAttribs = driCreateContextAttribs,
|
.createContextAttribs = driCreateContextAttribs,
|
||||||
.createNewScreen2 = driCreateNewScreen2,
|
.createNewScreen2 = driCreateNewScreen2,
|
||||||
|
.createNewScreen3 = driCreateNewScreen3,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const __DRIswrastExtension driSWRastExtension = {
|
const __DRIswrastExtension driSWRastExtension = {
|
||||||
.base = { __DRI_SWRAST, 4 },
|
.base = { __DRI_SWRAST, 5 },
|
||||||
|
|
||||||
.createNewScreen = driSWRastCreateNewScreen,
|
.createNewScreen = driSWRastCreateNewScreen,
|
||||||
.createNewDrawable = driCreateNewDrawable,
|
.createNewDrawable = driCreateNewDrawable,
|
||||||
@@ -936,6 +958,7 @@ const __DRIswrastExtension driSWRastExtension = {
|
|||||||
.createContextAttribs = driCreateContextAttribs,
|
.createContextAttribs = driCreateContextAttribs,
|
||||||
.createNewScreen2 = driSWRastCreateNewScreen2,
|
.createNewScreen2 = driSWRastCreateNewScreen2,
|
||||||
.queryBufferAge = driSWRastQueryBufferAge,
|
.queryBufferAge = driSWRastQueryBufferAge,
|
||||||
|
.createNewScreen3 = driSWRastCreateNewScreen3,
|
||||||
};
|
};
|
||||||
|
|
||||||
const __DRI2configQueryExtension dri2ConfigQueryExtension = {
|
const __DRI2configQueryExtension dri2ConfigQueryExtension = {
|
||||||
@@ -1138,10 +1161,11 @@ driImageFormatToGLFormat(uint32_t image_format)
|
|||||||
|
|
||||||
/** Image driver interface */
|
/** Image driver interface */
|
||||||
const __DRIimageDriverExtension driImageDriverExtension = {
|
const __DRIimageDriverExtension driImageDriverExtension = {
|
||||||
.base = { __DRI_IMAGE_DRIVER, 1 },
|
.base = { __DRI_IMAGE_DRIVER, 2 },
|
||||||
|
|
||||||
.createNewScreen2 = driCreateNewScreen2,
|
.createNewScreen2 = driCreateNewScreen2,
|
||||||
.createNewDrawable = driCreateNewDrawable,
|
.createNewDrawable = driCreateNewDrawable,
|
||||||
.getAPIMask = driGetAPIMask,
|
.getAPIMask = driGetAPIMask,
|
||||||
.createContextAttribs = driCreateContextAttribs,
|
.createContextAttribs = driCreateContextAttribs,
|
||||||
|
.createNewScreen3 = driCreateNewScreen3,
|
||||||
};
|
};
|
||||||
|
@@ -103,6 +103,11 @@ struct __DriverContextConfig {
|
|||||||
#define __DRIVER_CONTEXT_ATTRIB_NO_ERROR (1 << 3)
|
#define __DRIVER_CONTEXT_ATTRIB_NO_ERROR (1 << 3)
|
||||||
#define __DRIVER_CONTEXT_ATTRIB_PROTECTED (1 << 4)
|
#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 *
|
__DRIscreen *
|
||||||
driCreateNewScreen2(int scrn, int fd,
|
driCreateNewScreen2(int scrn, int fd,
|
||||||
const __DRIextension **loader_extensions,
|
const __DRIextension **loader_extensions,
|
||||||
|
@@ -656,11 +656,12 @@ const __DRIcopySubBufferExtension driSWCopySubBufferExtension = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
||||||
.base = { __DRI_MESA, 1 },
|
.base = { __DRI_MESA, 2 },
|
||||||
.version_string = MESA_INTERFACE_VERSION_STRING,
|
.version_string = MESA_INTERFACE_VERSION_STRING,
|
||||||
.createNewScreen = driCreateNewScreen2,
|
.createNewScreen = driCreateNewScreen2,
|
||||||
.createContext = driCreateContextAttribs,
|
.createContext = driCreateContextAttribs,
|
||||||
.initScreen = drisw_init_screen,
|
.initScreen = drisw_init_screen,
|
||||||
|
.createNewScreen3 = driCreateNewScreen3,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This is the table of extensions that the loader will dlsym() for. */
|
/* This is the table of extensions that the loader will dlsym() for. */
|
||||||
|
@@ -940,11 +940,12 @@ const __DRIkopperExtension driKopperExtension = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
|
||||||
.base = { __DRI_MESA, 1 },
|
.base = { __DRI_MESA, 2 },
|
||||||
.version_string = MESA_INTERFACE_VERSION_STRING,
|
.version_string = MESA_INTERFACE_VERSION_STRING,
|
||||||
.createNewScreen = driCreateNewScreen2,
|
.createNewScreen = driCreateNewScreen2,
|
||||||
.createContext = driCreateContextAttribs,
|
.createContext = driCreateContextAttribs,
|
||||||
.initScreen = kopper_init_screen,
|
.initScreen = kopper_init_screen,
|
||||||
|
.createNewScreen3 = driCreateNewScreen3,
|
||||||
};
|
};
|
||||||
|
|
||||||
const __DRIextension *galliumvk_driver_extensions[] = {
|
const __DRIextension *galliumvk_driver_extensions[] = {
|
||||||
|
@@ -250,14 +250,14 @@ static struct dri_extension_match dri_core_extensions[] = {
|
|||||||
|
|
||||||
static struct dri_extension_match gbm_dri_device_extensions[] = {
|
static struct dri_extension_match gbm_dri_device_extensions[] = {
|
||||||
{ __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false },
|
{ __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false },
|
||||||
{ __DRI_MESA, 1, offsetof(struct gbm_dri_device, mesa), false },
|
{ __DRI_MESA, 2, offsetof(struct gbm_dri_device, mesa), false },
|
||||||
{ __DRI_IMAGE_DRIVER, 1, offsetof(struct gbm_dri_device, image_driver), false },
|
{ __DRI_IMAGE_DRIVER, 2, offsetof(struct gbm_dri_device, image_driver), false },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct dri_extension_match gbm_swrast_device_extensions[] = {
|
static struct dri_extension_match gbm_swrast_device_extensions[] = {
|
||||||
{ __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false },
|
{ __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false },
|
||||||
{ __DRI_MESA, 1, offsetof(struct gbm_dri_device, mesa), false },
|
{ __DRI_MESA, 2, offsetof(struct gbm_dri_device, mesa), false },
|
||||||
{ __DRI_SWRAST, 4, offsetof(struct gbm_dri_device, swrast), false },
|
{ __DRI_SWRAST, 5, offsetof(struct gbm_dri_device, swrast), false },
|
||||||
{ __DRI_KOPPER, 1, offsetof(struct gbm_dri_device, kopper), true },
|
{ __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->driver_extensions = extensions;
|
||||||
dri->loader_extensions = gbm_dri_screen_extensions;
|
dri->loader_extensions = gbm_dri_screen_extensions;
|
||||||
dri->screen = dri->mesa->createNewScreen(0, swrast ? -1 : dri->base.v0.fd,
|
dri->screen = dri->mesa->createNewScreen3(0, swrast ? -1 : dri->base.v0.fd,
|
||||||
dri->loader_extensions,
|
dri->loader_extensions,
|
||||||
dri->driver_extensions,
|
dri->driver_extensions,
|
||||||
&dri->driver_configs, dri);
|
&dri->driver_configs, false, dri);
|
||||||
if (dri->screen == NULL)
|
if (dri->screen == NULL)
|
||||||
goto close_driver;
|
goto close_driver;
|
||||||
|
|
||||||
|
@@ -1064,17 +1064,17 @@ dri2CreateScreen(int screen, struct glx_display * priv, bool implicit)
|
|||||||
|
|
||||||
static const struct dri_extension_match exts[] = {
|
static const struct dri_extension_match exts[] = {
|
||||||
{ __DRI_CORE, 1, offsetof(struct dri2_screen, core), false },
|
{ __DRI_CORE, 1, offsetof(struct dri2_screen, core), false },
|
||||||
{ __DRI_DRI2, 4, offsetof(struct dri2_screen, dri2), false },
|
{ __DRI_DRI2, 5, offsetof(struct dri2_screen, dri2), false },
|
||||||
{ __DRI_MESA, 1, offsetof(struct dri2_screen, mesa), false },
|
{ __DRI_MESA, 2, offsetof(struct dri2_screen, mesa), false },
|
||||||
};
|
};
|
||||||
if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions))
|
if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions))
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
|
|
||||||
psc->driScreen =
|
psc->driScreen =
|
||||||
psc->dri2->createNewScreen2(screen, psc->fd,
|
psc->dri2->createNewScreen3(screen, psc->fd,
|
||||||
(const __DRIextension **)&pdp->loader_extensions[0],
|
(const __DRIextension **)&pdp->loader_extensions[0],
|
||||||
extensions,
|
extensions,
|
||||||
&driver_configs, psc);
|
&driver_configs, implicit, psc);
|
||||||
|
|
||||||
if (psc->driScreen == NULL) {
|
if (psc->driScreen == NULL) {
|
||||||
ErrorMessageF("glx: failed to create dri2 screen\n");
|
ErrorMessageF("glx: failed to create dri2 screen\n");
|
||||||
|
@@ -848,8 +848,8 @@ dri3_create_screen(int screen, struct glx_display * priv, bool implicit)
|
|||||||
|
|
||||||
static const struct dri_extension_match exts[] = {
|
static const struct dri_extension_match exts[] = {
|
||||||
{ __DRI_CORE, 1, offsetof(struct dri3_screen, core), false },
|
{ __DRI_CORE, 1, offsetof(struct dri3_screen, core), false },
|
||||||
{ __DRI_IMAGE_DRIVER, 1, offsetof(struct dri3_screen, image_driver), false },
|
{ __DRI_IMAGE_DRIVER, 2, offsetof(struct dri3_screen, image_driver), false },
|
||||||
{ __DRI_MESA, 1, offsetof(struct dri3_screen, mesa), false },
|
{ __DRI_MESA, 2, offsetof(struct dri3_screen, mesa), false },
|
||||||
};
|
};
|
||||||
if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions))
|
if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions))
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
@@ -865,10 +865,10 @@ dri3_create_screen(int screen, struct glx_display * priv, bool implicit)
|
|||||||
*/
|
*/
|
||||||
if (strcmp(driverName, driverNameDisplayGPU) == 0) {
|
if (strcmp(driverName, driverNameDisplayGPU) == 0) {
|
||||||
psc->driScreenDisplayGPU =
|
psc->driScreenDisplayGPU =
|
||||||
psc->image_driver->createNewScreen2(screen, psc->fd_display_gpu,
|
psc->image_driver->createNewScreen3(screen, psc->fd_display_gpu,
|
||||||
pdp->loader_extensions,
|
pdp->loader_extensions,
|
||||||
extensions,
|
extensions,
|
||||||
&driver_configs, psc);
|
&driver_configs, implicit, psc);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(driverNameDisplayGPU);
|
free(driverNameDisplayGPU);
|
||||||
@@ -876,10 +876,10 @@ dri3_create_screen(int screen, struct glx_display * priv, bool implicit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
psc->driScreenRenderGPU =
|
psc->driScreenRenderGPU =
|
||||||
psc->image_driver->createNewScreen2(screen, psc->fd_render_gpu,
|
psc->image_driver->createNewScreen3(screen, psc->fd_render_gpu,
|
||||||
pdp->loader_extensions,
|
pdp->loader_extensions,
|
||||||
extensions,
|
extensions,
|
||||||
&driver_configs, psc);
|
&driver_configs, implicit, psc);
|
||||||
|
|
||||||
if (psc->driScreenRenderGPU == NULL) {
|
if (psc->driScreenRenderGPU == NULL) {
|
||||||
ErrorMessageF("glx: failed to create dri3 screen\n");
|
ErrorMessageF("glx: failed to create dri3 screen\n");
|
||||||
|
@@ -934,7 +934,7 @@ kopperGetSwapInterval(__GLXDRIdrawable *pdraw)
|
|||||||
|
|
||||||
static struct glx_screen *
|
static struct glx_screen *
|
||||||
driswCreateScreenDriver(int screen, struct glx_display *priv,
|
driswCreateScreenDriver(int screen, struct glx_display *priv,
|
||||||
const char *driver)
|
const char *driver, bool implicit)
|
||||||
{
|
{
|
||||||
__GLXDRIscreen *psp;
|
__GLXDRIscreen *psp;
|
||||||
const __DRIconfig **driver_configs;
|
const __DRIconfig **driver_configs;
|
||||||
@@ -967,18 +967,18 @@ driswCreateScreenDriver(int screen, struct glx_display *priv,
|
|||||||
|
|
||||||
static const struct dri_extension_match exts[] = {
|
static const struct dri_extension_match exts[] = {
|
||||||
{ __DRI_CORE, 1, offsetof(struct drisw_screen, core), false },
|
{ __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_KOPPER, 1, offsetof(struct drisw_screen, kopper), true },
|
||||||
{ __DRI_COPY_SUB_BUFFER, 1, offsetof(struct drisw_screen, copySubBuffer), 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))
|
if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions))
|
||||||
goto handle_error;
|
goto handle_error;
|
||||||
|
|
||||||
psc->driScreen =
|
psc->driScreen =
|
||||||
psc->swrast->createNewScreen2(screen, loader_extensions_local,
|
psc->swrast->createNewScreen3(screen, loader_extensions_local,
|
||||||
extensions,
|
extensions,
|
||||||
&driver_configs, psc);
|
&driver_configs, implicit, psc);
|
||||||
if (psc->driScreen == NULL) {
|
if (psc->driScreen == NULL) {
|
||||||
ErrorMessageF("glx: failed to create drisw screen\n");
|
ErrorMessageF("glx: failed to create drisw screen\n");
|
||||||
goto handle_error;
|
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;
|
const struct drisw_display *pdpyp = (struct drisw_display *)priv->driswDisplay;
|
||||||
if (pdpyp->zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) {
|
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.
|
/* Called from __glXFreeDisplayPrivate.
|
||||||
|
Reference in New Issue
Block a user