gallium: remove occlusion_count flag from depth-stencil state
authorKeith Whitwell <keith@tungstengraphics.com>
Sat, 16 May 2009 16:25:26 +0000 (17:25 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Sat, 16 May 2009 16:26:39 +0000 (17:26 +0100)
Drivers can just keep track of whether they are within a query
by monitoring the begin/end query callbacks.  The flag adds no
information beyond that.

Only softpipe was examining this flag -- it has been fixed up
and retested with demos/arbocclude.

src/gallium/drivers/softpipe/sp_context.h
src/gallium/drivers/softpipe/sp_quad_pipe.c
src/gallium/drivers/softpipe/sp_query.c
src/gallium/drivers/trace/tr_dump_state.c

index 59d6df8f2dd901e49059f25ccb999efe7473e143..b89a7292e5bf79589b9a8700b8e0e88eccd445ee 100644 (file)
@@ -92,6 +92,7 @@ struct softpipe_context {
     * queries.
     */
    uint64_t occlusion_count;
+   unsigned active_query_count;
 
    /** Mapped vertex buffers */
    ubyte *mapped_vbuffer[PIPE_MAX_ATTRIBS];
index 892ef87ee9f5dd7f2933d0a292387c99655ae6ce..b5f69b74264f571d2b733f1500c61c306284ffa8 100644 (file)
@@ -80,7 +80,7 @@ sp_build_quad_pipeline(struct softpipe_context *sp)
          sp_push_quad_first( sp, sp->quad[i].blend, i );
       }
 
-      if (sp->depth_stencil->depth.occlusion_count) {
+      if (sp->active_query_count) {
          sp_push_quad_first( sp, sp->quad[i].occlusion, i );
       }
 
index 93dab236d6609ceec27ca35a58cfaee9bd0a3c6b..379cf4ad064d201f35d12bea4e8b7bf53a001a98 100644 (file)
@@ -34,6 +34,7 @@
 #include "util/u_memory.h"
 #include "sp_context.h"
 #include "sp_query.h"
+#include "sp_state.h"
 
 struct softpipe_query {
    uint64_t start;
@@ -69,6 +70,8 @@ softpipe_begin_query(struct pipe_context *pipe, struct pipe_query *q)
    struct softpipe_query *sq = softpipe_query(q);
    
    sq->start = softpipe->occlusion_count;
+   softpipe->active_query_count++;
+   softpipe->dirty |= SP_NEW_QUERY;
 }
 
 
@@ -78,7 +81,9 @@ softpipe_end_query(struct pipe_context *pipe, struct pipe_query *q)
    struct softpipe_context *softpipe = softpipe_context( pipe );
    struct softpipe_query *sq = softpipe_query(q);
 
+   softpipe->active_query_count--;
    sq->end = softpipe->occlusion_count;
+   softpipe->dirty |= SP_NEW_QUERY;
 }
 
 
index 1b2b3493a6c70c920dc3368323cd1da61b933beb..23a2473b5744b854ef3f1f92bac6cb29c419bccb 100644 (file)
@@ -271,7 +271,6 @@ void trace_dump_depth_stencil_alpha_state(const struct pipe_depth_stencil_alpha_
    trace_dump_member(bool, &state->depth, enabled);
    trace_dump_member(bool, &state->depth, writemask);
    trace_dump_member(uint, &state->depth, func);
-   trace_dump_member(bool, &state->depth, occlusion_count);
    trace_dump_struct_end();
    trace_dump_member_end();