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