freedreno/query: some queries don't have ->begin_query()
authorRob Clark <robclark@freedesktop.org>
Sun, 14 Feb 2016 15:02:13 +0000 (10:02 -0500)
committerRob Clark <robclark@freedesktop.org>
Wed, 17 Feb 2016 15:41:55 +0000 (10:41 -0500)
Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/freedreno_query.h
src/gallium/drivers/freedreno/freedreno_query_hw.c

index c2c71da..1e4f45f 100644 (file)
@@ -65,4 +65,16 @@ fd_query(struct pipe_query *pq)
 void fd_query_screen_init(struct pipe_screen *pscreen);
 void fd_query_context_init(struct pipe_context *pctx);
 
+static inline bool
+skip_begin_query(int type)
+{
+       switch (type) {
+       case PIPE_QUERY_TIMESTAMP:
+       case PIPE_QUERY_GPU_FINISHED:
+               return true;
+       default:
+               return false;
+       }
+}
+
 #endif /* FREEDRENO_QUERY_H_ */
index 8e421b6..fe985d5 100644 (file)
@@ -160,6 +160,12 @@ static void
 fd_hw_end_query(struct fd_context *ctx, struct fd_query *q)
 {
        struct fd_hw_query *hq = fd_hw_query(q);
+       /* there are a couple special cases, which don't have
+        * a matching ->begin_query():
+        */
+       if (skip_begin_query(q->type) && !q->active) {
+               fd_hw_begin_query(ctx, q);
+       }
        if (!q->active)
                return;
        if (is_active(hq, ctx->stage))