[Mesa-dev] [PATCH v2 7/9] gallium: add the concept of batch queries
Samuel Pitoiset
samuel.pitoiset at gmail.com
Sun Nov 15 07:41:27 PST 2015
You'll need to update this patch and set 'info->flags = 0' in
nv50_query.c as well. I pushed some performance counters for nv50
yesterday. Thanks for doing this change.
On 11/13/2015 08:17 PM, Nicolai Hähnle wrote:
> Some drivers (in particular radeon[si], but also freedreno judging from
> a quick grep) may want to expose performance counters that cannot be
> individually enabled or disabled.
>
> Allow such drivers to mark driver-specific queries as requiring a new
> type of batch query object that is used to start and stop a list of queries
> simultaneously.
>
> v2: documentation for create_batch_query
> ---
> src/gallium/drivers/nouveau/nvc0/nvc0_query.c | 1 +
> src/gallium/include/pipe/p_context.h | 19 +++++++++++++++++++
> src/gallium/include/pipe/p_defines.h | 27 +++++++++++++++++++++------
> 3 files changed, 41 insertions(+), 6 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
> index a1d6162..0608337 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query.c
> @@ -162,6 +162,7 @@ nvc0_screen_get_driver_query_info(struct pipe_screen *pscreen,
> info->max_value.u64 = 0;
> info->type = PIPE_DRIVER_QUERY_TYPE_UINT64;
> info->group_id = -1;
> + info->flags = 0;
>
> #ifdef NOUVEAU_ENABLE_DRIVER_STATISTICS
> if (id < num_sw_queries)
> diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h
> index 27f358f..be7447d 100644
> --- a/src/gallium/include/pipe/p_context.h
> +++ b/src/gallium/include/pipe/p_context.h
> @@ -116,6 +116,25 @@ struct pipe_context {
> unsigned query_type,
> unsigned index );
>
> + /**
> + * Create a query object that queries all given query types simultaneously.
> + *
> + * This can only be used for those query types for which
> + * get_driver_query_info indicates that it must be used. Only one batch
> + * query object may be active at a time.
> + *
> + * There may be additional constraints on which query types can be used
> + * together, in particular those that are implied by
> + * get_driver_query_group_info.
> + *
> + * \param num_queries the number of query types
> + * \param query_types array of \p num_queries query types
> + * \return a query object, or NULL on error.
> + */
> + struct pipe_query *(*create_batch_query)( struct pipe_context *pipe,
> + unsigned num_queries,
> + unsigned *query_types );
> +
> void (*destroy_query)(struct pipe_context *pipe,
> struct pipe_query *q);
>
> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> index 7ed9f6d..b3c8b9f 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -776,6 +776,16 @@ struct pipe_query_data_pipeline_statistics
> };
>
> /**
> + * For batch queries.
> + */
> +union pipe_numeric_type_union
> +{
> + uint64_t u64;
> + uint32_t u32;
> + float f;
> +};
> +
> +/**
> * Query result (returned by pipe_context::get_query_result).
> */
> union pipe_query_result
> @@ -811,6 +821,9 @@ union pipe_query_result
>
> /* PIPE_QUERY_PIPELINE_STATISTICS */
> struct pipe_query_data_pipeline_statistics pipeline_statistics;
> +
> + /* batch queries */
> + union pipe_numeric_type_union batch[0];
> };
>
> union pipe_color_union
> @@ -840,12 +853,13 @@ enum pipe_driver_query_result_type
> PIPE_DRIVER_QUERY_RESULT_TYPE_CUMULATIVE = 1,
> };
>
> -union pipe_numeric_type_union
> -{
> - uint64_t u64;
> - uint32_t u32;
> - float f;
> -};
> +/**
> + * Some hardware requires some hardware-specific queries to be submitted
> + * as batched queries. The corresponding query objects are created using
> + * create_batch_query, and at most one such query may be active at
> + * any time.
> + */
> +#define PIPE_DRIVER_QUERY_FLAG_BATCH (1 << 0)
>
> struct pipe_driver_query_info
> {
> @@ -855,6 +869,7 @@ struct pipe_driver_query_info
> enum pipe_driver_query_type type;
> enum pipe_driver_query_result_type result_type;
> unsigned group_id;
> + unsigned flags;
> };
>
> struct pipe_driver_query_group_info
>
More information about the mesa-dev
mailing list