summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <anholt@freebsd.org>2006-03-09 06:06:25 +0000
committerEric Anholt <anholt@freebsd.org>2006-03-09 06:06:25 +0000
commit6797d85e314d2a5a2e18d31a8572437d5961562b (patch)
treea853bb8c78442195a1db6560975ce771efa85a03
parent522f23673eda992bec81f61d3515376208603028 (diff)
Update drivers that support EXA for the new EXA ABI. This consists of
moving all the accel and card members into the driver ptr, filling in the exa_major/ exa_minor fields, and always using LoadSubModule so we can check the module version up front. Only tested on ATI.
-rw-r--r--src/via_accel.c56
-rw-r--r--src/via_driver.c37
2 files changed, 54 insertions, 39 deletions
diff --git a/src/via_accel.c b/src/via_accel.c
index e535cb0..2a42fe9 100644
--- a/src/via_accel.c
+++ b/src/via_accel.c
@@ -2075,28 +2075,30 @@ viaInitExa(ScreenPtr pScreen)
{
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
VIAPtr pVia = VIAPTR(pScrn);
- ExaDriverPtr pExa = (ExaDriverPtr) xnfcalloc(sizeof(ExaDriverRec), 1);
+ ExaDriverPtr pExa = exaDriverAlloc();
if (!pExa)
return NULL;
- pExa->card.memoryBase = pVia->FBBase;
- pExa->card.memorySize = pVia->FBFreeEnd;
- pExa->card.offScreenBase = pScrn->virtualY * pVia->Bpl;
- pExa->card.pixmapOffsetAlign = 32;
- pExa->card.pixmapPitchAlign = 16;
- pExa->card.flags = EXA_OFFSCREEN_PIXMAPS | EXA_OFFSCREEN_ALIGN_POT;
- pExa->card.maxX = 2047;
- pExa->card.maxY = 2047;
-
- pExa->accel.WaitMarker = viaAccelWaitMarker;
- pExa->accel.MarkSync = viaAccelMarkSync;
- pExa->accel.PrepareSolid = viaExaPrepareSolid;
- pExa->accel.Solid = viaExaSolid;
- pExa->accel.DoneSolid = viaExaDoneSolidCopy;
- pExa->accel.PrepareCopy = viaExaPrepareCopy;
- pExa->accel.Copy = viaExaCopy;
- pExa->accel.DoneCopy = viaExaDoneSolidCopy;
+ pExa->exa_major = 2;
+ pExa->exa_minor = 0;
+ pExa->memoryBase = pVia->FBBase;
+ pExa->memorySize = pVia->FBFreeEnd;
+ pExa->offScreenBase = pScrn->virtualY * pVia->Bpl;
+ pExa->pixmapOffsetAlign = 32;
+ pExa->pixmapPitchAlign = 16;
+ pExa->flags = EXA_OFFSCREEN_PIXMAPS | EXA_OFFSCREEN_ALIGN_POT;
+ pExa->maxX = 2047;
+ pExa->maxY = 2047;
+
+ pExa->WaitMarker = viaAccelWaitMarker;
+ pExa->MarkSync = viaAccelMarkSync;
+ pExa->PrepareSolid = viaExaPrepareSolid;
+ pExa->Solid = viaExaSolid;
+ pExa->DoneSolid = viaExaDoneSolidCopy;
+ pExa->PrepareCopy = viaExaPrepareCopy;
+ pExa->Copy = viaExaCopy;
+ pExa->DoneCopy = viaExaDoneSolidCopy;
#ifdef XF86DRI
if (pVia->directRenderingEnabled) {
@@ -2104,22 +2106,22 @@ viaInitExa(ScreenPtr pScreen)
if ((pVia->drmVerMajor > 2) ||
((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 7))) {
if (pVia->Chipset != VIA_K8M800)
- pExa->accel.UploadToScreen = viaExaUploadToScreen;
- pExa->accel.DownloadFromScreen = viaExaDownloadFromScreen;
+ pExa->UploadToScreen = viaExaUploadToScreen;
+ pExa->DownloadFromScreen = viaExaDownloadFromScreen;
}
#endif
if (pVia->Chipset == VIA_K8M800)
- pExa->accel.UploadToScreen = viaExaTexUploadToScreen;
+ pExa->UploadToScreen = viaExaTexUploadToScreen;
}
#endif
- pExa->accel.UploadToScratch = viaExaUploadToScratch;
+ pExa->UploadToScratch = viaExaUploadToScratch;
if (!pVia->noComposite) {
- pExa->accel.CheckComposite = viaExaCheckComposite;
- pExa->accel.PrepareComposite = viaExaPrepareComposite;
- pExa->accel.Composite = viaExaComposite;
- pExa->accel.DoneComposite = viaExaDoneSolidCopy;
+ pExa->CheckComposite = viaExaCheckComposite;
+ pExa->PrepareComposite = viaExaPrepareComposite;
+ pExa->Composite = viaExaComposite;
+ pExa->DoneComposite = viaExaDoneSolidCopy;
} else {
xf86DrvMsg(pScrn->scrnIndex, X_INFO,"[EXA] Disabling EXA accelerated composite.\n");
}
@@ -2319,7 +2321,7 @@ viaFinishInitAccel(ScreenPtr pScreen)
* Allocate upload and scratch space.
*/
- if (pVia->exaDriverPtr->accel.UploadToScreen ==
+ if (pVia->exaDriverPtr->UploadToScreen ==
viaExaTexUploadToScreen) {
size = VIA_AGP_UPL_SIZE * 2 + 32;
diff --git a/src/via_driver.c b/src/via_driver.c
index d7b76de..8ea855e 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -274,7 +274,7 @@ static const char *xaaSymbols[] = {
#ifdef VIA_HAVE_EXA
static const char *exaSymbols[] = {
- "exaGetVersion",
+ "exaDriverAlloc",
"exaDriverInit",
"exaDriverFini",
"exaOffscreenAlloc",
@@ -1458,18 +1458,31 @@ static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags)
xf86LoaderReqSymLists(fbSymbols, NULL);
if (!pVia->NoAccel) {
- if(!xf86LoadSubModule(pScrn, "xaa")) {
- VIAFreeRec(pScrn);
- return FALSE;
- }
- xf86LoaderReqSymLists(xaaSymbols, NULL);
#ifdef VIA_HAVE_EXA
- if(!xf86LoadSubModule(pScrn, "exa")) {
- VIAFreeRec(pScrn);
- return FALSE;
- }
- xf86LoaderReqSymLists(exaSymbols, NULL);
-#endif
+ if (pVia->useEXA) {
+ XF86ModReqInfo req;
+ int errmaj, errmin;
+
+ req.majorversion = 2;
+ req.minorversion = 0;
+ if (!LoadSubModule(pScrn->module, "exa", NULL, NULL, NULL, &req,
+ &errmaj, &errmin))
+ {
+ LoaderErrorMsg(NULL, "exa", errmaj, errmin);
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+ xf86LoaderReqSymLists(exaSymbols, NULL);
+ } else {
+#endif /* VIA_HAVE_EXA */
+ if(!xf86LoadSubModule(pScrn, "xaa")) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+ xf86LoaderReqSymLists(xaaSymbols, NULL);
+#ifdef VIA_HAVE_EXA
+ }
+#endif /* VIA_HAVE_EXA */
}
if (pVia->hwcursor) {