minor extension tweaks
[mesa.git] / src / mesa / drivers / glide / fxdrv.h
1
2 /*
3 * Mesa 3-D graphics library
4 * Version: 3.3
5 *
6 * Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included
16 * in all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 *
25 *
26 * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
27 * terms stated above.
28 *
29 * Thank you for your contribution, David!
30 *
31 * Please make note of the above copyright/license statement. If you
32 * contributed code or bug fixes to this code under the previous (GNU
33 * Library) license and object to the new license, your code will be
34 * removed at your request. Please see the Mesa docs/COPYRIGHT file
35 * for more information.
36 *
37 * Additional Mesa/3Dfx driver developers:
38 * Daryll Strauss <daryll@precisioninsight.com>
39 * Keith Whitwell <keith@precisioninsight.com>
40 *
41 * See fxapi.h for more revision/author details.
42 */
43
44
45 #ifndef FXDRV_H
46 #define FXDRV_H
47
48 /* If you comment out this define, a variable takes its place, letting
49 * you turn debugging on/off from the debugger.
50 */
51
52 #include "glheader.h"
53
54
55 #if defined(__linux__)
56 #include <signal.h>
57 #endif
58
59 #include "context.h"
60 #include "macros.h"
61 #include "matrix.h"
62 #include "mem.h"
63 #include "mtypes.h"
64
65 #include "GL/fxmesa.h"
66 #include "fxglidew.h"
67
68 #include "math/m_vector.h"
69
70
71 /* Define some shorter names for these things.
72 */
73 #define XCOORD GR_VERTEX_X_OFFSET
74 #define YCOORD GR_VERTEX_Y_OFFSET
75 #define ZCOORD GR_VERTEX_OOZ_OFFSET
76 #define OOWCOORD GR_VERTEX_OOW_OFFSET
77
78 #define RCOORD GR_VERTEX_R_OFFSET
79 #define GCOORD GR_VERTEX_G_OFFSET
80 #define BCOORD GR_VERTEX_B_OFFSET
81 #define ACOORD GR_VERTEX_A_OFFSET
82
83 #define S0COORD GR_VERTEX_SOW_TMU0_OFFSET
84 #define T0COORD GR_VERTEX_TOW_TMU0_OFFSET
85 #define S1COORD GR_VERTEX_SOW_TMU1_OFFSET
86 #define T1COORD GR_VERTEX_TOW_TMU1_OFFSET
87
88
89 extern float gl_ubyte_to_float_255_color_tab[256];
90 #define UBYTE_COLOR_TO_FLOAT_255_COLOR(c) gl_ubyte_to_float_255_color_tab[c]
91 #define UBYTE_COLOR_TO_FLOAT_255_COLOR2(f,c) \
92 (*(int *)&(f)) = ((int *)gl_ubyte_to_float_255_color_tab)[c]
93
94
95
96
97 /* Should have size == 16 * sizeof(float).
98 */
99 typedef union {
100 GrVertex v;
101 GLfloat f[16];
102 GLuint ui[16];
103 } fxVertex;
104
105 /* Used in the fxvtxfmt t&l engine.
106 */
107 typedef struct {
108 GrVertex v;
109 GLfloat clip[4];
110 GLfloat texcoord[2][2];
111 GLubyte mask;
112 GLfloat normal[3]; /* for replay & fallback */
113 } fxClipVertex;
114
115
116
117 typedef void (*vfmt_project_func)( GLcontext *ctx, fxClipVertex *v );
118 typedef void (*vfmt_interpolate_func)( GLfloat t,
119 fxClipVertex *O,
120 const fxClipVertex *I,
121 const fxClipVertex *J );
122
123
124
125 #if defined(FXMESA_USE_ARGB)
126 #define FXCOLOR4( c ) ( \
127 ( ((unsigned int)(c[3]))<<24 ) | \
128 ( ((unsigned int)(c[0]))<<16 ) | \
129 ( ((unsigned int)(c[1]))<<8 ) | \
130 ( (unsigned int)(c[2])) )
131
132 #else
133 #ifdef __i386__
134 #define FXCOLOR4( c ) (* (int *)c)
135 #else
136 #define FXCOLOR4( c ) ( \
137 ( ((unsigned int)(c[3]))<<24 ) | \
138 ( ((unsigned int)(c[2]))<<16 ) | \
139 ( ((unsigned int)(c[1]))<<8 ) | \
140 ( (unsigned int)(c[0])) )
141 #endif
142 #endif
143
144
145
146 /* fastpath/vtxfmt flags first
147 */
148 #define SETUP_TMU0 0x1
149 #define SETUP_TMU1 0x2
150 #define SETUP_RGBA 0x4
151 #define SETUP_SNAP 0x8
152 #define SETUP_XYZW 0x10
153 #define MAX_SETUP 0x20
154
155
156 #define FX_NUM_TMU 2
157
158 #define FX_TMU0 GR_TMU0
159 #define FX_TMU1 GR_TMU1
160 #define FX_TMU_SPLIT 98
161 #define FX_TMU_BOTH 99
162 #define FX_TMU_NONE 100
163
164 /* Used for fxMesa->lastUnitsMode */
165
166 #define FX_UM_NONE 0x00000000
167
168 #define FX_UM_E0_REPLACE 0x00000001
169 #define FX_UM_E0_MODULATE 0x00000002
170 #define FX_UM_E0_DECAL 0x00000004
171 #define FX_UM_E0_BLEND 0x00000008
172 #define FX_UM_E0_ADD 0x00000010
173
174 #define FX_UM_E1_REPLACE 0x00000020
175 #define FX_UM_E1_MODULATE 0x00000040
176 #define FX_UM_E1_DECAL 0x00000080
177 #define FX_UM_E1_BLEND 0x00000100
178 #define FX_UM_E1_ADD 0x00000200
179
180 #define FX_UM_E_ENVMODE 0x000003ff
181
182 #define FX_UM_E0_ALPHA 0x00001000
183 #define FX_UM_E0_LUMINANCE 0x00002000
184 #define FX_UM_E0_LUMINANCE_ALPHA 0x00004000
185 #define FX_UM_E0_INTENSITY 0x00008000
186 #define FX_UM_E0_RGB 0x00010000
187 #define FX_UM_E0_RGBA 0x00020000
188
189 #define FX_UM_E1_ALPHA 0x00040000
190 #define FX_UM_E1_LUMINANCE 0x00080000
191 #define FX_UM_E1_LUMINANCE_ALPHA 0x00100000
192 #define FX_UM_E1_INTENSITY 0x00200000
193 #define FX_UM_E1_RGB 0x00400000
194 #define FX_UM_E1_RGBA 0x00800000
195
196 #define FX_UM_E_IFMT 0x00fff000
197
198 #define FX_UM_COLOR_ITERATED 0x01000000
199 #define FX_UM_COLOR_CONSTANT 0x02000000
200 #define FX_UM_ALPHA_ITERATED 0x04000000
201 #define FX_UM_ALPHA_CONSTANT 0x08000000
202
203
204 /*
205 Memory range from startAddr to endAddr-1
206 */
207 typedef struct MemRange_t {
208 struct MemRange_t *next;
209 FxU32 startAddr, endAddr;
210 } MemRange;
211
212 typedef struct {
213 GLsizei width, height; /* image size */
214 GLint wScale, hScale; /* image scale factor */
215 GrTextureFormat_t glideFormat; /* Glide image format */
216 } tfxMipMapLevel;
217
218 /*
219 * TDFX-specific texture object data. This hangs off of the
220 * struct gl_texture_object DriverData pointer.
221 */
222 typedef struct tfxTexInfo_t {
223 struct tfxTexInfo *next;
224 struct gl_texture_object *tObj;
225
226 GLuint lastTimeUsed;
227 FxU32 whichTMU;
228 GLboolean isInTM;
229
230 MemRange *tm[FX_NUM_TMU];
231
232 GLint minLevel, maxLevel;
233 GLint baseLevelInternalFormat;
234
235 GrTexInfo info;
236
237 GrTextureFilterMode_t minFilt;
238 GrTextureFilterMode_t maxFilt;
239 FxBool LODblend;
240
241 GrTextureClampMode_t sClamp;
242 GrTextureClampMode_t tClamp;
243
244 GrMipMapMode_t mmMode;
245
246 GLfloat sScale, tScale;
247 GLint int_sScale, int_tScale; /* x86 floating point trick for
248 * multiplication by powers of 2.
249 * Used in fxfasttmp.h
250 */
251
252 GuTexPalette palette;
253
254 GLboolean fixedPalette;
255 GLboolean validated;
256 } tfxTexInfo;
257
258 typedef struct {
259 GLuint swapBuffer;
260 GLuint reqTexUpload;
261 GLuint texUpload;
262 GLuint memTexUpload;
263 } tfxStats;
264
265
266
267 typedef struct {
268 /* Alpha test */
269
270 GLboolean alphaTestEnabled;
271 GrCmpFnc_t alphaTestFunc;
272 GrAlpha_t alphaTestRefValue;
273
274 /* Blend function */
275
276 GLboolean blendEnabled;
277 GrAlphaBlendFnc_t blendSrcFuncRGB;
278 GrAlphaBlendFnc_t blendDstFuncRGB;
279 GrAlphaBlendFnc_t blendSrcFuncAlpha;
280 GrAlphaBlendFnc_t blendDstFuncAlpha;
281
282 /* Depth test */
283
284 GLboolean depthTestEnabled;
285 GLboolean depthMask;
286 GrCmpFnc_t depthTestFunc;
287 } tfxUnitsState;
288
289
290
291
292 /* Flags for fxMesa->new_state
293 */
294 #define FX_NEW_TEXTURING 0x1
295 #define FX_NEW_BLEND 0x2
296 #define FX_NEW_ALPHA 0x4
297 #define FX_NEW_DEPTH 0x8
298 #define FX_NEW_FOG 0x10
299 #define FX_NEW_SCISSOR 0x20
300 #define FX_NEW_COLOR_MASK 0x40
301 #define FX_NEW_CULL 0x80
302
303
304 #define FX_CONTEXT(ctx) ((fxMesaContext)((ctx)->DriverCtx))
305
306 #define FX_TEXTURE_DATA(texUnit) fxTMGetTexInfo((texUnit)->_Current)
307
308 #define fxTMGetTexInfo(o) ((tfxTexInfo*)((o)->DriverData))
309
310 #define FX_MIPMAP_DATA(img) ((tfxMipMapLevel *) (img)->DriverData)
311
312 #define BEGIN_BOARD_LOCK()
313 #define END_BOARD_LOCK()
314 #define BEGIN_CLIP_LOOP()
315 #define END_CLIP_LOOP()
316
317
318
319
320 /* Covers the state referenced by IsInHardware:
321 */
322 #define _FX_NEW_IS_IN_HARDWARE (_NEW_TEXTURE| \
323 _NEW_HINT| \
324 _NEW_STENCIL| \
325 _NEW_BUFFERS| \
326 _NEW_COLOR| \
327 _NEW_LIGHT)
328
329 /* Covers the state referenced by fxDDChooseRenderState
330 */
331 #define _FX_NEW_RENDERSTATE (_FX_NEW_IS_IN_HARDWARE | \
332 _DD_NEW_FLATSHADE | \
333 _DD_NEW_TRI_LIGHT_TWOSIDE| \
334 _DD_NEW_TRI_OFFSET | \
335 _DD_NEW_TRI_UNFILLED | \
336 _DD_NEW_TRI_SMOOTH | \
337 _DD_NEW_TRI_STIPPLE | \
338 _DD_NEW_LINE_SMOOTH | \
339 _DD_NEW_LINE_STIPPLE | \
340 _DD_NEW_LINE_WIDTH | \
341 _DD_NEW_POINT_SMOOTH | \
342 _DD_NEW_POINT_SIZE | \
343 _NEW_LINE)
344
345 /* Covers the state referenced by fxDDChooseSetupFunction.
346 */
347 #define _FX_NEW_SETUP_FUNCTION (_NEW_LIGHT| \
348 _NEW_FOG| \
349 _NEW_TEXTURE| \
350 _NEW_COLOR) \
351
352
353 /* Covers the state referenced in fxDDCheckVtxfmt.
354 */
355 #define _FX_NEW_VTXFMT (_NEW_TEXTURE | \
356 _NEW_TEXTURE_MATRIX | \
357 _NEW_TRANSFORM | \
358 _NEW_LIGHT | \
359 _NEW_PROJECTION | \
360 _NEW_MODELVIEW | \
361 _TNL_NEW_NEED_EYE_COORDS | \
362 _FX_NEW_RENDERSTATE)
363
364
365 /* These lookup table are used to extract RGB values in [0,255] from
366 * 16-bit pixel values.
367 */
368 extern GLubyte FX_PixelToR[0x10000];
369 extern GLubyte FX_PixelToG[0x10000];
370 extern GLubyte FX_PixelToB[0x10000];
371
372
373 typedef void (*fx_tri_func)( GLcontext *, const fxVertex *,
374 const fxVertex *, const fxVertex * );
375 typedef void (*fx_line_func)( GLcontext *, const fxVertex *, const fxVertex * );
376 typedef void (*fx_point_func)( GLcontext *, const fxVertex * );
377
378 struct tfxMesaContext {
379 GuTexPalette glbPalette;
380
381 GLcontext *glCtx; /* the core Mesa context */
382 GLvisual *glVis; /* describes the color buffer */
383 GLframebuffer *glBuffer; /* the ancillary buffers */
384
385 GLint board; /* the board used for this context */
386 GLint width, height; /* size of color buffer */
387
388 GrBuffer_t currentFB;
389
390 GLboolean bgrOrder;
391 GrColor_t color;
392 GrColor_t clearC;
393 GrAlpha_t clearA;
394 GLuint constColor;
395 GrCullMode_t cullMode;
396
397 tfxUnitsState unitsState;
398 tfxUnitsState restoreUnitsState; /* saved during multipass */
399
400
401 GLuint new_state;
402
403 /* Texture Memory Manager Data
404 */
405 GLuint texBindNumber;
406 GLint tmuSrc;
407 GLuint lastUnitsMode;
408 GLuint freeTexMem[FX_NUM_TMU];
409 MemRange *tmPool;
410 MemRange *tmFree[FX_NUM_TMU];
411
412 GLenum fogTableMode;
413 GLfloat fogDensity;
414 GLfloat fogStart, fogEnd;
415 GrFog_t *fogTable;
416 GLint textureAlign;
417
418 /* Vertex building and storage:
419 */
420 GLuint tmu_source[FX_NUM_TMU];
421 GLuint tex_dest[MAX_TEXTURE_UNITS];
422 GLuint setupindex;
423 GLuint setup_gone; /* for multipass */
424 GLuint stw_hint_state; /* for grHints */
425 fxVertex *verts;
426
427
428 /* Rasterization:
429 */
430 GLuint render_index;
431 GLuint passes, multipass;
432 GLuint is_in_hardware;
433 GLenum render_prim;
434
435 /* Current rasterization functions
436 */
437 fx_point_func draw_point;
438 fx_line_func draw_line;
439 fx_tri_func draw_tri;
440
441 /* System to turn culling on/off for tris/lines/points.
442 */
443 fx_point_func initial_point;
444 fx_line_func initial_line;
445 fx_tri_func initial_tri;
446
447 fx_point_func subsequent_point;
448 fx_line_func subsequent_line;
449 fx_tri_func subsequent_tri;
450
451 /* Keep texture scales somewhere handy:
452 */
453 GLfloat s0scale;
454 GLfloat s1scale;
455 GLfloat t0scale;
456 GLfloat t1scale;
457
458 GLfloat inv_s0scale;
459 GLfloat inv_s1scale;
460 GLfloat inv_t0scale;
461 GLfloat inv_t1scale;
462
463 /* Glide stuff
464 */
465 tfxStats stats;
466 void *state;
467
468 /* Options */
469
470 GLboolean verbose;
471 GLboolean haveTwoTMUs; /* True if we really have 2 tmu's */
472 GLboolean emulateTwoTMUs; /* True if we present 2 tmu's to mesa. */
473 GLboolean haveAlphaBuffer;
474 GLboolean haveZBuffer;
475 GLboolean haveDoubleBuffer;
476 GLboolean haveGlobalPaletteTexture;
477 GLint swapInterval;
478 GLint maxPendingSwapBuffers;
479
480 FX_GrContext_t glideContext;
481
482 int screen_width;
483 int screen_height;
484 int initDone;
485 int clipMinX;
486 int clipMaxX;
487 int clipMinY;
488 int clipMaxY;
489
490 /* fxvtxfmt
491 */
492 GLboolean allow_vfmt;
493 GLvertexformat vtxfmt;
494 fxClipVertex current;
495 fxClipVertex *vert; /* points into verts[] */
496 void (*fire_on_vertex)( GLcontext * );
497 void (*fire_on_end)( GLcontext * );
498 void (*fire_on_fallback)( GLcontext * );
499
500 vfmt_project_func project_vertex;
501 vfmt_interpolate_func interpolate_vertices;
502
503 int vtxfmt_fallback_count;
504 int vtxfmt_installed;
505 void (*old_begin)( GLenum );
506 GLenum prim;
507
508 GLuint accel_light;
509 GLfloat basecolor[4];
510
511
512 /* Projected vertices, fastpath data:
513 */
514 GLvector1ui clipped_elements;
515 fxVertex *last_vert;
516 GLuint size;
517 };
518
519 typedef void (*tfxSetupFunc)(GLcontext *ctx, GLuint, GLuint );
520
521 extern GrHwConfiguration glbHWConfig;
522 extern int glbCurrentBoard;
523
524 extern void fxSetupFXUnits(GLcontext *);
525 extern void fxSetupDDPointers(GLcontext *);
526
527 /* fxvsetup:
528 */
529 extern void fxDDSetupInit(void);
530 extern void fxAllocVB( GLcontext *ctx );
531 extern void fxFreeVB( GLcontext *ctx );
532 extern void fxPrintSetupFlags( const char *msg, GLuint flags );
533 extern void fx_BuildProjVerts( GLcontext *ctx,
534 GLuint start, GLuint count,
535 GLuint newinputs );
536 extern void fx_validate_BuildProjVerts(GLcontext *ctx,
537 GLuint start, GLuint count,
538 GLuint newinputs );
539
540 /* fxtrifuncs:
541 */
542 extern void fxDDTrifuncInit(void);
543 extern void fxDDChooseRenderState( GLcontext *ctx );
544
545
546 extern void fxUpdateDDSpanPointers(GLcontext *);
547 extern void fxSetupDDSpanPointers(GLcontext *);
548
549 extern void fxPrintTextureData(tfxTexInfo *ti);
550 extern void fxDDTexImage2D(GLcontext *ctx, GLenum target, GLint level,
551 GLint internalFormat, GLint width, GLint height, GLint border,
552 GLenum format, GLenum type, const GLvoid *pixels,
553 const struct gl_pixelstore_attrib *packing,
554 struct gl_texture_object *texObj,
555 struct gl_texture_image *texImage);
556
557 extern void fxDDTexSubImage2D(GLcontext *ctx, GLenum target, GLint level,
558 GLint xoffset, GLint yoffset,
559 GLsizei width, GLsizei height,
560 GLenum format, GLenum type, const GLvoid *pixels,
561 const struct gl_pixelstore_attrib *packing,
562 struct gl_texture_object *texObj,
563 struct gl_texture_image *texImage);
564 extern void fxDDTexEnv(GLcontext *, GLenum, GLenum, const GLfloat *);
565 extern void fxDDTexParam(GLcontext *, GLenum, struct gl_texture_object *,
566 GLenum, const GLfloat *);
567 extern void fxDDTexBind(GLcontext *, GLenum, struct gl_texture_object *);
568 extern void fxDDTexDel(GLcontext *, struct gl_texture_object *);
569 extern void fxDDTexPalette(GLcontext *, struct gl_texture_object *);
570 extern void fxDDTexUseGlbPalette(GLcontext *, GLboolean);
571
572 extern void fxDDEnable(GLcontext *, GLenum, GLboolean);
573 extern void fxDDAlphaFunc(GLcontext *, GLenum, GLclampf);
574 extern void fxDDBlendFunc(GLcontext *, GLenum, GLenum);
575 extern void fxDDDepthMask(GLcontext *, GLboolean);
576 extern void fxDDDepthFunc(GLcontext *, GLenum);
577
578 extern void fxDDInitExtensions( GLcontext *ctx );
579
580 extern void fxTMInit(fxMesaContext ctx);
581 extern void fxTMClose(fxMesaContext ctx);
582 extern void fxTMRestoreTextures_NoLock(fxMesaContext ctx);
583 extern void fxTMMoveInTM(fxMesaContext, struct gl_texture_object *, GLint);
584 extern void fxTMMoveOutTM(fxMesaContext, struct gl_texture_object *);
585 #define fxTMMoveOutTM_NoLock fxTMMoveOutTM
586 extern void fxTMFreeTexture(fxMesaContext, struct gl_texture_object *);
587 extern void fxTMReloadMipMapLevel(fxMesaContext, struct gl_texture_object *, GLint);
588 extern void fxTMReloadSubMipMapLevel(fxMesaContext, struct gl_texture_object *,
589 GLint, GLint, GLint);
590
591 extern void fxTexGetFormat(GLenum, GrTextureFormat_t *, GLint *);
592 extern int fxTexGetInfo(int, int, GrLOD_t *, GrAspectRatio_t *,
593 float *, float *, int *, int *, int *, int *);
594
595 extern void fxDDScissor( GLcontext *ctx,
596 GLint x, GLint y, GLsizei w, GLsizei h );
597 extern void fxDDFogfv( GLcontext *ctx, GLenum pname, const GLfloat *params );
598 extern void fxDDColorMask(GLcontext *ctx,
599 GLboolean r, GLboolean g,
600 GLboolean b, GLboolean a );
601
602 extern void fxDDWriteDepthSpan(GLcontext *ctx, GLuint n, GLint x, GLint y,
603 const GLdepth depth[], const GLubyte mask[]);
604
605 extern void fxDDReadDepthSpan(GLcontext *ctx, GLuint n, GLint x, GLint y,
606 GLdepth depth[]);
607
608 extern void fxDDWriteDepthPixels(GLcontext *ctx, GLuint n,
609 const GLint x[], const GLint y[],
610 const GLdepth depth[], const GLubyte mask[]);
611
612 extern void fxDDReadDepthPixels(GLcontext *ctx, GLuint n,
613 const GLint x[], const GLint y[],
614 GLdepth depth[]);
615
616 extern void fxDDShadeModel(GLcontext *ctx, GLenum mode);
617
618 extern void fxDDCullFace(GLcontext *ctx, GLenum mode);
619 extern void fxDDFrontFace(GLcontext *ctx, GLenum mode);
620
621 extern void fxPrintRenderState( const char *msg, GLuint state );
622 extern void fxPrintHintState( const char *msg, GLuint state );
623
624 extern int fxDDInitFxMesaContext( fxMesaContext fxMesa );
625 extern void fxDDDestroyFxMesaContext( fxMesaContext fxMesa );
626
627
628
629
630 extern void fxSetScissorValues(GLcontext *ctx);
631 extern void fxTMMoveInTM_NoLock(fxMesaContext fxMesa,
632 struct gl_texture_object *tObj,
633 GLint where);
634 extern void fxInitPixelTables(fxMesaContext fxMesa, GLboolean bgrOrder);
635
636
637 /* fxvtxfmt:
638 */
639 extern void fxDDCheckVtxfmt( GLcontext *ctx );
640 extern void fx_update_lighting( GLcontext *ctx );
641 extern void fxDDInitVtxfmt( GLcontext *ctx );
642
643 /* fxsimplerender
644 */
645 extern const struct gl_pipeline_stage fx_render_stage;
646
647 #endif