gallium: make pipe_context::begin_query return a boolean
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Sat, 5 Jul 2014 10:46:03 +0000 (12:46 +0200)
committerMartin Peres <martin.peres@linux.intel.com>
Tue, 5 May 2015 21:03:36 +0000 (00:03 +0300)
GL_AMD_performance_monitor must return an error when a monitoring
session cannot be started.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Martin Peres <martin.peres@free.fr>
18 files changed:
src/gallium/drivers/freedreno/freedreno_query.c
src/gallium/drivers/freedreno/freedreno_query.h
src/gallium/drivers/freedreno/freedreno_query_hw.c
src/gallium/drivers/freedreno/freedreno_query_sw.c
src/gallium/drivers/i915/i915_query.c
src/gallium/drivers/ilo/ilo_query.c
src/gallium/drivers/llvmpipe/lp_query.c
src/gallium/drivers/noop/noop_pipe.c
src/gallium/drivers/nouveau/nv30/nv30_query.c
src/gallium/drivers/nouveau/nv50/nv50_query.c
src/gallium/drivers/nouveau/nvc0/nvc0_query.c
src/gallium/drivers/r300/r300_query.c
src/gallium/drivers/radeon/r600_query.c
src/gallium/drivers/rbug/rbug_context.c
src/gallium/drivers/softpipe/sp_query.c
src/gallium/drivers/svga/svga_pipe_query.c
src/gallium/drivers/trace/tr_context.c
src/gallium/include/pipe/p_context.h

index 6f01e0313c12a53ade4fbd73da77cc4415b5d84d..db2683c9b6fd99f8336cd0cecf1a81aad2b9d0d7 100644 (file)
@@ -59,11 +59,11 @@ fd_destroy_query(struct pipe_context *pctx, struct pipe_query *pq)
        q->funcs->destroy_query(fd_context(pctx), q);
 }
 
-static void
+static boolean
 fd_begin_query(struct pipe_context *pctx, struct pipe_query *pq)
 {
        struct fd_query *q = fd_query(pq);
-       q->funcs->begin_query(fd_context(pctx), q);
+       return q->funcs->begin_query(fd_context(pctx), q);
 }
 
 static void
index bc9a7a205593cc74ef4dda1bda181b23ba531842..c2c71da27908ce71a4a67b5a34de0fa1fcf7b0fd 100644 (file)
@@ -37,7 +37,7 @@ struct fd_query;
 struct fd_query_funcs {
        void (*destroy_query)(struct fd_context *ctx,
                        struct fd_query *q);
-       void (*begin_query)(struct fd_context *ctx, struct fd_query *q);
+       boolean (*begin_query)(struct fd_context *ctx, struct fd_query *q);
        void (*end_query)(struct fd_context *ctx, struct fd_query *q);
        boolean (*get_query_result)(struct fd_context *ctx,
                        struct fd_query *q, boolean wait,
index b29f9d409ced07411dcd595b8fe82ca36943f3dd..027fdc9de23936793a7a0fb9c4d27f7df1a70226 100644 (file)
@@ -131,12 +131,12 @@ fd_hw_destroy_query(struct fd_context *ctx, struct fd_query *q)
        free(hq);
 }
 
-static void
+static boolean
 fd_hw_begin_query(struct fd_context *ctx, struct fd_query *q)
 {
        struct fd_hw_query *hq = fd_hw_query(q);
        if (q->active)
-               return;
+               return false;
 
        /* begin_query() should clear previous results: */
        destroy_periods(ctx, &hq->periods);
@@ -149,6 +149,7 @@ fd_hw_begin_query(struct fd_context *ctx, struct fd_query *q)
        /* add to active list: */
        list_del(&hq->list);
        list_addtail(&hq->list, &ctx->active_queries);
+   return true;
 }
 
 static void
index 8d81698f31d0024cb2b113cf05d1e18d0e1f17a4..514df145fa88c9b449da425602e929bd6f4e2640 100644 (file)
@@ -85,7 +85,7 @@ is_rate_query(struct fd_query *q)
        }
 }
 
-static void
+static boolean
 fd_sw_begin_query(struct fd_context *ctx, struct fd_query *q)
 {
        struct fd_sw_query *sq = fd_sw_query(q);
@@ -93,6 +93,7 @@ fd_sw_begin_query(struct fd_context *ctx, struct fd_query *q)
        sq->begin_value = read_counter(ctx, q->type);
        if (is_rate_query(q))
                sq->begin_time = os_time_get();
+   return true;
 }
 
 static void
index 1500d970b0ff739dc48a8b1d8654ed4c1b486225..78d67cea2c94f79af952231fd9271fab9797fb36 100644 (file)
@@ -54,9 +54,10 @@ static void i915_destroy_query(struct pipe_context *ctx,
    FREE(query);
 }
 
-static void i915_begin_query(struct pipe_context *ctx,
+static boolean i915_begin_query(struct pipe_context *ctx,
                              struct pipe_query *query)
 {
+   return true;
 }
 
 static void i915_end_query(struct pipe_context *ctx, struct pipe_query *query)
index b3329bc3ce1a8d54fa7f9092c8a662db1e4f744d..57f920c03ee58b9ad15b2aaba3feec8c6e003d51 100644 (file)
@@ -111,7 +111,7 @@ ilo_destroy_query(struct pipe_context *pipe, struct pipe_query *query)
    FREE(q);
 }
 
-static void
+static boolean
 ilo_begin_query(struct pipe_context *pipe, struct pipe_query *query)
 {
    struct ilo_query *q = ilo_query(query);
@@ -124,6 +124,7 @@ ilo_begin_query(struct pipe_context *pipe, struct pipe_query *query)
    q->active = true;
 
    ilo_query_table[q->type].begin(ilo_context(pipe), q);
+   return true;
 }
 
 static void
index 8f41f56f1c48118c74e4af43f0a2a90f61ebdef2..4f8bab62e7b4f64e9947be78db0f8e4b05d10fe4 100644 (file)
@@ -184,7 +184,7 @@ llvmpipe_get_query_result(struct pipe_context *pipe,
 }
 
 
-static void
+static boolean
 llvmpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
 {
    struct llvmpipe_context *llvmpipe = llvmpipe_context( pipe );
@@ -235,6 +235,7 @@ llvmpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
    default:
       break;
    }
+   return true;
 }
 
 
index 6fb22773c69ff1963cddf2972686b3b971c1fdc6..aeec6778b6df8f4c2d5d59f7ce50b8a1a9101626 100644 (file)
@@ -58,8 +58,9 @@ static void noop_destroy_query(struct pipe_context *ctx, struct pipe_query *quer
        FREE(query);
 }
 
-static void noop_begin_query(struct pipe_context *ctx, struct pipe_query *query)
+static boolean noop_begin_query(struct pipe_context *ctx, struct pipe_query *query)
 {
+   return true;
 }
 
 static void noop_end_query(struct pipe_context *ctx, struct pipe_query *query)
index ace2cdcd79539a583700cc6c9c1df693f4cb8286..516ee83168eafe6c170db8ca74b203750f90e9e0 100644 (file)
@@ -144,7 +144,7 @@ nv30_query_destroy(struct pipe_context *pipe, struct pipe_query *pq)
    FREE(pq);
 }
 
-static void
+static boolean
 nv30_query_begin(struct pipe_context *pipe, struct pipe_query *pq)
 {
    struct nv30_context *nv30 = nv30_context(pipe);
@@ -160,7 +160,7 @@ nv30_query_begin(struct pipe_context *pipe, struct pipe_query *pq)
       }
       break;
    case PIPE_QUERY_TIMESTAMP:
-      return;
+      return true;
    default:
       BEGIN_NV04(push, NV30_3D(QUERY_RESET), 1);
       PUSH_DATA (push, q->report);
@@ -171,6 +171,7 @@ nv30_query_begin(struct pipe_context *pipe, struct pipe_query *pq)
       BEGIN_NV04(push, SUBC_3D(q->enable), 1);
       PUSH_DATA (push, 1);
    }
+   return true;
 }
 
 static void
index 23b6d1eeb0c56d7c694821e841f81fc322a8bff4..6690aa282eb2846c2e1b341d279ee79e49bb9b97 100644 (file)
@@ -138,7 +138,7 @@ nv50_query_get(struct nouveau_pushbuf *push, struct nv50_query *q,
    PUSH_DATA (push, get);
 }
 
-static void
+static boolean
 nv50_query_begin(struct pipe_context *pipe, struct pipe_query *pq)
 {
    struct nv50_context *nv50 = nv50_context(pipe);
@@ -201,6 +201,7 @@ nv50_query_begin(struct pipe_context *pipe, struct pipe_query *pq)
       break;
    }
    q->ready = FALSE;
+   return true;
 }
 
 static void
index 477ca8027ca1765170263a63d488e74763a70a41..01e7b37b55fdde9cabe606ecc114a66e5b482f74 100644 (file)
@@ -250,7 +250,7 @@ nvc0_query_rotate(struct nvc0_context *nvc0, struct nvc0_query *q)
       nvc0_query_allocate(nvc0, q, NVC0_QUERY_ALLOC_SPACE);
 }
 
-static void
+static boolean
 nvc0_query_begin(struct pipe_context *pipe, struct pipe_query *pq)
 {
    struct nvc0_context *nvc0 = nvc0_context(pipe);
@@ -332,6 +332,7 @@ nvc0_query_begin(struct pipe_context *pipe, struct pipe_query *pq)
       break;
    }
    q->state = NVC0_QUERY_STATE_ACTIVE;
+   return true;
 }
 
 static void
index 2364f3d2d744bd188b7995333ad1a58b6a3a5d9d..01b83b87fcfdca69ca838acad2fc1a7f1122cf00 100644 (file)
@@ -85,24 +85,25 @@ void r300_resume_query(struct r300_context *r300,
     r300_mark_atom_dirty(r300, &r300->query_start);
 }
 
-static void r300_begin_query(struct pipe_context* pipe,
-                             struct pipe_query* query)
+static boolean r300_begin_query(struct pipe_context* pipe,
+                                struct pipe_query* query)
 {
     struct r300_context* r300 = r300_context(pipe);
     struct r300_query* q = r300_query(query);
 
     if (q->type == PIPE_QUERY_GPU_FINISHED)
-        return;
+        return true;
 
     if (r300->query_current != NULL) {
         fprintf(stderr, "r300: begin_query: "
                 "Some other query has already been started.\n");
         assert(0);
-        return;
+        return false;
     }
 
     q->num_results = 0;
     r300_resume_query(r300, q);
+    return true;
 }
 
 void r300_stop_query(struct r300_context *r300)
index 1335087dafb640ae9bcc607c2feaa20e493b8328..28a814a1b879c8bdef2ec08ef95a58c54251b52a 100644 (file)
@@ -425,7 +425,8 @@ static void r600_destroy_query(struct pipe_context *ctx, struct pipe_query *quer
        FREE(query);
 }
 
-static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
+static boolean r600_begin_query(struct pipe_context *ctx,
+                                struct pipe_query *query)
 {
        struct r600_common_context *rctx = (struct r600_common_context *)ctx;
        struct r600_query *rquery = (struct r600_query *)query;
@@ -433,7 +434,7 @@ static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
 
        if (!r600_query_needs_begin(rquery->type)) {
                assert(0);
-               return;
+               return false;
        }
 
        /* Non-GPU queries. */
@@ -442,7 +443,7 @@ static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
                return;
        case R600_QUERY_DRAW_CALLS:
                rquery->begin_result = rctx->num_draw_calls;
-               return;
+               return true;
        case R600_QUERY_REQUESTED_VRAM:
        case R600_QUERY_REQUESTED_GTT:
        case R600_QUERY_VRAM_USAGE:
@@ -451,19 +452,19 @@ static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
        case R600_QUERY_CURRENT_GPU_SCLK:
        case R600_QUERY_CURRENT_GPU_MCLK:
                rquery->begin_result = 0;
-               return;
+               return true;
        case R600_QUERY_BUFFER_WAIT_TIME:
                rquery->begin_result = rctx->ws->query_value(rctx->ws, RADEON_BUFFER_WAIT_TIME_NS);
-               return;
+               return true;
        case R600_QUERY_NUM_CS_FLUSHES:
                rquery->begin_result = rctx->ws->query_value(rctx->ws, RADEON_NUM_CS_FLUSHES);
-               return;
+               return true;
        case R600_QUERY_NUM_BYTES_MOVED:
                rquery->begin_result = rctx->ws->query_value(rctx->ws, RADEON_NUM_BYTES_MOVED);
-               return;
+               return true;
        case R600_QUERY_GPU_LOAD:
                rquery->begin_result = r600_gpu_load_begin(rctx->screen);
-               return;
+               return true;
        }
 
        /* Discard the old query buffers. */
@@ -489,6 +490,7 @@ static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
        if (!r600_is_timer_query(rquery->type)) {
                LIST_ADDTAIL(&rquery->list, &rctx->active_nontimer_queries);
        }
+   return true;
 }
 
 static void r600_end_query(struct pipe_context *ctx, struct pipe_query *query)
index 7a8226e0ffaab8c613dfced0d72363d1437d111f..9ecddad05ec762ae722775911a9f595da624adac 100644 (file)
@@ -164,17 +164,18 @@ rbug_destroy_query(struct pipe_context *_pipe,
    pipe_mutex_unlock(rb_pipe->call_mutex);
 }
 
-static void
+static boolean
 rbug_begin_query(struct pipe_context *_pipe,
                  struct pipe_query *query)
 {
    struct rbug_context *rb_pipe = rbug_context(_pipe);
    struct pipe_context *pipe = rb_pipe->pipe;
+   boolean ret;
 
    pipe_mutex_lock(rb_pipe->call_mutex);
-   pipe->begin_query(pipe,
-                     query);
+   ret = pipe->begin_query(pipe, query);
    pipe_mutex_unlock(rb_pipe->call_mutex);
+   return ret;
 }
 
 static void
index e2fc917b3617509e924f73c77f2d24e49602bbdc..e77387082bc0d71690e9f9ad8d3d4398aaad0ac7 100644 (file)
@@ -83,7 +83,7 @@ softpipe_destroy_query(struct pipe_context *pipe, struct pipe_query *q)
 }
 
 
-static void
+static boolean
 softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
 {
    struct softpipe_context *softpipe = softpipe_context( pipe );
@@ -130,6 +130,7 @@ softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
    }
    softpipe->active_query_count++;
    softpipe->dirty |= SP_NEW_QUERY;
+   return true;
 }
 
 
index 756e2b8baf4342f5499712d83448e4c321f9f8f6..a97a9c46cf8cdb7b795e56844582463d3889b68e 100644 (file)
@@ -166,7 +166,7 @@ svga_destroy_query(struct pipe_context *pipe, struct pipe_query *q)
 }
 
 
-static void
+static boolean
 svga_begin_query(struct pipe_context *pipe, struct pipe_query *q)
 {
    struct svga_screen *svgascreen = svga_screen(pipe->screen);
@@ -222,6 +222,7 @@ svga_begin_query(struct pipe_context *pipe, struct pipe_query *q)
    default:
       assert(!"unexpected query type in svga_begin_query()");
    }
+   return true;
 }
 
 
index e713abaebb8d550e436849c445abd7b17cb621a0..0b56517e69677ce26e613b2ccc465dbc00b14df2 100644 (file)
@@ -185,12 +185,13 @@ trace_context_destroy_query(struct pipe_context *_pipe,
 }
 
 
-static INLINE void
+static INLINE boolean
 trace_context_begin_query(struct pipe_context *_pipe,
                           struct pipe_query *query)
 {
    struct trace_context *tr_ctx = trace_context(_pipe);
    struct pipe_context *pipe = tr_ctx->pipe;
+   boolean ret;
 
    query = trace_query_unwrap(query);
 
@@ -199,9 +200,10 @@ trace_context_begin_query(struct pipe_context *_pipe,
    trace_dump_arg(ptr, pipe);
    trace_dump_arg(ptr, query);
 
-   pipe->begin_query(pipe, query);
+   ret = pipe->begin_query(pipe, query);
 
    trace_dump_call_end();
+   return ret;
 }
 
 
index a4cae8eaf63170c5fc6491b5dcb8a0adf9384d2d..adff67a88c8c62e74f76e99a2d9afbdf8df9ba41 100644 (file)
@@ -115,7 +115,7 @@ struct pipe_context {
    void (*destroy_query)(struct pipe_context *pipe,
                          struct pipe_query *q);
 
-   void (*begin_query)(struct pipe_context *pipe, struct pipe_query *q);
+   boolean (*begin_query)(struct pipe_context *pipe, struct pipe_query *q);
    void (*end_query)(struct pipe_context *pipe, struct pipe_query *q);
 
    /**