diff options
Diffstat (limited to '0001-glx-fix-regression-for-drawable-type-detection.patch')
-rw-r--r-- | 0001-glx-fix-regression-for-drawable-type-detection.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/0001-glx-fix-regression-for-drawable-type-detection.patch b/0001-glx-fix-regression-for-drawable-type-detection.patch new file mode 100644 index 000000000000..0ff1c812a05d --- /dev/null +++ b/0001-glx-fix-regression-for-drawable-type-detection.patch @@ -0,0 +1,54 @@ +From e3ef7eedc94fe4eb2af2f79324bfaf4e56b37961 Mon Sep 17 00:00:00 2001 +From: Qiang Yu <yuq825@gmail.com> +Date: Wed, 8 Dec 2021 10:57:45 +0800 +Subject: [PATCH] glx: fix regression for drawable type detection + +Newer version of XServer supporting GLX_DRAWABLE_TYPE query also +support query with raw X11 window ID besides GLXWindow ID. So we +should not limit the suppported type to GLXPbuffer when query +success. + +Otherwise can't start GLX application on newer XServer with: + + libGL error: GLX drawable type is not supported + libGL error: GLX drawable type is not supported + X Error of failed request: GLXBadContext + Major opcode of failed request: 149 (GLX) + Minor opcode of failed request: 5 (X_GLXMakeCurrent) + Serial number of failed request: 35 + Current serial number in output stream: 35 + +Fixes: 6625c960c58 ("glx: check drawable type before create drawble") + +Signed-off-by: Qiang Yu <yuq825@gmail.com> +--- + src/glx/dri_common.c | 10 ++++------ + 1 file changed, 4 insertions(+), 6 deletions(-) + +diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c +index 0be684dda95..27e78fb3799 100644 +--- a/src/glx/dri_common.c ++++ b/src/glx/dri_common.c +@@ -392,15 +392,13 @@ driFetchDrawable(struct glx_context *gc, GLXDrawable glxDrawable) + + /* Infer the GLX drawable type. */ + if (__glXGetDrawableAttribute(dpy, glxDrawable, GLX_DRAWABLE_TYPE, &type)) { +- if (type != GLX_PBUFFER_BIT) { +- ErrorMessageF("GLX drawable type is not supported\n"); ++ /* Xserver may support query with raw X11 window. */ ++ if (type == GLX_PIXMAP_BIT) { ++ ErrorMessageF("GLXPixmap drawable type is not supported\n"); + return NULL; + } + } else { +- /* Xserver may not implement GLX_DRAWABLE_TYPE query yet, or glxDrawable +- * is a X window. Assume it's a GLXPbuffer in former case, because we don't +- * know GLXPixmap and GLXWindow's X drawable ID anyway. +- */ ++ /* Xserver may not implement GLX_DRAWABLE_TYPE query yet. */ + type = GLX_PBUFFER_BIT | GLX_WINDOW_BIT; + } + +-- +2.34.1 + |