On Mon, 25 Oct 2010 17:13:55 +0300 Pauli Nieminen <[email protected]> wrote:
> This allows ddx to set swap_limit if there is more than one back > buffer for drawable. Setting swap_limit has to also check if change > affects a client that is blocked. > > This can be used to implement N-buffering in driver with minimal > logic in allocation and selecting next back. > > Signed-off-by: Pauli Nieminen <[email protected]> > Tested-by: Francisco Jerez <[email protected]> > CC: Kristian Høgsberg <[email protected]> > CC: Jesse Barnes <[email protected]> > --- > hw/xfree86/dri2/dri2.c | 23 +++++++++++++++++++++++ > hw/xfree86/dri2/dri2.h | 1 + > 2 files changed, 24 insertions(+), 0 deletions(-) > > diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c > index 34f735f..c96eb35 100644 > --- a/hw/xfree86/dri2/dri2.c > +++ b/hw/xfree86/dri2/dri2.c > @@ -190,6 +190,29 @@ DRI2AllocateDrawable(DrawablePtr pDraw) > return pPriv; > } > > +Bool > +DRI2SwapLimit(DrawablePtr pDraw, int swap_limit) > +{ > + DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw); > + if (!pPriv) > + return FALSE; > + > + pPriv->swap_limit = swap_limit; > + > + /* Check throttling */ > + if (pPriv->swapsPending >= pPriv->swap_limit) > + return TRUE; > + > + if (pPriv->target_sbc == -1 && !pPriv->blockedOnMsc) { > + if (pPriv->blockedClient) { > + AttendClient(pPriv->blockedClient); > + pPriv->blockedClient = NULL; > + } > + } > + > + return TRUE; > +} > + > typedef struct DRI2DrawableRefRec { > XID id; > XID dri2_id; > diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h > index fe0bf6c..0e0bea4 100644 > --- a/hw/xfree86/dri2/dri2.h > +++ b/hw/xfree86/dri2/dri2.h > @@ -251,6 +251,7 @@ extern _X_EXPORT DRI2BufferPtr > *DRI2GetBuffersWithFormat(DrawablePtr pDraw, > int *out_count); > > extern _X_EXPORT void DRI2SwapInterval(DrawablePtr pDrawable, int interval); > +extern _X_EXPORT Bool DRI2SwapLimit(DrawablePtr pDraw, int swap_limit); > extern _X_EXPORT int DRI2SwapBuffers(ClientPtr client, DrawablePtr pDrawable, > CARD64 target_msc, CARD64 divisor, > CARD64 remainder, CARD64 *swap_target, I think this is ok, but I'd like Mario to ack it as well; I think we can still get into trouble if multiple clients are sharing a drawable and doing waits on it. -- Jesse Barnes, Intel Open Source Technology Center _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
