From: Marek Olšák <marek.ol...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev