summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/auxiliary/hud/hud_driver_query.c6
-rw-r--r--src/gallium/docs/source/context.rst4
-rw-r--r--src/gallium/drivers/freedreno/freedreno_query.c2
-rw-r--r--src/gallium/drivers/galahad/glhd_context.c6
-rw-r--r--src/gallium/drivers/i915/i915_query.c3
-rw-r--r--src/gallium/drivers/identity/id_context.c6
-rw-r--r--src/gallium/drivers/ilo/ilo_query.c2
-rw-r--r--src/gallium/drivers/llvmpipe/lp_query.c3
-rw-r--r--src/gallium/drivers/noop/noop_pipe.c2
-rw-r--r--src/gallium/drivers/nouveau/nv30/nv30_query.c2
-rw-r--r--src/gallium/drivers/nouveau/nv50/nv50_query.c2
-rw-r--r--src/gallium/drivers/nouveau/nv50/nv50_state.c2
-rw-r--r--src/gallium/drivers/nouveau/nvc0/nvc0_query.c2
-rw-r--r--src/gallium/drivers/nouveau/nvc0/nvc0_state.c2
-rw-r--r--src/gallium/drivers/r300/r300_query.c3
-rw-r--r--src/gallium/drivers/radeon/r600_query.c2
-rw-r--r--src/gallium/drivers/rbug/rbug_context.c6
-rw-r--r--src/gallium/drivers/softpipe/sp_query.c3
-rw-r--r--src/gallium/drivers/svga/svga_pipe_query.c4
-rw-r--r--src/gallium/drivers/trace/tr_context.c6
-rw-r--r--src/gallium/include/pipe/p_context.h3
-rw-r--r--src/gallium/state_trackers/clover/core/timestamp.cpp2
-rw-r--r--src/gallium/tests/graw/occlusion-query.c4
-rwxr-xr-xsrc/gallium/tools/trace/dump_state.py2
-rw-r--r--src/mesa/state_tracker/st_cb_queryobj.c6
25 files changed, 52 insertions, 33 deletions
diff --git a/src/gallium/auxiliary/hud/hud_driver_query.c b/src/gallium/auxiliary/hud/hud_driver_query.c
index 0f52e18cc2d..b48708c2fe6 100644
--- a/src/gallium/auxiliary/hud/hud_driver_query.c
+++ b/src/gallium/auxiliary/hud/hud_driver_query.c
@@ -90,7 +90,7 @@ query_new_value(struct hud_graph *gr)
NUM_QUERIES);
pipe->destroy_query(pipe, info->query[info->head]);
info->query[info->head] =
- pipe->create_query(pipe, info->query_type);
+ pipe->create_query(pipe, info->query_type, 0);
}
else {
/* 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;
if (!info->query[info->head]) {
info->query[info->head] =
- pipe->create_query(pipe, info->query_type);
+ pipe->create_query(pipe, info->query_type, 0);
}
}
break;
@@ -119,7 +119,7 @@ query_new_value(struct hud_graph *gr)
else {
/* initialize */
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]);
}
}
diff --git a/src/gallium/docs/source/context.rst b/src/gallium/docs/source/context.rst
index a9625f39edc..5861f46b30d 100644
--- a/src/gallium/docs/source/context.rst
+++ b/src/gallium/docs/source/context.rst
@@ -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,
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.
``get_query_result`` is used to retrieve the results of a query. If
diff --git a/src/gallium/drivers/freedreno/freedreno_query.c b/src/gallium/drivers/freedreno/freedreno_query.c
index 8753a4b02c9..cb3b49a5f58 100644
--- a/src/gallium/drivers/freedreno/freedreno_query.c
+++ b/src/gallium/drivers/freedreno/freedreno_query.c
@@ -40,7 +40,7 @@
*/
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_query *q;
diff --git a/src/gallium/drivers/galahad/glhd_context.c b/src/gallium/drivers/galahad/glhd_context.c
index 2e61e5924a6..79d549585b7 100644
--- a/src/gallium/drivers/galahad/glhd_context.c
+++ b/src/gallium/drivers/galahad/glhd_context.c
@@ -63,7 +63,8 @@ galahad_context_draw_vbo(struct pipe_context *_pipe,
static struct pipe_query *
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 pipe_context *pipe = glhd_pipe->pipe;
@@ -79,7 +80,8 @@ galahad_context_create_query(struct pipe_context *_pipe,
}
return pipe->create_query(pipe,
- query_type);
+ query_type,
+ index);
}
static void
diff --git a/src/gallium/drivers/i915/i915_query.c b/src/gallium/drivers/i915/i915_query.c
index 0efceb192b6..1500d970b0f 100644
--- a/src/gallium/drivers/i915/i915_query.c
+++ b/src/gallium/drivers/i915/i915_query.c
@@ -40,7 +40,8 @@ struct i915_query
};
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 );
diff --git a/src/gallium/drivers/identity/id_context.c b/src/gallium/drivers/identity/id_context.c
index 00414b89624..97b39671fce 100644
--- a/src/gallium/drivers/identity/id_context.c
+++ b/src/gallium/drivers/identity/id_context.c
@@ -57,13 +57,15 @@ identity_draw_vbo(struct pipe_context *_pipe,
static struct pipe_query *
identity_create_query(struct pipe_context *_pipe,
- unsigned query_type)
+ unsigned query_type,
+ unsigned index)
{
struct identity_context *id_pipe = identity_context(_pipe);
struct pipe_context *pipe = id_pipe->pipe;
return pipe->create_query(pipe,
- query_type);
+ query_type,
+ index);
}
static void
diff --git a/src/gallium/drivers/ilo/ilo_query.c b/src/gallium/drivers/ilo/ilo_query.c
index 71bcc0f983f..46e6bf766e1 100644
--- a/src/gallium/drivers/ilo/ilo_query.c
+++ b/src/gallium/drivers/ilo/ilo_query.c
@@ -70,7 +70,7 @@ ilo_query(struct pipe_query *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;
diff --git a/src/gallium/drivers/llvmpipe/lp_query.c b/src/gallium/drivers/llvmpipe/lp_query.c
index 2bc9c1aeb86..8f41f56f1c4 100644
--- a/src/gallium/drivers/llvmpipe/lp_query.c
+++ b/src/gallium/drivers/llvmpipe/lp_query.c
@@ -50,7 +50,8 @@ static struct llvmpipe_query *llvmpipe_query( struct pipe_query *p )
static struct pipe_query *
llvmpipe_create_query(struct pipe_context *pipe,
- unsigned type)
+ unsigned type,
+ unsigned index)
{
struct llvmpipe_query *pq;
diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c
index 27197a50454..8cb8c702c0e 100644
--- a/src/gallium/drivers/noop/noop_pipe.c
+++ b/src/gallium/drivers/noop/noop_pipe.c
@@ -46,7 +46,7 @@ struct noop_pipe_screen {
struct noop_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);
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_query.c b/src/gallium/drivers/nouveau/nv30/nv30_query.c
index 01b3817c45d..ace2cdcd795 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_query.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_query.c
@@ -105,7 +105,7 @@ nv30_query(struct pipe_query *pipe)
}
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);
if (!q)
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query.c b/src/gallium/drivers/nouveau/nv50/nv50_query.c
index 6a17139e1cd..a373dc60a67 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_query.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_query.c
@@ -96,7 +96,7 @@ nv50_query_destroy(struct pipe_context *pipe, struct pipe_query *pq)
}
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_query *q;
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_state.c b/src/gallium/drivers/nouveau/nv50/nv50_state.c
index d0bc7ff1a2a..915ee26ecac 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_state.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_state.c
@@ -1028,7 +1028,7 @@ nv50_so_target_create(struct pipe_context *pipe,
if (nouveau_context(pipe)->screen->class_3d >= NVA0_3D_CLASS) {
targ->pq = pipe->create_query(pipe,
- NVA0_QUERY_STREAM_OUTPUT_BUFFER_OFFSET);
+ NVA0_QUERY_STREAM_OUTPUT_BUFFER_OFFSET, 0);
if (!targ->pq) {
FREE(targ);
return NULL;
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
index 856f685ceb6..dc544d36efc 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
@@ -108,7 +108,7 @@ nvc0_query_destroy(struct pipe_context *pipe, struct pipe_query *pq)
}
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_query *q;
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
index c92aaaca578..ef9d479ca07 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
@@ -1022,7 +1022,7 @@ nvc0_so_target_create(struct pipe_context *pipe,
if (!targ)
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) {
FREE(targ);
return NULL;
diff --git a/src/gallium/drivers/r300/r300_query.c b/src/gallium/drivers/r300/r300_query.c
index fbf44c68419..5305ebdcb7f 100644
--- a/src/gallium/drivers/r300/r300_query.c
+++ b/src/gallium/drivers/r300/r300_query.c
@@ -30,7 +30,8 @@
#include <stdio.h>
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_screen *r300screen = r300->screen;
diff --git a/src/gallium/drivers/radeon/r600_query.c b/src/gallium/drivers/radeon/r600_query.c
index c4394416003..92863cb2143 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -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_query *query;
diff --git a/src/gallium/drivers/rbug/rbug_context.c b/src/gallium/drivers/rbug/rbug_context.c
index 2b99ddd7289..62fe543b761 100644
--- a/src/gallium/drivers/rbug/rbug_context.c
+++ b/src/gallium/drivers/rbug/rbug_context.c
@@ -134,14 +134,16 @@ rbug_draw_vbo(struct pipe_context *_pipe, const struct pipe_draw_info *info)
static struct pipe_query *
rbug_create_query(struct pipe_context *_pipe,
- unsigned query_type)
+ unsigned query_type,
+ unsigned index)
{
struct rbug_context *rb_pipe = rbug_context(_pipe);
struct pipe_context *pipe = rb_pipe->pipe;
pipe_mutex_lock(rb_pipe->call_mutex);
return pipe->create_query(pipe,
- query_type);
+ query_type,
+ index);
pipe_mutex_unlock(rb_pipe->call_mutex);
}
diff --git a/src/gallium/drivers/softpipe/sp_query.c b/src/gallium/drivers/softpipe/sp_query.c
index 88223708f4f..e2fc917b361 100644
--- a/src/gallium/drivers/softpipe/sp_query.c
+++ b/src/gallium/drivers/softpipe/sp_query.c
@@ -53,7 +53,8 @@ static struct softpipe_query *softpipe_query( struct pipe_query *p )
static struct pipe_query *
softpipe_create_query(struct pipe_context *pipe,
- unsigned type)
+ unsigned type,
+ unsigned index)
{
struct softpipe_query* sq;
diff --git a/src/gallium/drivers/svga/svga_pipe_query.c b/src/gallium/drivers/svga/svga_pipe_query.c
index 0283aa90790..756e2b8baf4 100644
--- a/src/gallium/drivers/svga/svga_pipe_query.c
+++ b/src/gallium/drivers/svga/svga_pipe_query.c
@@ -74,7 +74,9 @@ svga_get_query_result(struct pipe_context *pipe,
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_screen *svgascreen = svga_screen(pipe->screen);
diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c
index 3e995980e92..551c3facb64 100644
--- a/src/gallium/drivers/trace/tr_context.c
+++ b/src/gallium/drivers/trace/tr_context.c
@@ -127,7 +127,8 @@ trace_context_draw_vbo(struct pipe_context *_pipe,
static INLINE struct pipe_query *
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 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(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);
diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
index bc435308d2e..af5674ff753 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -109,7 +109,8 @@ struct pipe_context {
*/
/*@{*/
struct pipe_query *(*create_query)( struct pipe_context *pipe,
- unsigned query_type );
+ unsigned query_type,
+ unsigned index );
void (*destroy_query)(struct pipe_context *pipe,
struct pipe_query *q);
diff --git a/src/gallium/state_trackers/clover/core/timestamp.cpp b/src/gallium/state_trackers/clover/core/timestamp.cpp
index f168d61b6c9..481c4f9d2ff 100644
--- a/src/gallium/state_trackers/clover/core/timestamp.cpp
+++ b/src/gallium/state_trackers/clover/core/timestamp.cpp
@@ -29,7 +29,7 @@ using namespace clover;
timestamp::query::query(command_queue &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) :
diff --git a/src/gallium/tests/graw/occlusion-query.c b/src/gallium/tests/graw/occlusion-query.c
index f5227e33e9d..d03934f9d19 100644
--- a/src/gallium/tests/graw/occlusion-query.c
+++ b/src/gallium/tests/graw/occlusion-query.c
@@ -169,8 +169,8 @@ draw(void)
PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
&clear_color, 1.0, 0);
- q1 = info.ctx->create_query(info.ctx, PIPE_QUERY_OCCLUSION_COUNTER);
- q2 = 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, 0);
/* draw first, large object */
set_vertices(obj1_vertices, sizeof(obj1_vertices));
diff --git a/src/gallium/tools/trace/dump_state.py b/src/gallium/tools/trace/dump_state.py
index 8bb29e7d6c1..e726f7b2ad3 100755
--- a/src/gallium/tools/trace/dump_state.py
+++ b/src/gallium/tools/trace/dump_state.py
@@ -665,7 +665,7 @@ class Context(Dispatcher):
def surface_destroy(self, surface):
self.interpreter.unregister_object(surface)
- def create_query(self, query_type):
+ def create_query(self, query_type, index):
return query_type
def destroy_query(self, query):
diff --git a/src/mesa/state_tracker/st_cb_queryobj.c b/src/mesa/state_tracker/st_cb_queryobj.c
index 78a737094cd..1aaa322f615 100644
--- a/src/mesa/state_tracker/st_cb_queryobj.c
+++ b/src/mesa/state_tracker/st_cb_queryobj.c
@@ -132,13 +132,13 @@ st_BeginQuery(struct gl_context *ctx, struct gl_query_object *q)
type == PIPE_QUERY_TIMESTAMP) {
/* Determine time elapsed by emitting two timestamp queries. */
if (!stq->pq_begin) {
- stq->pq_begin = pipe->create_query(pipe, type);
+ stq->pq_begin = pipe->create_query(pipe, type, 0);
stq->type = type;
}
pipe->end_query(pipe, stq->pq_begin);
} else {
if (!stq->pq) {
- stq->pq = pipe->create_query(pipe, type);
+ stq->pq = pipe->create_query(pipe, type, 0);
stq->type = type;
}
if (stq->pq) {
@@ -164,7 +164,7 @@ st_EndQuery(struct gl_context *ctx, struct gl_query_object *q)
if ((q->Target == GL_TIMESTAMP ||
q->Target == GL_TIME_ELAPSED) &&
!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;
}