runtime selectable depth buffer depth
[mesa.git] / src / mesa / drivers / glide / fxglidew.h
index 17f395686c4ae53f76dfbfc67cfdab627a2fb9f7..614949f71f79b363c56fda6ef0a04e83771b7f3a 100644 (file)
@@ -1,26 +1,48 @@
+/* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */
+
 /*
  * Mesa 3-D graphics library
- * Version:  3.1
- * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
- * 
+ * Version:  3.3
+ *
+ * Copyright (C) 1999-2000  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.
+ *
+ *
+ * Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
+ * terms stated above.
+ *
+ * Thank you for your contribution, David!
+ *
+ * Please make note of the above copyright/license statement.  If you
+ * contributed code or bug fixes to this code under the previous (GNU
+ * Library) license and object to the new license, your code will be
+ * removed at your request.  Please see the Mesa docs/COPYRIGHT file
+ * for more information.
+ *
+ * Additional Mesa/3Dfx driver developers:
+ *   Daryll Strauss <daryll@precisioninsight.com>
+ *   Keith Whitwell <keith@precisioninsight.com>
+ *
+ * See fxapi.h for more revision/author details.
  */
+
+
 #ifndef __FX_GLIDE_WARPER__
 #define __FX_GLIDE_WARPER__
 
@@ -55,6 +77,7 @@
  * Genral warper functions for Glide2/Glide3:
  */ 
 extern FxI32 FX_grGetInteger(FxU32 pname);
+extern FxI32 FX_grGetInteger_NoLock(FxU32 pname);
 
 /*
  * Glide2 emulation on Glide3:
@@ -155,31 +178,76 @@ typedef struct {
   float  oow;                   /* 1/w (used mipmapping - really 0xfff/w) */
 }  GrTmuVertex;
 
+
+#if FX_USE_PARGB
+
 typedef struct
 {
   float x, y;         /* X and Y in screen space */
   float ooz;          /* 65535/Z (used for Z-buffering) */
   float oow;          /* 1/W (used for W-buffering, texturing) */
-  float r, g, b, a;   /* R, G, B, A [0..255.0] */
+  FxU32 argb;         /* R, G, B, A [0..255.0] */
+  GrTmuVertex         tmuvtx[GLIDE_NUM_TMU];
   float z;            /* Z is ignored */
-  GrTmuVertex  tmuvtx[GLIDE_NUM_TMU];
 } GrVertex;
 
 #define GR_VERTEX_X_OFFSET              0
 #define GR_VERTEX_Y_OFFSET              1
 #define GR_VERTEX_OOZ_OFFSET            2
 #define GR_VERTEX_OOW_OFFSET            3
-#define GR_VERTEX_R_OFFSET              4
-#define GR_VERTEX_G_OFFSET              5
-#define GR_VERTEX_B_OFFSET              6
+#define GR_VERTEX_PARGB_OFFSET          4
+#define GR_VERTEX_SOW_TMU0_OFFSET       5
+#define GR_VERTEX_TOW_TMU0_OFFSET       6
+#define GR_VERTEX_OOW_TMU0_OFFSET       7
+#define GR_VERTEX_SOW_TMU1_OFFSET       8
+#define GR_VERTEX_TOW_TMU1_OFFSET       9
+#define GR_VERTEX_OOW_TMU1_OFFSET       10
+#define GR_VERTEX_Z_OFFSET             11
+
+#define GET_PARGB(v)   ((FxU32*)(v))[GR_VERTEX_PARGB_OFFSET]
+/* GET_PA: returns the alpha component */
+#if GLIDE_ENDIAN == GLIDE_ENDIAN_BIG
+   #define GET_PA(v)           ((FxU8*)(v))[GR_VERTEX_PARGB_OFFSET*4]
+#else 
+   #define GET_PA(v)           ((FxU8*)(v))[GR_VERTEX_PARGB_OFFSET*4+3]
+#endif 
+#define MESACOLOR2PARGB(c)     (c[ACOMP] << 24 | c[GCOMP] << 16 | c[GCOMP] << 8 | c[BCOMP])
+#define PACK_4F_ARGB(dest,a,r,g,b) {                                                           \
+                                            const GLuint cr = (int)r;                          \
+                                            const GLuint cg = (int)g;                          \
+                                            const GLuint ca = (int)a;                          \
+                                            const GLuint cb = (int)b;                          \
+                                            dest = ca << 24 | cr << 16 | cg << 8 | cb;         \
+                                       }
+
+#else /* FX_USE_PARGB */
+
+typedef struct
+{
+  float x, y, z;                /* X, Y, and Z of scrn space -- Z is ignored */
+  float r, g, b;                /* R, G, B, ([0..255.0]) */
+  float ooz;                    /* 65535/Z (used for Z-buffering) */
+  float a;                      /* Alpha [0..255.0] */
+  float oow;                    /* 1/W (used for W-buffering, texturing) */
+  GrTmuVertex  tmuvtx[GLIDE_NUM_TMU];
+} GrVertex;
+
+#define GR_VERTEX_X_OFFSET              0
+#define GR_VERTEX_Y_OFFSET              1
+#define GR_VERTEX_Z_OFFSET              2
+#define GR_VERTEX_R_OFFSET              3
+#define GR_VERTEX_G_OFFSET              4
+#define GR_VERTEX_B_OFFSET              5
+#define GR_VERTEX_OOZ_OFFSET            6
 #define GR_VERTEX_A_OFFSET              7
-#define GR_VERTEX_Z_OFFSET              8
+#define GR_VERTEX_OOW_OFFSET            8
 #define GR_VERTEX_SOW_TMU0_OFFSET       9
 #define GR_VERTEX_TOW_TMU0_OFFSET       10
 #define GR_VERTEX_OOW_TMU0_OFFSET       11
 #define GR_VERTEX_SOW_TMU1_OFFSET       12
 #define GR_VERTEX_TOW_TMU1_OFFSET       13
 #define GR_VERTEX_OOW_TMU1_OFFSET       14
+#endif /* FX_USE_PARGB */
 
 #endif
 
@@ -188,29 +256,89 @@ typedef struct
  * Glide2 functions for Glide3
  */
 #if defined(FX_GLIDE3)
-#define FX_grTexDownloadTable(TMU,type,data)           grTexDownloadTable(type,data)
+#define FX_grTexDownloadTable(TMU,type,data)   \
+  do {                                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grTexDownloadTable(type,data);             \
+    END_BOARD_LOCK();                          \
+  } while (0);
+#define FX_grTexDownloadTable_NoLock(TMU,type,data) \
+  grTexDownloadTable(type, data)
 #else
-#define FX_grTexDownloadTable(TMU,type,data)           grTexDownloadTable(TMU,type,data)
+#define FX_grTexDownloadTable(TMU,type,data)   \
+  do {                                         \
+    BEGIN_BOARD_LOCK();                                \
+    grTexDownloadTable(TMU,type,data);         \
+    END_BOARD_LOCK();                          \
+  } while (0);
+#define FX_grTexDownloadTable_NoLock grTexDownloadTable
 #endif
 
 /*
  * Flush
  */
 #if defined(FX_GLIDE3)
-#define FX_grFlush             grFlush
+#define FX_grFlush()   \
+  do {                 \
+    BEGIN_BOARD_LOCK(); \
+    grFlush();         \
+    END_BOARD_LOCK();  \
+  } while (0)
 #else
-#define FX_grFlush             grSstIdle
+#define FX_grFlush()   \
+  do {                 \
+    BEGIN_BOARD_LOCK(); \
+    grSstIdle();       \
+    END_BOARD_LOCK();  \
+  } while (0)
 #endif 
+
+#define FX_grFinish()  \
+  do {                 \
+    BEGIN_BOARD_LOCK(); \
+    grFinish();                \
+    END_BOARD_LOCK();  \
+  } while (0)
+
 /*
  * Write region: ToDo possible exploit the PixelPipe parameter.
  */
 #if defined(FX_GLIDE3)
-#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)        \
-       grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,FXFALSE,src_stride,src_data)
+#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)                \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,FXFALSE,src_stride,src_data);      \
+    END_BOARD_LOCK();          \
+  } while(0)
 #else
-#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)        \
-       grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)
+#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)                \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data);              \
+    END_BOARD_LOCK();          \
+  } while (0)
 #endif
+
+/*
+ * Read region
+ */
+#define FX_grLfbReadRegion(src_buffer,src_x,src_y,src_width,src_height,dst_stride,dst_data)                    \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grLfbReadRegion(src_buffer,src_x,src_y,src_width,src_height,dst_stride,dst_data);                          \
+    END_BOARD_LOCK();          \
+  } while (0);
+
+/*
+ * Draw triangle
+ */
+#define FX_grDrawTriangle(a,b,c)       \
+  do {                                 \
+    BEGIN_CLIP_LOOP();                 \
+    grDrawTriangle(a,b,c);             \
+    END_CLIP_LOOP();                   \
+  } while (0)
+
 /*
  * For Lod/LodLog2 conversion.
  */
@@ -243,12 +371,14 @@ typedef struct
 #else
        #define FX_largeLodValue(info)          ((int)(info).largeLod)
 #endif
+#define FX_largeLodValue_NoLock FX_largeLodValue
 
 #if defined(FX_GLIDE3)
        #define FX_smallLodValue(info)          ((int)(GR_LOD_256-(info).smallLodLog2))
 #else
        #define FX_smallLodValue(info)          ((int)(info).smallLod)
 #endif
+#define FX_smallLodValue_NoLock FX_smallLodValue
 
 #if defined(FX_GLIDE3)
        #define FX_valueToLod(val)              ((GrLOD_t)(GR_LOD_256-val))
@@ -259,13 +389,9 @@ typedef struct
 /*
  * ScreenWidth/Height stuff.
  */
-#if defined(FX_GLIDE3)
-       extern int FX_grSstScreenWidth();
-       extern int FX_grSstScreenHeight();
-#else
-       #define FX_grSstScreenWidth()           grSstScreenWidth()
-       #define FX_grSstScreenHeight()          grSstScreenHeight()
-#endif
+       extern int FX_grSstScreenWidth(void);
+       extern int FX_grSstScreenHeight(void);
+
 
 
 /*
@@ -274,7 +400,12 @@ typedef struct
 #if defined(FX_GLIDE3)
        extern void FX_grGlideGetVersion(char *buf);
 #else
-       #define FX_grGlideGetVersion            grGlideGetVersion       
+       #define FX_grGlideGetVersion(b) \
+       do {                            \
+         BEGIN_BOARD_LOCK();           \
+         grGlideGetVersion(b);         \
+         END_BOARD_LOCK();             \
+       } while (0)
 #endif
 /*
  * Performance statistics
@@ -282,25 +413,33 @@ typedef struct
 #if defined(FX_GLIDE3)
         extern void FX_grSstPerfStats(GrSstPerfStats_t *st);
 #else
-       #define FX_grSstPerfStats               grSstPerfStats
+       #define FX_grSstPerfStats(s)    \
+       do {                            \
+         BEGIN_BOARD_LOCK();           \
+         grSstPerfStats(s);            \
+         END_BOARD_LOCK();             \
+       } while (0)
 #endif
 
 /*
  * Hardware Query
  */
-#if defined(FX_GLIDE3)
        extern int FX_grSstQueryHardware(GrHwConfiguration *config);
-#else
-       #define FX_grSstQueryHardware           grSstQueryHardware              
-#endif
 
 /*
  * GrHints
  */
 #if defined(FX_GLIDE3)
+        extern void FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask);
        extern void FX_grHints(GrHint_t hintType, FxU32 hintMask);
 #else
-       #define FX_grHints                      grHints
+       #define FX_grHints(t,m)         \
+       do {                            \
+         BEGIN_BOARD_LOCK();           \
+         grHints(t, m);                \
+         END_BOARD_LOCK();             \
+       } while(0)
+        #define FX_grHints_NoLock grHints
 #endif
 /*
  * Antialiashed line+point drawing.
@@ -308,13 +447,23 @@ typedef struct
 #if defined(FX_GLIDE3)
        extern void FX_grAADrawLine(GrVertex *a,GrVertex *b);
 #else
-       #define FX_grAADrawLine                 grAADrawLine
+       #define FX_grAADrawLine(a,b)    \
+       do {                            \
+         BEGIN_CLIP_LOOP();            \
+         grAADrawLine(a,b);            \
+         END_CLIP_LOOP();              \
+       } while (0)
 #endif
 
 #if defined(FX_GLIDE3)
        extern void FX_grAADrawPoint(GrVertex *a);
 #else
-       #define FX_grAADrawPoint                grAADrawPoint
+       #define FX_grAADrawPoint(a)     \
+       do {                            \
+         BEGIN_CLIP_LOOP();            \
+         grAADrawPoint(a);             \
+         END_CLIP_LOOP();              \
+       } while (0)
 #endif
 
 /*
@@ -328,31 +477,358 @@ typedef struct
 /*
  * grSstControl stuff
  */
-#if defined(FX_GLIDE3)
-       extern void FX_grSstControl(int par);
-#else
-       #define FX_grSstControl                         grSstControl
-#endif
+extern FxBool FX_grSstControl(FxU32 code);
+
 /*
  * grGammaCorrectionValue
  */
 #if defined(FX_GLIDE3)
       extern void FX_grGammaCorrectionValue(float val);
 #else
-      #define FX_grGammaCorrectionValue                        grGammaCorrectionValue
+      #define FX_grGammaCorrectionValue(v)     \
+      do {                                     \
+        BEGIN_BOARD_LOCK();                    \
+       grGammaCorrectionValue(v)               \
+        END_BOARD_LOCK();                      \
+      } while (0)
 #endif
 
-/*
- * WinOpen/Close.
- */
 #if defined(FX_GLIDE3)
-       #define FX_grSstWinOpen(hWnd,screen_resolution,refresh_rate,color_format,origin_location,nColBuffers,nAuxBuffers) \
-                 grSstWinOpen(-1,screen_resolution,refresh_rate,color_format,origin_location,nColBuffers,nAuxBuffers)
-       #define FX_grSstWinClose                grSstWinClose
+#define FX_grSstWinClose(w)    \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                \
+    grSstWinClose(w);          \
+    END_BOARD_LOCK();          \
+  } while (0)
 #else
-       #define FX_grSstWinOpen         grSstWinOpen
-       #define FX_grSstWinClose(win)   grSstWinClose()
+#define FX_grSstWinClose(w)    \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                \
+    grSstWinClose();           \
+    END_BOARD_LOCK();          \
+  } while (0)
 #endif
 
 
+extern FX_GrContext_t FX_grSstWinOpen( FxU32                hWnd,
+                                       GrScreenResolution_t screen_resolution,
+                                       GrScreenRefresh_t    refresh_rate,
+                                       GrColorFormat_t      color_format,
+                                       GrOriginLocation_t   origin_location,
+                                       int                  nColBuffers,
+                                       int                  nAuxBuffers);
+
+
+#define FX_grDrawLine(v1, v2)  \
+  do {                         \
+    BEGIN_CLIP_LOOP();         \
+    grDrawLine(v1, v2);                \
+    END_CLIP_LOOP();           \
+  } while (0)
+
+#define FX_grDrawPoint(p)      \
+  do {                         \
+    BEGIN_CLIP_LOOP();         \
+    grDrawPoint(p);            \
+    END_CLIP_LOOP();           \
+  } while (0)
+
+#if defined(FX_GLIDE3)
+extern void FX_grDrawPolygonVertexList(int n, GrVertex *v);
+#else
+#define FX_grDrawPolygonVertexList(n, v)       \
+  do {                                         \
+    BEGIN_CLIP_LOOP();                         \
+    grDrawPolygonVertexList(n, v);             \
+    END_CLIP_LOOP();                           \
+  } while (0)
+#endif
+
+#define FX_grDitherMode(m)     \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grDitherMode(m);           \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grRenderBuffer(b)   \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grRenderBuffer(b);         \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grBufferClear(c, a, d)      \
+  do {                                 \
+    BEGIN_CLIP_LOOP();                 \
+    grBufferClear(c, a, d);            \
+    END_CLIP_LOOP();                   \
+  } while (0)
+
+#define FX_grDepthMask(m)      \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grDepthMask(m);            \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grColorMask(c, a)   \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grColorMask(c, a);         \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+extern FxBool FX_grLfbLock(GrLock_t type, GrBuffer_t buffer, 
+                          GrLfbWriteMode_t writeMode, 
+                          GrOriginLocation_t origin, FxBool pixelPipeline, 
+                          GrLfbInfo_t *info );
+
+#define FX_grLfbUnlock(t, b)   \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grLfbUnlock(t, b);         \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grConstantColorValue(v)     \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grConstantColorValue(v);           \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grConstantColorValue_NoLock grConstantColorValue
+
+#define FX_grAADrawTriangle(a, b, c, ab, bc, ca)       \
+  do {                                                 \
+    BEGIN_CLIP_LOOP();                                 \
+    grAADrawTriangle(a, b, c, ab, bc, ca);             \
+    END_CLIP_LOOP();                                   \
+  } while (0)
+
+#define FX_grAlphaBlendFunction(rs, rd, as, ad)        \
+  do {                                         \
+    BEGIN_BOARD_LOCK();                                \
+    grAlphaBlendFunction(rs, rd, as, ad);      \
+    END_BOARD_LOCK();                          \
+  } while (0)
+
+#define FX_grAlphaCombine(func, fact, loc, oth, inv)   \
+  do {                                                 \
+    BEGIN_BOARD_LOCK();                                        \
+    grAlphaCombine(func, fact, loc, oth, inv);         \
+    END_BOARD_LOCK();                                  \
+  } while (0)
+
+#define FX_grAlphaCombine_NoLock grAlphaCombine
+
+#define FX_grAlphaTestFunction(f)      \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grAlphaTestFunction(f);            \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grAlphaTestReferenceValue(v)        \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grAlphaTestReferenceValue(v);      \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grClipWindow(minx, miny, maxx, maxy)        \
+  do {                                         \
+    BEGIN_BOARD_LOCK();                                \
+    grClipWindow(minx, miny, maxx, maxy);      \
+    END_BOARD_LOCK();                          \
+  } while (0)
+
+#define FX_grClipWindow_NoLock grClipWindow
+
+#define FX_grColorCombine(func, fact, loc, oth, inv)   \
+  do {                                                 \
+    BEGIN_BOARD_LOCK();                                        \
+    grColorCombine(func, fact, loc, oth, inv);         \
+    END_BOARD_LOCK();                                  \
+  } while (0)
+
+#define FX_grColorCombine_NoLock grColorCombine
+
+#define FX_grCullMode(m)       \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grCullMode(m);             \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grDepthBiasLevel(lev)       \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grDepthBiasLevel(lev);             \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grDepthBufferFunction(func) \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grDepthBufferFunction(func);       \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grFogColorValue(c)          \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grFogColorValue(c);                        \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grFogMode(m)        \
+  do {                 \
+    BEGIN_BOARD_LOCK(); \
+    grFogMode(m);      \
+    END_BOARD_LOCK();  \
+  } while (0)
+
+#define FX_grFogTable(t)       \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grFogTable(t);             \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grTexClampMode(t, sc, tc)   \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grTexClampMode(t, sc, tc);         \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grTexClampMode_NoLock grTexClampMode
+
+#define FX_grTexCombine(t, rfunc, rfact, afunc, afact, rinv, ainv)     \
+  do {                                                                 \
+    BEGIN_BOARD_LOCK();                                                        \
+    grTexCombine(t, rfunc, rfact, afunc, afact, rinv, ainv);           \
+    END_BOARD_LOCK();                                                  \
+  } while (0)
+
+#define FX_grTexCombine_NoLock grTexCombine
+
+#define FX_grTexDownloadMipMapLevel(t, sa, tlod, llod, ar, f, eo, d)   \
+  do {                                                                 \
+    BEGIN_BOARD_LOCK();                                                        \
+    grTexDownloadMipMapLevel(t, sa, tlod, llod, ar, f, eo, d);         \
+    END_BOARD_LOCK();                                                  \
+  } while (0)
+
+#define FX_grTexDownloadMipMapLevel_NoLock grTexDownloadMipMapLevel
+
+#define FX_grTexDownloadMipMapLevelPartial(t, sa, tlod, llod, ar, f, eo, d, s, e);     \
+  do {                                                                     \
+    BEGIN_BOARD_LOCK();                                                            \
+    grTexDownloadMipMapLevelPartial(t, sa, tlod, llod, ar, f, eo, d, s, e); \
+    END_BOARD_LOCK();                                                      \
+  } while (0)
+
+#define FX_grTexFilterMode(t, minf, magf)      \
+  do {                                         \
+    BEGIN_BOARD_LOCK();                                \
+    grTexFilterMode(t, minf, magf);            \
+    END_BOARD_LOCK();                          \
+  } while (0)
+
+#define FX_grTexFilterMode_NoLock grTexFilterMode
+
+extern FxU32 FX_grTexMinAddress(GrChipID_t tmu);
+extern FxU32 FX_grTexMaxAddress(GrChipID_t tmu);
+
+#define FX_grTexMipMapMode(t, m, lod)  \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grTexMipMapMode(t, m, lod);                \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grTexMipMapMode_NoLock grTexMipMapMode
+
+#define FX_grTexSource(t, sa, eo, i)   \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grTexSource(t, sa, eo, i);         \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grTexSource_NoLock grTexSource
+
+extern FxU32 FX_grTexTextureMemRequired(FxU32 evenOdd, GrTexInfo *info);
+#define FX_grTexTextureMemRequired_NoLock grTexTextureMemRequired
+
+#define FX_grGlideGetState(s)  \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grGlideGetState(s);                \
+    END_BOARD_LOCK();          \
+  } while (0)
+#define FX_grGlideGetState_NoLock(s) grGlideGetState(s);
+
+#define FX_grDRIBufferSwap(i)  \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grDRIBufferSwap(i);                \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grSstSelect(b)      \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grSstSelect(b);            \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grSstSelect_NoLock grSstSelect
+
+#define FX_grGlideSetState(s)  \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grGlideSetState(s);                \
+    END_BOARD_LOCK();          \
+  } while (0)
+#define FX_grGlideSetState_NoLock(s) grGlideSetState(s);
+
+#define FX_grDepthBufferMode(m)        \
+  do {                         \
+    BEGIN_BOARD_LOCK();                \
+    grDepthBufferMode(m);      \
+    END_BOARD_LOCK();          \
+  } while (0)
+
+#define FX_grLfbWriteColorFormat(f)    \
+  do {                                 \
+    BEGIN_BOARD_LOCK();                        \
+    grLfbWriteColorFormat(f);          \
+    END_BOARD_LOCK();                  \
+  } while (0)
+
+#define FX_grDrawVertexArray(m, c, p)  \
+  do {                                 \
+    BEGIN_CLIP_LOOP();                 \
+    grDrawVertexArray(m, c, p);                \
+    END_CLIP_LOOP();                   \
+  } while (0)
+
+#define FX_grGlideShutdown()           \
+  do {                                 \
+    BEGIN_CLIP_LOOP();                 \
+    grGlideShutdown();                 \
+    END_CLIP_LOOP();                   \
+  } while (0)
+
+#define FX_grGlideInit_NoLock grGlideInit
+#define FX_grSstWinOpen_NoLock grSstWinOpen
+
+extern int FX_getFogTableSize(void);
+extern int FX_getGrStateSize(void);
+
 #endif /* __FX_GLIDE_WARPER__ */
+