Re: [PATCH] drm/v3d: Fix perfmon build error/warning

2024-06-07 Thread Tvrtko Ursulin



On 05/06/2024 08:19, Iago Toral wrote:

Thanks for looking at ixing this Tvrtko.

El mar, 04-06-2024 a las 17:02 +0100, Tvrtko Ursulin escribió:

From: Tvrtko Ursulin 

Move static const array into the source file to fix the "defined but
not
used" errors.

The fix is perhaps not the prettiest due hand crafting the array
sizes
in v3d_performance_counters.h, but I did add some build time asserts
to
validate the counts look sensible, so hopefully it is good enough for
a
quick fix.


If we need this to go in ASAP I am fine with this patch as-is, so:

Reviewed-by: Iago Toral Quiroga 

With that said, if we are still in time for a bit of iteration may I
suggest that instead of hard-coding the counters we instead add helper
functions in drivers/gpu/drm/v3d/v3d_perfmon.c that call ARRAY_SIZE on
the corresponding array based on v3d->ver? It is fine if we prefer to
merge this as-is and do this change later as a follow-up patch.


I agree it isn't pretty and I was (and am) planning to see if things can 
be improved. The reason I gave up on a prettier solution in the original 
attempt is the the fact one array is statically sized (at build time) 
based on the max number of counters:


/* Number of perfmons required to handle all supported performance 
counters */

#define V3D_MAX_PERFMONS DIV_ROUND_UP(V3D_MAX_COUNTERS, \
              DRM_V3D_MAX_PERF_COUNTERS)

struct v3d_performance_query {
    /* Performance monitor IDs for this query */
    u32 kperfmon_ids[V3D_MAX_PERFMONS];

So need to see how to untangle that and then perhaps even go a step 
further than the getters but move the whole perfmon init into v3d_perfmon.c.


Regards,

Tvrtko



Iago


Signed-off-by: Tvrtko Ursulin 
Fixes: 3cbcbe016c31 ("drm/v3d: Add Performance Counters descriptions
for V3D 4.2 and 7.1")
Reported-by: kernel test robot 
Closes:
https://lore.kernel.org/oe-kbuild-all/202405211137.huefklkg-...@intel.com/Cc
: Maíra Canal 
Cc: Iago Toral Quiroga 
Cc: Jani Nikula 
Cc: Ashutosh Dixit 
---
  drivers/gpu/drm/v3d/v3d_drv.c |   4 +-
  drivers/gpu/drm/v3d/v3d_drv.h |   3 -
  drivers/gpu/drm/v3d/v3d_perfmon.c | 204
+-
  .../gpu/drm/v3d/v3d_performance_counters.h    | 189 +---
  4 files changed, 205 insertions(+), 195 deletions(-)

diff --git a/drivers/gpu/drm/v3d/v3d_drv.c
b/drivers/gpu/drm/v3d/v3d_drv.c
index f7477488b1cc..a47f00b443d3 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.c
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
@@ -299,9 +299,9 @@ static int v3d_platform_drm_probe(struct
platform_device *pdev)
    WARN_ON(v3d->cores > 1); /* multicore not yet implemented */
  
  	if (v3d->ver >= 71)

-   v3d->max_counters =
ARRAY_SIZE(v3d_v71_performance_counters);
+   v3d->max_counters = V3D_V71_NUM_PERFCOUNTERS;
    else if (v3d->ver >= 42)
-   v3d->max_counters =
ARRAY_SIZE(v3d_v42_performance_counters);
+   v3d->max_counters = V3D_V42_NUM_PERFCOUNTERS;
    else
    v3d->max_counters = 0;
  
diff --git a/drivers/gpu/drm/v3d/v3d_drv.h

b/drivers/gpu/drm/v3d/v3d_drv.h
index 556cbb400ba0..099b962bdfde 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -351,9 +351,6 @@ struct v3d_timestamp_query {
    struct drm_syncobj *syncobj;
  };
  
-/* Maximum number of performance counters supported by any version

of V3D */
-#define V3D_MAX_COUNTERS ARRAY_SIZE(v3d_v71_performance_counters)
-
  /* Number of perfmons required to handle all supported performance
counters */
  #define V3D_MAX_PERFMONS DIV_ROUND_UP(V3D_MAX_COUNTERS, \
      DRM_V3D_MAX_PERF_COUNTERS)
diff --git a/drivers/gpu/drm/v3d/v3d_perfmon.c
b/drivers/gpu/drm/v3d/v3d_perfmon.c
index 73e2bb8bdb7f..b7d0b02e1a95 100644
--- a/drivers/gpu/drm/v3d/v3d_perfmon.c
+++ b/drivers/gpu/drm/v3d/v3d_perfmon.c
@@ -9,6 +9,192 @@
  #define V3D_PERFMONID_MIN 1
  #define V3D_PERFMONID_MAX U32_MAX
  
+static const struct v3d_perf_counter_desc

v3d_v42_performance_counters[] = {
+   {"FEP", "FEP-valid-primitives-no-rendered-pixels", "[FEP]
Valid primitives that result in no rendered pixels, for all rendered
tiles"},
+   {"FEP", "FEP-valid-primitives-rendered-pixels", "[FEP] Valid
primitives for all rendered tiles (primitives may be counted in more
than one tile)"},
+   {"FEP", "FEP-clipped-quads", "[FEP] Early-Z/Near/Far clipped
quads"},
+   {"FEP", "FEP-valid-quads", "[FEP] Valid quads"},
+   {"TLB", "TLB-quads-not-passing-stencil-test", "[TLB] Quads
with no pixels passing the stencil test"},
+   {"TLB", "TLB-quads-not-passing-z-and-stencil-test", "[TLB]
Quads with no pixels passing the Z and stencil tests"},
+   {"TLB", "TLB-quads-passing-z-and-stencil-test", "[TLB] Quads
with any pixels passing the Z and stencil tests"},
+   {"TLB", "TLB-quads-with-zero-coverage", "[TLB] Quads with
all pixels having zero coverage"},
+   {"TLB", 

Re: [PATCH] drm/v3d: Fix perfmon build error/warning

2024-06-05 Thread Jani Nikula
On Tue, 04 Jun 2024, Tvrtko Ursulin  wrote:
> From: Tvrtko Ursulin 
>
> Move static const array into the source file to fix the "defined but not
> used" errors.
>
> The fix is perhaps not the prettiest due hand crafting the array sizes
> in v3d_performance_counters.h, but I did add some build time asserts to
> validate the counts look sensible, so hopefully it is good enough for a
> quick fix.
>
> Signed-off-by: Tvrtko Ursulin 
> Fixes: 3cbcbe016c31 ("drm/v3d: Add Performance Counters descriptions for V3D 
> 4.2 and 7.1")
> Reported-by: kernel test robot 
> Closes: 
> https://lore.kernel.org/oe-kbuild-all/202405211137.huefklkg-...@intel.com/Cc: 
> Maíra Canal 

I guess it's too late now, but \n missing before Cc: there.

BR,
Jani.


> Cc: Iago Toral Quiroga 
> Cc: Jani Nikula 
> Cc: Ashutosh Dixit 
> ---
>  drivers/gpu/drm/v3d/v3d_drv.c |   4 +-
>  drivers/gpu/drm/v3d/v3d_drv.h |   3 -
>  drivers/gpu/drm/v3d/v3d_perfmon.c | 204 +-
>  .../gpu/drm/v3d/v3d_performance_counters.h| 189 +---
>  4 files changed, 205 insertions(+), 195 deletions(-)
>
> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
> index f7477488b1cc..a47f00b443d3 100644
> --- a/drivers/gpu/drm/v3d/v3d_drv.c
> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
> @@ -299,9 +299,9 @@ static int v3d_platform_drm_probe(struct platform_device 
> *pdev)
>   WARN_ON(v3d->cores > 1); /* multicore not yet implemented */
>  
>   if (v3d->ver >= 71)
> - v3d->max_counters = ARRAY_SIZE(v3d_v71_performance_counters);
> + v3d->max_counters = V3D_V71_NUM_PERFCOUNTERS;
>   else if (v3d->ver >= 42)
> - v3d->max_counters = ARRAY_SIZE(v3d_v42_performance_counters);
> + v3d->max_counters = V3D_V42_NUM_PERFCOUNTERS;
>   else
>   v3d->max_counters = 0;
>  
> diff --git a/drivers/gpu/drm/v3d/v3d_drv.h b/drivers/gpu/drm/v3d/v3d_drv.h
> index 556cbb400ba0..099b962bdfde 100644
> --- a/drivers/gpu/drm/v3d/v3d_drv.h
> +++ b/drivers/gpu/drm/v3d/v3d_drv.h
> @@ -351,9 +351,6 @@ struct v3d_timestamp_query {
>   struct drm_syncobj *syncobj;
>  };
>  
> -/* Maximum number of performance counters supported by any version of V3D */
> -#define V3D_MAX_COUNTERS ARRAY_SIZE(v3d_v71_performance_counters)
> -
>  /* Number of perfmons required to handle all supported performance counters 
> */
>  #define V3D_MAX_PERFMONS DIV_ROUND_UP(V3D_MAX_COUNTERS, \
> DRM_V3D_MAX_PERF_COUNTERS)
> diff --git a/drivers/gpu/drm/v3d/v3d_perfmon.c 
> b/drivers/gpu/drm/v3d/v3d_perfmon.c
> index 73e2bb8bdb7f..b7d0b02e1a95 100644
> --- a/drivers/gpu/drm/v3d/v3d_perfmon.c
> +++ b/drivers/gpu/drm/v3d/v3d_perfmon.c
> @@ -9,6 +9,192 @@
>  #define V3D_PERFMONID_MIN1
>  #define V3D_PERFMONID_MAXU32_MAX
>  
> +static const struct v3d_perf_counter_desc v3d_v42_performance_counters[] = {
> + {"FEP", "FEP-valid-primitives-no-rendered-pixels", "[FEP] Valid 
> primitives that result in no rendered pixels, for all rendered tiles"},
> + {"FEP", "FEP-valid-primitives-rendered-pixels", "[FEP] Valid primitives 
> for all rendered tiles (primitives may be counted in more than one tile)"},
> + {"FEP", "FEP-clipped-quads", "[FEP] Early-Z/Near/Far clipped quads"},
> + {"FEP", "FEP-valid-quads", "[FEP] Valid quads"},
> + {"TLB", "TLB-quads-not-passing-stencil-test", "[TLB] Quads with no 
> pixels passing the stencil test"},
> + {"TLB", "TLB-quads-not-passing-z-and-stencil-test", "[TLB] Quads with 
> no pixels passing the Z and stencil tests"},
> + {"TLB", "TLB-quads-passing-z-and-stencil-test", "[TLB] Quads with any 
> pixels passing the Z and stencil tests"},
> + {"TLB", "TLB-quads-with-zero-coverage", "[TLB] Quads with all pixels 
> having zero coverage"},
> + {"TLB", "TLB-quads-with-non-zero-coverage", "[TLB] Quads with any 
> pixels having non-zero coverage"},
> + {"TLB", "TLB-quads-written-to-color-buffer", "[TLB] Quads with valid 
> pixels written to colour buffer"},
> + {"PTB", "PTB-primitives-discarded-outside-viewport", "[PTB] Primitives 
> discarded by being outside the viewport"},
> + {"PTB", "PTB-primitives-need-clipping", "[PTB] Primitives that need 
> clipping"},
> + {"PTB", "PTB-primitives-discarded-reversed", "[PTB] Primitives that are 
> discarded because they are reversed"},
> + {"QPU", "QPU-total-idle-clk-cycles", "[QPU] Total idle clock cycles for 
> all QPUs"},
> + {"QPU", "QPU-total-active-clk-cycles-vertex-coord-shading", "[QPU] 
> Total active clock cycles for all QPUs doing vertex/coordinate/user shading 
> (counts only when QPU is not stalled)"},
> + {"QPU", "QPU-total-active-clk-cycles-fragment-shading", "[QPU] Total 
> active clock cycles for all QPUs doing fragment shading (counts only when QPU 
> is not stalled)"},
> + {"QPU", "QPU-total-clk-cycles-executing-valid-instr", "[QPU] Total 
> clock cycles for all QPUs executing 

Re: (subset) [PATCH] drm/v3d: Fix perfmon build error/warning

2024-06-05 Thread Maxime Ripard
On Tue, 04 Jun 2024 17:02:10 +0100, Tvrtko Ursulin wrote:
> Move static const array into the source file to fix the "defined but not
> used" errors.
> 
> The fix is perhaps not the prettiest due hand crafting the array sizes
> in v3d_performance_counters.h, but I did add some build time asserts to
> validate the counts look sensible, so hopefully it is good enough for a
> quick fix.
> 
> [...]

Applied to misc/kernel.git (drm-misc-next).

Thanks!
Maxime



Re: [PATCH] drm/v3d: Fix perfmon build error/warning

2024-06-05 Thread Maxime Ripard
Hi,

On Wed, Jun 05, 2024 at 08:19:34AM GMT, Iago Toral wrote:
> Thanks for looking at ixing this Tvrtko.
> 
> El mar, 04-06-2024 a las 17:02 +0100, Tvrtko Ursulin escribió:
> > From: Tvrtko Ursulin 
> > 
> > Move static const array into the source file to fix the "defined but
> > not
> > used" errors.
> > 
> > The fix is perhaps not the prettiest due hand crafting the array
> > sizes
> > in v3d_performance_counters.h, but I did add some build time asserts
> > to
> > validate the counts look sensible, so hopefully it is good enough for
> > a
> > quick fix.
> > 
> 
> If we need this to go in ASAP I am fine with this patch as-is, so:
> 
> Reviewed-by: Iago Toral Quiroga 
> 
> With that said, if we are still in time for a bit of iteration may I
> suggest that instead of hard-coding the counters we instead add helper
> functions in drivers/gpu/drm/v3d/v3d_perfmon.c that call ARRAY_SIZE on
> the corresponding array based on v3d->ver? It is fine if we prefer to
> merge this as-is and do this change later as a follow-up patch.

This is blocking the merge from drm-misc-next into drm/next at the
moment, so I'm going to merge this patch as is so I can send the PR
tomorrow.

Your comment looks fine to me too, so feel free to send a follow-up
patch to refine what's done here :)

Thanks!
Maxime


signature.asc
Description: PGP signature


Re: [PATCH] drm/v3d: Fix perfmon build error/warning

2024-06-05 Thread Iago Toral
Thanks for looking at ixing this Tvrtko.

El mar, 04-06-2024 a las 17:02 +0100, Tvrtko Ursulin escribió:
> From: Tvrtko Ursulin 
> 
> Move static const array into the source file to fix the "defined but
> not
> used" errors.
> 
> The fix is perhaps not the prettiest due hand crafting the array
> sizes
> in v3d_performance_counters.h, but I did add some build time asserts
> to
> validate the counts look sensible, so hopefully it is good enough for
> a
> quick fix.
> 

If we need this to go in ASAP I am fine with this patch as-is, so:

Reviewed-by: Iago Toral Quiroga 

With that said, if we are still in time for a bit of iteration may I
suggest that instead of hard-coding the counters we instead add helper
functions in drivers/gpu/drm/v3d/v3d_perfmon.c that call ARRAY_SIZE on
the corresponding array based on v3d->ver? It is fine if we prefer to
merge this as-is and do this change later as a follow-up patch.

Iago

> Signed-off-by: Tvrtko Ursulin 
> Fixes: 3cbcbe016c31 ("drm/v3d: Add Performance Counters descriptions
> for V3D 4.2 and 7.1")
> Reported-by: kernel test robot 
> Closes:
> https://lore.kernel.org/oe-kbuild-all/202405211137.huefklkg-...@intel.com/Cc
> : Maíra Canal 
> Cc: Iago Toral Quiroga 
> Cc: Jani Nikula 
> Cc: Ashutosh Dixit 
> ---
>  drivers/gpu/drm/v3d/v3d_drv.c |   4 +-
>  drivers/gpu/drm/v3d/v3d_drv.h |   3 -
>  drivers/gpu/drm/v3d/v3d_perfmon.c | 204
> +-
>  .../gpu/drm/v3d/v3d_performance_counters.h    | 189 +---
>  4 files changed, 205 insertions(+), 195 deletions(-)
> 
> diff --git a/drivers/gpu/drm/v3d/v3d_drv.c
> b/drivers/gpu/drm/v3d/v3d_drv.c
> index f7477488b1cc..a47f00b443d3 100644
> --- a/drivers/gpu/drm/v3d/v3d_drv.c
> +++ b/drivers/gpu/drm/v3d/v3d_drv.c
> @@ -299,9 +299,9 @@ static int v3d_platform_drm_probe(struct
> platform_device *pdev)
>   WARN_ON(v3d->cores > 1); /* multicore not yet implemented */
>  
>   if (v3d->ver >= 71)
> - v3d->max_counters =
> ARRAY_SIZE(v3d_v71_performance_counters);
> + v3d->max_counters = V3D_V71_NUM_PERFCOUNTERS;
>   else if (v3d->ver >= 42)
> - v3d->max_counters =
> ARRAY_SIZE(v3d_v42_performance_counters);
> + v3d->max_counters = V3D_V42_NUM_PERFCOUNTERS;
>   else
>   v3d->max_counters = 0;
>  
> diff --git a/drivers/gpu/drm/v3d/v3d_drv.h
> b/drivers/gpu/drm/v3d/v3d_drv.h
> index 556cbb400ba0..099b962bdfde 100644
> --- a/drivers/gpu/drm/v3d/v3d_drv.h
> +++ b/drivers/gpu/drm/v3d/v3d_drv.h
> @@ -351,9 +351,6 @@ struct v3d_timestamp_query {
>   struct drm_syncobj *syncobj;
>  };
>  
> -/* Maximum number of performance counters supported by any version
> of V3D */
> -#define V3D_MAX_COUNTERS ARRAY_SIZE(v3d_v71_performance_counters)
> -
>  /* Number of perfmons required to handle all supported performance
> counters */
>  #define V3D_MAX_PERFMONS DIV_ROUND_UP(V3D_MAX_COUNTERS, \
>     DRM_V3D_MAX_PERF_COUNTERS)
> diff --git a/drivers/gpu/drm/v3d/v3d_perfmon.c
> b/drivers/gpu/drm/v3d/v3d_perfmon.c
> index 73e2bb8bdb7f..b7d0b02e1a95 100644
> --- a/drivers/gpu/drm/v3d/v3d_perfmon.c
> +++ b/drivers/gpu/drm/v3d/v3d_perfmon.c
> @@ -9,6 +9,192 @@
>  #define V3D_PERFMONID_MIN1
>  #define V3D_PERFMONID_MAXU32_MAX
>  
> +static const struct v3d_perf_counter_desc
> v3d_v42_performance_counters[] = {
> + {"FEP", "FEP-valid-primitives-no-rendered-pixels", "[FEP]
> Valid primitives that result in no rendered pixels, for all rendered
> tiles"},
> + {"FEP", "FEP-valid-primitives-rendered-pixels", "[FEP] Valid
> primitives for all rendered tiles (primitives may be counted in more
> than one tile)"},
> + {"FEP", "FEP-clipped-quads", "[FEP] Early-Z/Near/Far clipped
> quads"},
> + {"FEP", "FEP-valid-quads", "[FEP] Valid quads"},
> + {"TLB", "TLB-quads-not-passing-stencil-test", "[TLB] Quads
> with no pixels passing the stencil test"},
> + {"TLB", "TLB-quads-not-passing-z-and-stencil-test", "[TLB]
> Quads with no pixels passing the Z and stencil tests"},
> + {"TLB", "TLB-quads-passing-z-and-stencil-test", "[TLB] Quads
> with any pixels passing the Z and stencil tests"},
> + {"TLB", "TLB-quads-with-zero-coverage", "[TLB] Quads with
> all pixels having zero coverage"},
> + {"TLB", "TLB-quads-with-non-zero-coverage", "[TLB] Quads
> with any pixels having non-zero coverage"},
> + {"TLB", "TLB-quads-written-to-color-buffer", "[TLB] Quads
> with valid pixels written to colour buffer"},
> + {"PTB", "PTB-primitives-discarded-outside-viewport", "[PTB]
> Primitives discarded by being outside the viewport"},
> + {"PTB", "PTB-primitives-need-clipping", "[PTB] Primitives
> that need clipping"},
> + {"PTB", "PTB-primitives-discarded-reversed", "[PTB]
> Primitives that are discarded because they are reversed"},
> + {"QPU", "QPU-total-idle-clk-cycles", "[QPU] Total idle clock
> cycles for all QPUs"},
> + {"QPU", 

[PATCH] drm/v3d: Fix perfmon build error/warning

2024-06-04 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Move static const array into the source file to fix the "defined but not
used" errors.

The fix is perhaps not the prettiest due hand crafting the array sizes
in v3d_performance_counters.h, but I did add some build time asserts to
validate the counts look sensible, so hopefully it is good enough for a
quick fix.

Signed-off-by: Tvrtko Ursulin 
Fixes: 3cbcbe016c31 ("drm/v3d: Add Performance Counters descriptions for V3D 
4.2 and 7.1")
Reported-by: kernel test robot 
Closes: 
https://lore.kernel.org/oe-kbuild-all/202405211137.huefklkg-...@intel.com/Cc: 
Maíra Canal 
Cc: Iago Toral Quiroga 
Cc: Jani Nikula 
Cc: Ashutosh Dixit 
---
 drivers/gpu/drm/v3d/v3d_drv.c |   4 +-
 drivers/gpu/drm/v3d/v3d_drv.h |   3 -
 drivers/gpu/drm/v3d/v3d_perfmon.c | 204 +-
 .../gpu/drm/v3d/v3d_performance_counters.h| 189 +---
 4 files changed, 205 insertions(+), 195 deletions(-)

diff --git a/drivers/gpu/drm/v3d/v3d_drv.c b/drivers/gpu/drm/v3d/v3d_drv.c
index f7477488b1cc..a47f00b443d3 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.c
+++ b/drivers/gpu/drm/v3d/v3d_drv.c
@@ -299,9 +299,9 @@ static int v3d_platform_drm_probe(struct platform_device 
*pdev)
WARN_ON(v3d->cores > 1); /* multicore not yet implemented */
 
if (v3d->ver >= 71)
-   v3d->max_counters = ARRAY_SIZE(v3d_v71_performance_counters);
+   v3d->max_counters = V3D_V71_NUM_PERFCOUNTERS;
else if (v3d->ver >= 42)
-   v3d->max_counters = ARRAY_SIZE(v3d_v42_performance_counters);
+   v3d->max_counters = V3D_V42_NUM_PERFCOUNTERS;
else
v3d->max_counters = 0;
 
diff --git a/drivers/gpu/drm/v3d/v3d_drv.h b/drivers/gpu/drm/v3d/v3d_drv.h
index 556cbb400ba0..099b962bdfde 100644
--- a/drivers/gpu/drm/v3d/v3d_drv.h
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
@@ -351,9 +351,6 @@ struct v3d_timestamp_query {
struct drm_syncobj *syncobj;
 };
 
-/* Maximum number of performance counters supported by any version of V3D */
-#define V3D_MAX_COUNTERS ARRAY_SIZE(v3d_v71_performance_counters)
-
 /* Number of perfmons required to handle all supported performance counters */
 #define V3D_MAX_PERFMONS DIV_ROUND_UP(V3D_MAX_COUNTERS, \
  DRM_V3D_MAX_PERF_COUNTERS)
diff --git a/drivers/gpu/drm/v3d/v3d_perfmon.c 
b/drivers/gpu/drm/v3d/v3d_perfmon.c
index 73e2bb8bdb7f..b7d0b02e1a95 100644
--- a/drivers/gpu/drm/v3d/v3d_perfmon.c
+++ b/drivers/gpu/drm/v3d/v3d_perfmon.c
@@ -9,6 +9,192 @@
 #define V3D_PERFMONID_MIN  1
 #define V3D_PERFMONID_MAX  U32_MAX
 
+static const struct v3d_perf_counter_desc v3d_v42_performance_counters[] = {
+   {"FEP", "FEP-valid-primitives-no-rendered-pixels", "[FEP] Valid 
primitives that result in no rendered pixels, for all rendered tiles"},
+   {"FEP", "FEP-valid-primitives-rendered-pixels", "[FEP] Valid primitives 
for all rendered tiles (primitives may be counted in more than one tile)"},
+   {"FEP", "FEP-clipped-quads", "[FEP] Early-Z/Near/Far clipped quads"},
+   {"FEP", "FEP-valid-quads", "[FEP] Valid quads"},
+   {"TLB", "TLB-quads-not-passing-stencil-test", "[TLB] Quads with no 
pixels passing the stencil test"},
+   {"TLB", "TLB-quads-not-passing-z-and-stencil-test", "[TLB] Quads with 
no pixels passing the Z and stencil tests"},
+   {"TLB", "TLB-quads-passing-z-and-stencil-test", "[TLB] Quads with any 
pixels passing the Z and stencil tests"},
+   {"TLB", "TLB-quads-with-zero-coverage", "[TLB] Quads with all pixels 
having zero coverage"},
+   {"TLB", "TLB-quads-with-non-zero-coverage", "[TLB] Quads with any 
pixels having non-zero coverage"},
+   {"TLB", "TLB-quads-written-to-color-buffer", "[TLB] Quads with valid 
pixels written to colour buffer"},
+   {"PTB", "PTB-primitives-discarded-outside-viewport", "[PTB] Primitives 
discarded by being outside the viewport"},
+   {"PTB", "PTB-primitives-need-clipping", "[PTB] Primitives that need 
clipping"},
+   {"PTB", "PTB-primitives-discarded-reversed", "[PTB] Primitives that are 
discarded because they are reversed"},
+   {"QPU", "QPU-total-idle-clk-cycles", "[QPU] Total idle clock cycles for 
all QPUs"},
+   {"QPU", "QPU-total-active-clk-cycles-vertex-coord-shading", "[QPU] 
Total active clock cycles for all QPUs doing vertex/coordinate/user shading 
(counts only when QPU is not stalled)"},
+   {"QPU", "QPU-total-active-clk-cycles-fragment-shading", "[QPU] Total 
active clock cycles for all QPUs doing fragment shading (counts only when QPU 
is not stalled)"},
+   {"QPU", "QPU-total-clk-cycles-executing-valid-instr", "[QPU] Total 
clock cycles for all QPUs executing valid instructions"},
+   {"QPU", "QPU-total-clk-cycles-waiting-TMU", "[QPU] Total clock cycles 
for all QPUs stalled waiting for TMUs only (counter won't increment if QPU also 
stalling for another reason)"},
+   {"QPU",