From b3c5df3ca4ca69006114565bf5d6d01c7b8b2934 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Thu, 7 Jul 2016 11:50:44 -0700 Subject: mesa: Mark R*32F formats as filterable when an extension is present. GL_OES_texture_float_linear marks R32F, RG32F, RGB32F, and RGBA32F as texture filterable. Fixes glGenerateMipmap GL errors when visiting a WebGL demo in Chromium: http://www.iamnop.com/particles Signed-off-by: Kenneth Graunke Reviewed-by: Ilia Mirkin --- src/mesa/main/genmipmap.c | 2 +- src/mesa/main/glformats.c | 17 ++++++++++++++++- src/mesa/main/glformats.h | 3 ++- 3 files changed, 19 insertions(+), 3 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/main/genmipmap.c b/src/mesa/main/genmipmap.c index d917220f7e8..5e780c97ca8 100644 --- a/src/mesa/main/genmipmap.c +++ b/src/mesa/main/genmipmap.c @@ -90,7 +90,7 @@ _mesa_is_valid_generate_texture_mipmap_internalformat(struct gl_context *ctx, internalformat == GL_LUMINANCE_ALPHA || internalformat == GL_LUMINANCE || internalformat == GL_ALPHA || (_mesa_is_es3_color_renderable(internalformat) && - _mesa_is_es3_texture_filterable(internalformat)); + _mesa_is_es3_texture_filterable(ctx, internalformat)); } return (!_mesa_is_enum_format_integer(internalformat) && diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c index 24ce7b04f6b..448577e059f 100644 --- a/src/mesa/main/glformats.c +++ b/src/mesa/main/glformats.c @@ -3656,7 +3656,8 @@ _mesa_is_es3_color_renderable(GLenum internal_format) * is marked "Texture Filterable" in Table 8.10 of the ES 3.2 specification. */ bool -_mesa_is_es3_texture_filterable(GLenum internal_format) +_mesa_is_es3_texture_filterable(const struct gl_context *ctx, + GLenum internal_format) { switch (internal_format) { case GL_R8: @@ -3680,6 +3681,20 @@ _mesa_is_es3_texture_filterable(GLenum internal_format) case GL_R11F_G11F_B10F: case GL_RGB9_E5: return true; + case GL_R32F: + case GL_RG32F: + case GL_RGB32F: + case GL_RGBA32F: + /* The OES_texture_float_linear spec says: + * + * "When implemented against OpenGL ES 3.0 or later versions, sized + * 32-bit floating-point formats become texture-filterable. This + * should be noted by, for example, checking the ``TF'' column of + * table 8.13 in the ES 3.1 Specification (``Correspondence of sized + * internal formats to base internal formats ... and use cases ...'') + * for the R32F, RG32F, RGB32F, and RGBA32F formats." + */ + return ctx->Extensions.OES_texture_float_linear; default: return false; } diff --git a/src/mesa/main/glformats.h b/src/mesa/main/glformats.h index c73f464e5f9..782e0f2edc8 100644 --- a/src/mesa/main/glformats.h +++ b/src/mesa/main/glformats.h @@ -149,7 +149,8 @@ extern bool _mesa_is_es3_color_renderable(GLenum internal_format); extern bool -_mesa_is_es3_texture_filterable(GLenum internal_format); +_mesa_is_es3_texture_filterable(const struct gl_context *ctx, + GLenum internal_format); #ifdef __cplusplus } -- cgit v1.2.3