summaryrefslogtreecommitdiff
path: root/src/videocore.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/videocore.c')
-rw-r--r--src/videocore.c35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/videocore.c b/src/videocore.c
index 22a86df..f0dac8d 100644
--- a/src/videocore.c
+++ b/src/videocore.c
@@ -1,6 +1,7 @@
-/*
+/* vim: set noet sw=8 sts=8 ts=8 cino=:0,t0,(0 :
* Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
- * Michel Dänzer, <michel@tungstengraphics.com>
+ * Michel Dänzer, <michel@tungstengraphics.com>
+ * Will Thompson <will.thompson@collabora.co.uk>
*/
#ifdef HAVE_CONFIG_H
@@ -38,6 +39,7 @@
#endif
#include "videocore.h"
+#include "videocore-exa.h"
#include "videocore-debug.h"
Bool videoCoreDebug = 0;
@@ -174,6 +176,9 @@ struct _VideoCoreRec {
EntityInfoPtr pEnt;
OptionInfoPtr Options;
+
+ /* EXA stuff */
+ VideoCoreExaPtr vcExa;
};
static Bool
@@ -195,6 +200,12 @@ FBDevFreeRec(ScrnInfoPtr pScrn)
pScrn->driverPrivate = NULL;
}
+VideoCoreExaPtr
+VideoCoreGetExa(VideoCorePtr vc)
+{
+ return vc->vcExa;
+}
+
/* -------------------------------------------------------------------- */
static const OptionInfoRec *
@@ -529,7 +540,8 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
"unrecognised fbdev hardware type (%d)\n", type);
return FALSE;
}
- if (xf86LoadSubModule(pScrn, "fb") == NULL) {
+ if (xf86LoadSubModule(pScrn, "fb") == NULL ||
+ xf86LoadSubModule(pScrn, "exa") == NULL) {
FBDevFreeRec(pScrn);
return FALSE;
}
@@ -538,6 +550,15 @@ FBDevPreInit(ScrnInfoPtr pScrn, int flags)
return TRUE;
}
+static void
+VideoCoreAccelInit(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VideoCorePtr fPtr = VIDEOCOREPTR(pScrn);
+
+ fPtr->vcExa = VideoCoreExaInit(pScreen);
+}
+
static Bool
FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
{
@@ -692,6 +713,9 @@ FBDevScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
"Render extension initialisation failed\n");
xf86SetBlackWhitePixels(pScreen);
+
+ VideoCoreAccelInit(pScreen);
+
miInitializeBackingStore(pScreen);
xf86SetBackingStore(pScreen);
@@ -770,6 +794,11 @@ FBDevCloseScreen(int scrnIndex, ScreenPtr pScreen)
fbdevHWUnmapVidmem(pScrn);
pScrn->vtSema = FALSE;
+ if (fPtr->vcExa) {
+ /* FIXME: VideoCoreExaCloseScreen() ? */
+ fPtr->vcExa = NULL;
+ }
+
pScreen->CreateScreenResources = fPtr->CreateScreenResources;
pScreen->CloseScreen = fPtr->CloseScreen;
return (*pScreen->CloseScreen)(scrnIndex, pScreen);