Bladeren bron

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>
tags/mesa-9.2-rc1
Kenneth Graunke 12 jaren geleden
bovenliggende
commit
dfb056b892
2 gewijzigde bestanden met toevoegingen van 9 en 3 verwijderingen
  1. 1
    0
      src/mesa/main/dd.h
  2. 8
    3
      src/mesa/main/queryobj.c

+ 1
- 0
src/mesa/main/dd.h Bestand weergeven

@@ -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);

+ 8
- 3
src/mesa/main/queryobj.c Bestand weergeven

@@ -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);
}
}



Laden…
Annuleren
Opslaan