[Mesa-dev] [PATCH 3/8] gallium: add a stream argument to create_query

Roland Scheidegger sroland at vmware.com
Fri Jun 27 18:49:31 PDT 2014


So I guess it's an index then. It's just slightly more code to adjust
that's all :-).

Roland

Am 27.06.2014 16:54, schrieb Marek Olšák:
> FWIW, I prefer adding an "index" to create_query.
> 
> Marek
> 
> On Fri, Jun 27, 2014 at 4:11 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>> On Fri, Jun 27, 2014 at 9:56 AM, Roland Scheidegger <sroland at vmware.com> wrote:
>>> Am 27.06.2014 06:40, schrieb Ilia Mirkin:
>>>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>>>> ---
>>>>  src/gallium/auxiliary/hud/hud_driver_query.c         | 6 +++---
>>>>  src/gallium/drivers/freedreno/freedreno_query.c      | 2 +-
>>>>  src/gallium/drivers/galahad/glhd_context.c           | 6 ++++--
>>>>  src/gallium/drivers/i915/i915_query.c                | 3 ++-
>>>>  src/gallium/drivers/identity/id_context.c            | 6 ++++--
>>>>  src/gallium/drivers/ilo/ilo_query.c                  | 2 +-
>>>>  src/gallium/drivers/llvmpipe/lp_query.c              | 3 ++-
>>>>  src/gallium/drivers/noop/noop_pipe.c                 | 2 +-
>>>>  src/gallium/drivers/nouveau/nv30/nv30_query.c        | 2 +-
>>>>  src/gallium/drivers/nouveau/nv50/nv50_query.c        | 2 +-
>>>>  src/gallium/drivers/nouveau/nv50/nv50_state.c        | 2 +-
>>>>  src/gallium/drivers/nouveau/nvc0/nvc0_query.c        | 2 +-
>>>>  src/gallium/drivers/nouveau/nvc0/nvc0_state.c        | 2 +-
>>>>  src/gallium/drivers/r300/r300_query.c                | 3 ++-
>>>>  src/gallium/drivers/radeon/r600_query.c              | 2 +-
>>>>  src/gallium/drivers/rbug/rbug_context.c              | 6 ++++--
>>>>  src/gallium/drivers/softpipe/sp_query.c              | 3 ++-
>>>>  src/gallium/drivers/svga/svga_pipe_query.c           | 4 +++-
>>>>  src/gallium/drivers/trace/tr_context.c               | 6 ++++--
>>>>  src/gallium/include/pipe/p_context.h                 | 3 ++-
>>>>  src/gallium/state_trackers/clover/core/timestamp.cpp | 2 +-
>>>>  src/gallium/tests/graw/occlusion-query.c             | 4 ++--
>>>>  src/gallium/tools/trace/dump_state.py                | 2 +-
>>>>  src/mesa/state_tracker/st_cb_queryobj.c              | 6 +++---
>>>>  24 files changed, 48 insertions(+), 33 deletions(-)
>>>>
>>>> diff --git a/src/gallium/auxiliary/hud/hud_driver_query.c b/src/gallium/auxiliary/hud/hud_driver_query.c
>>>> index 0f52e18..b48708c 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/drivers/freedreno/freedreno_query.c b/src/gallium/drivers/freedreno/freedreno_query.c
>>>> index 8753a4b..952bb81 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 stream)
>>>>  {
>>>>       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 2e61e59..3f58b21 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 stream)
>>>>  {
>>>>     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,
>>>> +                             stream);
>>>>  }
>>>>
>>>>  static void
>>>> diff --git a/src/gallium/drivers/i915/i915_query.c b/src/gallium/drivers/i915/i915_query.c
>>>> index 0efceb1..e05c0b9 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 stream)
>>>>  {
>>>>     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 00414b8..31f8e60 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 stream)
>>>>  {
>>>>     struct identity_context *id_pipe = identity_context(_pipe);
>>>>     struct pipe_context *pipe = id_pipe->pipe;
>>>>
>>>>     return pipe->create_query(pipe,
>>>> -                             query_type);
>>>> +                             query_type,
>>>> +                             stream);
>>>>  }
>>>>
>>>>  static void
>>>> diff --git a/src/gallium/drivers/ilo/ilo_query.c b/src/gallium/drivers/ilo/ilo_query.c
>>>> index 71bcc0f..cb02bf3 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 stream)
>>>>  {
>>>>     struct ilo_query *q;
>>>>
>>>> diff --git a/src/gallium/drivers/llvmpipe/lp_query.c b/src/gallium/drivers/llvmpipe/lp_query.c
>>>> index 2bc9c1a..0ee168f 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 stream)
>>>>  {
>>>>     struct llvmpipe_query *pq;
>>>>
>>>> diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c
>>>> index 27197a5..44dbe1c 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 stream)
>>>>  {
>>>>       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 01b3817..bc7e764 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 stream)
>>>>  {
>>>>     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 6a17139..8cac38f 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 stream)
>>>>  {
>>>>     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 d0bc7ff..915ee26 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 856f685..5ed22f2 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 stream)
>>>>  {
>>>>     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 c92aaac..ef9d479 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 fbf44c6..05b54b9 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 stream)
>>>>  {
>>>>      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 c439441..ac126ea 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 stream)
>>>>  {
>>>>       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 2b99ddd..91254f0 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 stream)
>>>>  {
>>>>     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,
>>>> +                             stream);
>>>>     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 8822370..647da8b 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 stream)
>>>>  {
>>>>     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 0283aa9..76d485b 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 stream)
>>>>  {
>>>>     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 3e99598..35301ab 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 stream)
>>>>  {
>>>>     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, stream);
>>>>
>>>> -   query = pipe->create_query(pipe, query_type);
>>>> +   query = pipe->create_query(pipe, query_type, stream);
>>>>
>>>>     trace_dump_ret(ptr, query);
>>>>
>>>> diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
>>>> index bc43530..5b7532c 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 stream );
>>>>
>>>>     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 f168d61..481c4f9 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 f5227e3..d03934f 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 8bb29e7..0fd1c41 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, stream):
>>>>          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 78a7370..1aaa322 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;
>>>>     }
>>>>
>>>>
>>>
>>> 1-2 look good - I guess there wouldn't be any point to have different
>>> emit/endprim with and without the stream index like d3d11 does.
>>>
>>> This one though looks ugly, a stream parameter added to all queries.
>>> I think either the parameter should be more generic (like "index") so it
>>> potentially applies to more query types, though I don't think there's
>>> any where it actually could be used (though unlike d3d11 we actually
>>> have 3 as apart from the PIPE_QUERY_SO_STATISTICS there's the separate
>>> PIPE_QUERY_PRIMITIVES_GENERATED / PIPE_QUERY_PRIMITIVES_EMITTED). The
>>> other possibility would be to just add different queries - I don't think
>>> anyone can do nor are there any plans to support more than 4 streams
>>> (this is what d3d11 does).
>>
>> I have no preference between the approaches. Can you/Brian/Marek come
>> to an agreement, and I'll do it whatever way that is?
>>
>>   -ilia


More information about the mesa-dev mailing list