[Mesa-dev] [PATCH 7/9] gallium: add the concept of batch queries
Samuel Pitoiset
samuel.pitoiset at gmail.com
Fri Nov 13 09:34:57 PST 2015
On 11/13/2015 04:57 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.
> ---
> src/gallium/drivers/nouveau/nvc0/nvc0_query.c | 1 +
> src/gallium/include/pipe/p_context.h | 3 +++
> src/gallium/include/pipe/p_defines.h | 27 +++++++++++++++++++++------
> 3 files changed, 25 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..f122c74 100644
> --- a/src/gallium/include/pipe/p_context.h
> +++ b/src/gallium/include/pipe/p_context.h
> @@ -115,6 +115,9 @@ struct pipe_context {
> struct pipe_query *(*create_query)( struct pipe_context *pipe,
> unsigned query_type,
> unsigned index );
> + struct pipe_query *(*create_batch_query)( struct pipe_context *pipe,
> + unsigned num_queries,
> + unsigned *query_types );
Could you please document that function like get_query_result()?
>
> 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
>
--
-Samuel
More information about the mesa-dev
mailing list