| |
| /************************************************************************** |
| |
| Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. |
| All Rights Reserved. |
| |
| Permission is hereby granted, free of charge, to any person obtaining a |
| copy of this software and associated documentation files (the |
| "Software"), to deal in the Software without restriction, including |
| without limitation the rights to use, copy, modify, merge, publish, |
| distribute, sub license, and/or sell copies of the Software, and to |
| permit persons to whom the Software is furnished to do so, subject to |
| the following conditions: |
| |
| The above copyright notice and this permission notice (including the |
| next paragraph) shall be included in all copies or substantial portions |
| of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR |
| ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| |
| **************************************************************************/ |
| |
| /* |
| * Authors: |
| * Kevin E. Martin <kevin@precisioninsight.com> |
| * |
| * When we're building the XMesa driver for use in the X server (as the |
| * indirect render) we include this file when building the xm_*.c files. |
| * We need to define some types and macros differently when building |
| * in the Xserver vs. stand-alone Mesa. |
| */ |
| |
| #ifndef _XMESA_XF86_H_ |
| #define _XMESA_XF86_H_ |
| |
| #include "GL/glxtokens.h" |
| #include "scrnintstr.h" |
| #include "pixmapstr.h" |
| #include "gcstruct.h" |
| #include "servermd.h" |
| |
| |
| typedef struct _XMesaImageRec { |
| int width, height; |
| char *data; |
| int bytes_per_line; /* Padded to 32 bits */ |
| int bits_per_pixel; |
| } XMesaImage; |
| |
| typedef ScreenRec XMesaDisplay; |
| typedef PixmapPtr XMesaPixmap; |
| typedef ColormapPtr XMesaColormap; |
| typedef DrawablePtr XMesaDrawable; |
| typedef WindowPtr XMesaWindow; |
| typedef GCPtr XMesaGC; |
| typedef VisualPtr XMesaVisualInfo; |
| typedef DDXPointRec XMesaPoint; |
| typedef xColorItem XMesaColor; |
| |
| #define XMesaSetGeneric(__d,__gc,__val,__mask) \ |
| do { \ |
| CARD32 __v[1]; \ |
| (void) __d; \ |
| __v[0] = __val; \ |
| dixChangeGC(NullClient, __gc, __mask, __v, NULL); \ |
| } while (0) |
| |
| #define XMesaSetGenericPtr(__d,__gc,__pval,__mask) \ |
| do { \ |
| ChangeGCVal __v[1]; \ |
| (void) __d; \ |
| __v[0].ptr = __pval; \ |
| dixChangeGC(NullClient, __gc, __mask, NULL, __v); \ |
| } while (0) |
| |
| #define XMesaSetForeground(d,gc,v) XMesaSetGeneric(d,gc,v,GCForeground) |
| #define XMesaSetBackground(d,gc,v) XMesaSetGeneric(d,gc,v,GCBackground) |
| #define XMesaSetPlaneMask(d,gc,v) XMesaSetGeneric(d,gc,v,GCPlaneMask) |
| #define XMesaSetFunction(d,gc,v) XMesaSetGeneric(d,gc,v,GCFunction) |
| #define XMesaSetFillStyle(d,gc,v) XMesaSetGeneric(d,gc,v,GCFillStyle) |
| |
| #define XMesaSetTile(d,gc,v) XMesaSetGenericPtr(d,gc,v,GCTile) |
| |
| #define XMesaDrawPoint(__d,__b,__gc,__x,__y) \ |
| do { \ |
| XMesaPoint __p[1]; \ |
| (void) __d; \ |
| __p[0].x = __x; \ |
| __p[0].y = __y; \ |
| ValidateGC(__b, __gc); \ |
| (*gc->ops->PolyPoint)(__b, __gc, CoordModeOrigin, 1, __p); \ |
| } while (0) |
| |
| #define XMesaDrawPoints(__d,__b,__gc,__p,__n,__m) \ |
| do { \ |
| (void) __d; \ |
| ValidateGC(__b, __gc); \ |
| (*gc->ops->PolyPoint)(__b, __gc, __m, __n, __p); \ |
| } while (0) |
| |
| #define XMesaDrawLine(__d, __b, __gc, __x0, __y0, __x1, __y1) \ |
| do { \ |
| XMesaPoint __p[2]; \ |
| (void) __d; \ |
| __p[0].x = __x0; \ |
| __p[0].y = __y0; \ |
| __p[1].x = __x1; \ |
| __p[1].y = __y1; \ |
| ValidateGC(__b, __gc); \ |
| (*gc->ops->PolyLines)(__b, __gc, CoordModeOrigin, 2, __p); \ |
| } while (0) |
| |
| #define XMesaFillRectangle(__d,__b,__gc,__x,__y,__w,__h) \ |
| do { \ |
| xRectangle __r[1]; \ |
| (void) __d; \ |
| ValidateGC((DrawablePtr)__b, __gc); \ |
| __r[0].x = __x; \ |
| __r[0].y = __y; \ |
| __r[0].width = __w; \ |
| __r[0].height = __h; \ |
| (*__gc->ops->PolyFillRect)((DrawablePtr)__b, __gc, 1, __r); \ |
| } while (0) |
| |
| static _X_INLINE XMesaImage *XMesaGetImage(XMesaDisplay *dpy, PixmapPtr p, int x, |
| int y, unsigned int width, |
| unsigned int height, |
| unsigned long plane_mask, int format) |
| { |
| XMesaImage *img = Xcalloc(sizeof(*img)); |
| |
| img->width = p->drawable.width; |
| img->height = p->drawable.height; |
| img->bits_per_pixel = p->drawable.bitsPerPixel; |
| img->bytes_per_line = PixmapBytePad(width, p->drawable.depth); |
| img->data = malloc(height * img->bytes_per_line); |
| |
| /* Assumes: Images are always in ZPixmap format */ |
| (*p->drawable.pScreen->GetImage)(&p->drawable, x, y, width, height, |
| plane_mask, ZPixmap, img->data); |
| |
| return img; |
| } |
| |
| #define XMesaPutImage(__d,__b,__gc,__i,__sx,__sy,__x,__y,__w,__h) \ |
| do { \ |
| /* Assumes: Images are always in ZPixmap format */ \ |
| (void) __d; \ |
| ASSERT(!__sx && !__sy); /* The SubImage case */ \ |
| ValidateGC(__b, __gc); \ |
| (*__gc->ops->PutImage)(__b, __gc, ((XMesaDrawable)(__b))->depth, \ |
| __x, __y, __w, __h, 0, ZPixmap, \ |
| ((XMesaImage *)(__i))->data); \ |
| } while (0) |
| |
| #define XMesaCopyArea(__d,__sb,__db,__gc,__sx,__sy,__w,__h,__x,__y) \ |
| do { \ |
| (void) __d; \ |
| ValidateGC(__db, __gc); \ |
| (*__gc->ops->CopyArea)((DrawablePtr)__sb, __db, __gc, \ |
| __sx, __sy, __w, __h, __x, __y); \ |
| } while (0) |
| |
| |
| /* CreatePixmap returns a PixmapPtr; so, it cannot be inside braces */ |
| #ifdef CREATE_PIXMAP_USAGE_SCRATCH |
| #define XMesaCreatePixmap(__d,__b,__w,__h,__depth) \ |
| (*__d->CreatePixmap)(__d, __w, __h, __depth, 0) |
| #else |
| #define XMesaCreatePixmap(__d,__b,__w,__h,__depth) \ |
| (*__d->CreatePixmap)(__d, __w, __h, __depth) |
| #endif |
| |
| #define XMesaFreePixmap(__d,__b) \ |
| (*__d->DestroyPixmap)(__b) |
| |
| #define XMesaFreeGC(__d,__gc) \ |
| do { \ |
| (void) __d; \ |
| FreeScratchGC(__gc); \ |
| } while (0) |
| |
| #define GET_COLORMAP_SIZE(__v) __v->ColormapEntries |
| #define GET_REDMASK(__v) __v->mesa_visual.redMask |
| #define GET_GREENMASK(__v) __v->mesa_visual.greenMask |
| #define GET_BLUEMASK(__v) __v->mesa_visual.blueMask |
| #define GET_VISUAL_DEPTH(__v) __v->nplanes |
| #define GET_BLACK_PIXEL(__v) __v->display->blackPixel |
| #define CHECK_BYTE_ORDER(__v) GL_TRUE |
| #define CHECK_FOR_HPCR(__v) GL_FALSE |
| |
| #endif |