diff options
| author | Erik Kundiman <erik@megapahit.org> | 2025-03-06 09:36:23 +0800 | 
|---|---|---|
| committer | Erik Kundiman <erik@megapahit.org> | 2025-03-06 09:36:23 +0800 | 
| commit | d13a43c74f9c7e450f87edab0bcd9db39ee7c56e (patch) | |
| tree | d40e4e3c1f5ce0cf80b11b2d03568c48cfc5e88f /indra/newview/app_settings | |
| parent | 5bf93b728ca7c671b6b812e753a40dcdb55b5d0d (diff) | |
| parent | aa060ae56c62869bb1d0f590e9a6eb681aabcefc (diff) | |
Merge remote-tracking branch 'secondlife/release/2025.03' into 2025.03
Diffstat (limited to 'indra/newview/app_settings')
8 files changed, 46 insertions, 6 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1aec56447d..7b764d47b3 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -7860,6 +7860,17 @@      <key>Value</key>      <integer>0</integer>    </map> +  <key>RenderTextureVRAMDivisor</key> +  <map> +      <key>Comment</key> +      <string>Divisor for maximum amount of VRAM the viewer will use for textures. 1 = all the VRAM.  Used in conjunction with RenderMaxVRAMBudget.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>U32</string> +      <key>Value</key> +      <integer>2</integer> +  </map>    <key>RenderMinFreeMainMemoryThreshold</key>    <map>      <key>Comment</key> @@ -11684,7 +11695,7 @@          <key>Type</key>          <string>F32</string>          <key>Value</key> -        <real>0.04</real> +        <real>0.0095</real>      </map>      <key>TextureScaleMaxAreaFactor</key>      <map> diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl index d32455d70c..fa94fb98f0 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl @@ -80,6 +80,17 @@ vec3 atmosFragLightingLinear(vec3 light, vec3 additive, vec3 atten);  vec4 decodeNormal(vec4 norm); +vec3 clampHDRRange(vec3 color) +{ +    // Why do this? +    // There are situations where the color range will go to something insane - potentially producing infs and NaNs even. +    // This is a safety measure to prevent that. +    // As to the specific number there - allegedly some HDR displays expect values to be in the 0-11.2 range. Citation needed. +    // -Geenz 2025-03-05 +    color = mix(color, vec3(0.0), isnan(color)); +    return clamp(color, vec3(0.0), vec3(11.2)); +} +  float calcLegacyDistanceAttenuation(float distance, float falloff)  {      float dist_atten = 1.0 - clamp((distance + falloff)/(1.0 + falloff), 0.0, 1.0); diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl index 9797bcd2ce..4e737492a7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl @@ -69,6 +69,8 @@ void dofSampleNear(inout vec4 diff, inout float w, float min_sc, vec2 tc)      w += wg;  } +vec3 clampHDRRange(vec3 color); +  void main()  {      vec2 tc = vary_fragcoord.xy; @@ -120,5 +122,6 @@ void main()          diff /= w;      } +    diff.rgb = clampHDRRange(diff.rgb);      frag_color = diff;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl index befd2ae6da..4ccc6f54a8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl @@ -43,6 +43,8 @@ vec3 legacyGamma(vec3 color)      return c;  } +vec3 clampHDRRange(vec3 color); +  void main()  {      //this is the one of the rare spots where diffuseRect contains linear color values (not sRGB) @@ -53,6 +55,7 @@ void main()      diff.rgb = legacyGamma(diff.rgb);  #endif -    frag_color = max(diff, vec4(0)); +    diff.rgb = clampHDRRange(diff.rgb); +    frag_color = diff;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl index 32b0a1ac8e..c05b4eed7a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl @@ -71,6 +71,7 @@ float noise(vec2 x) {  //============================= +vec3 clampHDRRange(vec3 color);  void main() @@ -84,6 +85,7 @@ void main()      diff.rgb += nz*0.003;  #endif +    diff.rgb = clampHDRRange(diff.rgb);      frag_color = diff;      gl_FragDepth = texture(depthMap, vary_fragcoord.xy).r; diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredTonemap.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredTonemap.glsl index c4610bffac..1f01c7f16a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredTonemap.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredTonemap.glsl @@ -34,6 +34,8 @@ in vec2 vary_fragcoord;  vec3 linear_to_srgb(vec3 cl);  vec3 toneMap(vec3 color); +vec3 clampHDRRange(vec3 color); +  void main()  {      //this is the one of the rare spots where diffuseRect contains linear color values (not sRGB) @@ -45,6 +47,7 @@ void main()      diff.rgb = clamp(diff.rgb, vec3(0.0), vec3(1.0));  #endif +    diff.rgb = clampHDRRange(diff.rgb);      //debugExposure(diff.rgb);      frag_color = max(diff, vec4(0));  } diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index 2e288184bf..6cec65ad83 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -104,6 +104,7 @@ vec3 pbrBaseLight(vec3 diffuseColor,                    vec3 atten);  GBufferInfo getGBuffer(vec2 screenpos); +vec3 clampHDRRange(vec3 color);  void adjustIrradiance(inout vec3 irradiance, float ambocc)  { @@ -278,6 +279,7 @@ void main()      float final_scale = 1;      if (classic_mode > 0)          final_scale = 1.1; -    frag_color.rgb = max(color.rgb * final_scale, vec3(0)); //output linear since local lights will be added to this shader's results + +    frag_color.rgb = clampHDRRange(color.rgb * final_scale); //output linear since local lights will be added to this shader's results      frag_color.a = 0.0;  } diff --git a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl index 18dc367568..a194832b1d 100644 --- a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl @@ -255,7 +255,7 @@ void main()      shadow = sampleDirectionalShadow(pos.xyz, norm.xyz, distort);  #endif -    vec3 sunlit_linear = srgb_to_linear(sunlit); +    vec3 sunlit_linear = sunlit;      float fade = 1.0;  #ifdef TRANSPARENT_WATER      float depth = texture(depthMap, distort).r; @@ -263,7 +263,12 @@ void main()      vec3 refPos = getPositionWithNDC(vec3(distort*2.0-vec2(1.0), depth*2.0-1.0));      // Calculate some distance fade in the water to better assist with refraction blending and reducing the refraction texture's "disconnect". -    fade = max(0.0,min(1.0, (pos.z - refPos.z) / 10.0)) * water_mask; +#ifdef SHORELINE_FADE +    fade = max(0.0,min(1.0, (pos.z - refPos.z) / 10.0)) +#else +    fade = 1.0 * water_mask; +#endif +      distort2 = mix(distort, distort2, min(1.0, fade * 10.0));      depth = texture(depthMap, distort2).r; @@ -317,7 +322,7 @@ void main()      pbrPunctual(diffuseColor, specularColor, perceptualRoughness, metallic, normalize(wavef+up*max(dist, 32.0)/32.0*(1.0-vdu)), v, normalize(light_dir), nl, diffPunc, specPunc); -    vec3 punctual = clamp(nl * (diffPunc + specPunc), vec3(0), vec3(10)) * sunlit_linear * shadow; +    vec3 punctual = clamp(nl * (diffPunc + specPunc), vec3(0), vec3(10)) * sunlit_linear * shadow * atten;      radiance *= df2.y;      //radiance = toneMapNoExposure(radiance);      vec3 color = vec3(0); | 
