GPU Textures
This page describes the GPU commands used for textures.
General information
Individual texels in a texture are laid out in memory as a Z-order curve.
Texture unit setup: Register 0x80
Register 0x80 is used to enable individual texture units.
Bit | Description |
---|---|
0 | Enable texture unit 0. |
1 | Enable texture unit 1. |
2 | Enable texture unit 2. |
Configuration of texture unit 0
Register ID | Description |
---|---|
0x0081 | Border color (unverified) |
0x0082 | Bits 16-31 are the texture width. Bits 0-15 are the texture height. The maximum texture size in either direction is 1024. |
0x0083 | Texture parameters (filtering, wrapping), see below. |
0x0084 | LOD setup? |
0x0085 | Physical address of texture data (divided by 8). |
0x0086 | Physical address of texture data for cube mapping? |
0x0087 | Physical address of texture data for cube mapping? |
0x0088 | Physical address of texture data for cube mapping? |
0x0089 | Physical address of texture data for cube mapping? |
0x008A | Physical address of texture data for cube mapping? |
0x008B | Shadow related? |
0x008E | Texture format (see below) |
Configuration of texture units 1 and 2
Texture units 1 and 2 use a configuration block similar to the one of texture unit 0. They are based at registers 0x0091 and 0x0099.
Index word | Description |
---|---|
0-4 | Same as for texture unit 0 |
5 | Texture format (see below) |
Configuration of texture unit 3
The configuration block for texture unit 3 seems to be vastly different from the other texture units. Instead, registers 0x00A8 through 0x00B7 are used to configure procedural texturing features.
Texture parameters
Bit | Description | GL parameter name |
---|---|---|
0 | Normally this is value 0. | |
1 | 0 = point sampling (GL_NEAREST), 1 = linear interpolation (GL_LINEAR) | GL_TEXTURE_MAG_FILTER |
2 | 0 = point sampling (GL_NEAREST*), 1 = linear interpolation (GL_LINEAR*) | GL_TEXTURE_MIN_FILTER |
3 | Unused? | ? |
5-4 | 2 = texture color type 0xC, 0 otherwise.(Enable/disable texture data compression?) 0 = unknown, 1 = unknown, 3 = same effect as value 2. | |
7-6 | Unused | |
11-8 | 0 = GL_CLAMP_TO_EDGE, 1 = GL_CLAMP_TO_BORDER, 2 = GL_REPEAT, 3 = GL_MIRRORED_REPEAT | GL_TEXTURE_WRAP_S |
15-12 | Same values as GL_TEXTURE_WRAP_S. | GL_TEXTURE_WRAP_T |
24 | 0 = no LOD interpolation (GL_*_MIPMAP_NEAREST), 1 = linear LOD interpolation (GL_*_MIPMAP_LINEAR) | GL_TEXTURE_MIN_FILTER |
27-25 | Unused? | |
30-28 | When some flag=1: value1=GL_TEXTURE_2D, value0 when the input parameter is not GL_TEXTURE_2D. When some flag=0: 0=GL_TEXTURE_2D, 1-4=unknown. | ? |
31 | Unused? | ? |
Texture color types
Value | Description | GL Format | GL Data Type |
---|---|---|---|
0x0 | RGBA8888 | GL_RGBA | GL_UNSIGNED_BYTE |
0x1 | RGB888 | GL_RGB | GL_UNSIGNED_BYTE |
0x2 | RGBA5551 | GL_RGBA | GL_UNSIGNED_SHORT_5_5_5_1 |
0x3 | RGB565 | GL_RGB | GL_UNSIGNED_SHORT_5_6_5 |
0x4 | RGBA4444 | GL_RGBA | GL_UNSIGNED_SHORT_4_4_4_4 |
0x5 | IA8 | GL_LUMINANCE_ALPHA | GL_UNSIGNED_BYTE |
0x6 | HILO8 | ||
0x7 | I8 | GL_LUMINANCE | GL_UNSIGNED_BYTE |
0x8 | A8 | GL_ALPHA | GL_UNSIGNED_BYTE |
0x9 | IA44 | GL_LUMINANCE_ALPHA | GL_UNSIGNED_BYTE_4_4_EXT |
0xA | I4 | ||
0xB | A4 | GL_ALPHA | GL_UNSIGNED_NIBBLE_EXT |
0xC | ETC1 | GL_ETC1_RGB8_OES | |
0xD | ETC1A4 |