[PATCH] dri2: Don't throw an error on glXSwapBuffers() when single-buffered.

Ville Syrjälä syrjala at sci.fi
Wed Jun 1 15:16:33 PDT 2011


On Wed, Jun 01, 2011 at 02:49:03PM -0700, Eric Anholt wrote:
> This fixes piglit glx-swap-singlebuffer (but not glx-swap-pixmap,
> which hits a BadMatch elsewhere that I haven't tracked down), and the
> original bug report of glean clipFlat, which was trying to do exactly
> this.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=32589
> ---
>  hw/xfree86/dri2/dri2.c |   18 ++++++++++++++++--
>  1 files changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
> index 9ca378f..571f7cf 100644
> --- a/hw/xfree86/dri2/dri2.c
> +++ b/hw/xfree86/dri2/dri2.c
> @@ -802,9 +802,23 @@ DRI2SwapBuffers(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
>  	if (pPriv->buffers[i]->attachment == DRI2BufferBackLeft)
>  	    pSrcBuffer = (DRI2BufferPtr) pPriv->buffers[i];
>      }
> -    if (pSrcBuffer == NULL || pDestBuffer == NULL) {
> +
> +    /* From the GLX 1.4 specification page 34 (page 40 of the PDF):
> +     *
> +     *     This operation is a no-op if draw was created with a
> +     *     non-double-buffered GLXFBConfig, or if draw is a GLXPixmap.
> +     *
> +     * We interpret this as "anything with no backbuffer does nothing
> +     * for glXSwapBuffers().  See piglit glx-swap-pixmap and
> +     * glx-swap-singlebuffer.
> +     */

Shouldn't this be handled in some GLX code? Doing it client side would
also avoid the pointless X request.

> +    if (pSrcBuffer == NULL) {
> +	return Success;
> +    }
> +
> +    if (pDestBuffer == NULL) {
>          xf86DrvMsg(pScreen->myNum, X_ERROR,
> -		   "[DRI2] %s: drawable has no back or front?\n", __func__);
> +		   "[DRI2] %s: drawable has no front?\n", __func__);
>  	return BadDrawable;
>      }

The dest buffer check should happen before the src buffer check to
catch clients that attempt to swap without even a dest buffer.

-- 
Ville Syrjälä
syrjala at sci.fi
http://www.sci.fi/~syrjala/



More information about the xorg mailing list