swrast: Fix eglMakeCurrent(dpy, NULL, NULL, ctx) (v2)

Fixes 14 piglits, mostly in egl_khr_create_context.

v2: Also short-circuit the same-context-no-drawables case (Eric Anholt)

Fixes: https://github.com/anholt/libepoxy/issues/177
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2018-07-09 12:51:37 -04:00
parent 7205bdf41f
commit c1ec582059
1 changed files with 18 additions and 19 deletions

View File

@ -675,6 +675,9 @@ swrast_check_and_update_window_size( struct gl_context *ctx, struct gl_framebuff
{ {
GLsizei width, height; GLsizei width, height;
if (!fb)
return;
get_window_size(fb, &width, &height); get_window_size(fb, &width, &height);
if (fb->Width != width || fb->Height != height) { if (fb->Width != width || fb->Height != height) {
_mesa_resize_framebuffer(ctx, fb, width, height); _mesa_resize_framebuffer(ctx, fb, width, height);
@ -857,30 +860,26 @@ dri_make_current(__DRIcontext * cPriv,
__DRIdrawable * driReadPriv) __DRIdrawable * driReadPriv)
{ {
struct gl_context *mesaCtx; struct gl_context *mesaCtx;
struct gl_framebuffer *mesaDraw; struct gl_framebuffer *mesaDraw = NULL;
struct gl_framebuffer *mesaRead; struct gl_framebuffer *mesaRead = NULL;
TRACE; TRACE;
if (cPriv) { if (cPriv) {
struct dri_context *ctx = dri_context(cPriv); mesaCtx = &dri_context(cPriv)->Base;
struct dri_drawable *draw;
struct dri_drawable *read;
if (!driDrawPriv || !driReadPriv) if (driDrawPriv && driReadPriv) {
return GL_FALSE; struct dri_drawable *draw = dri_drawable(driDrawPriv);
struct dri_drawable *read = dri_drawable(driReadPriv);
mesaDraw = &draw->Base;
mesaRead = &read->Base;
}
draw = dri_drawable(driDrawPriv); /* check for same context and buffer */
read = dri_drawable(driReadPriv); if (mesaCtx == _mesa_get_current_context()
mesaCtx = &ctx->Base; && mesaCtx->DrawBuffer == mesaDraw
mesaDraw = &draw->Base; && mesaCtx->ReadBuffer == mesaRead) {
mesaRead = &read->Base; return GL_TRUE;
}
/* check for same context and buffer */
if (mesaCtx == _mesa_get_current_context()
&& mesaCtx->DrawBuffer == mesaDraw
&& mesaCtx->ReadBuffer == mesaRead) {
return GL_TRUE;
}
_glapi_check_multithread(); _glapi_check_multithread();