Graphics quality slider: audit for settings not reachable from Advanced settings #151

Closed
opened 2026-09-29 02:16:05 +00:00 by sky_line · 1 comment
Owner

Check whether the main graphics quality slider (Preferences > Graphics, Low ... Ultra) changes any settings that the user can't see or change in Advanced Settings. If a preset sets something hidden, users can't tune it back, and moving the slider silently overrides it.

How

  • The slider applies the feature table levels (featuretable*.txt, LLFeatureManager::setGraphicsLevel) plus our Vulkan preset logic (the first-run GPU-based preset, and presets that scale shadows).
  • List every setting each level writes, then diff that list against the controls in floater_preferences_graphics_advanced.xml (and Quick Preferences / Lightbox where relevant).
  • For each setting that's only reachable through the slider, either:
    • add it to Advanced Settings (if users would want to tune it),
    • drop it from the presets (if it's GL-only / dead under Vulkan), or
    • document it as intentionally internal.
  • Also flag settings the slider sets that do nothing under Vulkan (GL leftovers). They're misleading, and removing them ties into the GL removal work (#80, #81).
Check whether the main **graphics quality slider** (Preferences > Graphics, Low ... Ultra) changes any settings that the user can't see or change in **Advanced Settings**. If a preset sets something hidden, users can't tune it back, and moving the slider silently overrides it. ## How - The slider applies the feature table levels (`featuretable*.txt`, `LLFeatureManager::setGraphicsLevel`) plus our Vulkan preset logic (the first-run GPU-based preset, and presets that scale shadows). - List every setting each level writes, then diff that list against the controls in `floater_preferences_graphics_advanced.xml` (and Quick Preferences / Lightbox where relevant). - For each setting that's only reachable through the slider, either: - add it to Advanced Settings (if users would want to tune it), - drop it from the presets (if it's GL-only / dead under Vulkan), or - document it as intentionally internal. - Also flag settings the slider sets that do nothing under Vulkan (GL leftovers). They're misleading, and removing them ties into the GL removal work (#80, #81).
Author
Owner

Audit (overnight, read-only): settings the quality slider writes that no graphics UI exposes

How the slider works: moving it calls setGraphicsLevel(level, true) (llfloaterpreference.cpp:1760). That rebuilds the feature map from list all plus the level list and writes every entry back to gSavedSettings (llfeaturemanager.cpp:626-696). Only RenderGamma, RenderVBOEnable and RenderFogRatio are skipped (llfeaturemanager.cpp:262-264). So a setting that appears only in list all is reset on every slider move, and anything set in Debug Settings is quietly overwritten. Values are from featuretable_linux.txt v33.

Compared against every control_name in floater_preferences_graphics_advanced.xml, panel_preferences_graphics1.xml, floater_quick_prefs.xml, panel_lightbox_.xml and panel_performance_.xml: 25 settings are written by the slider but reachable from none of them.

(a) Tunable and used by Vulkan: should be in Advanced

Setting Values Evidence
RenderReflectionsEnabled Low 0, others 1 The VK frame gates probes on it (llappviewer.cpp:5044-5047, llcleanrenderervk.cpp:4481). Advanced "Reflection detail" only offers 0/1/2. On Low, the only way to get probes back is the slider.
RenderReflectionProbeResolution 128 at every level VK allocates probes from it (llcleanrenderervk.cpp:4297, 4466). A custom value is reset to 128 on every slider move.
RenderAutoMuteSurfaceAreaLimit 1000 at every level Jellydoll area limit (llvoavatar.cpp:8977). Hidden in LL too, but the slider resets it.

(b) GL-only or dead under Vulkan

Setting Evidence
RenderTonemapType Overwritten by AlchemyRenderTonemapType on VK (llcleanrenderervk.cpp:7400-7407). The Lightbox has the real control, so the reset is harmless.
RenderTerrainPBRDetail, RenderTerrainPBRPlanarSampleCount GL shader setup only (llviewershadermgr.cpp:863-867, 1539-1541).
RenderHeroProbeDistance GL hero probe path only (llheroprobemanager.cpp:961).
RenderHeroProbeConservativeUpdateMultiplier Assigned at pipeline.cpp:563, never read.
UseOcclusion Drives LLPipeline::sUseOcclusion. The VK equivalent is RenderVKOcclusionCull.
RenderDeferred, WindLightUseAtmosShaders Hardcoded true, deprecated (pipeline.cpp:481-482).
RenderGLMultiThreadedTextures / Media Forced off under VK (llfeaturemanager.cpp:812-816).
RenderGLContextCoreProfile, RenderCubeMap, RenderMaxTextureIndex, RenderShaderLightingMaxLevel, RenderDownScaleMethod GL init or shader code only.
RenderObjectBump Only used for UI enable checks.
RenderTerrainDetail, RenderUseStreamVBO, RenderVBOMappingDisable No reader at all.

(c) Internal, fine hidden

Disregard96/128DefaultDrawDistance (feature-mask flags), UseStartScreen (login splash).

Suggested actions

  1. Let Advanced turn reflections on and off: a "None" entry in Reflection detail, or a checkbox bound to RenderReflectionsEnabled.
  2. Expose RenderReflectionProbeResolution (64/128/256/512; VK caps it at 512), or vary it by level.
  3. Stop the slider overwriting fixed-value settings: add them to mSkippedFeatures or drop them from list all (at least RenderReflectionProbeResolution, RenderAutoMuteSurfaceAreaLimit, UseStartScreen).
  4. Drop the dead rows from the feature tables (RenderTerrainDetail, RenderUseStreamVBO, RenderVBOMappingDisable, RenderHeroProbeConservativeUpdateMultiplier, RenderDeferred, WindLightUseAtmosShaders; RenderTonemapType for VK only).
  5. Unverified: whether VK should honour RenderTerrainPBRDetail / PlanarSampleCount and RenderHeroProbeDistance. They need VK readers if terrain or mirrors should scale with quality.

Side note: VK now fills in gGLManager.mVRAM and anisotropy after the window is created (llappviewer.cpp:3526-3533). So later slider moves can apply the VRAMGT512 mask (RenderCompressTextures=0), while the first boot pass could not.

**Audit (overnight, read-only): settings the quality slider writes that no graphics UI exposes** How the slider works: moving it calls `setGraphicsLevel(level, true)` (llfloaterpreference.cpp:1760). That rebuilds the feature map from `list all` plus the level list and writes every entry back to gSavedSettings (llfeaturemanager.cpp:626-696). Only RenderGamma, RenderVBOEnable and RenderFogRatio are skipped (llfeaturemanager.cpp:262-264). So a setting that appears only in `list all` is reset on **every** slider move, and anything set in Debug Settings is quietly overwritten. Values are from featuretable_linux.txt v33. Compared against every `control_name` in floater_preferences_graphics_advanced.xml, panel_preferences_graphics1.xml, floater_quick_prefs.xml, panel_lightbox_*.xml and panel_performance_*.xml: **25 settings** are written by the slider but reachable from none of them. ### (a) Tunable and used by Vulkan: should be in Advanced | Setting | Values | Evidence | |---|---|---| | RenderReflectionsEnabled | Low 0, others 1 | The VK frame gates probes on it (llappviewer.cpp:5044-5047, llcleanrenderervk.cpp:4481). Advanced "Reflection detail" only offers 0/1/2. **On Low, the only way to get probes back is the slider.** | | RenderReflectionProbeResolution | 128 at every level | VK allocates probes from it (llcleanrenderervk.cpp:4297, 4466). A custom value is reset to 128 on every slider move. | | RenderAutoMuteSurfaceAreaLimit | 1000 at every level | Jellydoll area limit (llvoavatar.cpp:8977). Hidden in LL too, but the slider resets it. | ### (b) GL-only or dead under Vulkan | Setting | Evidence | |---|---| | RenderTonemapType | Overwritten by AlchemyRenderTonemapType on VK (llcleanrenderervk.cpp:7400-7407). The Lightbox has the real control, so the reset is harmless. | | RenderTerrainPBRDetail, RenderTerrainPBRPlanarSampleCount | GL shader setup only (llviewershadermgr.cpp:863-867, 1539-1541). | | RenderHeroProbeDistance | GL hero probe path only (llheroprobemanager.cpp:961). | | RenderHeroProbeConservativeUpdateMultiplier | Assigned at pipeline.cpp:563, never read. | | UseOcclusion | Drives LLPipeline::sUseOcclusion. The VK equivalent is RenderVKOcclusionCull. | | RenderDeferred, WindLightUseAtmosShaders | Hardcoded true, deprecated (pipeline.cpp:481-482). | | RenderGLMultiThreadedTextures / Media | Forced off under VK (llfeaturemanager.cpp:812-816). | | RenderGLContextCoreProfile, RenderCubeMap, RenderMaxTextureIndex, RenderShaderLightingMaxLevel, RenderDownScaleMethod | GL init or shader code only. | | RenderObjectBump | Only used for UI enable checks. | | RenderTerrainDetail, RenderUseStreamVBO, RenderVBOMappingDisable | No reader at all. | ### (c) Internal, fine hidden Disregard96/128DefaultDrawDistance (feature-mask flags), UseStartScreen (login splash). ### Suggested actions 1. Let Advanced turn reflections on and off: a "None" entry in Reflection detail, or a checkbox bound to RenderReflectionsEnabled. 2. Expose RenderReflectionProbeResolution (64/128/256/512; VK caps it at 512), or vary it by level. 3. Stop the slider overwriting fixed-value settings: add them to `mSkippedFeatures` or drop them from `list all` (at least RenderReflectionProbeResolution, RenderAutoMuteSurfaceAreaLimit, UseStartScreen). 4. Drop the dead rows from the feature tables (RenderTerrainDetail, RenderUseStreamVBO, RenderVBOMappingDisable, RenderHeroProbeConservativeUpdateMultiplier, RenderDeferred, WindLightUseAtmosShaders; RenderTonemapType for VK only). 5. Unverified: whether VK should honour RenderTerrainPBRDetail / PlanarSampleCount and RenderHeroProbeDistance. They need VK readers if terrain or mirrors should scale with quality. Side note: VK now fills in gGLManager.mVRAM and anisotropy after the window is created (llappviewer.cpp:3526-3533). So later slider moves can apply the VRAMGT512 mask (RenderCompressTextures=0), while the first boot pass could not.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#151
No description provided.