mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 07:10:09 +01:00
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 <imirkin@alum.mit.edu> Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
47616810ed
commit
070a5e5d92
4 changed files with 26 additions and 1 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue