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
|
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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue