You'll need to update this patch and set 'info->flags = 0' in nv50_query.c as well. I pushed some performance counters for nv50 yesterday. Thanks for doing this change.

On 11/13/2015 08:17 PM, Nicolai Hähnle wrote:
Some drivers (in particular radeon[si], but also freedreno judging from
a quick grep) may want to expose performance counters that cannot be
individually enabled or disabled.

Allow such drivers to mark driver-specific queries as requiring a new
type of batch query object that is used to start and stop a list of queries
simultaneously.

v2: documentation for create_batch_query
---
  src/gallium/drivers/nouveau/nvc0/nvc0_query.c |  1 +
  src/gallium/include/pipe/p_context.h          | 19 +++++++++++++++++++
  src/gallium/include/pipe/p_defines.h          | 27 +++++++++++++++++++++------
  3 files changed, 41 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c 
b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
index a1d6162..0608337 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
@@ -162,6 +162,7 @@ nvc0_screen_get_driver_query_info(struct pipe_screen 
*pscreen,
     info->max_value.u64 = 0;
     info->type = PIPE_DRIVER_QUERY_TYPE_UINT64;
     info->group_id = -1;
+   info->flags = 0;

  #ifdef NOUVEAU_ENABLE_DRIVER_STATISTICS
     if (id < num_sw_queries)
diff --git a/src/gallium/include/pipe/p_context.h 
b/src/gallium/include/pipe/p_context.h
index 27f358f..be7447d 100644
--- a/src/gallium/include/pipe/p_context.h
+++ b/src/gallium/include/pipe/p_context.h
@@ -116,6 +116,25 @@ struct pipe_context {
                                         unsigned query_type,
                                         unsigned index );

+   /**
+    * Create a query object that queries all given query types simultaneously.
+    *
+    * This can only be used for those query types for which
+    * get_driver_query_info indicates that it must be used. Only one batch
+    * query object may be active at a time.
+    *
+    * There may be additional constraints on which query types can be used
+    * together, in particular those that are implied by
+    * get_driver_query_group_info.
+    *
+    * \param num_queries the number of query types
+    * \param query_types array of \p num_queries query types
+    * \return a query object, or NULL on error.
+    */
+   struct pipe_query *(*create_batch_query)( struct pipe_context *pipe,
+                                             unsigned num_queries,
+                                             unsigned *query_types );
+
     void (*destroy_query)(struct pipe_context *pipe,
                           struct pipe_query *q);

diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index 7ed9f6d..b3c8b9f 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -776,6 +776,16 @@ struct pipe_query_data_pipeline_statistics
  };

  /**
+ * For batch queries.
+ */
+union pipe_numeric_type_union
+{
+   uint64_t u64;
+   uint32_t u32;
+   float f;
+};
+
+/**
   * Query result (returned by pipe_context::get_query_result).
   */
  union pipe_query_result
@@ -811,6 +821,9 @@ union pipe_query_result

     /* PIPE_QUERY_PIPELINE_STATISTICS */
     struct pipe_query_data_pipeline_statistics pipeline_statistics;
+
+   /* batch queries */
+   union pipe_numeric_type_union batch[0];
  };

  union pipe_color_union
@@ -840,12 +853,13 @@ enum pipe_driver_query_result_type
     PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE = 1,
  };

-union pipe_numeric_type_union
-{
-   uint64_t u64;
-   uint32_t u32;
-   float f;
-};
+/**
+ * Some hardware requires some hardware-specific queries to be submitted
+ * as batched queries. The corresponding query objects are created using
+ * create_batch_query, and at most one such query may be active at
+ * any time.
+ */
+#define PIPE_DRIVER_QUERY_FLAG_BATCH     (1 << 0)

  struct pipe_driver_query_info
  {
@@ -855,6 +869,7 @@ struct pipe_driver_query_info
     enum pipe_driver_query_type type;
     enum pipe_driver_query_result_type result_type;
     unsigned group_id;
+   unsigned flags;
  };

  struct pipe_driver_query_group_info

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to