GPU/Internal Registers: Difference between revisions
Fragment lighting, part 1 |
|||
Line 761: | Line 761: | ||
|- | |- | ||
| 008F | | 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_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_LIGHTx_SPECULARy|GPUREG_LIGHT0_SPECULAR1]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT0_SPECULAR1 | |PICA_REG_FRAG_LIGHT0_SPECULAR1 | ||
|- | |- | ||
| 0142 | | 0142 | ||
| [[# | | [[#GPUREG_LIGHTx_DIFFUSE|GPUREG_LIGHT0_DIFFUSE]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT0_DIFFUSE | |PICA_REG_FRAG_LIGHT0_DIFFUSE | ||
|- | |- | ||
| 0143 | | 0143 | ||
| [[# | | [[#GPUREG_LIGHTx_AMBIENT|GPUREG_LIGHT0_AMBIENT]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT0_AMBIENT | |PICA_REG_FRAG_LIGHT0_AMBIENT | ||
|- | |- | ||
| 0144 | | 0144 | ||
| [[# | | [[#GPUREG_LIGHTx_XY|GPUREG_LIGHT0_XY]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT0_POSITION_XY | |PICA_REG_FRAG_LIGHT0_POSITION_XY | ||
|- | |- | ||
| 0145 | | 0145 | ||
| [[# | | [[#GPUREG_LIGHTx_Z|GPUREG_LIGHT0_Z]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT0_POSITION_Z | |PICA_REG_FRAG_LIGHT0_POSITION_Z | ||
|- | |- | ||
| 0146 | | 0146 | ||
| [[# | | [[#GPUREG_LIGHTx_SPOTDIR_XY|GPUREG_LIGHT0_SPOTDIR_XY]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT0_SPOT_XY | |PICA_REG_FRAG_LIGHT0_SPOT_XY | ||
|- | |- | ||
| 0147 | | 0147 | ||
| [[# | | [[#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_LIGHTx_CONFIG|GPUREG_LIGHT0_CONFIG]] | ||
| | | | ||
|PICA_REG_FRAG_LIGHT0_TYPE | |PICA_REG_FRAG_LIGHT0_TYPE | ||
|- | |- | ||
| 014A | | 014A | ||
| [[# | | [[#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_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_LIGHTING_AMBIENT|GPUREG_LIGHTING_AMBIENT]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_AMBIENT | |PICA_REG_FRAG_LIGHT_AMBIENT | ||
Line 2,314: | Line 2,314: | ||
|- | |- | ||
| 01C2 | | 01C2 | ||
| [[# | | [[#GPUREG_LIGHTING_NUM_LIGHTS|GPUREG_LIGHTING_NUM_LIGHTS]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_SRC_NUM | |PICA_REG_FRAG_LIGHT_SRC_NUM | ||
|- | |- | ||
| 01C3 | | 01C3 | ||
| [[# | | [[#GPUREG_LIGHTING_CONFIG0|GPUREG_LIGHTING_CONFIG0]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_FUNC_MODE0 | |PICA_REG_FRAG_LIGHT_FUNC_MODE0 | ||
|- | |- | ||
| 01C4 | | 01C4 | ||
| [[# | | [[#GPUREG_LIGHTING_CONFIG1|GPUREG_LIGHTING_CONFIG1]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_FUNC_MODE1 | |PICA_REG_FRAG_LIGHT_FUNC_MODE1 | ||
|- | |- | ||
| 01C5 | | 01C5 | ||
| [[# | | [[#GPUREG_LIGHTING_LUT_INDEX|GPUREG_LIGHTING_LUT_INDEX]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT | |PICA_REG_FRAG_LIGHT_LUT | ||
|- | |- | ||
| 01C6 | | 01C6 | ||
| [[# | | [[#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_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT_DATA0 | |PICA_REG_FRAG_LIGHT_LUT_DATA0 | ||
|- | |- | ||
| 01C9 | | 01C9 | ||
| [[# | | [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT_DATA1 | |PICA_REG_FRAG_LIGHT_LUT_DATA1 | ||
|- | |- | ||
| 01CA | | 01CA | ||
| [[# | | [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT_DATA2 | |PICA_REG_FRAG_LIGHT_LUT_DATA2 | ||
|- | |- | ||
| 01CB | | 01CB | ||
| [[# | | [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT_DATA3 | |PICA_REG_FRAG_LIGHT_LUT_DATA3 | ||
|- | |- | ||
| 01CC | | 01CC | ||
| [[# | | [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT_DATA4 | |PICA_REG_FRAG_LIGHT_LUT_DATA4 | ||
|- | |- | ||
| 01CD | | 01CD | ||
| [[# | | [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT_DATA5 | |PICA_REG_FRAG_LIGHT_LUT_DATA5 | ||
|- | |- | ||
| 01CE | | 01CE | ||
| [[# | | [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT_DATA6 | |PICA_REG_FRAG_LIGHT_LUT_DATA6 | ||
|- | |- | ||
| 01CF | | 01CF | ||
| [[# | | [[#GPUREG_LIGHTING_LUT_DATA|GPUREG_LIGHTING_LUT_DATA]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUT_DATA7 | |PICA_REG_FRAG_LIGHT_LUT_DATA7 | ||
|- | |- | ||
| 01D0 | | 01D0 | ||
| [[# | | [[#GPUREG_LIGHTING_LUTINPUT_ABS|GPUREG_LIGHTING_LUTINPUT_ABS]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_ABSLUTINPUT | |PICA_REG_FRAG_LIGHT_ABSLUTINPUT | ||
|- | |- | ||
| 01D1 | | 01D1 | ||
| [[# | | [[#GPUREG_LIGHTING_LUTINPUT_SELECT|GPUREG_LIGHTING_LUTINPUT_SELECT]] | ||
|? | |? | ||
|PICA_REG_FRAG_LIGHT_LUTINPUT | |PICA_REG_FRAG_LIGHT_LUTINPUT | ||
|- | |- | ||
| 01D2 | | 01D2 | ||
| [[# | | [[#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_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_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 | ||
| | | Shadow factor enable, usually set to bit16 OR bit18 OR bit19 | ||
|- | |- | ||
| 1 | | 1 | ||
| | | Unknown, set to 0 | ||
|- | |- | ||
| 2 | | 2-3 | ||
| | | "Fresnel selector" (see below) | ||
|- | |- | ||
| | | 4-7 | ||
| | | "Config", "Light env config" (see below) | ||
|- | |- | ||
| | | 8-15 | ||
| | | Unknown, set to 4 | ||
|- | |- | ||
| | | 16 | ||
| | | "Shadow primary", 0=disabled, 1=enabled | ||
|- | |- | ||
| | | 17 | ||
| | | "Shadow secondary", 0=disabled, 1=enabled | ||
|- | |- | ||
| | | 18 | ||
| | | "Invert shadow", 0=disabled, 1=enabled | ||
|- | |- | ||
| | | 19 | ||
| | | "Shadow alpha", 0=disabled, 1=enabled | ||
|- | |- | ||
| | | 20-21 | ||
| | | Unknown, set to 0 | ||
|- | |- | ||
| | | 22-23 | ||
| | | "Bump selector" | ||
|- | |- | ||
| | | 24-25 | ||
| | | "Shadow selector" | ||
|- | |- | ||
| | | 26 | ||
| | | Unknown, set to 0 | ||
|- | |- | ||
| | | 27 | ||
| | | "Clamp highlights", 0=disabled, 1=enabled | ||
|- | |- | ||
| | | 28-29 | ||
| | | "Bump mode", "Light env texy usage" (see below) | ||
|- | |- | ||
| | | 30 | ||
| | | "Bump renorm", 0=enabled, 1=disabled | ||
|- | |- | ||
| | | 31 | ||
| | | Unknown, set to 1 | ||
|} | |||
Fresnel selector constants: | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| NO_FRESNEL | |||
|- | |||
| 1 | |||
| PRI_ALPHA_FRESNEL | |||
|- | |- | ||
| | | 2 | ||
| | | SEC_ALPHA_FRESNEL | ||
|- | |- | ||
| | | 3 | ||
| | | PRI_SEC_ALPHA_FRESNEL | ||
|} | |||
Light env config constants: | |||
{| class="wikitable" border="1" | |||
! Value | |||
! Description | |||
|- | |- | ||
| | | 0 | ||
| | | LIGHT_ENV_LAYER_CONFIG0 | ||
|- | |- | ||
| | | 1 | ||
| | | LIGHT_ENV_LAYER_CONFIG1 | ||
|- | |- | ||
| | | 2 | ||
| | | LIGHT_ENV_LAYER_CONFIG2 | ||
|- | |- | ||
| | | 3 | ||
| | | 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) | |||
|} | |} | ||