PVR
PowerVR Texture Compression files: PVRTC and PVRTC2 are a family of lossy, fixed-rate texture compression formats.
PowerVR is a division of Imagination Technologies (formerly VideoLogic) that develops hardware and software for 2D and 3D rendering, and more.
Features
- PVRTC supports both opaque (RGB) and translucent (RGBA) textures (unlike other formats such as S3TC that require a dedicated, larger form to support full alpha channels).
- competitive compression ratios.
File format
The PVR (.pvr) format (Sony uses a custom header) consists of:
Header
Offset (h) | Size (h) | Example (h) | Value (conversion) | Notes |
PVR header | ||||
0x00 | 0x04 | 50 56 52 03 | "PVR " | Version: Contains the version of the PVR header format. |
0x04 | 0x04 | 00 00 00 00 | Flags:
| |
0x08 | 0x08 | 72 67 62 61 08 08 08 08 | "rgba" | Pixel Format: rgba + bit rate per channel |
0x10 | 0x04 | 00 00 00 00 | Colour Space:
| |
0x14 | 0x04 | 00 00 00 00 | 0 | Channel Type: |
0x18 | 0x08 | 00 01 00 00 | 256 | Height: |
0x1C | 0x04 | 00 01 00 00 | 256 | Width: |
0x20 | 0x04 | 01 00 00 00 | 1 | Depth: |
0x24 | 0x04 | 01 00 00 00 | 1 | Num. Surfaces: |
0x28 | 0x04 | 01 00 00 00 | 1 | Num. Faces: |
0x2C | 0x04 | 00 00 00 00 | 0 | Meta Data Size: |
Pixel Format
If the most significant 4 bytes contain a value, the full 8 bytes are used to determine the pixel format.
The least significant 4 bytes contain the channel order, each byte containing a single character, or a null character if there are fewer than four channels, e.g., {‘r’, ‘g’, ‘b’, ‘a’} or {‘r’, ‘g’, ‘b’, ‘\0’}.
The most significant 4 bytes state the bit rate for each channel in the same order, each byte containing a single 8bit unsigned integer value, or zero if there are fewer than four channels, e.g., {8, 8, 8, 8} or {5, 6, 5, 0}.
Where the most significant 4 bytes have been set to ‘0’ and the least significant 4 bytes will contain a 32bit unsigned integer value identifying the pixel format
Formats | Value | |||
Identifier | ||||
PVRTC 2bpp RGB | 0 | |||
PVRTC 2bpp RGBA | 1 | |||
PVRTC 4bpp RGB | 2 | |||
PVRTC 4bpp RGBA | 3 | |||
PVRTC-II 2bpp | 4 | |||
PVRTC-II 4bpp | 5 | |||
ETC1 | 6 | |||
DXT1 | 7 | |||
DXT2 | 8 | |||
DXT3 | 9 | |||
DXT4 | 10 | |||
DXT5 | 11 | |||
BC1 | 7 | |||
BC2 | 9 | |||
BC3 | 11 | |||
BC4 | 12 | |||
BC5 | 13 | |||
BC6 | 14 | |||
BC7 | 15 | |||
UYVY | 16 | |||
YUY2 | 17 | |||
BW1bpp | 18 | |||
R9G9B9E5 Shared Exponent | 19 | |||
RGBG8888 | 20 | |||
GRGB8888 | 21 | |||
ETC2 RGB | 22 | |||
ETC2 RGBA | 23 | |||
ETC2 RGB A1 | 24 | |||
EAC R11 | 25 | |||
EAC RG11 | 26 | |||
ASTC_4x4 | 27 | |||
ASTC_5x4 | 28 | |||
ASTC_5x5 | 29 | |||
ASTC_6x5 | 30 | |||
ASTC_6x6 | 31 | |||
ASTC_8x5 | 32 | |||
ASTC_8x6 | 33 | |||
ASTC_8x8 | 34 | |||
ASTC_10x5 | 35 | |||
ASTC_10x6 | 36 | |||
ASTC_10x8 | 37 | |||
ASTC_10x10 | 38 | |||
ASTC_12x10 | 39 | |||
ASTC_12x12 | 40 | |||
ASTC_3x3x3 | 41 | |||
ASTC_4x3x3 | 42 | |||
ASTC_4x4x3 | 43 | |||
ASTC_4x4x4 | 44 | |||
ASTC_5x4x4 | 45 | |||
ASTC_5x5x4 | 46 | |||
ASTC_5x5x5 | 47 | |||
ASTC_6x5x5 | 48 | |||
ASTC_6x6x5 | 49 | |||
ASTC_6x6x6 | 50 |
Channel Type
the data type of the colour channels within the texture data.
Data Type | Value |
Unsigned Byte Normalised | 0 |
Signed Byte Normalised | 1 |
Unsigned Byte | 2 |
Signed Byte | 3 |
Unsigned Short Normalised | 4 |
Signed Short Normalised | 5 |
Unsigned Short | 6 |
Signed Short | 7 |
Unsigned Integer Normalised | 8 |
Signed Integer Normalised | 9 |
Unsigned Integer | 10 |
Signed Integer | 11 |
Float | 12 |
Meta Data Format
...
Texture compression
- http://web.onetel.net.uk/~simonnihal/assorted3d/fenney03texcomp.pdf PVRTC algorithm: Texture Compression using Low-Frequency Signal Modulation
- http://blog.imgtec.com/powervr/understanding-powervr-series5xt-pvrtc-pvrtc2-and-texture-compression-part-6 overview