mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-29 14:40:26 +01:00
Build damage infrastructure. Don't build layer
Move check for 24/32 copy to fbCopyNtoN so that other users will hit it
Eliminate miext/layer
Build damage infrastructure. Don't build layer
Build damage infrastructure. Don't build layer
Memory leak fix of mach64c on server reset Memory leak fix for video on
server reset. Eliminate layer
Build damage infrastructure. Don't build layer
Build damage infrastructure. Don't build layer
Build damage infrastructure. Don't build layer
Build damage infrastructure. Don't build layer
Don't assume windows are onscreen, use GetWindowPixmap and test
devPrivate.ptr. Make sure depth 24 pixmaps are 24bpp when hardware
format is 24bpp.
Get rid of debug KdAssertSync function
add memory_size to KdScreenInfo, eliminate off_screen_size, fix tests to
suit.
Build damage infrastructure. Don't build layer
Use damage (for software cursor, I guess)
Damage is used for software cursor
Build damage infrastructure. Don't build layer
Use damage to track changes
Fix memory leak
This commit is contained in:
parent
950cb2fd60
commit
52ada03edb
24 changed files with 225 additions and 246 deletions
|
|
@ -2,7 +2,7 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/fb \
|
||||
-I$(top_srcdir)/hw/kdrive/src \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/miext/layer \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
|
|
@ -22,10 +22,10 @@ Xfbdev_LDADD = \
|
|||
libfbdev.a \
|
||||
$(top_builddir)/dix/libdix.a \
|
||||
$(top_builddir)/os/libos.a \
|
||||
$(top_builddir)/miext/layer/liblayer.a \
|
||||
$(top_builddir)/hw/kdrive/src/libkdrive.a \
|
||||
$(top_builddir)/hw/kdrive/linux/liblinux.a \
|
||||
$(top_builddir)/miext/shadow/libshadow.a \
|
||||
$(top_builddir)/miext/damage/libdamage.a \
|
||||
$(top_builddir)/randr/librandr.a \
|
||||
$(top_builddir)/render/librender.a \
|
||||
$(top_builddir)/xfixes/libxfixes.a \
|
||||
|
|
|
|||
|
|
@ -190,7 +190,6 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
|
|||
}
|
||||
screen->rate = 72;
|
||||
scrpriv->randr = screen->randr;
|
||||
scrpriv->layerKind = LAYER_FB;
|
||||
|
||||
#ifdef FAKE24_ON_16
|
||||
if (screen->fb[0].depth == 24 && screen->fb[0].bitsPerPixel == 24 &&
|
||||
|
|
@ -380,16 +379,15 @@ fbdevConfigureScreen (ScreenPtr pScreen)
|
|||
KdSetMouseMatrix (&m);
|
||||
}
|
||||
|
||||
LayerPtr
|
||||
fbdevLayerCreate (ScreenPtr pScreen)
|
||||
PixmapPtr
|
||||
fbdevGetPixmap (ScreenPtr pScreen)
|
||||
{
|
||||
KdScreenPriv(pScreen);
|
||||
KdScreenInfo *screen = pScreenPriv->screen;
|
||||
FbdevScrPriv *scrpriv = screen->driver;
|
||||
ShadowUpdateProc update;
|
||||
ShadowWindowProc window;
|
||||
PixmapPtr pPixmap;
|
||||
int kind;
|
||||
PixmapPtr pShadow, pPixmap;
|
||||
|
||||
if (scrpriv->shadow)
|
||||
{
|
||||
|
|
@ -408,21 +406,26 @@ fbdevLayerCreate (ScreenPtr pScreen)
|
|||
else
|
||||
update = shadowUpdatePacked;
|
||||
}
|
||||
if (!update)
|
||||
abort ();
|
||||
kind = LAYER_SHADOW;
|
||||
pPixmap = 0;
|
||||
pPixmap = (*pScreen->CreatePixmap) (pScreen,
|
||||
pScreen->width,
|
||||
pScreen->height,
|
||||
screen->fb[0].depth);
|
||||
if (!pPixmap)
|
||||
return FALSE;
|
||||
shadowSet (pScreen, pPixmap, update, window, scrpriv->randr, 0);
|
||||
pShadow = pPixmap;
|
||||
}
|
||||
else
|
||||
{
|
||||
kind = scrpriv->layerKind;
|
||||
pPixmap = LAYER_SCREEN_PIXMAP;
|
||||
update = 0;
|
||||
window = 0;
|
||||
pPixmap = (*pScreen->GetScreenPixmap) (pScreen);
|
||||
pShadow = 0;
|
||||
}
|
||||
|
||||
return LayerCreate (pScreen, kind, screen->fb[0].depth,
|
||||
pPixmap, update, window, scrpriv->randr, 0);
|
||||
if (scrpriv->pShadow)
|
||||
(*pScreen->DestroyPixmap) (scrpriv->pShadow);
|
||||
scrpriv->pShadow = pShadow;
|
||||
|
||||
return pPixmap;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -459,25 +462,12 @@ fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
|
|||
}
|
||||
|
||||
int
|
||||
fbdevLayerAdd (WindowPtr pWin, pointer value)
|
||||
fbdevPixmapSet (WindowPtr pWin, pointer value)
|
||||
{
|
||||
ScreenPtr pScreen = pWin->drawable.pScreen;
|
||||
LayerPtr pLayer = (LayerPtr) value;
|
||||
|
||||
if (!LayerWindowAdd (pScreen, pLayer, pWin))
|
||||
return WT_STOPWALKING;
|
||||
|
||||
return WT_WALKCHILDREN;
|
||||
}
|
||||
|
||||
int
|
||||
fbdevLayerRemove (WindowPtr pWin, pointer value)
|
||||
{
|
||||
ScreenPtr pScreen = pWin->drawable.pScreen;
|
||||
LayerPtr pLayer = (LayerPtr) value;
|
||||
|
||||
LayerWindowRemove (pScreen, pLayer, pWin);
|
||||
PixmapPtr pPixmap = value;
|
||||
|
||||
(*pScreen->SetWindowPixmap) (pWin, pPixmap);
|
||||
return WT_WALKCHILDREN;
|
||||
}
|
||||
|
||||
|
|
@ -496,8 +486,8 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
|
|||
int oldheight;
|
||||
int oldmmwidth;
|
||||
int oldmmheight;
|
||||
LayerPtr pNewLayer;
|
||||
int newwidth, newheight;
|
||||
PixmapPtr pPixmap;
|
||||
|
||||
if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
|
||||
{
|
||||
|
|
@ -528,26 +518,21 @@ fbdevRandRSetConfig (ScreenPtr pScreen,
|
|||
|
||||
fbdevConfigureScreen (pScreen);
|
||||
|
||||
pNewLayer = fbdevLayerCreate (pScreen);
|
||||
if (!pNewLayer)
|
||||
/*
|
||||
* Get the pixmap that windows live in
|
||||
*/
|
||||
pPixmap = fbdevGetPixmap (pScreen);
|
||||
if (!pPixmap)
|
||||
goto bail4;
|
||||
if (WalkTree (pScreen, fbdevLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
|
||||
goto bail5;
|
||||
|
||||
WalkTree (pScreen, fbdevLayerRemove, (pointer) scrpriv->pLayer);
|
||||
LayerDestroy (pScreen, scrpriv->pLayer);
|
||||
|
||||
scrpriv->pLayer = pNewLayer;
|
||||
|
||||
WalkTree (pScreen, fbdevPixmapSet, (pointer) pPixmap);
|
||||
|
||||
KdSetSubpixelOrder (pScreen, scrpriv->randr);
|
||||
if (wasEnabled)
|
||||
KdEnableScreen (pScreen);
|
||||
|
||||
return TRUE;
|
||||
|
||||
bail5:
|
||||
WalkTree (pScreen, fbdevLayerRemove, (pointer) pNewLayer);
|
||||
LayerDestroy (pScreen, pNewLayer);
|
||||
bail4:
|
||||
pScreen->width = oldwidth;
|
||||
pScreen->height = oldheight;
|
||||
|
|
@ -616,27 +601,20 @@ fbdevInitScreen (ScreenPtr pScreen)
|
|||
#endif
|
||||
|
||||
pScreen->CreateColormap = fbdevCreateColormap;
|
||||
|
||||
if (!LayerStartInit (pScreen))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
return shadowSetup (pScreen);
|
||||
}
|
||||
|
||||
Bool
|
||||
fbdevFinishInitScreen (ScreenPtr pScreen)
|
||||
{
|
||||
KdScreenPriv(pScreen);
|
||||
FbdevScrPriv *scrpriv = pScreenPriv->screen->driver;
|
||||
|
||||
scrpriv->layerKind = LayerNewKind (pScreen);
|
||||
PixmapPtr pPixmap;
|
||||
|
||||
if (!LayerFinishInit (pScreen))
|
||||
fbdevConfigureScreen (pScreen);
|
||||
|
||||
pPixmap = fbdevGetPixmap (pScreen);
|
||||
if (!pPixmap)
|
||||
return FALSE;
|
||||
|
||||
scrpriv->pLayer = fbdevLayerCreate (pScreen);
|
||||
if (!scrpriv->pLayer)
|
||||
return FALSE;
|
||||
|
||||
#ifdef RANDR
|
||||
if (!fbdevRandRInit (pScreen))
|
||||
return FALSE;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include "kdrive.h"
|
||||
#include "layer.h"
|
||||
|
||||
#ifdef RANDR
|
||||
#include "randrstr.h"
|
||||
|
|
@ -50,8 +49,7 @@ typedef struct _fbdevPriv {
|
|||
typedef struct _fbdevScrPriv {
|
||||
Rotation randr;
|
||||
Bool shadow;
|
||||
int layerKind;
|
||||
LayerPtr pLayer;
|
||||
PixmapPtr pShadow;
|
||||
} FbdevScrPriv;
|
||||
|
||||
extern KdCardFuncs fbdevFuncs;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/hw/kdrive/src \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/fb \
|
||||
-I$(top_srcdir)/miext/layer \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/hw/kdrive/linux \
|
||||
-I$(top_srcdir)/hw/kdrive/vesa \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/miext/layer \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
|
|
@ -31,10 +31,10 @@ Xmach64_LDADD = \
|
|||
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
|
||||
$(top_builddir)/dix/libdix.a \
|
||||
$(top_builddir)/os/libos.a \
|
||||
$(top_builddir)/miext/layer/liblayer.a \
|
||||
$(top_builddir)/hw/kdrive/src/libkdrive.a \
|
||||
$(top_builddir)/hw/kdrive/linux/liblinux.a \
|
||||
$(top_builddir)/miext/shadow/libshadow.a \
|
||||
$(top_builddir)/miext/damage/libdamage.a \
|
||||
$(top_builddir)/randr/librandr.a \
|
||||
$(top_builddir)/render/librender.a \
|
||||
$(top_builddir)/xfixes/libxfixes.a \
|
||||
|
|
|
|||
|
|
@ -70,7 +70,6 @@ mach64ScreenInit (KdScreenInfo *screen)
|
|||
screen->dumb = TRUE;
|
||||
if (mach64s->vesa.mapping != VESA_LINEAR)
|
||||
screen->dumb = TRUE;
|
||||
screen->memory_base = mach64s->vesa.fb;
|
||||
switch (screen->fb[0].depth) {
|
||||
case 8:
|
||||
mach64s->colorKey = 0xff;
|
||||
|
|
@ -86,12 +85,6 @@ mach64ScreenInit (KdScreenInfo *screen)
|
|||
mach64s->colorKey = 1;
|
||||
break;
|
||||
}
|
||||
memory = mach64s->vesa.fb_size;
|
||||
screen_size = screen->fb[0].byteStride * screen->height;
|
||||
memory -= screen_size;
|
||||
screen->softCursor = TRUE;
|
||||
screen->off_screen_base = screen_size;
|
||||
screen->off_screen_size = memory;
|
||||
screen->driver = mach64s;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -100,10 +93,7 @@ Bool
|
|||
mach64InitScreen (ScreenPtr pScreen)
|
||||
{
|
||||
#ifdef XV
|
||||
KdScreenPriv(pScreen);
|
||||
Mach64CardInfo *mach64c = pScreenPriv->screen->card->driver;
|
||||
if (mach64c->media_reg && mach64c->reg)
|
||||
mach64InitVideo(pScreen);
|
||||
mach64InitVideo(pScreen);
|
||||
#endif
|
||||
return vesaInitScreen (pScreen);
|
||||
}
|
||||
|
|
@ -385,7 +375,9 @@ void
|
|||
mach64ScreenFini (KdScreenInfo *screen)
|
||||
{
|
||||
Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
|
||||
|
||||
#ifdef XV
|
||||
mach64FiniVideo(screen->pScreen);
|
||||
#endif
|
||||
vesaScreenFini (screen);
|
||||
xfree (mach64s);
|
||||
screen->driver = 0;
|
||||
|
|
@ -398,6 +390,7 @@ mach64CardFini (KdCardInfo *card)
|
|||
|
||||
mach64UnmapReg (card, mach64c);
|
||||
vesaCardFini (card);
|
||||
xfree (mach64c);
|
||||
}
|
||||
|
||||
#define mach64CursorInit 0 /* initCursor */
|
||||
|
|
|
|||
|
|
@ -557,6 +557,7 @@ typedef struct _mach64PortPriv {
|
|||
} Mach64PortPrivRec, *Mach64PortPrivPtr;
|
||||
|
||||
Bool mach64InitVideo(ScreenPtr pScreen);
|
||||
void mach64FiniVideo(ScreenPtr pScreen);
|
||||
|
||||
typedef struct _mach64ScreenInfo {
|
||||
VesaScreenPrivRec vesa;
|
||||
|
|
|
|||
|
|
@ -449,6 +449,7 @@ mach64DrawDisable (ScreenPtr pScreen)
|
|||
void
|
||||
mach64DrawFini (ScreenPtr pScreen)
|
||||
{
|
||||
kaaDrawFini (pScreen);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -980,7 +980,10 @@ Bool mach64InitVideo(ScreenPtr pScreen)
|
|||
int num_adaptors;
|
||||
KdCardInfo *card = pScreenPriv->card;
|
||||
Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
|
||||
Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
|
||||
|
||||
mach64s->pAdaptor = NULL;
|
||||
|
||||
if (!mach64c->media_reg)
|
||||
return FALSE;
|
||||
|
||||
|
|
@ -1017,3 +1020,18 @@ Bool mach64InitVideo(ScreenPtr pScreen)
|
|||
xfree(newAdaptors);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
mach64FiniVideo (ScreenPtr pScreen)
|
||||
{
|
||||
KdScreenPriv(pScreen);
|
||||
mach64ScreenInfo(pScreenPriv);
|
||||
KdVideoAdaptorPtr adapt = mach64s->pAdaptor;
|
||||
|
||||
if (adapt)
|
||||
{
|
||||
Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)(&adapt->pPortPrivates[1]);
|
||||
REGION_UNINIT (pScreen, &pPortPriv->clip);
|
||||
xfree (adapt);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/hw/kdrive/linux \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/miext/layer \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
$(XSERVER_CFLAGS)
|
||||
|
|
@ -28,10 +28,10 @@ Xmga_LDADD = \
|
|||
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
|
||||
$(top_builddir)/dix/libdix.a \
|
||||
$(top_builddir)/os/libos.a \
|
||||
$(top_builddir)/miext/layer/liblayer.a \
|
||||
$(top_builddir)/hw/kdrive/src/libkdrive.a \
|
||||
$(top_builddir)/hw/kdrive/linux/liblinux.a \
|
||||
$(top_builddir)/miext/shadow/libshadow.a \
|
||||
$(top_builddir)/miext/damage/libdamage.a \
|
||||
$(top_builddir)/randr/librandr.a \
|
||||
$(top_builddir)/render/librender.a \
|
||||
$(top_builddir)/xfixes/libxfixes.a \
|
||||
|
|
|
|||
|
|
@ -55,7 +55,6 @@ Bool
|
|||
mgaScreenInit (KdScreenInfo *screen)
|
||||
{
|
||||
MgaScreenInfo *mgas;
|
||||
int screen_size, memory;
|
||||
|
||||
mgas = (MgaScreenInfo *) xalloc (sizeof (MgaScreenInfo));
|
||||
if (!mgas)
|
||||
|
|
@ -75,22 +74,6 @@ mgaScreenInit (KdScreenInfo *screen)
|
|||
|
||||
fprintf (stderr, "vesa mapping is %d\n", mgas->vesa.mapping);
|
||||
#endif
|
||||
screen->memory_base = mgas->vesa.fb;
|
||||
|
||||
memory = mgas->vesa.fb_size;
|
||||
screen_size = screen->fb[0].byteStride * screen->height;
|
||||
|
||||
memory -= screen_size;
|
||||
if (memory > screen->fb[0].byteStride)
|
||||
{
|
||||
screen->off_screen_base = screen_size;
|
||||
screen->off_screen_size = memory;
|
||||
}
|
||||
else
|
||||
{
|
||||
screen->off_screen_base = 0;
|
||||
screen->off_screen_size = 0;
|
||||
}
|
||||
screen->driver = mgas;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/hw/kdrive/src \
|
||||
-I$(top_srcdir)/hw/kdrive/vesa \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/miext/layer \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
$(XSERVER_CFLAGS)
|
||||
|
|
@ -31,10 +31,10 @@ Xnvidia_LDADD = \
|
|||
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
|
||||
$(top_builddir)/dix/libdix.a \
|
||||
$(top_builddir)/os/libos.a \
|
||||
$(top_builddir)/miext/layer/liblayer.a \
|
||||
$(top_builddir)/hw/kdrive/src/libkdrive.a \
|
||||
$(top_builddir)/hw/kdrive/linux/liblinux.a \
|
||||
$(top_builddir)/miext/shadow/libshadow.a \
|
||||
$(top_builddir)/miext/damage/libdamage.a \
|
||||
$(top_builddir)/randr/librandr.a \
|
||||
$(top_builddir)/render/librender.a \
|
||||
$(top_builddir)/xfixes/libxfixes.a \
|
||||
|
|
|
|||
|
|
@ -111,13 +111,12 @@ nvidiaInitScreen (ScreenPtr pScreen)
|
|||
}
|
||||
|
||||
#ifdef RANDR
|
||||
Bool
|
||||
nvidiaRandRSetConfig (ScreenPtr pScreen,
|
||||
Rotation rotation,
|
||||
int rate,
|
||||
RRScreenSizePtr pSize)
|
||||
{
|
||||
KdScreenPriv(pScreen);
|
||||
|
||||
KdCheckSync (pScreen);
|
||||
|
||||
if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize))
|
||||
|
|
@ -149,8 +148,6 @@ nvidiaFinishInitScreen (ScreenPtr pScreen)
|
|||
void
|
||||
nvidiaPreserve (KdCardInfo *card)
|
||||
{
|
||||
NvidiaCardInfo *nvidiac = card->driver;
|
||||
|
||||
vesaPreserve(card);
|
||||
}
|
||||
|
||||
|
|
@ -276,7 +273,6 @@ nvidiaEnable (ScreenPtr pScreen)
|
|||
return FALSE;
|
||||
|
||||
nvidiaSetMMIO (pScreenPriv->card, nvidiac);
|
||||
nvidiaDPMS (pScreen, KD_DPMS_NORMAL);
|
||||
#ifdef XV
|
||||
KdXVEnable (pScreen);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/hw/kdrive/vesa \
|
||||
-I$(top_srcdir)/include \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/miext/layer \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
$(XSERVER_CFLAGS)
|
||||
|
|
@ -27,10 +27,10 @@ Xr128_LDADD = \
|
|||
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
|
||||
$(top_builddir)/dix/libdix.a \
|
||||
$(top_builddir)/os/libos.a \
|
||||
$(top_builddir)/miext/layer/liblayer.a \
|
||||
$(top_builddir)/hw/kdrive/src/libkdrive.a \
|
||||
$(top_builddir)/hw/kdrive/linux/liblinux.a \
|
||||
$(top_builddir)/miext/shadow/libshadow.a \
|
||||
$(top_builddir)/miext/damage/libdamage.a \
|
||||
$(top_builddir)/randr/librandr.a \
|
||||
$(top_builddir)/render/librender.a \
|
||||
$(top_builddir)/xfixes/libxfixes.a \
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/hw/kdrive/fbdev \
|
||||
-I$(top_srcdir)/hw/kdrive/vesa \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/miext/layer \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
$(XSERVER_CFLAGS)
|
||||
|
|
@ -29,10 +29,10 @@ Xsmi_LDADD = \
|
|||
$(top_builddir)/hw/kdrive/vesa/libvesa.a \
|
||||
$(top_builddir)/dix/libdix.a \
|
||||
$(top_builddir)/os/libos.a \
|
||||
$(top_builddir)/miext/layer/liblayer.a \
|
||||
$(top_builddir)/hw/kdrive/src/libkdrive.a \
|
||||
$(top_builddir)/hw/kdrive/linux/liblinux.a \
|
||||
$(top_builddir)/miext/shadow/libshadow.a \
|
||||
$(top_builddir)/miext/damage/libdamage.a \
|
||||
$(top_builddir)/randr/librandr.a \
|
||||
$(top_builddir)/render/librender.a \
|
||||
$(top_builddir)/xfixes/libxfixes.a \
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/fb \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
$(XSERVER_CFLAGS)
|
||||
|
|
|
|||
|
|
@ -50,10 +50,6 @@ int kaaPixmapPrivateIndex;
|
|||
|
||||
typedef struct {
|
||||
KaaScreenInfoPtr info;
|
||||
|
||||
CreatePixmapProcPtr CreatePixmap;
|
||||
DestroyPixmapProcPtr DestroyPixmap;
|
||||
int pixelOffset; /* offset from pPixmap to pixels */
|
||||
} KaaScreenPrivRec, *KaaScreenPrivPtr;
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -71,22 +67,10 @@ typedef struct {
|
|||
#define KaaGetScreenPriv(s) ((KaaScreenPrivPtr)(s)->devPrivates[kaaScreenPrivateIndex].ptr)
|
||||
#define KaaScreenPriv(s) KaaScreenPrivPtr pKaaScr = KaaGetScreenPriv(s)
|
||||
|
||||
#define KaaGetPixmapPriv(p) ((KaaPixmapPrivPtr)(p)->devPrivates[kaaPixmapPrivateIndex].ptr)
|
||||
#define KaaSetPixmapPriv(p,a) ((p)->devPrivates[kaaPixmapPrivateIndex].ptr = (pointer) (a))
|
||||
#define KaaPixmapPriv(p) KaaPixmapPrivPtr pKaaPixmap = KaaGetPixmapPriv(p)
|
||||
|
||||
#define KaaPixmapPitch(w) (((w) + (pKaaScr->info->offscreenPitch - 1)) & ~(pKaaScr->info->offscreenPitch - 1))
|
||||
#define KaaDrawableIsOffscreenPixmap(d) (d->type == DRAWABLE_PIXMAP && \
|
||||
KaaGetPixmapPriv((PixmapPtr)(d)) && \
|
||||
KaaGetPixmapPriv((PixmapPtr)(d))->area)
|
||||
#define KaaDrawableIsScreen(d) (((d)->type == DRAWABLE_WINDOW) || \
|
||||
KaaDrawableIsOffscreenPixmap(d))
|
||||
|
||||
#define KAA_SCREEN_PROLOGUE(pScreen, field) ((pScreen)->field = \
|
||||
((KaaScreenPrivPtr) (pScreen)->devPrivates[kaaScreenPrivateIndex].ptr)->field)
|
||||
|
||||
#define KAA_SCREEN_EPILOGUE(pScreen, field, wrapper)\
|
||||
((pScreen)->field = wrapper)
|
||||
#define KaaGetPixmapPriv(p) ((KaaPixmapPrivPtr)(p)->devPrivates[kaaPixmapPrivateIndex].ptr)
|
||||
#define KaaSetPixmapPriv(p,a) ((p)->devPrivates[kaaPixmapPrivateIndex].ptr = (pointer) (a))
|
||||
#define KaaPixmapPriv(p) KaaPixmapPrivPtr pKaaPixmap = KaaGetPixmapPriv(p)
|
||||
#define KaaPixmapPitch(w) (((w) + (pKaaScr->info->offscreenPitch - 1)) & ~(pKaaScr->info->offscreenPitch - 1))
|
||||
|
||||
#define MIN_OFFPIX_SIZE (4096)
|
||||
|
||||
|
|
@ -268,9 +252,7 @@ kaaDestroyPixmap (PixmapPtr pPixmap)
|
|||
}
|
||||
}
|
||||
|
||||
KAA_SCREEN_PROLOGUE (pScreen, DestroyPixmap);
|
||||
ret = (*pScreen->DestroyPixmap) (pPixmap);
|
||||
KAA_SCREEN_EPILOGUE (pScreen, DestroyPixmap, kaaDestroyPixmap);
|
||||
ret = fbDestroyPixmap (pPixmap);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -278,12 +260,24 @@ kaaDestroyPixmap (PixmapPtr pPixmap)
|
|||
static PixmapPtr
|
||||
kaaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
|
||||
{
|
||||
PixmapPtr pPixmap = NULL;
|
||||
PixmapPtr pPixmap;
|
||||
KaaPixmapPrivPtr pKaaPixmap;
|
||||
int bpp;
|
||||
|
||||
KAA_SCREEN_PROLOGUE (pScreen, CreatePixmap);
|
||||
pPixmap = (* pScreen->CreatePixmap) (pScreen, w, h, depth);
|
||||
KAA_SCREEN_EPILOGUE (pScreen, CreatePixmap, kaaCreatePixmap);
|
||||
bpp = BitsPerPixel (depth);
|
||||
if (bpp == 32 && depth == 24)
|
||||
{
|
||||
int fb;
|
||||
KdScreenPriv (pScreen);
|
||||
|
||||
for (fb = 0; fb < KD_MAX_FB && pScreenPriv->screen->fb[fb].depth; fb++)
|
||||
if (pScreenPriv->screen->fb[fb].depth == 24)
|
||||
{
|
||||
bpp = pScreenPriv->screen->fb[fb].bitsPerPixel;
|
||||
break;
|
||||
}
|
||||
}
|
||||
pPixmap = fbCreatePixmapBpp (pScreen, w, h, depth, bpp);
|
||||
if (!pPixmap)
|
||||
return NULL;
|
||||
pKaaPixmap = KaaGetPixmapPriv(pPixmap);
|
||||
|
|
@ -295,27 +289,52 @@ kaaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth)
|
|||
return pPixmap;
|
||||
}
|
||||
|
||||
PixmapPtr
|
||||
kaaGetDrawingPixmap (DrawablePtr pDrawable, int *x, int *y)
|
||||
static Bool
|
||||
kaaPixmapIsOffscreen(PixmapPtr p)
|
||||
{
|
||||
if (pDrawable->type == DRAWABLE_WINDOW) {
|
||||
if (x)
|
||||
*x = pDrawable->x;
|
||||
if (y)
|
||||
*y = pDrawable->y;
|
||||
ScreenPtr pScreen = p->drawable.pScreen;
|
||||
KdScreenPriv(pScreen);
|
||||
|
||||
return (*pDrawable->pScreen->GetScreenPixmap) (pDrawable->pScreen);
|
||||
}
|
||||
else if (KaaDrawableIsOffscreenPixmap (pDrawable))
|
||||
{
|
||||
return ((unsigned long) ((CARD8 *) p->devPrivate.ptr -
|
||||
(CARD8 *) pScreenPriv->screen->memory_base) <
|
||||
pScreenPriv->screen->memory_size);
|
||||
}
|
||||
|
||||
static PixmapPtr
|
||||
kaaGetOffscreenPixmap (DrawablePtr pDrawable, int *xp, int *yp)
|
||||
{
|
||||
PixmapPtr pPixmap;
|
||||
int x = 0, y = 0;
|
||||
|
||||
if (pDrawable->type == DRAWABLE_WINDOW) {
|
||||
pPixmap = (*pDrawable->pScreen->GetWindowPixmap) ((WindowPtr) pDrawable);
|
||||
if (x)
|
||||
*x = 0;
|
||||
x += pDrawable->x;
|
||||
if (y)
|
||||
*y = 0;
|
||||
return ((PixmapPtr)pDrawable);
|
||||
y += pDrawable->y;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
pPixmap = (PixmapPtr) pDrawable;
|
||||
if (kaaPixmapIsOffscreen (pPixmap))
|
||||
{
|
||||
x += pPixmap->drawable.x;
|
||||
y += pPixmap->drawable.y;
|
||||
if (xp) *xp = x;
|
||||
if (yp) *yp = y;
|
||||
return pPixmap;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static Bool
|
||||
kaaDrawableIsOffscreen (DrawablePtr pDrawable)
|
||||
{
|
||||
PixmapPtr pPixmap;
|
||||
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||
pPixmap = (*pDrawable->pScreen->GetWindowPixmap) ((WindowPtr) pDrawable);
|
||||
else
|
||||
pPixmap = (PixmapPtr) pDrawable;
|
||||
return kaaPixmapIsOffscreen (pPixmap);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -335,7 +354,7 @@ kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
|
|||
|
||||
if (!pScreenPriv->enabled ||
|
||||
pGC->fillStyle != FillSolid ||
|
||||
!(pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) ||
|
||||
!(pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) ||
|
||||
!(*pKaaScr->info->PrepareSolid) (pPixmap,
|
||||
pGC->alu,
|
||||
pGC->planemask,
|
||||
|
|
@ -389,7 +408,8 @@ kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
|
|||
if (partX2 > fullX2)
|
||||
partX2 = fullX2;
|
||||
if (partX2 > partX1)
|
||||
(*pKaaScr->info->Solid) (partX1, fullY1, partX2, fullY1 + 1);
|
||||
(*pKaaScr->info->Solid) (partX1, fullY1,
|
||||
partX2, fullY1 + 1);
|
||||
}
|
||||
pbox++;
|
||||
}
|
||||
|
|
@ -418,15 +438,15 @@ kaaCopyNtoN (DrawablePtr pSrcDrawable,
|
|||
|
||||
/* Migrate pixmaps to same place as destination */
|
||||
if (pScreenPriv->enabled && pSrcDrawable->type == DRAWABLE_PIXMAP) {
|
||||
if (KaaDrawableIsScreen (pDstDrawable))
|
||||
if (kaaDrawableIsOffscreen (pDstDrawable))
|
||||
kaaPixmapUseScreen ((PixmapPtr) pSrcDrawable);
|
||||
else
|
||||
kaaPixmapUseMemory ((PixmapPtr) pSrcDrawable);
|
||||
}
|
||||
|
||||
if (pScreenPriv->enabled &&
|
||||
(pSrcPixmap = kaaGetDrawingPixmap (pSrcDrawable, NULL, NULL)) &&
|
||||
(pDstPixmap = kaaGetDrawingPixmap (pDstDrawable, NULL, NULL)) &&
|
||||
(pSrcPixmap = kaaGetOffscreenPixmap (pSrcDrawable, NULL, NULL)) &&
|
||||
(pDstPixmap = kaaGetOffscreenPixmap (pDstDrawable, NULL, NULL)) &&
|
||||
(*pKaaScr->info->PrepareCopy) (pSrcPixmap,
|
||||
pDstPixmap,
|
||||
dx,
|
||||
|
|
@ -483,7 +503,7 @@ kaaPolyFillRect(DrawablePtr pDrawable,
|
|||
|
||||
if (!pScreenPriv->enabled ||
|
||||
pGC->fillStyle != FillSolid ||
|
||||
!(pPixmap = kaaGetDrawingPixmap (pDrawable, &xorg, &yorg)) ||
|
||||
!(pPixmap = kaaGetOffscreenPixmap (pDrawable, &xorg, &yorg)) ||
|
||||
!(*pKaaScr->info->PrepareSolid) (pPixmap,
|
||||
pGC->alu,
|
||||
pGC->planemask,
|
||||
|
|
@ -577,7 +597,7 @@ kaaSolidBoxClipped (DrawablePtr pDrawable,
|
|||
int partX1, partX2, partY1, partY2;
|
||||
|
||||
if (!pScreenPriv->enabled ||
|
||||
!(pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) ||
|
||||
!(pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) ||
|
||||
!(*pKaaScr->info->PrepareSolid) (pPixmap, GXcopy, pm, fg))
|
||||
{
|
||||
KdCheckSync (pDrawable->pScreen);
|
||||
|
|
@ -781,7 +801,7 @@ kaaValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
|
|||
{
|
||||
fbValidateGC (pGC, changes, pDrawable);
|
||||
|
||||
if (KaaDrawableIsScreen (pDrawable))
|
||||
if (kaaDrawableIsOffscreen (pDrawable))
|
||||
pGC->ops = (GCOps *) &kaaOps;
|
||||
else
|
||||
pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
|
||||
|
|
@ -843,7 +863,7 @@ kaaFillRegionSolid (DrawablePtr pDrawable,
|
|||
PixmapPtr pPixmap;
|
||||
|
||||
if (pScreenPriv->enabled &&
|
||||
(pPixmap = kaaGetDrawingPixmap (pDrawable, NULL, NULL)) &&
|
||||
(pPixmap = kaaGetOffscreenPixmap (pDrawable, NULL, NULL)) &&
|
||||
(*pKaaScr->info->PrepareSolid) (pPixmap, GXcopy, FB_ALLONES, pixel))
|
||||
{
|
||||
int nbox = REGION_NUM_RECTS (pRegion);
|
||||
|
|
@ -933,7 +953,8 @@ kaaDrawInit (ScreenPtr pScreen,
|
|||
KaaScreenInfoPtr pScreenInfo)
|
||||
{
|
||||
KaaScreenPrivPtr pKaaScr;
|
||||
KdScreenInfo *screen = KdGetScreenPriv (pScreen)->screen;
|
||||
KdScreenPriv(pScreen);
|
||||
KdScreenInfo *screen = pScreenPriv->screen;
|
||||
#ifdef RENDER
|
||||
PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
|
||||
#endif
|
||||
|
|
@ -974,15 +995,13 @@ kaaDrawInit (ScreenPtr pScreen,
|
|||
* Hookup offscreen pixmaps
|
||||
*/
|
||||
if ((pKaaScr->info->flags & KAA_OFFSCREEN_PIXMAPS) &&
|
||||
screen->off_screen_size > 0)
|
||||
screen->off_screen_base < screen->memory_size)
|
||||
{
|
||||
pKaaScr->CreatePixmap = pScreen->CreatePixmap;
|
||||
pScreen->CreatePixmap = kaaCreatePixmap;
|
||||
pKaaScr->DestroyPixmap = pScreen->DestroyPixmap;
|
||||
pScreen->DestroyPixmap = kaaDestroyPixmap;
|
||||
if (!AllocatePixmapPrivate(pScreen, kaaPixmapPrivateIndex,
|
||||
sizeof (KaaPixmapPrivRec)))
|
||||
return FALSE;
|
||||
pScreen->CreatePixmap = kaaCreatePixmap;
|
||||
pScreen->DestroyPixmap = kaaDestroyPixmap;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -993,3 +1012,10 @@ kaaDrawInit (ScreenPtr pScreen,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
kaaDrawFini (ScreenPtr pScreen)
|
||||
{
|
||||
KaaScreenPriv(pScreen);
|
||||
|
||||
xfree (pKaaScr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -305,11 +305,3 @@ const GCOps kdAsyncPixmapGCOps = {
|
|||
,NULL
|
||||
#endif
|
||||
};
|
||||
|
||||
void
|
||||
KdAssertSync (ScreenPtr pScreen)
|
||||
{
|
||||
KdScreenPriv(pScreen);
|
||||
KdCardInfo *card = pScreenPriv->card;
|
||||
assert (!card->needSync);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -844,7 +844,7 @@ KdCloseScreen (int index, ScreenPtr pScreen)
|
|||
pScreen->CloseScreen = pScreenPriv->CloseScreen;
|
||||
ret = (*pScreen->CloseScreen) (index, pScreen);
|
||||
|
||||
if (screen->off_screen_size > 0)
|
||||
if (screen->off_screen_base < screen->memory_size)
|
||||
KdOffscreenFini (pScreen);
|
||||
|
||||
if (pScreenPriv->dpmsState != KD_DPMS_NORMAL)
|
||||
|
|
@ -1130,7 +1130,7 @@ KdScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
|
|||
if (!(*card->cfuncs->initAccel) (pScreen))
|
||||
screen->dumb = TRUE;
|
||||
|
||||
if (screen->off_screen_size > 0)
|
||||
if (screen->off_screen_base < screen->memory_size)
|
||||
KdOffscreenInit (pScreen);
|
||||
|
||||
#ifdef PSEUDO8
|
||||
|
|
|
|||
|
|
@ -119,8 +119,8 @@ typedef struct _KdScreenInfo {
|
|||
DDXPointRec origin;
|
||||
KdFrameBuffer fb[KD_MAX_FB];
|
||||
CARD8 *memory_base;
|
||||
int off_screen_base;
|
||||
int off_screen_size;
|
||||
unsigned long memory_size;
|
||||
unsigned long off_screen_base;
|
||||
struct _RealOffscreenArea *off_screen_areas;
|
||||
} KdScreenInfo;
|
||||
|
||||
|
|
@ -351,6 +351,9 @@ Bool
|
|||
kaaDrawInit (ScreenPtr pScreen,
|
||||
KaaScreenInfoPtr pScreenInfo);
|
||||
|
||||
void
|
||||
kaaDrawFini (ScreenPtr pScreen);
|
||||
|
||||
void
|
||||
kaaWrapGC (GCPtr pGC);
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ KdOffscreenValidate (ScreenPtr pScreen)
|
|||
|
||||
prev = area;
|
||||
}
|
||||
assert (prev->area.offset + prev->area.size == pScreenPriv->screen->off_screen_size);
|
||||
assert (prev->area.offset + prev->area.size == pScreenPriv->screen->memory_size);
|
||||
}
|
||||
#else
|
||||
#define KdOffscreenValidate(s)
|
||||
|
|
@ -97,7 +97,7 @@ KdOffscreenAlloc (ScreenPtr pScreen, int size, int align,
|
|||
}
|
||||
|
||||
/* throw out requests that cannot fit */
|
||||
if (size > pScreenPriv->screen->off_screen_size)
|
||||
if (size > (pScreenPriv->screen->memory_size - pScreenPriv->screen->off_screen_base))
|
||||
{
|
||||
DBG_OFFSCREEN (("Alloc 0x%x -> TOBIG\n", size));
|
||||
return NULL;
|
||||
|
|
@ -280,7 +280,7 @@ KdOffscreenInit (ScreenPtr pScreen)
|
|||
|
||||
area->area.screen = NULL;
|
||||
area->area.offset = pScreenPriv->screen->off_screen_base;
|
||||
area->area.size = pScreenPriv->screen->off_screen_size;
|
||||
area->area.size = pScreenPriv->screen->memory_size - area->area.offset;
|
||||
area->save = 0;
|
||||
area->locked = FALSE;
|
||||
area->next = NULL;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ INCLUDES = \
|
|||
-I$(top_srcdir)/fb \
|
||||
-I$(top_srcdir)/hw/kdrive/src \
|
||||
-I$(top_srcdir)/mi \
|
||||
-I$(top_srcdir)/miext/layer \
|
||||
-I$(top_srcdir)/miext/damage \
|
||||
-I$(top_srcdir)/miext/shadow \
|
||||
-I$(top_srcdir)/randr \
|
||||
-I$(top_srcdir)/render \
|
||||
|
|
@ -25,9 +25,9 @@ Xvesa_LDADD = \
|
|||
libvesa.a \
|
||||
$(top_builddir)/dix/libdix.a \
|
||||
$(top_builddir)/os/libos.a \
|
||||
$(top_builddir)/miext/layer/liblayer.a \
|
||||
$(top_builddir)/hw/kdrive/src/libkdrive.a \
|
||||
$(top_builddir)/hw/kdrive/linux/liblinux.a \
|
||||
$(top_builddir)/miext/damage/libdamage.a \
|
||||
$(top_builddir)/miext/shadow/libshadow.a \
|
||||
$(top_builddir)/randr/librandr.a \
|
||||
$(top_builddir)/render/librender.a \
|
||||
|
|
|
|||
|
|
@ -463,8 +463,6 @@ vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr)
|
|||
pscr->randr = screen->randr;
|
||||
pscr->shadow = vesa_shadow;
|
||||
pscr->origDepth = screen->fb[0].depth;
|
||||
pscr->layerKind = LAYER_FB;
|
||||
|
||||
/*
|
||||
* Compute visual support for the selected depth
|
||||
*/
|
||||
|
|
@ -683,7 +681,7 @@ void
|
|||
vesaUpdateMono (ScreenPtr pScreen,
|
||||
shadowBufPtr pBuf)
|
||||
{
|
||||
RegionPtr damage = &pBuf->damage;
|
||||
RegionPtr damage = shadowDamage(pBuf);
|
||||
PixmapPtr pShadow = pBuf->pPixmap;
|
||||
int nbox = REGION_NUM_RECTS (damage);
|
||||
BoxPtr pbox = REGION_RECTS (damage);
|
||||
|
|
@ -831,16 +829,15 @@ vesaConfigureScreen (ScreenPtr pScreen)
|
|||
KdSetMouseMatrix (&m);
|
||||
}
|
||||
|
||||
LayerPtr
|
||||
vesaLayerCreate (ScreenPtr pScreen)
|
||||
PixmapPtr
|
||||
vesaGetPixmap (ScreenPtr pScreen)
|
||||
{
|
||||
KdScreenPriv(pScreen);
|
||||
KdScreenInfo *screen = pScreenPriv->screen;
|
||||
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
|
||||
ShadowUpdateProc update;
|
||||
ShadowWindowProc window = 0;
|
||||
PixmapPtr pPixmap;
|
||||
int kind;
|
||||
PixmapPtr pShadow, pPixmap;
|
||||
|
||||
if (pscr->shadow)
|
||||
{
|
||||
|
|
@ -872,23 +869,35 @@ vesaLayerCreate (ScreenPtr pScreen)
|
|||
break;
|
||||
}
|
||||
|
||||
kind = LAYER_SHADOW;
|
||||
pPixmap = 0;
|
||||
pPixmap = (*pScreen->CreatePixmap) (pScreen,
|
||||
pScreen->width,
|
||||
pScreen->height,
|
||||
screen->fb[0].depth);
|
||||
if (!pPixmap)
|
||||
return NullPixmap;
|
||||
if (!shadowSet (pScreen, pPixmap, update,
|
||||
window, pscr->randr, 0))
|
||||
{
|
||||
(*pScreen->DestroyPixmap) (pPixmap);
|
||||
return NullPixmap;
|
||||
}
|
||||
pShadow = pPixmap;
|
||||
}
|
||||
else
|
||||
{
|
||||
kind = pscr->layerKind;
|
||||
pPixmap = LAYER_SCREEN_PIXMAP;
|
||||
update = 0;
|
||||
window = 0;
|
||||
pPixmap = (*pScreen->GetScreenPixmap) (pScreen);
|
||||
pShadow = 0;
|
||||
shadowUnset (pScreen);
|
||||
}
|
||||
|
||||
if (pscr->pShadow)
|
||||
(*pScreen->DestroyPixmap) (pscr->pShadow);
|
||||
pscr->pShadow = pShadow;
|
||||
|
||||
if (vesa_verbose)
|
||||
ErrorF ("Mode selected %dx%dx%d\n",
|
||||
pScreen->width, pScreen->height, screen->fb[0].depth);
|
||||
|
||||
return LayerCreate (pScreen, kind, screen->fb[0].depth,
|
||||
pPixmap, update, window, pscr->randr, 0);
|
||||
return pPixmap;
|
||||
}
|
||||
|
||||
Bool
|
||||
|
|
@ -1013,7 +1022,11 @@ vesaMapFramebuffer (KdScreenInfo *screen)
|
|||
pscr->fb = NULL;
|
||||
break;
|
||||
}
|
||||
screen->memory_base = pscr->fb;
|
||||
screen->memory_size = pscr->fb_size;
|
||||
screen->fb[0].frameBuffer = (CARD8 *)(pscr->fb);
|
||||
screen->off_screen_base = screen->fb[0].byteStride * screen->height;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -1109,25 +1122,13 @@ vesaRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
|
|||
}
|
||||
|
||||
int
|
||||
vesaLayerAdd (WindowPtr pWin, pointer value)
|
||||
vesaPixmapSet (WindowPtr pWin, pointer value)
|
||||
{
|
||||
ScreenPtr pScreen = pWin->drawable.pScreen;
|
||||
LayerPtr pLayer = (LayerPtr) value;
|
||||
|
||||
if (!LayerWindowAdd (pScreen, pLayer, pWin))
|
||||
return WT_STOPWALKING;
|
||||
|
||||
return WT_WALKCHILDREN;
|
||||
}
|
||||
|
||||
int
|
||||
vesaLayerRemove (WindowPtr pWin, pointer value)
|
||||
{
|
||||
ScreenPtr pScreen = pWin->drawable.pScreen;
|
||||
LayerPtr pLayer = (LayerPtr) value;
|
||||
|
||||
LayerWindowRemove (pScreen, pLayer, pWin);
|
||||
PixmapPtr pPixmap = value;
|
||||
|
||||
pWin->drawable.serialNumber = NEXT_SERIAL_NUMBER;
|
||||
(*pScreen->SetWindowPixmap) (pWin, pPixmap);
|
||||
return WT_WALKCHILDREN;
|
||||
}
|
||||
|
||||
|
|
@ -1150,8 +1151,8 @@ vesaRandRSetConfig (ScreenPtr pScreen,
|
|||
int oldheight;
|
||||
int oldmmwidth;
|
||||
int oldmmheight;
|
||||
LayerPtr pNewLayer;
|
||||
int newwidth, newheight;
|
||||
PixmapPtr pPixmap;
|
||||
|
||||
if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
|
||||
{
|
||||
|
|
@ -1225,13 +1226,15 @@ vesaRandRSetConfig (ScreenPtr pScreen,
|
|||
break;
|
||||
}
|
||||
|
||||
KdOffscreenSwapOut (screen->pScreen);
|
||||
|
||||
vesaUnmapFramebuffer (screen);
|
||||
if (!vesaMapFramebuffer (screen))
|
||||
goto bail3;
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* XXX can't switch depths yet
|
||||
* XXX can't switch depths
|
||||
*/
|
||||
screen->fb[0].depth = depth;
|
||||
screen->fb[0].bitsPerPixel = bpp;
|
||||
|
|
@ -1259,20 +1262,14 @@ vesaRandRSetConfig (ScreenPtr pScreen,
|
|||
}
|
||||
|
||||
/*
|
||||
* Create the layer
|
||||
* Get the pixmap that windows live in
|
||||
*/
|
||||
pNewLayer = vesaLayerCreate (pScreen);
|
||||
if (!pNewLayer)
|
||||
pPixmap = vesaGetPixmap (pScreen);
|
||||
if (!pPixmap)
|
||||
goto bail4;
|
||||
|
||||
if (WalkTree (pScreen, vesaLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
|
||||
goto bail5;
|
||||
WalkTree (pScreen, vesaPixmapSet, (pointer) pPixmap);
|
||||
|
||||
WalkTree (pScreen, vesaLayerRemove, (pointer) pscr->pLayer);
|
||||
LayerDestroy (pScreen, pscr->pLayer);
|
||||
|
||||
pscr->pLayer = pNewLayer;
|
||||
|
||||
/* set the subpixel order */
|
||||
KdSetSubpixelOrder (pScreen, pscr->randr);
|
||||
|
||||
|
|
@ -1281,9 +1278,6 @@ vesaRandRSetConfig (ScreenPtr pScreen,
|
|||
|
||||
return TRUE;
|
||||
|
||||
bail5:
|
||||
WalkTree (pScreen, vesaLayerRemove, (pointer) pNewLayer);
|
||||
LayerDestroy (pScreen, pNewLayer);
|
||||
bail4:
|
||||
vesaUnmapFramebuffer (screen);
|
||||
*pscr = oldscr;
|
||||
|
|
@ -1340,27 +1334,18 @@ vesaRandRInit (ScreenPtr pScreen)
|
|||
Bool
|
||||
vesaInitScreen(ScreenPtr pScreen)
|
||||
{
|
||||
if (!LayerStartInit (pScreen))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
return shadowSetup (pScreen);
|
||||
}
|
||||
|
||||
Bool
|
||||
vesaFinishInitScreen (ScreenPtr pScreen)
|
||||
{
|
||||
KdScreenPriv(pScreen);
|
||||
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
|
||||
PixmapPtr pPixmap;
|
||||
|
||||
pscr->layerKind = LayerNewKind (pScreen);
|
||||
|
||||
if (!LayerFinishInit (pScreen))
|
||||
return FALSE;
|
||||
|
||||
vesaConfigureScreen (pScreen);
|
||||
|
||||
pscr->pLayer = vesaLayerCreate (pScreen);
|
||||
if (!pscr->pLayer)
|
||||
pPixmap = vesaGetPixmap (pScreen);
|
||||
if (!pPixmap)
|
||||
return FALSE;
|
||||
|
||||
#ifdef RANDR
|
||||
|
|
@ -1668,6 +1653,11 @@ vesaScreenFini(KdScreenInfo *screen)
|
|||
{
|
||||
VesaScreenPrivPtr pscr = screen->driver;
|
||||
|
||||
if (pscr->pShadow)
|
||||
{
|
||||
(*screen->pScreen->DestroyPixmap) (pscr->pShadow);
|
||||
pscr->pShadow = 0;
|
||||
}
|
||||
vesaUnmapFramebuffer (screen);
|
||||
screen->fb[0].depth = pscr->origDepth;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ THE SOFTWARE.
|
|||
#define _VESA_H_
|
||||
|
||||
#include "kdrive.h"
|
||||
#include "layer.h"
|
||||
#include "shadow.h"
|
||||
#include "vm86.h"
|
||||
#ifdef RANDR
|
||||
#include "randrstr.h"
|
||||
|
|
@ -98,11 +98,10 @@ typedef struct _VesaScreenPriv {
|
|||
Rotation randr;
|
||||
int mapping;
|
||||
int origDepth;
|
||||
int layerKind;
|
||||
void *fb;
|
||||
int fb_size;
|
||||
CARD32 fb_phys;
|
||||
LayerPtr pLayer;
|
||||
PixmapPtr pShadow;
|
||||
} VesaScreenPrivRec, *VesaScreenPrivPtr;
|
||||
|
||||
extern int vesa_video_mode;
|
||||
|
|
@ -145,8 +144,8 @@ vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr);
|
|||
Bool
|
||||
vesaScreenInit(KdScreenInfo *screen);
|
||||
|
||||
LayerPtr
|
||||
vesaLayerCreate (ScreenPtr pScreen);
|
||||
PixmapPtr
|
||||
vesaGetPixmap (ScreenPtr pScreen);
|
||||
|
||||
Bool
|
||||
vesaMapFramebuffer (KdScreenInfo *screen);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue