summaryrefslogtreecommitdiff
path: root/src/nv_driver.c
diff options
context:
space:
mode:
authorMatthieu Herrb <matthieu@herrb.eu>2013-11-18 21:14:42 +0100
committerMatthieu Herrb <matthieu@herrb.eu>2015-12-21 16:45:08 +0100
commit38d888e0f377bf28373b55c3250c39ab5f8c95b3 (patch)
tree1aea6656066453ae23e27a51b42fc46270a47912 /src/nv_driver.c
parent0b6619fec39fada995646fb95bb25e72d3c9a491 (diff)
Fix shadow framebuffer implementation.
Makes it possible to run the nv driver without XAA on cards where EXA is not supported. Signed-off-by: Matthieu Herrb <matthieu@herrb.eu> Reviewed-by: Adam Jackson <ajax@redhat.com>
Diffstat (limited to 'src/nv_driver.c')
-rw-r--r--src/nv_driver.c44
1 files changed, 41 insertions, 3 deletions
diff --git a/src/nv_driver.c b/src/nv_driver.c
index 8f35334..3a74038 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -2066,7 +2066,7 @@ NVPreInit(ScrnInfoPtr pScrn, int flags)
/* Load shadowfb if needed */
if (pNv->ShadowFB) {
- if (!xf86LoadSubModule(pScrn, "shadowfb")) {
+ if (!xf86LoadSubModule(pScrn, "shadow")) {
xf86FreeInt10(pNv->pInt);
NVFreeRec(pScrn);
return FALSE;
@@ -2374,6 +2374,44 @@ NVDPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags)
hwp->writeCrtc(hwp, 0x1A, crtc1A);
}
+static Bool
+NVCreateScreenResources(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
+ NVPtr pNv = NVPTR(pScrn);
+ PixmapPtr pPixmap;
+ Bool ret;
+
+ pScreen->CreateScreenResources = pNv->CreateScreenResources;
+ ret = pScreen->CreateScreenResources(pScreen);
+ pScreen->CreateScreenResources = NVCreateScreenResources;
+
+ if (!ret)
+ return FALSE;
+
+ pPixmap = pScreen->GetScreenPixmap(pScreen);
+
+ if (!shadowAdd(pScreen, pPixmap, NVShadowUpdate,
+ NULL, 0, NULL)) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static Bool
+NVShadowInit(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
+ NVPtr pNv = NVPTR(pScrn);
+
+ if (!shadowSetup(pScreen))
+ return FALSE;
+ pNv->CreateScreenResources = pScreen->CreateScreenResources;
+ pScreen->CreateScreenResources = NVCreateScreenResources;
+
+ return TRUE;
+}
+
/* Mandatory */
@@ -2595,8 +2633,8 @@ NVScreenInit(SCREEN_INIT_ARGS_DECL)
"Driver rotation enabled, RandR disabled\n");
}
}
-
- ShadowFBInit(pScreen, refreshArea);
+ pNv->refreshArea = refreshArea;
+ NVShadowInit(pScreen);
}
if(pNv->FlatPanel)