On 01/04/2013 06:41 PM, Jordan Justen wrote:
Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com>
---
  src/mesa/main/teximage.c |   29 +++++++++++++++++++++++++++++
  1 file changed, 29 insertions(+)

diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index ac60a21..169e768 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -2323,6 +2323,29 @@ texsubimage_error_check(struct gl_context *ctx, GLuint 
dimensions,
  }


+static bool
+is_srgb_format(GLenum internalFormat)
+{
+   switch (internalFormat) {
+   case GL_SRGB_EXT:
+   case GL_SRGB8_EXT:
+   case GL_COMPRESSED_SRGB_EXT:
+   case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
+   case GL_SRGB_ALPHA_EXT:
+   case GL_SRGB8_ALPHA8_EXT:
+   case GL_COMPRESSED_SRGB_ALPHA_EXT:
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:

Also, drop _EXT in the cases that can.

+   case GL_COMPRESSED_SRGB8_ETC2:
+   case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+   case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:

Eh... you can't specify the compressed formats as internalformat, and that won't be format of the read-buffer either. Right?

+      return true;
+   default:
+      return false;
+   }
+}
+
  /**
   * Test glCopyTexImage[12]D() parameters for errors.
   *
@@ -2416,6 +2439,12 @@ copytexture_error_check( struct gl_context *ctx, GLuint 
dimensions,
        return GL_TRUE;
     }


It makes sense, but I didn't realize it was supposed to be an error. Is there a similar error for TexImage? Could you add this spec reference here:

    /* Page 190 (page 211 of the PDF) in section 8.6 of the OpenGL 4.3
     * Core Profile spec says:
     *
     *     "An INVALID_OPERATION error is generated under any of the
     *     following conditions:
     *
     *     ...
     *
     *     - if the value of FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
     *       for the framebuffer attachment corresponding to the read
     *       buffer is SRGB and internalformat is not one of the sRGB
     *       formats. in table 8.23."
     */

+   if (is_srgb_format(internalFormat) != is_srgb_format(rb_internal_format)) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glCopyTexImage%dD(srgb usage mismatch)", dimensions);
+      return GL_TRUE;
+   }
+
     if (!_mesa_source_buffer_exists(ctx, baseFormat)) {
        _mesa_error(ctx, GL_INVALID_OPERATION,
                    "glCopyTexImage%dD(missing readbuffer)", dimensions);


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to