Pushed, thanks! Marek
On Fri, Jul 14, 2017 at 9:59 AM, Christoph Haag <[email protected]> wrote: > The fps graph for example calculates the fps as double with small > variations based on when query_new_value() is called, which causes > many values to be truncated on the cast to uint64_t. > > The HUD internally stores the values as double, so just use double > everywhere instead of fixing this with rounding. Using doubles also > allows the hud to show small variations instead of being clamped to > discrete values. > > v2: Don't print decimals in the dump file when not necessary > Signed-off-by: Christoph Haag <[email protected]> > --- > src/gallium/auxiliary/hud/hud_context.c | 14 ++++++++++---- > src/gallium/auxiliary/hud/hud_fps.c | 4 ++-- > src/gallium/auxiliary/hud/hud_private.h | 4 ++-- > 3 files changed, 14 insertions(+), 8 deletions(-) > > diff --git a/src/gallium/auxiliary/hud/hud_context.c > b/src/gallium/auxiliary/hud/hud_context.c > index 8172313605..2deb48d18e 100644 > --- a/src/gallium/auxiliary/hud/hud_context.c > +++ b/src/gallium/auxiliary/hud/hud_context.c > @@ -204,7 +204,7 @@ hud_draw_string(struct hud_context *hud, unsigned x, > unsigned y, > } > > static void > -number_to_human_readable(uint64_t num, enum pipe_driver_query_type type, > +number_to_human_readable(double num, enum pipe_driver_query_type type, > char *out) > { > static const char *byte_units[] = > @@ -861,13 +861,19 @@ hud_pane_add_graph(struct hud_pane *pane, struct > hud_graph *gr) > } > > void > -hud_graph_add_value(struct hud_graph *gr, uint64_t value) > +hud_graph_add_value(struct hud_graph *gr, double value) > { > gr->current_value = value; > value = value > gr->pane->ceiling ? gr->pane->ceiling : value; > > - if (gr->fd) > - fprintf(gr->fd, "%" PRIu64 "\n", value); > + if (gr->fd) { > + if (fabs(value - lround(value)) > FLT_EPSILON) { > + fprintf(gr->fd, "%f\n", value); > + } > + else { > + fprintf(gr->fd, "%" PRIu64 "\n", (uint64_t) lround(value)); > + } > + } > > if (gr->index == gr->pane->max_num_vertices) { > gr->vertices[0] = 0; > diff --git a/src/gallium/auxiliary/hud/hud_fps.c > b/src/gallium/auxiliary/hud/hud_fps.c > index a360bc2ed0..8aa7a665a3 100644 > --- a/src/gallium/auxiliary/hud/hud_fps.c > +++ b/src/gallium/auxiliary/hud/hud_fps.c > @@ -47,12 +47,12 @@ query_fps(struct hud_graph *gr) > > if (info->last_time) { > if (info->last_time + gr->pane->period <= now) { > - double fps = (uint64_t)info->frames * 1000000 / > + double fps = ((uint64_t)info->frames) * 1000000 / > (double)(now - info->last_time); > info->frames = 0; > info->last_time = now; > > - hud_graph_add_value(gr, (uint64_t) fps); > + hud_graph_add_value(gr, fps); > } > } > else { > diff --git a/src/gallium/auxiliary/hud/hud_private.h > b/src/gallium/auxiliary/hud/hud_private.h > index 2b1717d2c4..65baa8aa7e 100644 > --- a/src/gallium/auxiliary/hud/hud_private.h > +++ b/src/gallium/auxiliary/hud/hud_private.h > @@ -104,7 +104,7 @@ struct hud_graph { > /* mutable variables */ > unsigned num_vertices; > unsigned index; /* vertex index being updated */ > - uint64_t current_value; > + double current_value; > FILE *fd; > }; > > @@ -139,7 +139,7 @@ struct hud_pane { > /* core */ > void hud_pane_add_graph(struct hud_pane *pane, struct hud_graph *gr); > void hud_pane_set_max_value(struct hud_pane *pane, uint64_t value); > -void hud_graph_add_value(struct hud_graph *gr, uint64_t value); > +void hud_graph_add_value(struct hud_graph *gr, double value); > > /* graphs/queries */ > struct hud_batch_query_context; > -- > 2.13.3 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
