From 9705e3b72c51f21caaf13d8bde1abf447e94f082 Mon Sep 17 00:00:00 2001 From: Kevin Furrow Date: Fri, 16 Sep 2016 08:48:54 -0400 Subject: [PATCH] amd/addrlib: Add support for ETC2 and ASTC formats. --- src/amd/addrlib/addrtypes.h | 14 +++++ src/amd/addrlib/core/addrelemlib.cpp | 105 ++++++++++++++++++++++++++++++++++- src/amd/addrlib/core/addrelemlib.h | 1 + 3 files changed, 119 insertions(+), 1 deletion(-) diff --git a/src/amd/addrlib/addrtypes.h b/src/amd/addrlib/addrtypes.h index 4d09c43..4d94a83 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 770cee3..477a078 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 c95c9d6..f8da4c2 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 -- 2.7.4