st/mesa: implement GL_AMD_performance_monitor v5

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
 - make use of PIPE_DRIVER_QUERY_TYPE_*
 - use of GL_UNSIGNED_INT in st_GetPerfMonitorResult()

V5:
 - use st/mesa instead of mesa/st
 - add comments to find_query_type() and reinitialize_perf_monitor()
 - change copyrights
 - do not wait for results in st_IsPerfMonitorResultAvailable which is
 not supposed to block
 - add st_destroy_perfmon() in order to free memory allocated by groups
 and counters (this fixes a memleak)

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

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

V2:
 - add some comments as request by Brian Paul
 - put the function name on the next line

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

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

V4:
 - add SVGA_QUERY_COUNT in svga_context.h

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

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

V4:
 - add FD_QUERY_COUNT in freedreno_query.h

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

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

V4:
 - add R600_QUERY_COUNT in r600_pipe_common.h

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

This enables GL_AMD_performance_monitor for nvc0.

V2:
 - use util_get_driver_query_group_info

V3:
 - use of NVC0_QUERY_DRV_STAT_COUNT instead of a magic number

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

GL_AMD_performance_monitor is supported by nvc0, svga, freedreno,
r600 and radeonsi.

V2:
 - add radeonsi

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>
nvc0: init all default values of pipe_driver_query_info

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