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.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
@@ -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.
|
||||
*/
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user