summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/hud/hud_context.c9
-rw-r--r--src/gallium/auxiliary/hud/hud_driver_query.c22
-rw-r--r--src/gallium/auxiliary/hud/hud_private.h3
-rw-r--r--src/gallium/include/pipe/p_defines.h10
4 files changed, 36 insertions, 8 deletions
diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c
index e0ca29da329..decc055b21a 100644
--- a/src/gallium/auxiliary/hud/hud_context.c
+++ b/src/gallium/auxiliary/hud/hud_context.c
@@ -896,13 +896,15 @@ hud_parse_env_var(struct hud_context *hud, const char *env)
has_occlusion_query(hud->pipe->screen)) {
hud_pipe_query_install(pane, hud->pipe, "samples-passed",
PIPE_QUERY_OCCLUSION_COUNTER, 0, 0,
- PIPE_DRIVER_QUERY_TYPE_UINT64);
+ PIPE_DRIVER_QUERY_TYPE_UINT64,
+ PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE);
}
else if (strcmp(name, "primitives-generated") == 0 &&
has_streamout(hud->pipe->screen)) {
hud_pipe_query_install(pane, hud->pipe, "primitives-generated",
PIPE_QUERY_PRIMITIVES_GENERATED, 0, 0,
- PIPE_DRIVER_QUERY_TYPE_UINT64);
+ PIPE_DRIVER_QUERY_TYPE_UINT64,
+ PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE);
}
else {
boolean processed = FALSE;
@@ -929,7 +931,8 @@ hud_parse_env_var(struct hud_context *hud, const char *env)
if (i < Elements(pipeline_statistics_names)) {
hud_pipe_query_install(pane, hud->pipe, name,
PIPE_QUERY_PIPELINE_STATISTICS, i,
- 0, PIPE_DRIVER_QUERY_TYPE_UINT64);
+ 0, PIPE_DRIVER_QUERY_TYPE_UINT64,
+ PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE);
processed = TRUE;
}
}
diff --git a/src/gallium/auxiliary/hud/hud_driver_query.c b/src/gallium/auxiliary/hud/hud_driver_query.c
index c47d232842f..f14305ea835 100644
--- a/src/gallium/auxiliary/hud/hud_driver_query.c
+++ b/src/gallium/auxiliary/hud/hud_driver_query.c
@@ -43,6 +43,7 @@ struct query_info {
struct pipe_context *pipe;
unsigned query_type;
unsigned result_index; /* unit depends on query_type */
+ enum pipe_driver_query_result_type result_type;
/* Ring of queries. If a query is busy, we use another slot. */
struct pipe_query *query[NUM_QUERIES];
@@ -108,8 +109,19 @@ query_new_value(struct hud_graph *gr)
}
if (info->num_results && info->last_time + gr->pane->period <= now) {
- /* compute the average value across all frames */
- hud_graph_add_value(gr, info->results_cumulative / info->num_results);
+ uint64_t value;
+
+ switch (info->result_type) {
+ default:
+ case PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE:
+ value = info->results_cumulative / info->num_results;
+ break;
+ case PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE:
+ value = info->results_cumulative;
+ break;
+ }
+
+ hud_graph_add_value(gr, value);
info->last_time = now;
info->results_cumulative = 0;
@@ -150,7 +162,8 @@ void
hud_pipe_query_install(struct hud_pane *pane, struct pipe_context *pipe,
const char *name, unsigned query_type,
unsigned result_index,
- uint64_t max_value, enum pipe_driver_query_type type)
+ uint64_t max_value, enum pipe_driver_query_type type,
+ enum pipe_driver_query_result_type result_type)
{
struct hud_graph *gr;
struct query_info *info;
@@ -174,6 +187,7 @@ hud_pipe_query_install(struct hud_pane *pane, struct pipe_context *pipe,
info->pipe = pipe;
info->query_type = query_type;
info->result_index = result_index;
+ info->result_type = result_type;
hud_pane_add_graph(pane, gr);
if (pane->max_value < max_value)
@@ -207,7 +221,7 @@ hud_driver_query_install(struct hud_pane *pane, struct pipe_context *pipe,
return FALSE;
hud_pipe_query_install(pane, pipe, query.name, query.query_type, 0,
- query.max_value.u64, query.type);
+ query.max_value.u64, query.type, query.result_type);
return TRUE;
}
diff --git a/src/gallium/auxiliary/hud/hud_private.h b/src/gallium/auxiliary/hud/hud_private.h
index 033be534a75..01caf7b8b2c 100644
--- a/src/gallium/auxiliary/hud/hud_private.h
+++ b/src/gallium/auxiliary/hud/hud_private.h
@@ -90,7 +90,8 @@ void hud_pipe_query_install(struct hud_pane *pane, struct pipe_context *pipe,
const char *name, unsigned query_type,
unsigned result_index,
uint64_t max_value,
- enum pipe_driver_query_type type);
+ enum pipe_driver_query_type type,
+ enum pipe_driver_query_result_type result_type);
boolean hud_driver_query_install(struct hud_pane *pane,
struct pipe_context *pipe, const char *name);
diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
index b124d8e4d13..85328264cc3 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -806,6 +806,15 @@ enum pipe_driver_query_group_type
PIPE_DRIVER_QUERY_GROUP_TYPE_GPU = 1,
};
+/* Whether an average value per frame or a cumulative value should be
+ * displayed.
+ */
+enum pipe_driver_query_result_type
+{
+ PIPE_DRIVER_QUERY_RESULT_TYPE_AVERAGE = 0,
+ PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE = 1,
+};
+
union pipe_numeric_type_union
{
uint64_t u64;
@@ -819,6 +828,7 @@ struct pipe_driver_query_info
unsigned query_type; /* PIPE_QUERY_DRIVER_SPECIFIC + i */
union pipe_numeric_type_union max_value; /* max value that can be returned */
enum pipe_driver_query_type type;
+ enum pipe_driver_query_result_type result_type;
unsigned group_id;
};