gallium/hud: replace byte units flag with pipe_driver_query_type

Instead of using a boolean 'is bytes' value, use the pipe_driver_query_type
enum type.  This will let is add support for time values in the next patch.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Brian Paul 2015-07-07 09:13:02 -06:00
parent f025aec906
commit 86ebd31c67
3 changed files with 18 additions and 16 deletions

View file

@ -231,14 +231,16 @@ hud_draw_string(struct hud_context *hud, unsigned x, unsigned y,
}
static void
number_to_human_readable(uint64_t num, boolean is_in_bytes, char *out)
number_to_human_readable(uint64_t num, enum pipe_driver_query_type type,
char *out)
{
static const char *byte_units[] =
{"", " KB", " MB", " GB", " TB", " PB", " EB"};
static const char *metric_units[] =
{"", " k", " M", " G", " T", " P", " E"};
const char **units = is_in_bytes ? byte_units : metric_units;
double divisor = is_in_bytes ? 1024 : 1000;
const char **units =
(type == PIPE_DRIVER_QUERY_TYPE_BYTES) ? byte_units : metric_units;
double divisor = (type == PIPE_DRIVER_QUERY_TYPE_BYTES) ? 1024 : 1000;
int unit = 0;
double d = num;
@ -301,7 +303,7 @@ hud_pane_accumulate_vertices(struct hud_context *hud,
hud->font.glyph_height / 2;
number_to_human_readable(pane->max_value * i / 5,
pane->uses_byte_units, str);
pane->type, str);
hud_draw_string(hud, x, y, str);
}
@ -312,7 +314,7 @@ hud_pane_accumulate_vertices(struct hud_context *hud,
unsigned y = pane->y2 + 2 + i*hud->font.glyph_height;
number_to_human_readable(gr->current_value,
pane->uses_byte_units, str);
pane->type, str);
hud_draw_string(hud, x, y, " %s: %s", gr->name, str);
i++;
}
@ -869,12 +871,14 @@ hud_parse_env_var(struct hud_context *hud, const char *env)
else if (strcmp(name, "samples-passed") == 0 &&
has_occlusion_query(hud->pipe->screen)) {
hud_pipe_query_install(pane, hud->pipe, "samples-passed",
PIPE_QUERY_OCCLUSION_COUNTER, 0, 0, FALSE);
PIPE_QUERY_OCCLUSION_COUNTER, 0, 0,
PIPE_DRIVER_QUERY_TYPE_UINT64);
}
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, FALSE);
PIPE_QUERY_PRIMITIVES_GENERATED, 0, 0,
PIPE_DRIVER_QUERY_TYPE_UINT64);
}
else {
boolean processed = FALSE;
@ -901,7 +905,7 @@ 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, FALSE);
0, PIPE_DRIVER_QUERY_TYPE_UINT64);
processed = TRUE;
}
}

View file

@ -150,7 +150,7 @@ 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, boolean uses_byte_units)
uint64_t max_value, enum pipe_driver_query_type type)
{
struct hud_graph *gr;
struct query_info *info;
@ -178,8 +178,7 @@ hud_pipe_query_install(struct hud_pane *pane, struct pipe_context *pipe,
hud_pane_add_graph(pane, gr);
if (pane->max_value < max_value)
hud_pane_set_max_value(pane, max_value);
if (uses_byte_units)
pane->uses_byte_units = TRUE;
pane->type = type;
}
boolean
@ -189,7 +188,6 @@ hud_driver_query_install(struct hud_pane *pane, struct pipe_context *pipe,
struct pipe_screen *screen = pipe->screen;
struct pipe_driver_query_info query;
unsigned num_queries, i;
boolean uses_byte_units;
boolean found = FALSE;
if (!screen->get_driver_query_info)
@ -208,9 +206,8 @@ hud_driver_query_install(struct hud_pane *pane, struct pipe_context *pipe,
if (!found)
return FALSE;
uses_byte_units = query.type == PIPE_DRIVER_QUERY_TYPE_BYTES;
hud_pipe_query_install(pane, pipe, query.name, query.query_type, 0,
query.max_value.u64, uses_byte_units);
query.max_value.u64, query.type);
return TRUE;
}

View file

@ -66,7 +66,7 @@ struct hud_pane {
uint64_t ceiling;
unsigned dyn_ceil_last_ran;
boolean dyn_ceiling;
boolean uses_byte_units;
enum pipe_driver_query_type type;
uint64_t period; /* in microseconds */
struct list_head graph_list;
@ -89,7 +89,8 @@ void hud_cpu_graph_install(struct hud_pane *pane, unsigned cpu_index);
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, boolean uses_byte_units);
uint64_t max_value,
enum pipe_driver_query_type type);
boolean hud_driver_query_install(struct hud_pane *pane,
struct pipe_context *pipe, const char *name);