Difference between revisions of "GPU/GL Arrays"
< GPU
Jump to navigation
Jump to search
(Identify commands by their ID, not by some random header they are used with.) |
|||
Line 11: | Line 11: | ||
|- | |- | ||
| 0 | | 0 | ||
− | | | + | | 0x0229 |
| u32, val<<8. | | u32, val<<8. | ||
| Unknown, val is 0 or 1. | | Unknown, val is 0 or 1. | ||
|- | |- | ||
| 1-2 | | 1-2 | ||
− | | | + | | 0x0253 |
− | | Same as | + | | Same as command 0x0229. |
| Unknown | | Unknown | ||
|- | |- | ||
| 3 | | 3 | ||
− | | | + | | 0x025E |
| u32, val<<8. | | u32, val<<8. | ||
| This sets the GL rendering mode. | | This sets the GL rendering mode. | ||
|- | |- | ||
| 4 | | 4 | ||
− | | | + | | 0x025E |
| Value 0 | | Value 0 | ||
| ? | | ? | ||
|- | |- | ||
| 5 | | 5 | ||
− | | | + | | 0x025F |
| Value 1 | | Value 1 | ||
| ? | | ? | ||
|- | |- | ||
| 6 | | 6 | ||
− | | | + | | 0x0253 |
| Value 0 | | Value 0 | ||
| ? | | ? | ||
|- | |- | ||
| 7 | | 7 | ||
− | | | + | | 0x0227 |
| u32 | | u32 | ||
| This specifies the indices data-type, and the indices array address. | | This specifies the indices data-type, and the indices array address. | ||
|- | |- | ||
| 8 | | 8 | ||
− | | | + | | 0x0228 |
| u32 | | u32 | ||
| This specifies the number of elements in the array to use for rendering. | | This specifies the number of elements in the array to use for rendering. | ||
|- | |- | ||
| 9 | | 9 | ||
− | | | + | | 0x0245 |
| Value 0 | | Value 0 | ||
| ? | | ? | ||
|- | |- | ||
| 10 | | 10 | ||
− | | | + | | 0x022F |
| Value 1 | | Value 1 | ||
| ? | | ? | ||
|- | |- | ||
| 11 | | 11 | ||
− | | | + | | 0x0245 |
| Value 1 | | Value 1 | ||
| ? | | ? | ||
|- | |- | ||
| 12 | | 12 | ||
− | | | + | | 0x0231 |
| Value 1 | | Value 1 | ||
| ? | | ? | ||
|- | |- | ||
| 13 | | 13 | ||
− | | | + | | 0x0111 |
| Value 1 | | Value 1 | ||
| ? | | ? | ||
|- | |- | ||
| 14 | | 14 | ||
− | | | + | | 0x0229 |
| Value 0 | | Value 0 | ||
| ? | | ? | ||
|- | |- | ||
| 15 | | 15 | ||
− | | | + | | 0x0253 |
| Value 0 | | Value 0 | ||
| ? | | ? | ||
|- | |- | ||
| 16 | | 16 | ||
− | | | + | | 0x025E |
| Value 0 | | Value 0 | ||
| ? | | ? | ||
|- | |- | ||
| 17 | | 17 | ||
− | | | + | | 0x02BA |
| Value 0x7FFF0000 | | Value 0x7FFF0000 | ||
| ? | | ? | ||
|} | |} | ||
− | ===== | + | ===== Command 0x0200 ===== |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Command Index | ! Command Index | ||
Line 104: | Line 104: | ||
|- | |- | ||
| 0 | | 0 | ||
− | | | + | | 0x0200 |
| | | | ||
| This sets the addresses for the GL arrays. | | This sets the addresses for the GL arrays. | ||
|- | |- | ||
| 1 | | 1 | ||
− | | | + | | 0x02BB |
| | | | ||
| ? | | ? | ||
|- | |- | ||
| 2 | | 2 | ||
− | | | + | | 0x0232 |
| | | | ||
| Unknown, this command is used multiple times for specifying each parameter-buffer entry. | | Unknown, this command is used multiple times for specifying each parameter-buffer entry. | ||
|} | |} | ||
− | === GL mode values for | + | === GL mode values for command 0x025E === |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Value | ! Value | ||
Line 140: | Line 140: | ||
|} | |} | ||
− | === Parameter value format for | + | === Parameter value format for command 0x0227 === |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bit | ! Bit | ||
Line 146: | Line 146: | ||
|- | |- | ||
| 30-0 | | 30-0 | ||
− | | Indices array address, relative to base set with | + | | Indices array address, relative to base set with command 0x0200. |
|- | |- | ||
| 31 | | 31 | ||
Line 152: | Line 152: | ||
|} | |} | ||
− | === Parameter structure for | + | === Parameter structure for command 0x0200 === |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Index Word | ! Index Word | ||
Line 164: | Line 164: | ||
|- | |- | ||
| 0x2 | | 0x2 | ||
− | | Value is: <nowiki>(0xF0000000 + (val<<28)) | ((attrib_mask & 0xFFF)<<16)</nowiki>, where val is the total 4-bit value entries for the | + | | Value is: <nowiki>(0xF0000000 + (val<<28)) | ((attrib_mask & 0xFFF)<<16)</nowiki>, where val is the total 4-bit value entries for the command 0x801F02BB parameter buffer.(Normally val is 8); attrib_mask is usually (0xFFF<<totalentries) |
|- | |- | ||
| 0x3-0x26 | | 0x3-0x26 | ||
Line 210: | Line 210: | ||
Size is 1-4. Using GL_FLOAT with a texture coordinates array causes the GPU to hang? | Size is 1-4. Using GL_FLOAT with a texture coordinates array causes the GPU to hang? | ||
− | === Parameter structure for | + | === Parameter structure for command 0x02BB === |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Index Word | ! Index Word | ||
Line 219: | Line 219: | ||
|} | |} | ||
− | === Parameter structure for | + | === Parameter structure for command 0x0232 === |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Index Word | ! Index Word | ||
Line 225: | Line 225: | ||
|- | |- | ||
| 0 | | 0 | ||
− | | Entry index + total | + | | Entry index + total command 0x0200 parameter-buffer entries. |
|- | |- | ||
| 1 | | 1 | ||
Line 237: | Line 237: | ||
|} | |} | ||
− | Each parameter buffer for | + | Each parameter buffer for command 0x0232 is an entry loaded from an array. |
4 float24 values ? | 4 float24 values ? |
Revision as of 18:28, 10 October 2014
This page describes the GPU commands used for OpenGL arrays.
Command Sets
glDrawElements()
Command Index | CommandID | Parameter | Description |
---|---|---|---|
0 | 0x0229 | u32, val<<8. | Unknown, val is 0 or 1. |
1-2 | 0x0253 | Same as command 0x0229. | Unknown |
3 | 0x025E | u32, val<<8. | This sets the GL rendering mode. |
4 | 0x025E | Value 0 | ? |
5 | 0x025F | Value 1 | ? |
6 | 0x0253 | Value 0 | ? |
7 | 0x0227 | u32 | This specifies the indices data-type, and the indices array address. |
8 | 0x0228 | u32 | This specifies the number of elements in the array to use for rendering. |
9 | 0x0245 | Value 0 | ? |
10 | 0x022F | Value 1 | ? |
11 | 0x0245 | Value 1 | ? |
12 | 0x0231 | Value 1 | ? |
13 | 0x0111 | Value 1 | ? |
14 | 0x0229 | Value 0 | ? |
15 | 0x0253 | Value 0 | ? |
16 | 0x025E | Value 0 | ? |
17 | 0x02BA | Value 0x7FFF0000 | ? |
Command 0x0200
Command Index | CommandID | Parameter | Description |
---|---|---|---|
0 | 0x0200 | This sets the addresses for the GL arrays. | |
1 | 0x02BB | ? | |
2 | 0x0232 | Unknown, this command is used multiple times for specifying each parameter-buffer entry. |
GL mode values for command 0x025E
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 command 0x0227
Bit | Description |
---|---|
30-0 | Indices array address, relative to base set with command 0x0200. |
31 | 0 = indices data-type GL_UNSIGNED_BYTE, 1 = GL_UNSIGNED_SHORT. |
Parameter structure for command 0x0200
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)) | ((attrib_mask & 0xFFF)<<16), where val is the total 4-bit value entries for the command 0x801F02BB parameter buffer.(Normally val is 8); attrib_mask is usually (0xFFF<<totalentries) |
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 attribute permutation (lower 8 bytes) |
2 | Value is: ((numattrib)<<28 | (stride<<16) | ((attrib_permuation>>32)&0xFFFF). (stride in bytes) |
A given entry corresponds to a buffer, but a single buffer may contain attributes of multiple different interlaced attributes, hence the attribute permutation parameter which lists the various attributes that can be found in the buffer, and in which order. If stride doesn't exactly match the format, the GPU may hang. When the entry is unused, the entry data is all-zero.
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 command 0x02BB
Index Word | Description |
---|---|
0-1 | u64, every 4-bits is a value from some array. |
Parameter structure for command 0x0232
Index Word | Description |
---|---|
0 | Entry index + total command 0x0200 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 command 0x0232 is an entry loaded from an array. 4 float24 values ?