intel/perf: fix performance counters availability after glFinish
authorMarcin Ślusarz <marcin.slusarz@intel.com>
Fri, 10 Jul 2020 17:25:10 +0000 (19:25 +0200)
committerMarge Bot <eric+marge@anholt.net>
Mon, 10 Aug 2020 13:41:29 +0000 (13:41 +0000)
commit2fbab5a1b3998854203c43560a47beac4e1897b7
tree7f52699644443813b1d30b8b3d1aeaa85a945faf
parent9fa64803aadebf8663469832eb90b6a7fe572494
intel/perf: fix performance counters availability after glFinish

Currently Linux kernel gathers performance counters at fixed
intervals (~5-10ms), so if application uses AMD_performance_monitor
extension and immediately after glFinish() asks GL driver for HW
performance counter values it might not get any data (values == 0).

Fix this by moving the "read counters from kernel" code from
"is query ready" to "get counter values" callback with a loop around
it. Unfortunately it means that the "read counters from kernel"
code can spin for up to 10ms.

Ideally kernel should gather performance counters whenever we ask
it for counter values, but for now we have deal with what we have.

Signed-off-by: Marcin Ślusarz <marcin.slusarz@intel.com>
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5788>
src/gallium/drivers/iris/iris_monitor.c
src/gallium/drivers/iris/iris_performance_query.c
src/intel/perf/gen_perf_query.c
src/intel/perf/gen_perf_query.h
src/mesa/drivers/dri/i965/brw_performance_query.c