ARB_texture_rg: Correct some errors in RED / RG internal format handling
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 28 Sep 2010 18:11:43 +0000 (11:11 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 1 Oct 2010 22:49:12 +0000 (15:49 -0700)
Fixes several problems:

The half-float, float, and integer internal formats depend on
ARB_texture_rg and other extensions.

RG_INTEGER is not a valid internal format.

Generic compressed formats depend on ARB_texture_rg, not
EXT_texture_compression_rgtc.

Use GL_RED instead of GL_R.

src/mesa/main/teximage.c

index 614f0014dab6f8ff674de75391672d29e102a580..28d370eb65960eece73b9c3b8b9b4cfa8e17171b 100644 (file)
@@ -403,29 +403,54 @@ _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat )
 
    if (ctx->Extensions.ARB_texture_rg) {
       switch (internalFormat) {
-      case GL_R8:
-      case GL_R16:
       case GL_R16F:
+        /* R16F depends on both ARB_half_float_pixel and ARB_texture_float.
+         */
+        if (!ctx->Extensions.ARB_half_float_pixel)
+           break;
+        /* FALLTHROUGH */
       case GL_R32F:
+        if (!ctx->Extensions.ARB_texture_float)
+           break;
+         return GL_RED;
       case GL_R8I:
       case GL_R8UI:
       case GL_R16I:
       case GL_R16UI:
       case GL_R32I:
       case GL_R32UI:
-         return GL_R;
-      case GL_RG:
-      case GL_RG_INTEGER:
-      case GL_RG8:
-      case GL_RG16:
+        if (!ctx->Extensions.EXT_texture_integer)
+           break;
+        /* FALLTHROUGH */
+      case GL_R8:
+      case GL_R16:
+      case GL_RED:
+      case GL_COMPRESSED_RED:
+         return GL_RED;
+
       case GL_RG16F:
+        /* RG16F depends on both ARB_half_float_pixel and ARB_texture_float.
+         */
+        if (!ctx->Extensions.ARB_half_float_pixel)
+           break;
+        /* FALLTHROUGH */
       case GL_RG32F:
+        if (!ctx->Extensions.ARB_texture_float)
+           break;
+         return GL_RG;
       case GL_RG8I:
       case GL_RG8UI:
       case GL_RG16I:
       case GL_RG16UI:
       case GL_RG32I:
       case GL_RG32UI:
+        if (!ctx->Extensions.EXT_texture_integer)
+           break;
+        /* FALLTHROUGH */
+      case GL_RG:
+      case GL_RG8:
+      case GL_RG16:
+      case GL_COMPRESSED_RG:
          return GL_RG;
       default:
          ; /* fallthrough */
@@ -463,11 +488,9 @@ _mesa_base_tex_format( GLcontext *ctx, GLint internalFormat )
 
    if (ctx->Extensions.EXT_texture_compression_rgtc) {
       switch (internalFormat) {
-      case GL_COMPRESSED_RED:
       case GL_COMPRESSED_RED_RGTC1_EXT:
       case GL_COMPRESSED_SIGNED_RED_RGTC1_EXT:
          return GL_RED;
-      case GL_COMPRESSED_RG:
       case GL_COMPRESSED_RED_GREEN_RGTC2_EXT:
       case GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT:
          return GL_RG;