GPU/GL Arrays: Difference between revisions
< GPU
No edit summary  | 
				|||
| Line 125: | Line 125: | ||
|-  | |-  | ||
| 0  | | 0  | ||
|   | | GL_TRIANGLES  | ||
|-  | |-  | ||
| 1  | | 1  | ||
Revision as of 23:13, 12 March 2014
This page describes the GPU commands used for OpenGL arrays.
Command Sets
glDrawElements()
| Command Index | CommandID | Parameter | Description | 
|---|---|---|---|
| 0 | 0x00020229 | u32, val<<8. | Unknown, val is 0 or 1. | 
| 1-2 | 0x00020253 | Same as CmdID 0x00020229. | Unknown | 
| 3 | 0x0002025E | u32, val<<8. | This sets the GL rendering mode. | 
| 4 | 0x0004025E | Value 0 | ? | 
| 5 | 0x000F025F | Value 1 | ? | 
| 6 | 0x00010253 | Value 0 | ? | 
| 7 | 0x000F0227 | u32 | This specifies the indices data-type, and the indices array address. | 
| 8 | 0x000F0228 | u32 | This specifies the number of elements in the array to use for rendering. | 
| 9 | 0x00010245 | Value 0 | ? | 
| 10 | 0x000F022F | Value 1 | ? | 
| 11 | 0x00010245 | Value 1 | ? | 
| 12 | 0x000F0231 | Value 1 | ? | 
| 13 | 0x000F0111 | Value 1 | ? | 
| 14 | 0x00020229 | Value 0 | ? | 
| 15 | 0x00020253 | Value 0 | ? | 
| 16 | 0x0002025E | Value 0 | ? | 
| 17 | 0x000C02BA | Value 0x7FFF0000 | ? | 
CmdID 0x826F0200
| Command Index | CommandID | Parameter | Description | 
|---|---|---|---|
| 0 | 0x826F0200 | This sets the addresses for the GL arrays. | |
| 1 | 0x801F02BB | ? | |
| 2 | 0x803F0232 | Unknown, this command is used multiple times for specifying each parameter-buffer entry. | 
GL mode values for CmdID 0x0002025E
| Value | Description | 
|---|---|
| 0 | GL_TRIANGLES | 
| 1 | GL_TRIANGLE_STRIP | 
| 2 | GL_TRIANGLE_FAN | 
| 3 | GL_TRIANGLES | 
| 4 | Unknown, this seems to have the same effect as value 0. | 
Parameter value format for CmdID 0x000F0227
| Bit | Description | 
|---|---|
| 30-0 | Indices array address, relative to VRAM physical address 0x18000000. Thus, when this relative address is 0x08XXXXXX, the array is located in FCRAM. | 
| 31 | 0 = indices data-type GL_UNSIGNED_BYTE, 1 = GL_UNSIGNED_SHORT. | 
Parameter structure for CmdID 0x826F0200
| Index Word | Description | 
|---|---|
| 0x0 | Base physical address >> 3, normally located in VRAM. | 
| 0x1 | Every 4 bits is used for specifying the array data-type and size for each entry. | 
| 0x2 | Value is: (0xF0000000 + (val<<28)) | (((0xFF<<totalentries) & 0xFF)<<16), where val is the total 4-bit value entries for the CmdID 0x801F02BB parameter buffer.(Normally val is 8) | 
| 0x3-0x26 | 12 entries, each entry is 3 words. | 
These parameters and the entries' parameters are set by gl*Pointer().
Entry structure
| Index Word | Description | 
|---|---|
| 0 | Physical address, relative to the base address. | 
| 1 | Entry index | 
| 2 | Value is: 0x10000000 | (arraytype<<16). | 
When the entry is unused, the entry data is all-zero.
Entry array types
| Type | Description | 
|---|---|
| 0x2 | ? | 
| 0x3 | Normals array | 
| 0x4 | Texture coordinates array | 
| 0xC | Vertex array | 
| 0x10 | Color array | 
Array data-type/size values
| Value | GL type | 
|---|---|
| 0x0 + ((size-1)*4) | GL_BYTE | 
| 0x1 + ((size-1)*4) | GL_UNSIGNED_BYTE | 
| 0x2 + ((size-1)*4) | GL_UNSIGNED_SHORT/GL_SHORT | 
| 0x3 + ((size-1)*4) | GL_FLOAT | 
Size is 1-4. Using GL_FLOAT with a texture coordinates array causes the GPU to hang?
Parameter structure for CmdID 0x801F02BB
| Index Word | Description | 
|---|---|
| 0-1 | u64, every 4-bits is a value from some array. | 
Parameter structure for CmdID 0x803F0232
| Index Word | Description | 
|---|---|
| 0 | Entry index + total CmdID 0x826F0200 parameter-buffer entries. | 
| 1 | Unknown, usually value 0x3F000000 / 0.5f.(u32 read/writes are used for this field, not float read/writes however) | 
| 2 | Unknown, usually value 0. | 
| 3 | Unknown, usually value 0. | 
Each parameter buffer for CmdID 0x803F0232 is an entry loaded from an array.