|
|
@@ -529,6 +529,9 @@ st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) |
|
|
|
const struct gl_renderbuffer_attachment *stencil = |
|
|
|
&fb->Attachment[BUFFER_STENCIL]; |
|
|
|
GLuint i; |
|
|
|
enum pipe_format first_format = PIPE_FORMAT_NONE; |
|
|
|
boolean mixed_formats = |
|
|
|
screen->get_param(screen, PIPE_CAP_MIXED_COLORBUFFER_FORMATS) != 0; |
|
|
|
|
|
|
|
if (depth->Type && stencil->Type && depth->Type != stencil->Type) { |
|
|
|
fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; |
|
|
@@ -562,13 +565,33 @@ st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) |
|
|
|
return; |
|
|
|
} |
|
|
|
for (i = 0; i < ctx->Const.MaxColorAttachments; i++) { |
|
|
|
struct gl_renderbuffer_attachment *att = |
|
|
|
&fb->Attachment[BUFFER_COLOR0 + i]; |
|
|
|
enum pipe_format format; |
|
|
|
|
|
|
|
if (!st_validate_attachment(ctx, |
|
|
|
screen, |
|
|
|
&fb->Attachment[BUFFER_COLOR0 + i], |
|
|
|
att, |
|
|
|
PIPE_BIND_RENDER_TARGET)) { |
|
|
|
fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (!mixed_formats) { |
|
|
|
/* Disallow mixed formats. */ |
|
|
|
if (att->Type != GL_NONE) { |
|
|
|
format = st_renderbuffer(att->Renderbuffer)->surface->format; |
|
|
|
} else { |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
if (first_format == PIPE_FORMAT_NONE) { |
|
|
|
first_format = format; |
|
|
|
} else if (format != first_format) { |
|
|
|
fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|