diff options
author | Kevin Furrow <[email protected]> | 2016-09-16 08:48:54 -0400 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-03-30 14:44:33 +0200 |
commit | 9705e3b72c51f21caaf13d8bde1abf447e94f082 (patch) | |
tree | ed7abe93de91b12ea169b30bb587954c768fb8aa /src | |
parent | a489cdb20f0ae23527997c494a305da77ca2f040 (diff) |
amd/addrlib: Add support for ETC2 and ASTC formats.
Diffstat (limited to 'src')
-rw-r--r-- | src/amd/addrlib/addrtypes.h | 14 | ||||
-rw-r--r-- | src/amd/addrlib/core/addrelemlib.cpp | 105 | ||||
-rw-r--r-- | src/amd/addrlib/core/addrelemlib.h | 1 |
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 |