summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2012-07-05 20:27:01 +0200
committerMarek Olšák <[email protected]>2012-07-10 19:04:12 +0200
commit21f78d21898dd8aa74beb6aeeabda68f4c07ae1b (patch)
tree9470352b9031837934ed284d55982890737e71c1
parentbcc735aaca3b305d05c28e4076996d91b19d80fd (diff)
st/mesa: implement ARB_timer_query
-rw-r--r--src/mesa/state_tracker/st_cb_queryobj.c14
-rw-r--r--src/mesa/state_tracker/st_extensions.c5
2 files changed, 19 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c
index b6a236e8d99..e5e4a81dcad 100644
--- a/src/mesa/state_tracker/st_cb_queryobj.c
+++ b/src/mesa/state_tracker/st_cb_queryobj.c
@@ -39,6 +39,7 @@
#include "pipe/p_context.h"
#include "pipe/p_defines.h"
+#include "pipe/p_screen.h"
#include "st_context.h"
#include "st_cb_queryobj.h"
#include "st_cb_bitmap.h"
@@ -133,6 +134,11 @@ st_EndQuery(struct gl_context *ctx, struct gl_query_object *q)
st_flush_bitmap_cache(st_context(ctx));
+ if (q->Target == GL_TIMESTAMP && !stq->pq) {
+ stq->pq = pipe->create_query(pipe, PIPE_QUERY_TIMESTAMP);
+ stq->type = PIPE_QUERY_TIMESTAMP;
+ }
+
pipe->end_query(pipe, stq->pq);
}
@@ -169,6 +175,13 @@ st_CheckQuery(struct gl_context *ctx, struct gl_query_object *q)
}
+static uint64_t
+st_GetTimestamp(struct gl_context *ctx)
+{
+ struct pipe_screen *screen = st_context(ctx)->pipe->screen;
+
+ return screen->get_timestamp(screen);
+}
void st_init_query_functions(struct dd_function_table *functions)
@@ -179,6 +192,7 @@ void st_init_query_functions(struct dd_function_table *functions)
functions->EndQuery = st_EndQuery;
functions->WaitQuery = st_WaitQuery;
functions->CheckQuery = st_CheckQuery;
+ functions->GetTimestamp = st_GetTimestamp;
}
#endif /* FEATURE_queryobj */
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index fd95075368a..5b333ad2c82 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -636,4 +636,9 @@ void st_init_extensions(struct st_context *st)
if (ctx->Const.MaxDualSourceDrawBuffers > 0)
ctx->Extensions.ARB_blend_func_extended = GL_TRUE;
+
+ if (screen->get_param(screen, PIPE_CAP_TIMER_QUERY) &&
+ screen->get_param(screen, PIPE_CAP_QUERY_TIMESTAMP)) {
+ ctx->Extensions.ARB_timer_query = GL_TRUE;
+ }
}