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:
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user