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:
parent
e8fd23fad0
commit
4df65d247b
|
@ -423,7 +423,7 @@ __glXDRIscreenCreateContext(__GLXscreen *baseScreen,
|
|||
}
|
||||
|
||||
static void
|
||||
__glXDRIinvalidateBuffers(DrawablePtr pDraw, void *priv)
|
||||
__glXDRIinvalidateBuffers(DrawablePtr pDraw, void *priv, XID id)
|
||||
{
|
||||
#if __DRI2_FLUSH_VERSION >= 3
|
||||
__GLXDRIdrawable *private = priv;
|
||||
|
|
|
@ -587,7 +587,7 @@ DRI2InvalidateDrawable(DrawablePtr pDraw)
|
|||
pPriv->needInvalidate = FALSE;
|
||||
|
||||
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
|
||||
*/
|
||||
TraverseTree(pWin, DRI2InvalidateWalk, pPixmap);
|
||||
DRI2InvalidateDrawable(&pPixmap->drawable);
|
||||
} else
|
||||
DRI2InvalidateDrawable(pDraw);
|
||||
|
||||
|
|
|
@ -166,7 +166,8 @@ typedef int (*DRI2ScheduleWaitMSCProcPtr)(ClientPtr client,
|
|||
CARD64 remainder);
|
||||
|
||||
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
|
||||
|
|
|
@ -156,13 +156,13 @@ ProcDRI2Authenticate(ClientPtr client)
|
|||
}
|
||||
|
||||
static void
|
||||
DRI2InvalidateBuffersEvent(DrawablePtr pDraw, void *priv)
|
||||
DRI2InvalidateBuffersEvent(DrawablePtr pDraw, void *priv, XID id)
|
||||
{
|
||||
xDRI2InvalidateBuffers event;
|
||||
ClientPtr client = priv;
|
||||
|
||||
event.type = DRI2EventBase + DRI2_InvalidateBuffers;
|
||||
event.drawable = pDraw->id;
|
||||
event.drawable = id;
|
||||
|
||||
WriteEventsToClient(client, 1, (xEvent *)&event);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user