[PATCH 1/5] winex11: Use GLX_OML_sync_control to synchronise buffer swaps with X11DRV_FLUSH_GL_DRAWABLE requests.

Ken Thomases ken at codeweavers.com
Thu Mar 23 17:26:07 CDT 2017


On Mar 23, 2017, at 4:49 PM, Henri Verbeet <hverbeet at codeweavers.com> wrote:
> 
> @@ -3330,17 +3343,26 @@ static BOOL glxdrv_wglSwapBuffers( HDC hdc )
>                                    gl->rect.right - gl->rect.left, gl->rect.bottom - gl->rect.top );
>             break;
>         }
> -        pglXSwapBuffers(gdi_display, gl->drawable);
> +        if (pglXSwapBuffersMscOML)
> +            target_sbc = pglXSwapBuffersMscOML( gdi_display, gl->drawable, 0, 0, 0 );
> +        else
> +            pglXSwapBuffers( gdi_display, gl->drawable );
>         break;
>     case DC_GL_CHILD_WIN:
>         if (ctx) sync_context( ctx );
>         escape.gl_drawable = gl->window;
>         /* fall through */
>     default:
> -        pglXSwapBuffers(gdi_display, gl->drawable);
> +        if (pglXSwapBuffersMscOML)
> +            target_sbc = pglXSwapBuffersMscOML( gdi_display, gl->drawable, 0, 0, 0 );
> +        else
> +            pglXSwapBuffers( gdi_display, gl->drawable );
>         break;
>     }
> 
> +    if (escape.gl_drawable && pglXWaitForSbcOML)
> +        pglXWaitForSbcOML( gdi_display, gl->drawable, target_sbc, &ust, &msc, &sbc );
> +
>     release_gl_drawable( gl );
> 
>     if (escape.gl_drawable) ExtEscape( ctx->hdc, X11DRV_ESCAPE, sizeof(escape), (LPSTR)&escape, 0, NULL );

According to the spec <https://www.khronos.org/registry/OpenGL/extensions/OML/GLX_OML_sync_control.txt>, glXSwapBuffersMscOML() does not perform an implicit glFlush() as glXSwapBuffers() does.  Also, there's no indication that 
glXWaitForSbcOML() performs one either, although it sort of seems like it should.  Is that a problem?

-Ken




More information about the wine-devel mailing list