diff options
author | Marek Olšák <[email protected]> | 2012-07-05 20:27:01 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2012-07-10 19:04:12 +0200 |
commit | 21f78d21898dd8aa74beb6aeeabda68f4c07ae1b (patch) | |
tree | 9470352b9031837934ed284d55982890737e71c1 | |
parent | bcc735aaca3b305d05c28e4076996d91b19d80fd (diff) |
st/mesa: implement ARB_timer_query
-rw-r--r-- | src/mesa/state_tracker/st_cb_queryobj.c | 14 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_extensions.c | 5 |
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; + } } |