extensions: enable EXT_color_buffer_float for ES3
authorJordan Justen <jordan.l.justen@intel.com>
Fri, 11 Jan 2013 01:29:27 +0000 (17:29 -0800)
committerMatt Turner <mattst88@gmail.com>
Mon, 21 Jan 2013 03:54:38 +0000 (19:54 -0800)
[mattst88] v2: Enable only for ES3 per spec.
[mattst88] v3: Use _mesa_is_gles3 since EXT_color_buffer_float is
       ES3-only.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/main/extensions.c
src/mesa/main/fbobject.c
src/mesa/main/readpix.c

index a42ea8d4903afec05423d4d9b2a46d8752477f88..fd25d31c6af70e5927dfca030c04686a7e3906ae 100644 (file)
@@ -233,6 +233,7 @@ static const struct extension extension_table[] = {
    { "GL_EXT_unpack_subimage",                     o(dummy_true),                                         ES2, 2011 },
    { "GL_EXT_vertex_array_bgra",                   o(EXT_vertex_array_bgra),                   GL,             2008 },
    { "GL_EXT_vertex_array",                        o(dummy_true),                              GLL,            1995 },
+   { "GL_EXT_color_buffer_float",                  o(dummy_true),                                         ES3, 2013 },
 
    /* OES extensions */
    { "GL_OES_blend_equation_separate",             o(EXT_blend_equation_separate),                  ES1,       2009 },
index 9db5035d1aba3044714f749eaccf45f31bbe93b4..32cf1cc9e2358b2ec228432421eeb3a53d1ca61a 100644 (file)
@@ -1217,21 +1217,27 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
              ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0;
    case GL_R16F:
    case GL_R32F:
-      return (_mesa_is_desktop_gl(ctx) &&
-             ctx->Extensions.ARB_texture_rg &&
-             ctx->Extensions.ARB_texture_float) ? GL_RED : 0;
+      return ((_mesa_is_desktop_gl(ctx) &&
+               ctx->Extensions.ARB_texture_rg &&
+               ctx->Extensions.ARB_texture_float) ||
+              _mesa_is_gles3(ctx) /* EXT_color_buffer_float */ )
+         ? GL_RED : 0;
    case GL_RG16F:
    case GL_RG32F:
-      return (_mesa_is_desktop_gl(ctx) &&
-             ctx->Extensions.ARB_texture_rg &&
-             ctx->Extensions.ARB_texture_float) ? GL_RG : 0;
+      return ((_mesa_is_desktop_gl(ctx) &&
+               ctx->Extensions.ARB_texture_rg &&
+               ctx->Extensions.ARB_texture_float) ||
+              _mesa_is_gles3(ctx) /* EXT_color_buffer_float */ )
+         ? GL_RG : 0;
    case GL_RGB16F:
    case GL_RGB32F:
       return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_float)
          ? GL_RGB : 0;
    case GL_RGBA16F:
    case GL_RGBA32F:
-      return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_texture_float)
+      return ((_mesa_is_desktop_gl(ctx) &&
+               ctx->Extensions.ARB_texture_float) ||
+              _mesa_is_gles3(ctx) /* EXT_color_buffer_float */ )
          ? GL_RGBA : 0;
    case GL_ALPHA16F_ARB:
    case GL_ALPHA32F_ARB:
@@ -1258,7 +1264,8 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
               && ctx->Extensions.EXT_texture_shared_exponent)
          ? GL_RGB : 0;
    case GL_R11F_G11F_B10F:
-      return (_mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_packed_float)
+      return ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_packed_float) ||
+              _mesa_is_gles3(ctx) /* EXT_color_buffer_float */ )
          ? GL_RGB : 0;
 
    case GL_RGBA8UI_EXT:
@@ -1423,7 +1430,8 @@ renderbuffer_storage(GLenum target, GLenum internalFormat,
 
    baseFormat = _mesa_base_fbo_format(ctx, internalFormat);
    if (baseFormat == 0) {
-      _mesa_error(ctx, GL_INVALID_ENUM, "%s(internalFormat)", func);
+      _mesa_error(ctx, GL_INVALID_ENUM, "%s(internalFormat=%s)",
+                  func, _mesa_lookup_enum_by_nr(internalFormat));
       return;
    }
 
index cb4d02daf81b9a8ce03f0dcd70472f85dd60e281..994e5895e73547b51501086f796dea0eb1402fc5 100644 (file)
@@ -694,6 +694,8 @@ read_pixels_es3_error_check(GLenum format, GLenum type,
 
    switch (format) {
    case GL_RGBA:
+      if (type == GL_FLOAT && data_type == GL_FLOAT)
+         return GL_NO_ERROR; /* EXT_color_buffer_float */
       if (type == GL_UNSIGNED_BYTE && data_type == GL_UNSIGNED_NORMALIZED)
          return GL_NO_ERROR;
       if (internalFormat == GL_RGB10_A2 &&