implemented automatic code gen and individual function validation
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 8 Nov 2002 15:35:46 +0000 (15:35 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 8 Nov 2002 15:35:46 +0000 (15:35 +0000)
progs/tests/Makefile
progs/tests/functions.py [deleted file]
progs/tests/getprocaddress.c
progs/tests/getprocaddress.py [new file with mode: 0644]

index efa4ad0..f67a7c7 100644 (file)
@@ -11,6 +11,7 @@ LIBS = -L../lib -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lm
 PROGS = cva \
        dinoshade \
        fogcoord \
+       getprocaddress \
        manytex \
        multipal \
        projtex \
@@ -42,3 +43,11 @@ default: $(PROGS)
 clean:
        rm -f $(PROGS)
        rm -f *.o
+
+
+# auto code generation
+getprocaddress: getprocaddress.c getproclist.h
+
+getproclist.h: ../bin/APIspec getprocaddress.c getprocaddress.py
+       python getprocaddress.py > getproclist.h
+
diff --git a/progs/tests/functions.py b/progs/tests/functions.py
deleted file mode 100644 (file)
index d1a8cc3..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env python
-
-# $Id: functions.py,v 1.1 2001/11/18 23:16:56 brianp Exp $
-
-# Helper for the getprocaddress.c test.
-
-
-import string
-
-def PrintHead():
-       print """
-static const char *functions[] = {"""
-
-
-def PrintTail():
-       print"""
-   NULL
-};
-"""
-
-
-def PrintFunctions(specFile):
-
-       # init some vars
-       prevCategory = ''
-       funcName = ''
-
-       f = open(specFile)
-       for line in f.readlines():
-
-               # split line into tokens
-               tokens = string.split(line)
-
-               if len(tokens) > 0 and line[0] != '#':
-
-                       if tokens[0] == 'name':
-                               if funcName != '':
-                                       if category != prevCategory:
-                                               print '   "-%s",' % category
-                                               prevCategory = category
-
-                                       print '   "gl%s",' % funcName
-                               funcName = tokens[1]
-
-                       elif tokens[0] == 'category':
-                               category = tokens[1]
-
-                       #endif
-               #endif
-       #endfor
-#enddef
-
-
-PrintHead()
-PrintFunctions("../bin/APIspec")
-PrintTail()
index 919ec9c..95f34ad 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: getprocaddress.c,v 1.5 2002/11/07 16:35:02 brianp Exp $ */
+/* $Id: getprocaddress.c,v 1.6 2002/11/08 15:35:46 brianp Exp $ */
 
 /*
  * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
 #include <string.h>
 
 
-/* This big list of functions can be generated automatically by
- * running the functions.py script.
+static GLboolean
+test_ActiveTextureARB(void *func)
+{
+   PFNGLACTIVETEXTUREARBPROC activeTexture = (PFNGLACTIVETEXTUREARBPROC) func;
+   GLint t;
+   GLboolean pass;
+   (*activeTexture)(GL_TEXTURE1_ARB);
+   glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &t);
+   pass = (t == GL_TEXTURE1_ARB);
+   (*activeTexture)(GL_TEXTURE0_ARB);  /* restore default */
+   return pass;
+}
+
+
+static GLboolean
+test_SecondaryColor3fEXT(void *func)
+{
+   PFNGLSECONDARYCOLOR3FEXTPROC secColor3f = (PFNGLSECONDARYCOLOR3FEXTPROC) func;
+   GLfloat color[4];
+   GLboolean pass;
+   (*secColor3f)(1.0, 1.0, 0.0);
+   glGetFloatv(GL_CURRENT_SECONDARY_COLOR_EXT, color);
+   pass = (color[0] == 1.0 && color[1] == 1.0 && color[2] == 0.0);
+   (*secColor3f)(0.0, 0.0, 0.0);  /* restore default */
+   return pass;
+}
+
+
+static GLboolean
+test_ActiveStencilFaceEXT(void *func)
+{
+   PFNGLACTIVESTENCILFACEEXTPROC activeFace = (PFNGLACTIVESTENCILFACEEXTPROC) func;
+   GLint face;
+   GLboolean pass;
+   (*activeFace)(GL_BACK);
+   glGetIntegerv(GL_ACTIVE_STENCIL_FACE_EXT, &face);
+   pass = (face == GL_BACK);
+   (*activeFace)(GL_FRONT);  /* restore default */
+   return pass;
+}
+
+
+
+
+/*
+ * The following header file is auto-generated with Python.  The Python
+ * script looks in this file for functions named "test_*" as seen above.
  */
-static const char *functions[] = {
-   "-1.0",
-   "glNewList",
-   "glEndList",
-   "glCallList",
-   "glCallLists",
-   "glDeleteLists",
-   "glGenLists",
-   "glListBase",
-   "glBegin",
-   "glBitmap",
-   "glColor3b",
-   "glColor3bv",
-   "glColor3d",
-   "glColor3dv",
-   "glColor3f",
-   "glColor3fv",
-   "glColor3i",
-   "glColor3iv",
-   "glColor3s",
-   "glColor3sv",
-   "glColor3ub",
-   "glColor3ubv",
-   "glColor3ui",
-   "glColor3uiv",
-   "glColor3us",
-   "glColor3usv",
-   "glColor4b",
-   "glColor4bv",
-   "glColor4d",
-   "glColor4dv",
-   "glColor4f",
-   "glColor4fv",
-   "glColor4i",
-   "glColor4iv",
-   "glColor4s",
-   "glColor4sv",
-   "glColor4ub",
-   "glColor4ubv",
-   "glColor4ui",
-   "glColor4uiv",
-   "glColor4us",
-   "glColor4usv",
-   "glEdgeFlag",
-   "glEdgeFlagv",
-   "glEnd",
-   "glIndexd",
-   "glIndexdv",
-   "glIndexf",
-   "glIndexfv",
-   "glIndexi",
-   "glIndexiv",
-   "glIndexs",
-   "glIndexsv",
-   "glNormal3b",
-   "glNormal3bv",
-   "glNormal3d",
-   "glNormal3dv",
-   "glNormal3f",
-   "glNormal3fv",
-   "glNormal3i",
-   "glNormal3iv",
-   "glNormal3s",
-   "glNormal3sv",
-   "glRasterPos2d",
-   "glRasterPos2dv",
-   "glRasterPos2f",
-   "glRasterPos2fv",
-   "glRasterPos2i",
-   "glRasterPos2iv",
-   "glRasterPos2s",
-   "glRasterPos2sv",
-   "glRasterPos3d",
-   "glRasterPos3dv",
-   "glRasterPos3f",
-   "glRasterPos3fv",
-   "glRasterPos3i",
-   "glRasterPos3iv",
-   "glRasterPos3s",
-   "glRasterPos3sv",
-   "glRasterPos4d",
-   "glRasterPos4dv",
-   "glRasterPos4f",
-   "glRasterPos4fv",
-   "glRasterPos4i",
-   "glRasterPos4iv",
-   "glRasterPos4s",
-   "glRasterPos4sv",
-   "glRectd",
-   "glRectdv",
-   "glRectf",
-   "glRectfv",
-   "glRecti",
-   "glRectiv",
-   "glRects",
-   "glRectsv",
-   "glTexCoord1d",
-   "glTexCoord1dv",
-   "glTexCoord1f",
-   "glTexCoord1fv",
-   "glTexCoord1i",
-   "glTexCoord1iv",
-   "glTexCoord1s",
-   "glTexCoord1sv",
-   "glTexCoord2d",
-   "glTexCoord2dv",
-   "glTexCoord2f",
-   "glTexCoord2fv",
-   "glTexCoord2i",
-   "glTexCoord2iv",
-   "glTexCoord2s",
-   "glTexCoord2sv",
-   "glTexCoord3d",
-   "glTexCoord3dv",
-   "glTexCoord3f",
-   "glTexCoord3fv",
-   "glTexCoord3i",
-   "glTexCoord3iv",
-   "glTexCoord3s",
-   "glTexCoord3sv",
-   "glTexCoord4d",
-   "glTexCoord4dv",
-   "glTexCoord4f",
-   "glTexCoord4fv",
-   "glTexCoord4i",
-   "glTexCoord4iv",
-   "glTexCoord4s",
-   "glTexCoord4sv",
-   "glVertex2d",
-   "glVertex2dv",
-   "glVertex2f",
-   "glVertex2fv",
-   "glVertex2i",
-   "glVertex2iv",
-   "glVertex2s",
-   "glVertex2sv",
-   "glVertex3d",
-   "glVertex3dv",
-   "glVertex3f",
-   "glVertex3fv",
-   "glVertex3i",
-   "glVertex3iv",
-   "glVertex3s",
-   "glVertex3sv",
-   "glVertex4d",
-   "glVertex4dv",
-   "glVertex4f",
-   "glVertex4fv",
-   "glVertex4i",
-   "glVertex4iv",
-   "glVertex4s",
-   "glVertex4sv",
-   "glClipPlane",
-   "glColorMaterial",
-   "glCullFace",
-   "glFogf",
-   "glFogfv",
-   "glFogi",
-   "glFogiv",
-   "glFrontFace",
-   "glHint",
-   "glLightf",
-   "glLightfv",
-   "glLighti",
-   "glLightiv",
-   "glLightModelf",
-   "glLightModelfv",
-   "glLightModeli",
-   "glLightModeliv",
-   "glLineStipple",
-   "glLineWidth",
-   "glMaterialf",
-   "glMaterialfv",
-   "glMateriali",
-   "glMaterialiv",
-   "glPointSize",
-   "glPolygonMode",
-   "glPolygonStipple",
-   "glScissor",
-   "glShadeModel",
-   "glTexParameterf",
-   "glTexParameterfv",
-   "glTexParameteri",
-   "glTexParameteriv",
-   "glTexImage1D",
-   "glTexImage2D",
-   "glTexEnvf",
-   "glTexEnvfv",
-   "glTexEnvi",
-   "glTexEnviv",
-   "glTexGend",
-   "glTexGendv",
-   "glTexGenf",
-   "glTexGenfv",
-   "glTexGeni",
-   "glTexGeniv",
-   "glFeedbackBuffer",
-   "glSelectBuffer",
-   "glRenderMode",
-   "glInitNames",
-   "glLoadName",
-   "glPassThrough",
-   "glPopName",
-   "glPushName",
-   "glDrawBuffer",
-   "glClear",
-   "glClearAccum",
-   "glClearIndex",
-   "glClearColor",
-   "glClearStencil",
-   "glClearDepth",
-   "glStencilMask",
-   "glColorMask",
-   "glDepthMask",
-   "glIndexMask",
-   "glAccum",
-   "glDisable",
-   "glEnable",
-   "glFinish",
-   "glFlush",
-   "glPopAttrib",
-   "glPushAttrib",
-   "glMap1d",
-   "glMap1f",
-   "glMap2d",
-   "glMap2f",
-   "glMapGrid1d",
-   "glMapGrid1f",
-   "glMapGrid2d",
-   "glMapGrid2f",
-   "glEvalCoord1d",
-   "glEvalCoord1dv",
-   "glEvalCoord1f",
-   "glEvalCoord1fv",
-   "glEvalCoord2d",
-   "glEvalCoord2dv",
-   "glEvalCoord2f",
-   "glEvalCoord2fv",
-   "glEvalMesh1",
-   "glEvalPoint1",
-   "glEvalMesh2",
-   "glEvalPoint2",
-   "glAlphaFunc",
-   "glBlendFunc",
-   "glLogicOp",
-   "glStencilFunc",
-   "glStencilOp",
-   "glDepthFunc",
-   "glPixelZoom",
-   "glPixelTransferf",
-   "glPixelTransferi",
-   "glPixelStoref",
-   "glPixelStorei",
-   "glPixelMapfv",
-   "glPixelMapuiv",
-   "glPixelMapusv",
-   "glReadBuffer",
-   "glCopyPixels",
-   "glReadPixels",
-   "glDrawPixels",
-   "glGetBooleanv",
-   "glGetClipPlane",
-   "glGetDoublev",
-   "glGetError",
-   "glGetFloatv",
-   "glGetIntegerv",
-   "glGetLightfv",
-   "glGetLightiv",
-   "glGetMapdv",
-   "glGetMapfv",
-   "glGetMapiv",
-   "glGetMaterialfv",
-   "glGetMaterialiv",
-   "glGetPixelMapfv",
-   "glGetPixelMapuiv",
-   "glGetPixelMapusv",
-   "glGetPolygonStipple",
-   "glGetString",
-   "glGetTexEnvfv",
-   "glGetTexEnviv",
-   "glGetTexGendv",
-   "glGetTexGenfv",
-   "glGetTexGeniv",
-   "glGetTexImage",
-   "glGetTexParameterfv",
-   "glGetTexParameteriv",
-   "glGetTexLevelParameterfv",
-   "glGetTexLevelParameteriv",
-   "glIsEnabled",
-   "glIsList",
-   "glDepthRange",
-   "glFrustum",
-   "glLoadIdentity",
-   "glLoadMatrixf",
-   "glLoadMatrixd",
-   "glMatrixMode",
-   "glMultMatrixf",
-   "glMultMatrixd",
-   "glOrtho",
-   "glPopMatrix",
-   "glPushMatrix",
-   "glRotated",
-   "glRotatef",
-   "glScaled",
-   "glScalef",
-   "glTranslated",
-   "glTranslatef",
-   "glViewport",
-   "-1.1",
-   "glArrayElement",
-   "glColorPointer",
-   "glDisableClientState",
-   "glDrawArrays",
-   "glDrawElements",
-   "glEdgeFlagPointer",
-   "glEnableClientState",
-   "glGetPointerv",
-   "glIndexPointer",
-   "glInterleavedArrays",
-   "glNormalPointer",
-   "glTexCoordPointer",
-   "glVertexPointer",
-   "glPolygonOffset",
-   "glCopyTexImage1D",
-   "glCopyTexImage2D",
-   "glCopyTexSubImage1D",
-   "glCopyTexSubImage2D",
-   "glTexSubImage1D",
-   "glTexSubImage2D",
-   "glAreTexturesResident",
-   "glBindTexture",
-   "glDeleteTextures",
-   "glGenTextures",
-   "glIsTexture",
-   "glPrioritizeTextures",
-   "glIndexub",
-   "glIndexubv",
-   "glPopClientAttrib",
-   "glPushClientAttrib",
-   "-1.2",
-   "glBlendColor",
-   "glBlendEquation",
-   "glDrawRangeElements",
-   "glColorTable",
-   "glColorTableParameterfv",
-   "glColorTableParameteriv",
-   "glCopyColorTable",
-   "glGetColorTable",
-   "glGetColorTableParameterfv",
-   "glGetColorTableParameteriv",
-   "glColorSubTable",
-   "glCopyColorSubTable",
-   "glConvolutionFilter1D",
-   "glConvolutionFilter2D",
-   "glConvolutionParameterf",
-   "glConvolutionParameterfv",
-   "glConvolutionParameteri",
-   "glConvolutionParameteriv",
-   "glCopyConvolutionFilter1D",
-   "glCopyConvolutionFilter2D",
-   "glGetConvolutionFilter",
-   "glGetConvolutionParameterfv",
-   "glGetConvolutionParameteriv",
-   "glGetSeparableFilter",
-   "glSeparableFilter2D",
-   "glGetHistogram",
-   "glGetHistogramParameterfv",
-   "glGetHistogramParameteriv",
-   "glGetMinmax",
-   "glGetMinmaxParameterfv",
-   "glGetMinmaxParameteriv",
-   "glHistogram",
-   "glMinmax",
-   "glResetHistogram",
-   "glResetMinmax",
-   "glTexImage3D",
-   "glTexSubImage3D",
-   "glCopyTexSubImage3D",
-   "-1.3",
-   "glActiveTexture",
-   "glClientActiveTexture",
-   "glMultiTexCoord1d",
-   "glMultiTexCoord1dv",
-   "glMultiTexCoord1f",
-   "glMultiTexCoord1fv",
-   "glMultiTexCoord1i",
-   "glMultiTexCoord1iv",
-   "glMultiTexCoord1s",
-   "glMultiTexCoord1sv",
-   "glMultiTexCoord2d",
-   "glMultiTexCoord2dv",
-   "glMultiTexCoord2f",
-   "glMultiTexCoord2fv",
-   "glMultiTexCoord2i",
-   "glMultiTexCoord2iv",
-   "glMultiTexCoord2s",
-   "glMultiTexCoord2sv",
-   "glMultiTexCoord3d",
-   "glMultiTexCoord3dv",
-   "glMultiTexCoord3f",
-   "glMultiTexCoord3fv",
-   "glMultiTexCoord3i",
-   "glMultiTexCoord3iv",
-   "glMultiTexCoord3s",
-   "glMultiTexCoord3sv",
-   "glMultiTexCoord4d",
-   "glMultiTexCoord4dv",
-   "glMultiTexCoord4f",
-   "glMultiTexCoord4fv",
-   "glMultiTexCoord4i",
-   "glMultiTexCoord4iv",
-   "glMultiTexCoord4s",
-   "glMultiTexCoord4sv",
-   "glLoadTransposeMatrixf",
-   "glLoadTransposeMatrixd",
-   "glMultTransposeMatrixf",
-   "glMultTransposeMatrixd",
-   "glSampleCoverage",
-   "glCompressedTexImage3D",
-   "glCompressedTexImage2D",
-   "glCompressedTexImage1D",
-   "glCompressedTexSubImage3D",
-   "glCompressedTexSubImage2D",
-   "glCompressedTexSubImage1D",
-   "glGetCompressedTexImage",
-   "-1.4",
-   "glBlendFuncSeparate",
-   "glFogCoordf",
-   "glFogCoordfv",
-   "glFogCoordd",
-   "glFogCoorddv",
-   "glFogCoordPointer",
-   "glMultiDrawArrays",
-   "glMultiDrawElements",
-   "glPointParameterf",
-   "glPointParameterfv",
-   "glPointParameteri",
-   "glPointParameteriv",
-   "glSecondaryColor3b",
-   "glSecondaryColor3bv",
-   "glSecondaryColor3d",
-   "glSecondaryColor3dv",
-   "glSecondaryColor3f",
-   "glSecondaryColor3fv",
-   "glSecondaryColor3i",
-   "glSecondaryColor3iv",
-   "glSecondaryColor3s",
-   "glSecondaryColor3sv",
-   "glSecondaryColor3ub",
-   "glSecondaryColor3ubv",
-   "glSecondaryColor3ui",
-   "glSecondaryColor3uiv",
-   "glSecondaryColor3us",
-   "glSecondaryColor3usv",
-   "glSecondaryColorPointer",
-   "glWindowPos2d",
-   "glWindowPos2dv",
-   "glWindowPos2f",
-   "glWindowPos2fv",
-   "glWindowPos2i",
-   "glWindowPos2iv",
-   "glWindowPos2s",
-   "glWindowPos2sv",
-   "glWindowPos3d",
-   "glWindowPos3dv",
-   "glWindowPos3f",
-   "glWindowPos3fv",
-   "glWindowPos3i",
-   "glWindowPos3iv",
-   "glWindowPos3s",
-   "glWindowPos3sv",
-   "-GL_ARB_multitexture",
-   "glActiveTextureARB",
-   "glClientActiveTextureARB",
-   "glMultiTexCoord1dARB",
-   "glMultiTexCoord1dvARB",
-   "glMultiTexCoord1fARB",
-   "glMultiTexCoord1fvARB",
-   "glMultiTexCoord1iARB",
-   "glMultiTexCoord1ivARB",
-   "glMultiTexCoord1sARB",
-   "glMultiTexCoord1svARB",
-   "glMultiTexCoord2dARB",
-   "glMultiTexCoord2dvARB",
-   "glMultiTexCoord2fARB",
-   "glMultiTexCoord2fvARB",
-   "glMultiTexCoord2iARB",
-   "glMultiTexCoord2ivARB",
-   "glMultiTexCoord2sARB",
-   "glMultiTexCoord2svARB",
-   "glMultiTexCoord3dARB",
-   "glMultiTexCoord3dvARB",
-   "glMultiTexCoord3fARB",
-   "glMultiTexCoord3fvARB",
-   "glMultiTexCoord3iARB",
-   "glMultiTexCoord3ivARB",
-   "glMultiTexCoord3sARB",
-   "glMultiTexCoord3svARB",
-   "glMultiTexCoord4dARB",
-   "glMultiTexCoord4dvARB",
-   "glMultiTexCoord4fARB",
-   "glMultiTexCoord4fvARB",
-   "glMultiTexCoord4iARB",
-   "glMultiTexCoord4ivARB",
-   "glMultiTexCoord4sARB",
-   "glMultiTexCoord4svARB",
-   "-GL_ARB_transpose_matrix",
-   "glLoadTransposeMatrixfARB",
-   "glLoadTransposeMatrixdARB",
-   "glMultTransposeMatrixfARB",
-   "glMultTransposeMatrixdARB",
-   "-GL_ARB_multisample",
-   "glSampleCoverageARB",
-   "-unused",
-   "gl__unused413",
-   "-GL_ARB_texture_compression",
-   "glCompressedTexImage3DARB",
-   "glCompressedTexImage2DARB",
-   "glCompressedTexImage1DARB",
-   "glCompressedTexSubImage3DARB",
-   "glCompressedTexSubImage2DARB",
-   "glCompressedTexSubImage1DARB",
-   "glGetCompressedTexImageARB",
-   "-GL_ARB_vertex_blend",
-   "glWeightbvARB",
-   "glWeightsvARB",
-   "glWeightivARB",
-   "glWeightfvARB",
-   "glWeightdvARB",
-   "glWeightubvARB",
-   "glWeightusvARB",
-   "glWeightuivARB",
-   "glWeightPointerARB",
-   "glVertexBlendARB",
-   "-GL_ARB_matrix_palette",
-   "glCurrentPaletteMatrixARB",
-   "glMatrixIndexubvARB",
-   "glMatrixIndexusvARB",
-   "glMatrixIndexuivARB",
-   "glMatrixIndexPointerARB",
-   "-GL_EXT_blend_color",
-   "glBlendColorEXT",
-   "-GL_EXT_polygon_offset",
-   "glPolygonOffsetEXT",
-   "-GL_EXT_texture3D",
-   "glTexImage3DEXT",
-   "glTexSubImage3DEXT",
-   "-GL_SGIS_texture_filter4",
-   "glGetTexFilterFuncSGIS",
-   "glTexFilterFuncSGIS",
-   "-GL_EXT_subtexture",
-   "glTexSubImage1DEXT",
-   "glTexSubImage2DEXT",
-   "-GL_EXT_copy_texture",
-   "glCopyTexImage1DEXT",
-   "glCopyTexImage2DEXT",
-   "glCopyTexSubImage1DEXT",
-   "glCopyTexSubImage2DEXT",
-   "glCopyTexSubImage3DEXT",
-   "-GL_EXT_histogram",
-   "glGetHistogramEXT",
-   "glGetHistogramParameterfvEXT",
-   "glGetHistogramParameterivEXT",
-   "glGetMinmaxEXT",
-   "glGetMinmaxParameterfvEXT",
-   "glGetMinmaxParameterivEXT",
-   "glHistogramEXT",
-   "glMinmaxEXT",
-   "glResetHistogramEXT",
-   "glResetMinmaxEXT",
-   "-GL_EXT_convolution",
-   "glConvolutionFilter1DEXT",
-   "glConvolutionFilter2DEXT",
-   "glConvolutionParameterfEXT",
-   "glConvolutionParameterfvEXT",
-   "glConvolutionParameteriEXT",
-   "glConvolutionParameterivEXT",
-   "glCopyConvolutionFilter1DEXT",
-   "glCopyConvolutionFilter2DEXT",
-   "glGetConvolutionFilterEXT",
-   "glGetConvolutionParameterfvEXT",
-   "glGetConvolutionParameterivEXT",
-   "glGetSeparableFilterEXT",
-   "glSeparableFilter2DEXT",
-   "-GL_SGI_color_table",
-   "glColorTableSGI",
-   "glColorTableParameterfvSGI",
-   "glColorTableParameterivSGI",
-   "glCopyColorTableSGI",
-   "glGetColorTableSGI",
-   "glGetColorTableParameterfvSGI",
-   "glGetColorTableParameterivSGI",
-   "-GL_SGIX_pixel_texture",
-   "glPixelTexGenSGIX",
-   "-GL_SGIS_pixel_texture",
-   "glPixelTexGenParameteriSGIS",
-   "glPixelTexGenParameterivSGIS",
-   "glPixelTexGenParameterfSGIS",
-   "glPixelTexGenParameterfvSGIS",
-   "glGetPixelTexGenParameterivSGIS",
-   "glGetPixelTexGenParameterfvSGIS",
-   "-GL_SGIS_texture4D",
-   "glTexImage4DSGIS",
-   "glTexSubImage4DSGIS",
-   "-GL_EXT_texture_object",
-   "glAreTexturesResidentEXT",
-   "glBindTextureEXT",
-   "glDeleteTexturesEXT",
-   "glGenTexturesEXT",
-   "glIsTextureEXT",
-   "glPrioritizeTexturesEXT",
-   "-GL_SGIS_detail_texture",
-   "glDetailTexFuncSGIS",
-   "glGetDetailTexFuncSGIS",
-   "-GL_SGIS_sharpen_texture",
-   "glSharpenTexFuncSGIS",
-   "glGetSharpenTexFuncSGIS",
-   "-GL_SGIS_multisample",
-   "glSampleMaskSGIS",
-   "glSamplePatternSGIS",
-   "-GL_EXT_vertex_array",
-   "glArrayElementEXT",
-   "glColorPointerEXT",
-   "glDrawArraysEXT",
-   "glEdgeFlagPointerEXT",
-   "glGetPointervEXT",
-   "glIndexPointerEXT",
-   "glNormalPointerEXT",
-   "glTexCoordPointerEXT",
-   "glVertexPointerEXT",
-   "-GL_EXT_blend_minmax",
-   "glBlendEquationEXT",
-   "-GL_SGIX_sprite",
-   "glSpriteParameterfSGIX",
-   "glSpriteParameterfvSGIX",
-   "glSpriteParameteriSGIX",
-   "glSpriteParameterivSGIX",
-   "-GL_ARB_point_parameters",
-   "glPointParameterfARB",
-   "glPointParameterfvARB",
-   "-GL_EXT_point_parameters",
-   "glPointParameterfEXT",
-   "glPointParameterfvEXT",
-   "-GL_SGIS_point_parameters",
-   "glPointParameterfSGIS",
-   "glPointParameterfvSGIS",
-   "-GL_SGIX_instruments",
-   "glGetInstrumentsSGIX",
-   "glInstrumentsBufferSGIX",
-   "glPollInstrumentsSGIX",
-   "glReadInstrumentsSGIX",
-   "glStartInstrumentsSGIX",
-   "glStopInstrumentsSGIX",
-   "-GL_SGIX_framezoom",
-   "glFrameZoomSGIX",
-   "-GL_SGIX_tag_sample_buffer",
-   "glTagSampleBufferSGIX",
-   "-GL_SGIX_polynomial_ffd",
-   "glDeformationMap3dSGIX",
-   "glDeformationMap3fSGIX",
-   "glDeformSGIX",
-   "glLoadIdentityDeformationMapSGIX",
-   "-GL_SGIX_reference_plane",
-   "glReferencePlaneSGIX",
-   "-GL_SGIX_flush_raster",
-   "glFlushRasterSGIX",
-   "-GL_SGIS_fog_function",
-   "glFogFuncSGIS",
-   "glGetFogFuncSGIS",
-   "-GL_HP_image_transform",
-   "glImageTransformParameteriHP",
-   "glImageTransformParameterfHP",
-   "glImageTransformParameterivHP",
-   "glImageTransformParameterfvHP",
-   "glGetImageTransformParameterivHP",
-   "glGetImageTransformParameterfvHP",
-   "-GL_EXT_color_subtable",
-   "glColorSubTableEXT",
-   "glCopyColorSubTableEXT",
-   "-GL_PGI_misc_hints",
-   "glHintPGI",
-   "-GL_EXT_paletted_texture",
-   "glColorTableEXT",
-   "glGetColorTableEXT",
-   "glGetColorTableParameterivEXT",
-   "glGetColorTableParameterfvEXT",
-   "-GL_SGIX_list_priority",
-   "glGetListParameterfvSGIX",
-   "glGetListParameterivSGIX",
-   "glListParameterfSGIX",
-   "glListParameterfvSGIX",
-   "glListParameteriSGIX",
-   "glListParameterivSGIX",
-   "-GL_EXT_index_material",
-   "glIndexMaterialEXT",
-   "-GL_EXT_index_func",
-   "glIndexFuncEXT",
-   "-GL_EXT_compiled_vertex_array",
-   "glLockArraysEXT",
-   "glUnlockArraysEXT",
-   "-GL_EXT_cull_vertex",
-   "glCullParameterdvEXT",
-   "glCullParameterfvEXT",
-   "-GL_SGIX_fragment_lighting",
-   "glFragmentColorMaterialSGIX",
-   "glFragmentLightfSGIX",
-   "glFragmentLightfvSGIX",
-   "glFragmentLightiSGIX",
-   "glFragmentLightivSGIX",
-   "glFragmentLightModelfSGIX",
-   "glFragmentLightModelfvSGIX",
-   "glFragmentLightModeliSGIX",
-   "glFragmentLightModelivSGIX",
-   "glFragmentMaterialfSGIX",
-   "glFragmentMaterialfvSGIX",
-   "glFragmentMaterialiSGIX",
-   "glFragmentMaterialivSGIX",
-   "glGetFragmentLightfvSGIX",
-   "glGetFragmentLightivSGIX",
-   "glGetFragmentMaterialfvSGIX",
-   "glGetFragmentMaterialivSGIX",
-   "glLightEnviSGIX",
-   "-GL_EXT_draw_range_elements",
-   "glDrawRangeElementsEXT",
-   "-GL_EXT_light_texture",
-   "glApplyTextureEXT",
-   "glTextureLightEXT",
-   "glTextureMaterialEXT",
-   "-GL_SGIX_async",
-   "glAsyncMarkerSGIX",
-   "glFinishAsyncSGIX",
-   "glPollAsyncSGIX",
-   "glGenAsyncMarkersSGIX",
-   "glDeleteAsyncMarkersSGIX",
-   "glIsAsyncMarkerSGIX",
-   "-GL_INTEL_parallel_arrays",
-   "glVertexPointervINTEL",
-   "glNormalPointervINTEL",
-   "glColorPointervINTEL",
-   "glTexCoordPointervINTEL",
-   "-GL_EXT_pixel_transform",
-   "glPixelTransformParameteriEXT",
-   "glPixelTransformParameterfEXT",
-   "glPixelTransformParameterivEXT",
-   "glPixelTransformParameterfvEXT",
-   "-GL_EXT_secondary_color",
-   "glSecondaryColor3bEXT",
-   "glSecondaryColor3bvEXT",
-   "glSecondaryColor3dEXT",
-   "glSecondaryColor3dvEXT",
-   "glSecondaryColor3fEXT",
-   "glSecondaryColor3fvEXT",
-   "glSecondaryColor3iEXT",
-   "glSecondaryColor3ivEXT",
-   "glSecondaryColor3sEXT",
-   "glSecondaryColor3svEXT",
-   "glSecondaryColor3ubEXT",
-   "glSecondaryColor3ubvEXT",
-   "glSecondaryColor3uiEXT",
-   "glSecondaryColor3uivEXT",
-   "glSecondaryColor3usEXT",
-   "glSecondaryColor3usvEXT",
-   "glSecondaryColorPointerEXT",
-   "-GL_EXT_texture_perturb_normal",
-   "glTextureNormalEXT",
-   "-GL_EXT_multi_draw_arrays",
-   "glMultiDrawArraysEXT",
-   "glMultiDrawElementsEXT",
-   "-GL_EXT_fog_coord",
-   "glFogCoordfEXT",
-   "glFogCoordfvEXT",
-   "glFogCoorddEXT",
-   "glFogCoorddvEXT",
-   "glFogCoordPointerEXT",
-   "-GL_EXT_coordinate_frame",
-   "glTangent3bEXT",
-   "glTangent3bvEXT",
-   "glTangent3dEXT",
-   "glTangent3dvEXT",
-   "glTangent3fEXT",
-   "glTangent3fvEXT",
-   "glTangent3iEXT",
-   "glTangent3ivEXT",
-   "glTangent3sEXT",
-   "glTangent3svEXT",
-   "glBinormal3bEXT",
-   "glBinormal3bvEXT",
-   "glBinormal3dEXT",
-   "glBinormal3dvEXT",
-   "glBinormal3fEXT",
-   "glBinormal3fvEXT",
-   "glBinormal3iEXT",
-   "glBinormal3ivEXT",
-   "glBinormal3sEXT",
-   "glBinormal3svEXT",
-   "glTangentPointerEXT",
-   "glBinormalPointerEXT",
-   "-GL_SUNX_constant_data",
-   "glFinishTextureSUNX",
-   "-GL_SUN_global_alpha",
-   "glGlobalAlphaFactorbSUN",
-   "glGlobalAlphaFactorsSUN",
-   "glGlobalAlphaFactoriSUN",
-   "glGlobalAlphaFactorfSUN",
-   "glGlobalAlphaFactordSUN",
-   "glGlobalAlphaFactorubSUN",
-   "glGlobalAlphaFactorusSUN",
-   "glGlobalAlphaFactoruiSUN",
-   "-GL_SUN_triangle_list",
-   "glReplacementCodeuiSUN",
-   "glReplacementCodeusSUN",
-   "glReplacementCodeubSUN",
-   "glReplacementCodeuivSUN",
-   "glReplacementCodeusvSUN",
-   "glReplacementCodeubvSUN",
-   "glReplacementCodePointerSUN",
-   "-GL_SUN_vertex",
-   "glColor4ubVertex2fSUN",
-   "glColor4ubVertex2fvSUN",
-   "glColor4ubVertex3fSUN",
-   "glColor4ubVertex3fvSUN",
-   "glColor3fVertex3fSUN",
-   "glColor3fVertex3fvSUN",
-   "glNormal3fVertex3fSUN",
-   "glNormal3fVertex3fvSUN",
-   "glColor4fNormal3fVertex3fSUN",
-   "glColor4fNormal3fVertex3fvSUN",
-   "glTexCoord2fVertex3fSUN",
-   "glTexCoord2fVertex3fvSUN",
-   "glTexCoord4fVertex4fSUN",
-   "glTexCoord4fVertex4fvSUN",
-   "glTexCoord2fColor4ubVertex3fSUN",
-   "glTexCoord2fColor4ubVertex3fvSUN",
-   "glTexCoord2fColor3fVertex3fSUN",
-   "glTexCoord2fColor3fVertex3fvSUN",
-   "glTexCoord2fNormal3fVertex3fSUN",
-   "glTexCoord2fNormal3fVertex3fvSUN",
-   "glTexCoord2fColor4fNormal3fVertex3fSUN",
-   "glTexCoord2fColor4fNormal3fVertex3fvSUN",
-   "glTexCoord4fColor4fNormal3fVertex4fSUN",
-   "glTexCoord4fColor4fNormal3fVertex4fvSUN",
-   "glReplacementCodeuiVertex3fSUN",
-   "glReplacementCodeuiVertex3fvSUN",
-   "glReplacementCodeuiColor4ubVertex3fSUN",
-   "glReplacementCodeuiColor4ubVertex3fvSUN",
-   "glReplacementCodeuiColor3fVertex3fSUN",
-   "glReplacementCodeuiColor3fVertex3fvSUN",
-   "glReplacementCodeuiNormal3fVertex3fSUN",
-   "glReplacementCodeuiNormal3fVertex3fvSUN",
-   "glReplacementCodeuiColor4fNormal3fVertex3fSUN",
-   "glReplacementCodeuiColor4fNormal3fVertex3fvSUN",
-   "glReplacementCodeuiTexCoord2fVertex3fSUN",
-   "glReplacementCodeuiTexCoord2fVertex3fvSUN",
-   "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN",
-   "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN",
-   "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN",
-   "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN",
-   "-GL_EXT_blend_func_separate",
-   "glBlendFuncSeparateEXT",
-   "glBlendFuncSeparateINGR",
-   "-GL_EXT_vertex_weighting",
-   "glVertexWeightfEXT",
-   "glVertexWeightfvEXT",
-   "glVertexWeightPointerEXT",
-   "-GL_NV_vertex_array_range",
-   "glFlushVertexArrayRangeNV",
-   "glVertexArrayRangeNV",
-   "-GL_NV_register_combiners",
-   "glCombinerParameterfvNV",
-   "glCombinerParameterfNV",
-   "glCombinerParameterivNV",
-   "glCombinerParameteriNV",
-   "glCombinerInputNV",
-   "glCombinerOutputNV",
-   "glFinalCombinerInputNV",
-   "glGetCombinerInputParameterfvNV",
-   "glGetCombinerInputParameterivNV",
-   "glGetCombinerOutputParameterfvNV",
-   "glGetCombinerOutputParameterivNV",
-   "glGetFinalCombinerInputParameterfvNV",
-   "glGetFinalCombinerInputParameterivNV",
-   "-GL_MESA_resize_buffers",
-   "glResizeBuffersMESA",
-   "-GL_MESA_window_pos",
-   "glWindowPos2dMESA",
-   "glWindowPos2dvMESA",
-   "glWindowPos2fMESA",
-   "glWindowPos2fvMESA",
-   "glWindowPos2iMESA",
-   "glWindowPos2ivMESA",
-   "glWindowPos2sMESA",
-   "glWindowPos2svMESA",
-   "glWindowPos3dMESA",
-   "glWindowPos3dvMESA",
-   "glWindowPos3fMESA",
-   "glWindowPos3fvMESA",
-   "glWindowPos3iMESA",
-   "glWindowPos3ivMESA",
-   "glWindowPos3sMESA",
-   "glWindowPos3svMESA",
-   "glWindowPos4dMESA",
-   "glWindowPos4dvMESA",
-   "glWindowPos4fMESA",
-   "glWindowPos4fvMESA",
-   "glWindowPos4iMESA",
-   "glWindowPos4ivMESA",
-   "glWindowPos4sMESA",
-   "glWindowPos4svMESA",
-   "-GL_IBM_multimode_draw_arrays",
-   "glMultiModeDrawArraysIBM",
-   "glMultiModeDrawElementsIBM",
-   "-GL_IBM_vertex_array_lists",
-   "glColorPointerListIBM",
-   "glSecondaryColorPointerListIBM",
-   "glEdgeFlagPointerListIBM",
-   "glFogCoordPointerListIBM",
-   "glIndexPointerListIBM",
-   "glNormalPointerListIBM",
-   "glTexCoordPointerListIBM",
-   "glVertexPointerListIBM",
-   "-GL_3DFX_tbuffer",
-   "glTbufferMask3DFX",
-   "-GL_EXT_multisample",
-   "glSampleMaskEXT",
-   "glSamplePatternEXT",
-   "-GL_SGIS_texture_color_mask",
-   "glTextureColorMaskSGIS",
-   "-GL_SGIX_igloo_interface",
-   "glIglooInterfaceSGIX",
-   "-GL_NV_fence",
-   "glGenFencesNV",
-   "glDeleteFencesNV",
-   "glSetFenceNV",
-   "glTestFenceNV",
-   "glFinishFenceNV",
-   "glIsFenceNV",
-   "glGetFenceivNV",
-   "-GL_NV_evaluators",
-   "glMapControlPointsNV",
-   "glMapParameterivNV",
-   "glMapParameterfvNV",
-   "glGetMapControlPointsNV",
-   "glGetMapParameterivNV",
-   "glGetMapParameterfvNV",
-   "glGetMapAttribParameterivNV",
-   "glGetMapAttribParameterfvNV",
-   "glEvalMapsNV",
-   "-GL_NV_register_combiners2",
-   "glCombinerStageParameterfvNV",
-   "glGetCombinerStageParameterfvNV",
-   "-GL_NV_vertex_program",
-   "glBindProgramNV",
-   "glDeleteProgramsNV",
-   "glExecuteProgramNV",
-   "glGenProgramsNV",
-   "glAreProgramsResidentNV",
-   "glRequestResidentProgramsNV",
-   "glGetProgramParameterfvNV",
-   "glGetProgramParameterdvNV",
-   "glGetProgramivNV",
-   "glGetProgramStringNV",
-   "glGetTrackMatrixivNV",
-   "glGetVertexAttribdvNV",
-   "glGetVertexAttribfvNV",
-   "glGetVertexAttribivNV",
-   "glGetVertexAttribPointervNV",
-   "glIsProgramNV",
-   "glLoadProgramNV",
-   "glProgramParameter4fNV",
-   "glProgramParameter4dNV",
-   "glProgramParameter4dvNV",
-   "glProgramParameter4fvNV",
-   "glProgramParameters4dvNV",
-   "glProgramParameters4fvNV",
-   "glTrackMatrixNV",
-   "glVertexAttribPointerNV",
-   "glVertexAttrib1sNV",
-   "glVertexAttrib1fNV",
-   "glVertexAttrib1dNV",
-   "glVertexAttrib2sNV",
-   "glVertexAttrib2fNV",
-   "glVertexAttrib2dNV",
-   "glVertexAttrib3sNV",
-   "glVertexAttrib3fNV",
-   "glVertexAttrib3dNV",
-   "glVertexAttrib4sNV",
-   "glVertexAttrib4fNV",
-   "glVertexAttrib4dNV",
-   "glVertexAttrib4ubNV",
-   "glVertexAttrib1svNV",
-   "glVertexAttrib1fvNV",
-   "glVertexAttrib1dvNV",
-   "glVertexAttrib2svNV",
-   "glVertexAttrib2fvNV",
-   "glVertexAttrib2dvNV",
-   "glVertexAttrib3svNV",
-   "glVertexAttrib3fvNV",
-   "glVertexAttrib3dvNV",
-   "glVertexAttrib4svNV",
-   "glVertexAttrib4fvNV",
-   "glVertexAttrib4dvNV",
-   "glVertexAttrib4ubvNV",
-   "glVertexAttribs1svNV",
-   "glVertexAttribs1fvNV",
-   "glVertexAttribs1dvNV",
-   "glVertexAttribs2svNV",
-   "glVertexAttribs2fvNV",
-   "glVertexAttribs2dvNV",
-   "glVertexAttribs3svNV",
-   "glVertexAttribs3fvNV",
-   "glVertexAttribs3dvNV",
-   "glVertexAttribs4svNV",
-   "glVertexAttribs4fvNV",
-   "glVertexAttribs4dvNV",
-   "glVertexAttribs4ubvNV",
-   "-GL_ARB_window_pos",
-   "glWindowPos2dARB",
-   "glWindowPos2fARB",
-   "glWindowPos2iARB",
-   "glWindowPos2sARB",
-   "glWindowPos2dvARB",
-   "glWindowPos2fvARB",
-   "glWindowPos2ivARB",
-   "glWindowPos2svARB",
-   "glWindowPos3dARB",
-   "glWindowPos3fARB",
-   "glWindowPos3iARB",
-   "glWindowPos3sARB",
-   "glWindowPos3dvARB",
-   "glWindowPos3fvARB",
-   "glWindowPos3ivARB",
-   "glWindowPos3svARB",
-   "-EXT_stencil_two_side",
-   "glActiveStencilFaceEXT",
+#include "getproclist.h"
 
-   NULL
-};
 
 
 static int
@@ -1089,46 +99,69 @@ extension_supported(const char *haystack, const char *needle)
 
 
 static void
-test_functions( const char *extensions )
+check_functions( const char *extensions )
 {
+   struct name_test_pair *entry;
    int failures = 0, passes = 0;
+   int totalFail = 0, totalPass = 0;
    int doTests;
-   int i;
 
-   for (i = 0; functions[i]; i++) {
-      if (functions[i][0] == '-') {
-         if (functions[i][1] == '1') {
+   for (entry = functions; entry->name; entry++) {
+      if (entry->name[0] == '-') {
+         if (entry->name[1] == '1') {
             doTests = 1;
          }
          else {
             /* check if the named extension is available */
-            doTests = extension_supported(extensions, functions[i]+1);
+            doTests = extension_supported(extensions, entry->name+1);
          }
          if (doTests)
-            printf("Testing %s functions\n", functions[i] + 1);
+            printf("Testing %s functions\n", entry->name + 1);
+         totalFail += failures;
+         totalPass += passes;
          failures = 0;
          passes = 0;
       }
       else if (doTests) {
-         void *p = (void *) glXGetProcAddressARB((const GLubyte *) functions[i]);
-         if (p) {
-            passes++;
+         void *funcPtr = (void *) glXGetProcAddressARB((const GLubyte *) entry->name);
+         if (funcPtr) {
+            if (entry->test) {
+               GLboolean b;
+               printf("   Validating %s:", entry->name);
+               b = (*entry->test)(funcPtr);
+               if (b) {
+                  printf(" Pass\n");
+                  passes++;
+               }
+               else {
+                  printf(" FAIL!!!\n");
+                  failures++;
+               }
+            }
+            else {
+               passes++;
+            }
          }
          else {
-            printf("   glXGetProcAddress(%s) failed!\n", functions[i]);
+            printf("   glXGetProcAddress(%s) failed!\n", entry->name);
             failures++;
          }
       }
 
-      if (doTests && (!functions[i + 1] || functions[i + 1][0] == '-')) {
+      if (doTests && (!(entry+1)->name || (entry+1)->name[0] == '-')) {
          if (failures > 0) {
-            printf("   %d failures\n", failures);
+            printf("   %d failed.\n", failures);
          }
-         else if (i > 0) {
+         if (passes > 0) {
             printf("   %d passed.\n", passes);
          }
       }
    }
+   totalFail += failures;
+   totalPass += passes;
+
+   printf("-----------------------------\n");
+   printf("Total: %d pass  %d fail\n", totalPass, totalFail);
 }
 
 
@@ -1186,7 +219,7 @@ print_screen_info(Display *dpy, int scrnum, Bool allowDirect)
    }
 
    if (glXMakeCurrent(dpy, win, ctx)) {
-      test_functions( (const char *) glGetString(GL_EXTENSIONS) );
+      check_functions( (const char *) glGetString(GL_EXTENSIONS) );
    }
    else {
       fprintf(stderr, "Error: glXMakeCurrent failed\n");
diff --git a/progs/tests/getprocaddress.py b/progs/tests/getprocaddress.py
new file mode 100644 (file)
index 0000000..e5d2fbb
--- /dev/null
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+
+# $Id: getprocaddress.py,v 1.1 2002/11/08 15:35:47 brianp Exp $
+
+# Helper for the getprocaddress.c test.
+
+
+import re, string
+
+def PrintHead():
+       print """
+struct name_test_pair {
+   const char *name;
+   GLboolean (*test)(void *);
+};
+   
+static struct name_test_pair functions[] = {"""
+
+
+def PrintTail():
+       print"""
+   { NULL, NULL }
+};
+"""
+
+
+def HaveTest(function):
+       testFuncs = [
+               "glActiveTextureARB",
+               "glSampleCoverageARB"
+       ]
+       if function in testFuncs:
+               return 1
+       else:
+               return 0
+
+
+def FindTestFunctions():
+       """Scan getprocaddress.c for lines that start with "test_" to find
+       extension function tests.  Return a list of names found."""
+       functions = []
+       f = open("getprocaddress.c")
+       if not f:
+               return functions
+       for line in f.readlines():
+               v = re.search("^test_([a-zA-Z0-9]+)", line)
+               if v:
+                       func = v.group(1)
+                       #print "Found -%s-" % func
+                       functions.append(func)
+       f.close
+       return functions
+
+
+def PrintFunctions(specFile, tests):
+
+       # init some vars
+       prevCategory = ''
+       funcName = ''
+
+       f = open(specFile)
+       for line in f.readlines():
+
+               # split line into tokens
+               tokens = string.split(line)
+
+               if len(tokens) > 0 and line[0] != '#':
+
+                       if tokens[0] == 'name':
+                               if funcName != '':
+                                       if category != prevCategory:
+                                               print '   { "-%s", NULL},' % category
+                                               prevCategory = category
+
+#                                      if HaveTest("gl" + funcName):
+                                       if funcName in tests:
+                                               test = "test_%s" % funcName
+                                       else:
+                                               test = "NULL"
+                                       print '   { "gl%s", %s },' % (funcName, test)
+                               funcName = tokens[1]
+
+                       elif tokens[0] == 'category':
+                               category = tokens[1]
+
+                       #endif
+               #endif
+       #endfor
+#enddef
+
+
+tests = FindTestFunctions()
+PrintHead()
+PrintFunctions("../bin/APIspec", tests)
+PrintTail()
+
+