diff options
Diffstat (limited to 'indra/newview')
16 files changed, 58 insertions, 15 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 4293fa3034..594f40e5a1 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -7794,6 +7794,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> @@ -11618,7 +11629,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 94711be473..0283104a76 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 aac75a0739..948387a6ed 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 2121088405..1b7b0c1937 100644 --- a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl @@ -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,min(1, (pos.z - refPos.z) / 10)) * water_mask; +#ifdef SHORELINE_FADE +    fade = max(0,min(1, (pos.z - refPos.z) / 10)) +#else +    fade = 1 * water_mask; +#endif +      distort2 = mix(distort, distort2, min(1, fade * 10));      depth = texture(depthMap, distort2).r; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index c351f63e85..e8546d422b 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3413,7 +3413,6 @@ LLSD LLAppViewer::getViewerInfo() const          info["PACKETS_LOST"] = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_LOST);          info["PACKETS_IN"] = packets_in;          info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal(); -        info["PACKETS_DROPPED"] = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_DROPPED);      }      if (mServerReleaseNotesURL.empty()) diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index 4f52ab644c..73aabf49d1 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -121,7 +121,6 @@ LLTrace::CountStatHandle<>  FPS("FPS", "Frames rendered"),                              PACKETS_IN("Packets In", "Packets received"),                              PACKETS_LOST("packetsloststat", "Packets lost"),                              PACKETS_OUT("packetsoutstat", "Packets sent"), -                            PACKETS_DROPPED("packetsdropped", "Packets dropped"),                              TEXTURE_PACKETS("texturepacketsstat", "Texture data packets received"),                              CHAT_COUNT("chatcount", "Chat messages sent"),                              IM_COUNT("imcount", "IMs sent"), @@ -648,7 +647,6 @@ void send_viewer_stats(bool include_preferences)      fail["send_packet"] = (S32) gMessageSystem->mSendPacketFailureCount;      fail["dropped"] = (S32) gMessageSystem->mDroppedPackets; -    fail["ring_dropped"] = (S32)gMessageSystem->mPacketRing.getNumDroppedPackets();      fail["resent"] = (S32) gMessageSystem->mResentPackets;      fail["failed_resends"] = (S32) gMessageSystem->mFailedResendPackets;      fail["off_circuit"] = (S32) gMessageSystem->mOffCircuitPackets; diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h index 4cab2b48a5..8aed1c537e 100644 --- a/indra/newview/llviewerstats.h +++ b/indra/newview/llviewerstats.h @@ -119,7 +119,6 @@ extern LLTrace::CountStatHandle<>           FPS,                                              PACKETS_IN,                                              PACKETS_LOST,                                              PACKETS_OUT, -                                            PACKETS_DROPPED,                                              TEXTURE_PACKETS,                                              CHAT_COUNT,                                              IM_COUNT, diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 609ad38e96..a0723db479 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -489,7 +489,12 @@ void LLViewerTexture::updateClass()      }      LLViewerMediaTexture::updateClass(); - +    // This is a divisor used to determine how much VRAM from our overall VRAM budget to use. +    // This is **cumulative** on whatever the detected or manually set VRAM budget is. +    // If we detect 2048MB of VRAM, this will, by default, only use 1024. +    // If you set 1024MB of VRAM, this will, by default, use 512. +    // -Geenz 2025-03-03 +    static LLCachedControl<U32> tex_vram_divisor(gSavedSettings, "RenderTextureVRAMDivisor", 2);      static LLCachedControl<U32> max_vram_budget(gSavedSettings, "RenderMaxVRAMBudget", 0);      F64 texture_bytes_alloc = LLImageGL::getTextureBytesAllocated() / 1024.0 / 512.0; @@ -500,6 +505,7 @@ void LLViewerTexture::updateClass()      F32 used = (F32)ll_round(texture_bytes_alloc + vertex_bytes_alloc);      F32 budget = max_vram_budget == 0 ? (F32)gGLManager.mVRAM : (F32)max_vram_budget; +    budget /= tex_vram_divisor;      // Try to leave at least half a GB for everyone else and for bias,      // but keep at least 768MB for ourselves diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index f5bbff144b..b07957a492 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -901,7 +901,7 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag      if (imagep->getBoostLevel() < LLViewerFetchedTexture::BOOST_HIGH)  // don't bother checking face list for boosted textures      { -        static LLCachedControl<F32> texture_scale_min(gSavedSettings, "TextureScaleMinAreaFactor", 0.04f); +        static LLCachedControl<F32> texture_scale_min(gSavedSettings, "TextureScaleMinAreaFactor", 0.0095f);          static LLCachedControl<F32> texture_scale_max(gSavedSettings, "TextureScaleMaxAreaFactor", 25.f);          F32 max_vsize = 0.f; @@ -943,8 +943,9 @@ void LLViewerTextureList::updateImageDecodePriority(LLViewerFetchedTexture* imag                      // Scale desired texture resolution higher or lower depending on texture scale                      // -                    // Minimum usage examples: a 1024x1024 texture with aplhabet, runing string -                    // shows one letter at a time +                    // Minimum usage examples: a 1024x1024 texture with aplhabet (texture atlas), +                    // runing string shows one letter at a time. If texture has ten 100px symbols +                    // per side, minimal scale is (100/1024)^2 = 0.0095                      //                      // Maximum usage examples: huge chunk of terrain repeats texture                      // TODO: make this work with the GLTF texture transforms diff --git a/indra/newview/llviewerthrottle.cpp b/indra/newview/llviewerthrottle.cpp index dce85bcb03..b0a00c29a4 100644 --- a/indra/newview/llviewerthrottle.cpp +++ b/indra/newview/llviewerthrottle.cpp @@ -304,7 +304,6 @@ void LLViewerThrottle::updateDynamicThrottle()      }      mUpdateTimer.reset(); -    // Todo: account for dropped packets from LLPacketRing (or make the thing threaded)      LLUnit<F32, LLUnits::Percent> mean_packets_lost = LLViewerStats::instance().getRecording().getMean(LLStatViewer::PACKETS_LOST_PERCENT);      if (mean_packets_lost > TIGHTEN_THROTTLE_THRESHOLD)      { diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index a1eed0340b..899733ccc3 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -795,7 +795,6 @@ void LLWorld::updateNetStats()      S32 packets_in = gMessageSystem->mPacketsIn - mLastPacketsIn;      S32 packets_out = gMessageSystem->mPacketsOut - mLastPacketsOut;      S32 packets_lost = gMessageSystem->mDroppedPackets - mLastPacketsLost; -    S32 ring_packets_dropped = gMessageSystem->mPacketRing.getNumDroppedPackets();      F64Bits actual_in_bits(gMessageSystem->mPacketRing.getAndResetActualInBits());      F64Bits actual_out_bits(gMessageSystem->mPacketRing.getAndResetActualOutBits()); @@ -806,7 +805,6 @@ void LLWorld::updateNetStats()      add(LLStatViewer::PACKETS_IN, packets_in);      add(LLStatViewer::PACKETS_OUT, packets_out);      add(LLStatViewer::PACKETS_LOST, packets_lost); -    add(LLStatViewer::PACKETS_DROPPED, ring_packets_dropped);      F32 total_packets_in = (F32)LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_IN);      if (total_packets_in > 0.f) diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 92f63a1820..e17321e698 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -759,6 +759,9 @@       name="SelectedOutfitTextColor"       reference="EmphasisColor" />      <color +     name="SearchableControlHighlightColor" +     value="0.5 0.1 0.1 1" /> +    <color       name="SilhouetteChildColor"       value="0.13 0.42 0.77 1" />      <color | 
