dri2: Invalidate window pixmaps

While a redirected window is flipped, its pixmap may still be used as
and EGL image and should also get invalidated. When sending invalidate
events for a window, also send the events for its pixmap.

Signed-off-by: Ville Syrjälä <syrjala@sci.fi>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Ville Syrjälä 2011-12-18 18:29:41 +02:00 committed by Keith Packard
parent e8fd23fad0
commit 4df65d247b
4 changed files with 7 additions and 5 deletions

View File

@ -423,7 +423,7 @@ __glXDRIscreenCreateContext(__GLXscreen *baseScreen,
} }
static void static void
__glXDRIinvalidateBuffers(DrawablePtr pDraw, void *priv) __glXDRIinvalidateBuffers(DrawablePtr pDraw, void *priv, XID id)
{ {
#if __DRI2_FLUSH_VERSION >= 3 #if __DRI2_FLUSH_VERSION >= 3
__GLXDRIdrawable *private = priv; __GLXDRIdrawable *private = priv;

View File

@ -587,7 +587,7 @@ DRI2InvalidateDrawable(DrawablePtr pDraw)
pPriv->needInvalidate = FALSE; pPriv->needInvalidate = FALSE;
list_for_each_entry(ref, &pPriv->reference_list, link) list_for_each_entry(ref, &pPriv->reference_list, link)
ref->invalidate(pDraw, ref->priv); ref->invalidate(pDraw, ref->priv, ref->id);
} }
/* /*
@ -958,6 +958,7 @@ DRI2SwapBuffers(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
* windows using the same pixmap * windows using the same pixmap
*/ */
TraverseTree(pWin, DRI2InvalidateWalk, pPixmap); TraverseTree(pWin, DRI2InvalidateWalk, pPixmap);
DRI2InvalidateDrawable(&pPixmap->drawable);
} else } else
DRI2InvalidateDrawable(pDraw); DRI2InvalidateDrawable(pDraw);

View File

@ -166,7 +166,8 @@ typedef int (*DRI2ScheduleWaitMSCProcPtr)(ClientPtr client,
CARD64 remainder); CARD64 remainder);
typedef void (*DRI2InvalidateProcPtr)(DrawablePtr pDraw, typedef void (*DRI2InvalidateProcPtr)(DrawablePtr pDraw,
void *data); void *data,
XID id);
/** /**
* DRI2 calls this hook when ever swap_limit is going to be changed. Default * DRI2 calls this hook when ever swap_limit is going to be changed. Default

View File

@ -156,13 +156,13 @@ ProcDRI2Authenticate(ClientPtr client)
} }
static void static void
DRI2InvalidateBuffersEvent(DrawablePtr pDraw, void *priv) DRI2InvalidateBuffersEvent(DrawablePtr pDraw, void *priv, XID id)
{ {
xDRI2InvalidateBuffers event; xDRI2InvalidateBuffers event;
ClientPtr client = priv; ClientPtr client = priv;
event.type = DRI2EventBase + DRI2_InvalidateBuffers; event.type = DRI2EventBase + DRI2_InvalidateBuffers;
event.drawable = pDraw->id; event.drawable = id;
WriteEventsToClient(client, 1, (xEvent *)&event); WriteEventsToClient(client, 1, (xEvent *)&event);
} }