[PATCH v2 4/5] DRI2: Expose API to set drawable swap limit.
Francisco Jerez
currojerez at riseup.net
Sat Sep 10 05:58:16 PDT 2011
Pauli Nieminen <ext-pauli.nieminen at nokia.com> 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 <ext-pauli.nieminen at nokia.com>
> Reviewed-by: Jesse Barnes <jbarnes at virtuousgeek.org>
>
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 <currojerez at riseup.net>
> ---
> 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,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 229 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20110910/59b52814/attachment.pgp>
More information about the xorg-devel
mailing list