]> git.cworth.org Git - fips/blobdiff - context.h
Add explicit link to libpthread, to work around debugging issues
[fips] / context.h
index 9b838812722e29e01e382233e00ac8b8fe29775c..cbfd6b48f0dbc315f824a28255f8ddf7960c48c3 100644 (file)
--- a/context.h
+++ b/context.h
 
 #include "fips-dispatch.h"
 
-/* Timer query */
-typedef struct timer_query
-{
-       unsigned id;
-
-       metrics_op_t op;
-       struct timer_query *next;
-} timer_query_t;
-
-/* Performance-monitor query */
-typedef struct monitor
-{
-       unsigned id;
-
-       metrics_op_t op;
-       struct monitor *next;
-} monitor_t;
-
-typedef struct op_metrics
-{
-       /* This happens to also be the index into the
-        * ctx->op_metrics array currently
-        */
-       metrics_op_t op;
-       double time_ns;
-
-       double **counters;
-} op_metrics_t;
-
-typedef struct context
-{
-       /* Pointer to the system's context ID, (such as a GLXContext) */
-       void *system_id;
-
-       metrics_info_t metrics_info;
-
-       metrics_op_t op;
-
-       /* GL_TIME_ELAPSED query for which glEndQuery has not yet
-        * been called. */
-       unsigned timer_begun_id;
-
-       /* GL_TIME_ELAPSED queries for which glEndQuery has been
-        * called, (but results have not yet been queried). */
-       timer_query_t *timer_head;
-       timer_query_t *timer_tail;
-
-       /* Performance monitor for which glEndPerfMonitorAMD has not
-        * yet been called. */
-       unsigned monitor_begun_id;
-
-       /* Performance monitors for which glEndPerfMonitorAMD has
-        * been called, (but results have not yet been queried). */
-       monitor_t *monitor_head;
-       monitor_t *monitor_tail;
-
-       int monitors_in_flight;
-
-       unsigned num_op_metrics;
-       op_metrics_t *op_metrics;
-} context_t;
-
 /* Indicate that a new context has come into use.
  *
  * Here, 'system_context_id' is a pointer to a system context (such as
@@ -106,8 +44,46 @@ context_enter (fips_api_t api, void *system_context_id);
 void
 context_leave (void);
 
-/* Get the current context. */
-context_t *
-context_get_current (void);
+/* Start accumulating GPU time.
+ *
+ * The time accumulated will be accounted against the
+ * current operation (as set with context_set_current_op).
+ */
+void
+context_counter_start (void);
+
+/* Stop accumulating GPU time (stops the most-recently started counter) */
+void
+context_counter_stop (void);
+
+/* Set a metrics_op_t value to indicate what kind of operation is
+ * being performed.
+ *
+ * The metrics-tracking code will account for timings by accumulating
+ * measured counter values into a separate counter for each
+ * metrics_op_t value, (so that the report can describe which
+ * operations are the most expensive).
+ *
+ * In addition, for the value METRICS_OP_SHADER, each specific shader
+ * program can be distinguished. To accomplish this, pass a value of
+ * METRICS_OP_SHADER + shader_program_number to this function.
+ */
+void
+context_set_current_op (metrics_op_t op);
+
+/* Return the current metrics_op_t value, (the value most-recently-set
+ * with a call to context_set_current_op).
+ */
+metrics_op_t
+context_get_current_op (void);
+
+/* Should be called at the end of every function wrapper for a
+ * function that ends a frame, (glXSwapBuffers and similar).
+ *
+ * This function performs whatever bookkeeping is necessary to
+ * generate a timing report, then emits that report.
+ */
+void
+context_end_frame (void);
 
 #endif