Commit 070a5e5d authored by Ilia Mirkin's avatar Ilia Mirkin

mesa: add explicit enable for EXT_float_blend, and error condition

If EXT_float_blend is not supported, error out on blending of FP32
attachments in an ES2 context.
Signed-off-by: Ilia Mirkin's avatarIlia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Tapani Pälli's avatarTapani Pälli <tapani.palli@intel.com>
Reviewed-by: Jason Ekstrand's avatarJason Ekstrand <jason@jlekstrand.net>
parent 47616810
......@@ -304,6 +304,25 @@ check_valid_to_render(struct gl_context *ctx, const char *function)
"%s(tess ctrl shader is missing)", function);
return false;
}
/* From GL_EXT_color_buffer_float:
*
* "Blending applies only if the color buffer has a fixed-point or
* or floating-point format. If the color buffer has an integer
* format, proceed to the next operation. Furthermore, an
* INVALID_OPERATION error is generated by DrawArrays and the other
* drawing commands defined in section 2.8.3 (10.5 in ES 3.1) if
* blending is enabled (see below) and any draw buffer has 32-bit
* floating-point format components."
*
* However GL_EXT_float_blend removes this text.
*/
if (!ctx->Extensions.EXT_float_blend &&
(ctx->DrawBuffer->_FP32Buffers & ctx->Color.BlendEnabled)) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(32-bit float output + blending)", function);
return false;
}
break;
case API_OPENGL_CORE:
......
......@@ -226,7 +226,7 @@ EXT(EXT_draw_buffers_indexed , ARB_draw_buffers_blend
EXT(EXT_draw_elements_base_vertex , ARB_draw_elements_base_vertex , x , x , x , ES2, 2014)
EXT(EXT_draw_instanced , ARB_draw_instanced , GLL, GLC, x , x , 2006)
EXT(EXT_draw_range_elements , dummy_true , GLL, x , x , x , 1997)
EXT(EXT_float_blend , dummy_true , x , x , x , 30, 2015)
EXT(EXT_float_blend , EXT_float_blend , x , x , x , 30, 2015)
EXT(EXT_fog_coord , dummy_true , GLL, x , x , x , 1999)
EXT(EXT_frag_depth , dummy_true , x , x , x , ES2, 2010)
EXT(EXT_framebuffer_blit , dummy_true , GLL, GLC, x , x , 2005)
......
......@@ -1004,6 +1004,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
fb->_HasAttachments = true;
fb->_IntegerBuffers = 0;
fb->_RGBBuffers = 0;
fb->_FP32Buffers = 0;
/* Start at -2 to more easily loop over all attachment points.
* -2: depth buffer
......@@ -1153,6 +1154,9 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
if (f == GL_RGB)
fb->_RGBBuffers |= (1 << i);
if (type == GL_FLOAT && _mesa_get_format_max_bits(attFormat) > 16)
fb->_FP32Buffers |= (1 << i);
fb->_AllColorBuffersFixedPoint =
fb->_AllColorBuffersFixedPoint &&
(type == GL_UNSIGNED_NORMALIZED || type == GL_SIGNED_NORMALIZED);
......
......@@ -3506,6 +3506,7 @@ struct gl_framebuffer
GLbitfield _IntegerBuffers; /**< Which color buffers are integer valued */
GLbitfield _RGBBuffers; /**< Which color buffers have baseformat == RGB */
GLbitfield _FP32Buffers; /**< Which color buffers are FP32 */
/* ARB_color_buffer_float */
GLboolean _AllColorBuffersFixedPoint; /* no integer, no float */
......@@ -4248,6 +4249,7 @@ struct gl_extensions
GLboolean EXT_depth_bounds_test;
GLboolean EXT_disjoint_timer_query;
GLboolean EXT_draw_buffers2;
GLboolean EXT_float_blend;
GLboolean EXT_framebuffer_multisample;
GLboolean EXT_framebuffer_multisample_blit_scaled;
GLboolean EXT_framebuffer_sRGB;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment