diff options
author | marha <marha@users.sourceforge.net> | 2012-06-21 08:11:16 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-06-21 08:11:16 +0200 |
commit | 478ec8cab167e7d8be4973fc3f8d425b1baa4496 (patch) | |
tree | 0b05eb5a0e3a989a66baff04a954db416444f7c5 /xorg-server/hw/xfree86/dri2/dri2.c | |
parent | 62d040da7ea0a76d48014b5247d98b428ca50a15 (diff) | |
parent | da6ea6d64418710cbf7e0639dfefd2d856d53f1a (diff) | |
download | vcxsrv-478ec8cab167e7d8be4973fc3f8d425b1baa4496.tar.gz vcxsrv-478ec8cab167e7d8be4973fc3f8d425b1baa4496.tar.bz2 vcxsrv-478ec8cab167e7d8be4973fc3f8d425b1baa4496.zip |
Merge remote-tracking branch 'origin/released'
Diffstat (limited to 'xorg-server/hw/xfree86/dri2/dri2.c')
-rw-r--r-- | xorg-server/hw/xfree86/dri2/dri2.c | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/xorg-server/hw/xfree86/dri2/dri2.c b/xorg-server/hw/xfree86/dri2/dri2.c index babf32f13..d0f17896d 100644 --- a/xorg-server/hw/xfree86/dri2/dri2.c +++ b/xorg-server/hw/xfree86/dri2/dri2.c @@ -104,7 +104,8 @@ typedef struct _DRI2Screen { DRI2ScheduleSwapProcPtr ScheduleSwap; DRI2GetMSCProcPtr GetMSC; DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC; - DRI2AuthMagicProcPtr AuthMagic; + DRI2AuthMagic2ProcPtr AuthMagic; + DRI2AuthMagicProcPtr LegacyAuthMagic; DRI2ReuseBufferNotifyProcPtr ReuseBufferNotify; DRI2SwapLimitValidateProcPtr SwapLimitValidate; DRI2GetParamProcPtr GetParam; @@ -1110,12 +1111,22 @@ DRI2Connect(ScreenPtr pScreen, unsigned int driverType, int *fd, return TRUE; } +static Bool +DRI2AuthMagic (ScreenPtr pScreen, uint32_t magic) +{ + DRI2ScreenPtr ds = DRI2GetScreen(pScreen); + if (ds == NULL || (*ds->LegacyAuthMagic) (ds->fd, magic)) + return FALSE; + + return TRUE; +} + Bool DRI2Authenticate(ScreenPtr pScreen, uint32_t magic) { DRI2ScreenPtr ds = DRI2GetScreen(pScreen); - if (ds == NULL || (*ds->AuthMagic) (ds->fd, magic)) + if (ds == NULL || (*ds->AuthMagic) (pScreen, magic)) return FALSE; return TRUE; @@ -1202,8 +1213,11 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) cur_minor = 1; } + if (info->version >= 8) { + ds->AuthMagic = info->AuthMagic2; + } if (info->version >= 5) { - ds->AuthMagic = info->AuthMagic; + ds->LegacyAuthMagic = info->AuthMagic; } if (info->version >= 6) { @@ -1218,14 +1232,21 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) /* * if the driver doesn't provide an AuthMagic function or the info struct - * version is too low, it relies on the old method (using libdrm) or fail + * version is too low, call through LegacyAuthMagic */ - if (!ds->AuthMagic) + if (!ds->AuthMagic) { + ds->AuthMagic = DRI2AuthMagic; + /* + * If the driver doesn't provide an AuthMagic function + * it relies on the old method (using libdrm) or fails + */ + if (!ds->LegacyAuthMagic) #ifdef WITH_LIBDRM - ds->AuthMagic = drmAuthMagic; + ds->LegacyAuthMagic = drmAuthMagic; #else - goto err_out; + goto err_out; #endif + } /* Initialize minor if needed and set to minimum provied by DDX */ if (!dri2_minor || dri2_minor > cur_minor) |