Spec file bugs

I have been doing some processing to update my GLIntercept tool with the newer extensions, and decided to use the extension listing from existing tools.

I started with glLoader - it seems to have been manually created from the registry files - but found a lot of bugs in it (I would highly recommend NOT using this extension loader for this reason)

I then switched to alfonse’s XML file - generated from the spec files. I did the process and just for kicks I am comparing the results with glLoader.

It seems that there are some inconsistency with the registery and spec files:

1)// Missing:
MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143

  1. // First parameter is const in extension - but spec file states it is an out paramter?
    vdpauSurfaceNV VDPAURegisterVideoSurfaceNV (const void *vdpSurface, enum target, sizei numTextureNames, const uint *textureNames);
    vdpauSurfaceNV VDPAURegisterOutputSurfaceNV (const void *vdpSurface, enum target, sizei numTextureNames, const uint *textureNames);

3)//Registery/Spec disagree on naming:
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV 0x8C8A,

4)// uint/sizei difference Probably should be sizei?
void glTransformFeedbackAttribsNV(GLuint count, const GLint * attribs, GLenum bufferMode);
void glTransformFeedbackAttribsNV(GLsizei count, const GLint * attribs, GLenum bufferMode);

5)// deprecated but missing from spec file
GL_RGBA_DXT5_S3TC = 0x83A4,
GL_RGBA4_DXT5_S3TC = 0x83A5,

6)// Ext registry says:
GL_PACK_RESAMPLE_SGIX = 0x842E,
GL_UNPACK_RESAMPLE_SGIX = 0x842F,
GL_RESAMPLE_REPLICATE_SGIX = 0x8433,
GL_RESAMPLE_ZERO_FILL_SGIX = 0x8434,

Spec file says:
GL_PACK_RESAMPLE_SGIX = 0x842C,
GL_UNPACK_RESAMPLE_SGIX = 0x842D,
GL_RESAMPLE_REPLICATE_SGIX = 0x842E,
GL_RESAMPLE_ZERO_FILL_SGIX = 0x842F,

  1. //uint/sizei difference
    void glVertexWeightPointerEXT(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer);
    void glVertexWeightPointerEXT(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);

  2. //Missing from spec file:
    MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F

  3. //Reg/spec file differences
    RGBA_FLOAT_MODE_ATI 0x8820
    TYPE_RGBA_FLOAT_ATI 0x8820

  4. Missing from spec file, in reg file:
    void glGetPixelTransformParameterivEXT(GLenum target, GLenum pname, const GLint* params);
    void glGetPixelTransformParameterfvEXT(GLenum target, GLenum pname, const GLfloat* params);

I am only about 50% done with the (slow) compare - but just thought I would list the ones I have found so far.

OK, I have completed by checking and here are the remaining spec file bugs I have found (I hope someone is reading this…)

Spec file:
void glPixelMapfv(GLenum map, GLint mapsize, const GLfloat * values);
void glPixelMapuiv(GLenum map, GLint mapsize, const GLuint * values);
void glPixelMapusv(GLenum map, GLint mapsize, const GLushort * values);

Documentation:
void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat * values);
void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint * values);
void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort * values);

12)Missing: GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS

  1. AMD_vertex_shader_tesselator -> should be AMD_vertex_shader_tessellator

14)Missing from spec file:
void glGetPixelTransformParameterivEXT(GLenum target, GLenum pname, const GLint* params);
void glGetPixelTransformParameterfvEXT(GLenum target, GLenum pname, const GLfloat* params);

void glDisableClientStateiEXT(GLenum array, GLuint index);
void glDisableVertexArrayAttribEXT(GLuint vaobj, GLuint index);
void glDisableVertexArrayEXT(GLuint vaobj, GLenum array);

void glEnableClientStateiEXT(GLenum array, GLuint index);
void glEnableVertexArrayAttribEXT(GLuint vaobj, GLuint index);
void glEnableVertexArrayEXT(GLuint vaobj, GLenum array);

void glGetDoublei_vEXT(GLenum pname, GLuint index, GLdouble* params);
void glGetFloati_vEXT(GLenum pname, GLuint index, GLfloat* params);
void glGetPointeri_vEXT(GLenum pname, GLuint index, void** params);

void glGetVertexArrayIntegeri_vEXT(GLuint vaobj, GLuint index, GLenum pname, GLint* param);
void glGetVertexArrayIntegervEXT(GLuint vaobj, GLenum pname, GLint* param);
void glGetVertexArrayPointeri_vEXT(GLuint vaobj, GLuint index, GLenum pname, GLvoid** param);
void glGetVertexArrayPointervEXT(GLuint vaobj, GLenum pname, GLvoid** param);

void glVertexArrayColorOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
void glVertexArrayEdgeFlagOffsetEXT(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset);
void glVertexArrayFogCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
void glVertexArrayIndexOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
void glVertexArrayMultiTexCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset);
void glVertexArrayNormalOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
void glVertexArraySecondaryColorOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
void glVertexArrayTexCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
void glVertexArrayVertexAttribIOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
void glVertexArrayVertexAttribOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
void glVertexArrayVertexOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);

  1. Misspelling of “EXTERNAL”
    WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D
    WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D
    WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D

WGL_NV_video_out
should be
WGL_NV_video_output
extension name in wglenumext.spec

Have you put these in the Bugzilla? Granted, that place doesn’t seem to get lots of attention from anyone, but the more places you can put these, the better.

Oh, and do you have some diffs I could apply to my repository, so that I can have fixed versions of the .spec files?

Have you also checked for version / deprecation issues? For example Bug 449 - TexImage3d marked as deprecated. I believe there are other deprecation issues as well.

I submitted a link to this thread to bugzilla.

@ Alfonse
No sorry, I don’t have an easy list of diffs to give you - I was just making notes as I was reviewing. (Did you notice that typename “void” maps to “*” in your XML file?)

@ tksuoran
I was not looking for version / deprecation issues in my diffs.

Did you notice that typename “void” maps to “*” in your XML file?

Yes, but that’s what the gl.tm file says.

Questions:

5)// deprecated but missing from spec file
GL_RGBA_DXT5_S3TC = 0x83A4,
GL_RGBA4_DXT5_S3TC = 0x83A5,

What extension do those come from?

Other bugs:

enum.spec thinks that ARB_texture_gather is a core extension (no _ARB suffixes). It is not, and enumext.spec correctly applies the _ARB suffixes.

I get the feeling that enum.spec is not really as rigorously updated and checked as enumext.spec.

I have incorporated these fixes into the .spec files I use to generate my XML, and I have a new distribution of the XML files with the corrections available.

Also, I put a .diff file up there that shows the specific changes compared to the .spec files currently available. To apply the .diff, the .spec files need to be in a folder called “glspecs”.

The extra tokens are from: (extension 276)
http://www.opengl.org/registry/specs/S3/s3tc.txt

It is old an deprecated, but someone has bothered to put some of the enum values in the spec files, may as well have them all…

I believe all of these have been addressed either by fixes to the extension specs, or fixes made in the old .spec files over time and now in the new XML spec files, with unlikely-to-be-changed exception of:

My recollection is that there was a screwup and SGI’s IRIX implementation actually used different enum values than the published extension spec said. It was unclear that there was a good way to resolve this. Since IRIX is dead as a doornail and likely so is this extension, I’m not going to do anything about it.

  1. //Reg/spec file differences
    RGBA_FLOAT_MODE_ATI 0x8820
    TYPE_RGBA_FLOAT_ATI 0x8820

The second one is actually a WGL enum and appears in wgl.xml / wglext.h.