diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4acf942617..95794bff13 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -11177,13 +11177,13 @@ Change of this parameter will affect the layout of buttons in notification toast
RenderMaxVRAMBudget
RenderMinFreeMainMemoryThreshold
@@ -25975,5 +25975,16 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ FSLimitTextureVRAMUsage
+
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 7c24078e28..8eee700b5c 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1513,12 +1513,12 @@ bool LLAppViewer::init()
void LLAppViewer::overrideDetectedHardware()
{
// Override the VRAM Detection if FSOverrideVRAMDetection is set.
- if ( gSavedSettings.getBOOL("FSOverrideVRAMDetection") )
+ if (gSavedSettings.getBOOL("FSOverrideVRAMDetection"))
{
- S32 forced_video_memory = gSavedSettings.getS32("FSForcedVideoMemory");
+ U32 forced_video_memory = gSavedSettings.getU32("FSForcedVideoMemory");
// Note: 0 is allowed here, some systems detect VRAM as zero so override should support emulating them.
- LL_INFOS("AppInit") << "Overriding VRAM to " << forced_video_memory*1024 << " MB" << LL_ENDL;
- gGLManager.mVRAM = forced_video_memory*1024;
+ LL_INFOS("AppInit") << "Overriding VRAM to " << forced_video_memory * 1024U << " MB" << LL_ENDL;
+ gGLManager.mVRAM = forced_video_memory * 1024U;
}
}
//
@@ -4169,8 +4169,9 @@ LLSD LLAppViewer::getViewerInfo() const
//
// Include VRAM budget
- if (auto budget = gSavedSettings.getU32("RenderMaxVRAMBudget"); budget > 0)
+ if (gSavedSettings.getBOOL("FSLimitTextureVRAMUsage"))
{
+ auto budget = gSavedSettings.getU32("RenderMaxVRAMBudget");
info["VRAM_BUDGET"] = std::to_string(budget) + " MB";
info["VRAM_BUDGET_ENGLISH"] = std::to_string(budget) + " MB";
}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index cf036eea49..d7d9770075 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -2238,6 +2238,12 @@ void LLFloaterPreference::refreshEnabledState()
getChild("do_not_disturb_response")->setEnabled(!RlvActions::hasBehaviour(RLV_BHVR_SENDIM));
}
// [/RLVa:KB]
+
+ // Expose max texture VRAM setting
+ auto max_texmem = getChild("RenderMaxVRAMBudget");
+ max_texmem->setMinValue(MIN_VRAM_BUDGET);
+ max_texmem->setMaxValue((F32)gGLManager.mVRAM);
+ //
}
// Support preferences search SLURLs
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 5345948db1..92db268c39 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -103,7 +103,7 @@ bool LLViewerTexture::sFreezeImageUpdates = false;
F32 LLViewerTexture::sCurrentTime = 0.0f;
constexpr F32 MEMORY_CHECK_WAIT_TIME = 1.0f;
-constexpr F32 MIN_VRAM_BUDGET = 768.f;
+//constexpr F32 MIN_VRAM_BUDGET = 768.f; // Expose max texture VRAM setting
F32 LLViewerTexture::sFreeVRAMMegabytes = MIN_VRAM_BUDGET;
LLViewerTexture::EDebugTexels LLViewerTexture::sDebugTexelsMode = LLViewerTexture::DEBUG_TEXELS_OFF;
@@ -510,6 +510,7 @@ void LLViewerTexture::updateClass()
LLViewerMediaTexture::updateClass();
static LLCachedControl max_vram_budget(gSavedSettings, "RenderMaxVRAMBudget", 0);
+ static LLCachedControl max_vram_budget_enabled(gSavedSettings, "FSLimitTextureVRAMUsage"); // Expose max texture VRAM setting
F64 texture_bytes_alloc = LLImageGL::getTextureBytesAllocated() / 1024.0 / 512.0;
F64 vertex_bytes_alloc = LLVertexBuffer::getBytesAllocated() / 1024.0 / 512.0;
@@ -518,7 +519,9 @@ void LLViewerTexture::updateClass()
// NOTE: our metrics miss about half the vram we use, so this biases high but turns out to typically be within 5% of the real number
F32 used = (F32)ll_round(texture_bytes_alloc + vertex_bytes_alloc);
- F32 budget = max_vram_budget == 0 ? (F32)gGLManager.mVRAM : (F32)max_vram_budget;
+ // Expose max texture VRAM setting
+ //F32 budget = max_vram_budget == 0 ? (F32)gGLManager.mVRAM : (F32)max_vram_budget;
+ F32 budget = !max_vram_budget_enabled ? (F32)gGLManager.mVRAM : (F32)max_vram_budget;
// 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/llviewertexture.h b/indra/newview/llviewertexture.h
index 771d7bbf5e..d2fd4733be 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -44,6 +44,7 @@
// Max texture resolution
extern U32 DESIRED_NORMAL_TEXTURE_SIZE;
+constexpr F32 MIN_VRAM_BUDGET = 768.f; // Expose max texture VRAM setting
class LLFace;
class LLImageGL ;
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
index 1f53590d9f..31514236e6 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
@@ -165,6 +165,8 @@
Erweiterte Einstellungen (Neustart erforderlich):
+
+
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 92112c34cc..393ae7f62a 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -1071,6 +1071,34 @@
value="2" />
+
+
+