mesa/formatquery: Added SRGB_{READ,WRITE} <pname> queries
authorAntia Puentes <apuentes@igalia.com>
Sat, 19 Dec 2015 18:14:51 +0000 (19:14 +0100)
committerEduardo Lima Mitev <elima@igalia.com>
Thu, 3 Mar 2016 14:14:07 +0000 (15:14 +0100)
From the ARB_internalformat_query2 specification:

   "- SRGB_READ: The support for converting from sRGB colorspace on read
      operations (see section 3.9.18) from the resource is returned in
      <params>.
      Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
      If the resource or operation is not supported, NONE is returned.

    - SRGB_WRITE: The support for converting to sRGB colorspace on write
      operations to the resource is returned in <params>.
      This indicates that writing to framebuffers with this internalformat
      will encode to sRGB color spaces when FRAMEBUFFER_SRGB is enabled (see
      section 4.1.8).
      Possible values returned are FULL_SUPPORT, CAVEAT_SUPPORT, or NONE.
      If the resource or operation is not supported, NONE is returned."

Reviewed-by: Dave Airlie <airlied@redhat.com>
src/mesa/main/formatquery.c

index bd69ea8f67771ccdeec5ade09e25cc79b9081abd..03ec11ae56f1c6f526df0d1350447e264f564e82 100644 (file)
@@ -598,6 +598,8 @@ _mesa_query_internal_format_default(struct gl_context *ctx, GLenum target,
 
    case GL_MANUAL_GENERATE_MIPMAP:
    case GL_AUTO_GENERATE_MIPMAP:
+   case GL_SRGB_READ:
+   case GL_SRGB_WRITE:
       params[0] = GL_FULL_SUPPORT;
       break;
 
@@ -1109,11 +1111,23 @@ _mesa_GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname,
       break;
 
    case GL_SRGB_READ:
-      /* @TODO */
+      if (!_mesa_has_EXT_texture_sRGB(ctx) ||
+          !_mesa_is_srgb_format(internalformat)) {
+         goto end;
+      }
+
+      ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
+                                      buffer);
       break;
 
    case GL_SRGB_WRITE:
-      /* @TODO */
+      if (!_mesa_has_EXT_framebuffer_sRGB(ctx) ||
+          !_mesa_is_color_format(internalformat)) {
+         goto end;
+      }
+
+      ctx->Driver.QueryInternalFormat(ctx, target, internalformat, pname,
+                                      buffer);
       break;
 
    case GL_SRGB_DECODE_ARB: