xserver-multidpi/glamor
Michel Dänzer 7c88977d33 glamor: Store the actual EGL/GLX context pointer in lastGLContext
Fixes subtle breakage which could sometimes trigger after a server reset
with multiple screens using glamor:

Screen A enters glamor_close_screen last and calls various cleanup
functions, which at some point call glamor_make_current to make sure
screen A's GL context is current. This sets lastGLContext to screen A's
&glamor_priv->ctx. Finally, glamor_close_screen calls
glamor_release_screen_priv, which calls free(glamor_priv).

Later, screen B enters glamor_init, which allocates a new glamor_priv.
With bad luck, this can return the same pointer which was previously
used for screen A's glamor_priv. So when screen B's glamor_init calls
glamor_make_current, lastGLContext == &glamor_priv->ctx, so MakeCurrent
isn't called for screen B's GL context, and the following OpenGL API
calls triggered by glamor_init mess up screen A's GL context.

The observed end result of this was a crash in glamor_get_vbo_space
because glamor_priv->vbo didn't match the GL context, though there might
be other possible outcomes.

Assigning the actual GL context pointer to lastGLContext prevents this
by preventing the false negative test in glamor_make_current.

Reviewed-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
2017-06-05 18:32:15 +09:00
..
glamor_addtraps.c glamor: Remove _nf rendering functions 2015-03-24 12:01:39 -07:00
glamor_composite_glyphs.c glamor: Declare "pos" in the composite glyph GLSL 1.20 vertex shader 2016-08-23 12:59:55 +09:00
glamor_compositerects.c glamor: fix wrong offset on composite rectangles 2016-04-15 16:31:36 -04:00
glamor_context.h glamor: Replace glamor_get/put_context() with just glamor_make_current(). 2014-04-23 10:32:23 -07:00
glamor_copy.c glamor: Check glamor_set_destination_drawable() return value 2017-03-15 15:41:13 -04:00
glamor_core.c glamor: Stop tracking the screen_fbo. 2017-06-02 17:46:45 -07:00
glamor_dash.c glamor: Fix dashed line rendering. 2017-03-16 11:30:58 -07:00
glamor_debug.h glamor: Remove the "delayed fallback" code. 2017-06-02 17:46:48 -07:00
glamor_egl_stubs.c glamor: Delay making pixmaps shareable until we need to. 2015-11-18 10:04:44 -08:00
glamor_egl.c glamor: Drop glamor_set_screen_pixmap(). 2017-06-02 17:46:46 -07:00
glamor_egl.h glamor: Squash unused variable warning 2017-01-02 15:38:45 -05:00
glamor_eglmodule.c Fix files including xorg-server.h by mistake 2014-07-30 12:17:27 -07:00
glamor_fbo.c glamor: avoid a crash if texture allocation failed 2017-03-17 13:17:31 -07:00
glamor_font.c dix: Switch to the libXfont2 API (v2) 2016-07-18 15:25:59 -04:00
glamor_font.h glamor: store old fonts in double width textures. 2016-01-13 11:21:02 +10:00
glamor_glx.c glamor: Do the same MakeCurrent(None) for GLX as we do for EGL. 2014-04-23 10:32:32 -07:00
glamor_glyphblt.c glamor: Check glamor_set_destination_drawable() return value 2017-03-15 15:41:13 -04:00
glamor_gradient.c glamor: fix spelling mistakes 2016-09-25 10:40:08 -07:00
glamor_image.c glamor: Avoid software fallback for planemasked ZPixmap GetImage 2017-03-20 13:48:40 -04:00
glamor_largepixmap.c glamor: fix spelling mistakes 2016-09-25 10:40:08 -07:00
glamor_lines.c glamor: Check glamor_set_destination_drawable() return value 2017-03-15 15:41:13 -04:00
glamor_picture.c glamor: Replace "finish access" shader with texture swizzling. 2016-03-10 11:12:43 -05:00
glamor_pixmap.c glamor: Move glamor_render.c pict handling to glamor_picture.c 2015-07-10 09:42:58 -07:00
glamor_points.c glamor: Check glamor_set_destination_drawable() return value 2017-03-15 15:41:13 -04:00
glamor_prepare.c glamor: make current in prepare paths 2015-07-16 10:57:00 -07:00
glamor_prepare.h glamor: Replace fallback preparation code 2014-06-15 22:02:40 +01:00
glamor_priv.h glamor: Remove the "delayed fallback" code. 2017-06-02 17:46:48 -07:00
glamor_program.c glamor: Fix link failure on GLES2. 2016-09-29 09:11:12 -07:00
glamor_program.h glamor: Add support for CA rendering in a single pass. 2016-01-26 12:02:42 -08:00
glamor_rects.c glamor: Check glamor_set_destination_drawable() return value 2017-03-15 15:41:13 -04:00
glamor_render.c glamor: Two pass won't work on memory pixmaps 2017-01-24 11:27:33 -08:00
glamor_segs.c glamor: Check glamor_set_destination_drawable() return value 2017-03-15 15:41:13 -04:00
glamor_spans.c glamor: Check glamor_set_destination_drawable() return value 2017-03-15 15:41:13 -04:00
glamor_sync.c glamor: Make glamor_sync_init work with --disable-xshmfence 2016-09-25 11:00:24 -07:00
glamor_text.c glamor: Translate solid text background region after clipping 2016-07-15 12:59:43 -04:00
glamor_transfer.c glamor: Preserve GL_RED bits in R channel when destination is GL_RED [v2] 2016-05-26 09:17:59 -07:00
glamor_transfer.h glamor: Add simple upload/download functions in glamor_transfer 2014-04-03 13:07:51 -07:00
glamor_transform.c glamor: glamor_set_destination_drawable() can fail 2017-03-15 15:41:12 -04:00
glamor_transform.h glamor: glamor_set_destination_drawable() can fail 2017-03-15 15:41:12 -04:00
glamor_trapezoid.c glamor: Remove _nf rendering functions 2015-03-24 12:01:39 -07:00
glamor_triangles.c glamor: Remove _nf rendering functions 2015-03-24 12:01:39 -07:00
glamor_utils.c Convert glamor & glx to new *allocarray functions 2015-04-21 16:58:08 -07:00
glamor_utils.h glamor: Store the actual EGL/GLX context pointer in lastGLContext 2017-06-05 18:32:15 +09:00
glamor_vbo.c glamor: Use vertex array objects 2016-01-21 06:49:40 +10:00
glamor_window.c glamor: Drop tracking of the last picture attached to pixmaps. 2015-07-10 09:42:58 -07:00
glamor_xv.c glamor: an FBO is not needed for Xv pixmaps 2017-04-21 11:53:13 -07:00
glamor.c glamor: Drop glamor_set_screen_pixmap(). 2017-06-02 17:46:46 -07:00
glamor.h glamor: Drop glamor_set_screen_pixmap(). 2017-06-02 17:46:46 -07:00
Makefile.am glamor: Use eglGetPlatformDisplay{,EXT} if we can 2016-10-05 16:03:13 -04:00
meson.build Add a Meson build system alongside autotools. 2017-04-26 15:25:27 -07:00