intel: Handle arbitrary compressed formats in intel_compressed_num_bytes.
authorEric Anholt <eric@anholt.net>
Thu, 13 May 2010 21:48:13 +0000 (14:48 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 14 May 2010 18:27:59 +0000 (11:27 -0700)
Note that we don't support arbitrary block size for compressed quite
yet -- block height of 4 is hard-coded all over the place.

Bug #27098 (srgb dxt1 producing a bytes per pixel of 0).

src/mesa/drivers/dri/intel/intel_tex_format.c

index 7be5231eaef1ab5611be7c0d0e5b9e8e7e394e49..610a169beb2d7e7fb0c8838aafc0cbba3b6f0848 100644 (file)
@@ -1,7 +1,7 @@
 #include "intel_context.h"
 #include "intel_tex.h"
 #include "main/enums.h"
-
+#include "main/formats.h"
 
 /**
  * Choose hardware texture format given the user's glTexImage parameters.
@@ -208,22 +208,11 @@ intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
 
 int intel_compressed_num_bytes(GLuint mesaFormat)
 {
-   int bytes = 0;
-   switch(mesaFormat) {
-     
-   case MESA_FORMAT_RGB_FXT1:
-   case MESA_FORMAT_RGBA_FXT1:
-   case MESA_FORMAT_RGB_DXT1:
-   case MESA_FORMAT_RGBA_DXT1:
-     bytes = 2;
-     break;
-     
-   case MESA_FORMAT_RGBA_DXT3:
-   case MESA_FORMAT_RGBA_DXT5:
-     bytes = 4;
-   default:
-     break;
-   }
-   
-   return bytes;
+   GLuint bw, bh;
+   GLuint block_size;
+
+   block_size = _mesa_get_format_bytes(mesaFormat);
+   _mesa_get_format_block_size(mesaFormat, &bw, &bh);
+
+   return block_size / bh;
 }