{
Bool ret;
+ metrics_info_fini ();
+
fips_dispatch_init (FIPS_API_GLX);
GLWRAP_DEFER_WITH_RETURN (ret, glXMakeCurrent, dpy, drawable, ctx);
{
Bool ret;
+ metrics_info_fini ();
+
fips_dispatch_init (FIPS_API_GLX);
GLWRAP_DEFER_WITH_RETURN (ret, glXMakeContextCurrent, dpy, drawable, read, ctx);
free (group->name);
}
-static void
-metrics_info_fini (metrics_info_t *info);
-
/* A helper function, part of metrics_info_init below. */
typedef enum {
GLuint *group_ids;
metrics_info_t *info = ¤t_context.metrics_info;
- if (info->initialized)
- metrics_info_fini (info);
-
glGetPerfMonitorGroupsAMD ((int *) &info->num_groups, 0, NULL);
group_ids = xmalloc (info->num_groups * sizeof (GLuint));
info->initialized = 1;
}
-static void
-metrics_info_fini (metrics_info_t *info)
+void
+metrics_info_fini (void)
{
+ metrics_info_t *info = ¤t_context.metrics_info;
unsigned i;
+ timer_query_t *timer, *timer_next;
+ monitor_t *monitor, *monitor_next;
+
+ if (! info->initialized)
+ return;
+
+ for (timer = current_context.timer_head;
+ timer;
+ timer = timer_next)
+ {
+ timer_next = timer->next;
+ free (timer);
+ }
+ current_context.timer_head = NULL;
+ current_context.timer_tail = NULL;
+
+ for (monitor = current_context.monitor_head;
+ monitor;
+ monitor = monitor_next)
+ {
+ monitor_next = monitor->next;
+ free (monitor);
+ }
+ current_context.monitor_head = NULL;
+ current_context.monitor_tail = NULL;
for (i = 0; i < info->num_groups; i++)
metrics_group_info_fini (&info->groups[i]);
free (info->groups);
+ info->groups = NULL;
for (i = 0; i < info->num_shader_stages; i++)
free (info->stages[i].name);
free (info->stages);
+ info->stages = NULL;
+
+ info->initialized = 0;
}
static const char *
if (verbose)
printf ("fips: terminating\n");
- metrics_info_fini (¤t_context.metrics_info);
+ metrics_info_fini ();
}
void
metrics_info_init (void);
+/* Finalize metrics info state.
+ *
+ * The function should be called just before setting a new, current,
+ * OpenGL context.
+ */
+void
+metrics_info_fini (void);
+
/* Start accumulating GPU time.
*
* The time accumulated will be accounted against the