[Mesa-dev] [PATCH 1/3] hud: Handle query values according to their type

Boyan Ding boyan.j.ding at gmail.com
Thu Jun 15 12:11:37 UTC 2017


Performance counters may return floating point values, but the hud is
currently interpreting them as int regarding of type. As hud doesn't
support floating point values, cast them to ints instead.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Signed-off-by: Boyan Ding <boyan.j.ding at gmail.com>
---
 src/gallium/auxiliary/hud/hud_driver_query.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/hud/hud_driver_query.c b/src/gallium/auxiliary/hud/hud_driver_query.c
index 76104b5b49..7a469bd1bd 100644
--- a/src/gallium/auxiliary/hud/hud_driver_query.c
+++ b/src/gallium/auxiliary/hud/hud_driver_query.c
@@ -202,6 +202,7 @@ struct query_info {
    unsigned query_type;
    unsigned result_index; /* unit depends on query_type */
    enum pipe_driver_query_result_type result_type;
+   enum pipe_driver_query_type type;
 
    /* Ring of queries. If a query is busy, we use another slot. */
    struct pipe_query *query[NUM_QUERIES];
@@ -229,6 +230,19 @@ query_new_value_batch(struct query_info *info)
    }
 }
 
+static uint64_t
+query_result_to_u64(union pipe_query_result result,
+                    enum pipe_driver_query_type type)
+{
+   switch (type) {
+   case PIPE_DRIVER_QUERY_TYPE_PERCENTAGE:
+   case PIPE_DRIVER_QUERY_TYPE_FLOAT:
+      return result.f;
+   default:
+      return result.u64;
+   }
+}
+
 static void
 query_new_value_normal(struct query_info *info)
 {
@@ -242,10 +256,11 @@ query_new_value_normal(struct query_info *info)
       while (1) {
          struct pipe_query *query = info->query[info->tail];
          union pipe_query_result result;
-         uint64_t *res64 = (uint64_t *)&result;
+         union pipe_query_result *presult = &result;
 
-         if (query && pipe->get_query_result(pipe, query, FALSE, &result)) {
-            info->results_cumulative += res64[info->result_index];
+         if (query && pipe->get_query_result(pipe, query, FALSE, presult)) {
+            info->results_cumulative +=
+               query_result_to_u64(presult[info->result_index], info->type);
             info->num_results++;
 
             if (info->tail == info->head)
@@ -383,6 +398,7 @@ hud_pipe_query_install(struct hud_batch_query_context **pbq,
    info = gr->query_data;
    info->pipe = pipe;
    info->result_type = result_type;
+   info->type = type;
 
    if (flags & PIPE_DRIVER_QUERY_FLAG_BATCH) {
       if (!batch_query_add(pbq, pipe, query_type, &info->result_index))
-- 
2.13.1



More information about the mesa-dev mailing list