17117f1b4Smrg/*
27117f1b4Smrg * Mesa 3-D graphics library
37117f1b4Smrg *
4c1f859d4Smrg * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
57117f1b4Smrg *
67117f1b4Smrg * Permission is hereby granted, free of charge, to any person obtaining a
77117f1b4Smrg * copy of this software and associated documentation files (the "Software"),
87117f1b4Smrg * to deal in the Software without restriction, including without limitation
97117f1b4Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
107117f1b4Smrg * and/or sell copies of the Software, and to permit persons to whom the
117117f1b4Smrg * Software is furnished to do so, subject to the following conditions:
127117f1b4Smrg *
137117f1b4Smrg * The above copyright notice and this permission notice shall be included
147117f1b4Smrg * in all copies or substantial portions of the Software.
157117f1b4Smrg *
167117f1b4Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
177117f1b4Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
187117f1b4Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19af69d88dSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20af69d88dSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21af69d88dSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22af69d88dSmrg * OTHER DEALINGS IN THE SOFTWARE.
237117f1b4Smrg */
247117f1b4Smrg
257117f1b4Smrg
267117f1b4Smrg#ifndef XMESAP_H
277117f1b4Smrg#define XMESAP_H
287117f1b4Smrg
297117f1b4Smrg
30af69d88dSmrg#include "c11/threads.h"
31c1f859d4Smrg#include "xmesa.h"
32c1f859d4Smrg#include "main/mtypes.h"
33af69d88dSmrg#include "swrast/s_context.h"
347117f1b4Smrg
357117f1b4Smrg
36af69d88dSmrgextern mtx_t _xmesa_lock;
377117f1b4Smrg
387117f1b4Smrgextern XMesaBuffer XMesaBufferList;
397117f1b4Smrg
407117f1b4Smrg/* for PF_8R8G8B24 pixel format */
417117f1b4Smrgtypedef struct {
427117f1b4Smrg   GLubyte b;
437117f1b4Smrg   GLubyte g;
447117f1b4Smrg   GLubyte r;
457117f1b4Smrg} bgr_t;
467117f1b4Smrg
477117f1b4Smrg
487117f1b4Smrgstruct xmesa_renderbuffer;
497117f1b4Smrg
507117f1b4Smrg
517117f1b4Smrg/* Function pointer for clearing color buffers */
523464ebd5Sriastradhtypedef void (*ClearFunc)( struct gl_context *ctx, struct xmesa_renderbuffer *xrb,
537117f1b4Smrg                           GLint x, GLint y, GLint width, GLint height );
547117f1b4Smrg
557117f1b4Smrg
567117f1b4Smrg
577117f1b4Smrg
587117f1b4Smrg/** Framebuffer pixel formats */
597117f1b4Smrgenum pixel_format {
607117f1b4Smrg   PF_Truecolor,	/**< TrueColor or DirectColor, any depth */
617117f1b4Smrg   PF_Dither_True,	/**< TrueColor with dithering */
627117f1b4Smrg   PF_8A8R8G8B,		/**< 32-bit TrueColor:  8-A, 8-R, 8-G, 8-B bits */
637117f1b4Smrg   PF_8A8B8G8R,		/**< 32-bit TrueColor:  8-A, 8-B, 8-G, 8-R bits */
647117f1b4Smrg   PF_8R8G8B,		/**< 32-bit TrueColor:  8-R, 8-G, 8-B bits */
657117f1b4Smrg   PF_8R8G8B24,		/**< 24-bit TrueColor:  8-R, 8-G, 8-B bits */
667117f1b4Smrg   PF_5R6G5B,		/**< 16-bit TrueColor:  5-R, 6-G, 5-B bits */
677117f1b4Smrg   PF_Dither_5R6G5B	/**< 16-bit dithered TrueColor: 5-R, 6-G, 5-B */
687117f1b4Smrg};
697117f1b4Smrg
707117f1b4Smrg
717117f1b4Smrg/**
723464ebd5Sriastradh * Visual inforation, derived from struct gl_config.
737117f1b4Smrg * Basically corresponds to an XVisualInfo.
747117f1b4Smrg */
757117f1b4Smrgstruct xmesa_visual {
763464ebd5Sriastradh   struct gl_config mesa_visual;	/* Device independent visual parameters */
777117f1b4Smrg   XMesaDisplay *display;	/* The X11 display */
783464ebd5Sriastradh   int screen, visualID;
793464ebd5Sriastradh   int visualType;
807117f1b4Smrg   XMesaVisualInfo visinfo;	/* X's visual info (pointer to private copy) */
817117f1b4Smrg   GLint BitsPerPixel;		/* True bits per pixel for XImages */
827117f1b4Smrg
837117f1b4Smrg   GLboolean ximage_flag;	/* Use XImage for back buffer (not pixmap)? */
847117f1b4Smrg
857117f1b4Smrg   enum pixel_format dithered_pf;  /* Pixel format when dithering */
867117f1b4Smrg   enum pixel_format undithered_pf;/* Pixel format when not dithering */
877117f1b4Smrg
887117f1b4Smrg   GLfloat RedGamma;		/* Gamma values, 1.0 is default */
897117f1b4Smrg   GLfloat GreenGamma;
907117f1b4Smrg   GLfloat BlueGamma;
917117f1b4Smrg
927117f1b4Smrg   /* For PF_TRUECOLOR */
937117f1b4Smrg   GLint rshift, gshift, bshift;/* Pixel color component shifts */
947117f1b4Smrg   GLubyte Kernel[16];		/* Dither kernel */
957117f1b4Smrg   unsigned long RtoPixel[512];	/* RGB to pixel conversion */
967117f1b4Smrg   unsigned long GtoPixel[512];
977117f1b4Smrg   unsigned long BtoPixel[512];
987117f1b4Smrg   GLubyte PixelToR[256];	/* Pixel to RGB conversion */
997117f1b4Smrg   GLubyte PixelToG[256];
1007117f1b4Smrg   GLubyte PixelToB[256];
1017117f1b4Smrg};
1027117f1b4Smrg
1037117f1b4Smrg
1047117f1b4Smrg/**
1053464ebd5Sriastradh * Context info, derived from struct gl_context.
1067117f1b4Smrg * Basically corresponds to a GLXContext.
1077117f1b4Smrg */
1087117f1b4Smrgstruct xmesa_context {
1093464ebd5Sriastradh   struct gl_context mesa;		/* the core library context (containment) */
1107117f1b4Smrg   XMesaVisual xm_visual;	/* Describes the buffers */
1117117f1b4Smrg   XMesaBuffer xm_buffer;	/* current span/point/line/triangle buffer */
1127117f1b4Smrg
1137117f1b4Smrg   XMesaDisplay *display;	/* == xm_visual->display */
1147117f1b4Smrg   GLboolean swapbytes;		/* Host byte order != display byte order? */
1157117f1b4Smrg   GLboolean direct;		/* Direct rendering context? */
1167117f1b4Smrg
1177117f1b4Smrg   enum pixel_format pixelformat;
1187117f1b4Smrg
1197117f1b4Smrg   GLubyte clearcolor[4];		/* current clearing color */
1207117f1b4Smrg   unsigned long clearpixel;		/* current clearing pixel value */
1217117f1b4Smrg};
1227117f1b4Smrg
1237117f1b4Smrg
1247117f1b4Smrg/**
1257117f1b4Smrg * Types of X/GLX drawables we might render into.
1267117f1b4Smrg */
1277117f1b4Smrgtypedef enum {
1287117f1b4Smrg   WINDOW,          /* An X window */
1297117f1b4Smrg   GLXWINDOW,       /* GLX window */
1307117f1b4Smrg   PIXMAP,          /* GLX pixmap */
1317117f1b4Smrg   PBUFFER          /* GLX Pbuffer */
1327117f1b4Smrg} BufferType;
1337117f1b4Smrg
1347117f1b4Smrg
1357117f1b4Smrg/** Values for db_mode: */
1367117f1b4Smrg/*@{*/
1377117f1b4Smrg#define BACK_PIXMAP	1
1387117f1b4Smrg#define BACK_XIMAGE	2
1397117f1b4Smrg/*@}*/
1407117f1b4Smrg
1417117f1b4Smrg
1427117f1b4Smrg/**
1437117f1b4Smrg * An xmesa_renderbuffer represents the back or front color buffer.
1447117f1b4Smrg * For the front color buffer:
1457117f1b4Smrg *    <drawable> is the X window
1467117f1b4Smrg * For the back color buffer:
1477117f1b4Smrg *    Either <ximage> or <pixmap> will be used, never both.
1487117f1b4Smrg * In any case, <drawable> always equals <pixmap>.
1497117f1b4Smrg * For stand-alone Mesa, we could merge <drawable> and <pixmap> into one
1507117f1b4Smrg * field.  We don't do that for the server-side GLcore module because
1517117f1b4Smrg * pixmaps and drawables are different and we'd need a bunch of casts.
1527117f1b4Smrg */
1537117f1b4Smrgstruct xmesa_renderbuffer
1547117f1b4Smrg{
155af69d88dSmrg   struct swrast_renderbuffer Base;  /* Base class */
1567117f1b4Smrg
1577117f1b4Smrg   XMesaBuffer Parent;  /**< The XMesaBuffer this renderbuffer belongs to */
1587117f1b4Smrg   XMesaDrawable drawable;	/* Usually the X window ID */
1597117f1b4Smrg   XMesaPixmap pixmap;	/* Back color buffer */
1607117f1b4Smrg   XMesaImage *ximage;	/* The back buffer, if not using a Pixmap */
1617117f1b4Smrg
1627117f1b4Smrg   GLushort *origin2;	/* used for PIXEL_ADDR2 macro */
1637117f1b4Smrg   GLint width2;
1647117f1b4Smrg   GLubyte *origin3;	/* used for PIXEL_ADDR3 macro */
1657117f1b4Smrg   GLint width3;
1667117f1b4Smrg   GLuint *origin4;	/* used for PIXEL_ADDR4 macro */
1677117f1b4Smrg   GLint width4;
1687117f1b4Smrg
1697117f1b4Smrg   GLint bottom;	/* used for FLIP macro, equals height - 1 */
1707117f1b4Smrg
1717117f1b4Smrg   ClearFunc clearFunc;
172af69d88dSmrg
173af69d88dSmrg   GLuint map_x, map_y, map_w, map_h;
174af69d88dSmrg   GLbitfield map_mode;
175af69d88dSmrg   XMesaImage *map_ximage;
1767117f1b4Smrg};
1777117f1b4Smrg
1787117f1b4Smrg
1797117f1b4Smrg/**
1807117f1b4Smrg * Framebuffer information, derived from.
1817117f1b4Smrg * Basically corresponds to a GLXDrawable.
1827117f1b4Smrg */
1837117f1b4Smrgstruct xmesa_buffer {
1843464ebd5Sriastradh   struct gl_framebuffer mesa_buffer;	/* depth, stencil, accum, etc buffers */
1857117f1b4Smrg				/* This MUST BE FIRST! */
1867117f1b4Smrg   GLboolean wasCurrent;	/* was ever the current buffer? */
1877117f1b4Smrg   XMesaVisual xm_visual;	/* the X/Mesa visual */
1887117f1b4Smrg
1897117f1b4Smrg   XMesaDisplay *display;
1907117f1b4Smrg   BufferType type;             /* window, pixmap, pbuffer or glxwindow */
1917117f1b4Smrg
1924a49301eSmrg   GLboolean largestPbuffer;    /**< for pbuffers */
1934a49301eSmrg   GLboolean preservedContents; /**< for pbuffers */
1944a49301eSmrg
1957117f1b4Smrg   struct xmesa_renderbuffer *frontxrb; /* front color renderbuffer */
1967117f1b4Smrg   struct xmesa_renderbuffer *backxrb;  /* back color renderbuffer */
1977117f1b4Smrg
1987117f1b4Smrg   XMesaColormap cmap;		/* the X colormap */
1997117f1b4Smrg
2007117f1b4Smrg   unsigned long selectedEvents;/* for pbuffers only */
2017117f1b4Smrg
2027117f1b4Smrg   GLint db_mode;		/* 0 = single buffered */
2037117f1b4Smrg				/* BACK_PIXMAP = use Pixmap for back buffer */
2047117f1b4Smrg				/* BACK_XIMAGE = use XImage for back buffer */
2057117f1b4Smrg   GLuint shm;			/* X Shared Memory extension status:	*/
2067117f1b4Smrg				/*    0 = not available			*/
2077117f1b4Smrg				/*    1 = XImage support available	*/
2087117f1b4Smrg				/*    2 = Pixmap support available too	*/
2093464ebd5Sriastradh#if defined(USE_XSHM)
2107117f1b4Smrg   XShmSegmentInfo shminfo;
2117117f1b4Smrg#endif
2127117f1b4Smrg
213af69d88dSmrg   //   XMesaImage *rowimage;	/* Used for optimized span writing */
2147117f1b4Smrg   XMesaPixmap stipple_pixmap;	/* For polygon stippling */
2157117f1b4Smrg   XMesaGC stipple_gc;		/* For polygon stippling */
2167117f1b4Smrg
2177117f1b4Smrg   XMesaGC gc;			/* scratch GC for span, line, tri drawing */
2187117f1b4Smrg   XMesaGC cleargc;		/* GC for clearing the color buffer */
2197117f1b4Smrg   XMesaGC swapgc;		/* GC for swapping the color buffers */
2207117f1b4Smrg
2217117f1b4Smrg   /* The following are here instead of in the XMesaVisual
2227117f1b4Smrg    * because they depend on the window's colormap.
2237117f1b4Smrg    */
2247117f1b4Smrg
2257117f1b4Smrg   /* For PF_DITHER, PF_LOOKUP, PF_GRAYSCALE */
2267117f1b4Smrg   unsigned long color_table[576];	/* RGB -> pixel value */
2277117f1b4Smrg
2287117f1b4Smrg   /* For PF_DITHER, PF_LOOKUP, PF_GRAYSCALE */
2297117f1b4Smrg   GLubyte pixel_to_r[65536];		/* pixel value -> red */
2307117f1b4Smrg   GLubyte pixel_to_g[65536];		/* pixel value -> green */
2317117f1b4Smrg   GLubyte pixel_to_b[65536];		/* pixel value -> blue */
2327117f1b4Smrg
2337117f1b4Smrg   /* Used to do XAllocColor/XFreeColors accounting: */
2347117f1b4Smrg   int num_alloced;
2357117f1b4Smrg   unsigned long alloced_colors[256];
2367117f1b4Smrg
237c1f859d4Smrg   /* GLX_EXT_texture_from_pixmap */
238c1f859d4Smrg   GLint TextureTarget; /** GLX_TEXTURE_1D_EXT, for example */
239c1f859d4Smrg   GLint TextureFormat; /** GLX_TEXTURE_FORMAT_RGB_EXT, for example */
240c1f859d4Smrg   GLint TextureMipmap; /** 0 or 1 */
241c1f859d4Smrg
2427117f1b4Smrg   struct xmesa_buffer *Next;	/* Linked list pointer: */
2437117f1b4Smrg};
2447117f1b4Smrg
2457117f1b4Smrg
2467117f1b4Smrg/**
2477117f1b4Smrg * If pixelformat==PF_TRUECOLOR:
2487117f1b4Smrg */
2497117f1b4Smrg#define PACK_TRUECOLOR( PIXEL, R, G, B )	\
2507117f1b4Smrg   PIXEL = xmesa->xm_visual->RtoPixel[R]	\
2517117f1b4Smrg         | xmesa->xm_visual->GtoPixel[G]	\
25201e04c3fSmrg         | xmesa->xm_visual->BtoPixel[B];
2537117f1b4Smrg
2547117f1b4Smrg
2557117f1b4Smrg/**
2567117f1b4Smrg * If pixelformat==PF_TRUEDITHER:
2577117f1b4Smrg */
2587117f1b4Smrg#define PACK_TRUEDITHER( PIXEL, X, Y, R, G, B )			\
2597117f1b4Smrg{								\
2607117f1b4Smrg   int d = xmesa->xm_visual->Kernel[((X)&3) | (((Y)&3)<<2)];	\
2617117f1b4Smrg   PIXEL = xmesa->xm_visual->RtoPixel[(R)+d]			\
2627117f1b4Smrg         | xmesa->xm_visual->GtoPixel[(G)+d]			\
2637117f1b4Smrg         | xmesa->xm_visual->BtoPixel[(B)+d];			\
2647117f1b4Smrg}
2657117f1b4Smrg
2667117f1b4Smrg
2677117f1b4Smrg
2687117f1b4Smrg/**
2697117f1b4Smrg * If pixelformat==PF_8A8B8G8R:
2707117f1b4Smrg */
2717117f1b4Smrg#define PACK_8A8B8G8R( R, G, B, A )	\
2727117f1b4Smrg	( ((A) << 24) | ((B) << 16) | ((G) << 8) | (R) )
2737117f1b4Smrg
2747117f1b4Smrg
2757117f1b4Smrg/**
2767117f1b4Smrg * Like PACK_8A8B8G8R() but don't use alpha.  This is usually an acceptable
2777117f1b4Smrg * shortcut.
2787117f1b4Smrg */
2797117f1b4Smrg#define PACK_8B8G8R( R, G, B )   ( ((B) << 16) | ((G) << 8) | (R) )
2807117f1b4Smrg
2817117f1b4Smrg
2827117f1b4Smrg
2837117f1b4Smrg/**
2847117f1b4Smrg * If pixelformat==PF_8R8G8B:
2857117f1b4Smrg */
2867117f1b4Smrg#define PACK_8R8G8B( R, G, B)	 ( ((R) << 16) | ((G) << 8) | (B) )
2877117f1b4Smrg
2887117f1b4Smrg
2897117f1b4Smrg/**
2907117f1b4Smrg * If pixelformat==PF_5R6G5B:
2917117f1b4Smrg */
2927117f1b4Smrg#define PACK_5R6G5B( R, G, B)	 ( (((R) & 0xf8) << 8) | (((G) & 0xfc) << 3) | ((B) >> 3) )
2937117f1b4Smrg
2947117f1b4Smrg
2957117f1b4Smrg/**
2967117f1b4Smrg * If pixelformat==PF_8A8R8G8B:
2977117f1b4Smrg */
2987117f1b4Smrg#define PACK_8A8R8G8B( R, G, B, A )	\
2997117f1b4Smrg	( ((A) << 24) | ((R) << 16) | ((G) << 8) | (B) )
3007117f1b4Smrg
3017117f1b4Smrg
3027117f1b4Smrg
3037117f1b4Smrg
3047117f1b4Smrg/**
3057117f1b4Smrg * Converts a GL window Y coord to an X window Y coord:
3067117f1b4Smrg */
3077117f1b4Smrg#define YFLIP(XRB, Y)  ((XRB)->bottom - (Y))
3087117f1b4Smrg
3097117f1b4Smrg
3107117f1b4Smrg/**
311af69d88dSmrg * Return the address of a 2, 3 or 4-byte pixel in the buffer's XImage:
3127117f1b4Smrg * X==0 is left, Y==0 is bottom.
3137117f1b4Smrg */
3147117f1b4Smrg#define PIXEL_ADDR2(XRB, X, Y)  \
3157117f1b4Smrg   ( (XRB)->origin2 - (Y) * (XRB)->width2 + (X) )
3167117f1b4Smrg
3177117f1b4Smrg#define PIXEL_ADDR3(XRB, X, Y)  \
3187117f1b4Smrg   ( (bgr_t *) ( (XRB)->origin3 - (Y) * (XRB)->width3 + 3 * (X) ))
3197117f1b4Smrg
3207117f1b4Smrg#define PIXEL_ADDR4(XRB, X, Y)  \
3217117f1b4Smrg   ( (XRB)->origin4 - (Y) * (XRB)->width4 + (X) )
3227117f1b4Smrg
3237117f1b4Smrg
3247117f1b4Smrg
3257117f1b4Smrg/*
3267117f1b4Smrg * External functions:
3277117f1b4Smrg */
3287117f1b4Smrg
3297117f1b4Smrgextern struct xmesa_renderbuffer *
330af69d88dSmrgxmesa_new_renderbuffer(struct gl_context *ctx, GLuint name,
331af69d88dSmrg                       const struct xmesa_visual *xmvis,
3327117f1b4Smrg                       GLboolean backBuffer);
3337117f1b4Smrg
3347117f1b4Smrgextern void
3357117f1b4Smrgxmesa_delete_framebuffer(struct gl_framebuffer *fb);
3367117f1b4Smrg
3377117f1b4Smrgextern XMesaBuffer
3387117f1b4Smrgxmesa_find_buffer(XMesaDisplay *dpy, XMesaColormap cmap, XMesaBuffer notThis);
3397117f1b4Smrg
3407117f1b4Smrgextern unsigned long
3413464ebd5Sriastradhxmesa_color_to_pixel( struct gl_context *ctx,
3427117f1b4Smrg                      GLubyte r, GLubyte g, GLubyte b, GLubyte a,
3437117f1b4Smrg                      GLuint pixelFormat );
3447117f1b4Smrg
3457117f1b4Smrgextern void
3467117f1b4Smrgxmesa_get_window_size(XMesaDisplay *dpy, XMesaBuffer b,
3477117f1b4Smrg                      GLuint *width, GLuint *height);
3487117f1b4Smrg
3497117f1b4Smrgextern void
3507117f1b4Smrgxmesa_check_and_update_buffer_size(XMesaContext xmctx, XMesaBuffer drawBuffer);
3517117f1b4Smrg
3527117f1b4Smrgextern void
3537117f1b4Smrgxmesa_init_driver_functions( XMesaVisual xmvisual,
3547117f1b4Smrg                             struct dd_function_table *driver );
3557117f1b4Smrg
3567117f1b4Smrgextern void
357af69d88dSmrgxmesa_MapRenderbuffer(struct gl_context *ctx,
358af69d88dSmrg                      struct gl_renderbuffer *rb,
359af69d88dSmrg                      GLuint x, GLuint y, GLuint w, GLuint h,
360af69d88dSmrg                      GLbitfield mode,
36101e04c3fSmrg                      GLubyte **mapOut, GLint *rowStrideOut,
36201e04c3fSmrg                      bool flip_y);
363af69d88dSmrg
364af69d88dSmrgextern void
365af69d88dSmrgxmesa_UnmapRenderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb);
3667117f1b4Smrg
3677117f1b4Smrgextern void
3687117f1b4Smrgxmesa_destroy_buffers_on_display(XMesaDisplay *dpy);
3697117f1b4Smrg
3707117f1b4Smrg
3717117f1b4Smrg/**
3727117f1b4Smrg * Using a function instead of an ordinary cast is safer.
3737117f1b4Smrg */
37401e04c3fSmrgstatic inline struct xmesa_renderbuffer *
3757117f1b4Smrgxmesa_renderbuffer(struct gl_renderbuffer *rb)
3767117f1b4Smrg{
3777117f1b4Smrg   return (struct xmesa_renderbuffer *) rb;
3787117f1b4Smrg}
3797117f1b4Smrg
3807117f1b4Smrg
3817117f1b4Smrg/**
3823464ebd5Sriastradh * Return pointer to XMesaContext corresponding to a Mesa struct gl_context.
3837117f1b4Smrg * Since we're using structure containment, it's just a cast!.
3847117f1b4Smrg */
38501e04c3fSmrgstatic inline XMesaContext
3863464ebd5SriastradhXMESA_CONTEXT(struct gl_context *ctx)
3877117f1b4Smrg{
3887117f1b4Smrg   return (XMesaContext) ctx;
3897117f1b4Smrg}
3907117f1b4Smrg
3917117f1b4Smrg
3927117f1b4Smrg/**
3933464ebd5Sriastradh * Return pointer to XMesaBuffer corresponding to a Mesa struct gl_framebuffer.
3947117f1b4Smrg * Since we're using structure containment, it's just a cast!.
3957117f1b4Smrg */
39601e04c3fSmrgstatic inline XMesaBuffer
3973464ebd5SriastradhXMESA_BUFFER(struct gl_framebuffer *b)
3987117f1b4Smrg{
3997117f1b4Smrg   return (XMesaBuffer) b;
4007117f1b4Smrg}
4017117f1b4Smrg
4027117f1b4Smrg
4037117f1b4Smrg/* Plugged into the software rasterizer.  Try to use internal
4047117f1b4Smrg * swrast-style point, line and triangle functions.
4057117f1b4Smrg */
4063464ebd5Sriastradhextern void xmesa_choose_point( struct gl_context *ctx );
4073464ebd5Sriastradhextern void xmesa_choose_line( struct gl_context *ctx );
4083464ebd5Sriastradhextern void xmesa_choose_triangle( struct gl_context *ctx );
4097117f1b4Smrg
4107117f1b4Smrg
4113464ebd5Sriastradhextern void xmesa_register_swrast_functions( struct gl_context *ctx );
4127117f1b4Smrg
4137117f1b4Smrg
4147117f1b4Smrg
4153464ebd5Sriastradh#if   defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
4167117f1b4Smrg#define ENABLE_EXT_timer_query 1 /* should have 64-bit GLuint64EXT */
4177117f1b4Smrg#else
4187117f1b4Smrg#define ENABLE_EXT_timer_query 0 /* may not have 64-bit GLuint64EXT */
4197117f1b4Smrg#endif
4207117f1b4Smrg
4214a49301eSmrg
4224a49301eSmrg#define TEST_META_FUNCS 0
4234a49301eSmrg
4244a49301eSmrg
4257117f1b4Smrg#endif
426