egl/x11: pick the user requested screen

At the moment the user will pass the screen number via attribs, yet we
would throw that away. Reason being that the int *screen passed to
xcb_connect() is output only.

v2 (Emil):
 - split from a larger patch
 - use xcb_connect() returned screen, as fallback
 - use helper function only as needed

Reviewed-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Adam Jackson 2019-05-16 18:01:35 +01:00 committed by Marek Olšák
parent 8e991ce539
commit 4aebd86f9a
1 changed files with 15 additions and 2 deletions

View File

@ -1277,21 +1277,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,
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);
}