Revert "vl/dri3: use loader's dri3 init code and delete everything else"
This reverts commit586d0c4a9b
. Fixes:586d0c4a9b
("vl/dri3: use loader's dri3 init code and delete everything else") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30415>
This commit is contained in:
@@ -431,7 +431,6 @@ 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')
|
||||
@@ -445,7 +444,6 @@ 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
|
||||
@@ -577,6 +575,5 @@ 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,
|
||||
)
|
||||
|
@@ -34,7 +34,6 @@
|
||||
#include <xcb/xfixes.h>
|
||||
|
||||
#include "loader.h"
|
||||
#include "loader_dri3_helper.h"
|
||||
|
||||
#include "pipe/p_screen.h"
|
||||
#include "pipe/p_state.h"
|
||||
@@ -762,10 +761,15 @@ 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);
|
||||
|
||||
@@ -777,10 +781,45 @@ vl_dri3_screen_create(Display *display, int screen)
|
||||
if (!scrn->conn)
|
||||
goto free_screen;
|
||||
|
||||
fd = loader_dri3_open(scrn->conn, RootWindow(display, screen), 0);
|
||||
if (fd < 0 || !loader_dri3_check_multibuffer(scrn->conn, &err) || err) {
|
||||
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);
|
||||
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);
|
||||
|
||||
|
Reference in New Issue
Block a user