GPU/Commands: Difference between revisions
No edit summary |
No edit summary |
||
Line 192: | Line 192: | ||
| 0x0100 | | 0x0100 | ||
| <nowiki>0x00E40000 | val</nowiki>. | | <nowiki>0x00E40000 | val</nowiki>. | ||
| | | See command set 0x0100. | ||
|- | |- | ||
| 0x0101 | | 0x0101 | ||
| u32 | |||
| See command set 0x0100. | |||
|- | |||
| 0x0102 | |||
| u32 | | u32 | ||
| See command set 0x0100. | | See command set 0x0100. | ||
Line 415: | Line 419: | ||
| 0x0100 | | 0x0100 | ||
| Value 0x00E40100 | | Value 0x00E40100 | ||
| | | Controls color compositing | ||
|- | |- | ||
| 1 | | 1 | ||
| 0x0101 | | 0x0101 | ||
| 0x01010000 when disabled | | 0x01010000 when disabled | ||
| | | Alphablending equations and factors | ||
|- | |- | ||
| 2 | | 2 | ||
| 0x0103 | | 0x0103 | ||
| This is set to zero when the command 0x0101 parameter is value 0x01010000. | | This is set to zero when the command 0x0101 parameter is value 0x01010000. | ||
| | | Constant color for alphablending | ||
|} | |} | ||
Line 1,015: | Line 1,019: | ||
| Unused | | Unused | ||
|} | |} | ||
=== Parameter value format for command 0x0100 === | |||
This command controls color compositing. It is typically used right after commands 0x0101 or 0x0102 to select the appropriate blending mode. | |||
Alphablending and color logic op can't be used together. Attempting to issue commands 0x0101 and 0x0102 at the same time can freeze the GPU. | |||
For blending to work correctly, color buffer reading needs to be enabled (see command set 0x0112). Otherwise zero values will be used as destination color/alpha. | |||
{| class="wikitable" border="1" | |||
! Bit | |||
! Description | |||
|- | |||
| 0 | |||
| Weird mode (see below) | |||
|- | |||
| 1 | |||
| When set, nothing is drawn to the color buffer. It is unknown if this also affects the depth and stencil buffers. This bit can cause a noisy picture when used with bit 0. | |||
|- | |||
| 8 | |||
| Selects blending mode. 0 = color logic op, 1 = alphablending | |||
|- | |||
| 23-20 | |||
| Unknown, typically set to 0xE4. No observed effect when changing this. | |||
|- | |||
| 25-24 | |||
| 0 = normal, 1-3 = apply dithering (3 = 0% source) | |||
|} | |||
When "weird mode" is enabled, the source color/alpha values are ignored. Instead, each 16-bit value in the destination color buffer is converted according to its bits 14-8, as follows: | |||
* if bits 14-8 are between 0x00 and 0x03, the value is replaced with 0x0000 | |||
* if bits 14-8 are between 0x7D and 0x7F, the value is replaced with 0x7FFF | |||
* in all other cases, the value is left unchanged | |||
=== Parameter value format for command 0x0101 === | === Parameter value format for command 0x0101 === | ||
Line 1,111: | Line 1,147: | ||
| 14 | | 14 | ||
| GL_SRC_ALPHA_SATURATE | | GL_SRC_ALPHA_SATURATE | ||
|} | |||
=== Parameter value format for command 0x0102 === | |||
This command controls color logic op. | |||
{| class="wikitable" border="1" | |||
! Bit | |||
! Description | |||
|- | |||
| 3-0 | |||
| Logic operation | |||
|} | |||
Source/destination factor values: | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| GL_CLEAR | |||
|- | |||
| 1 | |||
| GL_AND | |||
|- | |||
| 2 | |||
| GL_AND_REVERSE | |||
|- | |||
| 3 | |||
| GL_COPY | |||
|- | |||
| 4 | |||
| GL_SET | |||
|- | |||
| 5 | |||
| GL_COPY_INVERTED | |||
|- | |||
| 6 | |||
| GL_NOOP | |||
|- | |||
| 7 | |||
| GL_INVERT | |||
|- | |||
| 8 | |||
| GL_NAND | |||
|- | |||
| 9 | |||
| GL_OR | |||
|- | |||
| 10 | |||
| GL_NOR | |||
|- | |||
| 11 | |||
| GL_XOR | |||
|- | |||
| 12 | |||
| GL_EQUIV | |||
|- | |||
| 13 | |||
| GL_AND_INVERTED | |||
|- | |||
| 14 | |||
| GL_OR_REVERSE | |||
|- | |||
| 15 | |||
| GL_OR_INVERTED | |||
|} | |} | ||
Line 1,148: | Line 1,248: | ||
|- | |- | ||
| 0 | | 0 | ||
| | | Setting bits 3-0 to a nonzero value allows the GPU to read from the color buffer. | ||
|- | |- | ||
| 1 | | 1 |