Changes

Jump to navigation Jump to search
8,020 bytes added ,  09:16, 4 December 2015
== Geometry pipeline registers ==
 
=== GPUREG_ATTRIBBUFFERS_LOC ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 1-28
| unsigned, Vertex arrays base address
|}
 
=== GPUREG_ATTRIBBUFFERS_FORMAT_LOW ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-1
| unsigned, Vertex attribute 0 type
|-
| 2-3
| unsigned, Vertex attribute 0 size
|-
| 4-5
| unsigned, Vertex attribute 1 type
|-
| 6-7
| unsigned, Vertex attribute 1 size
|-
| 8-9
| unsigned, Vertex attribute 2 type
|-
| 10-11
| unsigned, Vertex attribute 2 size
|-
| 12-13
| unsigned, Vertex attribute 3 type
|-
| 14-15
| unsigned, Vertex attribute 3 size
|-
| 16-17
| unsigned, Vertex attribute 4 type
|-
| 18-19
| unsigned, Vertex attribute 4 size
|-
| 20-21
| unsigned, Vertex attribute 5 type
|-
| 22-23
| unsigned, Vertex attribute 5 size
|-
| 24-25
| unsigned, Vertex attribute 6 type
|-
| 26-27
| unsigned, Vertex attribute 6 size
|-
| 28-29
| unsigned, Vertex attribute 7 type
|-
| 30-31
| unsigned, Vertex attribute 7 size
|}
 
Vertex attribute type values:
 
{| class="wikitable" border="1"
! Value
! Description
|-
| 0
| Byte
|-
| 1
| Unsigned byte
|-
| 2
| Short
|-
| 3
| Float
|}
 
Vertex attribute size values:
 
{| class="wikitable" border="1"
! Value
! Description
|-
| 0
| 8 bits
|-
| 1
| 16 bits
|-
| 2
| 24 bits
|-
| 3
| 32 bits
|}
 
=== GPUREG_ATTRIBBUFFERS_FORMAT_HIGH ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-1
| unsigned, Vertex attribute 8 type
|-
| 2-3
| unsigned, Vertex attribute 8 size
|-
| 4-5
| unsigned, Vertex attribute 9 type
|-
| 6-7
| unsigned, Vertex attribute 9 size
|-
| 8-9
| unsigned, Vertex attribute 10 type
|-
| 10-11
| unsigned, Vertex attribute 10 size
|-
| 12-13
| unsigned, Vertex attribute 11 type
|-
| 14-15
| unsigned, Vertex attribute 11 size
|-
| 16-27
| unsigned, Fixed vertex attribute mask
|-
| 28-31
| unsigned, Total vertex attribute count - 1
|}
 
See GPUREG_ATTRIBBUFFERS_FORMAT_LOW for vertex attribute type and size values.
 
=== GPUREG_ATTRIBBUFFER''i''_OFFSET ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-27
| unsigned, Offset from base vertex arrays address
|}
 
=== GPUREG_ATTRIBBUFFER''i''_CONFIG1 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-3
| unsigned, Component 1
|-
| 4-7
| unsigned, Component 2
|-
| 8-11
| unsigned, Component 3
|-
| 12-15
| unsigned, Component 4
|-
| 16-19
| unsigned, Component 5
|-
| 20-23
| unsigned, Component 6
|-
| 24-27
| unsigned, Component 7
|-
| 28-31
| unsigned, Component 8
|}
 
Component values:
 
{| class="wikitable" border="1"
! Value
! Description
|-
| 0
| Vertex attribute 0
|-
| 1
| Vertex attribute 1
|-
| 2
| Vertex attribute 2
|-
| 3
| Vertex attribute 3
|-
| 4
| Vertex attribute 4
|-
| 5
| Vertex attribute 5
|-
| 6
| Vertex attribute 6
|-
| 7
| Vertex attribute 7
|-
| 8
| Vertex attribute 8
|-
| 9
| Vertex attribute 9
|-
| 10
| Vertex attribute 10
|-
| 11
| Vertex attribute 11
|-
| 12
| 4-byte padding
|-
| 13
| 8-byte padding
|-
| 14
| 12-byte padding
|-
| 15
| 16-byte padding
|}
 
=== GPUREG_ATTRIBBUFFER''i''_CONFIG2 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-3
| unsigned, Component 9
|-
| 4-7
| unsigned, Component 10
|-
| 8-11
| unsigned, Component 11
|-
| 12-15
| unsigned, Component 12
|-
| 16-23
| unsigned, Bytes per vertex
|-
| 28-31
| unsigned, Total number of components
|}
 
See GPUREG_ATTRIBBUFFER''i''_CONFIG1 for component values.
 
=== GPUREG_INDEXBUFFER_CONFIG ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-27
| unsigned, Offset from base vertex arrays address
|-
| 31
| Index type (0 = unsigned byte, 1 = unsigned short or drawing arrays)
|}
 
=== GPUREG_NUMVERTICES ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-31
| unsigned, Number of vertices to render
|}
=== GPUREG_GEOSTAGE_CONFIG ===
! Description
|-
| 0-71| unsigned, Geometry stage mode. shader in use (0=Vertex shader onlynot in use, 2=Vertex shader + geometry shaderin use)
|-
| 8
| Unknown. Seems to skip every other unsigned, Drawing triangle when used with indexed rendering and without geoshaders. Has no effect with non-indexed rendering without geoshaders. '''If this is elements (0= not, you don't need to use GPU_UNKPRIM with DrawElements.'''1 = drawing triangle elements)
|-
| 9-15| No effect.0x0
|-
| 16-23
| Unknown.0x0
|-
| 24-31| Unknown. Often set to unsigned, Use reserved geometry shader subdivision (0.= don't use, 1 = use)
|}
This register configures the geometry stage of the GPU pipeline.
 
=== GPUREG_VERTEX_OFFSET ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-31
| unsigned, Starting vertex offset
|}
 
=== GPUREG_POST_VERTEX_CACHE_NUM ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-7
| unsigned, Number of entries in the post-vertex cache (usually 0x4 or 0x84)
|}
 
=== GPUREG_DRAWARRAYS ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-31
| unsigned, Trigger (0 = idle, non-zero = draw arrays)
|}
 
=== GPUREG_DRAWELEMENTS ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-31
| unsigned, Trigger (0 = idle, non-zero = draw elements)
|}
 
=== GPUREG_VTX_FUNC ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-31
| unsigned, Trigger (0 = idle, non-zero = clear post-vertex cache)
|}
=== GPUREG_FIXEDATTRIB_INDEX ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-3
| unsigned, Fixed attribute index (0-11, 0xF = immediate-mode submission)
|}
See [[GPU/Fixed Vertex Attributes]] and [[GPU/Immediate-Mode Vertex Submission]] for usage info.
 
=== GPUREG_FIXEDATTRIB_DATA0 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-23
| float1.7.16, Vertex attribute element 1
|-
| 24-31
| float1.7.16, Vertex attribute element 2 (lower 8 bits)
|}
 
Accepts the first part of the four 24-bit floating-point values that make up a vertex attribute. Stored in the fixed attribute currently specified with GPUREG_FIXEDATTRIB_INDEX. If immediate-mode vertex submission is enabled (by writing 0xF to the index register) then vertex data is input here directly.
 
=== GPUREG_FIXEDATTRIB_DATA1 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-23
| float1.7.16, Vertex attribute element 2 (upper 16 bits)
|-
| 24-31
| float1.7.16, Vertex attribute element 3 (lower 16 bits)
|}
 
 
Accepts the second part of the four 24-bit floating-point values that make up a vertex attribute. Stored in the fixed attribute currently specified with GPUREG_FIXEDATTRIB_INDEX. If immediate-mode vertex submission is enabled (by writing 0xF to the index register) then vertex data is input here directly.
 
=== GPUREG_FIXEDATTRIB_DATA2 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-23
| float1.7.16, Vertex attribute element 3 (upper 8 bits)
|-
| 24-31
| float1.7.16, Vertex attribute element 4
|}
 
Accepts the third part of the four 24-bit floating-point values that make up a vertex attribute. Stored in the fixed attribute currently specified with GPUREG_FIXEDATTRIB_INDEX. If immediate-mode vertex submission is enabled (by writing 0xF to the index register) then vertex data is input here directly.
 
=== GPUREG_CMDBUF_SIZE0 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-20
| unsigned, Size of command buffer 0 >> 3
|}
 
=== GPUREG_CMDBUF_SIZE1 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-20
| unsigned, Size of command buffer 1 >> 3
|}
 
=== GPUREG_CMDBUF_ADDR0 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-28
| unsigned, Physical address of command buffer 0 >> 3
|}
 
=== GPUREG_CMDBUF_ADDR1 ===
 
{| class="wikitable" border="1"
! Bits
! Description
|-
| 0-28
| unsigned, Physical address of command buffer 1 >> 3
|}
 
=== GPUREG_CMDBUF_JUMP0 ===
{| class="wikitable" border="1"
|-
| 0-31
| Sets the active fixed attribute index. This is the fixed attribute which will be set when writing to [[#GPUREG_FIXEDATTRIB_DATA|GPUREG_FIXEDATTRIB_DATA]]. Valid values are unsigned, Trigger (0-11. If the special value 0xF is written here= idle, this sets up immediatenon-mode vertex submission instead, and writes to the data register will input vertex data directly into the pipeline.zero = execute command buffer 0)
|}
=== GPUREG_FIXEDATTRIB_DATA GPUREG_CMDBUF_JUMP1 ===
Accepts a packed 4{| class="wikitable" border="1"! Bits! Description|-tuple of float24 values (in the same format used for [[#GPUREG_VSH_FLOATUNIFORM_DATA|specifying shader uniforms]]). This is stored as the fixed attribute value for the attribute currently specified in the index register. Attributes are always specified as a 40-tuple of floats31| unsigned, regardless of the format configured in [[#GPUREG_ATTRIBBUFFERS_FORMAT_HIGHTrigger (0 = idle, non-zero = execute command buffer 1)|GPUREG_ATTRIBBUFFERS_FORMAT_HIGH]].}
If immediate=== GPUREG_VSH_NUM_ATTR === {| class="wikitable" border="1"! Bits! Description|-mode | 0-3| unsigned, Number of vertex submission is shader input attributes - 1|} === GPUREG_VSH_COM_MODE === {| class="wikitable" border="1"! Bits! Description|-| 0| unsigned, Geometry shader configuration enabled (0 = disabled, 1 = enabled )|-| 8-31| 0x0|} === GPUREG_START_DRAW_FUNC0 === {| class="wikitable" border="1"! Bits! Description|-| 0| unsigned, Mode (by writing 0xF 0 = drawing, 1 = configuration)|-| 1-31| 0x0|} When the mode value is set to 1, rendering is not performed properly. When set to 0, changes to the index register) then vertex shader configuration registers are not applied correctly. === GPUREG_VSH_OUTMAP_TOTAL1 === {| class="wikitable" border="1"! Bits! Description|-| 0-3| unsigned, Number of vertex shader output map registers - 1|} === GPUREG_VSH_OUTMAP_TOTAL2 === {| class="wikitable" border="1"! Bits! Description|-| 0-3| unsigned, Number of vertex shader output map registers - 1|} === GPUREG_GSH_MISC0 === {| class="wikitable" border="1"! Bits! Description|-| 0-31| unsigned, Misc data (0x00000001 = Reserved geometry shader subdivision in use, 0x01004302 = Particle system in use, 0 otherwise)|} === GPUREG_GEOSTAGE_CONFIG2 === {| class="wikitable" border="1"! Bits! Description|-| 0| unsigned, Draw command active (0 = not active, 1 = active)|-| 8| unsigned, Drawing triangle elements (0 = not, 1 = drawing triangle elements)|-| 9| 0x0|-| 16-31| 0x0|} This register is input here directlyset to 1 before draw arrays/elements calls and cleared immediately after. The index While set to 1, some register does not need to writes out side of the 0x200-0x254 and 0x280-0x2DF ranges may be reprocessed incorrectly. === GPUREG_GSH_MISC1 === {| class="wikitable" border="1"! Bits! Description|-| 0-4| unsigned, Reserved geometry shader subdivision type (2 = Loop, 3 = Catmull-set after each write.Clark)|} === GPUREG_PRIMITIVE_CONFIG === {| class="wikitable" border="1"! Bits! Description|-| 0-3| unsigned, Number of vertex shader output map registers - 1|-| 8-9| unsigned, Primitive mode|-| 16| 0x0|} Primitive mode value: {| class="wikitable" border="1"! Value! Description|-| 0| Triangles|-| 1| Triangle strip|-| 2| Triangle fan|-| 3| Geometry primitive|}
=== GPUREG_RESTART_PRIMITIVE ===
! Description
|-
| 0| unsigned, Trigger (0 = idle, 1 = reset primitive)|-7| Writing 0x01 to this field ends the current triangle strip or fan. This is necessary before using these kinds of primitives with [[GPU:Immediate1-Mode Vertex Submission31|immediate-mode]], but most games seem to write to it before every draw call.0x0
|}
1,291

edits

Navigation menu