Browse Source

mesa: implement GL3 GL_NUM_EXTENSIONS query

tags/7.8-rc1
Brian Paul 15 years ago
parent
commit
802b808939
5 changed files with 46 additions and 0 deletions
  1. 25
    0
      src/mesa/main/extensions.c
  2. 4
    0
      src/mesa/main/extensions.h
  3. 12
    0
      src/mesa/main/get.c
  4. 3
    0
      src/mesa/main/get_gen.py
  5. 2
    0
      src/mesa/main/mtypes.h

+ 25
- 0
src/mesa/main/extensions.c View File

@@ -700,3 +700,28 @@ _mesa_make_extension_string( GLcontext *ctx )

return (GLubyte *) s;
}


/**
* Return number of enabled extensions.
*/
GLuint
_mesa_get_extension_count(GLcontext *ctx)
{
GLuint i;

/* only count once */
if (!ctx->Extensions.Count) {
for (i = 0; i < Elements(default_extensions); i++) {
if (extension_enabled(ctx, i)) {
ctx->Extensions.Count++;
}
}
}

if (0)
_mesa_debug(ctx, "%u of %d extensions enabled\n", ctx->Extensions.Count,
Elements(default_extensions));

return ctx->Extensions.Count;
}

+ 4
- 0
src/mesa/main/extensions.h View File

@@ -64,6 +64,10 @@ extern void _mesa_init_extensions(GLcontext *ctx);

extern GLubyte *_mesa_make_extension_string(GLcontext *ctx);

extern GLuint
_mesa_get_extension_count(GLcontext *ctx);


#else

/** No-op */

+ 12
- 0
src/mesa/main/get.c View File

@@ -1899,6 +1899,9 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
CHECK_EXT1(ARB_sync, "GetBooleanv");
params[0] = INT64_TO_BOOLEAN(ctx->Const.MaxServerWaitTimeout);
break;
case GL_NUM_EXTENSIONS:
params[0] = INT_TO_BOOLEAN(_mesa_get_extension_count(ctx));
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, "glGetBooleanv(pname=0x%x)", pname);
}
@@ -3734,6 +3737,9 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
CHECK_EXT1(ARB_sync, "GetFloatv");
params[0] = (GLfloat)(ctx->Const.MaxServerWaitTimeout);
break;
case GL_NUM_EXTENSIONS:
params[0] = (GLfloat)(_mesa_get_extension_count(ctx));
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, "glGetFloatv(pname=0x%x)", pname);
}
@@ -5569,6 +5575,9 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
CHECK_EXT1(ARB_sync, "GetIntegerv");
params[0] = INT64_TO_INT(ctx->Const.MaxServerWaitTimeout);
break;
case GL_NUM_EXTENSIONS:
params[0] = _mesa_get_extension_count(ctx);
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, "glGetIntegerv(pname=0x%x)", pname);
}
@@ -7405,6 +7414,9 @@ _mesa_GetInteger64v( GLenum pname, GLint64 *params )
CHECK_EXT1(ARB_sync, "GetInteger64v");
params[0] = ctx->Const.MaxServerWaitTimeout;
break;
case GL_NUM_EXTENSIONS:
params[0] = (GLint64)(_mesa_get_extension_count(ctx));
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, "glGetInteger64v(pname=0x%x)", pname);
}

+ 3
- 0
src/mesa/main/get_gen.py View File

@@ -1030,6 +1030,9 @@ StateVars = [
# GL_ARB_sync
( "GL_MAX_SERVER_WAIT_TIMEOUT", GLint64, ["ctx->Const.MaxServerWaitTimeout"], "",
["ARB_sync"] ),

# GL3
( "GL_NUM_EXTENSIONS", GLint, ["_mesa_get_extension_count(ctx)"], "", None ),
]



+ 2
- 0
src/mesa/main/mtypes.h View File

@@ -2512,6 +2512,8 @@ struct gl_extensions
GLboolean S3_s3tc;
/** The extension string */
const GLubyte *String;
/** Number of supported extensions */
GLuint Count;
};



Loading…
Cancel
Save