"%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:
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)
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
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);
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 */
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;