Pauli Nieminen <[email protected]> writes: > 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]> > Reviewed-by: Jesse Barnes <[email protected]> > What's the status of this? It's been almost a year now that this change was sent for review and it hasn't gone in yet. Nouveau would *really* like this interface to keep doing our N-buffering without the current hack.
Just in case it helps to have more RBs to get this patch in: Reviewed-by: Francisco Jerez <[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 ecb4a4e..255fed0 100644 > --- a/hw/xfree86/dri2/dri2.c > +++ b/hw/xfree86/dri2/dri2.c > @@ -191,6 +191,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 531d801..3d01c55 100644 > --- a/hw/xfree86/dri2/dri2.h > +++ b/hw/xfree86/dri2/dri2.h > @@ -265,6 +265,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,
pgpKnk2kVIJCG.pgp
Description: PGP signature
_______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
