2003-11-14 17:48:57 +01:00
|
|
|
|
2005-07-03 09:02:09 +02:00
|
|
|
#ifdef HAVE_XORG_CONFIG_H
|
|
|
|
#include <xorg-config.h>
|
|
|
|
#endif
|
|
|
|
|
2005-07-03 10:53:54 +02:00
|
|
|
#include "misc.h"
|
2003-11-14 17:48:57 +01:00
|
|
|
#include "xf86.h"
|
|
|
|
#include "xf86_OSproc.h"
|
|
|
|
|
2005-04-20 14:25:48 +02:00
|
|
|
#include <X11/X.h>
|
2003-11-14 17:48:57 +01:00
|
|
|
#include "scrnintstr.h"
|
|
|
|
#include "pixmapstr.h"
|
|
|
|
#include "xf86str.h"
|
|
|
|
#include "mi.h"
|
|
|
|
#include "mispans.h"
|
|
|
|
#include "xaa.h"
|
|
|
|
#include "xaalocal.h"
|
|
|
|
|
|
|
|
|
|
|
|
static void XAARenderSolidSpans(
|
|
|
|
GCPtr, int, DDXPointPtr, int*, int, int, int);
|
|
|
|
static void XAARenderColor8x8Spans(
|
|
|
|
GCPtr, int, DDXPointPtr, int*, int, int, int);
|
|
|
|
static void XAARenderMono8x8Spans(
|
|
|
|
GCPtr, int, DDXPointPtr, int*, int, int, int);
|
|
|
|
static void XAARenderCacheBltSpans(
|
|
|
|
GCPtr, int, DDXPointPtr, int*, int, int, int);
|
|
|
|
static void XAARenderColorExpandSpans(
|
|
|
|
GCPtr, int, DDXPointPtr, int*, int, int, int);
|
|
|
|
static void XAARenderCacheExpandSpans(
|
|
|
|
GCPtr, int, DDXPointPtr, int*, int, int, int);
|
|
|
|
static void XAARenderPixmapCopySpans(
|
|
|
|
GCPtr, int, DDXPointPtr, int*, int, int, int);
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAFillSpans(
|
|
|
|
DrawablePtr pDraw,
|
|
|
|
GC *pGC,
|
|
|
|
int nInit, /* number of spans to fill */
|
|
|
|
DDXPointPtr pptInit, /* pointer to list of start points */
|
|
|
|
int *pwidthInit, /* pointer to list of n widths */
|
|
|
|
int fSorted
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
int type = 0;
|
|
|
|
ClipAndRenderSpansFunc function;
|
|
|
|
Bool fastClip = FALSE;
|
|
|
|
|
|
|
|
if((nInit <= 0) || !pGC->planemask)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if(!REGION_NUM_RECTS(pGC->pCompositeClip))
|
|
|
|
return;
|
|
|
|
|
|
|
|
switch(pGC->fillStyle) {
|
|
|
|
case FillSolid:
|
|
|
|
type = DO_SOLID;
|
|
|
|
break;
|
|
|
|
case FillStippled:
|
|
|
|
type = (*infoRec->StippledFillChooser)(pGC);
|
|
|
|
break;
|
|
|
|
case FillOpaqueStippled:
|
|
|
|
if((pGC->fgPixel == pGC->bgPixel) && infoRec->FillSpansSolid &&
|
|
|
|
CHECK_PLANEMASK(pGC,infoRec->FillSpansSolidFlags) &&
|
|
|
|
CHECK_ROP(pGC,infoRec->FillSpansSolidFlags) &&
|
|
|
|
CHECK_ROPSRC(pGC,infoRec->FillSpansSolidFlags) &&
|
|
|
|
CHECK_FG(pGC,infoRec->FillSpansSolidFlags))
|
|
|
|
type = DO_SOLID;
|
|
|
|
else
|
|
|
|
type = (*infoRec->OpaqueStippledFillChooser)(pGC);
|
|
|
|
break;
|
|
|
|
case FillTiled:
|
|
|
|
type = (*infoRec->TiledFillChooser)(pGC);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(type) {
|
|
|
|
case DO_SOLID:
|
|
|
|
function = XAARenderSolidSpans;
|
|
|
|
if(infoRec->ClippingFlags & HARDWARE_CLIP_SOLID_FILL)
|
|
|
|
fastClip = TRUE;
|
|
|
|
break;
|
|
|
|
case DO_COLOR_8x8:
|
|
|
|
function = XAARenderColor8x8Spans;
|
|
|
|
if(infoRec->ClippingFlags & HARDWARE_CLIP_COLOR_8x8_FILL)
|
|
|
|
fastClip = TRUE;
|
|
|
|
break;
|
|
|
|
case DO_MONO_8x8:
|
|
|
|
function = XAARenderMono8x8Spans;
|
|
|
|
if(infoRec->ClippingFlags & HARDWARE_CLIP_MONO_8x8_FILL)
|
|
|
|
fastClip = TRUE;
|
|
|
|
break;
|
|
|
|
case DO_CACHE_BLT:
|
|
|
|
function = XAARenderCacheBltSpans;
|
|
|
|
if(infoRec->ClippingFlags & HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY)
|
|
|
|
fastClip = TRUE;
|
|
|
|
break;
|
|
|
|
case DO_COLOR_EXPAND:
|
|
|
|
function = XAARenderColorExpandSpans;
|
|
|
|
break;
|
|
|
|
case DO_CACHE_EXPAND:
|
|
|
|
function = XAARenderCacheExpandSpans;
|
|
|
|
if(infoRec->ClippingFlags &
|
|
|
|
HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND)
|
|
|
|
fastClip = TRUE;
|
|
|
|
break;
|
|
|
|
case DO_PIXMAP_COPY:
|
|
|
|
function = XAARenderPixmapCopySpans;
|
|
|
|
if(infoRec->ClippingFlags & HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY)
|
|
|
|
fastClip = TRUE;
|
|
|
|
break;
|
|
|
|
case DO_IMAGE_WRITE:
|
|
|
|
default:
|
|
|
|
(*XAAFallbackOps.FillSpans)(pDraw, pGC, nInit, pptInit,
|
|
|
|
pwidthInit, fSorted);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if((nInit < 10) || (REGION_NUM_RECTS(pGC->pCompositeClip) != 1))
|
|
|
|
fastClip = FALSE;
|
|
|
|
|
|
|
|
if(fastClip) {
|
|
|
|
infoRec->ClipBox = &pGC->pCompositeClip->extents;
|
|
|
|
(*function)(pGC, nInit, pptInit, pwidthInit, fSorted,
|
|
|
|
pDraw->x, pDraw->y);
|
|
|
|
infoRec->ClipBox = NULL;
|
|
|
|
} else
|
|
|
|
XAAClipAndRenderSpans(pGC, pptInit, pwidthInit, nInit, fSorted,
|
|
|
|
function, pDraw->x, pDraw->y);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*********************\
|
|
|
|
| Solid Spans |
|
|
|
|
\*********************/
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
XAARenderSolidSpans(
|
|
|
|
GCPtr pGC,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
int xorg, int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
|
|
|
|
(*infoRec->FillSolidSpans) (infoRec->pScrn, pGC->fgPixel,
|
|
|
|
pGC->alu, pGC->planemask, n, ppt, pwidth, fSorted);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/************************\
|
|
|
|
| Mono 8x8 Spans |
|
|
|
|
\************************/
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
XAARenderMono8x8Spans(
|
|
|
|
GCPtr pGC,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
int xorg, int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
XAAPixmapPtr pPriv;
|
|
|
|
int fg, bg;
|
|
|
|
|
|
|
|
switch(pGC->fillStyle) {
|
|
|
|
case FillStippled:
|
|
|
|
pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
|
|
|
|
fg = pGC->fgPixel; bg = -1;
|
|
|
|
break;
|
|
|
|
case FillOpaqueStippled:
|
|
|
|
pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->stipple);
|
|
|
|
fg = pGC->fgPixel; bg = pGC->bgPixel;
|
|
|
|
break;
|
|
|
|
case FillTiled:
|
|
|
|
pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
|
|
|
|
fg = pPriv->fg; bg = pPriv->bg;
|
|
|
|
break;
|
|
|
|
default: /* Muffle compiler */
|
|
|
|
pPriv = NULL; /* Kaboom */
|
|
|
|
fg = -1; bg = -1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->FillMono8x8PatternSpans) (infoRec->pScrn,
|
|
|
|
fg, bg, pGC->alu, pGC->planemask,
|
|
|
|
n, ppt, pwidth, fSorted, pPriv->pattern0, pPriv->pattern1,
|
|
|
|
(xorg + pGC->patOrg.x), (yorg + pGC->patOrg.y));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*************************\
|
|
|
|
| Color 8x8 Spans |
|
|
|
|
\*************************/
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
XAARenderColor8x8Spans(
|
|
|
|
GCPtr pGC,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
int xorg, int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
XAACacheInfoPtr pCache;
|
|
|
|
PixmapPtr pPix;
|
|
|
|
int fg, bg;
|
|
|
|
|
|
|
|
switch(pGC->fillStyle) {
|
|
|
|
case FillStippled:
|
|
|
|
pPix = pGC->stipple;
|
|
|
|
fg = pGC->fgPixel; bg = -1;
|
|
|
|
break;
|
|
|
|
case FillOpaqueStippled:
|
|
|
|
pPix = pGC->stipple;
|
|
|
|
fg = pGC->fgPixel; bg = pGC->bgPixel;
|
|
|
|
break;
|
|
|
|
case FillTiled:
|
|
|
|
pPix = pGC->tile.pixmap;
|
|
|
|
fg = -1; bg = -1;
|
|
|
|
break;
|
|
|
|
default: /* Muffle compiler */
|
|
|
|
pPix = NULL;
|
|
|
|
fg = -1; bg = -1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
pCache = (*infoRec->CacheColor8x8Pattern)(infoRec->pScrn, pPix, fg, bg);
|
|
|
|
|
|
|
|
(*infoRec->FillColor8x8PatternSpans) (infoRec->pScrn,
|
|
|
|
pGC->alu, pGC->planemask, n, ppt, pwidth, fSorted, pCache,
|
|
|
|
(yorg + pGC->patOrg.x), (xorg + pGC->patOrg.y));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************************\
|
|
|
|
| Color Expand Spans |
|
|
|
|
\****************************/
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
XAARenderColorExpandSpans(
|
|
|
|
GCPtr pGC,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
int xorg, int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
int fg, bg;
|
|
|
|
|
|
|
|
switch(pGC->fillStyle) {
|
|
|
|
case FillStippled:
|
|
|
|
fg = pGC->fgPixel; bg = -1;
|
|
|
|
break;
|
|
|
|
case FillOpaqueStippled:
|
|
|
|
fg = pGC->fgPixel; bg = pGC->bgPixel;
|
|
|
|
break;
|
|
|
|
default: /* Muffle compiler */
|
|
|
|
fg = -1; bg = -1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->FillColorExpandSpans) (infoRec->pScrn, fg, bg,
|
|
|
|
pGC->alu, pGC->planemask, n, ppt, pwidth, fSorted,
|
|
|
|
(xorg + pGC->patOrg.x), (yorg + pGC->patOrg.y),
|
|
|
|
pGC->stipple);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*************************\
|
|
|
|
| Cache Blt Spans |
|
|
|
|
\*************************/
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
XAARenderCacheBltSpans(
|
|
|
|
GCPtr pGC,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
int xorg, int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
XAACacheInfoPtr pCache;
|
|
|
|
|
|
|
|
switch(pGC->fillStyle) {
|
|
|
|
case FillStippled:
|
|
|
|
pCache = (*infoRec->CacheStipple)(infoRec->pScrn, pGC->stipple,
|
|
|
|
pGC->fgPixel, -1);
|
|
|
|
break;
|
|
|
|
case FillOpaqueStippled:
|
|
|
|
pCache = (*infoRec->CacheStipple)(infoRec->pScrn, pGC->stipple,
|
|
|
|
pGC->fgPixel, pGC->bgPixel);
|
|
|
|
break;
|
|
|
|
case FillTiled:
|
|
|
|
pCache = (*infoRec->CacheTile)(infoRec->pScrn, pGC->tile.pixmap);
|
|
|
|
break;
|
|
|
|
default: /* Muffle compiler */
|
|
|
|
pCache = NULL;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->FillCacheBltSpans) (infoRec->pScrn,
|
|
|
|
pGC->alu, pGC->planemask, n, ppt, pwidth, fSorted, pCache,
|
|
|
|
(xorg + pGC->patOrg.x), (yorg + pGC->patOrg.y));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************************\
|
|
|
|
| Cache Expand Spans |
|
|
|
|
\****************************/
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
XAARenderCacheExpandSpans(
|
|
|
|
GCPtr pGC,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
int xorg, int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
int fg, bg;
|
|
|
|
|
|
|
|
switch(pGC->fillStyle) {
|
|
|
|
case FillStippled:
|
|
|
|
fg = pGC->fgPixel; bg = -1;
|
|
|
|
break;
|
|
|
|
case FillOpaqueStippled:
|
|
|
|
fg = pGC->fgPixel; bg = pGC->bgPixel;
|
|
|
|
break;
|
|
|
|
default: /* Muffle compiler */
|
|
|
|
fg = -1; bg = -1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->FillCacheExpandSpans) (infoRec->pScrn, fg, bg,
|
|
|
|
pGC->alu, pGC->planemask, n, ppt, pwidth, fSorted,
|
|
|
|
(xorg + pGC->patOrg.x), (yorg + pGC->patOrg.y),
|
|
|
|
pGC->stipple);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***************************\
|
|
|
|
| Pixmap Copy Spans |
|
|
|
|
\***************************/
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
XAARenderPixmapCopySpans(
|
|
|
|
GCPtr pGC,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
int xorg, int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
XAACacheInfoPtr pCache = &(infoRec->ScratchCacheInfoRec);
|
|
|
|
XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pGC->tile.pixmap);
|
|
|
|
|
|
|
|
pCache->x = pPriv->offscreenArea->box.x1;
|
|
|
|
pCache->y = pPriv->offscreenArea->box.y1;
|
|
|
|
pCache->w = pCache->orig_w =
|
|
|
|
pPriv->offscreenArea->box.x2 - pCache->x;
|
|
|
|
pCache->h = pCache->orig_h =
|
|
|
|
pPriv->offscreenArea->box.y2 - pCache->y;
|
|
|
|
pCache->trans_color = -1;
|
|
|
|
|
|
|
|
(*infoRec->FillCacheBltSpans) (infoRec->pScrn,
|
|
|
|
pGC->alu, pGC->planemask, n, ppt, pwidth, fSorted, pCache,
|
|
|
|
(xorg + pGC->patOrg.x), (yorg + pGC->patOrg.y));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/****************\
|
|
|
|
| Solid |
|
|
|
|
\****************/
|
|
|
|
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAFillSolidSpans(
|
|
|
|
ScrnInfoPtr pScrn,
|
|
|
|
int fg, int rop,
|
|
|
|
unsigned int planemask,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth, int fSorted
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
|
|
|
|
|
|
|
|
(*infoRec->SetupForSolidFill)(pScrn, fg, rop, planemask);
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->SetClippingRectangle)(infoRec->pScrn,
|
|
|
|
infoRec->ClipBox->x1, infoRec->ClipBox->y1,
|
|
|
|
infoRec->ClipBox->x2 - 1, infoRec->ClipBox->y2 - 1);
|
|
|
|
|
|
|
|
while(n--) {
|
|
|
|
if (*pwidth > 0)
|
|
|
|
(*infoRec->SubsequentSolidFillRect)(pScrn, ppt->x, ppt->y,
|
|
|
|
*pwidth, 1);
|
|
|
|
ppt++; pwidth++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->DisableClipping)(infoRec->pScrn);
|
|
|
|
|
|
|
|
SET_SYNC_FLAG(infoRec);
|
|
|
|
}
|
|
|
|
|
|
|
|
/***************\
|
|
|
|
| Mono 8x8 |
|
|
|
|
\***************/
|
|
|
|
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAFillMono8x8PatternSpansScreenOrigin(
|
|
|
|
ScrnInfoPtr pScrn,
|
|
|
|
int fg, int bg, int rop,
|
|
|
|
unsigned int planemask,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth, int fSorted,
|
|
|
|
int pattern0, int pattern1,
|
|
|
|
int xorigin, int yorigin
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
|
|
|
|
int patx = pattern0, paty = pattern1;
|
|
|
|
int xorg = (-xorigin) & 0x07;
|
|
|
|
int yorg = (-yorigin) & 0x07;
|
|
|
|
|
|
|
|
|
|
|
|
if(infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_BITS) {
|
|
|
|
if(!(infoRec->Mono8x8PatternFillFlags &
|
|
|
|
HARDWARE_PATTERN_PROGRAMMED_ORIGIN)){
|
|
|
|
XAARotateMonoPattern(&patx, &paty, xorg, yorg,
|
|
|
|
(infoRec->Mono8x8PatternFillFlags &
|
|
|
|
BIT_ORDER_IN_BYTE_MSBFIRST));
|
|
|
|
xorg = patx; yorg = paty;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
XAACacheInfoPtr pCache =
|
|
|
|
(*infoRec->CacheMono8x8Pattern)(pScrn, pattern0, pattern1);
|
|
|
|
patx = pCache->x; paty = pCache->y;
|
|
|
|
if(!(infoRec->Mono8x8PatternFillFlags &
|
|
|
|
HARDWARE_PATTERN_PROGRAMMED_ORIGIN)){
|
|
|
|
int slot = (yorg << 3) + xorg;
|
|
|
|
patx += pCache->offsets[slot].x;
|
|
|
|
paty += pCache->offsets[slot].y;
|
|
|
|
xorg = patx; yorg = paty;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->SetupForMono8x8PatternFill)(pScrn, patx, paty,
|
|
|
|
fg, bg, rop, planemask);
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->SetClippingRectangle)(infoRec->pScrn,
|
|
|
|
infoRec->ClipBox->x1, infoRec->ClipBox->y1,
|
|
|
|
infoRec->ClipBox->x2 - 1, infoRec->ClipBox->y2 - 1);
|
|
|
|
|
|
|
|
while(n--) {
|
|
|
|
(*infoRec->SubsequentMono8x8PatternFillRect)(pScrn,
|
|
|
|
xorg, yorg, ppt->x, ppt->y, *pwidth, 1);
|
|
|
|
ppt++; pwidth++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->DisableClipping)(infoRec->pScrn);
|
|
|
|
|
|
|
|
SET_SYNC_FLAG(infoRec);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAFillMono8x8PatternSpans(
|
|
|
|
ScrnInfoPtr pScrn,
|
|
|
|
int fg, int bg, int rop,
|
|
|
|
unsigned int planemask,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth, int fSorted,
|
|
|
|
int pattern0, int pattern1,
|
|
|
|
int xorigin, int yorigin
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
|
|
|
|
int patx = pattern0, paty = pattern1;
|
|
|
|
int xorg, yorg, slot;
|
|
|
|
XAACacheInfoPtr pCache = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
if(!(infoRec->Mono8x8PatternFillFlags & HARDWARE_PATTERN_PROGRAMMED_BITS)){
|
|
|
|
pCache = (*infoRec->CacheMono8x8Pattern)(pScrn, pattern0, pattern1);
|
|
|
|
patx = pCache->x; paty = pCache->y;
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->SetupForMono8x8PatternFill)(pScrn, patx, paty,
|
|
|
|
fg, bg, rop, planemask);
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->SetClippingRectangle)(infoRec->pScrn,
|
|
|
|
infoRec->ClipBox->x1, infoRec->ClipBox->y1,
|
|
|
|
infoRec->ClipBox->x2 - 1, infoRec->ClipBox->y2 - 1);
|
|
|
|
|
|
|
|
while(n--) {
|
|
|
|
xorg = (ppt->x - xorigin) & 0x07;
|
|
|
|
yorg = (ppt->y - yorigin) & 0x07;
|
|
|
|
|
|
|
|
if(!(infoRec->Mono8x8PatternFillFlags &
|
|
|
|
HARDWARE_PATTERN_PROGRAMMED_ORIGIN)){
|
|
|
|
if(infoRec->Mono8x8PatternFillFlags &
|
|
|
|
HARDWARE_PATTERN_PROGRAMMED_BITS) {
|
|
|
|
patx = pattern0; paty = pattern1;
|
|
|
|
XAARotateMonoPattern(&patx, &paty, xorg, yorg,
|
|
|
|
(infoRec->Mono8x8PatternFillFlags &
|
|
|
|
BIT_ORDER_IN_BYTE_MSBFIRST));
|
|
|
|
xorg = patx; yorg = paty;
|
|
|
|
} else {
|
|
|
|
slot = (yorg << 3) + xorg;
|
|
|
|
xorg = patx + pCache->offsets[slot].x;
|
|
|
|
yorg = paty + pCache->offsets[slot].y;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->SubsequentMono8x8PatternFillRect)(pScrn,
|
|
|
|
xorg, yorg, ppt->x, ppt->y, *pwidth, 1);
|
|
|
|
ppt++; pwidth++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->DisableClipping)(infoRec->pScrn);
|
|
|
|
|
|
|
|
SET_SYNC_FLAG(infoRec);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/****************\
|
|
|
|
| Color 8x8 |
|
|
|
|
\****************/
|
|
|
|
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAFillColor8x8PatternSpansScreenOrigin(
|
|
|
|
ScrnInfoPtr pScrn,
|
|
|
|
int rop,
|
|
|
|
unsigned int planemask,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth, int fSorted,
|
|
|
|
XAACacheInfoPtr pCache,
|
|
|
|
int xorigin, int yorigin
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
|
|
|
|
int patx = pCache->x, paty = pCache->y;
|
|
|
|
int xorg = (-xorigin) & 0x07;
|
|
|
|
int yorg = (-yorigin) & 0x07;
|
|
|
|
|
|
|
|
|
|
|
|
if(!(infoRec->Color8x8PatternFillFlags &
|
|
|
|
HARDWARE_PATTERN_PROGRAMMED_ORIGIN)){
|
|
|
|
int slot = (yorg << 3) + xorg;
|
|
|
|
paty += pCache->offsets[slot].y;
|
|
|
|
patx += pCache->offsets[slot].x;
|
|
|
|
xorg = patx; yorg = paty;
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->SetupForColor8x8PatternFill)(pScrn, patx, paty,
|
|
|
|
rop, planemask, pCache->trans_color);
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->SetClippingRectangle)(infoRec->pScrn,
|
|
|
|
infoRec->ClipBox->x1, infoRec->ClipBox->y1,
|
|
|
|
infoRec->ClipBox->x2 - 1, infoRec->ClipBox->y2 - 1);
|
|
|
|
|
|
|
|
while(n--) {
|
|
|
|
(*infoRec->SubsequentColor8x8PatternFillRect)(pScrn,
|
|
|
|
xorg, yorg, ppt->x, ppt->y, *pwidth, 1);
|
|
|
|
ppt++; pwidth++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->DisableClipping)(infoRec->pScrn);
|
|
|
|
|
|
|
|
SET_SYNC_FLAG(infoRec);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAFillColor8x8PatternSpans(
|
|
|
|
ScrnInfoPtr pScrn,
|
|
|
|
int rop,
|
|
|
|
unsigned int planemask,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth, int fSorted,
|
|
|
|
XAACacheInfoPtr pCache,
|
|
|
|
int xorigin, int yorigin
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
|
|
|
|
int xorg, yorg, slot;
|
|
|
|
|
|
|
|
(*infoRec->SetupForColor8x8PatternFill)(pScrn, pCache->x, pCache->y,
|
|
|
|
rop, planemask, pCache->trans_color);
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->SetClippingRectangle)(infoRec->pScrn,
|
|
|
|
infoRec->ClipBox->x1, infoRec->ClipBox->y1,
|
|
|
|
infoRec->ClipBox->x2 - 1, infoRec->ClipBox->y2 - 1);
|
|
|
|
|
|
|
|
while(n--) {
|
|
|
|
xorg = (ppt->x - xorigin) & 0x07;
|
|
|
|
yorg = (ppt->y - yorigin) & 0x07;
|
|
|
|
|
|
|
|
if(!(infoRec->Color8x8PatternFillFlags &
|
|
|
|
HARDWARE_PATTERN_PROGRAMMED_ORIGIN)){
|
|
|
|
slot = (yorg << 3) + xorg;
|
|
|
|
yorg = pCache->y + pCache->offsets[slot].y;
|
|
|
|
xorg = pCache->x + pCache->offsets[slot].x;
|
|
|
|
}
|
|
|
|
|
|
|
|
(*infoRec->SubsequentColor8x8PatternFillRect)(pScrn,
|
|
|
|
xorg, yorg, ppt->x, ppt->y, *pwidth, 1);
|
|
|
|
ppt++; pwidth++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->DisableClipping)(infoRec->pScrn);
|
|
|
|
|
|
|
|
SET_SYNC_FLAG(infoRec);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*****************\
|
|
|
|
| Cache Blit |
|
|
|
|
\*****************/
|
|
|
|
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAFillCacheBltSpans(
|
|
|
|
ScrnInfoPtr pScrn,
|
|
|
|
int rop,
|
|
|
|
unsigned int planemask,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
XAACacheInfoPtr pCache,
|
|
|
|
int xorg, int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
|
|
|
|
int x, w, phaseX, phaseY, blit_w;
|
|
|
|
|
|
|
|
(*infoRec->SetupForScreenToScreenCopy)(pScrn, 1, 1, rop, planemask,
|
|
|
|
pCache->trans_color);
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->SetClippingRectangle)(infoRec->pScrn,
|
|
|
|
infoRec->ClipBox->x1, infoRec->ClipBox->y1,
|
|
|
|
infoRec->ClipBox->x2 - 1, infoRec->ClipBox->y2 - 1);
|
|
|
|
|
|
|
|
while(n--) {
|
|
|
|
x = ppt->x;
|
|
|
|
w = *pwidth;
|
|
|
|
phaseX = (x - xorg) % pCache->orig_w;
|
|
|
|
if(phaseX < 0) phaseX += pCache->orig_w;
|
|
|
|
phaseY = (ppt->y - yorg) % pCache->orig_h;
|
|
|
|
if(phaseY < 0) phaseY += pCache->orig_h;
|
|
|
|
|
|
|
|
while(1) {
|
|
|
|
blit_w = pCache->w - phaseX;
|
|
|
|
if(blit_w > w) blit_w = w;
|
|
|
|
|
|
|
|
(*infoRec->SubsequentScreenToScreenCopy)(pScrn,
|
|
|
|
pCache->x + phaseX, pCache->y + phaseY,
|
|
|
|
x, ppt->y, blit_w, 1);
|
|
|
|
|
|
|
|
w -= blit_w;
|
|
|
|
if(!w) break;
|
|
|
|
x += blit_w;
|
|
|
|
phaseX = (phaseX + blit_w) % pCache->orig_w;
|
|
|
|
}
|
|
|
|
ppt++; pwidth++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->DisableClipping)(infoRec->pScrn);
|
|
|
|
|
|
|
|
SET_SYNC_FLAG(infoRec);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************\
|
|
|
|
| Cache Expand |
|
|
|
|
\****************/
|
|
|
|
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAFillCacheExpandSpans(
|
|
|
|
ScrnInfoPtr pScrn,
|
|
|
|
int fg, int bg, int rop,
|
|
|
|
unsigned int planemask,
|
|
|
|
int n,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int fSorted,
|
|
|
|
int xorg, int yorg,
|
|
|
|
PixmapPtr pPix
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
|
|
|
|
int x, w, phaseX, phaseY, blit_w, cacheWidth;
|
|
|
|
XAACacheInfoPtr pCache;
|
|
|
|
|
|
|
|
pCache = (*infoRec->CacheMonoStipple)(pScrn, pPix);
|
|
|
|
|
|
|
|
cacheWidth = (pCache->w * pScrn->bitsPerPixel) /
|
|
|
|
infoRec->CacheColorExpandDensity;
|
|
|
|
|
|
|
|
(*infoRec->SetupForScreenToScreenColorExpandFill)(pScrn, fg, bg, rop,
|
|
|
|
planemask);
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->SetClippingRectangle)(infoRec->pScrn,
|
|
|
|
infoRec->ClipBox->x1, infoRec->ClipBox->y1,
|
|
|
|
infoRec->ClipBox->x2 - 1, infoRec->ClipBox->y2 - 1);
|
|
|
|
|
|
|
|
while(n--) {
|
|
|
|
x = ppt->x;
|
|
|
|
w = *pwidth;
|
|
|
|
phaseX = (x - xorg) % pCache->orig_w;
|
|
|
|
if(phaseX < 0) phaseX += pCache->orig_w;
|
|
|
|
phaseY = (ppt->y - yorg) % pCache->orig_h;
|
|
|
|
if(phaseY < 0) phaseY += pCache->orig_h;
|
|
|
|
|
|
|
|
while(1) {
|
|
|
|
blit_w = cacheWidth - phaseX;
|
|
|
|
if(blit_w > w) blit_w = w;
|
|
|
|
|
|
|
|
(*infoRec->SubsequentScreenToScreenColorExpandFill)(
|
|
|
|
pScrn, x, ppt->y, blit_w, 1,
|
|
|
|
pCache->x, pCache->y + phaseY, phaseX);
|
|
|
|
|
|
|
|
w -= blit_w;
|
|
|
|
if(!w) break;
|
|
|
|
x += blit_w;
|
|
|
|
phaseX = (phaseX + blit_w) % pCache->orig_w;
|
|
|
|
}
|
|
|
|
ppt++; pwidth++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(infoRec->ClipBox)
|
|
|
|
(*infoRec->DisableClipping)(infoRec->pScrn);
|
|
|
|
|
|
|
|
SET_SYNC_FLAG(infoRec);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
XAAClipAndRenderSpans(
|
|
|
|
GCPtr pGC,
|
|
|
|
DDXPointPtr ppt,
|
|
|
|
int *pwidth,
|
|
|
|
int nspans,
|
|
|
|
int fSorted,
|
|
|
|
ClipAndRenderSpansFunc func,
|
|
|
|
int xorg,
|
|
|
|
int yorg
|
|
|
|
){
|
|
|
|
XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
|
|
|
|
DDXPointPtr pptNew, pptBase;
|
|
|
|
int *pwidthBase, *pwidthNew;
|
|
|
|
int Right, numRects, MaxBoxes;
|
|
|
|
|
|
|
|
MaxBoxes = infoRec->PreAllocSize/(sizeof(DDXPointRec) + sizeof(int));
|
|
|
|
pptBase = (DDXPointRec*)infoRec->PreAllocMem;
|
|
|
|
pwidthBase = (int*)(&pptBase[MaxBoxes]);
|
|
|
|
|
|
|
|
pptNew = pptBase;
|
|
|
|
pwidthNew = pwidthBase;
|
|
|
|
|
|
|
|
numRects = REGION_NUM_RECTS(pGC->pCompositeClip);
|
|
|
|
|
|
|
|
if(numRects == 1) {
|
|
|
|
BoxPtr pextent = REGION_RECTS(pGC->pCompositeClip);
|
|
|
|
|
|
|
|
while(nspans--) {
|
|
|
|
if ((pextent->y1 <= ppt->y) && (ppt->y < pextent->y2)) {
|
|
|
|
pptNew->x = max(pextent->x1, ppt->x);
|
|
|
|
Right = ppt->x + *pwidth;
|
|
|
|
*pwidthNew = min(pextent->x2, Right) - pptNew->x;
|
|
|
|
|
|
|
|
if (*pwidthNew > 0) {
|
|
|
|
pptNew->y = ppt->y;
|
|
|
|
pptNew++;
|
|
|
|
pwidthNew++;
|
|
|
|
|
|
|
|
if(pptNew >= (pptBase + MaxBoxes)) {
|
|
|
|
(*func)(pGC, MaxBoxes, pptBase, pwidthBase, fSorted,
|
|
|
|
xorg, yorg);
|
|
|
|
pptNew = pptBase;
|
|
|
|
pwidthNew = pwidthBase;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ppt++;
|
|
|
|
pwidth++;
|
|
|
|
}
|
|
|
|
} else if (numRects) {
|
|
|
|
BoxPtr pbox;
|
|
|
|
int nbox;
|
|
|
|
|
|
|
|
while(nspans--) {
|
|
|
|
nbox = numRects;
|
|
|
|
pbox = REGION_RECTS(pGC->pCompositeClip);
|
|
|
|
|
|
|
|
/* find the first band */
|
|
|
|
while(nbox && (pbox->y2 <= ppt->y)) {
|
|
|
|
pbox++;
|
|
|
|
nbox--;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(nbox && (pbox->y1 <= ppt->y)) {
|
|
|
|
int orig_y = pbox->y1;
|
|
|
|
Right = ppt->x + *pwidth;
|
|
|
|
while(nbox && (orig_y == pbox->y1)) {
|
|
|
|
if(pbox->x2 <= ppt->x) {
|
|
|
|
nbox--;
|
|
|
|
pbox++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(pbox->x1 >= Right) {
|
|
|
|
nbox = 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
pptNew->x = max(pbox->x1, ppt->x);
|
|
|
|
*pwidthNew = min(pbox->x2, Right) - pptNew->x;
|
|
|
|
if(*pwidthNew > 0) {
|
|
|
|
pptNew->y = ppt->y;
|
|
|
|
pptNew++;
|
|
|
|
pwidthNew++;
|
|
|
|
|
|
|
|
if(pptNew >= (pptBase + MaxBoxes)) {
|
|
|
|
(*func)(pGC, MaxBoxes, pptBase, pwidthBase,
|
|
|
|
fSorted, xorg, yorg);
|
|
|
|
pptNew = pptBase;
|
|
|
|
pwidthNew = pwidthBase;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pbox++;
|
|
|
|
nbox--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ppt++;
|
|
|
|
pwidth++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(pptNew != pptBase)
|
|
|
|
(*func)(pGC, pptNew - pptBase, pptBase, pwidthBase, fSorted,
|
|
|
|
xorg, yorg);
|
|
|
|
}
|