From 6aaf0e5b581b06fc73e56f863a26cd9d684eb9c0 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Sun, 18 Jun 2006 19:12:15 -0700 Subject: [PATCH] Add options to disable EXA acceleration for Composite/UTS/DFS, and always print out how much memory EXA is managing for offscreen pixmaps. --- exa/exa.c | 20 ++++++++++++++++++++ exa/exa_offscreen.c | 5 ----- hw/xfree86/exa/examodule.c | 35 +++++++++++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/exa/exa.c b/exa/exa.c index 75d5c0d69..4b96af815 100644 --- a/exa/exa.c +++ b/exa/exa.c @@ -623,6 +623,10 @@ exaDriverInit (ScreenPtr pScreen, pExaScr->SavedDestroyPixmap = pScreen->DestroyPixmap; pScreen->DestroyPixmap = exaDestroyPixmap; + + LogMessage(X_INFO, "EXA(%d): Offscreen pixmap area of %d bytes\n", + pScreen->myNum, + pExaScr->info->memorySize - pExaScr->info->offScreenBase); } else { @@ -641,6 +645,22 @@ exaDriverInit (ScreenPtr pScreen, } } + LogMessage(X_INFO, "EXA(%d): Driver registered support for the following" + " operations:\n", pScreen->myNum); + assert(pScreenInfo->PrepareSolid != NULL); + LogMessage(X_INFO, " Solid\n"); + assert(pScreenInfo->PrepareCopy != NULL); + LogMessage(X_INFO, " Copy\n"); + if (pScreenInfo->PrepareComposite != NULL) { + LogMessage(X_INFO, " Composite (RENDER acceleration)\n"); + } + if (pScreenInfo->UploadToScreen != NULL) { + LogMessage(X_INFO, " UploadToScreen\n"); + } + if (pScreenInfo->DownloadFromScreen != NULL) { + LogMessage(X_INFO, " DownloadFromScreen\n"); + } + return TRUE; } diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index b55802e1e..9e0aa5d25 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -413,7 +413,6 @@ exaOffscreenInit (ScreenPtr pScreen) if (!area) return FALSE; - area->state = ExaOffscreenAvail; area->base_offset = pExaScr->info->offScreenBase; area->offset = area->base_offset; @@ -422,10 +421,6 @@ exaOffscreenInit (ScreenPtr pScreen) area->next = NULL; area->score = 0; -#if DEBUG_OFFSCREEN - ErrorF("============ initial memory block of %d\n", area->size); -#endif - /* Add it to the free areas */ pExaScr->info->offScreenAreas = area; diff --git a/hw/xfree86/exa/examodule.c b/hw/xfree86/exa/examodule.c index 0a7b361c8..4dce58fd8 100644 --- a/hw/xfree86/exa/examodule.c +++ b/hw/xfree86/exa/examodule.c @@ -47,11 +47,22 @@ static int exaXorgScreenPrivateIndex; typedef enum { EXAOPT_MIGRATION_HEURISTIC, + EXAOPT_NO_COMPOSITE, + EXAOPT_NO_UTS, + EXAOPT_NO_DFS, } EXAOpts; static const OptionInfoRec EXAOptions[] = { - { EXAOPT_MIGRATION_HEURISTIC, "MigrationHeuristic", OPTV_ANYSTR, {0}, FALSE }, - { -1, NULL, OPTV_NONE, {0}, FALSE } + { EXAOPT_MIGRATION_HEURISTIC, "MigrationHeuristic", + OPTV_ANYSTR, {0}, FALSE }, + { EXAOPT_NO_COMPOSITE, "EXANoComposite", + OPTV_BOOLEAN, {0}, FALSE }, + { EXAOPT_NO_UTS, "EXANoUploadToScreen", + OPTV_BOOLEAN, {0}, FALSE }, + { EXAOPT_NO_DFS, "EXANoDownloadFromScreen", + OPTV_BOOLEAN, {0}, FALSE }, + { -1, NULL, + OPTV_NONE, {0}, FALSE } }; static Bool @@ -135,6 +146,26 @@ exaDDXDriverInit(ScreenPtr pScreen) } } + if (xf86IsOptionSet(pScreenPriv->options, EXAOPT_NO_COMPOSITE)) { + xf86DrvMsg(pScreen->myNum, X_INFO, + "EXA: Disabling Composite operation " + "(RENDER acceleration)\n"); + pExaScr->info->CheckComposite = NULL; + pExaScr->info->PrepareComposite = NULL; + } + + if (xf86IsOptionSet(pScreenPriv->options, EXAOPT_NO_UTS)) { + xf86DrvMsg(pScreen->myNum, X_INFO, + "EXA: Disabling UploadToScreen\n"); + pExaScr->info->UploadToScreen = NULL; + } + + if (xf86IsOptionSet(pScreenPriv->options, EXAOPT_NO_DFS)) { + xf86DrvMsg(pScreen->myNum, X_INFO, + "EXA: Disabling DownloadFromScreen\n"); + pExaScr->info->DownloadFromScreen = NULL; + } + pScreen->devPrivates[exaXorgScreenPrivateIndex].ptr = pScreenPriv; pScreenPriv->SavedEnableDisableFBAccess = pScrn->EnableDisableFBAccess;