Just noticed this on a list of things for r300 todo, seems kinda
pointless but what do I know.

I wonder if there is hw that can do OQ2 and can't do OQ, for which it
might make sense.

Dave.
From 8c47bdfa2af8fab238a548a3d01aa54e04dd87b8 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airl...@redhat.com>
Date: Sun, 12 Sep 2010 06:31:30 +1000
Subject: [PATCH] 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.

I just noticed it on the R300ToDo.

Signed-off-by: Dave Airlie <airl...@redhat.com>
---
 src/mesa/main/extensions.c             |    1 +
 src/mesa/main/queryobj.c               |   43 +++++++++++++++++++++++---------
 src/mesa/state_tracker/st_extensions.c |    1 +
 3 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 50b97f5..eef2297 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -261,6 +261,7 @@ _mesa_enable_sw_extensions(GLcontext *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
diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c
index a907dac..25bb68c 100644
--- a/src/mesa/main/queryobj.c
+++ b/src/mesa/main/queryobj.c
@@ -143,6 +143,11 @@ get_query_binding_point(GLcontext *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)
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 91bd5a9..4c32bb1 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -309,6 +309,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;
-- 
1.7.2.2

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to