[Mesa-dev] gl_render_buffer->_BaseFormat
Ilia Mirkin
imirkin at alum.mit.edu
Thu Feb 18 01:20:24 UTC 2016
Hi Brian,
In commit
commit 45e76d2665b38ba3787548310efc59e969124c01
Author: Brian Paul <brianp at vmware.com>
Date: Thu Oct 8 20:27:27 2009 -0600
mesa: remove a bunch of gl_renderbuffer fields
_ActualFormat is replaced by Format (MESA_FORMAT_x).
ColorEncoding, ComponentType, RedBits, GreenBits, BlueBits, etc. are
all replaced by MESA_FORMAT_x queries.
Some short 6.5 years ago, you replaced a bunch of fields with a mesa
format field. In this change were these hunks:
@@ -431,6 +430,9 @@ test_attachment_completeness(const GLcontext *ctx,
GLenum format,
}
}
else if (att->Type == GL_RENDERBUFFER_EXT) {
+ const GLenum baseFormat =
+ _mesa_get_format_base_format(att->Renderbuffer->Format);
+
ASSERT(att->Renderbuffer);
if (!att->Renderbuffer->InternalFormat ||
att->Renderbuffer->Width < 1 ||
@@ -440,24 +442,19 @@ test_attachment_completeness(const GLcontext
*ctx, GLenum format,
return;
}
if (format == GL_COLOR) {
- if (att->Renderbuffer->_BaseFormat != GL_RGB &&
- att->Renderbuffer->_BaseFormat != GL_RGBA) {
+ if (baseFormat != GL_RGB &&
+ baseFormat != GL_RGBA) {
att_incomplete("bad renderbuffer color format");
att->Complete = GL_FALSE;
return;
}
- ASSERT(att->Renderbuffer->RedBits);
- ASSERT(att->Renderbuffer->GreenBits);
- ASSERT(att->Renderbuffer->BlueBits);
}
else if (format == GL_DEPTH) {
- if (att->Renderbuffer->_BaseFormat == GL_DEPTH_COMPONENT) {
- ASSERT(att->Renderbuffer->DepthBits);
+ if (baseFormat == GL_DEPTH_COMPONENT) {
/* OK */
}
else if (ctx->Extensions.EXT_packed_depth_stencil &&
- att->Renderbuffer->_BaseFormat == GL_DEPTH_STENCIL_EXT) {
- ASSERT(att->Renderbuffer->DepthBits);
+ baseFormat == GL_DEPTH_STENCIL_EXT) {
/* OK */
}
else {
@@ -468,13 +465,11 @@ test_attachment_completeness(const GLcontext
*ctx, GLenum format,
}
else {
assert(format == GL_STENCIL);
- if (att->Renderbuffer->_BaseFormat == GL_STENCIL_INDEX) {
- ASSERT(att->Renderbuffer->StencilBits);
+ if (baseFormat == GL_STENCIL_INDEX) {
/* OK */
}
else if (ctx->Extensions.EXT_packed_depth_stencil &&
- att->Renderbuffer->_BaseFormat == GL_DEPTH_STENCIL_EXT) {
- ASSERT(att->Renderbuffer->StencilBits);
+ baseFormat == GL_DEPTH_STENCIL_EXT) {
/* OK */
}
else {
Which seemingly prefer using the driver format for checking attachment
completeness to the actual baseformat that the RB was created with.
The issue I'm running into is that we might create a STENCIL_INDEX
renderbuffer, but it will be backed by a DEPTH_STENCIL format. However
if you put that renderbuffer as GL_DEPTH_ATTACHMENT, the fbo should be
incomplete. This does not happen, since the underlying format is a
DEPTH_STENCIL one.
This problem, in turn, is causing some dEQP GL_OES_texture_stencil8
tests to fail.
Any objections to flipping these back to looking at the Renderbuffer's
_BaseFormat field?
-ilia
More information about the mesa-dev
mailing list