/* * Copyright © 2004 David Reveman * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without * fee, provided that the above copyright notice appear in all copies * and that both that copyright notice and this permission notice * appear in supporting documentation, and that the name of * David Reveman not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior permission. * David Reveman makes no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN * NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: David Reveman */ #ifndef _XGL_H_ #define _XGL_H_ #ifdef HAVE_CONFIG_H #include #endif #include #include #define NEED_EVENTS #include #include #include #include "scrnintstr.h" #include "pixmapstr.h" #include "windowstr.h" #include "servermd.h" #include "mi.h" #include "dix.h" #include "damage.h" #include "gc.h" /* I'd like gc.h to provide this */ typedef struct _GCFuncs *GCFuncsPtr; #ifdef RENDER #include "mipict.h" #endif extern WindowPtr *WindowTable; #define XGL_DEFAULT_PBO_MASK 0 /* don't use PBO as default */ typedef struct _xglScreenInfo { glitz_drawable_t *drawable; unsigned int width; unsigned int height; unsigned int widthMm; unsigned int heightMm; Bool fullscreen; int geometryDataType; int geometryUsage; Bool yInverted; int pboMask; Bool lines; } xglScreenInfoRec, *xglScreenInfoPtr; typedef struct _xglPixelFormat { CARD8 depth, bitsPerRGB; glitz_pixel_masks_t masks; } xglPixelFormatRec, *xglPixelFormatPtr; typedef struct _xglVisual { glitz_drawable_format_t *format; xglPixelFormatPtr pPixel; unsigned long visuals; } xglVisualRec, *xglVisualPtr; typedef struct _xglPixmapFormat { glitz_format_t *format; xglPixelFormatPtr pPixel; } xglPixmapFormatRec, *xglPixmapFormatPtr; extern xglVisualPtr xglVisuals; extern int nxglVisuals; extern xglVisualPtr xglPbufferVisuals; extern int nxglPbufferVisuals; #define xglAreaAvailable 0 #define xglAreaDivided 1 #define xglAreaOccupied 2 typedef struct _xglRootArea *xglRootAreaPtr; typedef struct _xglArea { int state; int level; int x, y; int width, height; struct _xglArea *pArea[4]; xglRootAreaPtr pRoot; pointer closure; DevUnion devPrivate; } xglAreaRec, *xglAreaPtr; typedef struct _xglAreaFuncs { Bool (*Create) (xglAreaPtr pArea); Bool (*MoveIn) (xglAreaPtr pArea, pointer closure); void (*MoveOut) (xglAreaPtr pArea, pointer closure); int (*CompareScore) (xglAreaPtr pArea, pointer closure1, pointer closure2); } xglAreaFuncsRec, *xglAreaFuncsPtr; typedef struct _xglRootArea { int maxLevel; int width, height; xglAreaPtr pArea; xglAreaFuncsPtr funcs; int devPrivateSize; pointer closure; } xglRootAreaRec; typedef struct xglGeometry { glitz_buffer_t *buffer; pointer *data; Bool broken; glitz_fixed16_16_t xOff, yOff; int dataType; int usage; int size, endOffset; glitz_geometry_type_t type; glitz_geometry_format_t f; int first, width, count; glitz_multi_array_t *array; } xglGeometryRec, *xglGeometryPtr; #ifdef RENDER typedef struct _xglFBox { glitz_float_t x1, y1, x2, y2; } xglFBoxRec; typedef union _xglBox { BoxRec sBox; xglFBoxRec fBox; } xglBoxRec, *xglBoxPtr; typedef struct _xglRange { int first; unsigned int count; } xglRangeRec, *xglRangePtr; typedef struct _xglGlyphTexture { glitz_surface_t *mask; glitz_pixel_format_t pixel; glitz_geometry_format_t format; int geometryDataType; } xglGlyphTextureRec, *xglGlyphTexturePtr; typedef struct _xglGlyphArea { unsigned long serial; union { xglBoxRec box; xglRangeRec range; } u; } xglGlyphAreaRec, *xglGlyphAreaPtr; typedef struct _xglGlyphCache { ScreenPtr pScreen; int depth; xglRootAreaRec rootArea; union { xglGlyphTextureRec texture; xglGeometryRec geometry; } u; } xglGlyphCacheRec, *xglGlyphCachePtr; typedef struct _xglGlyph { xglAreaPtr pArea; } xglGlyphRec, *xglGlyphPtr; extern int xglGlyphPrivateIndex; #define XGL_GET_GLYPH_PRIV(pScreen, pGlyph) ((xglGlyphPtr) \ (GetGlyphPrivatesForScreen (pGlyph, pScreen))[xglGlyphPrivateIndex].ptr) #define XGL_GLYPH_PRIV(pScreen, pGlyph) \ xglGlyphPtr pGlyphPriv = XGL_GET_GLYPH_PRIV (pScreen, pGlyph) #endif #define XGL_MAX_OFFSCREEN_AREAS 8 typedef struct _xglOffscreen { xglRootAreaRec rootArea; glitz_drawable_t *drawable; glitz_drawable_format_t *format; glitz_drawable_buffer_t buffer; } xglOffscreenRec, *xglOffscreenPtr; typedef struct _xglScreen { xglVisualPtr pVisual; xglPixmapFormatRec pixmapFormats[33]; glitz_drawable_t *drawable; glitz_surface_t *surface; glitz_surface_t *solid; PixmapPtr pScreenPixmap; unsigned long features; xglOffscreenRec pOffscreen[XGL_MAX_OFFSCREEN_AREAS]; int nOffscreen; int geometryUsage; int geometryDataType; Bool yInverted; int pboMask; Bool lines; xglGeometryRec scratchGeometry; #ifdef RENDER xglGlyphCacheRec glyphCache[33]; PicturePtr pSolidAlpha; struct _trapInfo { PicturePtr pMask; glitz_surface_t *mask; glitz_geometry_format_t format; } trapInfo; #endif GetImageProcPtr GetImage; GetSpansProcPtr GetSpans; CreateWindowProcPtr CreateWindow; ChangeWindowAttributesProcPtr ChangeWindowAttributes; PaintWindowBackgroundProcPtr PaintWindowBackground; PaintWindowBorderProcPtr PaintWindowBorder; CopyWindowProcPtr CopyWindow; CreateGCProcPtr CreateGC; CloseScreenProcPtr CloseScreen; SetWindowPixmapProcPtr SetWindowPixmap; BitmapToRegionProcPtr BitmapToRegion; #ifdef RENDER CompositeProcPtr Composite; GlyphsProcPtr Glyphs; TrapezoidsProcPtr Trapezoids; AddTrapsProcPtr AddTraps; AddTrianglesProcPtr AddTriangles; ChangePictureProcPtr ChangePicture; ChangePictureTransformProcPtr ChangePictureTransform; ChangePictureFilterProcPtr ChangePictureFilter; RealizeGlyphProcPtr RealizeGlyph; UnrealizeGlyphProcPtr UnrealizeGlyph; #endif BSFuncRec BackingStoreFuncs; } xglScreenRec, *xglScreenPtr; extern int xglScreenPrivateIndex; #define XGL_GET_SCREEN_PRIV(pScreen) \ ((xglScreenPtr) (pScreen)->devPrivates[xglScreenPrivateIndex].ptr) #define XGL_SET_SCREEN_PRIV(pScreen, v) \ ((pScreen)->devPrivates[xglScreenPrivateIndex].ptr = (pointer) v) #define XGL_SCREEN_PRIV(pScreen) \ xglScreenPtr pScreenPriv = XGL_GET_SCREEN_PRIV (pScreen) #define XGL_SCREEN_WRAP(field, wrapper) \ pScreenPriv->field = pScreen->field; \ pScreen->field = wrapper #define XGL_SCREEN_UNWRAP(field) \ pScreen->field = pScreenPriv->field #ifdef RENDER #define XGL_PICTURE_SCREEN_WRAP(field, wrapper) \ pScreenPriv->field = pPictureScreen->field; \ pPictureScreen->field = wrapper #define XGL_PICTURE_SCREEN_UNWRAP(field) \ pPictureScreen->field = pScreenPriv->field #endif #define xglGCSoftwareDrawableFlag (1L << 0) #define xglGCReadOnlyDrawableFlag (1L << 1) #define xglGCBadFunctionFlag (1L << 2) #define xglGCPlaneMaskFlag (1L << 3) typedef struct _xglGC { glitz_color_t fg; glitz_color_t bg; glitz_operator_t op; unsigned long flags; GCFuncsPtr funcs; GCOpsPtr ops; } xglGCRec, *xglGCPtr; extern int xglGCPrivateIndex; #define XGL_GET_GC_PRIV(pGC) \ ((xglGCPtr) (pGC)->devPrivates[xglGCPrivateIndex].ptr) #define XGL_GC_PRIV(pGC) \ xglGCPtr pGCPriv = XGL_GET_GC_PRIV (pGC) #define XGL_GC_WRAP(field, wrapper) \ pGCPriv->field = pGC->field; \ pGC->field = wrapper #define XGL_GC_UNWRAP(field) \ pGC->field = pGCPriv->field #define xglPCFillMask (1L << 0) #define xglPCFilterMask (1L << 1) #define xglPCTransformMask (1L << 2) #define xglPCComponentAlphaMask (1L << 3) #define xglPCDitherMask (1L << 4) #define xglPFFilterMask (1L << 8) #define xglPixmapTargetNo 0 #define xglPixmapTargetOut 1 #define xglPixmapTargetIn 2 typedef struct _xglPixmap { xglPixelFormatPtr pPixel; glitz_format_t *format; glitz_surface_t *surface; glitz_buffer_t *buffer; int target; xglAreaPtr pArea; int score; Bool acceleratedTile; pointer bits; int stride; DamagePtr pDamage; BoxRec damageBox; BoxRec bitBox; Bool allBits; unsigned long pictureMask; xglGeometryPtr pGeometry; int lock; } xglPixmapRec, *xglPixmapPtr; extern int xglPixmapPrivateIndex; #define XGL_GET_PIXMAP_PRIV(pPixmap) \ ((xglPixmapPtr) (pPixmap)->devPrivates[xglPixmapPrivateIndex].ptr) #define XGL_PIXMAP_PRIV(pPixmap) \ xglPixmapPtr pPixmapPriv = XGL_GET_PIXMAP_PRIV (pPixmap) #define XGL_PICTURE_CHANGES(pictureMask) (pictureMask & 0x0000ffff) #define XGL_PICTURE_FAILURES(pictureMask) (pictureMask & 0xffff0000) typedef struct _xglWin { PixmapPtr pPixmap; } xglWinRec, *xglWinPtr; extern int xglWinPrivateIndex; #define XGL_GET_WINDOW_PRIV(pWin) \ ((xglWinPtr) (pWin)->devPrivates[xglWinPrivateIndex].ptr) #define XGL_WINDOW_PRIV(pWin) \ xglWinPtr pWinPriv = XGL_GET_WINDOW_PRIV (pWin) #define XGL_GET_WINDOW_PIXMAP(pWin) \ (XGL_GET_WINDOW_PRIV((WindowPtr) (pWin))->pPixmap) #define XGL_GET_DRAWABLE_PIXMAP(pDrawable) \ (((pDrawable)->type == DRAWABLE_WINDOW)? \ XGL_GET_WINDOW_PIXMAP (pDrawable): \ (PixmapPtr) (pDrawable)) #define XGL_DRAWABLE_PIXMAP(pDrawable) \ PixmapPtr pPixmap = XGL_GET_DRAWABLE_PIXMAP (pDrawable) #define XGL_GET_DRAWABLE_PIXMAP_PRIV(pDrawable) \ XGL_GET_PIXMAP_PRIV (XGL_GET_DRAWABLE_PIXMAP (pDrawable)) #define XGL_DRAWABLE_PIXMAP_PRIV(pDrawable) \ xglPixmapPtr pPixmapPriv = XGL_GET_DRAWABLE_PIXMAP_PRIV (pDrawable) #ifdef COMPOSITE #define __XGL_OFF_X_WIN(pPix) (-(pPix)->screen_x) #define __XGL_OFF_Y_WIN(pPix) (-(pPix)->screen_y) #else #define __XGL_OFF_X_WIN(pPix) (0) #define __XGL_OFF_Y_WIN(pPix) (0) #endif #define XGL_GET_DRAWABLE(pDrawable, pSurface, xOff, yOff) \ { \ PixmapPtr _pPix; \ if ((pDrawable)->type != DRAWABLE_PIXMAP) { \ _pPix = XGL_GET_WINDOW_PIXMAP (pDrawable); \ (xOff) = __XGL_OFF_X_WIN (_pPix); \ (yOff) = __XGL_OFF_Y_WIN (_pPix); \ } else { \ _pPix = (PixmapPtr) (pDrawable); \ (yOff) = (xOff) = 0; \ } \ (pSurface) = XGL_GET_PIXMAP_PRIV (_pPix)->surface; \ } #define XGL_DEFAULT_DPI 96 #define XGL_SW_FAILURE_STRING "software fall-back failure" #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define POWER_OF_TWO(v) ((v & (v - 1)) == 0) #define MOD(a,b) ((a) < 0 ? ((b) - ((-(a) - 1) % (b))) - 1 : (a) % (b)) #define FIXED_TO_FLOAT(f) (((glitz_float_t) (f)) / 65536) #define FLOAT_TO_FIXED(f) ((int) ((f) * 65536)) #define BOX_NOTEMPTY(pBox) \ (((pBox)->x2 - (pBox)->x1) > 0 && \ ((pBox)->y2 - (pBox)->y1) > 0) #define XGL_MAX_PIXMAP_SCORE 32768 #define XGL_MIN_PIXMAP_SCORE -32768 #define XGL_INCREMENT_PIXMAP_SCORE(pPixmapPriv, incr) \ { \ (pPixmapPriv)->score += (incr); \ if ((pPixmapPriv)->score > XGL_MAX_PIXMAP_SCORE) \ (pPixmapPriv)->score = XGL_MAX_PIXMAP_SCORE; \ } #define XGL_DECREMENT_PIXMAP_SCORE(pPixmapPriv, decr) \ { \ (pPixmapPriv)->score -= (decr); \ if ((pPixmapPriv)->score < XGL_MIN_PIXMAP_SCORE) \ (pPixmapPriv)->score = XGL_MIN_PIXMAP_SCORE; \ } /* xglinput.c */ int xglMouseProc (DeviceIntPtr pDevice, int onoff); int xglKeybdProc (DeviceIntPtr pDevice, int onoff); void xglBell (int volume, DeviceIntPtr pDev, pointer ctrl, int something); void xglKbdCtrl (DeviceIntPtr pDevice, KeybdCtrl *ctrl); void xglInitInput (int argc, char **argv); /* xgloutput.c */ void xglSetPixmapFormats (ScreenInfo *pScreenInfo); /* xglcmap.c */ void xglSetVisualTypesAndMasks (ScreenInfo *pScreenInfo, glitz_drawable_format_t *format, unsigned long visuals); void xglInitVisuals (ScreenInfo *pScreenInfo); void xglClearVisualTypes (void); void xglInitPixmapFormats (ScreenPtr pScreen); void xglPixelToColor (xglPixelFormatPtr pFormat, CARD32 pixel, glitz_color_t *color); /* xglparse.c */ char * xglParseFindNext (char *cur, char *delim, char *save, char *last); void xglParseScreen (xglScreenInfoPtr pScreenInfo, char *arg); void xglUseMsg (void); int xglProcessArgument (xglScreenInfoPtr pScreenInfo, int argc, char **argv, int i); /* xglscreen.c */ Bool xglScreenInit (ScreenPtr pScreen, xglScreenInfoPtr pScreenInfo); Bool xglFinishScreenInit (ScreenPtr pScreen); Bool xglCloseScreen (int index, ScreenPtr pScreen); void xglCreateSolidAlphaPicture (ScreenPtr pScreen); /* xglarea.c */ Bool xglRootAreaInit (xglRootAreaPtr pRoot, int maxLevel, int width, int height, int devPrivateSize, xglAreaFuncsPtr funcs, pointer closure); void xglRootAreaFini (xglRootAreaPtr pRoot); void xglLeaveArea (xglAreaPtr pArea); void xglWithdrawArea (xglAreaPtr pArea); Bool xglFindArea (xglAreaPtr pArea, int width, int height, Bool kickOut, pointer closure); /* xgloffscreen.c */ Bool xglInitOffscreen (ScreenPtr pScreen, xglScreenInfoPtr pScreenInfo); void xglFiniOffscreen (ScreenPtr pScreen); Bool xglFindOffscreenArea (ScreenPtr pScreen, PixmapPtr pPixmap); void xglLeaveOffscreenArea (PixmapPtr pPixmap); /* xglgeometry.c */ #define GEOMETRY_DATA_TYPE_SHORT 0 #define GEOMETRY_DATA_TYPE_FLOAT 1 typedef struct _xglDataTypeInfo { glitz_data_type_t type; int size; } xglDataTypeInfoRec, *xglDataTypeInfoPtr; extern xglDataTypeInfoRec xglGeometryDataTypes[2]; #define DEFAULT_GEOMETRY_DATA_TYPE GEOMETRY_DATA_TYPE_FLOAT #define GEOMETRY_USAGE_STREAM 0 #define GEOMETRY_USAGE_STATIC 1 #define GEOMETRY_USAGE_DYNAMIC 2 #define GEOMETRY_USAGE_SYSMEM 3 #define DEFAULT_GEOMETRY_USAGE GEOMETRY_USAGE_SYSMEM #define GEOMETRY_INIT(pScreen, pGeometry, _type, _usage, _size) \ { \ (pGeometry)->type = _type; \ (pGeometry)->usage = _usage; \ (pGeometry)->dataType = DEFAULT_GEOMETRY_DATA_TYPE; \ (pGeometry)->usage = _usage; \ (pGeometry)->size = 0; \ (pGeometry)->endOffset = 0; \ (pGeometry)->data = (pointer) 0; \ (pGeometry)->buffer = NULL; \ (pGeometry)->broken = FALSE; \ (pGeometry)->xOff = 0; \ (pGeometry)->yOff = 0; \ (pGeometry)->array = NULL; \ (pGeometry)->first = 0; \ (pGeometry)->count = 0; \ if (_type == GLITZ_GEOMETRY_TYPE_VERTEX) \ { \ (pGeometry)->width = 2; \ (pGeometry)->f.vertex.type = \ xglGeometryDataTypes[(pGeometry)->dataType].type; \ (pGeometry)->f.vertex.bytes_per_vertex = (pGeometry)->width * \ xglGeometryDataTypes[(pGeometry)->dataType].size; \ (pGeometry)->f.vertex.primitive = GLITZ_PRIMITIVE_QUADS; \ (pGeometry)->f.vertex.attributes = 0; \ (pGeometry)->f.vertex.src.type = GLITZ_DATA_TYPE_FLOAT; \ (pGeometry)->f.vertex.src.size = GLITZ_COORDINATE_SIZE_X; \ (pGeometry)->f.vertex.src.offset = 0; \ (pGeometry)->f.vertex.mask.type = GLITZ_DATA_TYPE_FLOAT; \ (pGeometry)->f.vertex.mask.size = GLITZ_COORDINATE_SIZE_X; \ (pGeometry)->f.vertex.mask.offset = 0; \ } \ else \ { \ (pGeometry)->width = 0; \ (pGeometry)->f.bitmap.scanline_order = \ GLITZ_PIXEL_SCANLINE_ORDER_TOP_DOWN; \ (pGeometry)->f.bitmap.bytes_per_line = 0; \ (pGeometry)->f.bitmap.pad = GLYPHPADBYTES; \ } \ if (_size) \ xglGeometryResize (pScreen, pGeometry, _size); \ } #define GEOMETRY_UNINIT(pGeometry) \ { \ if ((pGeometry)->array) \ glitz_multi_array_destroy ((pGeometry)->array); \ if ((pGeometry)->buffer) \ glitz_buffer_destroy ((pGeometry)->buffer); \ if ((pGeometry)->data) \ xfree ((pGeometry)->data); \ } #define GEOMETRY_SET_BUFFER(pGeometry, _buffer) \ { \ glitz_buffer_reference (_buffer); \ if ((pGeometry)->buffer) \ glitz_buffer_destroy ((pGeometry)->buffer); \ (pGeometry)->buffer = _buffer; \ } #define GEOMETRY_SET_MULTI_ARRAY(pGeometry, _array) \ { \ glitz_multi_array_reference (_array); \ if ((pGeometry)->array) \ glitz_multi_array_destroy ((pGeometry)->array); \ (pGeometry)->array = _array; \ } #define GEOMETRY_RESIZE(pScreen, pGeometry, size) \ xglGeometryResize (pScreen, pGeometry, size) #define GEOMETRY_SET_TRANSLATE(pGeometry, _x, _y) \ { \ (pGeometry)->xOff = (_x) << 16; \ (pGeometry)->yOff = (_y) << 16; \ } #define GEOMETRY_TRANSLATE(pGeometry, tx, ty) \ { \ (pGeometry)->xOff += (tx) << 16; \ (pGeometry)->yOff += (ty) << 16; \ } #define GEOMETRY_TRANSLATE_FIXED(pGeometry, ftx, fty) \ { \ (pGeometry)->xOff += (ftx); \ (pGeometry)->yOff += (fty); \ } #define GEOMETRY_SET_VERTEX_PRIMITIVE(pGeometry, _primitive) \ (pGeometry)->f.vertex.primitive = _primitive #define GEOMETRY_SET_VERTEX_DATA_TYPE(pGeometry, _type) \ { \ (pGeometry)->dataType = _type; \ (pGeometry)->f.vertex.type = xglGeometryDataTypes[_type].type; \ (pGeometry)->f.vertex.bytes_per_vertex = (pGeometry)->width * \ xglGeometryDataTypes[_type].size; \ } #define GEOMETRY_ADD_BOX(pScreen, pGeometry, pBox, nBox) \ xglGeometryAddBox (pScreen, pGeometry, pBox, nBox, \ (pGeometry)->endOffset) #define GEOMETRY_ADD_REGION_AT(pScreen, pGeometry, pRegion, offset) \ xglGeometryAddBox (pScreen, pGeometry, \ REGION_RECTS (pRegion), \ REGION_NUM_RECTS (pRegion), \ offset) #define GEOMETRY_ADD_REGION(pScreen, pGeometry, pRegion) \ xglGeometryAddBox (pScreen, pGeometry, \ REGION_RECTS (pRegion), \ REGION_NUM_RECTS (pRegion), \ (pGeometry)->endOffset) #define GEOMETRY_ADD_SPAN(pScreen, pGeometry, ppt, pwidth, n) \ xglGeometryAddSpan (pScreen, pGeometry, ppt, pwidth, n, \ (pGeometry)->endOffset) #define GEOMETRY_ADD_LINE(pScreen, pGeometry, loop, mode, npt, ppt) \ xglGeometryAddLine (pScreen, pGeometry, loop, mode, npt, ppt, \ (pGeometry)->endOffset) #define GEOMETRY_ADD_SEGMENT(pScreen, pGeometry, nsegInit, pSegInit) \ xglGeometryAddSegment (pScreen, pGeometry, nsegInit, pSegInit, \ (pGeometry)->endOffset) #define GEOMETRY_FOR_GLYPH(pScreen, pGeometry, nGlyph, ppciInit, pglyphBase) \ xglGeometryForGlyph (pScreen, pGeometry, nGlyph, ppciInit, pglyphBase); #define GEOMETRY_ADD_TRAPEZOID(pScreen, pGeometry, pTrap, nTrap) \ xglGeometryAddTrapezoid (pScreen, pGeometry, pTrap, nTrap, \ (pGeometry)->endOffset) #define GEOMETRY_ADD_TRAP(pScreen, pGeometry, pTrap, nTrap) \ xglGeometryAddTrap (pScreen, pGeometry, pTrap, nTrap, \ (pGeometry)->endOffset) #define GEOMETRY_GET_FORMAT(pGeometry, format) \ xglGeometryGetFormat (pGeometry, format) #define GEOMETRY_ENABLE(pGeometry, surface) \ xglSetGeometry (pGeometry, surface) #define GEOMETRY_DISABLE(surface) \ glitz_set_geometry (surface, GLITZ_GEOMETRY_TYPE_NONE, NULL, NULL) void xglGeometryResize (ScreenPtr pScreen, xglGeometryPtr pGeometry, int size); void xglGeometryAddBox (ScreenPtr pScreen, xglGeometryPtr pGeometry, BoxPtr pBox, int nBox, int offset); void xglGeometryAddSpan (ScreenPtr pScreen, xglGeometryPtr pGeometry, DDXPointPtr ppt, int *pwidth, int n, int offset); void xglGeometryAddLine (ScreenPtr pScreen, xglGeometryPtr pGeometry, int loop, int mode, int npt, DDXPointPtr ppt, int offset); void xglGeometryAddSegment (ScreenPtr pScreen, xglGeometryPtr pGeometry, int nsegInit, xSegment *pSegInit, int offset); void xglGeometryForGlyph (ScreenPtr pScreen, xglGeometryPtr pGeometry, unsigned int nGlyph, CharInfoPtr *ppciInit, pointer pglyphBase); void xglGeometryAddTrapezoid (ScreenPtr pScreen, xglGeometryPtr pGeometry, xTrapezoid *pTrap, int nTrap, int offset); void xglGeometryAddTrap (ScreenPtr pScreen, xglGeometryPtr pGeometry, xTrap *pTrap, int nTrap, int offset); xglGeometryPtr xglGetScratchGeometryWithSize (ScreenPtr pScreen, int size); xglGeometryPtr xglGetScratchVertexGeometryWithType (ScreenPtr pScreen, int type, int count); xglGeometryPtr xglGetScratchVertexGeometry (ScreenPtr pScreen, int count); Bool xglSetGeometry (xglGeometryPtr pGeometry, glitz_surface_t *surface); /* xglpixmap.c */ #define XGL_PIXMAP_USAGE_HINT_STREAM_DRAW 1 #define XGL_PIXMAP_USAGE_HINT_STREAM_READ 2 #define XGL_PIXMAP_USAGE_HINT_STREAM_COPY 3 #define XGL_PIXMAP_USAGE_HINT_STATIC_DRAW 4 #define XGL_PIXMAP_USAGE_HINT_STATIC_READ 5 #define XGL_PIXMAP_USAGE_HINT_STATIC_COPY 6 #define XGL_PIXMAP_USAGE_HINT_DYNAMIC_DRAW 7 #define XGL_PIXMAP_USAGE_HINT_DYNAMIC_READ 8 #define XGL_PIXMAP_USAGE_HINT_DYNAMIC_COPY 9 #define XGL_PIXMAP_USAGE_HINT_DEFAULT XGL_PIXMAP_USAGE_HINT_STREAM_DRAW PixmapPtr xglCreatePixmap (ScreenPtr pScreen, int width, int height, int depth); void xglFiniPixmap (PixmapPtr pPixmap); Bool xglDestroyPixmap (PixmapPtr pPixmap); Bool xglModifyPixmapHeader (PixmapPtr pPixmap, int width, int height, int depth, int bitsPerPixel, int devKind, pointer pPixData); RegionPtr xglPixmapToRegion (PixmapPtr pPixmap); xglGeometryPtr xglPixmapToGeometry (PixmapPtr pPixmap, int xOff, int yOff); Bool xglCreatePixmapSurface (PixmapPtr pPixmap); Bool xglAllocatePixmapBits (PixmapPtr pPixmap, int hint); Bool xglMapPixmapBits (PixmapPtr pPixmap); Bool xglUnmapPixmapBits (PixmapPtr pPixmap); /* xglsync.c */ Bool xglSyncBits (DrawablePtr pDrawable, BoxPtr pExtents); void xglSyncDamageBoxBits (DrawablePtr pDrawable); Bool xglSyncSurface (DrawablePtr pDrawable); Bool xglPrepareTarget (DrawablePtr pDrawable); void xglAddSurfaceDamage (DrawablePtr pDrawable, RegionPtr pRegion); void xglAddCurrentSurfaceDamage (DrawablePtr pDrawable); void xglAddCurrentBitDamage (DrawablePtr pDrawable); /* xglsolid.c */ Bool xglSolid (DrawablePtr pDrawable, glitz_operator_t op, glitz_color_t *color, xglGeometryPtr pGeometry, int x, int y, int width, int height, BoxPtr pBox, int nBox); Bool xglSolidGlyph (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nGlyph, CharInfoPtr *ppci, pointer pglyphBase); /* xgltile.c */ xglGeometryPtr xglTiledBoxGeometry (PixmapPtr pTile, int tileX, int tileY, BoxPtr pBox, int nBox); Bool xglTile (DrawablePtr pDrawable, glitz_operator_t op, PixmapPtr pTile, int tileX, int tileY, xglGeometryPtr pGeometry, int x, int y, int width, int height, BoxPtr pBox, int nBox); /* xglcopy.c */ Bool xglCopy (DrawablePtr pSrc, DrawablePtr pDst, int dx, int dy, BoxPtr pBox, int nBox); void xglCopyProc (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, BoxPtr pBox, int nBox, int dx, int dy, Bool reverse, Bool upsidedown, Pixel bitplane, void *closure); /* xglfill.c */ Bool xglFill (DrawablePtr pDrawable, GCPtr pGC, xglGeometryPtr pGeometry, int x, int y, int width, int height, BoxPtr pBox, int nBox); void xglFillSpan (DrawablePtr pDrawable, GCPtr pGC, int n, DDXPointPtr ppt, int *pwidth); void xglFillRect (DrawablePtr pDrawable, GCPtr pGC, int nrect, xRectangle *prect); Bool xglFillLine (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ppt); Bool xglFillSegment (DrawablePtr pDrawable, GCPtr pGC, int nsegInit, xSegment *pSegInit); Bool xglFillGlyph (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppciInit, pointer pglyphBase); /* xglwindow.c */ Bool xglCreateWindow (WindowPtr pWin); Bool xglChangeWindowAttributes (WindowPtr pWin, unsigned long mask); void xglCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); void xglPaintWindowBackground (WindowPtr pWin, RegionPtr pRegion, int what); void xglPaintWindowBorder (WindowPtr pWin, RegionPtr pRegion, int what); /* xglbstore.c */ void xglSaveAreas (PixmapPtr pPixmap, RegionPtr prgnSave, int xorg, int yorg, WindowPtr pWin); void xglRestoreAreas (PixmapPtr pPixmap, RegionPtr prgnRestore, int xorg, int yorg, WindowPtr pWin); /* xglget.c */ void xglGetImage (DrawablePtr pDrawable, int x, int y, int w, int h, unsigned int format, unsigned long planeMask, char *d); void xglGetSpans (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pchardstStart); /* xglgc.c */ Bool xglCreateGC (GCPtr pGC); void xglValidateGC (GCPtr pGC, unsigned long changes, DrawablePtr pDrawable); void xglFillSpans (DrawablePtr pDrawable, GCPtr pGC, int nspans, DDXPointPtr ppt, int *pwidth, int fSorted); void xglSetSpans (DrawablePtr pDrawable, GCPtr pGC, char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted); void xglPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *bits); RegionPtr xglCopyArea (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcX, int srcY, int w, int h, int dstX, int dstY); RegionPtr xglCopyPlane (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcX, int srcY, int w, int h, int dstX, int dstY, unsigned long bitPlane); void xglPolyPoint (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit); void xglPolylines (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ppt); void xglPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nsegInit, xSegment *pSegInit); void xglPolyArc (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *pArcs); void xglPolyFillRect (DrawablePtr pDrawable, GCPtr pGC, int nrect, xRectangle *prect); void xglPolyFillArc (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *pArcs); void xglImageGlyphBlt (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase); void xglPolyGlyphBlt (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase); void xglPushPixels (GCPtr pGC, PixmapPtr pBitmap, DrawablePtr pDrawable, int w, int h, int x, int y); #ifdef MITSHM /* xglshm.c */ void xglShmPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, unsigned int format, int w, int h, int sx, int sy, int sw, int sh, int dx, int dy, char *data); #endif #ifdef RENDER /* xglcomp.c */ Bool xglComp (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height, xglGeometryPtr pGeometry, glitz_surface_t *mask); /* xglpict.c */ void xglComposite (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height); void xglAddTriangles (PicturePtr pDst, INT16 xOff, INT16 yOff, int ntri, xTriangle *tris); void xglChangePicture (PicturePtr pPicture, Mask mask); int xglChangePictureTransform (PicturePtr pPicture, PictTransform *transform); int xglChangePictureFilter (PicturePtr pPicture, int filter, xFixed *params, int nparams); void xglUpdatePicture (PicturePtr pPicture); Bool xglPictureInit (ScreenPtr pScreen); void xglPictureClipExtents (PicturePtr pPicture, BoxPtr extents); /* xglglyph.c */ Bool xglRealizeGlyph (ScreenPtr pScreen, GlyphPtr pGlyph); void xglUnrealizeGlyph (ScreenPtr pScreen, GlyphPtr pGlyph); Bool xglInitGlyphCache (xglGlyphCachePtr pCache, ScreenPtr pScreen, PictFormatPtr format); void xglFiniGlyphCache (xglGlyphCachePtr pCache); void xglGlyphs (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr *glyphs); /* xgltrap.c */ void xglTrapezoids (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nTrap, xTrapezoid *traps); void xglAddTraps (PicturePtr pDst, INT16 xOff, INT16 yOff, int nTrap, xTrap *traps); #endif #ifdef GLXEXT typedef struct _xglHashTable *xglHashTablePtr; xglHashTablePtr xglNewHashTable (void); void xglDeleteHashTable (xglHashTablePtr pTable); void * xglHashLookup (const xglHashTablePtr pTable, unsigned int key); void xglHashInsert (xglHashTablePtr pTable, unsigned int key, void *data); void xglHashRemove (xglHashTablePtr pTable, unsigned int key); unsigned int xglHashFirstEntry (xglHashTablePtr pTable); unsigned int xglHashNextEntry (const xglHashTablePtr pTable, unsigned int key); unsigned int xglHashFindFreeKeyBlock (xglHashTablePtr pTable, unsigned int numKeys); Bool xglInitVisualConfigs (ScreenPtr pScreen); #endif #endif /* _XGL_H_ */