|
|
(14 intermediate revisions by 5 users not shown) |
Line 1: |
Line 1: |
− | This page describes the [[GPU_Commands|GPU commands]] used for OpenGL arrays.
| + | Merged into [[GPU/Programming_Guide]]. |
− | | |
− | ==== 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
| |
− | | 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 ===
| |
− | {| class="wikitable" border="1"
| |
− | ! Bit
| |
− | ! Description
| |
− | |-
| |
− | | 30-0
| |
− | | Indices array address, relative to base set with cmd ID 0xF0200.
| |
− | |-
| |
− | | 31
| |
− | | 0 = indices data-type GL_UNSIGNED_BYTE, 1 = GL_UNSIGNED_SHORT.
| |
− | |}
| |
− | | |
− | === Parameter structure for CmdID 0x826F0200 ===
| |
− | {| class="wikitable" border="1"
| |
− | ! 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: <nowiki>(0xF0000000 + (val<<28)) | ((attrib_mask & 0xFFF)<<16)</nowiki>, where val is the total 4-bit value entries for the CmdID 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 ====
| |
− | {| class="wikitable" border="1"
| |
− | ! Index Word
| |
− | ! Description
| |
− | |-
| |
− | | 0
| |
− | | Physical address, relative to the base address.
| |
− | |-
| |
− | | 1
| |
− | | Entry attribute permutation (lower 8 bytes)
| |
− | |-
| |
− | | 2
| |
− | | Value is: <nowiki>((numattrib)<<28 | (stride<<16) | ((attrib_permuation>>32)&0xFFFF).</nowiki> (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.
| |
− | When the entry is unused, the entry data is all-zero.
| |
− | | |
− | ===== Array data-type/size values =====
| |
− | {| class="wikitable" border="1"
| |
− | ! 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 ===
| |
− | {| 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
| |
− | | 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.
| |