r600g: pad the DMA CS to a multiple of 8 dwords
[mesa.git] / src / mesa / main / texformat.c
index 910f318fc40d4138528985b1c9e577a9b3e797f5..6f22a4f5f12f2a9cf59b98d1e34ba3fab2b70f19 100644 (file)
@@ -75,7 +75,9 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
            RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
         } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
            RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
-        }
+         } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
+            RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
+         }
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
         RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
         break;
@@ -111,6 +113,10 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
       /* shallow RGB formats */
       case 3:
       case GL_RGB:
+         if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
+            RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
+         }
+         /* fallthrough */
       case GL_RGB8:
         RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
         RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
@@ -245,7 +251,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
           */
          if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
             if (ctx->Extensions.EXT_texture_compression_s3tc ||
-                ctx->Extensions.S3_s3tc)
+                ctx->Extensions.ANGLE_texture_compression_dxt)
                RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
             if (ctx->Extensions.TDFX_texture_compression_FXT1)
                RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
@@ -258,7 +264,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
          /* We don't use texture compression for 1D and 1D array textures. */
          if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
             if (ctx->Extensions.EXT_texture_compression_s3tc ||
-                ctx->Extensions.S3_s3tc)
+                ctx->Extensions.ANGLE_texture_compression_dxt)
                RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
             if (ctx->Extensions.TDFX_texture_compression_FXT1)
                RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
@@ -289,51 +295,81 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
       }
    }
 
-   if (ctx->Extensions.TDFX_texture_compression_FXT1) {
-      switch (internalFormat) {
-         case GL_COMPRESSED_RGB_FXT1_3DFX:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
-        break;
-         case GL_COMPRESSED_RGBA_FXT1_3DFX:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
-        break;
-         default:
-            ; /* fallthrough */
-      }
-   }
-
-   if (ctx->Extensions.EXT_texture_compression_s3tc) {
-      switch (internalFormat) {
-         case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
-           break;
-         case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT1);
-           break;
-         case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3);
-           break;
-         case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT5);
-           break;
-         default:
-            ; /* fallthrough */
-      }
-   }
-
-   if (ctx->Extensions.S3_s3tc) {
-      switch (internalFormat) {
-         case GL_RGB_S3TC:
-         case GL_RGB4_S3TC:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
-           break;
-         case GL_RGBA_S3TC:
-         case GL_RGBA4_S3TC:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3);
-           break;
-         default:
-            ; /* fallthrough */
-      }
+   /* For non-generic compressed format we assert two things:
+    *
+    * 1. The format has already been validated against the set of available
+    *    extensions.
+    *
+    * 2. The driver only enables the extension if it supports all of the
+    *    formats that are part of that extension.
+    */
+   switch (internalFormat) {
+   case GL_COMPRESSED_RGB_FXT1_3DFX:
+      return MESA_FORMAT_RGB_FXT1;
+   case GL_COMPRESSED_RGBA_FXT1_3DFX:
+      return MESA_FORMAT_RGBA_FXT1;
+   case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
+   case GL_RGB_S3TC:
+   case GL_RGB4_S3TC:
+      return MESA_FORMAT_RGB_DXT1;
+   case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
+      return MESA_FORMAT_RGBA_DXT1;
+   case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
+   case GL_RGBA_S3TC:
+   case GL_RGBA4_S3TC:
+      return MESA_FORMAT_RGBA_DXT3;
+   case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
+      return MESA_FORMAT_RGBA_DXT5;
+   case GL_COMPRESSED_RED_RGTC1:
+      return MESA_FORMAT_RED_RGTC1;
+   case GL_COMPRESSED_SIGNED_RED_RGTC1:
+      return MESA_FORMAT_SIGNED_RED_RGTC1;
+   case GL_COMPRESSED_RG_RGTC2:
+      return MESA_FORMAT_RG_RGTC2;
+   case GL_COMPRESSED_SIGNED_RG_RGTC2:
+      return MESA_FORMAT_SIGNED_RG_RGTC2;
+   case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
+      return MESA_FORMAT_L_LATC1;
+   case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
+      return MESA_FORMAT_SIGNED_L_LATC1;
+   case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
+      return MESA_FORMAT_LA_LATC2;
+   case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
+      return MESA_FORMAT_SIGNED_LA_LATC2;
+   case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
+      return MESA_FORMAT_LA_LATC2;
+   case GL_ETC1_RGB8_OES:
+      return MESA_FORMAT_ETC1_RGB8;
+   case GL_COMPRESSED_RGB8_ETC2:
+      return MESA_FORMAT_ETC2_RGB8;
+   case GL_COMPRESSED_SRGB8_ETC2:
+      return MESA_FORMAT_ETC2_SRGB8;
+   case GL_COMPRESSED_RGBA8_ETC2_EAC:
+      return MESA_FORMAT_ETC2_RGBA8_EAC;
+   case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+      return MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC;
+   case GL_COMPRESSED_R11_EAC:
+      return MESA_FORMAT_ETC2_R11_EAC;
+   case GL_COMPRESSED_RG11_EAC:
+      return MESA_FORMAT_ETC2_RG11_EAC;
+   case GL_COMPRESSED_SIGNED_R11_EAC:
+      return MESA_FORMAT_ETC2_SIGNED_R11_EAC;
+   case GL_COMPRESSED_SIGNED_RG11_EAC:
+      return MESA_FORMAT_ETC2_SIGNED_RG11_EAC;
+   case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+      return MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1;
+   case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+      return MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1;
+   case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
+      return MESA_FORMAT_SRGB_DXT1;
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
+      return MESA_FORMAT_SRGBA_DXT1;
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
+      return MESA_FORMAT_SRGBA_DXT3;
+   case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
+      return MESA_FORMAT_SRGBA_DXT5;
+   default:
+      ; /* fallthrough */
    }
 
    if (ctx->Extensions.ARB_texture_float) {
@@ -551,7 +587,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
       }
    }
 
-#if FEATURE_EXT_texture_sRGB
    if (ctx->Extensions.EXT_texture_sRGB) {
       switch (internalFormat) {
          case GL_SRGB_EXT:
@@ -594,31 +629,10 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
            RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
            RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
            break;
-         case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
-            if (ctx->Extensions.EXT_texture_compression_s3tc)
-              RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
-            break;
-         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
-            if (ctx->Extensions.EXT_texture_compression_s3tc)
-              RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1);
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
-            break;
-         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
-            if (ctx->Extensions.EXT_texture_compression_s3tc)
-              RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3);
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
-            break;
-         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
-            if (ctx->Extensions.EXT_texture_compression_s3tc)
-              RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5);
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
-            break;
          default:
             ; /* fallthrough */
       }
    }
-#endif /* FEATURE_EXT_texture_sRGB */
 
    if (ctx->Extensions.EXT_texture_integer) {
       switch (internalFormat) {
@@ -798,7 +812,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
         break;
 
       case GL_RG16:
-        RETURN_IF_SUPPORTED(MESA_FORMAT_RG1616);
+        RETURN_IF_SUPPORTED(MESA_FORMAT_GR1616);
         break;
 
       default:
@@ -910,64 +924,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
       }
    }
 
-   if (ctx->Extensions.ARB_texture_compression_rgtc) {
-      switch (internalFormat) {
-         case GL_COMPRESSED_RED_RGTC1:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
-           break;
-         case GL_COMPRESSED_SIGNED_RED_RGTC1:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RED_RGTC1);
-           break;
-         case GL_COMPRESSED_RG_RGTC2:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
-           break;
-         case GL_COMPRESSED_SIGNED_RG_RGTC2:
-           RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG_RGTC2);
-           break;
-         default:
-            ; /* fallthrough */
-      }
-   }
-
-   if (ctx->Extensions.EXT_texture_compression_latc) {
-      switch (internalFormat) {
-         case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
-            RETURN_IF_SUPPORTED(MESA_FORMAT_L_LATC1);
-            break;
-         case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
-            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L_LATC1);
-            break;
-         case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
-            RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2);
-            break;
-         case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
-            RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_LA_LATC2);
-            break;
-         default:
-            ; /* fallthrough */
-      }
-   }
-
-   if (ctx->Extensions.ATI_texture_compression_3dc) {
-      switch (internalFormat) {
-         case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
-            RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2);
-            break;
-         default:
-            ; /* fallthrough */
-      }
-   }
-
-   if (ctx->Extensions.OES_compressed_ETC1_RGB8_texture) {
-      switch (internalFormat) {
-         case GL_ETC1_RGB8_OES:
-            RETURN_IF_SUPPORTED(MESA_FORMAT_ETC1_RGB8);
-            break;
-         default:
-            ; /* fallthrough */
-      }
-   }
-
    _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()",
                  _mesa_lookup_enum_by_nr(internalFormat));
    return MESA_FORMAT_NONE;