Remove references to accum buffers in softpipe.
authorKeith Whitwell <keith@tungstengraphics.com>
Thu, 2 Aug 2007 17:25:10 +0000 (18:25 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Thu, 2 Aug 2007 17:25:10 +0000 (18:25 +0100)
Also some minor clear fixes.

src/mesa/pipe/p_context.h
src/mesa/pipe/p_state.h
src/mesa/pipe/softpipe/sp_clear.c
src/mesa/pipe/softpipe/sp_clear.h
src/mesa/state_tracker/st_cb_clear.c
src/mesa/state_tracker/st_draw.h

index 4f5937b..2ce2781 100644 (file)
@@ -57,7 +57,7 @@ struct pipe_context {
 
    /** Clear framebuffer */
    void (*clear)(struct pipe_context *pipe, GLboolean color, GLboolean depth,
-                 GLboolean stencil, GLboolean accum);
+                 GLboolean stencil);
 
    /** occlusion counting (XXX this may be temporary - we should probably
     * have generic query objects with begin/end methods)
index d6ed514..699efd5 100644 (file)
@@ -202,7 +202,6 @@ struct pipe_framebuffer_state
 
    struct pipe_surface *zbuf;      /**< Z buffer */
    struct pipe_surface *sbuf;      /**< Stencil buffer */
-   struct pipe_surface *abuf;      /**< Accum buffer */
 };
 
 
index 09cc643..e9b142e 100644 (file)
@@ -63,7 +63,7 @@ color_value(GLuint format, const GLfloat color[4])
 
 void
 softpipe_clear(struct pipe_context *pipe, GLboolean color, GLboolean depth,
-               GLboolean stencil, GLboolean accum)
+               GLboolean stencil)
 {
    struct softpipe_context *softpipe = softpipe_context(pipe);
    GLint x, y, w, h;
@@ -152,15 +152,4 @@ softpipe_clear(struct pipe_context *pipe, GLboolean color, GLboolean depth,
          pipe->region_fill(pipe, ps->region, 0, x, y, w, h, clearVal, mask);
       }
    }
-
-   if (accum) {
-      /* XXX there might be no notion of accum buffers in 'pipe'.
-       * Just implement them with a deep RGBA surface format...
-       */
-      struct pipe_surface *ps = softpipe->framebuffer.abuf;
-      GLuint clearVal = 0x0; /* XXX FIX */
-      GLuint mask = ~0;
-      assert(ps);
-      pipe->region_fill(pipe, ps->region, 0, x, y, w, h, clearVal, mask);
-   }
 }
index f9db99d..d41cc1d 100644 (file)
@@ -37,7 +37,7 @@ struct pipe_context;
 
 extern void
 softpipe_clear(struct pipe_context *pipe, GLboolean color, GLboolean depth,
-               GLboolean stencil, GLboolean accum);
+               GLboolean stencil);
 
 
 #endif /* SP_CLEAR_H */
index 523a9b6..a7a3b5e 100644 (file)
@@ -49,7 +49,7 @@
 static void
 clear_with_quad(GLcontext *ctx,
                 GLboolean color, GLboolean depth,
-                GLboolean stencil, GLboolean accum)
+                GLboolean stencil)
 {
    struct st_context *st = ctx->st;
    struct pipe_blend_state blend;
@@ -119,17 +119,18 @@ static void st_clear(GLcontext *ctx, GLbitfield mask)
    GLboolean depth = (mask & BUFFER_BIT_DEPTH) ? GL_TRUE : GL_FALSE;
    GLboolean stencil = (mask & BUFFER_BIT_STENCIL) ? GL_TRUE : GL_FALSE;
    GLboolean accum = (mask & BUFFER_BIT_ACCUM) ? GL_TRUE : GL_FALSE;
+
    GLboolean maskColor, maskStencil;
    GLboolean fullscreen = 1;   /* :-) */
-   GLuint stencilMax = 1 << ctx->DrawBuffer->_StencilBuffer->StencilBits;
+   GLuint stencilMax = stencil ? (1 << ctx->DrawBuffer->_StencilBuffer->StencilBits) : 0;
 
    /* This makes sure the softpipe has the latest scissor, etc values */
    st_validate_state( st );
 
-   maskColor = st->state.blend.colormask != PIPE_MASK_RGBA;
-   maskStencil = ctx->Stencil.WriteMask[0] != stencilMax;
+   maskColor = color && st->state.blend.colormask != PIPE_MASK_RGBA;
+   maskStencil = stencil && ctx->Stencil.WriteMask[0] != stencilMax;
 
-   if (fullscreen && !maskColor) {
+   if (fullscreen && !maskColor && !maskStencil) {
       /* pipe->clear() should clear a particular surface, so that we
        * can iterate over render buffers at this level and clear the
        * ones GL is asking for.  
@@ -139,12 +140,17 @@ static void st_clear(GLcontext *ctx, GLbitfield mask)
        * buffers, though could perhaps deal with them explicitly at
        * this level.
        */
-      st->pipe->clear(st->pipe, color, depth, stencil, accum);
+      st->pipe->clear(st->pipe, color, depth, stencil);
+
+      /* And here we would do a clear on whatever surface we are using
+       * to implement accum buffers:
+       */
+      assert(!accum);
    }
    else {
       /* Convert to geometry, etc:
        */
-      clear_with_quad(ctx, color, depth, stencil, accum);
+      clear_with_quad(ctx, color, depth, stencil);
    }
 }
 
index 7a3ba52..0afadab 100644 (file)
@@ -39,6 +39,6 @@ void st_destroy_draw( struct st_context *st );
 
 /** XXX temporary here */
 void st_clear(struct st_context *st, GLboolean color, GLboolean depth,
-              GLboolean stencil, GLboolean accum);
+              GLboolean stencil);
 
 #endif