3,378 bytes added
, 22:01, 24 February 2013
This page describes the [[GPU_Commands|GPU commands]] used for OpenGL arrays.
==== Command Sets ====
===== glDrawElements() =====
{| class="wikitable" border="1"
! 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 =====
{| class="wikitable" border="1"
! 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 ===
{| class="wikitable" border="1"
! Value
! Description
|-
| 0
| ?
|-
| 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 ===
{| class="wikitable" border="1"
! 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
| 1 = indices data-type GL_UNSIGNED_SHORT, 0 = GL_UNSIGNED_BYTE.
|}
=== Parameter structure for CmdID 0x826F0200 ===
{| class="wikitable" border="1"
! Index Word
! Description
|-
| 0x0
| Base physical address >> 3, normally located in VRAM.
|-
| 0x1
| Physical address, relative to the base address. When writing each entry: <nowiki>value |= entval << (index * 4)</nowiki>.
|-
| 0x2
| Value is: <nowiki>(0xF0000000 + (val<<28)) | (((0xFF<<totalentries) & 0xFF)<<16)</nowiki>.
|-
| 0x3-0x26
| 12 entries, each entry is 3 words.
|}
==== Entry structure ====
{| class="wikitable" border="1"
! Index Word
! Description
|-
| 0
| Physical address, relative to the base address.
|-
| 1
| Entry index
|-
| 2
| Value is: <nowiki>0x10000000 | (arraytype<<16).</nowiki>
|}
When the entry is unused, the entry data is all-zero.
===== Entry array types =====
{| class="wikitable" border="1"
! Type
! Description
|-
| 0x2
| ?
|-
| 0x3
| Normals array
|-
| 0x4
| Texture coordinates array
|-
| 0xC
| Vertex array
|}
=== Parameter structure for CmdID 0x801F02BB ===
{| class="wikitable" border="1"
! Index Word
! Description
|-
| 0-1
| u64, every 4-bits is a value from some array.
|}
=== Parameter structure for CmdID 0x803F0232 ===
{| class="wikitable" border="1"
! Index Word
! Description
|-
| 0
| Entry index + total CmdID 0x826F0200 parameter-buffer entries.
|-
| 1
| ?
|-
| 2
| ?
|-
| 3
| ?
|}
Each parameter buffer for CmdID 0x803F0232 is an entry loaded from an array.