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->RenderTexture = _mesa_render_texture;
|
||||||
driver->FinishRenderTexture = _mesa_finish_render_texture;
|
driver->FinishRenderTexture = _mesa_finish_render_texture;
|
||||||
driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer;
|
driver->FramebufferRenderbuffer = _mesa_framebuffer_renderbuffer;
|
||||||
|
driver->ValidateFramebuffer = _mesa_validate_framebuffer;
|
||||||
|
|
||||||
driver->BlitFramebuffer = _swrast_BlitFramebuffer;
|
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.
|
* For debug only.
|
||||||
*/
|
*/
|
||||||
|
@@ -68,6 +68,9 @@ extern void
|
|||||||
_mesa_framebuffer_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
|
_mesa_framebuffer_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
|
||||||
GLenum attachment, struct gl_renderbuffer *rb);
|
GLenum attachment, struct gl_renderbuffer *rb);
|
||||||
|
|
||||||
|
extern void
|
||||||
|
_mesa_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb);
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
_mesa_test_framebuffer_completeness(struct gl_context *ctx, struct gl_framebuffer *fb);
|
_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);
|
pixelSize = sizeof(GLuint);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
_mesa_problem(ctx, "Bad internalFormat in _mesa_soft_renderbuffer_storage");
|
/* unsupported format */
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user