anv/query: Busy-wait for available query entries
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 4 Apr 2017 21:36:46 +0000 (14:36 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 6 Apr 2017 04:17:11 +0000 (21:17 -0700)
commitb2c97bc789198427043cd902bc76e194e7e81c7d
tree152b9e6c5d646ae0c5c64488978f687e95650eae
parentf195d40eca49800799d85d110939a125041f4028
anv/query: Busy-wait for available query entries

Before, we were just looking at whether or not the user wanted us to
wait and waiting on the BO.  Some clients, such as the Serious engine,
use a single query pool for hundreds of individual query results where
the writes for those queries may be split across several command
buffers.  In this scenario, the individual query we're looking for may
become available long before the BO is idle so waiting on the query pool
BO to be finished is wasteful. This commit makes us instead busy-loop on
each query until it's available.

This significantly reduces pipeline bubbles and improves performance of
The Talos Principle on medium settings (where the GPU isn't overloaded
with drawing) by around 20% on my SkyLake gt4.

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Tested-by: Eero Tamminen <eero.t.tamminen@intel.com>
Tested-by: Grazvydas Ignotas <notasas@gmail.com>
src/intel/vulkan/genX_query.c