diff options
| author | Jonathan "Geenz" Goodman <geenz@lindenlab.com> | 2026-07-07 08:06:22 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-07 08:06:22 -0400 |
| commit | 3d465f6c966f0a2fcfd5d3c9effb6ce20c2754c8 (patch) | |
| tree | 6e54cc193b39ab8ded12f4fa343ada52f75b0c61 /indra/newview/app_settings | |
| parent | f2c356fc7130ce5e38b994dcfa1e210609b458b9 (diff) | |
| parent | b8762cb7999197f7da36b4820761298e85bdfa6f (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.xml | 300 |
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 (>= 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 > 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> |
