GPU/Internal Registers: Difference between revisions
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 | ||
|} | |} | ||
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) | ||
|} | |} | ||
Line 4,508: | Line 4,503: | ||
| 24-27 | | 24-27 | ||
| Scaler selector for lut_RR | | Scaler selector for lut_RR | ||
|} | |} | ||
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 === |