1 2U-interleaved tiling 3==================== 4 5Panfrost supports u-interleaved tiling. U-interleaved tiling is 6indicated by the ``DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED`` modifier. 7 8The tiling reorders whole pixels (blocks). It does not compress or modify the 9pixels themselves, so it can be used for any image format. Internally, images 10are divided into tiles. Tiles occur in source order, but pixels (blocks) within 11each tile are reordered according to a space-filling curve. 12 13For regular formats, 16x16 tiles are used. This harmonizes with the default tile 14size for binning and CRCs (transaction elimination). It also means a single line 15(16 pixels) at 4 bytes per pixel equals a single 64-byte cache line. 16 17For formats that are already block compressed (S3TC, RGTC, etc), 4x4 tiles are 18used, where entire blocks are reorder. Most of these formats compress 4x4 19blocks, so this gives an effective 16x16 tiling. This justifies the tile size 20intuitively, though it's not a rule: ASTC may uses larger blocks. 21 22Within a tile, the X and Y bits are interleaved (like Morton order), but with a 23twist: adjacent bit pairs are XORed. The reason to add XORs is not obvious. 24Visually, addresses take the form:: 25 26 | y3 | (x3 ^ y3) | y2 | (y2 ^ x2) | y1 | (y1 ^ x1) | y0 | (y0 ^ x0) | 27 28Reference routines to encode/decode u-interleaved images are available in 29``src/panfrost/shared/test/test-tiling.cpp``, which documents the space-filling 30curve. This reference implementation is used to unit test the optimized 31implementation used in production. The optimized implementation is available in 32``src/panfrost/shared/pan_tiling.c``. 33 34Although these routines are part of Panfrost, they are also used by Lima, as Arm 35introduced the format with Utgard. It is the only tiling supported on Utgard. On 36Mali-T760 and newer, Arm Framebuffer Compression (AFBC) is more efficient and 37should be used instead where possible. However, not all formats are 38compressible, so u-interleaved tiling remains an important fallback on Panfrost. 39