GPU/Internal Registers: Difference between revisions

Luigi2us (talk | contribs)
Line 4,196: Line 4,196:
|}
|}


The light environment configuration controls which LUTs are available for use. If a LUT is not available in the selected configuration, its value will always read a constant 1.0 regardless of the enable state in GPUREG_LIGHTING_CONFIG1.
The light environment configuration controls which LUTs are available for use. If a LUT is not available in the selected configuration, its value will always read a constant 1.0 regardless of the enable state in GPUREG_LIGHTING_CONFIG1. If lut_RR is enabled but not lut_RG or lut_RB, the output of lut_RR is used for the three components; Red, Green and Blue.
 
Light env config constants:
Light env config constants:


Line 4,419: Line 4,420:
| 24-27
| 24-27
| Input selector for lut_RR
| Input selector for lut_RR
|-
| 28-31
| Input selector for lut_DA
|}
|}


Line 4,475: Line 4,473:
| 25
| 25
| abs() flag for the input of lut_RR (0=enabled, 1=disabled)
| abs() flag for the input of lut_RR (0=enabled, 1=disabled)
|-
| 29
| abs() flag for the input of lut_DA (0=enabled, 1=disabled)
|}
|}


Line 4,508: Line 4,503:
| 24-27
| 24-27
| Scaler selector for lut_RR
| Scaler selector for lut_RR
|-
| 28-31
| Scaler selector for lut_DA
|}
|}


Line 4,604: Line 4,596:


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.
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.
lut_DA: The input domain is [0.0, 1.0], and the index is an unsigned 8-bit number [0, 255] instead.


Format of an entry:
Format of an entry:
Line 4,615: Line 4,609:
|-
|-
| 12-22
| 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)
| Absolute value of the difference between the next entry and this entry, used to implement linear interpolation (11bit fractional number; floatval = x / 2048; however 0x7FF is treated as 1.0)
|-
|-
| 23
| 23
Line 4,698: Line 4,692:
|}
|}


These registers (along with _Z) represent the spot direction (unitary) vector of the corresponding light .
These registers (along with _Z) represent the spot direction (unitary) vector of the corresponding light.


=== GPUREG_LIGHTx_SPOTDIR_Z ===
=== GPUREG_LIGHTx_SPOTDIR_Z ===
Line 4,714: Line 4,708:
=== GPUREG_LIGHTx_ATTENUATION_BIAS ===
=== GPUREG_LIGHTx_ATTENUATION_BIAS ===


These registers contain the distance attenuation bias value (float20 = 1.7.12) of the corresponding light.
These registers contain the distance attenuation bias value (float20 = 1.7.12) of the corresponding light. The attenuation factor is lut_DA(clip(bias + scale*distance, 0.0, 1.0)).


=== GPUREG_LIGHTx_ATTENUATION_SCALE ===
=== GPUREG_LIGHTx_ATTENUATION_SCALE ===


These registers contain the distance attenuation scale value (float20 = 1.7.12) of the corresponding light.
These registers contain the distance attenuation scale value (float20 = 1.7.12) of the corresponding light. The attenuation factor is lut_DA(clip(bias + scale*distance, 0.0, 1.0)).


=== GPUREG_LIGHTx_AMBIENT ===
=== GPUREG_LIGHTx_AMBIENT ===