mesa: Don't try to clear a NULL renderbuffer
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 7 Jun 2011 19:27:04 +0000 (12:27 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 8 Jun 2011 01:29:52 +0000 (18:29 -0700)
In an ES2 context (or if GL_ARB_ES2_compatibility) is supported, the
framebuffer can be complete with some attachments be missing.  In this
case the _ColorDrawBuffers pointer will be NULL.

Fixes the crash in piglit test fbo-missing-attachment-clear.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=37739
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
NOTE: This is a candidate for the stable branches.

src/mesa/swrast/s_clear.c

index 75805f9605d4088644b069775030a11eccb761a6..9e9b5311684cd51d680c50a51d19d61cd9f03f2b 100644 (file)
@@ -165,6 +165,14 @@ clear_color_buffers(struct gl_context *ctx)
 
    for (buf = 0; buf < ctx->DrawBuffer->_NumColorDrawBuffers; buf++) {
       struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[buf];
+
+      /* If this is an ES2 context or GL_ARB_ES2_compatibility is supported,
+       * the framebuffer can be complete with some attachments be missing.  In
+       * this case the _ColorDrawBuffers pointer will be NULL.
+       */
+      if (rb == NULL)
+        continue;
+
       if (ctx->Color.ColorMask[buf][0] == 0 ||
           ctx->Color.ColorMask[buf][1] == 0 ||
           ctx->Color.ColorMask[buf][2] == 0 ||