summaryrefslogtreecommitdiff
path: root/indra/newview/app_settings
diff options
context:
space:
mode:
authorJonathan "Geenz" Goodman <geenz@lindenlab.com>2026-07-07 08:06:22 -0400
committerGitHub <noreply@github.com>2026-07-07 08:06:22 -0400
commit3d465f6c966f0a2fcfd5d3c9effb6ce20c2754c8 (patch)
tree6e54cc193b39ab8ded12f4fa343ada52f75b0c61 /indra/newview/app_settings
parentf2c356fc7130ce5e38b994dcfa1e210609b458b9 (diff)
parentb8762cb7999197f7da36b4820761298e85bdfa6f (diff)
Merge pull request #5982 from secondlife/geenz/texture-streaming-tweaks
Geenz/texture streaming tweaks
Diffstat (limited to 'indra/newview/app_settings')
-rw-r--r--indra/newview/app_settings/settings.xml300
1 files changed, 50 insertions, 250 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 81299a5b71..45a7dced5c 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8002,17 +8002,6 @@
<key>Value</key>
<integer>1</integer>
</map>
- <key>RenderMinFreeMainMemoryThreshold</key>
- <map>
- <key>Comment</key>
- <string>If available free physical memory is below this value textures get agresively scaled down</string>
- <key>Persist</key>
- <integer>0</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>512</integer>
- </map>
<key>RenderLowMemMinDiscardIncrement</key>
<map>
<key>Comment</key>
@@ -8035,17 +8024,6 @@
<key>Value</key>
<real>0.1</real>
</map>
- <key>RenderMaxTextureIndex</key>
- <map>
- <key>Comment</key>
- <string>Maximum texture index to use for indexed texture rendering.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>U32</string>
- <key>Value</key>
- <integer>16</integer>
- </map>
<key>RenderMaxTextureResolution</key>
<map>
<key>Comment</key>
@@ -8060,7 +8038,7 @@
<key>RenderTextureQuality</key>
<map>
<key>Comment</key>
- <string>Texture quality preset: 0=Low, 1=Medium, 2=High, 3=Ultra. Drives RenderMaxTextureResolution, the four TextureChannel* exponents, and TextureDistanceDiscardPower.</string>
+ <string>Texture quality preset: 0=Low, 1=Medium, 2=High, 3=Ultra. Drives RenderMaxTextureResolution, TexturePixelToTexelRatio, TexturePressureTightenRate, TexturePressureRelaxRate, and TextureChannelRatio* (Normal/BaseColor/Specular/Emissive). The pressure water marks (TexturePressureHighWater/LowWater) are constant across tiers.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -8079,17 +8057,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>RenderDebugTextureBind</key>
- <map>
- <key>Comment</key>
- <string>Enable texture bind performance test.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>RenderDelayCreation</key>
<map>
<key>Comment</key>
@@ -9406,17 +9373,6 @@
<key>Value</key>
<integer>64</integer>
</map>
- <key>RenderReservedTextureIndices</key>
- <map>
- <key>Comment</key>
- <string>Count of texture indices to reserve for shadow and reflection maps when using indexed texture rendering. Probably only want to set from the login screen.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>14</integer>
- </map>
<key>RenderResolutionDivisor</key>
<map>
<key>Comment</key>
@@ -11871,10 +11827,10 @@
<key>Value</key>
<real>20.0</real>
</map>
- <key>TextureChannelNormal</key>
+ <key>TextureChannelRatioNormal</key>
<map>
<key>Comment</key>
- <string>Per-channel discard exponent for normal maps. 1.0 = baseline; lower = more aggressive. Driven by the RenderTextureQuality preset.</string>
+ <string>Per-channel pixel:texel ratio multiplier for normal maps (texels per pixel, applied on top of the global TexturePixelToTexelRatio). 1.0 = full quality; lower = coarser. Driven by the RenderTextureQuality preset.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -11882,21 +11838,21 @@
<key>Value</key>
<real>1.0</real>
</map>
- <key>TextureChannelBaseColor</key>
+ <key>TextureChannelRatioBaseColor</key>
<map>
<key>Comment</key>
- <string>Per-channel discard exponent for base color / diffuse. 1.0 = baseline; lower = more aggressive. Driven by the RenderTextureQuality preset.</string>
+ <string>Per-channel pixel:texel ratio multiplier for base color / diffuse (texels per pixel, applied on top of the global TexturePixelToTexelRatio). 1.0 = full quality. Driven by the RenderTextureQuality preset.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.75</real>
+ <real>1.0</real>
</map>
- <key>TextureChannelSpecular</key>
+ <key>TextureChannelRatioSpecular</key>
<map>
<key>Comment</key>
- <string>Per-channel discard exponent for specular / metallic-roughness. 1.0 = baseline; lower = more aggressive. Driven by the RenderTextureQuality preset.</string>
+ <string>Per-channel pixel:texel ratio multiplier for specular / metallic-roughness (texels per pixel, applied on top of the global TexturePixelToTexelRatio). 0.5 = half resolution (specular detail is usually less perceptible than diffuse). Driven by the RenderTextureQuality preset.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -11904,16 +11860,16 @@
<key>Value</key>
<real>0.5</real>
</map>
- <key>TextureChannelEmissive</key>
+ <key>TextureChannelRatioEmissive</key>
<map>
<key>Comment</key>
- <string>Per-channel discard exponent for emissive. 1.0 = baseline; lower = more aggressive. Driven by the RenderTextureQuality preset.</string>
+ <string>Per-channel pixel:texel ratio multiplier for emissive (texels per pixel, applied on top of the global TexturePixelToTexelRatio). 0.5 = half resolution. Driven by the RenderTextureQuality preset.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.75</real>
+ <real>0.5</real>
</map>
<key>TextureMaxDiscardOverride</key>
<map>
@@ -11926,165 +11882,87 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>TextureMemoryHighWaterMark</key>
+ <key>TexturePixelToTexelRatio</key>
<map>
<key>Comment</key>
- <string>Fraction of budget (0..1) at which the pressure controller bypasses smoothing and slams to cap. Last-ditch min-discard also creeps without waiting for mult_progress.</string>
+ <string>Max texels per screen pixel the streamer will allocate (the "R" in a 1:R pixel:texel ratio). 1.0 = one texel per pixel. VRAM pressure walks the effective ratio down from here.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.8</real>
- </map>
- <key>TextureMemoryPressureBackoffStart</key>
- <map>
- <key>Comment</key>
- <string>Fraction of the VRAM target at which the pressure ramp starts (0..1). Lower = earlier headroom-building; 1.0 disables backoff (ramp only above target).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.85</real>
- </map>
- <key>TextureMemoryPressureMaxMultiplier</key>
- <map>
- <key>Comment</key>
- <string>Upper bound on the VRAM-pressure distance multiplier (&gt;= 1). Mostly defensive -- at mult=64 the streaming ramp collapses to ~ramp_range/64, already extreme. Higher allows even more aggressive compression in tight-budget scenes.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>64.0</real>
- </map>
- <key>TextureLastDitchEngageProgress</key>
- <map>
- <key>Comment</key>
- <string>mult_progress (0..1) at which the last-ditch floor starts creeping up. The floor only advances when mult is at or above this fraction of its cap AND prediction is still over budget. Decays back toward 0 whenever prediction is under budget.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.95</real>
- </map>
- <key>TextureLastDitchRampRate</key>
- <map>
- <key>Comment</key>
- <string>Rate (discard levels/sec) at which sLastDitchMinDiscard creeps up while engaged. 0.5 = takes ~2 sec to add one discard level. Mirrors sDesiredDiscardBias ramp shape.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>TextureLastDitchDecayRate</key>
- <map>
- <key>Comment</key>
- <string>Rate (discard levels/sec) at which sLastDitchMinDiscard decays back to 0 when prediction is under budget.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>TextureLastDitchMinDiscardMax</key>
- <map>
- <key>Comment</key>
- <string>Hard ceiling on sLastDitchMinDiscard. At 13 the floor can climb all the way to the deepest meaningful mip; lower values cap how aggressive the last-ditch escalation can get before we are simply out of discards.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>13.0</real>
+ <real>1.0</real>
</map>
- <key>TextureMemoryPressurePredictionGain</key>
+ <key>TextureBackgroundMinRatio</key>
<map>
<key>Comment</key>
- <string>Power exponent mapping predicted-over-budget ratio to target multiplier. target_mult = pred_over^gain. Higher gain saturates faster.</string>
+ <string>Lowest pixel:texel ratio the streamer decays to while the viewer is backgrounded, to free VRAM for other apps. Lower frees more but re-rezzes slower on return. Restored when focus comes back.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>10.0</real>
+ <real>0.001</real>
</map>
- <key>TextureMemoryPressureSmoothingRate</key>
+ <key>TexturePressureHighWater</key>
<map>
<key>Comment</key>
- <string>Lerp rate (1/sec) at which the pressure multiplier converges to its prediction-driven target. Higher = faster response, lower = smoother. Default 4 reaches ~63% in 0.25s.</string>
+ <string>High water mark as a fraction of the VRAM budget. When used VRAM crosses this, the global pixel:texel ratio tightens (backs off detail) at TexturePressureTightenRate. Held at 0.90 - it's a physical "crossed the budget" threshold, not a tier preference.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>4.0</real>
+ <real>0.90</real>
</map>
- <key>TextureTerrainDistanceFloor</key>
+ <key>TexturePressureLowWater</key>
<map>
<key>Comment</key>
- <string>Minimum distance factor for BOOST_TERRAIN textures. Keeps combined &gt; 0 so VRAM pressure can evict terrain. Lower = higher idle quality, less pressure response.</string>
+ <string>Low water mark as a fraction of the VRAM budget. When used VRAM drops below this, the global pixel:texel ratio relaxes (restores detail) at TexturePressureRelaxRate. The band between low and high is the hysteresis zone where the ratio holds steady - wide enough to prevent sawtooth.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.01</real>
+ <real>0.70</real>
</map>
- <key>TextureTerrainCoverageFraction</key>
+ <key>TexturePressureTightenRate</key>
<map>
<key>Comment</key>
- <string>Synthetic on-screen coverage fraction for BOOST_TERRAIN textures (no faces are registered). Higher = higher idle quality, less pressure response.</string>
+ <string>Rate (ratio units/sec) at which the global pixel:texel ratio drops while used VRAM is above the high watermark. Deliberately slow so eviction (scaleDown draining) frees bytes before the next step - prevents over-shoot / thrash.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.99</real>
+ <real>0.30</real>
</map>
- <key>TextureAgentAvatarBoost</key>
+ <key>TexturePressureRelaxRate</key>
<map>
<key>Comment</key>
- <string>Quality boost (0..1) for textures on the agent's avatar (rigged mesh / animated objects). Lower = higher quality. Preference, not exemption - pressure can still evict.</string>
+ <string>Rate (ratio units/sec) at which the global pixel:texel ratio climbs back toward TexturePixelToTexelRatio while used VRAM is below the low watermark. Typically slower than the tighten rate so detail returns gradually as headroom appears.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.5</real>
+ <real>0.10</real>
</map>
- <key>TextureBackgroundFactorRatePerSec</key>
+ <key>TextureUpRezMargin</key>
<map>
<key>Comment</key>
- <string>Per-second ramp rate of the background-window discard floor (0..1). Snaps to 0 in foreground. Default 0.011 ~ 90s to saturate.</string>
+ <string>Hysteresis dead-band (in mip levels) around a texture's current discard. A texture only fetches a finer mip when its ideal discard falls more than this below the current level, and only evicts when it rises more than this above - prevents fetch/scaleDown thrash at mip boundaries when an object slowly recedes.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.011</real>
- </map>
- <key>TextureBackgroundDiscardOffset</key>
- <map>
- <key>Comment</key>
- <string>Backgrounded textures will only discard up to (dim_max - offset). e.g. a 2048 texture (dim_max 11) with offset 2 caps the background floor at discard 9. 0 disables the cap (background can drive to max discard).</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>S32</string>
- <key>Value</key>
- <integer>2</integer>
+ <real>0.2</real>
</map>
-
- <key>TextureCloseBubbleMeters</key>
+ <key>TextureCooldownStepSeconds</key>
<map>
<key>Comment</key>
- <string>Close-camera bubble (meters). Faces inside this distance get dist_factor = 0 (no discard contribution); the ramp to 1 spans (bubble, draw_distance]. Shrinks toward TextureCloseBubbleMinMeters as VRAM pressure ramps the multiplier toward its cap.</string>
+ <string>While backgrounded, the pixel:texel ratio drops one mip toward TextureBackgroundMinRatio every this many seconds.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -12092,95 +11970,39 @@
<key>Value</key>
<real>5.0</real>
</map>
- <key>TextureCloseBubbleMinMeters</key>
- <map>
- <key>Comment</key>
- <string>Floor (meters) for the close-camera bubble under maximum VRAM pressure. At sMemoryPressureMultiplier = TextureMemoryPressureMaxMultiplier the bubble collapses to this value, allowing eviction of even close textures when nothing else fits.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>3.0</real>
- </map>
- <key>TextureCloseBubbleShrinkThreshold</key>
- <map>
- <key>Comment</key>
- <string>Bubble stays at full size until mult_progress exceeds this fraction (0..1) of its range to the cap. Above that, bubble lerps from full to TextureCloseBubbleMinMeters. Keeps the bubble out of the normal feedback loop.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.8</real>
- </map>
- <key>TextureCloseBubbleTrackRate</key>
+ <key>TextureGCStepFrames</key>
<map>
<key>Comment</key>
- <string>Rate (1/sec) at which the actual bubble tracks its target. Lower = smoother, slower to react. Damps short-term multiplier swings so close textures don't yo-yo.</string>
+ <string>Foreground GC cooldown, in rendered frames. For every this many frames a texture goes without being drawn, its mip drops by TextureGCStepMips. Resets when the texture is drawn again.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>0.5</real>
- </map>
- <key>TextureDistanceDiscardPower</key>
- <map>
- <key>Comment</key>
- <string>Exponent on the distance factor (face_distance / draw_distance). 1.0 = linear; lower = textures hit max discard sooner with distance. Default 0.5 = sqrt.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
+ <string>U32</string>
<key>Value</key>
- <real>0.5</real>
+ <integer>5</integer>
</map>
- <key>TextureSizeDiscardPower</key>
+ <key>TextureGCStepMips</key>
<map>
<key>Comment</key>
- <string>Exponent on the on-screen size factor (1 - coverage). 1.0 = linear; lower = small-on-screen textures attenuate sooner.</string>
+ <string>Mip levels dropped each time a TextureGCStepFrames cooldown elapses. 1 is gentlest; higher sheds VRAM faster in coarser jumps.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
- <string>F32</string>
+ <string>U32</string>
<key>Value</key>
- <real>1.0</real>
- </map>
- <key>TextureStalenessIntervalSeconds</key>
- <map>
- <key>Comment</key>
- <string>Seconds per staleness step. Per-interval increment is 1/max_discard so any texture saturates after interval * max_discard seconds idle.</string>
- <key>Persist</key>
<integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>5.0</real>
</map>
- <key>TextureBindDecaySeconds</key>
+ <key>TextureFetchVisibilityFrames</key>
<map>
<key>Comment</key>
- <string>Grace seconds after a bind during which the staleness factor stays at 0. Prevents intermittently-bound textures from ramping. 0 disables the grace period.</string>
+ <string>Only fetch a texture if it was drawn within this many rendered frames; out-of-view content isn't fetched. Minimum 1 (0 is clamped up). Boosted/UI textures, avatar bakes, and callback textures are exempt.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
- <string>F32</string>
+ <string>U32</string>
<key>Value</key>
- <real>5.0</real>
- </map>
- <key>TextureFetchPressureScale</key>
- <map>
- <key>Comment</key>
- <string>Pending-fetch divisor for the bias floor: bias floor = 1 + clamp(pending / scale, 0, 3). Lower = bias rises sooner under load floods.</string>
- <key>Persist</key>
<integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1000.0</real>
</map>
-
<key>TextureDecodeDisabled</key>
<map>
<key>Comment</key>
@@ -12214,28 +12036,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>TextureDiscardBackgroundedTime</key>
- <map>
- <key>Comment</key>
- <string>Specify how long to wait before discarding texture data after viewer is backgrounded. (zero or negative to disable)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>60.0</real>
- </map>
- <key>TextureDiscardMinimizedTime</key>
- <map>
- <key>Comment</key>
- <string>Specify how long to wait before discarding texture data after viewer is minimized. (zero or negative to disable)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>1.0</real>
- </map>
<key>TextureFetchConcurrency</key>
<map>
<key>Comment</key>
@@ -12324,27 +12124,27 @@
<key>Value</key>
<string />
</map>
- <key>TextureScaleMinAreaFactor</key>
+ <key>TextureAvatarBoost</key>
<map>
<key>Comment</key>
- <string>Limits how texture scale affects area calculation.</string>
+ <string>Coverage multiplier for avatar textures: worn attachments (rigged extents make their measurement unreliable) and baked system-avatar textures. 4.0 = one mip finer than measured. A bonus, not a pin - nearby avatars gain headroom while distant avatars still downrez with their measured coverage. 1.0 disables.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>0.0095</real>
+ <real>4.0</real>
</map>
- <key>TextureScaleMaxAreaFactor</key>
+ <key>TextureDownrezCoverageBias</key>
<map>
<key>Comment</key>
- <string>Limits how texture scale affects area calculation.</string>
+ <string>Which end of a texture's texels-per-pixel spread sizes it. Each texture tracks the screen coverage of its most demanding use (lowest texels per pixel) and least demanding use (highest texels per pixel, most oversampled). 0 = size to the most demanding use (best quality); 1 = size to the least demanding use (frees the most memory). Interpolation is geometric (log-space), so the resulting discard level moves linearly with this value - 0.5 sits halfway between the two ends in mip levels. Default 0.25 is the best universal balance.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>25.0</real>
+ <real>0.25</real>
</map>
<key>ThreadPoolSizes</key>
<map>