From 543e1739885c69784fcdd96f837978ea7a96e8b9 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Tue, 9 May 2023 12:01:57 -0400
Subject: [PATCH] Add shader cache checkbox to develop graphics menu

---
 indra/llrender/llshadermgr.cpp                | 10 +++----
 indra/llrender/llshadermgr.h                  |  1 +
 .../skins/default/xui/en/menu_viewer.xml      | 26 ++++++++++++-------
 3 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 90c228b1fa9..065afb1a936 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -1094,11 +1094,11 @@ void LLShaderMgr::initShaderCache(bool enabled, const LLUUID& old_cache_version,
 
 	mShaderCacheInitialized = true;
 
-	std::string shader_cache_dir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "shader_cache");
-	LLFile::mkdir(shader_cache_dir);
+	mShaderCacheDir = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "shader_cache");
+	LLFile::mkdir(mShaderCacheDir);
 
 	{
-		std::string meta_out_path = gDirUtilp->add(shader_cache_dir, "shaderdata.llsd");
+		std::string meta_out_path = gDirUtilp->add(mShaderCacheDir, "shaderdata.llsd");
 		if (gDirUtilp->fileExists(meta_out_path))
 		{
 			LL_INFOS() << "Loading shader metadata" << LL_ENDL;
@@ -1167,7 +1167,7 @@ bool LLShaderMgr::loadCachedProgramBinary(LLGLSLShader* shader)
 		std::vector<U8> in_data;
 		in_data.resize(shader_info.mBinaryLength);
 
-		std::string in_path = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "shader_cache", shader->mShaderHash.asString() + ".shaderbin");
+		std::string in_path = gDirUtilp->add(mShaderCacheDir, shader->mShaderHash.asString() + ".shaderbin");
 		LLUniqueFile filep = LLFile::fopen(in_path, "rb");
 		if (filep)
 		{
@@ -1203,7 +1203,7 @@ bool LLShaderMgr::saveCachedProgramBinary(LLGLSLShader* shader)
 
 	glGetProgramBinary(shader->mProgramObject, program_binary.size() * sizeof(U8), nullptr, &binary_info.mBinaryFormat, program_binary.data());
 
-	std::string out_path = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "shader_cache", shader->mShaderHash.asString() + ".shaderbin");
+	std::string out_path = gDirUtilp->add(mShaderCacheDir, shader->mShaderHash.asString() + ".shaderbin");
 	LLUniqueFile outfile = LLFile::fopen(out_path, "wb");
 	if (outfile)
 	{
diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h
index 188057976a6..25b149c604b 100644
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -338,6 +338,7 @@ class LLShaderMgr
     boost::unordered_map<LLUUID, ProgramBinaryData> mShaderBinaryCache;
     bool mShaderCacheInitialized = false;
     bool mShaderCacheEnabled = false;
+    std::string mShaderCacheDir;
 
 protected:
 
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index dec4e4ad2de..6d2f46221a9 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3689,23 +3689,31 @@ function="World.EnvPreset"
                  parameter="RenderAttachedParticles" />
             </menu_item_check>
           <menu_item_separator />
-          
+          <menu_item_check
+             label="Enable Shader Cache"
+             name="Enable Shader Cache">
+            <menu_item_check.on_check
+             function="CheckControl"
+             parameter="RenderShaderCacheEnabled" />
+            <menu_item_check.on_click
+             function="ToggleShaderControl"
+             parameter="RenderShaderCacheEnabled" />
+          </menu_item_check>
           <menu_item_call
             enabled="true"
-            label="Clear Cache Immediately"
-            name="Cache Clear">
+            label="Clear Shader Cache"
+            name="Shader Cache Clear">
             <menu_item_call.on_click
-             function="Develop.ClearCache" />
+             function="Advanced.ClearShaderCache" />
           </menu_item_call>
-          
+          <menu_item_separator />
           <menu_item_call
             enabled="true"
-            label="Clear Shader Cache"
-            name="Shader Cache Clear">
+            label="Clear Cache Immediately"
+            name="Cache Clear">
             <menu_item_call.on_click
-             function="Advanced.ClearShaderCache" />
+             function="Develop.ClearCache" />
           </menu_item_call>
-			
         </menu>
 
         <menu
-- 
GitLab