141 lines
4.4 KiB
Diff
141 lines
4.4 KiB
Diff
|
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
|
||
|
index 42b7c58..804fd37 100644
|
||
|
--- a/hw/xfree86/common/xf86DGA.c
|
||
|
+++ b/hw/xfree86/common/xf86DGA.c
|
||
|
@@ -120,8 +120,22 @@ DGAInit(
|
||
|
|
||
|
DGAScreenKey = &DGAScreenKeyIndex;
|
||
|
|
||
|
- if(!(pScreenPriv = (DGAScreenPtr)xalloc(sizeof(DGAScreenRec))))
|
||
|
- return FALSE;
|
||
|
+ pScreenPriv = DGA_GET_SCREEN_PRIV(pScreen);
|
||
|
+
|
||
|
+ if (!pScreenPriv)
|
||
|
+ {
|
||
|
+ if(!(pScreenPriv = (DGAScreenPtr)xalloc(sizeof(DGAScreenRec))))
|
||
|
+ return FALSE;
|
||
|
+ dixSetPrivate(&pScreen->devPrivates, DGAScreenKey, pScreenPriv);
|
||
|
+ pScreenPriv->CloseScreen = pScreen->CloseScreen;
|
||
|
+ pScreen->CloseScreen = DGACloseScreen;
|
||
|
+ pScreenPriv->DestroyColormap = pScreen->DestroyColormap;
|
||
|
+ pScreen->DestroyColormap = DGADestroyColormap;
|
||
|
+ pScreenPriv->InstallColormap = pScreen->InstallColormap;
|
||
|
+ pScreen->InstallColormap = DGAInstallColormap;
|
||
|
+ pScreenPriv->UninstallColormap = pScreen->UninstallColormap;
|
||
|
+ pScreen->UninstallColormap = DGAUninstallColormap;
|
||
|
+ }
|
||
|
|
||
|
pScreenPriv->pScrn = pScrn;
|
||
|
pScreenPriv->numModes = num;
|
||
|
@@ -146,17 +160,6 @@ DGAInit(
|
||
|
modes[i].flags &= ~DGA_PIXMAP_AVAILABLE;
|
||
|
#endif
|
||
|
|
||
|
- dixSetPrivate(&pScreen->devPrivates, DGAScreenKey, pScreenPriv);
|
||
|
- pScreenPriv->CloseScreen = pScreen->CloseScreen;
|
||
|
- pScreen->CloseScreen = DGACloseScreen;
|
||
|
- pScreenPriv->DestroyColormap = pScreen->DestroyColormap;
|
||
|
- pScreen->DestroyColormap = DGADestroyColormap;
|
||
|
- pScreenPriv->InstallColormap = pScreen->InstallColormap;
|
||
|
- pScreen->InstallColormap = DGAInstallColormap;
|
||
|
- pScreenPriv->UninstallColormap = pScreen->UninstallColormap;
|
||
|
- pScreen->UninstallColormap = DGAUninstallColormap;
|
||
|
-
|
||
|
-
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
||
|
index c1e31e0..f274725 100644
|
||
|
--- a/hw/xfree86/modes/xf86Crtc.c
|
||
|
+++ b/hw/xfree86/modes/xf86Crtc.c
|
||
|
@@ -806,7 +806,7 @@ xf86CrtcScreenInit (ScreenPtr screen)
|
||
|
screen->CloseScreen = xf86CrtcCloseScreen;
|
||
|
|
||
|
#ifdef XFreeXDGA
|
||
|
- xf86DiDGAInit(screen, 0);
|
||
|
+ _xf86_di_dga_init_for_reals(screen);
|
||
|
#endif
|
||
|
#ifdef RANDR_13_INTERFACE
|
||
|
return RANDR_INTERFACE_VERSION;
|
||
|
@@ -1928,7 +1928,7 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
|
||
|
scrn->currentMode = scrn->modes;
|
||
|
#ifdef XFreeXDGA
|
||
|
if (scrn->pScreen)
|
||
|
- xf86DiDGAReInit(scrn->pScreen);
|
||
|
+ _xf86_di_dga_reinit_for_reals(scrn->pScreen);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
|
||
|
index 69afaa5..edf84d8 100644
|
||
|
--- a/hw/xfree86/modes/xf86Crtc.h
|
||
|
+++ b/hw/xfree86/modes/xf86Crtc.h
|
||
|
@@ -833,6 +833,10 @@ xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus);
|
||
|
extern _X_EXPORT Bool
|
||
|
xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address);
|
||
|
|
||
|
+/* this is the real function, used only internally */
|
||
|
+_X_INTERNAL Bool
|
||
|
+_xf86_di_dga_init_for_reals (ScreenPtr pScreen);
|
||
|
+
|
||
|
/**
|
||
|
* Re-initialize dga for this screen (as when the set of modes changes)
|
||
|
*/
|
||
|
@@ -841,6 +845,10 @@ extern _X_EXPORT Bool
|
||
|
xf86DiDGAReInit (ScreenPtr pScreen);
|
||
|
#endif
|
||
|
|
||
|
+/* This is the real function, used only internally */
|
||
|
+_X_INTERNAL Bool
|
||
|
+_xf86_di_dga_reinit_for_reals (ScreenPtr pScreen);
|
||
|
+
|
||
|
/*
|
||
|
* Set the subpixel order reported for the screen using
|
||
|
* the information from the outputs
|
||
|
diff --git a/hw/xfree86/modes/xf86DiDGA.c b/hw/xfree86/modes/xf86DiDGA.c
|
||
|
index 0f7b834..3df3754 100644
|
||
|
--- a/hw/xfree86/modes/xf86DiDGA.c
|
||
|
+++ b/hw/xfree86/modes/xf86DiDGA.c
|
||
|
@@ -175,6 +175,12 @@ static DGAFunctionRec xf86_dga_funcs = {
|
||
|
Bool
|
||
|
xf86DiDGAReInit (ScreenPtr pScreen)
|
||
|
{
|
||
|
+ return TRUE;
|
||
|
+}
|
||
|
+
|
||
|
+_X_INTERNAL Bool
|
||
|
+_xf86_di_dga_reinit_for_reals (ScreenPtr pScreen)
|
||
|
+{
|
||
|
ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
|
||
|
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
|
||
|
|
||
|
@@ -190,12 +196,15 @@ xf86DiDGAReInit (ScreenPtr pScreen)
|
||
|
Bool
|
||
|
xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address)
|
||
|
{
|
||
|
+ return TRUE;
|
||
|
+}
|
||
|
+
|
||
|
+_X_INTERNAL Bool
|
||
|
+_xf86_di_dga_init_for_reals (ScreenPtr pScreen)
|
||
|
+{
|
||
|
ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
|
||
|
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
|
||
|
|
||
|
- if (DGAAvailable(pScreen->myNum))
|
||
|
- return TRUE;
|
||
|
-
|
||
|
xf86_config->dga_flags = 0;
|
||
|
xf86_config->dga_address = 0;
|
||
|
xf86_config->dga_width = 0;
|
||
|
ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
|
||
|
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
|
||
|
|
||
|
- if (DGAAvailable(pScreen->myNum))
|
||
|
- return TRUE;
|
||
|
-
|
||
|
xf86_config->dga_flags = 0;
|
||
|
xf86_config->dga_address = 0;
|
||
|
xf86_config->dga_width = 0;
|