diff options
author | Michel Dänzer <daenzer@vmware.com> | 2009-02-24 09:22:09 +0100 |
---|---|---|
committer | Michel Dänzer <daenzer@vmware.com> | 2009-02-24 09:22:09 +0100 |
commit | 170cf1270dff38d3cce7f5ba5b940d1c0d70eff5 (patch) | |
tree | 3c8257191fd843070f2a9701e999d6868a775d2a /exa/exa_offscreen.c | |
parent | d3b355875ac46104a174966e1974e6af99e40fd6 (diff) |
EXA: Handle separate alpha maps properly in Composite fallback.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=18710 .
As this can't work without new EXA_PREPARE_AUX* indices, this requires a major
version bump, so we can also drop the UploadToScratch driver hook and
ExaOffscreenSwap*(). So this also fixes
http://bugs.freedesktop.org/show_bug.cgi?id=20213 .
Moreover, introduce EXA_DRIVER_KNOWN_MAJOR to break compilation of drivers
which may not be able to handle EXA_PREPARE_AUX*, giving instructions how to
make them build again in the #error message.
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Diffstat (limited to 'exa/exa_offscreen.c')
-rw-r--r-- | exa/exa_offscreen.c | 59 |
1 files changed, 6 insertions, 53 deletions
diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index 4aaa2c132..c45df6711 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -285,36 +285,6 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, return area; } -/** - * Ejects all offscreen areas, and uninitializes the offscreen memory manager. - */ -void -ExaOffscreenSwapOut (ScreenPtr pScreen) -{ - ExaScreenPriv (pScreen); - - ExaOffscreenValidate (pScreen); - /* loop until a single free area spans the space */ - for (;;) - { - ExaOffscreenArea *area = pExaScr->info->offScreenAreas; - - if (!area) - break; - if (area->state == ExaOffscreenAvail) - { - area = area->next; - if (!area) - break; - } - assert (area->state != ExaOffscreenAvail); - (void) ExaOffscreenKickOut (pScreen, area); - ExaOffscreenValidate (pScreen); - } - ExaOffscreenValidate (pScreen); - ExaOffscreenFini (pScreen); -} - /** Ejects all pixmaps managed by EXA. */ static void ExaOffscreenEjectPixmaps (ScreenPtr pScreen) @@ -344,26 +314,14 @@ ExaOffscreenEjectPixmaps (ScreenPtr pScreen) ExaOffscreenValidate (pScreen); } -void -ExaOffscreenSwapIn (ScreenPtr pScreen) -{ - exaOffscreenInit (pScreen); -} - /** * Prepares EXA for disabling of FB access, or restoring it. * - * In version 2.1, the disabling results in pixmaps being ejected, while other - * allocations remain. With this plus the prevention of migration while - * swappedOut is set, EXA by itself should not cause any access of the - * framebuffer to occur while swapped out. Any remaining issues are the - * responsibility of the driver. - * - * Prior to version 2.1, all allocations, including locked ones, are ejected - * when access is disabled, and the allocator is torn down while swappedOut - * is set. This is more drastic, and caused implementation difficulties for - * many drivers that could otherwise handle the lack of FB access while - * swapped out. + * The disabling results in pixmaps being ejected, while other allocations + * remain. With this plus the prevention of migration while swappedOut is + * set, EXA by itself should not cause any access of the framebuffer to occur + * while swapped out. Any remaining issues are the responsibility of the + * driver. */ void exaEnableDisableFBAccess (int index, Bool enable) @@ -372,16 +330,11 @@ exaEnableDisableFBAccess (int index, Bool enable) ExaScreenPriv (pScreen); if (!enable && pExaScr->disableFbCount++ == 0) { - if (pExaScr->info->exa_minor < 1) - ExaOffscreenSwapOut (pScreen); - else - ExaOffscreenEjectPixmaps (pScreen); + ExaOffscreenEjectPixmaps (pScreen); pExaScr->swappedOut = TRUE; } if (enable && --pExaScr->disableFbCount == 0) { - if (pExaScr->info->exa_minor < 1) - ExaOffscreenSwapIn (pScreen); pExaScr->swappedOut = FALSE; } } |