Fix DGA with MergedFB
Turn off rotation support when MergedFB enabled
This commit is contained in:
parent
a91a4f95c6
commit
e71108f1e0
|
|
@ -99,6 +99,31 @@ I830DGAInit(ScreenPtr pScreen)
|
|||
|
||||
while (pMode) {
|
||||
|
||||
if(pI830->MergedFB) {
|
||||
Bool nogood = FALSE;
|
||||
/* Filter out all meta modes that would require driver-side panning */
|
||||
switch(((I830ModePrivatePtr)pMode->Private)->merged.SecondPosition) {
|
||||
case PosRightOf:
|
||||
case PosLeftOf:
|
||||
if( (((I830ModePrivatePtr)pMode->Private)->merged.First->VDisplay !=
|
||||
((I830ModePrivatePtr)pMode->Private)->merged.Second->VDisplay) ||
|
||||
(((I830ModePrivatePtr)pMode->Private)->merged.First->VDisplay != pMode->VDisplay) )
|
||||
nogood = TRUE;
|
||||
break;
|
||||
default:
|
||||
if( (((I830ModePrivatePtr)pMode->Private)->merged.First->HDisplay !=
|
||||
((I830ModePrivatePtr)pMode->Private)->merged.Second->HDisplay) ||
|
||||
(((I830ModePrivatePtr)pMode->Private)->merged.First->HDisplay != pMode->HDisplay) )
|
||||
nogood = TRUE;
|
||||
}
|
||||
if(nogood) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||
"DGA: MetaMode %dx%d not suitable for DGA, skipping\n",
|
||||
pMode->HDisplay, pMode->VDisplay);
|
||||
goto mode_nogood;
|
||||
}
|
||||
}
|
||||
|
||||
newmodes = xrealloc(modes, (num + 1) * sizeof(DGAModeRec));
|
||||
|
||||
if (!newmodes) {
|
||||
|
|
@ -155,6 +180,7 @@ I830DGAInit(ScreenPtr pScreen)
|
|||
currentMode->maxViewportY = currentMode->imageHeight -
|
||||
currentMode->viewportHeight;
|
||||
|
||||
mode_nogood:
|
||||
pMode = pMode->next;
|
||||
if (pMode == firstMode)
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -7088,22 +7088,6 @@ I830BIOSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
|||
pI830->CloseScreen = pScreen->CloseScreen;
|
||||
pScreen->CloseScreen = I830BIOSCloseScreen;
|
||||
|
||||
if (!pI830->MergedFB && pI830->shadowReq.minorversion >= 1) {
|
||||
/* Rotation */
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "RandR enabled, ignore the following RandR disabled message.\n");
|
||||
xf86DisableRandR(); /* Disable built-in RandR extension */
|
||||
shadowSetup(pScreen);
|
||||
/* support all rotations */
|
||||
I830RandRInit(pScreen, RR_Rotate_0 | RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270);
|
||||
pI830->PointerMoved = pScrn->PointerMoved;
|
||||
pScrn->PointerMoved = I830PointerMoved;
|
||||
pI830->CreateScreenResources = pScreen->CreateScreenResources;
|
||||
pScreen->CreateScreenResources = I830CreateScreenResources;
|
||||
} else {
|
||||
/* Rotation */
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "libshadow is version %d.%d.%d, required 1.1.0 or greater for rotation.\n",pI830->shadowReq.majorversion,pI830->shadowReq.minorversion,pI830->shadowReq.patchlevel);
|
||||
}
|
||||
|
||||
if (pI830->MergedFB) {
|
||||
pI830->PointerMoved = pScrn->PointerMoved;
|
||||
pScrn->PointerMoved = I830MergedPointerMoved;
|
||||
|
|
@ -7120,6 +7104,20 @@ I830BIOSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
|||
} else {
|
||||
pI830->MouseRestrictions = FALSE;
|
||||
}
|
||||
} else if (pI830->shadowReq.minorversion >= 1) {
|
||||
/* Rotation */
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "RandR enabled, ignore the following RandR disabled message.\n");
|
||||
xf86DisableRandR(); /* Disable built-in RandR extension */
|
||||
shadowSetup(pScreen);
|
||||
/* support all rotations */
|
||||
I830RandRInit(pScreen, RR_Rotate_0 | RR_Rotate_90 | RR_Rotate_180 | RR_Rotate_270);
|
||||
pI830->PointerMoved = pScrn->PointerMoved;
|
||||
pScrn->PointerMoved = I830PointerMoved;
|
||||
pI830->CreateScreenResources = pScreen->CreateScreenResources;
|
||||
pScreen->CreateScreenResources = I830CreateScreenResources;
|
||||
} else {
|
||||
/* Rotation */
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "libshadow is version %d.%d.%d, required 1.1.0 or greater for rotation.\n",pI830->shadowReq.majorversion,pI830->shadowReq.minorversion,pI830->shadowReq.patchlevel);
|
||||
}
|
||||
|
||||
if (serverGeneration == 1)
|
||||
|
|
|
|||
Loading…
Reference in New Issue