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 <eric@anholt.net> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Cc: <mesa-stable@lists.freedesktop.org>tags/19.1-branchpoint
@@ -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; |