summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin Furrow <[email protected]>2016-09-16 08:48:54 -0400
committerMarek Olšák <[email protected]>2017-03-30 14:44:33 +0200
commit9705e3b72c51f21caaf13d8bde1abf447e94f082 (patch)
treeed7abe93de91b12ea169b30bb587954c768fb8aa /src
parenta489cdb20f0ae23527997c494a305da77ca2f040 (diff)
amd/addrlib: Add support for ETC2 and ASTC formats.
Diffstat (limited to 'src')
-rw-r--r--src/amd/addrlib/addrtypes.h14
-rw-r--r--src/amd/addrlib/core/addrelemlib.cpp105
-rw-r--r--src/amd/addrlib/core/addrelemlib.h1
3 files changed, 119 insertions, 1 deletions
diff --git a/src/amd/addrlib/addrtypes.h b/src/amd/addrlib/addrtypes.h
index 4d09c4374bd..4d94a838a43 100644
--- a/src/amd/addrlib/addrtypes.h
+++ b/src/amd/addrlib/addrtypes.h
@@ -273,6 +273,20 @@ typedef enum _AddrFormat {
ADDR_FMT_APC7 = 0x0000003d,
ADDR_FMT_CTX1 = 0x0000003e,
ADDR_FMT_RESERVED_63 = 0x0000003f,
+ ADDR_FMT_ASTC_4x4 = 0x00000040,
+ ADDR_FMT_ASTC_5x4 = 0x00000041,
+ ADDR_FMT_ASTC_5x5 = 0x00000042,
+ ADDR_FMT_ASTC_6x5 = 0x00000043,
+ ADDR_FMT_ASTC_6x6 = 0x00000044,
+ ADDR_FMT_ASTC_8x5 = 0x00000045,
+ ADDR_FMT_ASTC_8x6 = 0x00000046,
+ ADDR_FMT_ASTC_8x8 = 0x00000047,
+ ADDR_FMT_ASTC_10x5 = 0x00000048,
+ ADDR_FMT_ASTC_10x6 = 0x00000049,
+ ADDR_FMT_ASTC_10x8 = 0x0000004a,
+ ADDR_FMT_ASTC_10x10 = 0x0000004b,
+ ADDR_FMT_ASTC_12x10 = 0x0000004c,
+ ADDR_FMT_ASTC_12x12 = 0x0000004d,
} AddrFormat;
/**
diff --git a/src/amd/addrlib/core/addrelemlib.cpp b/src/amd/addrlib/core/addrelemlib.cpp
index 770cee3f947..477a078705a 100644
--- a/src/amd/addrlib/core/addrelemlib.cpp
+++ b/src/amd/addrlib/core/addrelemlib.cpp
@@ -1172,6 +1172,8 @@ VOID ElemLib::AdjustSurfaceInfo(
case ADDR_PACKED_BC3: // Fall through
case ADDR_PACKED_BC5: // Fall through
bBCnFormat = TRUE;
+ // fall through
+ case ADDR_PACKED_ASTC:
packedBits = 128;
break;
case ADDR_ROUND_BY_HALF: // Fall through
@@ -1291,7 +1293,9 @@ VOID ElemLib::RestoreSurfaceInfo(
break;
case ADDR_PACKED_BC2: // Fall through
case ADDR_PACKED_BC3: // Fall through
- case ADDR_PACKED_BC5:
+ case ADDR_PACKED_BC5:
+ // fall through
+ case ADDR_PACKED_ASTC:
originalBits = 128;
break;
case ADDR_ROUND_BY_HALF: // Fall through
@@ -1487,6 +1491,105 @@ UINT_32 ElemLib::GetBitsPerPixel(
expandY = 4;
bpp = 128;
break;
+
+ case ADDR_FMT_ASTC_4x4:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 4;
+ expandY = 4;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_5x4:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 5;
+ expandY = 4;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_5x5:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 5;
+ expandY = 5;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_6x5:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 6;
+ expandY = 5;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_6x6:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 6;
+ expandY = 6;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_8x5:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 8;
+ expandY = 5;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_8x6:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 8;
+ expandY = 6;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_8x8:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 8;
+ expandY = 8;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_10x5:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 10;
+ expandY = 5;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_10x6:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 10;
+ expandY = 6;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_10x8:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 10;
+ expandY = 8;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_10x10:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 10;
+ expandY = 10;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_12x10:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 12;
+ expandY = 10;
+ bpp = 128;
+ break;
+
+ case ADDR_FMT_ASTC_12x12:
+ elemMode = ADDR_PACKED_ASTC;
+ expandX = 12;
+ expandY = 12;
+ bpp = 128;
+ break;
+
default:
bpp = 0;
ADDR_ASSERT_ALWAYS();
diff --git a/src/amd/addrlib/core/addrelemlib.h b/src/amd/addrlib/core/addrelemlib.h
index c95c9d63839..f8da4c24efc 100644
--- a/src/amd/addrlib/core/addrelemlib.h
+++ b/src/amd/addrlib/core/addrelemlib.h
@@ -131,6 +131,7 @@ enum ElemMode
ADDR_PACKED_BC3, // Each data element is uncompressed to a 4x4 pixel/texel array
ADDR_PACKED_BC4, // Each data element is uncompressed to a 4x4 pixel/texel array
ADDR_PACKED_BC5, // Each data element is uncompressed to a 4x4 pixel/texel array
+ ADDR_PACKED_ASTC,
// These formats provide various kinds of compression
ADDR_ZPLANE_R5XX, // Compressed Zplane using r5xx architecture format