summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/softpipe/sp_quad_occlusion.c
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2007-12-11 17:10:26 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2007-12-11 17:10:48 +0000
commit13699463a33c1adf44005125c488e886e074a05b (patch)
treecb9e0b85f96fd931f87d3b1fc813723013d2a2b7 /src/mesa/pipe/softpipe/sp_quad_occlusion.c
parentb247ab036327d66b8b9b1aff2dbcf4520ed0284f (diff)
Rework gallium and mesa queries a little.
Add a 'CheckQuery()' driver callback to mesa to check query completion. Make pipe_query an opaque type. Rework softpipe queries, support overlapping occlusion queries.
Diffstat (limited to 'src/mesa/pipe/softpipe/sp_quad_occlusion.c')
-rw-r--r--src/mesa/pipe/softpipe/sp_quad_occlusion.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/mesa/pipe/softpipe/sp_quad_occlusion.c b/src/mesa/pipe/softpipe/sp_quad_occlusion.c
index d65fdbdab7..54254df1f1 100644
--- a/src/mesa/pipe/softpipe/sp_quad_occlusion.c
+++ b/src/mesa/pipe/softpipe/sp_quad_occlusion.c
@@ -39,18 +39,22 @@
#include "sp_surface.h"
#include "sp_quad.h"
+static unsigned count_bits( unsigned val )
+{
+ unsigned i;
+
+ for (i = 0; val ; val >>= 1)
+ i += (val & 1);
+
+ return i;
+}
static void
occlusion_count_quad(struct quad_stage *qs, struct quad_header *quad)
{
struct softpipe_context *softpipe = qs->softpipe;
- struct pipe_query_object *occ
- = softpipe->queries[PIPE_QUERY_OCCLUSION_COUNTER];
- occ->count += (quad->mask ) & 1;
- occ->count += (quad->mask >> 1) & 1;
- occ->count += (quad->mask >> 2) & 1;
- occ->count += (quad->mask >> 3) & 1;
+ softpipe->occlusion_count += count_bits(quad->mask);
qs->next->run(qs->next, quad);
}