gallium: add an index argument to create_query

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
Ilia Mirkin
2014-06-26 19:33:07 -04:00
parent 7f1b365f65
commit 43e4b3e311
25 changed files with 52 additions and 33 deletions

View File

@@ -90,7 +90,7 @@ query_new_value(struct hud_graph *gr)
NUM_QUERIES); NUM_QUERIES);
pipe->destroy_query(pipe, info->query[info->head]); pipe->destroy_query(pipe, info->query[info->head]);
info->query[info->head] = info->query[info->head] =
pipe->create_query(pipe, info->query_type); pipe->create_query(pipe, info->query_type, 0);
} }
else { else {
/* the last query is busy, we need to add a new one we can use /* the last query is busy, we need to add a new one we can use
@@ -98,7 +98,7 @@ query_new_value(struct hud_graph *gr)
info->head = (info->head+1) % NUM_QUERIES; info->head = (info->head+1) % NUM_QUERIES;
if (!info->query[info->head]) { if (!info->query[info->head]) {
info->query[info->head] = info->query[info->head] =
pipe->create_query(pipe, info->query_type); pipe->create_query(pipe, info->query_type, 0);
} }
} }
break; break;
@@ -119,7 +119,7 @@ query_new_value(struct hud_graph *gr)
else { else {
/* initialize */ /* initialize */
info->last_time = now; info->last_time = now;
info->query[info->head] = pipe->create_query(pipe, info->query_type); info->query[info->head] = pipe->create_query(pipe, info->query_type, 0);
pipe->begin_query(pipe, info->query[info->head]); pipe->begin_query(pipe, info->query[info->head]);
} }
} }

View File

@@ -300,6 +300,10 @@ Queries can be created with ``create_query`` and deleted with
``destroy_query``. To start a query, use ``begin_query``, and when finished, ``destroy_query``. To start a query, use ``begin_query``, and when finished,
use ``end_query`` to end the query. use ``end_query`` to end the query.
``create_query`` takes a query type (``PIPE_QUERY_*``), as well as an index,
which is the vertex stream for ``PIPE_QUERY_PRIMITIVES_GENERATED`` and
``PIPE_QUERY_PRIMITIVES_EMITTED``, and allocates a query structure.
``begin_query`` will clear/reset previous query results. ``begin_query`` will clear/reset previous query results.
``get_query_result`` is used to retrieve the results of a query. If ``get_query_result`` is used to retrieve the results of a query. If

View File

@@ -40,7 +40,7 @@
*/ */
static struct pipe_query * static struct pipe_query *
fd_create_query(struct pipe_context *pctx, unsigned query_type) fd_create_query(struct pipe_context *pctx, unsigned query_type, unsigned index)
{ {
struct fd_context *ctx = fd_context(pctx); struct fd_context *ctx = fd_context(pctx);
struct fd_query *q; struct fd_query *q;

View File

@@ -63,7 +63,8 @@ galahad_context_draw_vbo(struct pipe_context *_pipe,
static struct pipe_query * static struct pipe_query *
galahad_context_create_query(struct pipe_context *_pipe, galahad_context_create_query(struct pipe_context *_pipe,
unsigned query_type) unsigned query_type,
unsigned index)
{ {
struct galahad_context *glhd_pipe = galahad_context(_pipe); struct galahad_context *glhd_pipe = galahad_context(_pipe);
struct pipe_context *pipe = glhd_pipe->pipe; struct pipe_context *pipe = glhd_pipe->pipe;
@@ -79,7 +80,8 @@ galahad_context_create_query(struct pipe_context *_pipe,
} }
return pipe->create_query(pipe, return pipe->create_query(pipe,
query_type); query_type,
index);
} }
static void static void

View File

@@ -40,7 +40,8 @@ struct i915_query
}; };
static struct pipe_query *i915_create_query(struct pipe_context *ctx, static struct pipe_query *i915_create_query(struct pipe_context *ctx,
unsigned query_type) unsigned query_type,
unsigned index)
{ {
struct i915_query *query = CALLOC_STRUCT( i915_query ); struct i915_query *query = CALLOC_STRUCT( i915_query );

View File

@@ -57,13 +57,15 @@ identity_draw_vbo(struct pipe_context *_pipe,
static struct pipe_query * static struct pipe_query *
identity_create_query(struct pipe_context *_pipe, identity_create_query(struct pipe_context *_pipe,
unsigned query_type) unsigned query_type,
unsigned index)
{ {
struct identity_context *id_pipe = identity_context(_pipe); struct identity_context *id_pipe = identity_context(_pipe);
struct pipe_context *pipe = id_pipe->pipe; struct pipe_context *pipe = id_pipe->pipe;
return pipe->create_query(pipe, return pipe->create_query(pipe,
query_type); query_type,
index);
} }
static void static void

View File

@@ -70,7 +70,7 @@ ilo_query(struct pipe_query *query)
} }
static struct pipe_query * static struct pipe_query *
ilo_create_query(struct pipe_context *pipe, unsigned query_type) ilo_create_query(struct pipe_context *pipe, unsigned query_type, unsigned index)
{ {
struct ilo_query *q; struct ilo_query *q;

View File

@@ -50,7 +50,8 @@ static struct llvmpipe_query *llvmpipe_query( struct pipe_query *p )
static struct pipe_query * static struct pipe_query *
llvmpipe_create_query(struct pipe_context *pipe, llvmpipe_create_query(struct pipe_context *pipe,
unsigned type) unsigned type,
unsigned index)
{ {
struct llvmpipe_query *pq; struct llvmpipe_query *pq;

View File

@@ -46,7 +46,7 @@ struct noop_pipe_screen {
struct noop_query { struct noop_query {
unsigned query; unsigned query;
}; };
static struct pipe_query *noop_create_query(struct pipe_context *ctx, unsigned query_type) static struct pipe_query *noop_create_query(struct pipe_context *ctx, unsigned query_type, unsigned index)
{ {
struct noop_query *query = CALLOC_STRUCT(noop_query); struct noop_query *query = CALLOC_STRUCT(noop_query);

View File

@@ -105,7 +105,7 @@ nv30_query(struct pipe_query *pipe)
} }
static struct pipe_query * static struct pipe_query *
nv30_query_create(struct pipe_context *pipe, unsigned type) nv30_query_create(struct pipe_context *pipe, unsigned type, unsigned index)
{ {
struct nv30_query *q = CALLOC_STRUCT(nv30_query); struct nv30_query *q = CALLOC_STRUCT(nv30_query);
if (!q) if (!q)

View File

@@ -96,7 +96,7 @@ nv50_query_destroy(struct pipe_context *pipe, struct pipe_query *pq)
} }
static struct pipe_query * static struct pipe_query *
nv50_query_create(struct pipe_context *pipe, unsigned type) nv50_query_create(struct pipe_context *pipe, unsigned type, unsigned index)
{ {
struct nv50_context *nv50 = nv50_context(pipe); struct nv50_context *nv50 = nv50_context(pipe);
struct nv50_query *q; struct nv50_query *q;

View File

@@ -1028,7 +1028,7 @@ nv50_so_target_create(struct pipe_context *pipe,
if (nouveau_context(pipe)->screen->class_3d >= NVA0_3D_CLASS) { if (nouveau_context(pipe)->screen->class_3d >= NVA0_3D_CLASS) {
targ->pq = pipe->create_query(pipe, targ->pq = pipe->create_query(pipe,
NVA0_QUERY_STREAM_OUTPUT_BUFFER_OFFSET); NVA0_QUERY_STREAM_OUTPUT_BUFFER_OFFSET, 0);
if (!targ->pq) { if (!targ->pq) {
FREE(targ); FREE(targ);
return NULL; return NULL;

View File

@@ -108,7 +108,7 @@ nvc0_query_destroy(struct pipe_context *pipe, struct pipe_query *pq)
} }
static struct pipe_query * static struct pipe_query *
nvc0_query_create(struct pipe_context *pipe, unsigned type) nvc0_query_create(struct pipe_context *pipe, unsigned type, unsigned index)
{ {
struct nvc0_context *nvc0 = nvc0_context(pipe); struct nvc0_context *nvc0 = nvc0_context(pipe);
struct nvc0_query *q; struct nvc0_query *q;

View File

@@ -1022,7 +1022,7 @@ nvc0_so_target_create(struct pipe_context *pipe,
if (!targ) if (!targ)
return NULL; return NULL;
targ->pq = pipe->create_query(pipe, NVC0_QUERY_TFB_BUFFER_OFFSET); targ->pq = pipe->create_query(pipe, NVC0_QUERY_TFB_BUFFER_OFFSET, 0);
if (!targ->pq) { if (!targ->pq) {
FREE(targ); FREE(targ);
return NULL; return NULL;

View File

@@ -30,7 +30,8 @@
#include <stdio.h> #include <stdio.h>
static struct pipe_query *r300_create_query(struct pipe_context *pipe, static struct pipe_query *r300_create_query(struct pipe_context *pipe,
unsigned query_type) unsigned query_type,
unsigned index)
{ {
struct r300_context *r300 = r300_context(pipe); struct r300_context *r300 = r300_context(pipe);
struct r300_screen *r300screen = r300->screen; struct r300_screen *r300screen = r300->screen;

View File

@@ -346,7 +346,7 @@ static void r600_emit_query_predication(struct r600_common_context *ctx, struct
} }
} }
static struct pipe_query *r600_create_query(struct pipe_context *ctx, unsigned query_type) static struct pipe_query *r600_create_query(struct pipe_context *ctx, unsigned query_type, unsigned index)
{ {
struct r600_common_context *rctx = (struct r600_common_context *)ctx; struct r600_common_context *rctx = (struct r600_common_context *)ctx;
struct r600_query *query; struct r600_query *query;

View File

@@ -134,14 +134,16 @@ rbug_draw_vbo(struct pipe_context *_pipe, const struct pipe_draw_info *info)
static struct pipe_query * static struct pipe_query *
rbug_create_query(struct pipe_context *_pipe, rbug_create_query(struct pipe_context *_pipe,
unsigned query_type) unsigned query_type,
unsigned index)
{ {
struct rbug_context *rb_pipe = rbug_context(_pipe); struct rbug_context *rb_pipe = rbug_context(_pipe);
struct pipe_context *pipe = rb_pipe->pipe; struct pipe_context *pipe = rb_pipe->pipe;
pipe_mutex_lock(rb_pipe->call_mutex); pipe_mutex_lock(rb_pipe->call_mutex);
return pipe->create_query(pipe, return pipe->create_query(pipe,
query_type); query_type,
index);
pipe_mutex_unlock(rb_pipe->call_mutex); pipe_mutex_unlock(rb_pipe->call_mutex);
} }

View File

@@ -53,7 +53,8 @@ static struct softpipe_query *softpipe_query( struct pipe_query *p )
static struct pipe_query * static struct pipe_query *
softpipe_create_query(struct pipe_context *pipe, softpipe_create_query(struct pipe_context *pipe,
unsigned type) unsigned type,
unsigned index)
{ {
struct softpipe_query* sq; struct softpipe_query* sq;

View File

@@ -74,7 +74,9 @@ svga_get_query_result(struct pipe_context *pipe,
static struct pipe_query * static struct pipe_query *
svga_create_query( struct pipe_context *pipe, unsigned query_type ) svga_create_query(struct pipe_context *pipe,
unsigned query_type,
unsigned index)
{ {
struct svga_context *svga = svga_context( pipe ); struct svga_context *svga = svga_context( pipe );
struct svga_screen *svgascreen = svga_screen(pipe->screen); struct svga_screen *svgascreen = svga_screen(pipe->screen);

View File

@@ -127,7 +127,8 @@ trace_context_draw_vbo(struct pipe_context *_pipe,
static INLINE struct pipe_query * static INLINE struct pipe_query *
trace_context_create_query(struct pipe_context *_pipe, trace_context_create_query(struct pipe_context *_pipe,
unsigned query_type) unsigned query_type,
unsigned index)
{ {
struct trace_context *tr_ctx = trace_context(_pipe); struct trace_context *tr_ctx = trace_context(_pipe);
struct pipe_context *pipe = tr_ctx->pipe; struct pipe_context *pipe = tr_ctx->pipe;
@@ -137,8 +138,9 @@ trace_context_create_query(struct pipe_context *_pipe,
trace_dump_arg(ptr, pipe); trace_dump_arg(ptr, pipe);
trace_dump_arg(query_type, query_type); trace_dump_arg(query_type, query_type);
trace_dump_arg(int, index);
query = pipe->create_query(pipe, query_type); query = pipe->create_query(pipe, query_type, index);
trace_dump_ret(ptr, query); trace_dump_ret(ptr, query);

View File

@@ -109,7 +109,8 @@ struct pipe_context {
*/ */
/*@{*/ /*@{*/
struct pipe_query *(*create_query)( struct pipe_context *pipe, struct pipe_query *(*create_query)( struct pipe_context *pipe,
unsigned query_type ); unsigned query_type,
unsigned index );
void (*destroy_query)(struct pipe_context *pipe, void (*destroy_query)(struct pipe_context *pipe,
struct pipe_query *q); struct pipe_query *q);

View File

@@ -29,7 +29,7 @@ using namespace clover;
timestamp::query::query(command_queue &q) : timestamp::query::query(command_queue &q) :
q(q), q(q),
_query(q.pipe->create_query(q.pipe, PIPE_QUERY_TIMESTAMP)) { _query(q.pipe->create_query(q.pipe, PIPE_QUERY_TIMESTAMP, 0)) {
} }
timestamp::query::query(query &&other) : timestamp::query::query(query &&other) :

View File

@@ -169,8 +169,8 @@ draw(void)
PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL, PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
&clear_color, 1.0, 0); &clear_color, 1.0, 0);
q1 = info.ctx->create_query(info.ctx, PIPE_QUERY_OCCLUSION_COUNTER); q1 = info.ctx->create_query(info.ctx, PIPE_QUERY_OCCLUSION_COUNTER, 0);
q2 = info.ctx->create_query(info.ctx, PIPE_QUERY_OCCLUSION_COUNTER); q2 = info.ctx->create_query(info.ctx, PIPE_QUERY_OCCLUSION_COUNTER, 0);
/* draw first, large object */ /* draw first, large object */
set_vertices(obj1_vertices, sizeof(obj1_vertices)); set_vertices(obj1_vertices, sizeof(obj1_vertices));

View File

@@ -665,7 +665,7 @@ class Context(Dispatcher):
def surface_destroy(self, surface): def surface_destroy(self, surface):
self.interpreter.unregister_object(surface) self.interpreter.unregister_object(surface)
def create_query(self, query_type): def create_query(self, query_type, index):
return query_type return query_type
def destroy_query(self, query): def destroy_query(self, query):

View File

@@ -132,13 +132,13 @@ st_BeginQuery(struct gl_context *ctx, struct gl_query_object *q)
type == PIPE_QUERY_TIMESTAMP) { type == PIPE_QUERY_TIMESTAMP) {
/* Determine time elapsed by emitting two timestamp queries. */ /* Determine time elapsed by emitting two timestamp queries. */
if (!stq->pq_begin) { if (!stq->pq_begin) {
stq->pq_begin = pipe->create_query(pipe, type); stq->pq_begin = pipe->create_query(pipe, type, 0);
stq->type = type; stq->type = type;
} }
pipe->end_query(pipe, stq->pq_begin); pipe->end_query(pipe, stq->pq_begin);
} else { } else {
if (!stq->pq) { if (!stq->pq) {
stq->pq = pipe->create_query(pipe, type); stq->pq = pipe->create_query(pipe, type, 0);
stq->type = type; stq->type = type;
} }
if (stq->pq) { if (stq->pq) {
@@ -164,7 +164,7 @@ st_EndQuery(struct gl_context *ctx, struct gl_query_object *q)
if ((q->Target == GL_TIMESTAMP || if ((q->Target == GL_TIMESTAMP ||
q->Target == GL_TIME_ELAPSED) && q->Target == GL_TIME_ELAPSED) &&
!stq->pq) { !stq->pq) {
stq->pq = pipe->create_query(pipe, PIPE_QUERY_TIMESTAMP); stq->pq = pipe->create_query(pipe, PIPE_QUERY_TIMESTAMP, 0);
stq->type = PIPE_QUERY_TIMESTAMP; stq->type = PIPE_QUERY_TIMESTAMP;
} }