[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