1afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*
2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library
3fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian * Version:  7.1
4dbd1e2b5990a3689bf718296c57c14fc3ba38db5Jouk Jansen *
5fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
6dbd1e2b5990a3689bf718296c57c14fc3ba38db5Jouk Jansen *
7afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a
8afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"),
9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation
10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the
12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions:
13dbd1e2b5990a3689bf718296c57c14fc3ba38db5Jouk Jansen *
14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included
15afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software.
16dbd1e2b5990a3689bf718296c57c14fc3ba38db5Jouk Jansen *
17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifndef XMESAP_H
27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define XMESAP_H
28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
29afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
301636328b0adefcebcc204d63980184a6d592efaeBrian Paul#include "xmesa.h"
31374e7fd6cc95d3d91629a6e1c951d77e8a29c31cBrian Paul#include "main/mtypes.h"
32d16e71eeb47d1e67930f6e86a80dc926468224d9Brian Paul#include "swrast/s_context.h"
33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
34afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
35206bd46e2b030a9e8a88eadbe770030cb50aee6dBrian Paulextern _glthread_Mutex _xmesa_lock;
36206bd46e2b030a9e8a88eadbe770030cb50aee6dBrian Paul
37928a70e4354d4884e2918ec67ddc6d8baf942c8aBrianextern XMesaBuffer XMesaBufferList;
38206bd46e2b030a9e8a88eadbe770030cb50aee6dBrian Paul
39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* for PF_8R8G8B24 pixel format */
40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgtypedef struct {
41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte b;
42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte g;
43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte r;
44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} bgr_t;
45afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
46afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
47e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulstruct xmesa_renderbuffer;
48e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
49e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
50dd020f13a6d520b46aefd4453dae6b6edcc427f6Brian Paul/* Function pointer for clearing color buffers */
51f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergtypedef void (*ClearFunc)( struct gl_context *ctx, struct xmesa_renderbuffer *xrb,
52ec99e716a229e58233551d821418428cc1b90324Brian Paul                           GLint x, GLint y, GLint width, GLint height );
53485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell
54485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell
55a10be7fb8546d985b532cabfca95d56726e79856Brian Paul
56a10be7fb8546d985b532cabfca95d56726e79856Brian Paul
57a10be7fb8546d985b532cabfca95d56726e79856Brian Paul/** Framebuffer pixel formats */
58a10be7fb8546d985b532cabfca95d56726e79856Brian Paulenum pixel_format {
59a10be7fb8546d985b532cabfca95d56726e79856Brian Paul   PF_Truecolor,	/**< TrueColor or DirectColor, any depth */
60a10be7fb8546d985b532cabfca95d56726e79856Brian Paul   PF_Dither_True,	/**< TrueColor with dithering */
61ec42af9263bfba71074396f3850d5264083a5632Brian   PF_8A8R8G8B,		/**< 32-bit TrueColor:  8-A, 8-R, 8-G, 8-B bits */
62ec42af9263bfba71074396f3850d5264083a5632Brian   PF_8A8B8G8R,		/**< 32-bit TrueColor:  8-A, 8-B, 8-G, 8-R bits */
63a10be7fb8546d985b532cabfca95d56726e79856Brian Paul   PF_8R8G8B,		/**< 32-bit TrueColor:  8-R, 8-G, 8-B bits */
64ec42af9263bfba71074396f3850d5264083a5632Brian   PF_8R8G8B24,		/**< 24-bit TrueColor:  8-R, 8-G, 8-B bits */
65a10be7fb8546d985b532cabfca95d56726e79856Brian Paul   PF_5R6G5B,		/**< 16-bit TrueColor:  5-R, 6-G, 5-B bits */
66ec42af9263bfba71074396f3850d5264083a5632Brian   PF_Dither_5R6G5B	/**< 16-bit dithered TrueColor: 5-R, 6-G, 5-B */
67a10be7fb8546d985b532cabfca95d56726e79856Brian Paul};
68a10be7fb8546d985b532cabfca95d56726e79856Brian Paul
69a10be7fb8546d985b532cabfca95d56726e79856Brian Paul
70d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
71d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg * Visual inforation, derived from struct gl_config.
72d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul * Basically corresponds to an XVisualInfo.
73afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
74afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstruct xmesa_visual {
75d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg   struct gl_config mesa_visual;	/* Device independent visual parameters */
76afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaDisplay *display;	/* The X11 display */
77705e142dda047f24b563fc2bea0f922173e91d1bKristian Høgsberg   int screen, visualID;
78c3ed27ec76c5456412122d7e654a2e298409cc88Brian Paul   int visualType;
79d5e4f29cb9ef5af7214887e84fb31f27fbfe1100Brian Paul   XMesaVisualInfo visinfo;	/* X's visual info (pointer to private copy) */
80d5e4f29cb9ef5af7214887e84fb31f27fbfe1100Brian Paul   XVisualInfo *vishandle;	/* Only used in fakeglx.c */
81c2bd8197e1f29390ce346444ef48775ccd0c2297Brian Paul   GLint BitsPerPixel;		/* True bits per pixel for XImages */
82afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
83afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLboolean ximage_flag;	/* Use XImage for back buffer (not pixmap)? */
84afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
85a10be7fb8546d985b532cabfca95d56726e79856Brian Paul   enum pixel_format dithered_pf;  /* Pixel format when dithering */
86a10be7fb8546d985b532cabfca95d56726e79856Brian Paul   enum pixel_format undithered_pf;/* Pixel format when not dithering */
87afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
88afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLfloat RedGamma;		/* Gamma values, 1.0 is default */
89afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLfloat GreenGamma;
90afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLfloat BlueGamma;
91afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
92afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* For PF_TRUECOLOR */
93afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLint rshift, gshift, bshift;/* Pixel color component shifts */
94afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte Kernel[16];		/* Dither kernel */
95afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   unsigned long RtoPixel[512];	/* RGB to pixel conversion */
96afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   unsigned long GtoPixel[512];
97afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   unsigned long BtoPixel[512];
98afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte PixelToR[256];	/* Pixel to RGB conversion */
99afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte PixelToG[256];
100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte PixelToB[256];
101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg};
102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
104d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
105f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg * Context info, derived from struct gl_context.
106d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul * Basically corresponds to a GLXContext.
107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstruct xmesa_context {
109f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg   struct gl_context mesa;		/* the core library context (containment) */
110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaVisual xm_visual;	/* Describes the buffers */
1113b4fbbc129c711a5aec8d653d5c6eb2e195f947cBrian Paul   XMesaBuffer xm_buffer;	/* current span/point/line/triangle buffer */
112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaDisplay *display;	/* == xm_visual->display */
114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLboolean swapbytes;		/* Host byte order != display byte order? */
115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLboolean direct;		/* Direct rendering context? */
116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
117a10be7fb8546d985b532cabfca95d56726e79856Brian Paul   enum pixel_format pixelformat;
118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte clearcolor[4];		/* current clearing color */
120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   unsigned long clearpixel;		/* current clearing pixel value */
121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg};
122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
124d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
125d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul * Types of X/GLX drawables we might render into.
126d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul */
127a078d75a27b99252ede6520e24b145106ab98aa2Brian Paultypedef enum {
128a078d75a27b99252ede6520e24b145106ab98aa2Brian Paul   WINDOW,          /* An X window */
129a078d75a27b99252ede6520e24b145106ab98aa2Brian Paul   GLXWINDOW,       /* GLX window */
130a078d75a27b99252ede6520e24b145106ab98aa2Brian Paul   PIXMAP,          /* GLX pixmap */
131a078d75a27b99252ede6520e24b145106ab98aa2Brian Paul   PBUFFER          /* GLX Pbuffer */
132a078d75a27b99252ede6520e24b145106ab98aa2Brian Paul} BufferType;
133a078d75a27b99252ede6520e24b145106ab98aa2Brian Paul
134a078d75a27b99252ede6520e24b145106ab98aa2Brian Paul
135d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/** Values for db_mode: */
136d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/*@{*/
137692147ebf7f09d56a7de1659de2449478da4d1baBrian Paul#define BACK_PIXMAP	1
138692147ebf7f09d56a7de1659de2449478da4d1baBrian Paul#define BACK_XIMAGE	2
139d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/*@}*/
140692147ebf7f09d56a7de1659de2449478da4d1baBrian Paul
141692147ebf7f09d56a7de1659de2449478da4d1baBrian Paul
142ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul/**
143ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul * An xmesa_renderbuffer represents the back or front color buffer.
144ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul * For the front color buffer:
145ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul *    <drawable> is the X window
146ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul * For the back color buffer:
147ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul *    Either <ximage> or <pixmap> will be used, never both.
148ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul * In any case, <drawable> always equals <pixmap>.
149ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul * For stand-alone Mesa, we could merge <drawable> and <pixmap> into one
150ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul * field.  We don't do that for the server-side GLcore module because
151ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul * pixmaps and drawables are different and we'd need a bunch of casts.
152ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul */
153e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulstruct xmesa_renderbuffer
154e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul{
155d16e71eeb47d1e67930f6e86a80dc926468224d9Brian Paul   struct swrast_renderbuffer Base;  /* Base class */
156e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
157d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul   XMesaBuffer Parent;  /**< The XMesaBuffer this renderbuffer belongs to */
158ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul   XMesaDrawable drawable;	/* Usually the X window ID */
159ad271b8c98021dc82c0714d768a6642aee10794fBrian Paul   XMesaPixmap pixmap;	/* Back color buffer */
160e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   XMesaImage *ximage;	/* The back buffer, if not using a Pixmap */
161e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
162e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   GLushort *origin2;	/* used for PIXEL_ADDR2 macro */
163e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   GLint width2;
164e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   GLubyte *origin3;	/* used for PIXEL_ADDR3 macro */
165e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   GLint width3;
166e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   GLuint *origin4;	/* used for PIXEL_ADDR4 macro */
167e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   GLint width4;
168e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
169692147ebf7f09d56a7de1659de2449478da4d1baBrian Paul   GLint bottom;	/* used for FLIP macro, equals height - 1 */
170e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
171e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   ClearFunc clearFunc;
17232c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul
17332c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul   GLuint map_x, map_y, map_w, map_h;
17432c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul   GLbitfield map_mode;
17532c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul   XMesaImage *map_ximage;
176e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul};
177e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
178e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
179d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
180d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul * Framebuffer information, derived from.
181d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul * Basically corresponds to a GLXDrawable.
182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstruct xmesa_buffer {
18431aca27c08d6a385c595d34fe4ee06390bf5b0e8Kristian Høgsberg   struct gl_framebuffer mesa_buffer;	/* depth, stencil, accum, etc buffers */
1853b4fbbc129c711a5aec8d653d5c6eb2e195f947cBrian Paul				/* This MUST BE FIRST! */
186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLboolean wasCurrent;	/* was ever the current buffer? */
187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaVisual xm_visual;	/* the X/Mesa visual */
188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaDisplay *display;
190a078d75a27b99252ede6520e24b145106ab98aa2Brian Paul   BufferType type;             /* window, pixmap, pbuffer or glxwindow */
191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
192c3eef6021a06d728aa4c8b882264f554f2d4b801Brian Paul   GLboolean largestPbuffer;    /**< for pbuffers */
193c3eef6021a06d728aa4c8b882264f554f2d4b801Brian Paul   GLboolean preservedContents; /**< for pbuffers */
194c3eef6021a06d728aa4c8b882264f554f2d4b801Brian Paul
195e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   struct xmesa_renderbuffer *frontxrb; /* front color renderbuffer */
196e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   struct xmesa_renderbuffer *backxrb;  /* back color renderbuffer */
197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaColormap cmap;		/* the X colormap */
199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
200e4656003caee346d9c4eb23256d73409271291a7Brian Paul   unsigned long selectedEvents;/* for pbuffers only */
201e4656003caee346d9c4eb23256d73409271291a7Brian Paul
202692147ebf7f09d56a7de1659de2449478da4d1baBrian Paul   GLint db_mode;		/* 0 = single buffered */
203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg				/* BACK_PIXMAP = use Pixmap for back buffer */
204afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg				/* BACK_XIMAGE = use XImage for back buffer */
205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLuint shm;			/* X Shared Memory extension status:	*/
206afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg				/*    0 = not available			*/
207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg				/*    1 = XImage support available	*/
208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg				/*    2 = Pixmap support available too	*/
2091ccef926be46dce3b6b5c76e812e2fae4e205ce7Adam Jackson#if defined(USE_XSHM)
210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XShmSegmentInfo shminfo;
211afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif
212afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
213b0f0d7a8118401b209c674804255b5fd9e8c94c0Brian Paul   //   XMesaImage *rowimage;	/* Used for optimized span writing */
214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaPixmap stipple_pixmap;	/* For polygon stippling */
215afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaGC stipple_gc;		/* For polygon stippling */
216afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
217c19d783e0715ac01ad4d3fd0705500d2bf6f7039Brian Paul   XMesaGC gc;			/* scratch GC for span, line, tri drawing */
218afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   XMesaGC cleargc;		/* GC for clearing the color buffer */
2199ac7182ec4558cb0c3a6481c72732f05feb50a60Brian Paul   XMesaGC swapgc;		/* GC for swapping the color buffers */
220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* The following are here instead of in the XMesaVisual
222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg    * because they depend on the window's colormap.
223afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg    */
224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* For PF_DITHER, PF_LOOKUP, PF_GRAYSCALE */
226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   unsigned long color_table[576];	/* RGB -> pixel value */
227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* For PF_DITHER, PF_LOOKUP, PF_GRAYSCALE */
229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte pixel_to_r[65536];		/* pixel value -> red */
230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte pixel_to_g[65536];		/* pixel value -> green */
231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   GLubyte pixel_to_b[65536];		/* pixel value -> blue */
232afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   /* Used to do XAllocColor/XFreeColors accounting: */
234afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   int num_alloced;
235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   unsigned long alloced_colors[256];
236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
237fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   /* GLX_EXT_texture_from_pixmap */
238fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   GLint TextureTarget; /** GLX_TEXTURE_1D_EXT, for example */
239fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   GLint TextureFormat; /** GLX_TEXTURE_FORMAT_RGB_EXT, for example */
240fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian   GLint TextureMipmap; /** 0 or 1 */
241fd54564f78d4aeae2c39ada7502ec659c14b3ecaBrian
242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   struct xmesa_buffer *Next;	/* Linked list pointer: */
243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg};
244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
246d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
247afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * If pixelformat==PF_TRUECOLOR:
248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define PACK_TRUECOLOR( PIXEL, R, G, B )	\
250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   PIXEL = xmesa->xm_visual->RtoPixel[R]	\
251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         | xmesa->xm_visual->GtoPixel[G]	\
252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         | xmesa->xm_visual->BtoPixel[B];	\
253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
255d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * If pixelformat==PF_TRUEDITHER:
257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define PACK_TRUEDITHER( PIXEL, X, Y, R, G, B )			\
259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{								\
260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   int d = xmesa->xm_visual->Kernel[((X)&3) | (((Y)&3)<<2)];	\
261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg   PIXEL = xmesa->xm_visual->RtoPixel[(R)+d]			\
262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         | xmesa->xm_visual->GtoPixel[(G)+d]			\
263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg         | xmesa->xm_visual->BtoPixel[(B)+d];			\
264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg}
265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
268d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * If pixelformat==PF_8A8B8G8R:
270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define PACK_8A8B8G8R( R, G, B, A )	\
272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg	( ((A) << 24) | ((B) << 16) | ((G) << 8) | (R) )
273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
275d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Like PACK_8A8B8G8R() but don't use alpha.  This is usually an acceptable
277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * shortcut.
278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define PACK_8B8G8R( R, G, B )   ( ((B) << 16) | ((G) << 8) | (R) )
280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
283d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * If pixelformat==PF_8R8G8B:
285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define PACK_8R8G8B( R, G, B)	 ( ((R) << 16) | ((G) << 8) | (B) )
287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
289d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * If pixelformat==PF_5R6G5B:
291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define PACK_5R6G5B( R, G, B)	 ( (((R) & 0xf8) << 8) | (((G) & 0xfc) << 3) | ((B) >> 3) )
293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
295d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
29641bddcfa7bbc65bcd2fc60ada9761d3065e71388Brian Paul * If pixelformat==PF_8A8R8G8B:
29741bddcfa7bbc65bcd2fc60ada9761d3065e71388Brian Paul */
29841bddcfa7bbc65bcd2fc60ada9761d3065e71388Brian Paul#define PACK_8A8R8G8B( R, G, B, A )	\
29941bddcfa7bbc65bcd2fc60ada9761d3065e71388Brian Paul	( ((A) << 24) | ((R) << 16) | ((G) << 8) | (B) )
30041bddcfa7bbc65bcd2fc60ada9761d3065e71388Brian Paul
301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
302485f04074151686fa24d40e3eeb83029d3d8c425Keith Whitwell
303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
304d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Converts a GL window Y coord to an X window Y coord:
306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
307e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define YFLIP(XRB, Y)  ((XRB)->bottom - (Y))
308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
310d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
311bc63b226bcc94f109906bccce26d47509f28d177Brian Paul * Return the address of a 2, 3 or 4-byte pixel in the buffer's XImage:
312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * X==0 is left, Y==0 is bottom.
313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
314e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define PIXEL_ADDR2(XRB, X, Y)  \
315e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   ( (XRB)->origin2 - (Y) * (XRB)->width2 + (X) )
316afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
317e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define PIXEL_ADDR3(XRB, X, Y)  \
318e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   ( (bgr_t *) ( (XRB)->origin3 - (Y) * (XRB)->width3 + 3 * (X) ))
319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
320e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul#define PIXEL_ADDR4(XRB, X, Y)  \
321e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul   ( (XRB)->origin4 - (Y) * (XRB)->width4 + (X) )
322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*
326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * External functions:
327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */
328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
329e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern struct xmesa_renderbuffer *
33032c3957991bd0e1df744d866943a8c47b2757c9eBrian Paulxmesa_new_renderbuffer(struct gl_context *ctx, GLuint name,
33132c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul                       const struct xmesa_visual *xmvis,
332692147ebf7f09d56a7de1659de2449478da4d1baBrian Paul                       GLboolean backBuffer);
333e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
334928a70e4354d4884e2918ec67ddc6d8baf942c8aBrianextern void
335928a70e4354d4884e2918ec67ddc6d8baf942c8aBrianxmesa_delete_framebuffer(struct gl_framebuffer *fb);
336928a70e4354d4884e2918ec67ddc6d8baf942c8aBrian
337928a70e4354d4884e2918ec67ddc6d8baf942c8aBrianextern XMesaBuffer
338928a70e4354d4884e2918ec67ddc6d8baf942c8aBrianxmesa_find_buffer(XMesaDisplay *dpy, XMesaColormap cmap, XMesaBuffer notThis);
339928a70e4354d4884e2918ec67ddc6d8baf942c8aBrian
34043ddff4549dbb5459b7a30e3a04e2416023708ddBrian Paulextern unsigned long
341f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergxmesa_color_to_pixel( struct gl_context *ctx,
34218f73b622ffa1d1cebea5556b9ebe53a9adc31acBrian Paul                      GLubyte r, GLubyte g, GLubyte b, GLubyte a,
34343ddff4549dbb5459b7a30e3a04e2416023708ddBrian Paul                      GLuint pixelFormat );
344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
345e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paulextern void
346d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulxmesa_get_window_size(XMesaDisplay *dpy, XMesaBuffer b,
347d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul                      GLuint *width, GLuint *height);
348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
349d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulextern void
350d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulxmesa_check_and_update_buffer_size(XMesaContext xmctx, XMesaBuffer drawBuffer);
351d5e4f29cb9ef5af7214887e84fb31f27fbfe1100Brian Paul
352d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulextern void
353d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulxmesa_init_driver_functions( XMesaVisual xmvisual,
354d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul                             struct dd_function_table *driver );
355d5e4f29cb9ef5af7214887e84fb31f27fbfe1100Brian Paul
356d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulextern void
357f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergxmesa_update_state( struct gl_context *ctx, GLbitfield new_state );
358afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
359e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul
360d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulextern void
36132c3957991bd0e1df744d866943a8c47b2757c9eBrian Paulxmesa_MapRenderbuffer(struct gl_context *ctx,
36232c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul                      struct gl_renderbuffer *rb,
36332c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul                      GLuint x, GLuint y, GLuint w, GLuint h,
36432c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul                      GLbitfield mode,
36532c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul                      GLubyte **mapOut, GLint *rowStrideOut);
36632c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul
36732c3957991bd0e1df744d866943a8c47b2757c9eBrian Paulextern void
36832c3957991bd0e1df744d866943a8c47b2757c9eBrian Paulxmesa_UnmapRenderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb);
36932c3957991bd0e1df744d866943a8c47b2757c9eBrian Paul
37032c3957991bd0e1df744d866943a8c47b2757c9eBrian Paulextern void
371d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulxmesa_destroy_buffers_on_display(XMesaDisplay *dpy);
3726c06ce281aa7a7e20eab1934f573bc5c673d41cbBrian Paul
373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
374444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paul/**
375444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paul * Using a function instead of an ordinary cast is safer.
376444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paul */
377444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paulstatic INLINE struct xmesa_renderbuffer *
378444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paulxmesa_renderbuffer(struct gl_renderbuffer *rb)
379444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paul{
380444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paul   return (struct xmesa_renderbuffer *) rb;
381444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paul}
382444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paul
383444cd293fd69d1848b2c55f75674d563e0582fbaBrian Paul
384d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
385f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg * Return pointer to XMesaContext corresponding to a Mesa struct gl_context.
386d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul * Since we're using structure containment, it's just a cast!.
387d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul */
388d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulstatic INLINE XMesaContext
389f9995b30756140724f41daf963fa06167912be7fKristian HøgsbergXMESA_CONTEXT(struct gl_context *ctx)
390d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul{
391d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul   return (XMesaContext) ctx;
392d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul}
393d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul
394d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul
395d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul/**
39631aca27c08d6a385c595d34fe4ee06390bf5b0e8Kristian Høgsberg * Return pointer to XMesaBuffer corresponding to a Mesa struct gl_framebuffer.
397d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul * Since we're using structure containment, it's just a cast!.
398d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul */
399d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paulstatic INLINE XMesaBuffer
40031aca27c08d6a385c595d34fe4ee06390bf5b0e8Kristian HøgsbergXMESA_BUFFER(struct gl_framebuffer *b)
401d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul{
402d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul   return (XMesaBuffer) b;
403d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul}
404d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul
405d21fa9cd79e4198b673c1453b8bc05749f8a73ebBrian Paul
406ec0585883a85a495d94e24970d64e5d6fc889147Keith Whitwell/* Plugged into the software rasterizer.  Try to use internal
407ec0585883a85a495d94e24970d64e5d6fc889147Keith Whitwell * swrast-style point, line and triangle functions.
408ec0585883a85a495d94e24970d64e5d6fc889147Keith Whitwell */
409f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergextern void xmesa_choose_point( struct gl_context *ctx );
410f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergextern void xmesa_choose_line( struct gl_context *ctx );
411f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergextern void xmesa_choose_triangle( struct gl_context *ctx );
412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
413afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg
414f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergextern void xmesa_register_swrast_functions( struct gl_context *ctx );
41518f73b622ffa1d1cebea5556b9ebe53a9adc31acBrian Paul
41618f73b622ffa1d1cebea5556b9ebe53a9adc31acBrian Paul
417d60009bd6dba15d094b0d0bcb8180b7a2e1c1708George Sapountzis
4181ccef926be46dce3b6b5c76e812e2fae4e205ce7Adam Jackson#if   defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
4190fa8c59e646b214ea61c077f723e8ffe1cc06733Brian Paul#define ENABLE_EXT_timer_query 1 /* should have 64-bit GLuint64EXT */
4204fb995084e1b4b629667f09331adf060aa0fac4cBrian Paul#else
4210fa8c59e646b214ea61c077f723e8ffe1cc06733Brian Paul#define ENABLE_EXT_timer_query 0 /* may not have 64-bit GLuint64EXT */
4224fb995084e1b4b629667f09331adf060aa0fac4cBrian Paul#endif
4233c9faa448ccef15a514a5580fe76838822dd2a9eDaniel Borca
4248126dfa9c24c972794193bf652d6d09a1d01b376Brian Paul
4258126dfa9c24c972794193bf652d6d09a1d01b376Brian Paul#define TEST_META_FUNCS 0
4268126dfa9c24c972794193bf652d6d09a1d01b376Brian Paul
4278126dfa9c24c972794193bf652d6d09a1d01b376Brian Paul
428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif
429