Line 761:
Line 761:
|-
|-
| 008F
| 008F
−
| [[#GPUREG_008F|GPUREG_008F]]
+
| [[#GPUREG_GPUREG_LIGHTING_ENABLE0|GPUREG_LIGHTING_ENABLE0]]
|?
|?
|PICA_REG_FRAG_LIGHT_EN0
|PICA_REG_FRAG_LIGHT_EN0
Line 1,664:
Line 1,664:
|-
|-
| 0140
| 0140
−
| [[#GPUREG_0140|GPUREG_LIGHT0_SPECULAR0]]
+
| [[#GPUREG_LIGHTx_SPECULARy|GPUREG_LIGHT0_SPECULAR0]]
|?
|?
|PICA_REG_FRAG_LIGHT0_SPECULAR0 / PICA_REG_FRAG_LIGHT_START
|PICA_REG_FRAG_LIGHT0_SPECULAR0 / PICA_REG_FRAG_LIGHT_START
|-
|-
| 0141
| 0141
−
| [[#GPUREG_0141|GPUREG_LIGHT0_SPECULAR1]]
+
| [[#GPUREG_LIGHTx_SPECULARy|GPUREG_LIGHT0_SPECULAR1]]
|?
|?
|PICA_REG_FRAG_LIGHT0_SPECULAR1
|PICA_REG_FRAG_LIGHT0_SPECULAR1
|-
|-
| 0142
| 0142
−
| [[#GPUREG_0142|GPUREG_LIGHT0_DIFFUSE]]
+
| [[#GPUREG_LIGHTx_DIFFUSE|GPUREG_LIGHT0_DIFFUSE]]
|?
|?
|PICA_REG_FRAG_LIGHT0_DIFFUSE
|PICA_REG_FRAG_LIGHT0_DIFFUSE
|-
|-
| 0143
| 0143
−
| [[#GPUREG_0143|GPUREG_LIGHT0_AMBIENT]]
+
| [[#GPUREG_LIGHTx_AMBIENT|GPUREG_LIGHT0_AMBIENT]]
|?
|?
|PICA_REG_FRAG_LIGHT0_AMBIENT
|PICA_REG_FRAG_LIGHT0_AMBIENT
|-
|-
| 0144
| 0144
−
| [[#GPUREG_0144|GPUREG_LIGHT0_XY]]
+
| [[#GPUREG_LIGHTx_XY|GPUREG_LIGHT0_XY]]
|?
|?
|PICA_REG_FRAG_LIGHT0_POSITION_XY
|PICA_REG_FRAG_LIGHT0_POSITION_XY
|-
|-
| 0145
| 0145
−
| [[#GPUREG_0145|GPUREG_LIGHT0_Z]]
+
| [[#GPUREG_LIGHTx_Z|GPUREG_LIGHT0_Z]]
|?
|?
|PICA_REG_FRAG_LIGHT0_POSITION_Z
|PICA_REG_FRAG_LIGHT0_POSITION_Z
|-
|-
| 0146
| 0146
−
| [[#GPUREG_0146|GPUREG_LIGHT0_SPOTDIR_XY]]
+
| [[#GPUREG_LIGHTx_SPOTDIR_XY|GPUREG_LIGHT0_SPOTDIR_XY]]
|?
|?
|PICA_REG_FRAG_LIGHT0_SPOT_XY
|PICA_REG_FRAG_LIGHT0_SPOT_XY
|-
|-
| 0147
| 0147
−
| [[#GPUREG_0147|GPUREG_LIGHT0_SPOTDIR_Z]]
+
| [[#GPUREG_LIGHTx_SPOTDIR_Z|GPUREG_LIGHT0_SPOTDIR_Z]]
|?
|?
|PICA_REG_FRAG_LIGHT0_SPOT_Z
|PICA_REG_FRAG_LIGHT0_SPOT_Z
Line 1,709:
Line 1,709:
|-
|-
| 0149
| 0149
−
| [[#GPUREG_0149|GPUREG_LIGHT0_CONFIG]]
+
| [[#GPUREG_LIGHTx_CONFIG|GPUREG_LIGHT0_CONFIG]]
|
|
|PICA_REG_FRAG_LIGHT0_TYPE
|PICA_REG_FRAG_LIGHT0_TYPE
|-
|-
| 014A
| 014A
−
| [[#GPUREG_014A|GPUREG_LIGHT0_ATTENUATION_BIAS]]
+
| [[#GPUREG_LIGHTx_ATTENUATION_BIAS|GPUREG_LIGHT0_ATTENUATION_BIAS]]
|?
|?
|PICA_REG_FRAG_LIGHT0_DIST_ATTN_BIAS
|PICA_REG_FRAG_LIGHT0_DIST_ATTN_BIAS
|-
|-
| 014B
| 014B
−
| [[#GPUREG_014B|GPUREG_LIGHT0_ATTENUATION_SCALE]]
+
| [[#GPUREG_LIGHTx_ATTENUATION_SCALE|GPUREG_LIGHT0_ATTENUATION_SCALE]]
|?
|?
|PICA_REG_FRAG_LIGHT0_DIST_ATTN_SCALE
|PICA_REG_FRAG_LIGHT0_DIST_ATTN_SCALE
Line 2,304:
Line 2,304:
|-
|-
| 01C0
| 01C0
−
| [[#GPUREG_01C0|GPUREG_LIGHTING_AMBIENT]]
+
| [[#GPUREG_LIGHTING_AMBIENT|GPUREG_LIGHTING_AMBIENT]]
|?
|?
|PICA_REG_FRAG_LIGHT_AMBIENT
|PICA_REG_FRAG_LIGHT_AMBIENT
Line 2,314:
Line 2,314:
|-
|-
| 01C2
| 01C2
−
| [[#GPUREG_01C2|GPUREG_LIGHTING_NUM_LIGHTS]]
+
| [[#GPUREG_LIGHTING_NUM_LIGHTS|GPUREG_LIGHTING_NUM_LIGHTS]]
|?
|?
|PICA_REG_FRAG_LIGHT_SRC_NUM
|PICA_REG_FRAG_LIGHT_SRC_NUM
|-
|-
| 01C3
| 01C3
−
| [[#GPUREG_01C3|GPUREG_LIGHTING_CONFIG0]]
+
| [[#GPUREG_LIGHTING_CONFIG0|GPUREG_LIGHTING_CONFIG0]]
|?
|?
|PICA_REG_FRAG_LIGHT_FUNC_MODE0
|PICA_REG_FRAG_LIGHT_FUNC_MODE0
|-
|-
| 01C4
| 01C4
−
| [[#GPUREG_01C4|GPUREG_LIGHTING_CONFIG1]]
+
| [[#GPUREG_LIGHTING_CONFIG1|GPUREG_LIGHTING_CONFIG1]]
|?
|?
|PICA_REG_FRAG_LIGHT_FUNC_MODE1
|PICA_REG_FRAG_LIGHT_FUNC_MODE1
|-
|-
| 01C5
| 01C5
−
| [[#GPUREG_01C5|GPUREG_LIGHTING_LUT_INDEX]]
+
| [[#GPUREG_LIGHTING_LUT_INDEX|GPUREG_LIGHTING_LUT_INDEX]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT
|PICA_REG_FRAG_LIGHT_LUT
|-
|-
| 01C6
| 01C6
−
| [[#GPUREG_01C6|GPUREG_LIGHTING_ENABLE1]]
+
| [[#GPUREG_LIGHTING_ENABLE1|GPUREG_LIGHTING_ENABLE1]]
|?
|?
|PICA_REG_FRAG_LIGHT_EN1
|PICA_REG_FRAG_LIGHT_EN1
Line 2,344:
Line 2,344:
|-
|-
| 01C8
| 01C8
−
| [[#GPUREG_01C8|GPUREG_LIGHTING_LUT_DATA]]
+
| [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT_DATA0
|PICA_REG_FRAG_LIGHT_LUT_DATA0
|-
|-
| 01C9
| 01C9
−
| [[#GPUREG_01C9|GPUREG_LIGHTING_LUT_DATA]]
+
| [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT_DATA1
|PICA_REG_FRAG_LIGHT_LUT_DATA1
|-
|-
| 01CA
| 01CA
−
| [[#GPUREG_01CA|GPUREG_LIGHTING_LUT_DATA]]
+
| [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT_DATA2
|PICA_REG_FRAG_LIGHT_LUT_DATA2
|-
|-
| 01CB
| 01CB
−
| [[#GPUREG_01CB|GPUREG_LIGHTING_LUT_DATA]]
+
| [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT_DATA3
|PICA_REG_FRAG_LIGHT_LUT_DATA3
|-
|-
| 01CC
| 01CC
−
| [[#GPUREG_01CC|GPUREG_LIGHTING_LUT_DATA]]
+
| [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT_DATA4
|PICA_REG_FRAG_LIGHT_LUT_DATA4
|-
|-
| 01CD
| 01CD
−
| [[#GPUREG_01CD|GPUREG_LIGHTING_LUT_DATA]]
+
| [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT_DATA5
|PICA_REG_FRAG_LIGHT_LUT_DATA5
|-
|-
| 01CE
| 01CE
−
| [[#GPUREG_01CE|GPUREG_LIGHTING_LUT_DATA]]
+
| [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT_DATA6
|PICA_REG_FRAG_LIGHT_LUT_DATA6
|-
|-
| 01CF
| 01CF
−
| [[#GPUREG_01CF|GPUREG_LIGHTING_LUT_DATA]]
+
| [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUT_DATA7
|PICA_REG_FRAG_LIGHT_LUT_DATA7
|-
|-
| 01D0
| 01D0
−
| [[#GPUREG_01D0|GPUREG_LIGHTING_LUTINPUT_ABS]]
+
| [[#GPUREG_LIGHTING_LUTINPUT_ABS|GPUREG_LIGHTING_LUTINPUT_ABS]]
|?
|?
|PICA_REG_FRAG_LIGHT_ABSLUTINPUT
|PICA_REG_FRAG_LIGHT_ABSLUTINPUT
|-
|-
| 01D1
| 01D1
−
| [[#GPUREG_01D1|GPUREG_LIGHTING_LUTINPUT_SELECT]]
+
| [[#GPUREG_LIGHTING_LUTINPUT_SELECT|GPUREG_LIGHTING_LUTINPUT_SELECT]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUTINPUT
|PICA_REG_FRAG_LIGHT_LUTINPUT
|-
|-
| 01D2
| 01D2
−
| [[#GPUREG_01D2|GPUREG_LIGHTING_LUTINPUT_SCALE]]
+
| [[#GPUREG_LIGHTING_LUTINPUT_SCALE|GPUREG_LIGHTING_LUTINPUT_SCALE]]
|?
|?
|PICA_REG_FRAG_LIGHT_LUTSCALE
|PICA_REG_FRAG_LIGHT_LUTSCALE
Line 2,429:
Line 2,429:
|-
|-
| 01D9
| 01D9
−
| [[#GPUREG_01D9|GPUREG_LIGHTING_LIGHT_PERMUTATION]]
+
| [[#GPUREG_LIGHTING_LIGHT_PERMUTATION|GPUREG_LIGHTING_LIGHT_PERMUTATION]]
|?
|?
|PICA_REG_FRAG_LIGHT_SRC_EN_ID
|PICA_REG_FRAG_LIGHT_SRC_EN_ID
Line 4,001:
Line 4,001:
== Fragment lighting registers ==
== Fragment lighting registers ==
−
=== GPUREG_01C4 ===
+
=== GPUREG_LIGHTING_ENABLE0 ===
+
+
This register is set to 0 when fragment lighting is disabled, and to 1 when it is enabled.
+
+
=== GPUREG_LIGHTING_ENABLE1 ===
+
+
This register is set to 1 when fragment lighting is disabled, and to 0 when it is enabled.
+
+
=== GPUREG_LIGHTING_CONFIG0 ===
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 4,008:
Line 4,016:
|-
|-
| 0
| 0
−
| Disable bit for frag light source 0 shadows
+
| Shadow factor enable, usually set to bit16 OR bit18 OR bit19
|-
|-
| 1
| 1
−
| Disable bit for frag light source 1 shadows
+
| Unknown, set to 0
|-
|-
−
| 2
+
| 2-3
−
| Disable bit for frag light source 2 shadows
+
| "Fresnel selector" (see below)
|-
|-
−
| 3
+
| 4-7
−
| Disable bit for frag light source 3 shadows
+
| "Config", "Light env config" (see below)
|-
|-
−
| 4
+
| 8-15
−
| Disable bit for frag light source 4 shadows
+
| Unknown, set to 4
|-
|-
−
| 5
+
| 16
−
| Disable bit for frag light source 5 shadows
+
| "Shadow primary", 0=disabled, 1=enabled
|-
|-
−
| 6
+
| 17
−
| Disable bit for frag light source 6 shadows
+
| "Shadow secondary", 0=disabled, 1=enabled
|-
|-
−
| 7
+
| 18
−
| Disable bit for frag light source 7 shadows
+
| "Invert shadow", 0=disabled, 1=enabled
|-
|-
−
| 8
+
| 19
−
| Disable bit for frag light source 0 spot
+
| "Shadow alpha", 0=disabled, 1=enabled
|-
|-
−
| 9
+
| 20-21
−
| Disable bit for frag light source 1 spot
+
| Unknown, set to 0
|-
|-
−
| 10
+
| 22-23
−
| Disable bit for frag light source 2 spot
+
| "Bump selector"
|-
|-
−
| 11
+
| 24-25
−
| Disable bit for frag light source 3 spot
+
| "Shadow selector"
|-
|-
−
| 12
+
| 26
−
| Disable bit for frag light source 4 spot
+
| Unknown, set to 0
|-
|-
−
| 13
+
| 27
−
| Disable bit for frag light source 5 spot
+
| "Clamp highlights", 0=disabled, 1=enabled
|-
|-
−
| 14
+
| 28-29
−
| Disable bit for frag light source 6 spot
+
| "Bump mode", "Light env texy usage" (see below)
|-
|-
−
| 15
+
| 30
−
| Disable bit for frag light source 7 spot
+
| "Bump renorm", 0=enabled, 1=disabled
|-
|-
−
| 24
+
| 31
−
| Disable bit for frag light source 0 distance attenuation
+
| Unknown, set to 1
+
|}
+
+
Fresnel selector constants:
+
+
{| class="wikitable" border="1"
+
! Value
+
! Description
+
|-
+
| 0
+
| NO_FRESNEL
+
|-
+
| 1
+
| PRI_ALPHA_FRESNEL
|-
|-
−
| 25
+
| 2
−
| Disable bit for frag light source 1 distance attenuation
+
| SEC_ALPHA_FRESNEL
|-
|-
−
| 26
+
| 3
−
| Disable bit for frag light source 2 distance attenuation
+
| PRI_SEC_ALPHA_FRESNEL
+
|}
+
+
Light env config constants:
+
+
{| class="wikitable" border="1"
+
! Value
+
! Description
|-
|-
−
| 27
+
| 0
−
| Disable bit for frag light source 3 distance attenuation
+
| LIGHT_ENV_LAYER_CONFIG0
|-
|-
−
| 28
+
| 1
−
| Disable bit for frag light source 4 distance attenuation
+
| LIGHT_ENV_LAYER_CONFIG1
|-
|-
−
| 29
+
| 2
−
| Disable bit for frag light source 5 distance attenuation
+
| LIGHT_ENV_LAYER_CONFIG2
|-
|-
−
| 30
+
| 3
−
| Disable bit for frag light source 6 distance attenuation
+
| LIGHT_ENV_LAYER_CONFIG3
|-
|-
−
| 31
+
| 4
+
| LIGHT_ENV_LAYER_CONFIG4
+
|-
+
| 5
+
| LIGHT_ENV_LAYER_CONFIG5
+
|-
+
| 6
+
| LIGHT_ENV_LAYER_CONFIG6
+
|-
+
| 8 (sic)
+
| LIGHT_ENV_LAYER_CONFIG7
+
|}
+
+
Bump mode constants:
+
+
{| class="wikitable" border="1"
+
! Value
+
! Description
+
|-
+
| 0
+
| BUMP_NOT_USED
+
|-
+
| 1
+
| BUMP_AS_BUMP
+
|-
+
| 2
+
| BUMP_AS_TANG
+
|}
+
+
Bit 30 is set when bump mode is not zero.
+
+
=== GPUREG_LIGHTING_CONFIG1 ===
+
+
{| class="wikitable" border="1"
+
! Bits
+
! Description
+
|-
+
| 0
+
| Disable bit for frag light source 0 shadows
+
|-
+
| 1
+
| Disable bit for frag light source 1 shadows
+
|-
+
| 2
+
| Disable bit for frag light source 2 shadows
+
|-
+
| 3
+
| Disable bit for frag light source 3 shadows
+
|-
+
| 4
+
| Disable bit for frag light source 4 shadows
+
|-
+
| 5
+
| Disable bit for frag light source 5 shadows
+
|-
+
| 6
+
| Disable bit for frag light source 6 shadows
+
|-
+
| 7
+
| Disable bit for frag light source 7 shadows
+
|-
+
| 8
+
| Disable bit for frag light source 0 spot
+
|-
+
| 9
+
| Disable bit for frag light source 1 spot
+
|-
+
| 10
+
| Disable bit for frag light source 2 spot
+
|-
+
| 11
+
| Disable bit for frag light source 3 spot
+
|-
+
| 12
+
| Disable bit for frag light source 4 spot
+
|-
+
| 13
+
| Disable bit for frag light source 5 spot
+
|-
+
| 14
+
| Disable bit for frag light source 6 spot
+
|-
+
| 15
+
| Disable bit for frag light source 7 spot
+
|-
+
| 16
+
| Disable bit for lut_D0
+
|-
+
| 17
+
| Disable bit for lut_D1
+
|-
+
| 18
+
| Unknown, set to 1
+
|-
+
| 19
+
| Disable bit for lut_FR
+
|-
+
| 20
+
| Disable bit for lut_RB
+
|-
+
| 21
+
| Disable bit for lut_RG
+
|-
+
| 22
+
| Disable bit for lut_RR
+
|-
+
| 23
+
| Unknown, set to 1
+
|-
+
| 24
+
| Disable bit for frag light source 0 distance attenuation
+
|-
+
| 25
+
| Disable bit for frag light source 1 distance attenuation
+
|-
+
| 26
+
| Disable bit for frag light source 2 distance attenuation
+
|-
+
| 27
+
| Disable bit for frag light source 3 distance attenuation
+
|-
+
| 28
+
| Disable bit for frag light source 4 distance attenuation
+
|-
+
| 29
+
| Disable bit for frag light source 5 distance attenuation
+
|-
+
| 30
+
| Disable bit for frag light source 6 distance attenuation
+
|-
+
| 31
| Disable bit for frag light source 7 distance attenuation
| Disable bit for frag light source 7 distance attenuation
+
|}
+
+
=== GPUREG_LIGHTING_NUM_LIGHTS ===
+
+
The number of active lights (0..8) are written to this register.
+
+
=== GPUREG_LIGHTING_LIGHT_PERMUTATION ===
+
+
{| class="wikitable" border="1"
+
! Bits
+
! Description
+
|-
+
| 0-2
+
| ID of the 1st enabled light (0..7)
+
|-
+
| 4-6
+
| ID of the 2nd enabled light (0..7)
+
|-
+
| 8-10
+
| ID of the 3rd enabled light (0..7)
+
|-
+
| 12-14
+
| ID of the 4th enabled light (0..7)
+
|-
+
| 16-18
+
| ID of the 5th enabled light (0..7)
+
|-
+
| 20-22
+
| ID of the 6th enabled light (0..7)
+
|-
+
| 24-26
+
| ID of the 7th enabled light (0..7)
+
|-
+
| 28-30
+
| ID of the 8th enabled light (0..7)
+
|}
+
+
=== GPUREG_LIGHTING_LUTINPUT_SELECT ===
+
+
{| class="wikitable" border="1"
+
! Bits
+
! Description
+
|-
+
| 0-3
+
| Input selector for lut_D0
+
|-
+
| 4-7
+
| Input selector for lut_D1
+
|-
+
| 8-11
+
| Input selector for lut_SP
+
|-
+
| 12-15
+
| Input selector for lut_FR
+
|-
+
| 16-19
+
| Input selector for lut_RB
+
|-
+
| 20-23
+
| Input selector for lut_RG
+
|-
+
| 24-27
+
| Input selector for lut_RR
+
|-
+
| 28-31
+
| Input selector for lut_DA
+
|}
+
+
Input selector values:
+
+
{| class="wikitable" border="1"
+
! Value
+
! Description
+
|-
+
| 0
+
| N·H
+
|-
+
| 1
+
| V·H
+
|-
+
| 2
+
| N·V
+
|-
+
| 3
+
| L·N
+
|-
+
| 4
+
| -L·P (aka Spotlight aka SP)
+
|-
+
| 5
+
| cos φ (aka CP)
+
|}
+
+
=== GPUREG_LIGHTING_LUTINPUT_ABS ===
+
+
{| class="wikitable" border="1"
+
! Bits
+
! Description
+
|-
+
| 0
+
| abs() flag for the input of lut_D0 (0=enabled, 1=disabled)
+
|-
+
| 1
+
| abs() flag for the input of lut_D1 (0=enabled, 1=disabled)
+
|-
+
| 2
+
| abs() flag for the input of lut_SP (0=enabled, 1=disabled)
+
|-
+
| 3
+
| abs() flag for the input of lut_FR (0=enabled, 1=disabled)
+
|-
+
| 4
+
| abs() flag for the input of lut_RB (0=enabled, 1=disabled)
+
|-
+
| 5
+
| abs() flag for the input of lut_RG (0=enabled, 1=disabled)
+
|-
+
| 6
+
| abs() flag for the input of lut_RR (0=enabled, 1=disabled)
+
|-
+
| 7
+
| abs() flag for the input of lut_DA (0=enabled, 1=disabled)
+
|}
+
+
This register controls whether the absolute value of the input is taken before using a LUT.
+
+
=== GPUREG_LIGHTING_LUTINPUT_SCALE ===
+
+
{| class="wikitable" border="1"
+
! Bits
+
! Description
+
|-
+
| 0-3
+
| Scaler selector for lut_D0
+
|-
+
| 4-7
+
| Scaler selector for lut_D1
+
|-
+
| 8-11
+
| Scaler selector for lut_SP
+
|-
+
| 12-15
+
| Scaler selector for lut_FR
+
|-
+
| 16-19
+
| Scaler selector for lut_RB
+
|-
+
| 20-23
+
| Scaler selector for lut_RG
+
|-
+
| 24-27
+
| Scaler selector for lut_RR
+
|-
+
| 28-31
+
| Scaler selector for lut_DA
+
|}
+
+
Scaler selector values:
+
+
{| class="wikitable" border="1"
+
! Value
+
! Description
+
|-
+
| 0
+
| 1x
+
|-
+
| 1
+
| 2x
+
|-
+
| 2
+
| 4x
+
|-
+
| 3
+
| 8x
+
|-
+
| 6
+
| 0.25x
+
|-
+
| 7
+
| 0.5x
+
|}
+
+
This register controls the scaling that is applied to the output (or maybe the input?) of a LUT.
+
+
=== GPUREG_LIGHTING_LUT_INDEX ===
+
+
{| class="wikitable" border="1"
+
! Bits
+
! Description
+
|-
+
| 0-7
+
| Starting entry offset (0...255)
+
|-
+
| 8-10
+
| LUT ID (context=0) or Light ID (context=1,2)
+
|-
+
| 11-12
+
| Context ID
+
|}
+
+
LUT ID values:
+
+
{| class="wikitable" border="1"
+
! Value
+
! Description
+
|-
+
| 0
+
| lut_D0
+
|-
+
| 1
+
| lut_D1
+
|-
+
| 3
+
| lut_FR
+
|-
+
| 4
+
| lut_RB
+
|-
+
| 5
+
| lut_RG
+
|-
+
| 6
+
| lut_RR
+
|}
+
+
Context ID values:
+
+
{| class="wikitable" border="1"
+
! Value
+
! Description
+
|-
+
| 0
+
| LUTs common to all lights - writes to the LUT selected by the ID
+
|-
+
| 1
+
| lut_SP - writes to the LUT specific to the selected light
+
|-
+
| 2
+
| lut_DA - writes to the LUT specific to the selected light
+
|}
+
+
=== GPUREG_LIGHTING_LUT_DATA ===
+
+
Lighting LUT data is written here.
+
+
A LUT contains data for the input domain [-1.0, 1.0], which is indexed using a signed 8-bit number [-128, 127]. Therefore a LUT contains 256 entries. The index of a value is (int)(x/127.0f) & 0xFF.
+
+
Format of an entry:
+
+
{| class="wikitable" border="1"
+
! Bits
+
! Description
+
|-
+
| 0-11
+
| Entry value (12bit fractional number; floatval = x / 4096; however 0xFFF is treated as 1.0)
+
|-
+
| 12-22
+
| Absolute value of the difference between the next entry and this entry (11bit fractional number; floatval = x / 2048; however 0x7FF is treated as 1.0)
+
|-
+
| 23
+
| Sign bit of the difference (0=positive, 1=negative)
|}
|}