gallium: add pipe_screen::get_driver_query_group_info v2

Driver queries are organized as a single hierarchy where queries
are categorized into groups. Each goup has a list of queries and
a maximum number of queries that can be sampled.

This will be used by GL_AMD_performance monitor.

V2:
 - add doc to src/gallium/docs/source/screen.rst
 - s/pipe_context/pipe_screen in the commit msg
 - rewrite commit message

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
gallium: add new fields to pipe_driver_query_info

This will be used by GL_AMD_performance_monitor.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
gallium: add a f32 field to pipe_query_result

This will be used by the GL_FLOAT counter type of
GL_AMD_performance_monitor.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
gallium: replace pipe_driver_query_info::max_value by a union v2

This will be used to return different numeric types for
driver queries.

V2:
 - use float instead of double
 - reorder pipe_numeric_type_union to avoid bad initializers

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
gallium: make pipe_context::begin_query return a boolean

This can be used to check if a query is unable to start.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
mesa/st: implement GL_AMD_performance_monitor v4

This is based on the original patch of Christoph Bumiller.
(source: http://people.freedesktop.org/~chrisbmr/perfmon.diff)

Drivers must implement get_driver_query_group_info and
get_driver_query_info in order to enable this extension.

V2: (Samuel Pitoiset)
 - fix compilation
 - improve the original code
 - rewrite some parts of the original code

V3:
 - do not use pipe_driver_query_info::min_value which is always set to 0

V4:
 - only enable AMD_performance_monitor if the driver implements
 pipe_screen::get_driver_query_group_info and get_driver_query_info

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
gallium: add util_get_driver_query_group_info

This generic function will be used to get groups of queries.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
svga: implement pipe_screen::get_driver_query_group_info v3

This enables GL_AMD_performance_monitor for svga.

V2:
 - s/pipe_context/pipe_screen in the commit msg

V3:
 - use util_get_driver_query_group_info

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
freedreno: implement pipe_screen::get_driver_query_group_info v3

This enables GL_AMD_performance_monitor for freedreno.

V2:
 - s/pipe_context/pipe_screen in the commit msg

V3:
 - use util_get_driver_query_group_info

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
radeon: implement pipe_screen::get_driver_query_group_info v3

This enables GL_AMD_performance_monitor for radeon.

V2:
 - s/pipe_context/pipe_screen in the commit msg

V3:
 - use util_get_driver_query_group_info

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
nvc0: implement pipe_screen::get_driver_query_group_info v2

This enables GL_AMD_performance_monitor for nvc0.

V2:
 - use util_get_driver_query_group_info

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
docs: mark GL_AMD_performance_monitor for the 10.3 release

GL_AMD_performance_monitor is supported by nvc0, svga, freedreno and
radeon.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
nvc0: expose driver queries with two groups

This adds a new group for MP performance counters and requires
to write our own implementation of get_driver_query_group_info.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
nvc0: make begin_query return false when all MP counters are used v2

V2:
 - do not return immediately after nvc0_mp_pm_query_end() in
 order to set the current state of the given query

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>