From 62c66b34303303e6786652efa611a100ae64439a Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 24 Jan 2011 19:38:52 -0700 Subject: 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/main/fbobject.c | 29 +++++++++++++++++++++++++++++ src/mesa/main/fbobject.h | 3 +++ src/mesa/main/renderbuffer.c | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) (limited to 'src/mesa/main') diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index ff9dcc9ca6..17b768dc84 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -372,6 +372,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. */ diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h index 8763f99c4a..ba74a95b74 100644 --- a/src/mesa/main/fbobject.h +++ b/src/mesa/main/fbobject.h @@ -68,6 +68,9 @@ extern void _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); diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index 23c662bab7..67ee589d77 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; } -- cgit v1.2.3