radeonsi: rewrite how occlusion query precision is determined for performance
authorMarek Olšák <marek.olsak@amd.com>
Thu, 27 Jul 2023 05:09:47 +0000 (01:09 -0400)
committerMarge Bot <emma+marge@anholt.net>
Thu, 17 Aug 2023 15:34:06 +0000 (15:34 +0000)
commita7e6d5bad175eef0b4f2e04b70c69bc20e9ce376
tree7037573a061db822f3f0affbbdbbd1fcb4f356ac
parent5d50e772078f3ff330d8c784e52ef3f1ec970809
radeonsi: rewrite how occlusion query precision is determined for performance

The precision of occlusion queries is determined from active queries.
Then the register programming is determined from the precision and other
states.

This has the effect that we no longer set PERFECT_ZPASS_COUNTS
for PIPE_QUERY_OCCLUSION_PREDICATE in some cases, resulting in higher
performance.

This also disables conservative occlusion queries for gfx11 because it's
not recommended with late Z, but detecting late Z vs early Z would be
more complicated, so just never use it, which results in better performance
with late Z.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24732>
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/drivers/radeonsi/si_query.c
src/gallium/drivers/radeonsi/si_state.c
src/gallium/drivers/radeonsi/si_state.h