diff options
-rw-r--r-- | hw/xfree86/dri2/dri2.c | 12 | ||||
-rw-r--r-- | hw/xfree86/dri2/dri2.h | 14 |
2 files changed, 25 insertions, 1 deletions
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index ae685bb0a..a97508d21 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -103,6 +103,7 @@ typedef struct _DRI2Screen { DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC; DRI2AuthMagicProcPtr AuthMagic; DRI2ReuseBufferNotifyProcPtr ReuseBufferNotify; + DRI2SwapLimitValidateProcPtr SwapLimitValidate; HandleExposuresProcPtr HandleExposures; @@ -196,9 +197,16 @@ Bool DRI2SwapLimit(DrawablePtr pDraw, int swap_limit) { DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw); + DRI2ScreenPtr ds; if (!pPriv) return FALSE; + ds = pPriv->dri2_screen; + + if (!ds->SwapLimitValidate + || !ds->SwapLimitValidate(pDraw, swap_limit)) + return FALSE; + pPriv->swap_limit = swap_limit; /* Check throttling */ @@ -1156,8 +1164,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 diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h index 8c0c64b82..9c93209d1 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; |