mesa/formats: define the 2D ASTC formats
authorNanley Chery <nanley.g.chery@intel.com>
Tue, 19 May 2015 17:35:39 +0000 (10:35 -0700)
committerNanley Chery <nanley.g.chery@intel.com>
Wed, 26 Aug 2015 21:36:42 +0000 (14:36 -0700)
Define the mesa formats and make changes necessary for compilation
without errors. Also add support for _mesa_get_srgb_format_linear().

v2. conform the ASTC MESA_FORMAT enums to the existing naming convention.
v3. remove ASTC cases for _mesa_get_uncompressed_format(). This function is
    only used for generating mipmaps - something ASTC formats do not support
    due to lack of online compression.

Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
src/mesa/main/format_info.py
src/mesa/main/formats.c
src/mesa/main/formats.csv
src/mesa/main/formats.h
src/mesa/swrast/s_texfetch.c

index 839d4073c61f31b12a6f12491eca14de39f1279e..22eb5a734a66be0120ade20c652114be0f102d58 100644 (file)
@@ -122,6 +122,9 @@ def get_channel_bits(fmat, chan_name):
       elif fmat.layout == 'bptc':
          bits = 16 if fmat.name.endswith('_FLOAT') else 8
          return bits if fmat.has_channel(chan_name) else 0
+      elif fmat.layout == 'astc':
+         bits = 16 if 'RGBA' in fmat.name else 8
+         return bits if fmat.has_channel(chan_name) else 0
       else:
          assert False
    else:
index 34a4434c3bafd14694921cf3edfbe7584b48aabc..587221ca5a069da96057b9d82b860e88944c48d6 100644 (file)
@@ -197,6 +197,7 @@ _mesa_get_format_max_bits(mesa_format format)
  *    MESA_FORMAT_LAYOUT_ETC1
  *    MESA_FORMAT_LAYOUT_ETC2
  *    MESA_FORMAT_LAYOUT_BPTC
+ *    MESA_FORMAT_LAYOUT_ASTC
  *    MESA_FORMAT_LAYOUT_OTHER
  */
 extern enum mesa_format_layout
@@ -663,6 +664,48 @@ _mesa_get_srgb_format_linear(mesa_format format)
    case MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM:
       format = MESA_FORMAT_BPTC_RGBA_UNORM;
       break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4:
+      format = MESA_FORMAT_RGBA_ASTC_4x4;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4:
+      format = MESA_FORMAT_RGBA_ASTC_5x4;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5:
+      format = MESA_FORMAT_RGBA_ASTC_5x5;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5:
+      format = MESA_FORMAT_RGBA_ASTC_6x5;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6:
+      format = MESA_FORMAT_RGBA_ASTC_6x6;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x5:
+      format = MESA_FORMAT_RGBA_ASTC_8x5;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x6:
+      format = MESA_FORMAT_RGBA_ASTC_8x6;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x8:
+      format = MESA_FORMAT_RGBA_ASTC_8x8;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x5:
+      format = MESA_FORMAT_RGBA_ASTC_10x5;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x6:
+      format = MESA_FORMAT_RGBA_ASTC_10x6;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x8:
+      format = MESA_FORMAT_RGBA_ASTC_10x8;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x10:
+      format = MESA_FORMAT_RGBA_ASTC_10x10;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x10:
+      format = MESA_FORMAT_RGBA_ASTC_12x10;
+      break;
+   case MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12:
+      format = MESA_FORMAT_RGBA_ASTC_12x12;
+      break;
    case MESA_FORMAT_B8G8R8X8_SRGB:
       format = MESA_FORMAT_B8G8R8X8_UNORM;
       break;
index e159e7dd6aa50af5054f07e5d674b19e7a9c9b46..80729d987873ccdf72c4caa1fe3001a2e569964b 100644 (file)
@@ -301,3 +301,34 @@ MESA_FORMAT_BPTC_RGBA_UNORM               , bptc  , 4, 4, x128,     ,     ,
 MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM         , bptc  , 4, 4, x128,     ,     ,     , xyzw, srgb
 MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT         , bptc  , 4, 4, x128,     ,     ,     , xyz1, rgb
 MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT       , bptc  , 4, 4, x128,     ,     ,     , xyz1, rgb
+
+# ASTC compressed formats
+MESA_FORMAT_RGBA_ASTC_4x4                 , astc  , 4, 4, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_5x4                 , astc  , 5, 4, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_5x5                 , astc  , 5, 5, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_6x5                 , astc  , 6, 5, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_6x6                 , astc  , 6, 6, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_8x5                 , astc  , 8, 5, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_8x6                 , astc  , 8, 6, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_8x8                 , astc  , 8, 8, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_10x5                , astc  ,10, 5, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_10x6                , astc  ,10, 6, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_10x8                , astc  ,10, 8, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_10x10               , astc  ,10,10, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_12x10               , astc  ,12,10, x128,     ,     ,     , xyzw, rgb
+MESA_FORMAT_RGBA_ASTC_12x12               , astc  ,12,12, x128,     ,     ,     , xyzw, rgb
+
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4         , astc  , 4, 4, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4         , astc  , 5, 4, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5         , astc  , 5, 5, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5         , astc  , 6, 5, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6         , astc  , 6, 6, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x5         , astc  , 8, 5, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x6         , astc  , 8, 6, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x8         , astc  , 8, 8, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x5        , astc  ,10, 5, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x6        , astc  ,10, 6, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x8        , astc  ,10, 8, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x10       , astc  ,10,10, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x10       , astc  ,12,10, x128,     ,     ,     , xyzw, srgb
+MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12       , astc  ,12,12, x128,     ,     ,     , xyzw, srgb
index 4936fa0d482b3c1339c43a8377af5797904d9559..ccb09b263ffafe6c6712f5b9398b07439b8d7d3c 100644 (file)
@@ -70,6 +70,7 @@ enum mesa_format_layout {
    MESA_FORMAT_LAYOUT_ETC1,
    MESA_FORMAT_LAYOUT_ETC2,
    MESA_FORMAT_LAYOUT_BPTC,
+   MESA_FORMAT_LAYOUT_ASTC,
    MESA_FORMAT_LAYOUT_OTHER,
 };
 
@@ -586,6 +587,36 @@ typedef enum
    MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT,
    MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT,
 
+   /* ASTC compressed formats */
+   MESA_FORMAT_RGBA_ASTC_4x4,
+   MESA_FORMAT_RGBA_ASTC_5x4,
+   MESA_FORMAT_RGBA_ASTC_5x5,
+   MESA_FORMAT_RGBA_ASTC_6x5,
+   MESA_FORMAT_RGBA_ASTC_6x6,
+   MESA_FORMAT_RGBA_ASTC_8x5,
+   MESA_FORMAT_RGBA_ASTC_8x6,
+   MESA_FORMAT_RGBA_ASTC_8x8,
+   MESA_FORMAT_RGBA_ASTC_10x5,
+   MESA_FORMAT_RGBA_ASTC_10x6,
+   MESA_FORMAT_RGBA_ASTC_10x8,
+   MESA_FORMAT_RGBA_ASTC_10x10,
+   MESA_FORMAT_RGBA_ASTC_12x10,
+   MESA_FORMAT_RGBA_ASTC_12x12,
+
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_4x4,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x4,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_5x5,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x5,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_6x6,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x5,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x6,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_8x8,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x5,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x6,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x8,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_10x10,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x10,
+   MESA_FORMAT_SRGB8_ALPHA8_ASTC_12x12,
    MESA_FORMAT_COUNT
 } mesa_format;
 
index 1fe21c0b469a63d32414a667224cc3b987ed4918..754d982bcd519dd46785fbd0dc5df1cb4a850007 100644 (file)
@@ -551,7 +551,37 @@ texfetch_funcs[] =
       fetch_compressed,
       fetch_compressed,
       fetch_compressed
-   }
+   },
+
+   /* ASTC compressed formats */
+   FETCH_NULL(RGBA_ASTC_4x4),
+   FETCH_NULL(RGBA_ASTC_5x4),
+   FETCH_NULL(RGBA_ASTC_5x5),
+   FETCH_NULL(RGBA_ASTC_6x5),
+   FETCH_NULL(RGBA_ASTC_6x6),
+   FETCH_NULL(RGBA_ASTC_8x5),
+   FETCH_NULL(RGBA_ASTC_8x6),
+   FETCH_NULL(RGBA_ASTC_8x8),
+   FETCH_NULL(RGBA_ASTC_10x5),
+   FETCH_NULL(RGBA_ASTC_10x6),
+   FETCH_NULL(RGBA_ASTC_10x8),
+   FETCH_NULL(RGBA_ASTC_10x10),
+   FETCH_NULL(RGBA_ASTC_12x10),
+   FETCH_NULL(RGBA_ASTC_12x12),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_4x4),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_5x4),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_5x5),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_6x5),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_6x6),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_8x5),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_8x6),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_8x8),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_10x5),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_10x6),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_10x8),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_10x10),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_12x10),
+   FETCH_NULL(SRGB8_ALPHA8_ASTC_12x12)
 };