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