fbobject: add additional fbo completeness checks for GLES

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
Jordan Justen 2012-12-27 13:34:44 -08:00 committed by Matt Turner
parent f8e7aa2827
commit 6c7fa72229

View file

@ -522,6 +522,50 @@ _mesa_is_legal_color_format(const struct gl_context *ctx, GLenum baseFormat)
}
/**
* Is the given base format a legal format for a color renderbuffer?
*/
static GLboolean
is_format_color_renderable(const struct gl_context *ctx, gl_format format, GLenum internalFormat)
{
const GLenum baseFormat =
_mesa_get_format_base_format(format);
GLboolean valid;
valid = _mesa_is_legal_color_format(ctx, baseFormat);
if (!valid || _mesa_is_desktop_gl(ctx)) {
return valid;
}
/* Reject additional cases for GLES */
switch (internalFormat) {
case GL_RGBA8_SNORM:
case GL_RGB32F:
case GL_RGB32I:
case GL_RGB32UI:
case GL_RGB16F:
case GL_RGB16I:
case GL_RGB16UI:
case GL_RGB8_SNORM:
case GL_RGB8I:
case GL_RGB8UI:
case GL_SRGB8:
case GL_RGB9_E5:
case GL_RG8_SNORM:
case GL_R8_SNORM:
return GL_FALSE;
default:
break;
}
if (format == MESA_FORMAT_ARGB2101010 && internalFormat != GL_RGB10_A2) {
return GL_FALSE;
}
return GL_TRUE;
}
/**
* Is the given base format a legal format for a depth/stencil renderbuffer?
*/
@ -770,7 +814,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
f = texImg->_BaseFormat;
attFormat = texImg->TexFormat;
numImages++;
if (!_mesa_is_legal_color_format(ctx, f) &&
if (!is_format_color_renderable(ctx, attFormat, texImg->InternalFormat) &&
!is_legal_depth_format(ctx, f)) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT;
fbo_incomplete("texture attachment incomplete", -1);