[Mesa-dev] [PATCH 2/2] mesa: Do proper format error checks for GenerateMipmap in ES 3.x.

Jordan Justen jordan.l.justen at intel.com
Fri Mar 18 00:10:45 UTC 2016


Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

On 2016-03-16 20:32:19, Kenneth Graunke wrote:
> According to the OpenGL ES 3.2 spec's description of GenerateMipmap:
> 
> "An INVALID_OPERATION error is generated if the levelbase array was not
>  specified with an unsized internal format from table 8.3 or a sized
>  internal format that is both color-renderable and texture-filterable
>  according to table 8.10."
> 
> Similar text exists in the ES 3.0 specification as well.
> 
> Our existing rules are pretty close, but miss a few things.  The
> OpenGL specification actually doesn't have any text about internal
> format checking - our existing code comes from a Khronos bug report.
> The ES 3.x spec provides a clearer description.
> 
> Fixes dEQP-GLES3.functional.negative_api.texture.generatemipmap and
> dEQP-GLES2.functional.negative_api.texture.generatemipmap_zero_level
> _array_compressed.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/main/genmipmap.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/src/mesa/main/genmipmap.c b/src/mesa/main/genmipmap.c
> index 6eacd42..1a6ae9a 100644
> --- a/src/mesa/main/genmipmap.c
> +++ b/src/mesa/main/genmipmap.c
> @@ -79,6 +79,20 @@ bool
>  _mesa_is_valid_generate_texture_mipmap_internalformat(struct gl_context *ctx,
>                                                        GLenum internalformat)
>  {
> +   if (_mesa_is_gles3(ctx)) {
> +      /* From the ES 3.2 specification's description of GenerateMipmap():
> +       * "An INVALID_OPERATION error is generated if the levelbase array was
> +       *  not specified with an unsized internal format from table 8.3 or a
> +       *  sized internal format that is both color-renderable and
> +       *  texture-filterable according to table 8.10."
> +       */
> +      return internalformat == GL_RGBA || internalformat == GL_RGB ||
> +             internalformat == GL_LUMINANCE_ALPHA ||
> +             internalformat == GL_LUMINANCE || internalformat == GL_ALPHA ||
> +             (_mesa_is_es3_color_renderable(internalformat) &&
> +              _mesa_is_es3_texture_filterable(internalformat));
> +   }
> +
>     return (!_mesa_is_enum_format_integer(internalformat) &&
>             !_mesa_is_depthstencil_format(internalformat) &&
>             !_mesa_is_astc_format(internalformat) &&
> -- 
> 2.7.3
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list