768238fdc0
driFetchDrawable is only ever called from the MakeCurrent path, which means it has to handle the case of pre-GLX-1.3 Windows being named as the drawable. When it finds the drawable in the hash, it increments its refcount before returning it, so for a GLXWindow it would be 2 on first return, one from glXCreateWindow and one from glXMakeCurrent. But when it does not find the drawable and creates one for the naked Window, the reference count on first return would only be 1. As a result, if this context was then ever bound to a different drawable, the old Window's DRI drawable state (like the back buffer) would be destroyed. Fixes piglit's glx-multi-window-single-context and glx-make-current for a variety of drivers. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6713 Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17479> |
||
---|---|---|
.. | ||
ci | ||
meson.build | ||
sp_buffer.c | ||
sp_buffer.h | ||
sp_clear.c | ||
sp_clear.h | ||
sp_compute.c | ||
sp_context.c | ||
sp_context.h | ||
sp_draw_arrays.c | ||
sp_fence.c | ||
sp_fence.h | ||
sp_flush.c | ||
sp_flush.h | ||
sp_fs.h | ||
sp_fs_exec.c | ||
sp_image.c | ||
sp_image.h | ||
sp_limits.h | ||
sp_prim_vbuf.c | ||
sp_prim_vbuf.h | ||
sp_public.h | ||
sp_quad.h | ||
sp_quad_blend.c | ||
sp_quad_depth_test.c | ||
sp_quad_depth_test_tmp.h | ||
sp_quad_fs.c | ||
sp_quad_pipe.c | ||
sp_quad_pipe.h | ||
sp_query.c | ||
sp_query.h | ||
sp_screen.c | ||
sp_screen.h | ||
sp_setup.c | ||
sp_setup.h | ||
sp_state.h | ||
sp_state_blend.c | ||
sp_state_clip.c | ||
sp_state_derived.c | ||
sp_state_image.c | ||
sp_state_rasterizer.c | ||
sp_state_sampler.c | ||
sp_state_shader.c | ||
sp_state_so.c | ||
sp_state_surface.c | ||
sp_state_vertex.c | ||
sp_surface.c | ||
sp_surface.h | ||
sp_tex_sample.c | ||
sp_tex_sample.h | ||
sp_tex_tile_cache.c | ||
sp_tex_tile_cache.h | ||
sp_texture.c | ||
sp_texture.h | ||
sp_tile_cache.c | ||
sp_tile_cache.h |