diff options
Diffstat (limited to 'xorg-server/hw/xfree86/dri2/dri2.c')
-rw-r--r-- | xorg-server/hw/xfree86/dri2/dri2.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/xorg-server/hw/xfree86/dri2/dri2.c b/xorg-server/hw/xfree86/dri2/dri2.c index 5c42a51df..bf7ebb9f8 100644 --- a/xorg-server/hw/xfree86/dri2/dri2.c +++ b/xorg-server/hw/xfree86/dri2/dri2.c @@ -83,6 +83,7 @@ typedef struct _DRI2Drawable { CARD64 last_swap_ust; /* ust at completion of most recent swap */ int swap_limit; /* for N-buffering */ unsigned long serialNumber; + Bool needInvalidate; } DRI2DrawableRec, *DRI2DrawablePtr; typedef struct _DRI2Screen { @@ -497,6 +498,8 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, DRI2BufferFrontLeft); } + pPriv->needInvalidate = TRUE; + return pPriv->buffers; err_out: @@ -540,9 +543,11 @@ DRI2InvalidateDrawable(DrawablePtr pDraw) DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw); DRI2DrawableRefPtr ref; - if (!pPriv) + if (!pPriv || !pPriv->needInvalidate) return; + pPriv->needInvalidate = FALSE; + list_for_each_entry(ref, &pPriv->reference_list, link) ref->invalidate(pDraw, ref->priv); } |