mesa/swrast/st: add ARB_occlusion_query2 support.

This gets my vote for most pointless extension of all time, I'm guessing
some driver could possibly optimise for this instead of counting it might
just get a true/false, but I'm not really sure.

need this to eventually advertise 3.3 despite its total uselessness.

Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2010-09-12 06:31:30 +10:00
parent 7048095513
commit ff7aa554a1
4 changed files with 34 additions and 13 deletions

View File

@ -71,7 +71,7 @@ GL 3.3:
GLSL 3.30 not started
GL_ARB_blend_func_extended not started
GL_ARB_explicit_attrib_location DONE (swrast, i915, i965)
GL_ARB_occlusion_query2 not started
GL_ARB_occlusion_query2 DONE (swrast, gallium)
GL_ARB_sampler_objects not started
GL_ARB_texture_rgb10_a2ui not started
GL_ARB_texture_swizzle DONE (same as EXT version)

View File

@ -259,6 +259,7 @@ _mesa_enable_sw_extensions(struct gl_context *ctx)
ctx->Extensions.ARB_multitexture = GL_TRUE;
#if FEATURE_queryobj
ctx->Extensions.ARB_occlusion_query = GL_TRUE;
ctx->Extensions.ARB_occlusion_query2 = GL_TRUE;
#endif
ctx->Extensions.ARB_point_sprite = GL_TRUE;
#if FEATURE_ARB_shader_objects

View File

@ -143,6 +143,11 @@ get_query_binding_point(struct gl_context *ctx, GLenum target)
return &ctx->Query.CurrentOcclusionObject;
else
return NULL;
case GL_ANY_SAMPLES_PASSED:
if (ctx->Extensions.ARB_occlusion_query2)
return &ctx->Query.CurrentOcclusionObject;
else
return NULL;
case GL_TIME_ELAPSED_EXT:
if (ctx->Extensions.EXT_timer_query)
return &ctx->Query.CurrentTimerObject;
@ -378,12 +383,19 @@ _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params)
if (!q->Ready)
ctx->Driver.WaitQuery(ctx, q);
/* if result is too large for returned type, clamp to max value */
if (q->Result > 0x7fffffff) {
*params = 0x7fffffff;
}
else {
*params = (GLint)q->Result;
}
if (q->Target == GL_ANY_SAMPLES_PASSED) {
if (q->Result)
*params = GL_TRUE;
else
*params = GL_FALSE;
} else {
if (q->Result > 0x7fffffff) {
*params = 0x7fffffff;
}
else {
*params = (GLint)q->Result;
}
}
break;
case GL_QUERY_RESULT_AVAILABLE_ARB:
if (!q->Ready)
@ -418,12 +430,19 @@ _mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params)
if (!q->Ready)
ctx->Driver.WaitQuery(ctx, q);
/* if result is too large for returned type, clamp to max value */
if (q->Result > 0xffffffff) {
*params = 0xffffffff;
}
else {
*params = (GLuint)q->Result;
}
if (q->Target == GL_ANY_SAMPLES_PASSED) {
if (q->Result)
*params = GL_TRUE;
else
*params = GL_FALSE;
} else {
if (q->Result > 0xffffffff) {
*params = 0xffffffff;
}
else {
*params = (GLuint)q->Result;
}
}
break;
case GL_QUERY_RESULT_AVAILABLE_ARB:
if (!q->Ready)

View File

@ -343,6 +343,7 @@ void st_init_extensions(struct st_context *st)
if (screen->get_param(screen, PIPE_CAP_OCCLUSION_QUERY)) {
ctx->Extensions.ARB_occlusion_query = GL_TRUE;
ctx->Extensions.ARB_occlusion_query2 = GL_TRUE;
}
if (screen->get_param(screen, PIPE_CAP_TIMER_QUERY)) {
ctx->Extensions.EXT_timer_query = GL_TRUE;