vl/dri3: use loader's dri3 init code and delete everything else

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30128>
This commit is contained in:
Mike Blumenkrantz
2024-07-11 12:26:02 -04:00
committed by Marge Bot
parent 985e9c09f8
commit 586d0c4a9b
2 changed files with 7 additions and 43 deletions

View File

@@ -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,
)

View File

@@ -34,6 +34,7 @@
#include <xcb/xfixes.h>
#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);