diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/freedreno/a2xx/fd2_perfcntr.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a5xx/fd5_perfcntr.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/a6xx/fd6_perfcntr.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_perfcntr.h | 33 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_query.c | 39 |
5 files changed, 75 insertions, 9 deletions
diff --git a/src/gallium/drivers/freedreno/a2xx/fd2_perfcntr.c b/src/gallium/drivers/freedreno/a2xx/fd2_perfcntr.c index c5f37908f33..06246f398eb 100644 --- a/src/gallium/drivers/freedreno/a2xx/fd2_perfcntr.c +++ b/src/gallium/drivers/freedreno/a2xx/fd2_perfcntr.c @@ -25,7 +25,9 @@ * Rob Clark <[email protected]> */ -#include "freedreno_util.h" +#include "util/u_half.h" +#include "adreno_common.xml.h" +#include "adreno_pm4.xml.h" #include "a2xx.xml.h" #define REG(_x) REG_A2XX_ ## _x diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_perfcntr.c b/src/gallium/drivers/freedreno/a5xx/fd5_perfcntr.c index 93be373a7bd..2d0579ca363 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_perfcntr.c +++ b/src/gallium/drivers/freedreno/a5xx/fd5_perfcntr.c @@ -27,7 +27,9 @@ #ifndef FD5_PERFCNTR_H_ #define FD5_PERFCNTR_H_ -#include "fd5_format.h" +#include "util/u_half.h" +#include "adreno_common.xml.h" +#include "a5xx.xml.h" #define REG(_x) REG_A5XX_ ## _x #include "freedreno_perfcntr.h" diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_perfcntr.c b/src/gallium/drivers/freedreno/a6xx/fd6_perfcntr.c index 8f23a224a4a..a3c62d1286f 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_perfcntr.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_perfcntr.c @@ -27,7 +27,9 @@ #ifndef FD6_PERFCNTR_H_ #define FD6_PERFCNTR_H_ -#include "fd6_format.h" +#include "util/u_half.h" +#include "adreno_common.xml.h" +#include "a6xx.xml.h" #define REG(_x) REG_A6XX_ ## _x #include "freedreno_perfcntr.h" diff --git a/src/gallium/drivers/freedreno/freedreno_perfcntr.h b/src/gallium/drivers/freedreno/freedreno_perfcntr.h index 0cc5485ff12..041d84bda54 100644 --- a/src/gallium/drivers/freedreno/freedreno_perfcntr.h +++ b/src/gallium/drivers/freedreno/freedreno_perfcntr.h @@ -48,6 +48,31 @@ struct fd_perfcntr_counter { unsigned clear; }; + +enum fd_perfcntr_type { + FD_PERFCNTR_TYPE_UINT64, + FD_PERFCNTR_TYPE_UINT, + FD_PERFCNTR_TYPE_FLOAT, + FD_PERFCNTR_TYPE_PERCENTAGE, + FD_PERFCNTR_TYPE_BYTES, + FD_PERFCNTR_TYPE_MICROSECONDS, + FD_PERFCNTR_TYPE_HZ, + FD_PERFCNTR_TYPE_DBM, + FD_PERFCNTR_TYPE_TEMPERATURE, + FD_PERFCNTR_TYPE_VOLTS, + FD_PERFCNTR_TYPE_AMPS, + FD_PERFCNTR_TYPE_WATTS, +}; + +/* Whether an average value per frame or a cumulative value should be + * displayed. + */ +enum fd_perfcntr_result_type { + FD_PERFCNTR_RESULT_TYPE_AVERAGE, + FD_PERFCNTR_RESULT_TYPE_CUMULATIVE, +}; + + /* Describes a single countable: */ struct fd_perfcntr_countable { const char *name; @@ -55,8 +80,8 @@ struct fd_perfcntr_countable { unsigned selector; /* description of the countable: */ - enum pipe_driver_query_type query_type; - enum pipe_driver_query_result_type result_type; + enum fd_perfcntr_type query_type; + enum fd_perfcntr_result_type result_type; }; /* Describes an entire counter group: */ @@ -85,8 +110,8 @@ struct fd_perfcntr_group { #define COUNTABLE(_selector, _query_type, _result_type) { \ .name = #_selector, \ .selector = _selector, \ - .query_type = PIPE_DRIVER_QUERY_TYPE_ ## _query_type, \ - .result_type = PIPE_DRIVER_QUERY_RESULT_TYPE_ ## _result_type, \ + .query_type = FD_PERFCNTR_TYPE_ ## _query_type, \ + .result_type = FD_PERFCNTR_RESULT_TYPE_ ## _result_type, \ } #define GROUP(_name, _counters, _countables) { \ diff --git a/src/gallium/drivers/freedreno/freedreno_query.c b/src/gallium/drivers/freedreno/freedreno_query.c index 1c98f4db156..852c828fb06 100644 --- a/src/gallium/drivers/freedreno/freedreno_query.c +++ b/src/gallium/drivers/freedreno/freedreno_query.c @@ -192,6 +192,41 @@ fd_set_active_query_state(struct pipe_context *pipe, bool enable) { } +static enum pipe_driver_query_type +query_type(enum fd_perfcntr_type type) +{ +#define ENUM(t) case FD_PERFCNTR_ ## t: return PIPE_DRIVER_QUERY_ ## t + switch (type) { + ENUM(TYPE_UINT64); + ENUM(TYPE_UINT); + ENUM(TYPE_FLOAT); + ENUM(TYPE_PERCENTAGE); + ENUM(TYPE_BYTES); + ENUM(TYPE_MICROSECONDS); + ENUM(TYPE_HZ); + ENUM(TYPE_DBM); + ENUM(TYPE_TEMPERATURE); + ENUM(TYPE_VOLTS); + ENUM(TYPE_AMPS); + ENUM(TYPE_WATTS); + default: + unreachable("bad type"); + return 0; + } +} + +static enum pipe_driver_query_result_type +query_result_type(enum fd_perfcntr_result_type type) +{ + switch (type) { + ENUM(RESULT_TYPE_AVERAGE); + ENUM(RESULT_TYPE_CUMULATIVE); + default: + unreachable("bad type"); + return 0; + } +} + static void setup_perfcntr_query_info(struct fd_screen *screen) { @@ -215,8 +250,8 @@ setup_perfcntr_query_info(struct fd_screen *screen) info->name = c->name; info->query_type = FD_QUERY_FIRST_PERFCNTR + idx; - info->type = c->query_type; - info->result_type = c->result_type; + info->type = query_type(c->query_type); + info->result_type = query_result_type(c->result_type); info->group_id = i; info->flags = PIPE_DRIVER_QUERY_FLAG_BATCH; |