[Mesa-dev] [PATCH 1/2] nv50: expose two groups of compute-related MP perf counters
Ilia Mirkin
imirkin at alum.mit.edu
Fri Nov 20 11:33:00 PST 2015
Series is Acked-by: Ilia Mirkin <imirkin at alum.mit.edu> . TBH I haven't
spent the time to figure out what all this stuff is, but these changes
appear to be internally consistent :)
On Fri, Nov 20, 2015 at 2:28 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> This turns on GL_AMD_performance_monitor.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/gallium/drivers/nouveau/nv50/nv50_query.c | 52 ++++++++++++++++++++++
> src/gallium/drivers/nouveau/nv50/nv50_query.h | 6 +++
> .../drivers/nouveau/nv50/nv50_query_hw_metric.c | 2 +-
> .../drivers/nouveau/nv50/nv50_query_hw_sm.c | 2 +-
> src/gallium/drivers/nouveau/nv50/nv50_screen.c | 1 +
> src/gallium/drivers/nouveau/nv50/nv50_screen.h | 2 +
> 6 files changed, 63 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query.c b/src/gallium/drivers/nouveau/nv50/nv50_query.c
> index 6b3e49a..4cd3b61 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_query.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_query.c
> @@ -27,6 +27,8 @@
> #include "nv50/nv50_context.h"
> #include "nv50/nv50_query.h"
> #include "nv50/nv50_query_hw.h"
> +#include "nv50/nv50_query_hw_metric.h"
> +#include "nv50/nv50_query_hw_sm.h"
>
> static struct pipe_query *
> nv50_create_query(struct pipe_context *pipe, unsigned type, unsigned index)
> @@ -178,3 +180,53 @@ nv50_screen_get_driver_query_info(struct pipe_screen *pscreen,
>
> return nv50_hw_get_driver_query_info(screen, id, info);
> }
> +
> +int
> +nv50_screen_get_driver_query_group_info(struct pipe_screen *pscreen,
> + unsigned id,
> + struct pipe_driver_query_group_info *info)
> +{
> + struct nv50_screen *screen = nv50_screen(pscreen);
> + int count = 0;
> +
> + if (screen->compute)
> + if (screen->base.class_3d >= NV84_3D_CLASS)
> + count += 2;
> +
> + if (!info)
> + return count;
> +
> + if (id == NV50_HW_SM_QUERY_GROUP) {
> + if (screen->compute) {
> + if (screen->base.class_3d >= NV84_3D_CLASS) {
> + info->name = "MP counters";
> +
> + /* Because we can't expose the number of hardware counters needed
> + * for each different query, we don't want to allow more than one
> + * active query simultaneously to avoid failure when the maximum
> + * number of counters is reached. Note that these groups of GPU
> + * counters are currently only used by AMD_performance_monitor.
> + */
> + info->max_active_queries = 1;
> + info->num_queries = NV50_HW_SM_QUERY_COUNT;
> + return 1;
> + }
> + }
> + } else
> + if (id == NV50_HW_METRIC_QUERY_GROUP) {
> + if (screen->compute) {
> + if (screen->base.class_3d >= NV84_3D_CLASS) {
> + info->name = "Performance metrics";
> + info->max_active_queries = 1;
> + info->num_queries = NV50_HW_METRIC_QUERY_COUNT;
> + return 1;
> + }
> + }
> + }
> +
> + /* user asked for info about non-existing query group */
> + info->name = "this_is_not_the_query_group_you_are_looking_for";
> + info->max_active_queries = 0;
> + info->num_queries = 0;
> + return 0;
> +}
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query.h b/src/gallium/drivers/nouveau/nv50/nv50_query.h
> index d990285..bd4c0a3 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_query.h
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_query.h
> @@ -28,6 +28,12 @@ nv50_query(struct pipe_query *pipe)
> return (struct nv50_query *)pipe;
> }
>
> +/*
> + * Driver queries groups:
> + */
> +#define NV50_HW_SM_QUERY_GROUP 0
> +#define NV50_HW_METRIC_QUERY_GROUP 1
> +
> void nv50_init_query_functions(struct nv50_context *);
>
> #endif
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query_hw_metric.c b/src/gallium/drivers/nouveau/nv50/nv50_query_hw_metric.c
> index 13dad30..d1bccb9 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_query_hw_metric.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_query_hw_metric.c
> @@ -198,7 +198,7 @@ nv50_hw_metric_get_driver_query_info(struct nv50_screen *screen, unsigned id,
> if (screen->base.class_3d >= NV84_3D_CLASS) {
> info->name = nv50_hw_metric_names[id];
> info->query_type = NV50_HW_METRIC_QUERY(id);
> - info->group_id = -1;
> + info->group_id = NV50_HW_METRIC_QUERY_GROUP;
> return 1;
> }
> }
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c b/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c
> index e75b428..8453ce7 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_query_hw_sm.c
> @@ -408,7 +408,7 @@ nv50_hw_sm_get_driver_query_info(struct nv50_screen *screen, unsigned id,
> if (screen->base.class_3d >= NV84_3D_CLASS) {
> info->name = nv50_hw_sm_query_names[id];
> info->query_type = NV50_HW_SM_QUERY(id);
> - info->group_id = -1;
> + info->group_id = NV50_HW_SM_QUERY_GROUP;
> return 1;
> }
> }
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> index cc7984d..1e4b75f 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> @@ -790,6 +790,7 @@ nv50_screen_create(struct nouveau_device *dev)
> pscreen->get_paramf = nv50_screen_get_paramf;
> pscreen->get_compute_param = nv50_screen_get_compute_param;
> pscreen->get_driver_query_info = nv50_screen_get_driver_query_info;
> + pscreen->get_driver_query_group_info = nv50_screen_get_driver_query_group_info;
>
> nv50_screen_init_resource_functions(pscreen);
>
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.h b/src/gallium/drivers/nouveau/nv50/nv50_screen.h
> index c2a16d8..2a4983d 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.h
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.h
> @@ -117,6 +117,8 @@ nv50_screen(struct pipe_screen *screen)
>
> int nv50_screen_get_driver_query_info(struct pipe_screen *, unsigned,
> struct pipe_driver_query_info *);
> +int nv50_screen_get_driver_query_group_info(struct pipe_screen *, unsigned,
> + struct pipe_driver_query_group_info *);
>
> bool nv50_blitter_create(struct nv50_screen *);
> void nv50_blitter_destroy(struct nv50_screen *);
> --
> 2.5.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list