From 586d0c4a9b5d9779092a18a9803837082b0b2100 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 11 Jul 2024 12:26:02 -0400 Subject: [PATCH] vl/dri3: use loader's dri3 init code and delete everything else Part-of: --- src/gallium/auxiliary/meson.build | 3 ++ src/gallium/auxiliary/vl/vl_winsys_dri3.c | 47 ++--------------------- 2 files changed, 7 insertions(+), 43 deletions(-) diff --git a/src/gallium/auxiliary/meson.build b/src/gallium/auxiliary/meson.build index 7f229af3435..d3313734512 100644 --- a/src/gallium/auxiliary/meson.build +++ b/src/gallium/auxiliary/meson.build @@ -431,6 +431,7 @@ files_libgalliumvl = files( ) vlwinsys_deps = [] +vlwinsys_links = [] files_libgalliumvlwinsys = files('vl/vl_winsys.h') if host_machine.system() == 'windows' files_libgalliumvlwinsys += files('vl/vl_winsys_win32.c') @@ -444,6 +445,7 @@ if with_dri2 and with_platform_x11 dep_xcb_sync, dep_xcb_present, dep_xshmfence, dep_xcb_xfixes, dep_xcb_dri3, ] + vlwinsys_links += libloader_dri3_helper files_libgalliumvlwinsys += files('vl/vl_winsys_dri3.c') endif endif @@ -575,5 +577,6 @@ libgalliumvlwinsys = static_library( files_libgalliumvlwinsys, include_directories : [inc_gallium, inc_include, inc_loader, inc_src], dependencies : [dep_libdrm, vlwinsys_deps, idep_mesautil], + link_with : vlwinsys_links, build_by_default : false, ) diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri3.c b/src/gallium/auxiliary/vl/vl_winsys_dri3.c index 97febbccbfe..67e1449d3a6 100644 --- a/src/gallium/auxiliary/vl/vl_winsys_dri3.c +++ b/src/gallium/auxiliary/vl/vl_winsys_dri3.c @@ -34,6 +34,7 @@ #include #include "loader.h" +#include "loader_dri3_helper.h" #include "pipe/p_screen.h" #include "pipe/p_state.h" @@ -761,15 +762,10 @@ struct vl_screen * vl_dri3_screen_create(Display *display, int screen) { struct vl_dri3_screen *scrn; - const xcb_query_extension_reply_t *extension; - xcb_dri3_open_cookie_t open_cookie; - xcb_dri3_open_reply_t *open_reply; xcb_get_geometry_cookie_t geom_cookie; xcb_get_geometry_reply_t *geom_reply; - xcb_xfixes_query_version_cookie_t xfixes_cookie; - xcb_xfixes_query_version_reply_t *xfixes_reply; - xcb_generic_error_t *error; int fd; + bool err = false; assert(display); @@ -781,45 +777,10 @@ vl_dri3_screen_create(Display *display, int screen) if (!scrn->conn) goto free_screen; - xcb_prefetch_extension_data(scrn->conn , &xcb_dri3_id); - xcb_prefetch_extension_data(scrn->conn, &xcb_present_id); - xcb_prefetch_extension_data (scrn->conn, &xcb_xfixes_id); - extension = xcb_get_extension_data(scrn->conn, &xcb_dri3_id); - if (!(extension && extension->present)) - goto free_screen; - extension = xcb_get_extension_data(scrn->conn, &xcb_present_id); - if (!(extension && extension->present)) - goto free_screen; - extension = xcb_get_extension_data(scrn->conn, &xcb_xfixes_id); - if (!(extension && extension->present)) - goto free_screen; - - xfixes_cookie = xcb_xfixes_query_version(scrn->conn, XCB_XFIXES_MAJOR_VERSION, - XCB_XFIXES_MINOR_VERSION); - xfixes_reply = xcb_xfixes_query_version_reply(scrn->conn, xfixes_cookie, &error); - if (!xfixes_reply || error || xfixes_reply->major_version < 2) { - free(error); - free(xfixes_reply); + fd = loader_dri3_open(scrn->conn, RootWindow(display, screen), 0); + if (fd < 0 || !loader_dri3_check_multibuffer(scrn->conn, &err) || err) { goto free_screen; } - free(xfixes_reply); - - open_cookie = xcb_dri3_open(scrn->conn, RootWindow(display, screen), None); - open_reply = xcb_dri3_open_reply(scrn->conn, open_cookie, NULL); - if (!open_reply) - goto free_screen; - if (open_reply->nfd != 1) { - free(open_reply); - goto free_screen; - } - - fd = xcb_dri3_open_reply_fds(scrn->conn, open_reply)[0]; - if (fd < 0) { - free(open_reply); - goto free_screen; - } - fcntl(fd, F_SETFD, FD_CLOEXEC); - free(open_reply); scrn->is_different_gpu = loader_get_user_preferred_fd(&fd, NULL);