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>
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:
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);
+ }
}