X-Git-Url: https://git.cworth.org/git?p=fips;a=blobdiff_plain;f=context.h;h=941f4f04b95eccf7762d565d707f9a2d4d1b3def;hp=ded22027f075892a12df33ab5f109d33c09f3c37;hb=076c1c37c1fc8bf3e56a615adfb4c38542cbd4c5;hpb=158a5862aeea9224fcd60c28b0bb19cb6b9f9381 diff --git a/context.h b/context.h index ded2202..941f4f0 100644 --- a/context.h +++ b/context.h @@ -22,9 +22,71 @@ #ifndef CONTEXT_H #define CONTEXT_H +#include "metrics.h" +#include "metrics-info.h" + #include "fips-dispatch.h" -/* Inidcate that a new context has come into use. +/* 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 +{ + 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 * a GLXContext) which fips can use to map to persistent contex_t @@ -41,4 +103,8 @@ context_enter (fips_api_t api, void *system_context_id); void context_leave (void); +/* Get the current context. */ +context_t * +context_get_current (void); + #endif