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 <brianp@vmware.com>
This commit is contained in:
Brian Paul
2015-08-07 14:54:24 -06:00
parent e2a1d21cb6
commit 133a47107c
2 changed files with 18 additions and 2 deletions
+7
View File
@@ -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:
+11 -2
View File
@@ -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);
}
}