Changes

262 bytes added ,  23:47, 26 November 2015
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 ===