X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fegl%2Fdrivers%2Fdri2%2Fplatform_x11.c;h=96a8a88d725da7a58b11cc482c489968be3ad433;hp=88040bda6e65767c63f918aa68c01634effbaccb;hb=8b2fc1d1b5a822692321af1a2a01dddbc9cff356;hpb=d6a6760139c5301544636cd23e014db11559d25a diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index 88040bda6e6..96a8a88d725 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -42,9 +42,9 @@ #include #include "util/debug.h" #include "util/macros.h" +#include "util/bitscan.h" #include "egl_dri2.h" -#include "egl_dri2_fallbacks.h" #include "loader.h" #ifdef HAVE_DRI3 @@ -52,8 +52,7 @@ #endif static EGLBoolean -dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, - EGLint interval); +dri2_x11_swap_interval(_EGLDisplay *disp, _EGLSurface *surf, EGLint interval); uint32_t dri2_format_for_depth(struct dri2_egl_display *dri2_dpy, uint32_t depth); @@ -244,12 +243,11 @@ dri2_x11_get_red_mask_for_depth(struct dri2_egl_display *dri2_dpy, int depth) } /** - * Called via eglCreateWindowSurface(), drv->API.CreateWindowSurface(). + * Called via eglCreateWindowSurface(), drv->CreateWindowSurface(). */ static _EGLSurface * -dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, - _EGLConfig *conf, void *native_surface, - const EGLint *attrib_list) +dri2_x11_create_surface(_EGLDisplay *disp, EGLint type, _EGLConfig *conf, + void *native_surface, const EGLint *attrib_list) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_config *dri2_conf = dri2_egl_config(conf); @@ -259,15 +257,14 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, xcb_generic_error_t *error; const __DRIconfig *config; - (void) drv; - - dri2_surf = malloc(sizeof *dri2_surf); + dri2_surf = calloc(1, sizeof *dri2_surf); if (!dri2_surf) { _eglError(EGL_BAD_ALLOC, "dri2_create_surface"); return NULL; } - if (!dri2_init_surface(&dri2_surf->base, disp, type, conf, attrib_list, false)) + if (!dri2_init_surface(&dri2_surf->base, disp, type, conf, attrib_list, + false, native_surface)) goto cleanup_surf; dri2_surf->region = XCB_NONE; @@ -289,21 +286,8 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, goto cleanup_pixmap; } - if (dri2_dpy->dri2) { - dri2_surf->dri_drawable = - dri2_dpy->dri2->createNewDrawable(dri2_dpy->dri_screen, config, - dri2_surf); - } else { - assert(dri2_dpy->swrast); - dri2_surf->dri_drawable = - dri2_dpy->swrast->createNewDrawable(dri2_dpy->dri_screen, config, - dri2_surf); - } - - if (dri2_surf->dri_drawable == NULL) { - _eglError(EGL_BAD_ALLOC, "dri2->createNewDrawable"); + if (!dri2_create_drawable(dri2_dpy, config, dri2_surf, dri2_surf)) goto cleanup_pixmap; - } if (type != EGL_PBUFFER_BIT) { cookie = xcb_get_geometry (dri2_dpy->conn, dri2_surf->drawable); @@ -350,7 +334,7 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, } } else { if (type == EGL_PBUFFER_BIT) { - dri2_surf->depth = _eglGetConfigKey(conf, EGL_BUFFER_SIZE); + dri2_surf->depth = conf->BufferSize; } swrastCreateDrawable(dri2_dpy, dri2_surf); } @@ -372,17 +356,16 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type, } /** - * Called via eglCreateWindowSurface(), drv->API.CreateWindowSurface(). + * Called via eglCreateWindowSurface(), drv->CreateWindowSurface(). */ static _EGLSurface * -dri2_x11_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, - _EGLConfig *conf, void *native_window, - const EGLint *attrib_list) +dri2_x11_create_window_surface(_EGLDisplay *disp, _EGLConfig *conf, + void *native_window, const EGLint *attrib_list) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); _EGLSurface *surf; - surf = dri2_x11_create_surface(drv, disp, EGL_WINDOW_BIT, conf, + surf = dri2_x11_create_surface(disp, EGL_WINDOW_BIT, conf, native_window, attrib_list); if (surf != NULL) { /* When we first create the DRI2 drawable, its swap interval on the @@ -391,37 +374,34 @@ dri2_x11_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, surf->SwapInterval = 1; /* Override that with a driconf-set value. */ - dri2_x11_swap_interval(drv, disp, surf, dri2_dpy->default_swap_interval); + dri2_x11_swap_interval(disp, surf, dri2_dpy->default_swap_interval); } return surf; } static _EGLSurface * -dri2_x11_create_pixmap_surface(_EGLDriver *drv, _EGLDisplay *disp, - _EGLConfig *conf, void *native_pixmap, - const EGLint *attrib_list) +dri2_x11_create_pixmap_surface(_EGLDisplay *disp, _EGLConfig *conf, + void *native_pixmap, const EGLint *attrib_list) { - return dri2_x11_create_surface(drv, disp, EGL_PIXMAP_BIT, conf, + return dri2_x11_create_surface(disp, EGL_PIXMAP_BIT, conf, native_pixmap, attrib_list); } static _EGLSurface * -dri2_x11_create_pbuffer_surface(_EGLDriver *drv, _EGLDisplay *disp, - _EGLConfig *conf, const EGLint *attrib_list) +dri2_x11_create_pbuffer_surface(_EGLDisplay *disp, _EGLConfig *conf, + const EGLint *attrib_list) { - return dri2_x11_create_surface(drv, disp, EGL_PBUFFER_BIT, conf, + return dri2_x11_create_surface(disp, EGL_PBUFFER_BIT, conf, NULL, attrib_list); } static EGLBoolean -dri2_x11_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf) +dri2_x11_destroy_surface(_EGLDisplay *disp, _EGLSurface *surf) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); - (void) drv; - dri2_dpy->core->destroyDrawable(dri2_surf->dri_drawable); if (dri2_dpy->dri2) { @@ -449,11 +429,10 @@ dri2_x11_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf) * have. */ static EGLBoolean -dri2_query_surface(_EGLDriver *drv, _EGLDisplay *dpy, - _EGLSurface *surf, EGLint attribute, - EGLint *value) +dri2_query_surface(_EGLDisplay *disp, _EGLSurface *surf, + EGLint attribute, EGLint *value) { - struct dri2_egl_display *dri2_dpy = dri2_egl_display(dpy); + struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); int x, y, w, h; @@ -470,7 +449,7 @@ dri2_query_surface(_EGLDriver *drv, _EGLDisplay *dpy, default: break; } - return _eglQuerySurface(drv, dpy, surf, attribute, value); + return _eglQuerySurface(disp, surf, attribute, value); } /** @@ -806,16 +785,23 @@ dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy, EGL_NONE }; - unsigned int rgba_masks[4] = { - visuals[i].red_mask, - visuals[i].green_mask, - visuals[i].blue_mask, + int rgba_shifts[4] = { + ffs(visuals[i].red_mask) - 1, + ffs(visuals[i].green_mask) - 1, + ffs(visuals[i].blue_mask) - 1, + -1, + }; + + unsigned int rgba_sizes[4] = { + util_bitcount(visuals[i].red_mask), + util_bitcount(visuals[i].green_mask), + util_bitcount(visuals[i].blue_mask), 0, }; dri2_conf = dri2_add_config(disp, config, config_count + 1, surface_type, config_attrs, - rgba_masks); + rgba_shifts, rgba_sizes); if (dri2_conf) if (dri2_conf->base.ConfigID == config_count + 1) config_count++; @@ -829,11 +815,14 @@ dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy, * wants... especially on drivers that only have 32-bit RGBA * EGLConfigs! */ if (d.data->depth == 24 || d.data->depth == 30) { - rgba_masks[3] = - ~(rgba_masks[0] | rgba_masks[1] | rgba_masks[2]); + unsigned int rgba_mask = ~(visuals[i].red_mask | + visuals[i].green_mask | + visuals[i].blue_mask); + rgba_shifts[3] = ffs(rgba_mask) - 1; + rgba_sizes[3] = util_bitcount(rgba_mask); dri2_conf = dri2_add_config(disp, config, config_count + 1, surface_type, config_attrs, - rgba_masks); + rgba_shifts, rgba_sizes); if (dri2_conf) if (dri2_conf->base.ConfigID == config_count + 1) config_count++; @@ -853,7 +842,7 @@ dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy, } static EGLBoolean -dri2_copy_region(_EGLDriver *drv, _EGLDisplay *disp, +dri2_copy_region(_EGLDisplay *disp, _EGLSurface *draw, xcb_xfixes_region_t region) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); @@ -883,7 +872,7 @@ dri2_copy_region(_EGLDriver *drv, _EGLDisplay *disp, } static int64_t -dri2_x11_swap_buffers_msc(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw, +dri2_x11_swap_buffers_msc(_EGLDisplay *disp, _EGLSurface *draw, int64_t msc, int64_t divisor, int64_t remainder) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); @@ -899,7 +888,7 @@ dri2_x11_swap_buffers_msc(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw, int64_t swap_count = -1; if (draw->SwapBehavior == EGL_BUFFER_PRESERVED || !dri2_dpy->swap_available) { - swap_count = dri2_copy_region(drv, disp, draw, dri2_surf->region) ? 0 : -1; + swap_count = dri2_copy_region(disp, draw, dri2_surf->region) ? 0 : -1; } else { dri2_flush_drawable_for_swapbuffers(disp, draw); @@ -933,7 +922,7 @@ dri2_x11_swap_buffers_msc(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw, } static EGLBoolean -dri2_x11_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw) +dri2_x11_swap_buffers(_EGLDisplay *disp, _EGLSurface *draw) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw); @@ -943,7 +932,7 @@ dri2_x11_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw) return EGL_TRUE; } - if (dri2_x11_swap_buffers_msc(drv, disp, draw, 0, 0, 0) == -1) { + if (dri2_x11_swap_buffers_msc(disp, draw, 0, 0, 0) == -1) { /* Swap failed with a window drawable. */ return _eglError(EGL_BAD_NATIVE_WINDOW, __func__); } @@ -951,8 +940,7 @@ dri2_x11_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw) } static EGLBoolean -dri2_x11_swap_buffers_region(_EGLDriver *drv, _EGLDisplay *disp, - _EGLSurface *draw, +dri2_x11_swap_buffers_region(_EGLDisplay *disp, _EGLSurface *draw, EGLint numRects, const EGLint *rects) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); @@ -962,7 +950,7 @@ dri2_x11_swap_buffers_region(_EGLDriver *drv, _EGLDisplay *disp, xcb_rectangle_t rectangles[16]; if (numRects > (int)ARRAY_SIZE(rectangles)) - return dri2_copy_region(drv, disp, draw, dri2_surf->region); + return dri2_copy_region(disp, draw, dri2_surf->region); for (int i = 0; i < numRects; i++) { rectangles[i].x = rects[i * 4]; @@ -973,27 +961,26 @@ dri2_x11_swap_buffers_region(_EGLDriver *drv, _EGLDisplay *disp, region = xcb_generate_id(dri2_dpy->conn); xcb_xfixes_create_region(dri2_dpy->conn, region, numRects, rectangles); - ret = dri2_copy_region(drv, disp, draw, region); + ret = dri2_copy_region(disp, draw, region); xcb_xfixes_destroy_region(dri2_dpy->conn, region); return ret; } static EGLBoolean -dri2_x11_post_sub_buffer(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw, - EGLint x, EGLint y, EGLint width, EGLint height) +dri2_x11_post_sub_buffer(_EGLDisplay *disp, _EGLSurface *draw, + EGLint x, EGLint y, EGLint width, EGLint height) { const EGLint rect[4] = { x, y, width, height }; if (x < 0 || y < 0 || width < 0 || height < 0) _eglError(EGL_BAD_PARAMETER, "eglPostSubBufferNV"); - return dri2_x11_swap_buffers_region(drv, disp, draw, 1, rect); + return dri2_x11_swap_buffers_region(disp, draw, 1, rect); } static EGLBoolean -dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, - EGLint interval) +dri2_x11_swap_interval(_EGLDisplay *disp, _EGLSurface *surf, EGLint interval) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); @@ -1005,8 +992,7 @@ dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, } static EGLBoolean -dri2_x11_copy_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, - void *native_pixmap_target) +dri2_x11_copy_buffers(_EGLDisplay *disp, _EGLSurface *surf, void *native_pixmap_target) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); @@ -1016,8 +1002,6 @@ dri2_x11_copy_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, STATIC_ASSERT(sizeof(uintptr_t) == sizeof(native_pixmap_target)); target = (uintptr_t) native_pixmap_target; - (void) drv; - dri2_dpy->flush->flush(dri2_surf->dri_drawable); gc = xcb_generate_id(dri2_dpy->conn); @@ -1136,17 +1120,14 @@ dri2_create_image_khr_pixmap(_EGLDisplay *disp, _EGLContext *ctx, } static _EGLImage * -dri2_x11_create_image_khr(_EGLDriver *drv, _EGLDisplay *disp, - _EGLContext *ctx, EGLenum target, - EGLClientBuffer buffer, const EGLint *attr_list) +dri2_x11_create_image_khr(_EGLDisplay *disp, _EGLContext *ctx, EGLenum target, + EGLClientBuffer buffer, const EGLint *attr_list) { - (void) drv; - switch (target) { case EGL_NATIVE_PIXMAP_KHR: return dri2_create_image_khr_pixmap(disp, ctx, buffer, attr_list); default: - return dri2_create_image_khr(drv, disp, ctx, target, buffer, attr_list); + return dri2_create_image_khr(disp, ctx, target, buffer, attr_list); } } @@ -1182,15 +1163,8 @@ static const struct dri2_egl_display_vtbl dri2_x11_swrast_display_vtbl = { .destroy_surface = dri2_x11_destroy_surface, .create_image = dri2_create_image_khr, .swap_buffers = dri2_x11_swap_buffers, - .set_damage_region = dri2_fallback_set_damage_region, - .swap_buffers_region = dri2_fallback_swap_buffers_region, - .post_sub_buffer = dri2_fallback_post_sub_buffer, /* XXX: should really implement this since X11 has pixmaps */ - .copy_buffers = dri2_fallback_copy_buffers, - .query_buffer_age = dri2_fallback_query_buffer_age, .query_surface = dri2_query_surface, - .create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image, - .get_sync_values = dri2_fallback_get_sync_values, .get_dri_drawable = dri2_surface_get_dri_drawable, }; @@ -1203,14 +1177,10 @@ static const struct dri2_egl_display_vtbl dri2_x11_display_vtbl = { .create_image = dri2_x11_create_image_khr, .swap_interval = dri2_x11_swap_interval, .swap_buffers = dri2_x11_swap_buffers, - .swap_buffers_with_damage = dri2_fallback_swap_buffers_with_damage, .swap_buffers_region = dri2_x11_swap_buffers_region, - .set_damage_region = dri2_fallback_set_damage_region, .post_sub_buffer = dri2_x11_post_sub_buffer, .copy_buffers = dri2_x11_copy_buffers, - .query_buffer_age = dri2_fallback_query_buffer_age, .query_surface = dri2_query_surface, - .create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image, .get_sync_values = dri2_x11_get_sync_values, .get_dri_drawable = dri2_surface_get_dri_drawable, }; @@ -1229,21 +1199,34 @@ static const __DRIextension *swrast_loader_extensions[] = { NULL, }; +static int +dri2_find_screen_for_display(const _EGLDisplay *disp, int fallback_screen) +{ + const EGLAttrib *attr; + + for (attr = disp->Options.Attribs; attr; attr += 2) { + if (attr[0] == EGL_PLATFORM_X11_SCREEN_EXT) + return attr[1]; + } + + return fallback_screen; +} + static EGLBoolean -dri2_get_xcb_connection(_EGLDriver *drv, _EGLDisplay *disp, +dri2_get_xcb_connection(_EGLDisplay *disp, struct dri2_egl_display *dri2_dpy) { xcb_screen_iterator_t s; - int screen = (uintptr_t)disp->Options.Platform; + int screen; const char *msg; disp->DriverData = (void *) dri2_dpy; if (disp->PlatformDisplay == NULL) { dri2_dpy->conn = xcb_connect(NULL, &screen); dri2_dpy->own_device = true; + screen = dri2_find_screen_for_display(disp, screen); } else { Display *dpy = disp->PlatformDisplay; - dri2_dpy->conn = XGetXCBConnection(dpy); screen = DefaultScreen(dpy); } @@ -1269,8 +1252,9 @@ disconnect: } static EGLBoolean -dri2_initialize_x11_swrast(_EGLDriver *drv, _EGLDisplay *disp) +dri2_initialize_x11_swrast(_EGLDisplay *disp) { + _EGLDevice *dev; struct dri2_egl_display *dri2_dpy; dri2_dpy = calloc(1, sizeof *dri2_dpy); @@ -1278,9 +1262,17 @@ dri2_initialize_x11_swrast(_EGLDriver *drv, _EGLDisplay *disp) return _eglError(EGL_BAD_ALLOC, "eglInitialize"); dri2_dpy->fd = -1; - if (!dri2_get_xcb_connection(drv, disp, dri2_dpy)) + if (!dri2_get_xcb_connection(disp, dri2_dpy)) goto cleanup; + dev = _eglAddDevice(dri2_dpy->fd, true); + if (!dev) { + _eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice"); + goto cleanup; + } + + disp->Device = dev; + /* * Every hardware driver_name is set using strdup. Doing the same in * here will allow is to simply free the memory at dri2_terminate(). @@ -1347,8 +1339,9 @@ static const __DRIextension *dri3_image_loader_extensions[] = { }; static EGLBoolean -dri2_initialize_x11_dri3(_EGLDriver *drv, _EGLDisplay *disp) +dri2_initialize_x11_dri3(_EGLDisplay *disp) { + _EGLDevice *dev; struct dri2_egl_display *dri2_dpy; dri2_dpy = calloc(1, sizeof *dri2_dpy); @@ -1356,12 +1349,20 @@ dri2_initialize_x11_dri3(_EGLDriver *drv, _EGLDisplay *disp) return _eglError(EGL_BAD_ALLOC, "eglInitialize"); dri2_dpy->fd = -1; - if (!dri2_get_xcb_connection(drv, disp, dri2_dpy)) + if (!dri2_get_xcb_connection(disp, dri2_dpy)) goto cleanup; if (!dri3_x11_connect(dri2_dpy)) goto cleanup; + dev = _eglAddDevice(dri2_dpy->fd, false); + if (!dev) { + _eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice"); + goto cleanup; + } + + disp->Device = dev; + if (!dri2_load_driver_dri3(disp)) goto cleanup; @@ -1385,8 +1386,9 @@ dri2_initialize_x11_dri3(_EGLDriver *drv, _EGLDisplay *disp) disp->Extensions.NOK_texture_from_pixmap = EGL_TRUE; disp->Extensions.CHROMIUM_sync_control = EGL_TRUE; disp->Extensions.EXT_buffer_age = EGL_TRUE; + disp->Extensions.EXT_swap_buffers_with_damage = EGL_TRUE; - dri2_set_WL_bind_wayland_display(drv, disp); + dri2_set_WL_bind_wayland_display(disp); if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp, false)) goto cleanup; @@ -1445,8 +1447,9 @@ static const __DRIextension *dri2_loader_extensions[] = { }; static EGLBoolean -dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp) +dri2_initialize_x11_dri2(_EGLDisplay *disp) { + _EGLDevice *dev; struct dri2_egl_display *dri2_dpy; dri2_dpy = calloc(1, sizeof *dri2_dpy); @@ -1454,12 +1457,20 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp) return _eglError(EGL_BAD_ALLOC, "eglInitialize"); dri2_dpy->fd = -1; - if (!dri2_get_xcb_connection(drv, disp, dri2_dpy)) + if (!dri2_get_xcb_connection(disp, dri2_dpy)) goto cleanup; if (!dri2_x11_connect(dri2_dpy)) goto cleanup; + dev = _eglAddDevice(dri2_dpy->fd, false); + if (!dev) { + _eglError(EGL_NOT_INITIALIZED, "DRI2: failed to find EGLDevice"); + goto cleanup; + } + + disp->Device = dev; + if (!dri2_load_driver(disp)) goto cleanup; @@ -1487,7 +1498,7 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp) disp->Extensions.NV_post_sub_buffer = EGL_TRUE; disp->Extensions.CHROMIUM_sync_control = EGL_TRUE; - dri2_set_WL_bind_wayland_display(drv, disp); + dri2_set_WL_bind_wayland_display(disp); if (!dri2_x11_add_configs_for_visuals(dri2_dpy, disp, true)) goto cleanup; @@ -1507,22 +1518,22 @@ dri2_initialize_x11_dri2(_EGLDriver *drv, _EGLDisplay *disp) } EGLBoolean -dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp) +dri2_initialize_x11(_EGLDisplay *disp) { EGLBoolean initialized = EGL_FALSE; if (!disp->Options.ForceSoftware) { #ifdef HAVE_DRI3 if (!env_var_as_boolean("LIBGL_DRI3_DISABLE", false)) - initialized = dri2_initialize_x11_dri3(drv, disp); + initialized = dri2_initialize_x11_dri3(disp); #endif if (!initialized) - initialized = dri2_initialize_x11_dri2(drv, disp); + initialized = dri2_initialize_x11_dri2(disp); } if (!initialized) - initialized = dri2_initialize_x11_swrast(drv, disp); + initialized = dri2_initialize_x11_swrast(disp); return initialized; }