mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-08 20:48:05 +02:00
Merge branch 'server-1.5-branch' into xorg-server-1.5-apple
This commit is contained in:
commit
33bfb761a7
16 changed files with 177 additions and 76 deletions
|
|
@ -1364,6 +1364,7 @@ if test "x$XORG" = xyes -o "x$XGL" = xyes; then
|
||||||
CFLAGS=$PCIACCESS_CFLAGS
|
CFLAGS=$PCIACCESS_CFLAGS
|
||||||
LIBS=$PCIACCESS_LIBS
|
LIBS=$PCIACCESS_LIBS
|
||||||
AC_CHECK_FUNCS([pci_system_init_dev_mem])
|
AC_CHECK_FUNCS([pci_system_init_dev_mem])
|
||||||
|
AC_CHECK_FUNCS([pci_device_enable])
|
||||||
LIBS=$SAVE_LIBS
|
LIBS=$SAVE_LIBS
|
||||||
CFLAGS=$SAVE_CFLAGS
|
CFLAGS=$SAVE_CFLAGS
|
||||||
XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $DLOPEN_LIBS $GLX_SYS_LIBS"
|
XORG_SYS_LIBS="$XORG_SYS_LIBS $PCIACCESS_LIBS $DLOPEN_LIBS $GLX_SYS_LIBS"
|
||||||
|
|
@ -1633,8 +1634,8 @@ AC_MSG_RESULT([$XPRINT])
|
||||||
|
|
||||||
if test "x$XPRINT" = xyes; then
|
if test "x$XPRINT" = xyes; then
|
||||||
PKG_CHECK_MODULES([XPRINTMODULES], [printproto x11 xfont $XDMCP_MODULES xau])
|
PKG_CHECK_MODULES([XPRINTMODULES], [printproto x11 xfont $XDMCP_MODULES xau])
|
||||||
XPRINT_CFLAGS="$XPRINTMODULES_CFLAGS"
|
XPRINT_CFLAGS="$XPRINTMODULES_CFLAGS -DXPRINT"
|
||||||
XPRINT_LIBS="$XEXT_LIB $CONFIG_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $RENDER_LIB $COMPOSITE_LIB $RANDR_LIB $XI_LIB $FIXES_LIB $DAMAGE_LIB $XI_LIB $GLX_LIBS $MIEXT_DAMAGE_LIB $XKB_LIB $XKB_STUB_LIB"
|
XPRINT_LIBS="$XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $RENDER_LIB $COMPOSITE_LIB $RANDR_LIB $XI_LIB $FIXES_LIB $DAMAGE_LIB $XI_LIB $GLX_LIBS $MIEXT_DAMAGE_LIB $XKB_LIB $XKB_STUB_LIB"
|
||||||
XPRINT_SYS_LIBS="$XPRINTMODULES_LIBS"
|
XPRINT_SYS_LIBS="$XPRINTMODULES_LIBS"
|
||||||
|
|
||||||
xpconfigdir=$libdir/X11/xserver
|
xpconfigdir=$libdir/X11/xserver
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,10 @@
|
||||||
noinst_LTLIBRARIES = libdix.la libxpstubs.la
|
standard_dix_libs = libdix.la libxpstubs.la
|
||||||
|
|
||||||
|
if XPRINT
|
||||||
|
noinst_LTLIBRARIES = $(standard_dix_libs) libXpdix.la
|
||||||
|
else
|
||||||
|
noinst_LTLIBRARIES = $(standard_dix_libs)
|
||||||
|
endif
|
||||||
|
|
||||||
AM_CFLAGS = $(DIX_CFLAGS) \
|
AM_CFLAGS = $(DIX_CFLAGS) \
|
||||||
-DVENDOR_NAME=\""@VENDOR_NAME@"\" \
|
-DVENDOR_NAME=\""@VENDOR_NAME@"\" \
|
||||||
|
|
@ -39,7 +45,11 @@ libdix_la_SOURCES = \
|
||||||
libxpstubs_la_SOURCES = \
|
libxpstubs_la_SOURCES = \
|
||||||
xpstubs.c
|
xpstubs.c
|
||||||
|
|
||||||
INCLUDES = -I$(top_srcdir)/Xprint
|
if XPRINT
|
||||||
|
libXpdix_la_SOURCES = $(libdix_la_SOURCES)
|
||||||
|
libXpdix_la_CPPFLAGS = -I$(top_srcdir)/hw/xprint
|
||||||
|
libXpdix_la_CFLAGS = $(AM_CFLAGS) $(XPRINT_CFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
EXTRA_DIST = buildatoms BuiltInAtoms CHANGES Xserver.d Xserver-dtrace.h.in
|
EXTRA_DIST = buildatoms BuiltInAtoms CHANGES Xserver.d Xserver-dtrace.h.in
|
||||||
|
|
||||||
|
|
|
||||||
75
exa/exa.c
75
exa/exa.c
|
|
@ -248,6 +248,19 @@ exaSetAccelBlock(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
|
||||||
pExaPixmap->accel_blocked |= EXA_RANGE_HEIGHT;
|
pExaPixmap->accel_blocked |= EXA_RANGE_HEIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
exaSetFbPitch(ExaScreenPrivPtr pExaScr, ExaPixmapPrivPtr pExaPixmap,
|
||||||
|
int w, int h, int bpp)
|
||||||
|
{
|
||||||
|
if (pExaScr->info->flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
|
||||||
|
pExaPixmap->fb_pitch = (1 << (exaLog2(w - 1) + 1)) * bpp / 8;
|
||||||
|
else
|
||||||
|
pExaPixmap->fb_pitch = w * bpp / 8;
|
||||||
|
|
||||||
|
pExaPixmap->fb_pitch = EXA_ALIGN(pExaPixmap->fb_pitch,
|
||||||
|
pExaScr->info->pixmapPitchAlign);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* exaCreatePixmap() creates a new pixmap.
|
* exaCreatePixmap() creates a new pixmap.
|
||||||
*
|
*
|
||||||
|
|
@ -292,12 +305,8 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
|
||||||
if (paddedWidth / 4 > 32767 || h > 32767)
|
if (paddedWidth / 4 > 32767 || h > 32767)
|
||||||
return NullPixmap;
|
return NullPixmap;
|
||||||
|
|
||||||
if (pExaScr->info->flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
|
exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
|
||||||
pExaPixmap->fb_pitch = (1 << (exaLog2(w - 1) + 1)) * bpp / 8;
|
|
||||||
else
|
|
||||||
pExaPixmap->fb_pitch = w * bpp / 8;
|
|
||||||
pExaPixmap->fb_pitch = EXA_ALIGN(pExaPixmap->fb_pitch,
|
|
||||||
pExaScr->info->pixmapPitchAlign);
|
|
||||||
if (paddedWidth < pExaPixmap->fb_pitch)
|
if (paddedWidth < pExaPixmap->fb_pitch)
|
||||||
paddedWidth = pExaPixmap->fb_pitch;
|
paddedWidth = pExaPixmap->fb_pitch;
|
||||||
|
|
||||||
|
|
@ -331,12 +340,7 @@ exaCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
|
||||||
pExaPixmap->offscreen = FALSE;
|
pExaPixmap->offscreen = FALSE;
|
||||||
|
|
||||||
pExaPixmap->fb_ptr = NULL;
|
pExaPixmap->fb_ptr = NULL;
|
||||||
if (pExaScr->info->flags & EXA_OFFSCREEN_ALIGN_POT && w != 1)
|
exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
|
||||||
pExaPixmap->fb_pitch = (1 << (exaLog2(w - 1) + 1)) * bpp / 8;
|
|
||||||
else
|
|
||||||
pExaPixmap->fb_pitch = w * bpp / 8;
|
|
||||||
pExaPixmap->fb_pitch = EXA_ALIGN(pExaPixmap->fb_pitch,
|
|
||||||
pExaScr->info->pixmapPitchAlign);
|
|
||||||
pExaPixmap->fb_size = pExaPixmap->fb_pitch * h;
|
pExaPixmap->fb_size = pExaPixmap->fb_pitch * h;
|
||||||
|
|
||||||
if (pExaPixmap->fb_pitch > 131071) {
|
if (pExaPixmap->fb_pitch > 131071) {
|
||||||
|
|
@ -384,10 +388,19 @@ exaModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
|
||||||
pExaPixmap = ExaGetPixmapPriv(pPixmap);
|
pExaPixmap = ExaGetPixmapPriv(pPixmap);
|
||||||
|
|
||||||
if (pExaPixmap) {
|
if (pExaPixmap) {
|
||||||
pExaPixmap->sys_ptr = pPixData;
|
if (pPixData)
|
||||||
|
pExaPixmap->sys_ptr = pPixData;
|
||||||
|
|
||||||
exaSetAccelBlock(pExaScr, pExaPixmap,
|
if (devKind > 0)
|
||||||
width, height, bitsPerPixel);
|
pExaPixmap->sys_pitch = devKind;
|
||||||
|
|
||||||
|
if (width > 0 && height > 0 && bitsPerPixel > 0) {
|
||||||
|
exaSetFbPitch(pExaScr, pExaPixmap,
|
||||||
|
width, height, bitsPerPixel);
|
||||||
|
|
||||||
|
exaSetAccelBlock(pExaScr, pExaPixmap,
|
||||||
|
width, height, bitsPerPixel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -686,6 +699,34 @@ exaBitmapToRegion(PixmapPtr pPix)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
exaCreateScreenResources(ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
ExaScreenPriv(pScreen);
|
||||||
|
PixmapPtr pScreenPixmap;
|
||||||
|
Bool b;
|
||||||
|
|
||||||
|
pScreen->CreateScreenResources = pExaScr->SavedCreateScreenResources;
|
||||||
|
b = pScreen->CreateScreenResources(pScreen);
|
||||||
|
pScreen->CreateScreenResources = exaCreateScreenResources;
|
||||||
|
|
||||||
|
if (!b)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
pScreenPixmap = pScreen->GetScreenPixmap(pScreen);
|
||||||
|
|
||||||
|
if (pScreenPixmap) {
|
||||||
|
ExaPixmapPriv(pScreenPixmap);
|
||||||
|
|
||||||
|
exaSetAccelBlock(pExaScr, pExaPixmap,
|
||||||
|
pScreenPixmap->drawable.width,
|
||||||
|
pScreenPixmap->drawable.height,
|
||||||
|
pScreenPixmap->drawable.bitsPerPixel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* exaCloseScreen() unwraps its wrapped screen functions and tears down EXA's
|
* exaCloseScreen() unwraps its wrapped screen functions and tears down EXA's
|
||||||
* screen private, before calling down to the next CloseSccreen.
|
* screen private, before calling down to the next CloseSccreen.
|
||||||
|
|
@ -707,6 +748,7 @@ exaCloseScreen(int i, ScreenPtr pScreen)
|
||||||
pScreen->CopyWindow = pExaScr->SavedCopyWindow;
|
pScreen->CopyWindow = pExaScr->SavedCopyWindow;
|
||||||
pScreen->ChangeWindowAttributes = pExaScr->SavedChangeWindowAttributes;
|
pScreen->ChangeWindowAttributes = pExaScr->SavedChangeWindowAttributes;
|
||||||
pScreen->BitmapToRegion = pExaScr->SavedBitmapToRegion;
|
pScreen->BitmapToRegion = pExaScr->SavedBitmapToRegion;
|
||||||
|
pScreen->CreateScreenResources = pExaScr->SavedCreateScreenResources;
|
||||||
#ifdef RENDER
|
#ifdef RENDER
|
||||||
if (ps) {
|
if (ps) {
|
||||||
ps->Composite = pExaScr->SavedComposite;
|
ps->Composite = pExaScr->SavedComposite;
|
||||||
|
|
@ -864,6 +906,9 @@ exaDriverInit (ScreenPtr pScreen,
|
||||||
pExaScr->SavedBitmapToRegion = pScreen->BitmapToRegion;
|
pExaScr->SavedBitmapToRegion = pScreen->BitmapToRegion;
|
||||||
pScreen->BitmapToRegion = exaBitmapToRegion;
|
pScreen->BitmapToRegion = exaBitmapToRegion;
|
||||||
|
|
||||||
|
pExaScr->SavedCreateScreenResources = pScreen->CreateScreenResources;
|
||||||
|
pScreen->CreateScreenResources = exaCreateScreenResources;
|
||||||
|
|
||||||
#ifdef RENDER
|
#ifdef RENDER
|
||||||
if (ps) {
|
if (ps) {
|
||||||
pExaScr->SavedComposite = ps->Composite;
|
pExaScr->SavedComposite = ps->Composite;
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,8 @@ struct _ExaOffscreenArea {
|
||||||
ExaOffscreenState state;
|
ExaOffscreenState state;
|
||||||
|
|
||||||
ExaOffscreenArea *next;
|
ExaOffscreenArea *next;
|
||||||
|
|
||||||
|
unsigned eviction_cost;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -487,7 +487,8 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
||||||
int src_off_x, src_off_y;
|
int src_off_x, src_off_y;
|
||||||
int dst_off_x, dst_off_y;
|
int dst_off_x, dst_off_y;
|
||||||
ExaMigrationRec pixmaps[2];
|
ExaMigrationRec pixmaps[2];
|
||||||
RegionPtr region = NULL;
|
RegionPtr srcregion = NULL, dstregion = NULL;
|
||||||
|
xRectangle *rects;
|
||||||
|
|
||||||
pSrcPixmap = exaGetDrawablePixmap (pSrcDrawable);
|
pSrcPixmap = exaGetDrawablePixmap (pSrcDrawable);
|
||||||
pDstPixmap = exaGetDrawablePixmap (pDstDrawable);
|
pDstPixmap = exaGetDrawablePixmap (pDstDrawable);
|
||||||
|
|
@ -495,33 +496,38 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
||||||
exaGetDrawableDeltas (pSrcDrawable, pSrcPixmap, &src_off_x, &src_off_y);
|
exaGetDrawableDeltas (pSrcDrawable, pSrcPixmap, &src_off_x, &src_off_y);
|
||||||
exaGetDrawableDeltas (pDstDrawable, pDstPixmap, &dst_off_x, &dst_off_y);
|
exaGetDrawableDeltas (pDstDrawable, pDstPixmap, &dst_off_x, &dst_off_y);
|
||||||
|
|
||||||
if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask,
|
rects = xalloc(nbox * sizeof(xRectangle));
|
||||||
pGC->fillStyle, pGC->alu)) {
|
|
||||||
xRectangle *rects = xalloc(nbox * sizeof(xRectangle));
|
|
||||||
|
|
||||||
if (rects) {
|
if (rects) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < nbox; i++) {
|
for (i = 0; i < nbox; i++) {
|
||||||
rects[i].x = pbox[i].x1 + dst_off_x;
|
rects[i].x = pbox[i].x1 + dx + src_off_x;
|
||||||
rects[i].y = pbox[i].y1 + dst_off_y;
|
rects[i].y = pbox[i].y1 + dy + src_off_y;
|
||||||
rects[i].width = pbox[i].x2 - pbox[i].x1;
|
rects[i].width = pbox[i].x2 - pbox[i].x1;
|
||||||
rects[i].height = pbox[i].y2 - pbox[i].y1;
|
rects[i].height = pbox[i].y2 - pbox[i].y1;
|
||||||
}
|
}
|
||||||
|
|
||||||
region = RECTS_TO_REGION(pScreen, nbox, rects, CT_YXBANDED);
|
srcregion = RECTS_TO_REGION(pScreen, nbox, rects, CT_YXBANDED);
|
||||||
xfree(rects);
|
xfree(rects);
|
||||||
|
|
||||||
|
if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask,
|
||||||
|
pGC->fillStyle, pGC->alu)) {
|
||||||
|
dstregion = REGION_CREATE(pScreen, NullBox, 0);
|
||||||
|
REGION_COPY(pScreen, dstregion, srcregion);
|
||||||
|
REGION_TRANSLATE(pScreen, dstregion, dst_off_x - dx - src_off_x,
|
||||||
|
dst_off_y - dy - src_off_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
pixmaps[0].as_dst = TRUE;
|
||||||
pixmaps[0].as_src = FALSE;
|
pixmaps[0].as_src = FALSE;
|
||||||
pixmaps[0].pPix = pDstPixmap;
|
pixmaps[0].pPix = pDstPixmap;
|
||||||
pixmaps[0].pReg = region;
|
pixmaps[0].pReg = dstregion;
|
||||||
pixmaps[1].as_dst = FALSE;
|
pixmaps[1].as_dst = FALSE;
|
||||||
pixmaps[1].as_src = TRUE;
|
pixmaps[1].as_src = TRUE;
|
||||||
pixmaps[1].pPix = pSrcPixmap;
|
pixmaps[1].pPix = pSrcPixmap;
|
||||||
pixmaps[1].pReg = NULL;
|
pixmaps[1].pReg = srcregion;
|
||||||
|
|
||||||
pSrcExaPixmap = ExaGetPixmapPriv (pSrcPixmap);
|
pSrcExaPixmap = ExaGetPixmapPriv (pSrcPixmap);
|
||||||
pDstExaPixmap = ExaGetPixmapPriv (pDstPixmap);
|
pDstExaPixmap = ExaGetPixmapPriv (pDstPixmap);
|
||||||
|
|
@ -574,17 +580,21 @@ fallback:
|
||||||
EXA_FALLBACK(("from %p to %p (%c,%c)\n", pSrcDrawable, pDstDrawable,
|
EXA_FALLBACK(("from %p to %p (%c,%c)\n", pSrcDrawable, pDstDrawable,
|
||||||
exaDrawableLocation(pSrcDrawable),
|
exaDrawableLocation(pSrcDrawable),
|
||||||
exaDrawableLocation(pDstDrawable)));
|
exaDrawableLocation(pDstDrawable)));
|
||||||
exaPrepareAccessReg (pDstDrawable, EXA_PREPARE_DEST, region);
|
exaPrepareAccessReg (pDstDrawable, EXA_PREPARE_DEST, dstregion);
|
||||||
exaPrepareAccess (pSrcDrawable, EXA_PREPARE_SRC);
|
exaPrepareAccessReg (pSrcDrawable, EXA_PREPARE_SRC, srcregion);
|
||||||
fbCopyNtoN (pSrcDrawable, pDstDrawable, pGC, pbox, nbox, dx, dy, reverse,
|
fbCopyNtoN (pSrcDrawable, pDstDrawable, pGC, pbox, nbox, dx, dy, reverse,
|
||||||
upsidedown, bitplane, closure);
|
upsidedown, bitplane, closure);
|
||||||
exaFinishAccess (pSrcDrawable, EXA_PREPARE_SRC);
|
exaFinishAccess (pSrcDrawable, EXA_PREPARE_SRC);
|
||||||
exaFinishAccess (pDstDrawable, EXA_PREPARE_DEST);
|
exaFinishAccess (pDstDrawable, EXA_PREPARE_DEST);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (region) {
|
if (dstregion) {
|
||||||
REGION_UNINIT(pScreen, region);
|
REGION_UNINIT(pScreen, dstregion);
|
||||||
REGION_DESTROY(pScreen, region);
|
REGION_DESTROY(pScreen, dstregion);
|
||||||
|
}
|
||||||
|
if (srcregion) {
|
||||||
|
REGION_UNINIT(pScreen, srcregion);
|
||||||
|
REGION_DESTROY(pScreen, srcregion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -940,10 +950,8 @@ exaImageGlyphBlt (DrawablePtr pDrawable,
|
||||||
int dstBpp;
|
int dstBpp;
|
||||||
int dstXoff, dstYoff;
|
int dstXoff, dstYoff;
|
||||||
FbBits depthMask;
|
FbBits depthMask;
|
||||||
Bool fallback;
|
|
||||||
PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
|
PixmapPtr pPixmap = exaGetDrawablePixmap(pDrawable);
|
||||||
ExaPixmapPriv(pPixmap);
|
ExaPixmapPriv(pPixmap);
|
||||||
ExaMigrationRec pixmaps[1];
|
|
||||||
RegionPtr pending_damage = DamagePendingRegion(pExaPixmap->pDamage);
|
RegionPtr pending_damage = DamagePendingRegion(pExaPixmap->pDamage);
|
||||||
BoxRec extents = *REGION_EXTENTS(pScreen, pending_damage);
|
BoxRec extents = *REGION_EXTENTS(pScreen, pending_damage);
|
||||||
int xoff, yoff;
|
int xoff, yoff;
|
||||||
|
|
@ -952,16 +960,8 @@ exaImageGlyphBlt (DrawablePtr pDrawable,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
depthMask = FbFullMask(pDrawable->depth);
|
depthMask = FbFullMask(pDrawable->depth);
|
||||||
fallback = (pGC->planemask & depthMask) != depthMask;
|
|
||||||
|
|
||||||
pixmaps[0].as_dst = TRUE;
|
if ((pGC->planemask & depthMask) != depthMask)
|
||||||
pixmaps[0].as_src = FALSE;
|
|
||||||
pixmaps[0].pPix = pPixmap;
|
|
||||||
pixmaps[0].pReg = fallback ? NULL : pending_damage;
|
|
||||||
|
|
||||||
exaDoMigration(pixmaps, 1, FALSE);
|
|
||||||
|
|
||||||
if (fallback)
|
|
||||||
{
|
{
|
||||||
ExaCheckImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppciInit, pglyphBase);
|
ExaCheckImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppciInit, pglyphBase);
|
||||||
return;
|
return;
|
||||||
|
|
@ -984,7 +984,7 @@ exaImageGlyphBlt (DrawablePtr pDrawable,
|
||||||
extents.y1 -= yoff;
|
extents.y1 -= yoff;
|
||||||
extents.y2 -= yoff;
|
extents.y2 -= yoff;
|
||||||
|
|
||||||
exaPrepareAccessReg (pDrawable, EXA_PREPARE_DEST, pixmaps[0].pReg);
|
exaPrepareAccessReg (pDrawable, EXA_PREPARE_DEST, pending_damage);
|
||||||
|
|
||||||
if (TERMINALFONT (pGC->font) && !glyph)
|
if (TERMINALFONT (pGC->font) && !glyph)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ exaPixmapShouldBeInFB (PixmapPtr pPix)
|
||||||
* If the pixmap is currently dirty, this copies at least the dirty area from
|
* If the pixmap is currently dirty, this copies at least the dirty area from
|
||||||
* FB to system or vice versa. Both areas must be allocated.
|
* FB to system or vice versa. Both areas must be allocated.
|
||||||
*/
|
*/
|
||||||
static _X_INLINE void
|
static void
|
||||||
exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
|
exaCopyDirty(ExaMigrationPtr migrate, RegionPtr pValidDst, RegionPtr pValidSrc,
|
||||||
Bool (*transfer) (PixmapPtr pPix, int x, int y, int w, int h,
|
Bool (*transfer) (PixmapPtr pPix, int x, int y, int w, int h,
|
||||||
char *sys, int sys_pitch), CARD8 *fallback_src,
|
char *sys, int sys_pitch), CARD8 *fallback_src,
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** @file
|
/** @file
|
||||||
* This allocator allocates blocks of memory by maintaining a list of areas
|
* This allocator allocates blocks of memory by maintaining a list of areas.
|
||||||
* and a score for each area. As an area is marked used, its score is
|
* When allocating, the contiguous block of areas with the minimum eviction
|
||||||
* incremented, and periodically all of the areas have their scores decayed by
|
* cost is found and evicted in order to make room for the new allocation.
|
||||||
* a fraction. When allocating, the contiguous block of areas with the minimum
|
|
||||||
* score is found and evicted in order to make room for the new allocation.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "exa_priv.h"
|
#include "exa_priv.h"
|
||||||
|
|
@ -71,19 +69,36 @@ ExaOffscreenKickOut (ScreenPtr pScreen, ExaOffscreenArea *area)
|
||||||
return exaOffscreenFree (pScreen, area);
|
return exaOffscreenFree (pScreen, area);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define AREA_SCORE(area) (area->size / (double)(pExaScr->offScreenCounter - area->last_use))
|
static void
|
||||||
|
exaUpdateEvictionCost(ExaOffscreenArea *area, unsigned offScreenCounter)
|
||||||
|
{
|
||||||
|
unsigned age;
|
||||||
|
|
||||||
|
if (area->state == ExaOffscreenAvail)
|
||||||
|
return;
|
||||||
|
|
||||||
|
age = offScreenCounter - area->last_use;
|
||||||
|
|
||||||
|
/* This is unlikely to happen, but could result in a division by zero... */
|
||||||
|
if (age > (UINT_MAX / 2)) {
|
||||||
|
age = UINT_MAX / 2;
|
||||||
|
area->last_use = offScreenCounter - age;
|
||||||
|
}
|
||||||
|
|
||||||
|
area->eviction_cost = area->size / age;
|
||||||
|
}
|
||||||
|
|
||||||
static ExaOffscreenArea *
|
static ExaOffscreenArea *
|
||||||
exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align)
|
exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align)
|
||||||
{
|
{
|
||||||
ExaOffscreenArea *begin, *end, *best;
|
ExaOffscreenArea *begin, *end, *best;
|
||||||
double score, best_score;
|
unsigned cost, best_cost;
|
||||||
int avail, real_size, tmp;
|
int avail, real_size, tmp;
|
||||||
|
|
||||||
best_score = UINT_MAX;
|
best_cost = UINT_MAX;
|
||||||
begin = end = pExaScr->info->offScreenAreas;
|
begin = end = pExaScr->info->offScreenAreas;
|
||||||
avail = 0;
|
avail = 0;
|
||||||
score = 0;
|
cost = 0;
|
||||||
best = 0;
|
best = 0;
|
||||||
|
|
||||||
while (end != NULL)
|
while (end != NULL)
|
||||||
|
|
@ -106,23 +121,24 @@ exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align)
|
||||||
if (end->state == ExaOffscreenLocked) {
|
if (end->state == ExaOffscreenLocked) {
|
||||||
/* Can't more room here, restart after this locked area */
|
/* Can't more room here, restart after this locked area */
|
||||||
avail = 0;
|
avail = 0;
|
||||||
score = 0;
|
cost = 0;
|
||||||
begin = end;
|
begin = end;
|
||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
avail += end->size;
|
avail += end->size;
|
||||||
score += AREA_SCORE(end);
|
exaUpdateEvictionCost(end, pExaScr->offScreenCounter);
|
||||||
|
cost += end->eviction_cost;
|
||||||
end = end->next;
|
end = end->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check the score, update best */
|
/* Check the cost, update best */
|
||||||
if (avail >= real_size && score < best_score) {
|
if (avail >= real_size && cost < best_cost) {
|
||||||
best = begin;
|
best = begin;
|
||||||
best_score = score;
|
best_cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
avail -= begin->size;
|
avail -= begin->size;
|
||||||
score -= AREA_SCORE(begin);
|
cost -= begin->eviction_cost;
|
||||||
begin = begin->next;
|
begin = begin->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -244,6 +260,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
|
||||||
new_area->state = ExaOffscreenAvail;
|
new_area->state = ExaOffscreenAvail;
|
||||||
new_area->save = NULL;
|
new_area->save = NULL;
|
||||||
new_area->last_use = 0;
|
new_area->last_use = 0;
|
||||||
|
new_area->eviction_cost = 0;
|
||||||
new_area->next = area->next;
|
new_area->next = area->next;
|
||||||
area->next = new_area;
|
area->next = new_area;
|
||||||
area->size = real_size;
|
area->size = real_size;
|
||||||
|
|
@ -409,6 +426,7 @@ exaOffscreenFree (ScreenPtr pScreen, ExaOffscreenArea *area)
|
||||||
area->state = ExaOffscreenAvail;
|
area->state = ExaOffscreenAvail;
|
||||||
area->save = NULL;
|
area->save = NULL;
|
||||||
area->last_use = 0;
|
area->last_use = 0;
|
||||||
|
area->eviction_cost = 0;
|
||||||
/*
|
/*
|
||||||
* Find previous area
|
* Find previous area
|
||||||
*/
|
*/
|
||||||
|
|
@ -474,6 +492,7 @@ exaOffscreenInit (ScreenPtr pScreen)
|
||||||
area->save = NULL;
|
area->save = NULL;
|
||||||
area->next = NULL;
|
area->next = NULL;
|
||||||
area->last_use = 0;
|
area->last_use = 0;
|
||||||
|
area->eviction_cost = 0;
|
||||||
|
|
||||||
/* Add it to the free areas */
|
/* Add it to the free areas */
|
||||||
pExaScr->info->offScreenAreas = area;
|
pExaScr->info->offScreenAreas = area;
|
||||||
|
|
|
||||||
|
|
@ -107,6 +107,7 @@ typedef struct {
|
||||||
CopyWindowProcPtr SavedCopyWindow;
|
CopyWindowProcPtr SavedCopyWindow;
|
||||||
ChangeWindowAttributesProcPtr SavedChangeWindowAttributes;
|
ChangeWindowAttributesProcPtr SavedChangeWindowAttributes;
|
||||||
BitmapToRegionProcPtr SavedBitmapToRegion;
|
BitmapToRegionProcPtr SavedBitmapToRegion;
|
||||||
|
CreateScreenResourcesProcPtr SavedCreateScreenResources;
|
||||||
ModifyPixmapHeaderProcPtr SavedModifyPixmapHeader;
|
ModifyPixmapHeaderProcPtr SavedModifyPixmapHeader;
|
||||||
#ifdef RENDER
|
#ifdef RENDER
|
||||||
CompositeProcPtr SavedComposite;
|
CompositeProcPtr SavedComposite;
|
||||||
|
|
|
||||||
|
|
@ -359,6 +359,7 @@ ExaCheckComposite (CARD8 op,
|
||||||
CARD32
|
CARD32
|
||||||
exaGetPixmapFirstPixel (PixmapPtr pPixmap)
|
exaGetPixmapFirstPixel (PixmapPtr pPixmap)
|
||||||
{
|
{
|
||||||
|
ExaScreenPriv(pPixmap->drawable.pScreen);
|
||||||
CARD32 pixel;
|
CARD32 pixel;
|
||||||
void *fb;
|
void *fb;
|
||||||
Bool need_finish = FALSE;
|
Bool need_finish = FALSE;
|
||||||
|
|
@ -373,7 +374,8 @@ exaGetPixmapFirstPixel (PixmapPtr pPixmap)
|
||||||
fb = pExaPixmap->sys_ptr;
|
fb = pExaPixmap->sys_ptr;
|
||||||
|
|
||||||
/* Try to avoid framebuffer readbacks */
|
/* Try to avoid framebuffer readbacks */
|
||||||
if ((!offscreen && !sys_valid && !damaged) ||
|
if (pExaScr->info->CreatePixmap ||
|
||||||
|
(!offscreen && !sys_valid && !damaged) ||
|
||||||
(offscreen && (!sys_valid || damaged)))
|
(offscreen && (!sys_valid || damaged)))
|
||||||
{
|
{
|
||||||
box.x1 = 0;
|
box.x1 = 0;
|
||||||
|
|
|
||||||
|
|
@ -150,10 +150,14 @@ VidModeGetCurrentModeline(int scrnIndex, pointer *mode, int *dotClock)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
pScrn = xf86Screens[scrnIndex];
|
pScrn = xf86Screens[scrnIndex];
|
||||||
*mode = (pointer)(pScrn->currentMode);
|
|
||||||
*dotClock = pScrn->currentMode->Clock;
|
|
||||||
|
|
||||||
return TRUE;
|
if (pScrn->currentMode) {
|
||||||
|
*mode = (pointer)(pScrn->currentMode);
|
||||||
|
*dotClock = pScrn->currentMode->Clock;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT int
|
_X_EXPORT int
|
||||||
|
|
|
||||||
|
|
@ -278,6 +278,10 @@ xf86ExtendedInitInt10(int entityIndex, int Flags)
|
||||||
struct pci_device *rom_device =
|
struct pci_device *rom_device =
|
||||||
xf86GetPciInfoForEntity(pInt->entityIndex);
|
xf86GetPciInfoForEntity(pInt->entityIndex);
|
||||||
|
|
||||||
|
#if HAVE_PCI_DEVICE_ENABLE
|
||||||
|
pci_device_enable(rom_device);
|
||||||
|
#endif
|
||||||
|
|
||||||
err = pci_device_read_rom(rom_device, (unsigned char *)(V_BIOS));
|
err = pci_device_read_rom(rom_device, (unsigned char *)(V_BIOS));
|
||||||
if (err) {
|
if (err) {
|
||||||
xf86DrvMsg(screen,X_ERROR,"Cannot read V_BIOS (%s)\n",
|
xf86DrvMsg(screen,X_ERROR,"Cannot read V_BIOS (%s)\n",
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ SUBDIRS = doc pcl pcl-mono raster ps etc config
|
||||||
bin_PROGRAMS = Xprt
|
bin_PROGRAMS = Xprt
|
||||||
|
|
||||||
Xprt_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ \
|
Xprt_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ \
|
||||||
-DXPRINT -DPRINT_ONLY_SERVER -D_XP_PRINT_SERVER_ \
|
-DPRINT_ONLY_SERVER -D_XP_PRINT_SERVER_ \
|
||||||
-DXPRINTDIR=\"$(libdir)/X11/xserver\" \
|
-DXPRINTDIR=\"$(libdir)/X11/xserver\" \
|
||||||
-DXPRASTERDDX -DXPPCLDDX -DXPMONOPCLDDX -DXPPSDDX \
|
-DXPRASTERDDX -DXPPCLDDX -DXPMONOPCLDDX -DXPPSDDX \
|
||||||
-DXFree86Server
|
-DXFree86Server
|
||||||
|
|
@ -17,6 +17,7 @@ XPRINT_LIBS = \
|
||||||
pcl-mono/libpcl.la \
|
pcl-mono/libpcl.la \
|
||||||
$(top_builddir)/fb/libfb.la \
|
$(top_builddir)/fb/libfb.la \
|
||||||
$(top_builddir)/render/librender.la \
|
$(top_builddir)/render/librender.la \
|
||||||
|
$(top_builddir)/dix/libXpdix.la \
|
||||||
$(XSERVER_LIBS) \
|
$(XSERVER_LIBS) \
|
||||||
$(top_builddir)/Xext/libXext.la \
|
$(top_builddir)/Xext/libXext.la \
|
||||||
$(top_builddir)/xkb/libxkb.la \
|
$(top_builddir)/xkb/libxkb.la \
|
||||||
|
|
|
||||||
|
|
@ -291,6 +291,12 @@ ddxProcessArgument (
|
||||||
#include "XIstubs.h"
|
#include "XIstubs.h"
|
||||||
#include "exglobals.h"
|
#include "exglobals.h"
|
||||||
|
|
||||||
|
/* Place dummy config functions here instead of config/config.c,
|
||||||
|
since Xprint does not use D-BUS */
|
||||||
|
void config_init() { }
|
||||||
|
void config_fini() { }
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ChangePointerDevice (
|
ChangePointerDevice (
|
||||||
DeviceIntPtr old_dev,
|
DeviceIntPtr old_dev,
|
||||||
|
|
|
||||||
|
|
@ -50,10 +50,12 @@ sdk_HEADERS = \
|
||||||
validate.h \
|
validate.h \
|
||||||
window.h \
|
window.h \
|
||||||
windowstr.h \
|
windowstr.h \
|
||||||
|
xkbsrv.h \
|
||||||
|
xkbstr.h \
|
||||||
xorg-server.h
|
xorg-server.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
AM_CFLAGS = $(DIX_CFLAGS)
|
AM_CFLAGS = $(DIX_CFLAGS)
|
||||||
|
|
||||||
EXTRA_DIST = $(sdk_HEADERS) do-not-use-config.h dix-config.h xorg-config.h \
|
EXTRA_DIST = $(sdk_HEADERS) do-not-use-config.h dix-config.h xorg-config.h \
|
||||||
xkb-config.h xkbfile.h xkbsrv.h xkbstr.h
|
xkb-config.h xkbfile.h
|
||||||
|
|
|
||||||
|
|
@ -118,6 +118,9 @@
|
||||||
/* Have pci_system_init_dev_mem() */
|
/* Have pci_system_init_dev_mem() */
|
||||||
#undef HAVE_PCI_SYSTEM_INIT_DEV_MEM
|
#undef HAVE_PCI_SYSTEM_INIT_DEV_MEM
|
||||||
|
|
||||||
|
/* Have pci_enable_device */
|
||||||
|
#undef HAVE_PCI_DEVICE_ENABLE
|
||||||
|
|
||||||
/* Path to text files containing PCI IDs */
|
/* Path to text files containing PCI IDs */
|
||||||
#undef PCI_TXT_IDS_PATH
|
#undef PCI_TXT_IDS_PATH
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -413,8 +413,9 @@ PictureInitIndexedFormat(ScreenPtr pScreen, PictFormatPtr format)
|
||||||
(ColormapPtr) LookupIDByType(pScreen->defColormap, RT_COLORMAP);
|
(ColormapPtr) LookupIDByType(pScreen->defColormap, RT_COLORMAP);
|
||||||
} else {
|
} else {
|
||||||
VisualPtr pVisual = PictureFindVisual(pScreen, format->index.vid);
|
VisualPtr pVisual = PictureFindVisual(pScreen, format->index.vid);
|
||||||
if (!CreateColormap(FakeClientID (0), pScreen, pVisual,
|
if (CreateColormap(FakeClientID (0), pScreen, pVisual,
|
||||||
&format->index.pColormap, AllocNone, 0))
|
&format->index.pColormap, AllocNone, 0)
|
||||||
|
!= Success)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (!ps->InitIndexed(pScreen, format))
|
if (!ps->InitIndexed(pScreen, format))
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue