intel: check texture formats in intel_validate_framebuffer()

We can't render into any texture format; only certain formats.
Check that render-to-texture's format is renderable in the
intel_validate_framebuffer()

There seems to be a bug somewhere that causes rendering to rgb565 textures
to be corrupted so disallow that for now.  This will be revisted.
This commit is contained in:
Brian Paul 2009-02-26 16:51:50 -07:00
parent 645f220710
commit f77b720cde

View file

@ -634,6 +634,7 @@ intel_finish_render_texture(GLcontext * ctx,
static void
intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
{
struct intel_context *intel = intel_context(ctx);
const struct intel_renderbuffer *depthRb =
intel_get_renderbuffer(fb, BUFFER_DEPTH);
const struct intel_renderbuffer *stencilRb =
@ -645,6 +646,34 @@ intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
*/
fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
}
/* check that texture color buffers are a format we can render into */
{
const struct gl_texture_format *supportedFormat;
GLuint i;
/* The texture format we can render into seems to depend on the
* screen depth. There currently seems to be a problem when
* rendering into a rgb565 texture when the screen is abgr8888.
*/
if (intel->front_region->cpp == 4)
supportedFormat = &_mesa_texformat_argb8888;
else
supportedFormat = &_mesa_texformat_rgb565;
for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
const struct gl_texture_object *texObj =
fb->Attachment[BUFFER_COLOR0 + i].Texture;
if (texObj) {
const struct gl_texture_image *texImg =
texObj->Image[0][texObj->BaseLevel];
if (texImg && texImg->TexFormat != supportedFormat) {
fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
break;
}
}
}
}
}