[PATCH v2 5/5] DRI2: Allow DDX to validate swap_limit changes
Mario Kleiner
mario.kleiner at tuebingen.mpg.de
Wed Nov 3 08:06:35 PDT 2010
The whole patch series looks now good to me. For all of them:
Reviewed-by: Mario Kleiner <mario.kleiner at tuebingen.mpg.de>
thanks,
-mario
On Nov 1, 2010, at 3:22 PM, Pauli Nieminen wrote:
> DDX can now implement validation for swap_limit changes to prevent
> configurations that are not support in driver.
>
> Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
> CC: Mario Kleiner <mario.kleiner at tuebingen.mpg.de>
> ---
> hw/xfree86/dri2/dri2.c | 18 +++++++++++++++++-
> hw/xfree86/dri2/dri2.h | 14 ++++++++++++++
> 2 files changed, 31 insertions(+), 1 deletions(-)
>
> diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
> index 255fed0..7c6a0e2 100644
> --- a/hw/xfree86/dri2/dri2.c
> +++ b/hw/xfree86/dri2/dri2.c
> @@ -102,6 +102,7 @@ typedef struct _DRI2Screen {
> DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC;
> DRI2AuthMagicProcPtr AuthMagic;
> DRI2ReuseBufferNotifyProcPtr ReuseBufferNotify;
> + DRI2SwapLimitValidateProcPtr SwapLimitValidate;
>
> HandleExposuresProcPtr HandleExposures;
>
> @@ -191,13 +192,23 @@ DRI2AllocateDrawable(DrawablePtr pDraw)
> return pPriv;
> }
>
> +static Bool
> +DRI2DefaultSwapLimitValidate(DrawablePtr pDraw, int swap_limit)
> +{
> + return swap_limit == 1;
> +}
> +
> Bool
> DRI2SwapLimit(DrawablePtr pDraw, int swap_limit)
> {
> DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
> + DRI2ScreenPtr ds = pPriv->dri2_screen;
> if (!pPriv)
> return FALSE;
>
> + if (!ds->SwapLimitValidate(pDraw, swap_limit))
> + return FALSE;
> +
> pPriv->swap_limit = swap_limit;
>
> /* Check throttling */
> @@ -1134,8 +1145,10 @@ DRI2ScreenInit(ScreenPtr pScreen,
> DRI2InfoPtr info)
> ds->AuthMagic = info->AuthMagic;
> }
>
> - if (info->version >= 6)
> + if (info->version >= 6) {
> ds->ReuseBufferNotify = info->ReuseBufferNotify;
> + ds->SwapLimitValidate = info->SwapLimitValidate;
> + }
>
> /*
> * if the driver doesn't provide an AuthMagic function or the
> info struct
> @@ -1148,6 +1161,9 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr
> info)
> goto err_out;
> #endif
>
> + if (!ds->SwapLimitValidate)
> + ds->SwapLimitValidate = DRI2DefaultSwapLimitValidate;
> +
> /* Initialize minor if needed and set to minimum provied by
> DDX */
> if (!dri2_minor || dri2_minor > cur_minor)
> dri2_minor = cur_minor;
> diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
> index 3d01c55..a4bba02 100644
> --- a/hw/xfree86/dri2/dri2.h
> +++ b/hw/xfree86/dri2/dri2.h
> @@ -169,6 +169,19 @@ typedef void (*DRI2InvalidateProcPtr)
> (DrawablePtr pDraw,
> void *data);
>
> /**
> + * DRI2 calls this hook when ever swap_limit is going to be
> changed. Default
> + * implementation for the hook only accepts one as swap_limit. If
> driver can
> + * support other swap_limits it has to implement supported limits
> with this
> + * callback.
> + *
> + * \param pDraw drawable whos swap_limit is going to be changed
> + * \param swap_limit new swap_limit that going to be set
> + * \return TRUE if limit is support, FALSE if not.
> + */
> +typedef Bool (*DRI2SwapLimitValidateProcPtr)(DrawablePtr pDraw,
> + int swap_limit);
> +
> +/**
> * Version of the DRI2InfoRec structure defined in this header
> */
> #define DRI2INFOREC_VERSION 6
> @@ -203,6 +216,7 @@ typedef struct {
> /* added in version 6 */
>
> DRI2ReuseBufferNotifyProcPtr ReuseBufferNotify;
> + DRI2SwapLimitValidateProcPtr SwapLimitValidate;
> } DRI2InfoRec, *DRI2InfoPtr;
>
> extern _X_EXPORT int DRI2EventBase;
> --
> 1.7.0.4
>
*********************************************************************
Mario Kleiner
Max Planck Institute for Biological Cybernetics
Spemannstr. 38
72076 Tuebingen
Germany
e-mail: mario.kleiner at tuebingen.mpg.de
office: +49 (0)7071/601-1623
fax: +49 (0)7071/601-616
www: http://www.kyb.tuebingen.mpg.de/~kleinerm
*********************************************************************
"For a successful technology, reality must take precedence
over public relations, for Nature cannot be fooled."
(Richard Feynman)
More information about the xorg-devel
mailing list