mesa: Fix NetBSD compiler macro.
[mesa.git] / src / mesa / main / clear.c
index be604426a0acc177a697083f2860e7be23d35bde..ca0ecd95b8cb2dc3b972db4fa52c134a3f7b5c49 100644 (file)
@@ -118,7 +118,7 @@ color_buffer_writes_enabled(const struct gl_context *ctx, unsigned idx)
 
    if (rb) {
       for (c = 0; c < 4; c++) {
-         if (ctx->Color.ColorMask[idx][c] &&
+         if (GET_COLORMASK_BIT(ctx->Color.ColorMask, idx, c) &&
              _mesa_format_has_color_component(rb->Format, c)) {
             return true;
          }
@@ -144,7 +144,6 @@ static ALWAYS_INLINE void
 clear(struct gl_context *ctx, GLbitfield mask, bool no_error)
 {
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (!no_error) {
       if (mask & ~(GL_COLOR_BUFFER_BIT |
@@ -203,17 +202,17 @@ clear(struct gl_context *ctx, GLbitfield mask, bool no_error)
       }
 
       if ((mask & GL_DEPTH_BUFFER_BIT)
-          && ctx->DrawBuffer->Visual.haveDepthBuffer) {
+          && ctx->DrawBuffer->Visual.depthBits > 0) {
          bufferMask |= BUFFER_BIT_DEPTH;
       }
 
       if ((mask & GL_STENCIL_BUFFER_BIT)
-          && ctx->DrawBuffer->Visual.haveStencilBuffer) {
+          && ctx->DrawBuffer->Visual.stencilBits > 0) {
          bufferMask |= BUFFER_BIT_STENCIL;
       }
 
       if ((mask & GL_ACCUM_BUFFER_BIT)
-          && ctx->DrawBuffer->Visual.haveAccumBuffer) {
+          && ctx->DrawBuffer->Visual.accumRedBits > 0) {
          bufferMask |= BUFFER_BIT_ACCUM;
       }
 
@@ -344,12 +343,17 @@ clear_bufferiv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
                const GLint *value, bool no_error)
 {
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (ctx->NewState) {
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
+                  "glClearBufferiv(incomplete framebuffer)");
+      return;
+   }
+
    switch (buffer) {
    case GL_STENCIL:
       /* Page 264 (page 280 of the PDF) of the OpenGL 3.0 spec says:
@@ -458,12 +462,17 @@ clear_bufferuiv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
                 const GLuint *value, bool no_error)
 {
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (ctx->NewState) {
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION,
+                  "glClearBufferuiv(incomplete framebuffer)");
+      return;
+   }
+
    switch (buffer) {
    case GL_COLOR:
       {
@@ -547,12 +556,17 @@ clear_bufferfv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
                const GLfloat *value, bool no_error)
 {
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (ctx->NewState) {
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION,
+                  "glClearBufferfv(incomplete framebuffer)");
+      return;
+   }
+
    switch (buffer) {
    case GL_DEPTH:
       /* Page 264 (page 280 of the PDF) of the OpenGL 3.0 spec says:
@@ -665,7 +679,6 @@ clear_bufferfi(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
    GLbitfield mask = 0;
 
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (!no_error) {
       if (buffer != GL_DEPTH_STENCIL) {
@@ -695,6 +708,12 @@ clear_bufferfi(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
+                  "glClearBufferfi(incomplete framebuffer)");
+      return;
+   }
+
    if (ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer)
       mask |= BUFFER_BIT_DEPTH;
    if (ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Renderbuffer)