etnaviv: extend result(..) to return if data is ready
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Fri, 19 Jul 2019 10:57:11 +0000 (12:57 +0200)
committerMarge Bot <eric+marge@anholt.net>
Sun, 5 Apr 2020 18:01:43 +0000 (18:01 +0000)
For the upcoming conversion of perfmon queries to the acc query
framework we need a way to tell that the data is not ready.

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/1530>

src/gallium/drivers/etnaviv/etnaviv_query_acc.c
src/gallium/drivers/etnaviv/etnaviv_query_acc.h

index f156363e95170419e600a4772d155a875f05ae15..094c7c841258701a4ae25cdb9f504d3f2fea7e77 100644 (file)
@@ -85,7 +85,7 @@ occlusion_suspend(struct etna_acc_query *aq, struct etna_context *ctx)
    resource_written(ctx, aq->prsc);
 }
 
-static void
+static bool
 occlusion_result(struct etna_acc_query *aq, void *buf,
                  union pipe_query_result *result)
 {
@@ -99,6 +99,8 @@ occlusion_result(struct etna_acc_query *aq, void *buf,
       result->u64 = sum;
    else
       result->b = !!sum;
+
+   return true;
 }
 
 static void
@@ -214,12 +216,14 @@ etna_acc_get_query_result(struct etna_context *ctx, struct etna_query *q,
       return false;
 
    void *ptr = etna_bo_map(rsc->bo);
-   p->result(aq, ptr, result);
-   aq->samples = 0;
+   bool success = p->result(aq, ptr, result);
+
+   if (success)
+      aq->samples = 0;
 
    etna_bo_cpu_fini(rsc->bo);
 
-   return true;
+   return success;
 }
 
 static const struct etna_query_funcs acc_query_funcs = {
index b22b22147283824498d3ea149616fb01734b98e2..8dd4bae5b71b73d80152782ee5b85c29a6aae4ee 100644 (file)
@@ -39,8 +39,8 @@ struct etna_acc_sample_provider {
    void (*resume)(struct etna_acc_query *aq, struct etna_context *ctx);
    void (*suspend)(struct etna_acc_query *aq, struct etna_context *ctx);
 
-   void (*result)(struct etna_acc_query *aq, void *buf,
-           union pipe_query_result *result);
+   bool (*result)(struct etna_acc_query *aq, void *buf,
+                  union pipe_query_result *result);
 };
 
 struct etna_acc_query {