X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=metrics.h;h=4beda7f5e41b1eddfb959b29b9a0a2583bf0b73b;hb=158a5862aeea9224fcd60c28b0bb19cb6b9f9381;hp=261a5a5c13fe3a5771544479d3a02b3ed58f04e2;hpb=c0c549440d852153d1777eca3fa962c1b70483b3;p=fips diff --git a/metrics.h b/metrics.h index 261a5a5..4beda7f 100644 --- a/metrics.h +++ b/metrics.h @@ -22,24 +22,83 @@ #ifndef METRICS_H #define METRICS_H -/* Add a new counter to the metrics tracking state. +typedef enum +{ + METRICS_OP_ACCUM, + METRICS_OP_BUFFER_DATA, + METRICS_OP_BUFFER_SUB_DATA, + METRICS_OP_BITMAP, + METRICS_OP_BLIT_FRAMEBUFFER, + METRICS_OP_CLEAR, + METRICS_OP_CLEAR_BUFFER_DATA, + METRICS_OP_CLEAR_TEX_IMAGE, + METRICS_OP_COPY_PIXELS, + METRICS_OP_COPY_TEX_IMAGE, + METRICS_OP_DRAW_PIXELS, + METRICS_OP_GET_TEX_IMAGE, + METRICS_OP_READ_PIXELS, + METRICS_OP_TEX_IMAGE, + + /* METRICS_OP_SHADER must be last. + * + * All larger values for metrics_op_t are interpreted as: + * + * METRICS_OP_SHADER + shader_program_number + * + * to indicate a specific shader program. + */ + METRICS_OP_SHADER +} metrics_op_t; + +/* Initialize metrics info * - * The value accumulated in this counter be accounted against the - * current program (as set with metrics_set_current_program). + * This queries the names and ranges for all available performance counters. + * + * This should be called once before any other metrics functions. + */ +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. * - * Returns: A counter ID suitable for use with glBeginQuery/glEndQuery + * The time accumulated will be accounted against the + * current program (as set with metrics_set_current_program). */ -unsigned -metrics_add_counter (void); +void +metrics_counter_start (void); -/* Set the ID of the currently executing shader program. +/* Stop accumulating GPU time (stops the most-recently started counter) */ +void +metrics_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). * - * The metrics-tracking code will account for per-shader-program - * timings by accumulating counter values measured while each porogram - * is active (see metrics_add_counter). + * 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 -metrics_set_current_program (unsigned program); +metrics_set_current_op (metrics_op_t op); + +/* Return the current metrics_op_t value, (the value most-recently-set + * with a call to metrics_set_current_op). + */ +metrics_op_t +metrics_get_current_op (void); /* Should be called at the end of every function wrapper for a * function that ends a frame, (glXSwapBuffers and similar).