Mesa (master): mesa: if AllocStorage doesn't choose a format, report FRAMEBUFFER_UNSUPPORTED

Marek Olšák mareko at kemper.freedesktop.org
Sat Jun 16 12:26:42 UTC 2012


Module: Mesa
Branch: master
Commit: a82227ce4a60155cb16c47d7315f2efe2e87b0c2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a82227ce4a60155cb16c47d7315f2efe2e87b0c2

Author: Marek Olšák <maraeo at gmail.com>
Date:   Fri Jun 15 17:21:05 2012 +0200

mesa: if AllocStorage doesn't choose a format, report FRAMEBUFFER_UNSUPPORTED

This allows drivers not to do any allocation in AllocStorage if the storage
cannot be allocated because of an unsupported internalformat + samples combo.

The little ugliness is that AllocStorage is expected to return TRUE in this
case.

Reviewed-by: Brian Paul <brianp at vmware.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/main/fbobject.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 777783e..cfaea62 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -805,6 +805,15 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
             return;
          }
       }
+
+      /* Check that the format is valid. (MESA_FORMAT_NONE means unsupported)
+       */
+      if (att->Type == GL_RENDERBUFFER &&
+          att->Renderbuffer->Format == MESA_FORMAT_NONE) {
+         fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED;
+         fbo_incomplete("unsupported renderbuffer format", i);
+         return;
+      }
    }
 
 #if FEATURE_GL
@@ -1394,7 +1403,7 @@ renderbuffer_storage(GLenum target, GLenum internalFormat,
    ASSERT(rb->AllocStorage);
    if (rb->AllocStorage(ctx, rb, internalFormat, width, height)) {
       /* No error - check/set fields now */
-      assert(rb->Format != MESA_FORMAT_NONE);
+      /* If rb->Format == MESA_FORMAT_NONE, the format is unsupported. */
       assert(rb->Width == (GLuint) width);
       assert(rb->Height == (GLuint) height);
       rb->InternalFormat = internalFormat;




More information about the mesa-commit mailing list