GPU internal registers are written to through GPU commands. They are used to control the GPU's behavior, ie tell it to draw stuff and how we want it drawn.
+
There are three main types of registers :
+
* configuration registers, which directly map to various rendering properties (for example : [[#GPUREG_FACECULLING_CONFIG|GPUREG_FACECULLING_CONFIG]])
+
* data transfer registers, which can be seen as FIFOs that let us send sequential chunks of data to the GPU, such as shader code or 1D samplers (for example : [[#GPUREG_GSH_CODE_DATA|GPUREG_GSH_CODE_DATA]])
+
* action triggering registers, which tell the GPU to do something, like draw a primitive (for example : [[#GPUREG_DRAWARRAYS|GPUREG_DRAWARRAYS]])
+
+
== Register list ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
! Register ID
! Register ID
Line 2,240:
Line 2,250:
| 022E
| 022E
| [[#GPUREG_DRAWARRAYS|GPUREG_DRAWARRAYS]]
| [[#GPUREG_DRAWARRAYS|GPUREG_DRAWARRAYS]]
−
| ?
+
|
|-
|-
| 022F
| 022F
| [[#GPUREG_DRAWELEMENTS|GPUREG_DRAWELEMENTS]]
| [[#GPUREG_DRAWELEMENTS|GPUREG_DRAWELEMENTS]]
−
| ?
+
|
|-
|-
| 0230
| 0230
Line 3,078:
Line 3,088:
|
|
|}
|}
+
+
== GPUREG_FINALIZE ==
+
+
Writing to this register seems to signal the GPU to stop processing GPU commands from the current buffer; any command following a write to this register will be ignored. The value written to this register does not appear to matter, although 0x12345678 is the value typically written by commercial software.
+
Failure to write to this register in any command buffer will result in the GPU hanging.