[Mesa-dev] [PATCH] mesa: Reject texture-only formats as renderbuffer formats in ES 3

Matt Turner mattst88 at gmail.com
Mon Nov 26 11:02:55 PST 2012


ES 3 specifies some formats as texture-only (i.e., not available for
renderbuffers).

See the "Required Texture Formats" section (pg 126) of the ES 3 spec.

Fixes es3conform's color_buffer_unsupported_format test.
---
I know Ken doesn't like this part of the spec, but here's the patch in the
case that we decide to implement it.

 src/mesa/main/fbobject.c |   32 +++++++++++---------------------
 1 files changed, 11 insertions(+), 21 deletions(-)

diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 804be0a..b4e8beb 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1108,7 +1108,7 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
    case GL_RGB16:
       return _mesa_is_desktop_gl(ctx) ? GL_RGB : 0;
    case GL_SRGB8_EXT:
-      return _mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx) ? GL_RGB : 0;
+      return _mesa_is_desktop_gl(ctx) ? GL_RGB : 0;
    case GL_RGBA4:
    case GL_RGB5_A1:
    case GL_RGBA8:
@@ -1168,32 +1168,28 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
          ? GL_RG : 0;
    /* signed normalized texture formats */
    case GL_R8_SNORM:
-      return ctx->Version >= 30
-         || (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm)
+      return (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm)
          ? GL_RED : 0;
    case GL_RED_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 && ctx->Extensions.EXT_texture_snorm)
+      return (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm)
          ? GL_RG : 0;
    case GL_RG_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 && ctx->Extensions.EXT_texture_snorm)
+      return (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm)
          ? GL_RGB : 0;
    case GL_RGB_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 && ctx->Extensions.EXT_texture_snorm)
+      return (ctx->API == API_OPENGL && ctx->Extensions.EXT_texture_snorm)
          ? GL_RGBA : 0;
    case GL_RGBA_SNORM:
    case GL_RGBA16_SNORM:
@@ -1225,25 +1221,21 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
              ctx->Extensions.ARB_framebuffer_object ? GL_INTENSITY : 0;
    case GL_R16F:
    case GL_R32F:
-      return ctx->Version >= 30
-         || (ctx->API == API_OPENGL &&
+      return (ctx->API == API_OPENGL &&
              ctx->Extensions.ARB_texture_rg &&
              ctx->Extensions.ARB_texture_float) ? GL_RED : 0;
    case GL_RG16F:
    case GL_RG32F:
-      return ctx->Version >= 30
-         || (ctx->API == API_OPENGL &&
+      return (ctx->API == API_OPENGL &&
              ctx->Extensions.ARB_texture_rg &&
              ctx->Extensions.ARB_texture_float) ? GL_RG : 0;
    case GL_RGB16F:
    case GL_RGB32F:
       return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_float)
-         || _mesa_is_gles3(ctx)
          ? GL_RGB : 0;
    case GL_RGBA16F:
    case GL_RGBA32F:
       return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_float)
-         || _mesa_is_gles3(ctx)
          ? GL_RGBA : 0;
    case GL_ALPHA16F_ARB:
    case GL_ALPHA32F_ARB:
@@ -1268,10 +1260,10 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
    case GL_RGB9_E5:
       return (_mesa_is_desktop_gl(ctx)
               && ctx->Extensions.EXT_texture_shared_exponent)
-         || _mesa_is_gles3(ctx) ? GL_RGB : 0;
+         ? GL_RGB : 0;
    case GL_R11F_G11F_B10F:
       return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_packed_float)
-         || _mesa_is_gles3(ctx) ? GL_RGB : 0;
+         ? GL_RGB : 0;
 
    case GL_RGBA8UI_EXT:
    case GL_RGBA16UI_EXT:
@@ -1289,8 +1281,7 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
    case GL_RGB8I_EXT:
    case GL_RGB16I_EXT:
    case GL_RGB32I_EXT:
-      return ctx->Version >= 30
-         || (_mesa_is_desktop_gl(ctx) &&
+      return (_mesa_is_desktop_gl(ctx) &&
              ctx->Extensions.EXT_texture_integer) ? GL_RGB : 0;
 
    case GL_R8UI:
@@ -1310,8 +1301,7 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
    case GL_RG16I:
    case GL_RG32UI:
    case GL_RG32I:
-      return ctx->Version >= 30
-         || (_mesa_is_desktop_gl(ctx) &&
+      return (_mesa_is_desktop_gl(ctx) &&
              ctx->Extensions.ARB_texture_rg &&
              ctx->Extensions.EXT_texture_integer) ? GL_RG : 0;
 
-- 
1.7.8.6



More information about the mesa-dev mailing list