diff options
author | Eric Anholt <anholt@freebsd.org> | 2006-03-09 06:06:25 +0000 |
---|---|---|
committer | Eric Anholt <anholt@freebsd.org> | 2006-03-09 06:06:25 +0000 |
commit | 6797d85e314d2a5a2e18d31a8572437d5961562b (patch) | |
tree | a853bb8c78442195a1db6560975ce771efa85a03 | |
parent | 522f23673eda992bec81f61d3515376208603028 (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.c | 56 | ||||
-rw-r--r-- | src/via_driver.c | 37 |
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) { |