mesa: added _mesa_get_uncompressed_format(), _mesa_format_num_components()
authorBrian Paul <brianp@vmware.com>
Fri, 9 Sep 2011 02:16:18 +0000 (20:16 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 9 Sep 2011 02:16:18 +0000 (20:16 -0600)
src/mesa/main/formats.c
src/mesa/main/formats.h

index c6634c458de4bede494444b423ca4c408222aadc..11d670689bfec0b304c424c22ecffe7f92bd9473 100644 (file)
@@ -1342,6 +1342,70 @@ _mesa_get_srgb_format_linear(gl_format format)
 }
 
 
+/**
+ * If the given format is a compressed format, return a corresponding
+ * uncompressed format.
+ */
+gl_format
+_mesa_get_uncompressed_format(gl_format format)
+{
+   switch (format) {
+   case MESA_FORMAT_RGB_FXT1:
+      return MESA_FORMAT_RGB888;
+   case MESA_FORMAT_RGBA_FXT1:
+      return MESA_FORMAT_RGBA8888;
+   case MESA_FORMAT_RGB_DXT1:
+   case MESA_FORMAT_SRGB_DXT1:
+      return MESA_FORMAT_RGB888;
+   case MESA_FORMAT_RGBA_DXT1:
+   case MESA_FORMAT_SRGBA_DXT1:
+      return MESA_FORMAT_RGBA8888;
+   case MESA_FORMAT_RGBA_DXT3:
+   case MESA_FORMAT_SRGBA_DXT3:
+      return MESA_FORMAT_RGBA8888;
+   case MESA_FORMAT_RGBA_DXT5:
+   case MESA_FORMAT_SRGBA_DXT5:
+      return MESA_FORMAT_RGBA8888;
+   case MESA_FORMAT_RED_RGTC1:
+      return MESA_FORMAT_R8;
+   case MESA_FORMAT_SIGNED_RED_RGTC1:
+      return MESA_FORMAT_SIGNED_R8;
+   case MESA_FORMAT_RG_RGTC2:
+      return MESA_FORMAT_RG88;
+   case MESA_FORMAT_SIGNED_RG_RGTC2:
+      return MESA_FORMAT_SIGNED_RG88_REV;
+   case MESA_FORMAT_L_LATC1:
+      return MESA_FORMAT_L8;
+   case MESA_FORMAT_SIGNED_L_LATC1:
+      return MESA_FORMAT_SIGNED_L8;
+   case MESA_FORMAT_LA_LATC2:
+      return MESA_FORMAT_AL88;
+   case MESA_FORMAT_SIGNED_LA_LATC2:
+      return MESA_FORMAT_SIGNED_AL88;
+   default:
+#ifdef DEBUG
+      assert(!_mesa_is_format_compressed(format));
+#endif
+      return format;
+   }
+}
+
+
+GLuint
+_mesa_format_num_components(gl_format format)
+{
+   const struct gl_format_info *info = _mesa_get_format_info(format);
+   return ((info->RedBits > 0) +
+           (info->GreenBits > 0) +
+           (info->BlueBits > 0) +
+           (info->AlphaBits > 0) +
+           (info->LuminanceBits > 0) +
+           (info->IntensityBits > 0) +
+           (info->DepthBits > 0) +
+           (info->StencilBits > 0));
+}
+
+
 /**
  * Return number of bytes needed to store an image of the given size
  * in the given format.
index 75d93debaca6a335fd95154072c5783244fa8da3..610204cb37c064eafdef47cd57a43e96ec485f50 100644 (file)
@@ -266,4 +266,11 @@ _mesa_test_formats(void);
 extern gl_format
 _mesa_get_srgb_format_linear(gl_format format);
 
+extern gl_format
+_mesa_get_uncompressed_format(gl_format format);
+
+extern GLuint
+_mesa_format_num_components(gl_format format);
+
+
 #endif /* FORMATS_H */