[Mesa-dev] [PATCH 1/3] mesa: add gl_framebuffer::_Color0IsInteger
Marek Olšák
maraeo at gmail.com
Wed Sep 28 13:44:24 UTC 2016
From: Marek Olšák <marek.olsak at amd.com>
The other flag seems to have a slightly different meaning.
---
src/mesa/main/fbobject.c | 4 ++++
src/mesa/main/framebuffer.c | 1 +
src/mesa/main/mtypes.h | 6 ++++++
3 files changed, 11 insertions(+)
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 09da6b7..488adf7 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -960,20 +960,21 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
bool has_stencil_attachment = false;
assert(_mesa_is_user_fbo(fb));
/* we're changing framebuffer fields here */
FLUSH_VERTICES(ctx, _NEW_BUFFERS);
numImages = 0;
fb->Width = 0;
fb->Height = 0;
+ fb->_Color0IsInteger = false;
fb->_AllColorBuffersFixedPoint = GL_TRUE;
fb->_HasSNormOrFloatColorBuffer = GL_FALSE;
fb->_HasAttachments = true;
/* Start at -2 to more easily loop over all attachment points.
* -2: depth buffer
* -1: stencil buffer
* >=0: color buffer
*/
for (i = -2; i < (GLint) ctx->Const.MaxColorAttachments; i++) {
@@ -1084,20 +1085,23 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
fbo_incomplete(ctx, "inconsistent fixed sample locations", -1);
return;
}
}
else {
assert(att->Type == GL_NONE);
continue;
}
/* check if integer color */
+ if (i == 0)
+ fb->_Color0IsInteger = _mesa_is_format_integer_color(attFormat);
+
fb->_IntegerColor = _mesa_is_format_integer_color(attFormat);
/* Update _AllColorBuffersFixedPoint and _HasSNormOrFloatColorBuffer. */
if (i >= 0) {
GLenum type = _mesa_get_format_datatype(attFormat);
fb->_AllColorBuffersFixedPoint =
fb->_AllColorBuffersFixedPoint &&
(type == GL_UNSIGNED_NORMALIZED || type == GL_SIGNED_NORMALIZED);
diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
index 46a6f64..4f4d5fd 100644
--- a/src/mesa/main/framebuffer.c
+++ b/src/mesa/main/framebuffer.c
@@ -148,20 +148,21 @@ _mesa_initialize_window_framebuffer(struct gl_framebuffer *fb,
else {
fb->_NumColorDrawBuffers = 1;
fb->ColorDrawBuffer[0] = GL_FRONT;
fb->_ColorDrawBufferIndexes[0] = BUFFER_FRONT_LEFT;
fb->ColorReadBuffer = GL_FRONT;
fb->_ColorReadBufferIndex = BUFFER_FRONT_LEFT;
}
fb->Delete = _mesa_destroy_framebuffer;
fb->_Status = GL_FRAMEBUFFER_COMPLETE_EXT;
+ fb->_Color0IsInteger = false;
fb->_AllColorBuffersFixedPoint = !visual->floatMode;
fb->_HasSNormOrFloatColorBuffer = visual->floatMode;
fb->_HasAttachments = true;
compute_depth_max(fb);
}
/**
* Initialize a user-created gl_framebuffer object.
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index ee811ff..873003b 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3311,20 +3311,26 @@ struct gl_framebuffer
* _Ymax do NOT take into account _HasAttachments being false). To get the
* geometry of the framebuffer, the helper functions
* _mesa_geometric_width(),
* _mesa_geometric_height(),
* _mesa_geometric_samples() and
* _mesa_geometric_layers()
* are available that check _HasAttachments.
*/
bool _HasAttachments;
+ /**
+ * Whether color attachment 0 is integer.
+ * Used to disable alpha test, alpha to coverage, and alpha to one.
+ */
+ bool _Color0IsInteger;
+
/** Integer color values */
GLboolean _IntegerColor;
/* ARB_color_buffer_float */
GLboolean _AllColorBuffersFixedPoint; /* no integer, no float */
GLboolean _HasSNormOrFloatColorBuffer;
/**
* The maximum number of layers in the framebuffer, or 0 if the framebuffer
* is not layered. For cube maps and cube map arrays, each cube face
--
2.7.4
More information about the mesa-dev
mailing list