xref: /aosp_15_r20/external/mesa3d/docs/drivers/panfrost/tiling.rst (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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