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:
parent
7048095513
commit
ff7aa554a1
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue