GTX\GSH (File Format)
Revision as of 12:59, 1 October 2016 by Aboood40091 (talk | contribs)
The GTX/GSH texture formats are used in various Wii U games, including MK8.
GSH stands for GX2 shader file. GTX stands for GX2 texture file.
Header
Every GTX/GSH file begins with an 0x20 byte Gfx2 header.
Offset | Size | Description |
---|---|---|
0x00 | 4 | "Gfx2" File identifier, ASCII string. |
0x04 | 4 | Size of header in bytes. Must be the real size (0x20), or header (and hence file) is unreadable. |
0x08 | 4 | Major version number. Must be 0x07, or header is unreadable. |
0x0C | 4 | Minor version number. Must be 0x01. |
0x10 | 4 | GPU version for which this file is designed for. |
0x14 | 4 | Align mode. |
0x18 | 4 | Reserved, Always 0x00. |
0x1C | 4 | Reserved, Always 0x00. |
0x20 | End of Gfx2 header. |
Blocks
After the header comes some blocks, blocks contain a 0x20 byte BLK{ header followed by data specified by the block type.
Block Header
Offset | Size | Description |
---|---|---|
0x00 | 4 | "BLK{" Header of the block, ASCII string. |
0x04 | 4 | Size of block header in bytes. |
0x08 | 4 | Major version number. Must be 0x01 or header is unreadable. |
0x0C | 4 | Minor version number. Must be 0x00. |
0x10 | 4 | Block type, it determines the type of the following data. |
0x14 | 4 | Size of the following data. In bytes, always 0x9C if the block type is 0x0B. |
0x18 | 4 | A unique identifier for this block, allowing it to be referenced by other blocks |
0x1C | 4 | An incrementing index for each instance of a given type. |
Block types
Block type 0x04 doesn't exist.
Type | Description |
---|---|
0x00 | Not actually a valid Block type. (different magic) |
0x01 | Follows this block header the End of the file. |
0x02 | Follows this block header padding. (Used to align following data) |
0x03 | Follows this block header Vertex shader info. |
0x05 | Follows this block header Vertex shader program. |
0x06 | Follows this block header Pixel shader info. |
0x07 | Follows this block header Pixel shader program. |
0x0B | Follows this block header the Image info. |
0x0C | Follows this block header the Image data. |
0x0D | Follows this block header the Mipmaps data. |
Image info
The image info directly follows the block header that has a block type 0x0B:
Offset | Size | Description |
---|---|---|
0x00 | 4 | Dimension. Indicates the "shape" of a given surface or texture (see line 849 here). |
0x04 | 4 | Texture Width. Width of the texture in pixels. |
0x08 | 4 | Texture Height. Height of the texture in pixels. |
0x0C | 4 | Depth. |
0x10 | 4 | Number of Mipmaps. |
0x14 | 4 | Texture Format. Go to line 589 on this page for explanation and format values. |
0x18 | 4 | AA Mode. Indicates the AA mode (number of samples) for the surface (see line 865 here). |
0x1C | 4 | Usage. Indicates how the given surface may be used (see line 823 here). |
0x20 | 4 | Data Length. Length of texture data in bytes. |
0x24 | 4 | Data Pointer?. |
0x28 | 4 | Mipmaps Data Length. Length of mipmaps data in bytes. |
0x2C | 4 | Mipmaps Pointer?. |
0x30 | 4 | Tile Mode. Indicates the desired tiling mode for the surface (see line 795 here). |
0x34 | 4 | Swizzle Value |
0x38 | 4 | Alignment |
0x3C | 4 | Pitch |
0x40 | 0x5C | Unknown. |
Formats
TODO.
Tools
The following tool can extract and generate GTX files:
- GTX Extractor, by AboodXD