From: Marek Olšák Date: Thu, 5 Jul 2012 18:27:01 +0000 (+0200) Subject: st/mesa: implement ARB_timer_query X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=21f78d21898dd8aa74beb6aeeabda68f4c07ae1b;p=mesa.git st/mesa: implement ARB_timer_query --- 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; + } }