From 62c66b34303303e6786652efa611a100ae64439a Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 24 Jan 2011 19:38:52 -0700 Subject: [PATCH] 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 deletion(-) diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c index 3c6ecb83f0a..5389a500111 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 ff9dcc9ca66..17b768dc847 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 8763f99c4a7..ba74a95b74c 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 23c662bab7f..67ee589d776 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; } -- 2.30.2