Mesa (master): mesa: plug in fallback function for ctx->Driver. ValidateFramebuffer()

Brian Paul brianp at kemper.freedesktop.org
Tue Jan 25 02:39:58 UTC 2011


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

Author: Brian Paul <brianp at vmware.com>
Date:   Mon Jan 24 19:38:52 2011 -0700

mesa: plug in fallback function for ctx->Driver.ValidateFramebuffer()

The software renderer doesn't support GL_ALPHA, GL_LUMINANCE, etc
so we should report GL_FRAMEBUFFER_UNSUPPORTED during FBO validation.

---

 src/mesa/drivers/common/driverfuncs.c |    1 +
 src/mesa/main/fbobject.c              |   29 +++++++++++++++++++++++++++++
 src/mesa/main/fbobject.h              |    3 +++
 src/mesa/main/renderbuffer.c          |    2 +-
 4 files changed, 34 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c
index 3c6ecb8..5389a50 100644
--- a/src/mesa/drivers/common/driverfuncs.c
+++ b/src/mesa/drivers/common/driverfuncs.c
@@ -184,6 +184,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
    driver->RenderTexture = _mesa_render_texture;
    driver->FinishRenderTexture = _mesa_finish_render_texture;
    driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer;
+   driver->ValidateFramebuffer = _mesa_validate_framebuffer;
 
    driver->BlitFramebuffer = _swrast_BlitFramebuffer;
 
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index ff9dcc9..17b768d 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -373,6 +373,35 @@ _mesa_framebuffer_renderbuffer(struct gl_context *ctx,
 
 
 /**
+ * Fallback for ctx->Driver.ValidateFramebuffer()
+ * Check if the renderbuffer's formats are supported by the software
+ * renderer.
+ * Drivers should probably override this.
+ */
+void
+_mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
+{
+   gl_buffer_index buf;
+   for (buf = 0; buf < BUFFER_COUNT; buf++) {
+      const struct gl_renderbuffer *rb = fb->Attachment[buf].Renderbuffer;
+      if (rb) {
+         switch (rb->_BaseFormat) {
+         case GL_ALPHA:
+         case GL_LUMINANCE_ALPHA:
+         case GL_LUMINANCE:
+         case GL_INTENSITY:
+            fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED;
+            return;
+         default:
+            /* render buffer format is supported by software rendering */
+            ;
+         }
+      }
+   }
+}
+
+
+/**
  * For debug only.
  */
 static void
diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
index 8763f99..ba74a95 100644
--- a/src/mesa/main/fbobject.h
+++ b/src/mesa/main/fbobject.h
@@ -69,6 +69,9 @@ _mesa_framebuffer_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb
                                GLenum attachment, struct gl_renderbuffer *rb);
 
 extern void
+_mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb);
+
+extern void
 _mesa_test_framebuffer_completeness(struct gl_context *ctx, struct gl_framebuffer *fb);
 
 extern GLboolean
diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index 23c662b..67ee589 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -1086,7 +1086,7 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *
       pixelSize = sizeof(GLuint);
       break;
    default:
-      _mesa_problem(ctx, "Bad internalFormat in _mesa_soft_renderbuffer_storage");
+      /* unsupported format */
       return GL_FALSE;
    }
 




More information about the mesa-commit mailing list