r600: add occlusion query support
authorAlex Deucher <alexdeucher@gmail.com>
Wed, 28 Oct 2009 19:36:53 +0000 (15:36 -0400)
committerAlex Deucher <alexdeucher@gmail.com>
Wed, 28 Oct 2009 19:53:24 +0000 (15:53 -0400)
commit660acd60d00366c97fbe7caf3995a75ce935a19b
tree7ed302291c6ded4d913e5f797e56aa608333d94d
parentf3d8d534e6f1d102d71338d58fbaa98c382f1858
r600: add occlusion query support

Based on initial patch from Stephan Schmid <stephan_2303@gmx.de>.

Basic idea is to dump the zpass count at the start and end of the query
and subtract to get the total number of visible fragments.  HW writes
alternating qwords for up to 4 DBs.  On the first pass, we start at
buffer address + 0; on the second pass, we start at buffer address + 8
(bytes). The resulting buffer at the end of the query looks like:

qw[0]: db0 start
qw[1]: db0 end
...
qw[6]: db3 start
qw[7]: db3 end

The MSB of each qword is the valid bit and the lower 63 bits are
the zpass count for that DB.

OQ on RV740 is disabled at the moment as it only seems to report
results for half of its DBs.  This needs further investigation.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
src/mesa/drivers/dri/r600/r600_context.c
src/mesa/drivers/dri/r600/r700_chip.c
src/mesa/drivers/dri/r600/r700_state.c
src/mesa/drivers/dri/radeon/radeon_queryobj.c