[Mesa-dev] [PATCH] mesa: fix OES_texture_float texture render target behavior

Ian Romanick idr at freedesktop.org
Thu Feb 12 13:47:33 PST 2015


On 02/12/2015 04:33 AM, Tapani Pälli wrote:
> Current implementation allowed usage of unsized type texture GL_FLOAT
> and GL_HALF_FLOAT as a render target as this was 'expected behavior' by
> WEBGL_oes_texture_float and is also allowed by the oes-texture-float
> WebGL test. However this broke some ES3 conformance tests that do not
> accept such behavior. Patch sets such an fbo incomplete as expected by
> the ES3 conformance tests. Textures with sized types like RGBA32F will
> still continue to work as render targets.

This looks right, but it's a shame that we lose some functionality.  It
doesn't seem like adding GL_EXT_color_buffer(_half)_float should be too
much work... quick follow-up?

One tiny nit below.  With that fixed,

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88905
> ---
>  src/mesa/main/fbobject.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index dae9d4e..fee7342 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -781,6 +781,17 @@ test_attachment_completeness(const struct gl_context *ctx, GLenum format,
>              att->Complete = GL_FALSE;
>              return;
>           }

Blank line here.

> +         /* OES_texture_float allows creation and use of floating point
> +          * textures with GL_FLOAT, GL_HALF_FLOAT but it does not allow
> +          * these textures to be used as a render target, this is done via
> +          * GL_EXT_color_buffer(_half)_float with set of new sized types.
> +          */
> +         if (_mesa_is_gles(ctx) && (texImage->TexObject->_IsFloat ||
> +             texImage->TexObject->_IsHalfFloat)) {
> +            att_incomplete("bad internal format");
> +            att->Complete = GL_FALSE;
> +            return;
> +         }
>        }
>        else if (format == GL_DEPTH) {
>           if (baseFormat == GL_DEPTH_COMPONENT) {
> 



More information about the mesa-dev mailing list