[Mesa-dev] [PATCH 1/4] mesa: implement glGet(GL_TIMESTAMP) v2

Marek Olšák maraeo at gmail.com
Thu Jul 5 15:11:49 PDT 2012


This is adds a new driver function to retrieve the timestamp.
---
 src/mesa/main/dd.h  |    6 ++++++
 src/mesa/main/get.c |   17 ++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 687a38f..c8a765f 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -820,6 +820,12 @@ struct dd_function_table {
                                                   GLuint name);
    void (*DeleteSamplerObject)(struct gl_context *ctx,
                                struct gl_sampler_object *samp);
+
+   /**
+    * \name Return a timestamp in nanoseconds as defined by GL_ARB_timer_query.
+    * This should be equivalent to glGetInteger64v(GL_TIMESTAMP);
+    */
+   uint64_t (*GetTimestamp)(struct gl_context *ctx);
 };
 
 
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index a83d367..7a507ce 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -342,6 +342,7 @@ EXTRA_EXT(ARB_texture_buffer_object);
 EXTRA_EXT(OES_EGL_image_external);
 EXTRA_EXT(ARB_blend_func_extended);
 EXTRA_EXT(ARB_uniform_buffer_object);
+EXTRA_EXT(ARB_timer_query);
 
 static const int
 extra_ARB_vertex_program_ARB_fragment_program_NV_vertex_program[] = {
@@ -1353,6 +1354,9 @@ static const struct value_desc values[] = {
 
    { GL_UNIFORM_BUFFER_BINDING, LOC_CUSTOM, TYPE_INT, 0, extra_ARB_uniform_buffer_object },
 
+   /* GL_ARB_timer_query */
+   { GL_TIMESTAMP, LOC_CUSTOM, TYPE_INT64, 0, extra_ARB_timer_query }
+
 #endif /* FEATURE_GL */
 };
 
@@ -1807,7 +1811,18 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
    case GL_UNIFORM_BUFFER_BINDING:
       v->value_int = ctx->UniformBuffer->Name;
       break;
-   }   
+   /* GL_ARB_timer_query */
+   case GL_TIMESTAMP:
+      if (ctx->Driver.GetTimestamp) {
+         /* Discard the last bit to convert it to a signed integer. */
+         v->value_int64 =
+               ctx->Driver.GetTimestamp(ctx) & 0x7fffffffffffffffull;
+      }
+      else {
+         _mesa_problem(ctx, "driver doesn't implement GetTimestamp");
+      }
+      break;
+   }
 }
 
 /**
-- 
1.7.9.5



More information about the mesa-dev mailing list