Changes

2,019 bytes added ,  13:00, 24 October 2014
no edit summary
Line 192: Line 192:  
| 0x0100
 
| 0x0100
 
| <nowiki>0x00E40000 | val</nowiki>.
 
| <nowiki>0x00E40000 | val</nowiki>.
| Val0 = unknown, val1 = unknown, val3 = unknown. The default val used here is 0.
+
| 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
| 0x0 = unknown, 0xF = unknown. Only bits 3-0 are used.(Values 0x1-0xF all have the same effect)
+
| Setting bits 3-0 to a nonzero value allows the GPU to read from the color buffer.
 
|-
 
|-
 
| 1
 
| 1
136

edits