[Mesa-dev] [PATCH 1/3] mesa: Disallow deprecated SNORM formats for renderbuffers

Marek Olšák maraeo at gmail.com
Tue Dec 4 05:03:52 PST 2012


I'm okay with this patch.

Reviewed-by: Marek Olšák <maraeo at gmail.com>

Marek

On Tue, Dec 4, 2012 at 6:31 AM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> The OpenGL 3.2 core profile spec says:
>
>     "The following base internal formats from table 3.11 are
>     color-renderable: RED, RG, RGB, and RGBA. The sized internal formats
>     from table 3.12 that have a color-renderable base internal format
>     are also color-renderable. No other formats, including compressed
>     internal formats, are color-renderable."
>
> The OpenGL 3.2 compatibility profile spec says (only ALPHA is added):
>
>     "The following base internal formats from table 3.16 are
>     color-renderable: ALPHA, RED, RG, RGB, and RGBA. The sized internal formats
>     from table 3.17 that have a color-renderable base internal format
>     are also color-renderable. No other formats, including compressed
>     internal formats, are color-renderable."
>
> Table 3.12 in the core profile spec and table 3.17 in the compatibility
> profile spec list SNORM formats as having a base internal format of RED,
> RG, RGB, or RGBA.  From this we infer that they should also be color
> renderable.
>
> The OpenGL ES 3.0 spec says:
>
>     "An internal format is color-renderable if it is one of the formats
>     from table 3.12 noted as color-renderable or if it is unsized format
>     RGBA or RGB. No other formats, including compressed internal
>     formats, are color-renderable."
>
> In the OpenGL ES 3.0 spec, none of the SNORM formats have "color-
> renderable" marked in table 3.12.  The RGB I and UI formats also are not
> color-renderable in ES3, but we'll save that change for another patch.
>
> As a data point, NVIDIA's closed-source driver (version 304.64) rejects
> *all* SNORM formats for renderbuffers in an OpenGL 4.x compatibility
> profile.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Cc: Matt Turner <mattst88 at gmail.com>
> Cc: Marek Olšák <maraeo at gmail.com>
> ---
>  src/mesa/main/fbobject.c | 38 ++++----------------------------------
>  1 file changed, 4 insertions(+), 34 deletions(-)
>
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index ce77b9f..ab53bac 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -1169,35 +1169,23 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
>        return ctx->API != API_OPENGLES && ctx->Extensions.ARB_texture_rg
>           ? GL_RG : 0;
>     /* signed normalized texture formats */
> -   case GL_R8_SNORM:
> -      return ctx->Version >= 30
> -         || (ctx->API == API_OPENGL_COMPAT && ctx->Extensions.EXT_texture_snorm)
> -         ? GL_RED : 0;
>     case GL_RED_SNORM:
> +   case GL_R8_SNORM:
>     case GL_R16_SNORM:
>        return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_snorm
>           ? GL_RED : 0;
> -   case GL_RG8_SNORM:
> -      return ctx->Version >= 30
> -         || (ctx->API == API_OPENGL_COMPAT && ctx->Extensions.EXT_texture_snorm)
> -         ? GL_RG : 0;
>     case GL_RG_SNORM:
> +   case GL_RG8_SNORM:
>     case GL_RG16_SNORM:
>        return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_snorm
>           ? GL_RG : 0;
> -   case GL_RGB8_SNORM:
> -      return ctx->Version >= 30
> -         || (ctx->API == API_OPENGL_COMPAT && ctx->Extensions.EXT_texture_snorm)
> -         ? GL_RGB : 0;
>     case GL_RGB_SNORM:
> +   case GL_RGB8_SNORM:
>     case GL_RGB16_SNORM:
>        return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_snorm
>           ? GL_RGB : 0;
> -   case GL_RGBA8_SNORM:
> -      return ctx->Version >= 30
> -         || (ctx->API == API_OPENGL_COMPAT && ctx->Extensions.EXT_texture_snorm)
> -         ? GL_RGBA : 0;
>     case GL_RGBA_SNORM:
> +   case GL_RGBA8_SNORM:
>     case GL_RGBA16_SNORM:
>        return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_snorm
>           ? GL_RGBA : 0;
> @@ -1207,24 +1195,6 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
>        return ctx->API == API_OPENGL_COMPAT &&
>               ctx->Extensions.EXT_texture_snorm &&
>               ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0;
> -   case GL_LUMINANCE_SNORM:
> -   case GL_LUMINANCE8_SNORM:
> -   case GL_LUMINANCE16_SNORM:
> -      return ctx->API == API_OPENGL_COMPAT &&
> -             ctx->Extensions.EXT_texture_snorm &&
> -             ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0;
> -   case GL_LUMINANCE_ALPHA_SNORM:
> -   case GL_LUMINANCE8_ALPHA8_SNORM:
> -   case GL_LUMINANCE16_ALPHA16_SNORM:
> -      return ctx->API == API_OPENGL_COMPAT &&
> -             ctx->Extensions.EXT_texture_snorm &&
> -             ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0;
> -   case GL_INTENSITY_SNORM:
> -   case GL_INTENSITY8_SNORM:
> -   case GL_INTENSITY16_SNORM:
> -      return ctx->API == API_OPENGL_COMPAT &&
> -             ctx->Extensions.EXT_texture_snorm &&
> -             ctx->Extensions.ARB_framebuffer_object ? GL_INTENSITY : 0;
>     case GL_R16F:
>     case GL_R32F:
>        return ctx->Version >= 30
> --
> 1.7.11.7
>


More information about the mesa-dev mailing list