diff options
| author | Brian Paul <brianp@vmware.com> | 2009-01-10 11:57:13 -0700 | 
|---|---|---|
| committer | Brian Paul <brianp@vmware.com> | 2009-01-10 11:57:13 -0700 | 
| commit | 1636328b0adefcebcc204d63980184a6d592efae (patch) | |
| tree | cb43af3b4f93d5cc98b2156f463f4d220b51bf4c /src | |
| parent | 2c56dd775771d9d5ea2e22cf4ee4b5dbbbb2a03d (diff) | |
xmesa: deprecate the "XMesa" interface
Move the include/GL/xmesa*.h files to src/mesa/drivers/x11/ so they're no
longer considered public.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/x11/fakeglx.c | 1 | ||||
| -rw-r--r-- | src/mesa/drivers/x11/xm_api.c | 1 | ||||
| -rw-r--r-- | src/mesa/drivers/x11/xm_buffer.c | 1 | ||||
| -rw-r--r-- | src/mesa/drivers/x11/xmesa.h | 424 | ||||
| -rw-r--r-- | src/mesa/drivers/x11/xmesaP.h | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/x11/xmesa_x.h | 86 | ||||
| -rw-r--r-- | src/mesa/drivers/x11/xmesa_xf86.h | 198 | 
7 files changed, 709 insertions, 4 deletions
diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c index 827d39f995..ea3585258d 100644 --- a/src/mesa/drivers/x11/fakeglx.c +++ b/src/mesa/drivers/x11/fakeglx.c @@ -42,7 +42,6 @@  #include "glxheader.h"  #include "glxapi.h" -#include "GL/xmesa.h"  #include "main/context.h"  #include "main/config.h"  #include "main/macros.h" diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c index c9009bad03..18aa8bcc09 100644 --- a/src/mesa/drivers/x11/xm_api.c +++ b/src/mesa/drivers/x11/xm_api.c @@ -63,7 +63,6 @@  #endif  #include "glxheader.h" -#include "GL/xmesa.h"  #include "xmesaP.h"  #include "main/context.h"  #include "main/extensions.h" diff --git a/src/mesa/drivers/x11/xm_buffer.c b/src/mesa/drivers/x11/xm_buffer.c index f104d44d05..7ad67bc34d 100644 --- a/src/mesa/drivers/x11/xm_buffer.c +++ b/src/mesa/drivers/x11/xm_buffer.c @@ -30,7 +30,6 @@  #include "glxheader.h" -#include "GL/xmesa.h"  #include "xmesaP.h"  #include "main/imports.h"  #include "main/framebuffer.h" diff --git a/src/mesa/drivers/x11/xmesa.h b/src/mesa/drivers/x11/xmesa.h new file mode 100644 index 0000000000..98139af833 --- /dev/null +++ b/src/mesa/drivers/x11/xmesa.h @@ -0,0 +1,424 @@ +/* + * Mesa 3-D graphics library + * Version:  7.1 + *  + * Copyright (C) 1999-2007  Brian Paul   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, sublicense, + * 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 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 NONINFRINGEMENT.  IN NO EVENT SHALL + * BRIAN PAUL 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. + */ + + +/* + * Mesa/X11 interface.  This header file serves as the documentation for + * the Mesa/X11 interface functions. + * + * Note: this interface isn't intended for user programs.  It's primarily + * just for implementing the pseudo-GLX interface. + */ + + +/* Sample Usage: + +In addition to the usual X calls to select a visual, create a colormap +and create a window, you must do the following to use the X/Mesa interface: + +1. Call XMesaCreateVisual() to make an XMesaVisual from an XVisualInfo. + +2. Call XMesaCreateContext() to create an X/Mesa rendering context, given +   the XMesaVisual. + +3. Call XMesaCreateWindowBuffer() to create an XMesaBuffer from an X window +   and XMesaVisual. + +4. Call XMesaMakeCurrent() to bind the XMesaBuffer to an XMesaContext and +   to make the context the current one. + +5. Make gl* calls to render your graphics. + +6. Use XMesaSwapBuffers() when double buffering to swap front/back buffers. + +7. Before the X window is destroyed, call XMesaDestroyBuffer(). + +8. Before exiting, call XMesaDestroyVisual and XMesaDestroyContext. + +*/ + + + + +#ifndef XMESA_H +#define XMESA_H + +#ifdef __VMS +#include <GL/vms_x_fix.h> +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef XFree86Server +#include "xmesa_xf86.h" +#else +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include "xmesa_x.h" +#endif +#include "GL/gl.h" + +#ifdef AMIWIN +#include <pragmas/xlib_pragmas.h> +extern struct Library *XLibBase; +#endif + + +#define XMESA_MAJOR_VERSION 6 +#define XMESA_MINOR_VERSION 3 + + + +/* + * Values passed to XMesaGetString: + */ +#define XMESA_VERSION 1 +#define XMESA_EXTENSIONS 2 + + +/* + * Values passed to XMesaSetFXmode: + */ +#define XMESA_FX_WINDOW       1 +#define XMESA_FX_FULLSCREEN   2 + + + +typedef struct xmesa_context *XMesaContext; + +typedef struct xmesa_visual *XMesaVisual; + +typedef struct xmesa_buffer *XMesaBuffer; + + + +/* + * Create a new X/Mesa visual. + * Input:  display - X11 display + *         visinfo - an XVisualInfo pointer + *         rgb_flag - GL_TRUE = RGB mode, + *                    GL_FALSE = color index mode + *         alpha_flag - alpha buffer requested? + *         db_flag - GL_TRUE = double-buffered, + *                   GL_FALSE = single buffered + *         stereo_flag - stereo visual? + *         ximage_flag - GL_TRUE = use an XImage for back buffer, + *                       GL_FALSE = use an off-screen pixmap for back buffer + *         depth_size - requested bits/depth values, or zero + *         stencil_size - requested bits/stencil values, or zero + *         accum_red_size - requested bits/red accum values, or zero + *         accum_green_size - requested bits/green accum values, or zero + *         accum_blue_size - requested bits/blue accum values, or zero + *         accum_alpha_size - requested bits/alpha accum values, or zero + *         num_samples - number of samples/pixel if multisampling, or zero + *         level - visual level, usually 0 + *         visualCaveat - ala the GLX extension, usually GLX_NONE_EXT + * Return;  a new XMesaVisual or 0 if error. + */ +extern XMesaVisual XMesaCreateVisual( XMesaDisplay *display, +                                      XMesaVisualInfo visinfo, +                                      GLboolean rgb_flag, +                                      GLboolean alpha_flag, +                                      GLboolean db_flag, +                                      GLboolean stereo_flag, +                                      GLboolean ximage_flag, +                                      GLint depth_size, +                                      GLint stencil_size, +                                      GLint accum_red_size, +                                      GLint accum_green_size, +                                      GLint accum_blue_size, +                                      GLint accum_alpha_size, +                                      GLint num_samples, +                                      GLint level, +                                      GLint visualCaveat ); + +/* + * Destroy an XMesaVisual, but not the associated XVisualInfo. + */ +extern void XMesaDestroyVisual( XMesaVisual v ); + + + +/* + * Create a new XMesaContext for rendering into an X11 window. + * + * Input:  visual - an XMesaVisual + *         share_list - another XMesaContext with which to share display + *                      lists or NULL if no sharing is wanted. + * Return:  an XMesaContext or NULL if error. + */ +extern XMesaContext XMesaCreateContext( XMesaVisual v, +					XMesaContext share_list ); + + +/* + * Destroy a rendering context as returned by XMesaCreateContext() + */ +extern void XMesaDestroyContext( XMesaContext c ); + + +#ifdef XFree86Server +/* + * These are the extra routines required for integration with XFree86. + * None of these routines should be user visible. -KEM + */ +extern GLboolean XMesaForceCurrent( XMesaContext c ); + +extern GLboolean XMesaLoseCurrent( XMesaContext c ); + +extern GLboolean XMesaCopyContext( XMesaContext src, +				   XMesaContext dst, +				   GLuint mask ); +#endif /* XFree86Server */ + + +/* + * Create an XMesaBuffer from an X window. + */ +extern XMesaBuffer XMesaCreateWindowBuffer( XMesaVisual v, XMesaWindow w ); + + +/* + * Create an XMesaBuffer from an X pixmap. + */ +extern XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v, +					    XMesaPixmap p, +					    XMesaColormap cmap ); + + +/* + * Destroy an XMesaBuffer, but not the corresponding window or pixmap. + */ +extern void XMesaDestroyBuffer( XMesaBuffer b ); + + +/* + * Return the XMesaBuffer handle which corresponds to an X drawable, if any. + * + * New in Mesa 2.3. + */ +extern XMesaBuffer XMesaFindBuffer( XMesaDisplay *dpy, +				    XMesaDrawable d ); + + + +/* + * Bind a buffer to a context and make the context the current one. + */ +extern GLboolean XMesaMakeCurrent( XMesaContext c, +				   XMesaBuffer b ); + + +/* + * Bind two buffers (read and draw) to a context and make the + * context the current one. + * New in Mesa 3.3 + */ +extern GLboolean XMesaMakeCurrent2( XMesaContext c, +                                    XMesaBuffer drawBuffer, +                                    XMesaBuffer readBuffer ); + + +/* + * Unbind the current context from its buffer. + */ +extern GLboolean XMesaUnbindContext( XMesaContext c ); + + +/* + * Return a handle to the current context. + */ +extern XMesaContext XMesaGetCurrentContext( void ); + + +/* + * Return handle to the current (draw) buffer. + */ +extern XMesaBuffer XMesaGetCurrentBuffer( void ); + + +/* + * Return handle to the current read buffer. + * New in Mesa 3.3 + */ +extern XMesaBuffer XMesaGetCurrentReadBuffer( void ); + + +/* + * Swap the front and back buffers for the given buffer.  No action is + * taken if the buffer is not double buffered. + */ +extern void XMesaSwapBuffers( XMesaBuffer b ); + + +/* + * Copy a sub-region of the back buffer to the front buffer. + * + * New in Mesa 2.6 + */ +extern void XMesaCopySubBuffer( XMesaBuffer b, +				int x, +				int y, +				int width, +				int height ); + + +/* + * Return a pointer to the the Pixmap or XImage being used as the back + * color buffer of an XMesaBuffer.  This function is a way to get "under + * the hood" of X/Mesa so one can manipulate the back buffer directly. + * Input:  b - the XMesaBuffer + * Output:  pixmap - pointer to back buffer's Pixmap, or 0 + *          ximage - pointer to back buffer's XImage, or NULL + * Return:  GL_TRUE = context is double buffered + *          GL_FALSE = context is single buffered + */ +extern GLboolean XMesaGetBackBuffer( XMesaBuffer b, +				     XMesaPixmap *pixmap, +				     XMesaImage **ximage ); + + + +/* + * Return the depth buffer associated with an XMesaBuffer. + * Input:  b - the XMesa buffer handle + * Output:  width, height - size of buffer in pixels + *          bytesPerValue - bytes per depth value (2 or 4) + *          buffer - pointer to depth buffer values + * Return:  GL_TRUE or GL_FALSE to indicate success or failure. + * + * New in Mesa 2.4. + */ +extern GLboolean XMesaGetDepthBuffer( XMesaBuffer b, +				      GLint *width, +				      GLint *height, +				      GLint *bytesPerValue, +				      void **buffer ); + + + +/* + * Flush/sync a context + */ +extern void XMesaFlush( XMesaContext c ); + + + +/* + * Get an X/Mesa-specific string. + * Input:  name - either XMESA_VERSION or XMESA_EXTENSIONS + */ +extern const char *XMesaGetString( XMesaContext c, int name ); + + + +/* + * Scan for XMesaBuffers whose window/pixmap has been destroyed, then free + * any memory used by that buffer. + * + * New in Mesa 2.3. + */ +extern void XMesaGarbageCollect( void ); + + + +/* + * Return a dithered pixel value. + * Input:  c - XMesaContext + *         x, y - window coordinate + *         red, green, blue, alpha - color components in [0,1] + * Return:  pixel value + * + * New in Mesa 2.3. + */ +extern unsigned long XMesaDitherColor( XMesaContext xmesa, +				       GLint x, +				       GLint y, +				       GLfloat red, +				       GLfloat green, +				       GLfloat blue, +				       GLfloat alpha ); + + + +/* + * 3Dfx Glide driver only! + * Set 3Dfx/Glide full-screen or window rendering mode. + * Input:  mode - either XMESA_FX_WINDOW (window rendering mode) or + *                XMESA_FX_FULLSCREEN (full-screen rendering mode) + * Return:  GL_TRUE if success + *          GL_FALSE if invalid mode or if not using 3Dfx driver + * + * New in Mesa 2.6. + */ +extern GLboolean XMesaSetFXmode( GLint mode ); + + + +/* + * Reallocate the back/depth/stencil/accum/etc/ buffers associated with + * buffer <b> if its size has changed. + * + * New in Mesa 4.0.2 + */ +extern void XMesaResizeBuffers( XMesaBuffer b ); + + + +/* + * Create a pbuffer. + * New in Mesa 4.1 + */ +extern XMesaBuffer XMesaCreatePBuffer(XMesaVisual v, XMesaColormap cmap, +                                      unsigned int width, unsigned int height); + + + +/* + * Texture from Pixmap + * New in Mesa 7.1 + */ +extern void +XMesaBindTexImage(XMesaDisplay *dpy, XMesaBuffer drawable, int buffer, +                  const int *attrib_list); + +extern void +XMesaReleaseTexImage(XMesaDisplay *dpy, XMesaBuffer drawable, int buffer); + + +extern XMesaBuffer +XMesaCreatePixmapTextureBuffer(XMesaVisual v, XMesaPixmap p, +                               XMesaColormap cmap, +                               int format, int target, int mipmap); + + + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/src/mesa/drivers/x11/xmesaP.h b/src/mesa/drivers/x11/xmesaP.h index 98867ac710..6a6c9ef600 100644 --- a/src/mesa/drivers/x11/xmesaP.h +++ b/src/mesa/drivers/x11/xmesaP.h @@ -27,7 +27,7 @@  #define XMESAP_H -#include "GL/xmesa.h" +#include "xmesa.h"  #include "main/mtypes.h"  #if defined(FX)  #include "GL/fxmesa.h" diff --git a/src/mesa/drivers/x11/xmesa_x.h b/src/mesa/drivers/x11/xmesa_x.h new file mode 100644 index 0000000000..865bab4313 --- /dev/null +++ b/src/mesa/drivers/x11/xmesa_x.h @@ -0,0 +1,86 @@ + +/************************************************************************** + +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 stand-alone Mesa 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_X_H_ +#define _XMESA_X_H_ + +typedef Display      XMesaDisplay; +typedef Pixmap       XMesaPixmap; +typedef Colormap     XMesaColormap; +typedef Drawable     XMesaDrawable; +typedef Window       XMesaWindow; +typedef GC           XMesaGC; +typedef XVisualInfo *XMesaVisualInfo; +typedef XImage       XMesaImage; +typedef XPoint       XMesaPoint; +typedef XColor       XMesaColor; + +#define XMesaDestroyImage      XDestroyImage + +#define XMesaPutPixel          XPutPixel +#define XMesaGetPixel          XGetPixel + +#define XMesaSetForeground     XSetForeground +#define XMesaSetBackground     XSetBackground +#define XMesaSetPlaneMask      XSetPlaneMask +#define XMesaSetFunction       XSetFunction +#define XMesaSetFillStyle      XSetFillStyle +#define XMesaSetTile           XSetTile + +#define XMesaDrawPoint         XDrawPoint +#define XMesaDrawPoints        XDrawPoints +#define XMesaDrawLine          XDrawLine +#define XMesaFillRectangle     XFillRectangle +#define XMesaGetImage          XGetImage +#define XMesaPutImage          XPutImage +#define XMesaCopyArea          XCopyArea + +#define XMesaCreatePixmap      XCreatePixmap +#define XMesaFreePixmap        XFreePixmap +#define XMesaFreeGC            XFreeGC + +#define GET_COLORMAP_SIZE(__v)  __v->visinfo->colormap_size +#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->visinfo->depth +#define GET_BLACK_PIXEL(__v)    BlackPixel(__v->display, __v->mesa_visual.screen) +#define CHECK_BYTE_ORDER(__v)   host_byte_order()==ImageByteOrder(__v->display) +#define CHECK_FOR_HPCR(__v)     XInternAtom(__v->display, "_HP_RGB_SMOOTH_MAP_LIST", True) + +#endif diff --git a/src/mesa/drivers/x11/xmesa_xf86.h b/src/mesa/drivers/x11/xmesa_xf86.h new file mode 100644 index 0000000000..10f93c3ab6 --- /dev/null +++ b/src/mesa/drivers/x11/xmesa_xf86.h @@ -0,0 +1,198 @@ + +/************************************************************************** + +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  | 
