mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
mesa: Add a new QueryCounter() hook for TIMESTAMP queries.
In OpenGL, most queries record statistics about operations performed between a defined beginning and ending point. However, TIMESTAMP queries are different: they immediately return a single value, and there is no start/stop mechanism. Previously, Mesa implemented TIMESTAMP queries by calling EndQuery without first calling BeginQuery. Apparently this is DirectX convention, and Gallium followed suit. I personally find the asymmetry jarring, however---having BeginQuery and EndQuery handle a different set of enum values looks like a bug. It's also a bit confusing to mix the one-shot query with the start/stop model. So, add a new QueryCounter driver hook for implementing TIMESTAMP. For now, fall back to EndQuery to support drivers that don't do the new mechanism. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
6ace2e41da
commit
dfb056b892
2 changed files with 9 additions and 3 deletions
|
|
@ -638,6 +638,7 @@ struct dd_function_table {
|
|||
struct gl_query_object * (*NewQueryObject)(struct gl_context *ctx, GLuint id);
|
||||
void (*DeleteQuery)(struct gl_context *ctx, struct gl_query_object *q);
|
||||
void (*BeginQuery)(struct gl_context *ctx, struct gl_query_object *q);
|
||||
void (*QueryCounter)(struct gl_context *ctx, struct gl_query_object *q);
|
||||
void (*EndQuery)(struct gl_context *ctx, struct gl_query_object *q);
|
||||
void (*CheckQuery)(struct gl_context *ctx, struct gl_query_object *q);
|
||||
void (*WaitQuery)(struct gl_context *ctx, struct gl_query_object *q);
|
||||
|
|
|
|||
|
|
@ -486,9 +486,14 @@ _mesa_QueryCounter(GLuint id, GLenum target)
|
|||
q->Result = 0;
|
||||
q->Ready = GL_FALSE;
|
||||
|
||||
/* QueryCounter is implemented using EndQuery without BeginQuery
|
||||
* in drivers. This is actually Direct3D and Gallium convention. */
|
||||
ctx->Driver.EndQuery(ctx, q);
|
||||
if (ctx->Driver.QueryCounter) {
|
||||
ctx->Driver.QueryCounter(ctx, q);
|
||||
} else {
|
||||
/* QueryCounter is implemented using EndQuery without BeginQuery
|
||||
* in drivers. This is actually Direct3D and Gallium convention.
|
||||
*/
|
||||
ctx->Driver.EndQuery(ctx, q);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue