glx: Assign unique serial number to GLXBadFBConfig error

Since commit f39fd3dce7 a new GLX error is issued in case context creation
fails. This broke wine on certain hardware: While wine installs an error handler
to ignore this kind of error, it does not function because it expects the
dpy->request serial number of the error to be incremented since the installation
of the handler.

Workaround this by artificially increasing the request number. This also
guarantees a unique serial number for the error.

Fixes: f39fd3dce7
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3969
Signed-off-by: Bastian Beranek <bastian.beischer@rwth-aachen.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10565>
(cherry picked from commit 960c86d678)
This commit is contained in:
Bastian Beranek 2021-05-01 09:52:01 +02:00 committed by Eric Engestrom
parent 3f78ccb7ba
commit c269aa387f
2 changed files with 4 additions and 1 deletions

View file

@ -40,7 +40,7 @@
"description": "glx: Assign unique serial number to GLXBadFBConfig error",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": "f39fd3dce72eaef59ab39a23b75030ef9efc2a40"
},

View file

@ -124,6 +124,9 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config,
* somehow on the client side. clean up the server resource and panic.
*/
xcb_glx_destroy_context(c, xid);
/* increment dpy->request in order to give a unique serial number to the
* error */
XNoOp(dpy);
__glXSendError(dpy, GLXBadFBConfig, xid, 0, False);
} else {
gc->xid = xid;