[Mesa-dev] [PATCH 1/3] mesa: add explicit enable for EXT_float_blend, and error condition
Tapani Pälli
tapani.palli at intel.com
Wed Feb 13 07:18:56 UTC 2019
Patches 1 and 3 are
Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
On 2/13/19 5:40 AM, Ilia Mirkin wrote:
> If EXT_float_blend is not supported, error out on blending of FP32
> attachments in an ES2 context.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
> src/mesa/main/draw_validate.c | 19 +++++++++++++++++++
> src/mesa/main/extensions_table.h | 2 +-
> src/mesa/main/fbobject.c | 4 ++++
> src/mesa/main/mtypes.h | 2 ++
> 4 files changed, 26 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/main/draw_validate.c b/src/mesa/main/draw_validate.c
> index b715a27f8b7..779cd1c12c7 100644
> --- a/src/mesa/main/draw_validate.c
> +++ b/src/mesa/main/draw_validate.c
> @@ -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:
> diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
> index 0d6bb452ffa..b0492fed698 100644
> --- a/src/mesa/main/extensions_table.h
> +++ b/src/mesa/main/extensions_table.h
> @@ -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)
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index 87c33be7854..21e3496593c 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -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);
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index dda96cd2f19..ca00de7dc63 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -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;
>
More information about the mesa-dev
mailing list