mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
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:
parent
645f220710
commit
f77b720cde
1 changed files with 29 additions and 0 deletions
|
|
@ -634,6 +634,7 @@ intel_finish_render_texture(GLcontext * ctx,
|
||||||
static void
|
static void
|
||||||
intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
|
intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
|
||||||
{
|
{
|
||||||
|
struct intel_context *intel = intel_context(ctx);
|
||||||
const struct intel_renderbuffer *depthRb =
|
const struct intel_renderbuffer *depthRb =
|
||||||
intel_get_renderbuffer(fb, BUFFER_DEPTH);
|
intel_get_renderbuffer(fb, BUFFER_DEPTH);
|
||||||
const struct intel_renderbuffer *stencilRb =
|
const struct intel_renderbuffer *stencilRb =
|
||||||
|
|
@ -645,6 +646,34 @@ intel_validate_framebuffer(GLcontext *ctx, struct gl_framebuffer *fb)
|
||||||
*/
|
*/
|
||||||
fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue