From 133a47107cc03a69b4b88c1fef331d507f521fa7 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 7 Aug 2015 14:54:24 -0600 Subject: [PATCH] gallium/st: add pipe_context::get_timestamp() The VMware svga driver doesn't directly support pipe_screen::get_timestamp() but we can do a work-around. However, we need a gallium context to do so. This patch adds a new pipe_context::get_timestamp() function that will only be called if the pipe_screen::get_timestamp() function is NULL. Signed-off-by: Brian Paul --- src/gallium/include/pipe/p_context.h | 7 +++++++ src/mesa/state_tracker/st_cb_queryobj.c | 13 +++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index 9d8f5bdc8d2..6f9fe767404 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -591,6 +591,13 @@ struct pipe_context { unsigned sample_index, float *out_value); + /** + * Query a timestamp in nanoseconds. This is completely equivalent to + * pipe_screen::get_timestamp() but takes a context handle for drivers + * that require a context. + */ + uint64_t (*get_timestamp)(struct pipe_context *); + /** * Flush the resource cache, so that the resource can be used * by an external client. Possible usage: diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c index 71222e80b6b..aafae16b2df 100644 --- a/src/mesa/state_tracker/st_cb_queryobj.c +++ b/src/mesa/state_tracker/st_cb_queryobj.c @@ -289,9 +289,18 @@ 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; + struct pipe_context *pipe = st_context(ctx)->pipe; + struct pipe_screen *screen = pipe->screen; - return screen->get_timestamp(screen); + /* Prefer the per-screen function */ + if (screen->get_timestamp) { + return screen->get_timestamp(screen); + } + else { + /* Fall back to the per-context function */ + assert(pipe->get_timestamp); + return pipe->get_timestamp(pipe); + } } -- 2.30.2