etnaviv: make use of a fixed size array to track of all acc query provider
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Fri, 19 Jul 2019 10:43:43 +0000 (12:43 +0200)
committerMarge Bot <eric+marge@anholt.net>
Sun, 5 Apr 2020 18:01:43 +0000 (18:01 +0000)
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

index 976bfa1c497f0ec06c49d4ee16dce8b1f8467efa..f156363e95170419e600a4772d155a875f05ae15 100644 (file)
@@ -119,6 +119,11 @@ static const struct etna_acc_sample_provider occlusion_provider = {
    .result = occlusion_result,
 };
 
+static const struct etna_acc_sample_provider *acc_sample_provider[] =
+{
+   &occlusion_provider,
+};
+
 static void
 realloc_query_bo(struct etna_context *ctx, struct etna_acc_query *aq)
 {
@@ -224,29 +229,23 @@ static const struct etna_query_funcs acc_query_funcs = {
    .get_query_result = etna_acc_get_query_result,
 };
 
-static inline const struct etna_acc_sample_provider *
-query_sample_provider(unsigned query_type)
-{
-   switch (query_type) {
-   case PIPE_QUERY_OCCLUSION_COUNTER:
-      /* fallthrough */
-   case PIPE_QUERY_OCCLUSION_PREDICATE:
-      /* fallthrough */
-   case PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE:
-      return &occlusion_provider;
-   default:
-      return NULL;
-   }
-}
-
 struct etna_query *
 etna_acc_create_query(struct etna_context *ctx, unsigned query_type)
 {
+   const struct etna_acc_sample_provider *p = NULL;
    struct etna_acc_query *aq;
    struct etna_query *q;
-   const struct etna_acc_sample_provider *p;
 
-   p = query_sample_provider(query_type);
+   /* find a sample provide for the requested query type */
+   for (unsigned i = 0; i < ARRAY_SIZE(acc_sample_provider); i++) {
+      p = acc_sample_provider[i];
+
+      if (p->supports(query_type))
+         break;
+      else
+         p = NULL;
+   }
+
    if (!p)
       return NULL;