mesa: if AllocStorage doesn't choose a format, report FRAMEBUFFER_UNSUPPORTED
This allows drivers not to do any allocation in AllocStorage if the storage cannot be allocated because of an unsupported internalformat + samples combo. The little ugliness is that AllocStorage is expected to return TRUE in this case. Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -805,6 +805,15 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check that the format is valid. (MESA_FORMAT_NONE means unsupported)
|
||||||
|
*/
|
||||||
|
if (att->Type == GL_RENDERBUFFER &&
|
||||||
|
att->Renderbuffer->Format == MESA_FORMAT_NONE) {
|
||||||
|
fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED;
|
||||||
|
fbo_incomplete("unsupported renderbuffer format", i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if FEATURE_GL
|
#if FEATURE_GL
|
||||||
@@ -1394,7 +1403,7 @@ renderbuffer_storage(GLenum target, GLenum internalFormat,
|
|||||||
ASSERT(rb->AllocStorage);
|
ASSERT(rb->AllocStorage);
|
||||||
if (rb->AllocStorage(ctx, rb, internalFormat, width, height)) {
|
if (rb->AllocStorage(ctx, rb, internalFormat, width, height)) {
|
||||||
/* No error - check/set fields now */
|
/* No error - check/set fields now */
|
||||||
assert(rb->Format != MESA_FORMAT_NONE);
|
/* If rb->Format == MESA_FORMAT_NONE, the format is unsupported. */
|
||||||
assert(rb->Width == (GLuint) width);
|
assert(rb->Width == (GLuint) width);
|
||||||
assert(rb->Height == (GLuint) height);
|
assert(rb->Height == (GLuint) height);
|
||||||
rb->InternalFormat = internalFormat;
|
rb->InternalFormat = internalFormat;
|
||||||
|
Reference in New Issue
Block a user