mirror of https://gitlab.freedesktop.org/mesa/mesa
egl/dri2: rework dri2_egl_display::extensions storage
Remove the error prone fixed size array. While we're here also rename to loader_extensions like in the GLX code. v2: Rebase. Keep image_loader_extension within the wayland_drm dri2_loader_extensions list. Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Eric Engestrom <eric@engestrom.ch>
This commit is contained in:
parent
f7b8108289
commit
f871946594
|
@ -685,7 +685,7 @@ dri2_create_screen(_EGLDisplay *disp)
|
|||
if (dri2_dpy->image_driver) {
|
||||
dri2_dpy->dri_screen =
|
||||
dri2_dpy->image_driver->createNewScreen2(0, dri2_dpy->fd,
|
||||
dri2_dpy->extensions,
|
||||
dri2_dpy->loader_extensions,
|
||||
dri2_dpy->driver_extensions,
|
||||
&dri2_dpy->driver_configs,
|
||||
disp);
|
||||
|
@ -693,25 +693,25 @@ dri2_create_screen(_EGLDisplay *disp)
|
|||
if (dri2_dpy->dri2->base.version >= 4) {
|
||||
dri2_dpy->dri_screen =
|
||||
dri2_dpy->dri2->createNewScreen2(0, dri2_dpy->fd,
|
||||
dri2_dpy->extensions,
|
||||
dri2_dpy->loader_extensions,
|
||||
dri2_dpy->driver_extensions,
|
||||
&dri2_dpy->driver_configs, disp);
|
||||
} else {
|
||||
dri2_dpy->dri_screen =
|
||||
dri2_dpy->dri2->createNewScreen(0, dri2_dpy->fd,
|
||||
dri2_dpy->extensions,
|
||||
dri2_dpy->loader_extensions,
|
||||
&dri2_dpy->driver_configs, disp);
|
||||
}
|
||||
} else {
|
||||
assert(dri2_dpy->swrast);
|
||||
if (dri2_dpy->swrast->base.version >= 4) {
|
||||
dri2_dpy->dri_screen =
|
||||
dri2_dpy->swrast->createNewScreen2(0, dri2_dpy->extensions,
|
||||
dri2_dpy->swrast->createNewScreen2(0, dri2_dpy->loader_extensions,
|
||||
dri2_dpy->driver_extensions,
|
||||
&dri2_dpy->driver_configs, disp);
|
||||
} else {
|
||||
dri2_dpy->dri_screen =
|
||||
dri2_dpy->swrast->createNewScreen(0, dri2_dpy->extensions,
|
||||
dri2_dpy->swrast->createNewScreen(0, dri2_dpy->loader_extensions,
|
||||
&dri2_dpy->driver_configs, disp);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -196,7 +196,7 @@ struct dri2_egl_display
|
|||
|
||||
char *driver_name;
|
||||
|
||||
const __DRIextension *extensions[5];
|
||||
const __DRIextension **loader_extensions;
|
||||
const __DRIextension **driver_extensions;
|
||||
|
||||
#ifdef HAVE_X11_PLATFORM
|
||||
|
|
|
@ -898,6 +898,20 @@ static const __DRIimageLoaderExtension droid_image_loader_extension = {
|
|||
.flushFrontBuffer = droid_flush_front_buffer,
|
||||
};
|
||||
|
||||
static const __DRIextension *droid_dri2_loader_extensions[] = {
|
||||
&droid_dri2_loader_extension.base,
|
||||
&image_lookup_extension.base,
|
||||
&use_invalidate.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const __DRIextension *droid_image_loader_extensions[] = {
|
||||
&droid_image_loader_extension.base,
|
||||
&image_lookup_extension.base,
|
||||
&use_invalidate.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
EGLBoolean
|
||||
dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *dpy)
|
||||
{
|
||||
|
@ -935,15 +949,10 @@ dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *dpy)
|
|||
|
||||
/* render nodes cannot use Gem names, and thus do not support
|
||||
* the __DRI_DRI2_LOADER extension */
|
||||
if (!dri2_dpy->is_render_node) {
|
||||
dri2_dpy->extensions[0] = &droid_dri2_loader_extension.base;
|
||||
} else {
|
||||
dri2_dpy->extensions[0] = &droid_image_loader_extension.base;
|
||||
}
|
||||
dri2_dpy->extensions[1] = &use_invalidate.base;
|
||||
dri2_dpy->extensions[2] = &image_lookup_extension.base;
|
||||
dri2_dpy->extensions[3] = NULL;
|
||||
|
||||
if (!dri2_dpy->is_render_node)
|
||||
dri2_dpy->loader_extensions = droid_dri2_loader_extensions;
|
||||
else
|
||||
dri2_dpy->loader_extensions = droid_image_loader_extensions;
|
||||
|
||||
if (!dri2_create_screen(dpy)) {
|
||||
err = "DRI2: failed to create screen";
|
||||
|
|
|
@ -236,6 +236,13 @@ static const __DRIimageLoaderExtension image_loader_extension = {
|
|||
|
||||
#define DRM_RENDER_DEV_NAME "%s/renderD%d"
|
||||
|
||||
static const __DRIextension *image_loader_extensions[] = {
|
||||
&image_loader_extension.base,
|
||||
&image_lookup_extension.base,
|
||||
&use_invalidate.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
EGLBoolean
|
||||
dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
|
@ -281,10 +288,7 @@ dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
goto cleanup_display;
|
||||
}
|
||||
|
||||
dri2_dpy->extensions[0] = &image_loader_extension.base;
|
||||
dri2_dpy->extensions[1] = &image_lookup_extension.base;
|
||||
dri2_dpy->extensions[2] = &use_invalidate.base;
|
||||
dri2_dpy->extensions[3] = NULL;
|
||||
dri2_dpy->loader_extensions = image_loader_extensions;
|
||||
|
||||
if (!dri2_create_screen(disp)) {
|
||||
err = "DRI2: failed to create screen";
|
||||
|
|
|
@ -1068,6 +1068,20 @@ static struct dri2_egl_display_vtbl dri2_wl_display_vtbl = {
|
|||
.get_dri_drawable = dri2_surface_get_dri_drawable,
|
||||
};
|
||||
|
||||
static const __DRIextension *dri2_loader_extensions[] = {
|
||||
&dri2_loader_extension.base,
|
||||
&image_lookup_extension.base,
|
||||
&use_invalidate.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const __DRIextension *image_loader_extensions[] = {
|
||||
&image_loader_extension.base,
|
||||
&image_lookup_extension.base,
|
||||
&use_invalidate.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static EGLBoolean
|
||||
dri2_initialize_wayland_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
|
@ -1142,17 +1156,12 @@ dri2_initialize_wayland_drm(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
if (!dri2_load_driver(disp))
|
||||
goto cleanup_driver_name;
|
||||
|
||||
dri2_dpy->extensions[0] = &image_loader_extension.base;
|
||||
dri2_dpy->extensions[1] = &image_lookup_extension.base;
|
||||
dri2_dpy->extensions[2] = &use_invalidate.base;
|
||||
|
||||
/* render nodes cannot use Gem names, and thus do not support
|
||||
* the __DRI_DRI2_LOADER extension */
|
||||
if (!dri2_dpy->is_render_node) {
|
||||
dri2_dpy->extensions[3] = &dri2_loader_extension.base;
|
||||
dri2_dpy->extensions[4] = NULL;
|
||||
} else
|
||||
dri2_dpy->extensions[3] = NULL;
|
||||
if (!dri2_dpy->is_render_node)
|
||||
dri2_dpy->loader_extensions = dri2_loader_extensions;
|
||||
else
|
||||
dri2_dpy->loader_extensions = image_loader_extensions;
|
||||
|
||||
if (!dri2_create_screen(disp))
|
||||
goto cleanup_driver;
|
||||
|
@ -1798,6 +1807,11 @@ static const __DRIswrastLoaderExtension swrast_loader_extension = {
|
|||
.putImage2 = dri2_wl_swrast_put_image2,
|
||||
};
|
||||
|
||||
static const __DRIextension *swrast_loader_extensions[] = {
|
||||
&swrast_loader_extension.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static EGLBoolean
|
||||
dri2_initialize_wayland_swrast(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
|
@ -1848,8 +1862,7 @@ dri2_initialize_wayland_swrast(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
if (!dri2_load_driver_swrast(disp))
|
||||
goto cleanup_shm;
|
||||
|
||||
dri2_dpy->extensions[0] = &swrast_loader_extension.base;
|
||||
dri2_dpy->extensions[1] = NULL;
|
||||
dri2_dpy->loader_extensions = swrast_loader_extensions;
|
||||
|
||||
if (!dri2_create_screen(disp))
|
||||
goto cleanup_driver;
|
||||
|
|
|
@ -1167,6 +1167,11 @@ static const __DRIswrastLoaderExtension swrast_loader_extension = {
|
|||
.getImage = swrastGetImage,
|
||||
};
|
||||
|
||||
static const __DRIextension *swrast_loader_extensions[] = {
|
||||
&swrast_loader_extension.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static EGLBoolean
|
||||
dri2_initialize_x11_swrast(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
|
@ -1201,8 +1206,7 @@ dri2_initialize_x11_swrast(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
if (!dri2_load_driver_swrast(disp))
|
||||
goto cleanup_conn;
|
||||
|
||||
dri2_dpy->extensions[0] = &swrast_loader_extension.base;
|
||||
dri2_dpy->extensions[1] = NULL;
|
||||
dri2_dpy->loader_extensions = swrast_loader_extensions;
|
||||
|
||||
if (!dri2_create_screen(disp))
|
||||
goto cleanup_driver;
|
||||
|
@ -1280,6 +1284,14 @@ dri2_x11_setup_swap_interval(struct dri2_egl_display *dri2_dpy)
|
|||
}
|
||||
|
||||
#ifdef HAVE_DRI3
|
||||
|
||||
static const __DRIextension *dri3_image_loader_extensions[] = {
|
||||
&dri3_image_loader_extension.base,
|
||||
&image_lookup_extension.base,
|
||||
&use_invalidate.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static EGLBoolean
|
||||
dri2_initialize_x11_dri3(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
|
@ -1313,10 +1325,7 @@ dri2_initialize_x11_dri3(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
if (!dri2_load_driver_dri3(disp))
|
||||
goto cleanup_conn;
|
||||
|
||||
dri2_dpy->extensions[0] = &dri3_image_loader_extension.base;
|
||||
dri2_dpy->extensions[1] = &use_invalidate.base;
|
||||
dri2_dpy->extensions[2] = &image_lookup_extension.base;
|
||||
dri2_dpy->extensions[3] = NULL;
|
||||
dri2_dpy->loader_extensions = dri3_image_loader_extensions;
|
||||
|
||||
dri2_dpy->swap_available = true;
|
||||
dri2_dpy->invalidate_available = true;
|
||||
|
@ -1391,6 +1400,18 @@ static const __DRIdri2LoaderExtension dri2_loader_extension = {
|
|||
.getBuffersWithFormat = dri2_x11_get_buffers_with_format,
|
||||
};
|
||||
|
||||
static const __DRIextension *dri2_loader_extensions_old[] = {
|
||||
&dri2_loader_extension_old.base,
|
||||
&image_lookup_extension.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static const __DRIextension *dri2_loader_extensions[] = {
|
||||
&dri2_loader_extension.base,
|
||||
&image_lookup_extension.base,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static EGLBoolean
|
||||
dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
|
@ -1423,12 +1444,9 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
goto cleanup_fd;
|
||||
|
||||
if (dri2_dpy->dri2_minor >= 1)
|
||||
dri2_dpy->extensions[0] = &dri2_loader_extension.base;
|
||||
dri2_dpy->loader_extensions = dri2_loader_extensions;
|
||||
else
|
||||
dri2_dpy->extensions[0] = &dri2_loader_extension_old.base;
|
||||
|
||||
dri2_dpy->extensions[1] = &image_lookup_extension.base;
|
||||
dri2_dpy->extensions[2] = NULL;
|
||||
dri2_dpy->loader_extensions = dri2_loader_extensions_old;
|
||||
|
||||
dri2_dpy->swap_available = (dri2_dpy->dri2_minor >= 2);
|
||||
dri2_dpy->invalidate_available = (dri2_dpy->dri2_minor >= 3);
|
||||
|
|
Loading…
Reference in New Issue