diff options
author | Bart Oldeman <[email protected]> | 2019-02-03 02:57:10 +0000 |
---|---|---|
committer | Dylan Baker <[email protected]> | 2019-02-12 14:19:52 -0800 |
commit | 92fa6d695935e9755e6f5cdf00138750cf164aa7 (patch) | |
tree | 4f71ab1f241dfe5e24c47febd13f287f10cc51da /src | |
parent | 5e85df1cfd53811149c99be446a1e8e103f377fa (diff) |
gallium-xlib: query MIT-SHM before using it.
When Mesa is compiled for gallium-xlib using e.g.
./configure --enable-glx=gallium-xlib --disable-dri --disable-gbm
-disable-egl
and is used by an X server (usually remotely via SSH X11 forwarding)
that does not support MIT-SHM such as XMing or MobaXterm, OpenGL
clients report error messages such as
Xlib: extension "MIT-SHM" missing on display "localhost:11.0".
ad infinitum.
The reason is that the code in src/gallium/winsys/sw/xlib uses
MIT-SHM without checking for its existence, unlike the code
in src/glx/drisw_glx.c and src/mesa/drivers/x11/xm_api.c.
I copied the same check using XQueryExtension, and tested with
glxgears on MobaXterm.
This issue was reported before here:
https://lists.freedesktop.org/archives/mesa-users/2016-July/001183.html
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
Cc: <[email protected]>
(cherry picked from commit a203eaa4f4fb672b95426289b8dad3a8998f92d7)
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/winsys/sw/xlib/xlib_sw_winsys.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c b/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c index 8753139107c..a4c1d50453b 100644 --- a/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c +++ b/src/gallium/winsys/sw/xlib/xlib_sw_winsys.c @@ -396,6 +396,7 @@ xlib_displaytarget_create(struct sw_winsys *winsys, { struct xlib_displaytarget *xlib_dt; unsigned nblocksy, size; + int ignore; xlib_dt = CALLOC_STRUCT(xlib_displaytarget); if (!xlib_dt) @@ -410,7 +411,8 @@ xlib_displaytarget_create(struct sw_winsys *winsys, xlib_dt->stride = align(util_format_get_stride(format, width), alignment); size = xlib_dt->stride * nblocksy; - if (!debug_get_option_xlib_no_shm()) { + if (!debug_get_option_xlib_no_shm() && + XQueryExtension(xlib_dt->display, "MIT-SHM", &ignore, &ignore, &ignore)) { xlib_dt->data = alloc_shm(xlib_dt, size); if (xlib_dt->data) { xlib_dt->shm = True; |