CHOP-959: Streamline processing for --graphicslevel switch.
Use map-to in cmd_line.xml to inform the command-line processor that the target variable for --graphicslevel is RenderQualityPerformance. That lets us eliminate clunky llappviewer.cpp switch from '0' to 0, etc. Moreover, previous switch statement only accepted 0 - 3, whereas LLFeatureManager::setGraphicsLevel() actually accepts 0 - 6. Introduce LLFeatureManager::isValidGraphicsLevel() and use that to validate. Replace switch statement in setGraphicsLevel() mapping int constants to string literals with static vector of level names, using same data for mapping as for validating level numbers.master
parent
4a9b688b4d
commit
c08b60ac6f
|
|
@ -96,6 +96,8 @@
|
|||
0 - low, 1 - medium, 2 - high, 3 - ultra</string>
|
||||
<key>count</key>
|
||||
<integer>1</integer>
|
||||
<key>map-to</key>
|
||||
<string>RenderQualityPerformance</string>
|
||||
</map>
|
||||
|
||||
<key>grid</key>
|
||||
|
|
|
|||
|
|
@ -2311,13 +2311,6 @@ bool LLAppViewer::initConfiguration()
|
|||
{
|
||||
//Load settings files list
|
||||
std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml");
|
||||
//LLControlGroup settings_control("SettingsFiles");
|
||||
//llinfos << "Loading settings file list " << settings_file_list << llendl;
|
||||
//if (0 == settings_control.loadFromFile(settings_file_list))
|
||||
//{
|
||||
// llerrs << "Cannot load default configuration file " << settings_file_list << llendl;
|
||||
//}
|
||||
|
||||
LLXMLNodePtr root;
|
||||
BOOL success = LLXMLNode::parseFile(settings_file_list, root, NULL);
|
||||
if (!success)
|
||||
|
|
@ -2376,9 +2369,7 @@ bool LLAppViewer::initConfiguration()
|
|||
{
|
||||
c->setValue(true, false);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
||||
gSavedSettings.setBOOL("QAMode", TRUE );
|
||||
gSavedSettings.setS32("WatchdogEnabled", 0);
|
||||
#endif
|
||||
|
|
@ -2582,36 +2573,10 @@ bool LLAppViewer::initConfiguration()
|
|||
|
||||
if (clp.hasOption("graphicslevel"))
|
||||
{
|
||||
const LLCommandLineParser::token_vector_t& value = clp.getOption("graphicslevel");
|
||||
if(value.size() != 1)
|
||||
{
|
||||
llwarns << "Usage: -graphicslevel <0-3>" << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string detail = value.front();
|
||||
mForceGraphicsDetail = TRUE;
|
||||
|
||||
switch (detail.c_str()[0])
|
||||
{
|
||||
case '0':
|
||||
gSavedSettings.setU32("RenderQualityPerformance", 0);
|
||||
break;
|
||||
case '1':
|
||||
gSavedSettings.setU32("RenderQualityPerformance", 1);
|
||||
break;
|
||||
case '2':
|
||||
gSavedSettings.setU32("RenderQualityPerformance", 2);
|
||||
break;
|
||||
case '3':
|
||||
gSavedSettings.setU32("RenderQualityPerformance", 3);
|
||||
break;
|
||||
default:
|
||||
mForceGraphicsDetail = FALSE;
|
||||
llwarns << "Usage: -graphicslevel <0-3>" << llendl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// User explicitly requested --graphicslevel on the command line.
|
||||
// We expect this switch has already set RenderQualityPerformance.
|
||||
mForceGraphicsDetail =
|
||||
LLFeatureManager::instance().isValidGraphicsLevel(gSavedSettings.getU32("RenderQualityPerformance"));
|
||||
}
|
||||
|
||||
if (clp.hasOption("analyzeperformance"))
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include <fstream>
|
||||
|
||||
#include <boost/regex.hpp>
|
||||
#include <boost/assign/list_of.hpp>
|
||||
|
||||
#include "llfeaturemanager.h"
|
||||
#include "lldir.h"
|
||||
|
|
@ -52,6 +53,8 @@
|
|||
#include "llboost.h"
|
||||
#include "llweb.h"
|
||||
#include "llviewershadermgr.h"
|
||||
#include "llstring.h"
|
||||
#include "stringize.h"
|
||||
|
||||
#if LL_WINDOWS
|
||||
#include "lldxhardware.h"
|
||||
|
|
@ -187,6 +190,55 @@ void LLFeatureList::dump()
|
|||
LL_DEBUGS("RenderInit") << LL_ENDL;
|
||||
}
|
||||
|
||||
static const std::vector<std::string> sGraphicsLevelNames = boost::assign::list_of
|
||||
("Low")
|
||||
("LowMid")
|
||||
("Mid")
|
||||
("MidHigh")
|
||||
("High")
|
||||
("HighUltra")
|
||||
("Ultra")
|
||||
;
|
||||
|
||||
U32 LLFeatureManager::getMaxGraphicsLevel() const
|
||||
{
|
||||
return sGraphicsLevelNames.size() - 1;
|
||||
}
|
||||
|
||||
bool LLFeatureManager::isValidGraphicsLevel(U32 level) const
|
||||
{
|
||||
return (level <= getMaxGraphicsLevel());
|
||||
}
|
||||
|
||||
std::string LLFeatureManager::getNameForGraphicsLevel(U32 level) const
|
||||
{
|
||||
if (isValidGraphicsLevel(level))
|
||||
{
|
||||
return sGraphicsLevelNames[level];
|
||||
}
|
||||
return STRINGIZE("Invalid graphics level " << level << ", valid are 0 .. "
|
||||
<< getMaxGraphicsLevel());
|
||||
}
|
||||
|
||||
S32 LLFeatureManager::getGraphicsLevelForName(const std::string& name) const
|
||||
{
|
||||
const std::string FixedFunction("FixedFunction");
|
||||
std::string rname(name);
|
||||
if (LLStringUtil::endsWith(rname, FixedFunction))
|
||||
{
|
||||
// chop off any "FixedFunction" suffix
|
||||
rname = rname.substr(0, rname.length() - FixedFunction.length());
|
||||
}
|
||||
for (S32 i(0), iend(getMaxGraphicsLevel()); i <= iend; ++i)
|
||||
{
|
||||
if (sGraphicsLevelNames[i] == rname)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
LLFeatureList *LLFeatureManager::findMask(const std::string& name)
|
||||
{
|
||||
if (mMaskList.count(name))
|
||||
|
|
@ -620,7 +672,7 @@ void LLFeatureManager::applyRecommendedSettings()
|
|||
{
|
||||
// apply saved settings
|
||||
// cap the level at 2 (high)
|
||||
S32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5));
|
||||
U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5));
|
||||
|
||||
llinfos << "Applying Recommended Features" << llendl;
|
||||
|
||||
|
|
@ -696,62 +748,33 @@ void LLFeatureManager::applyFeatures(bool skipFeatures)
|
|||
}
|
||||
}
|
||||
|
||||
void LLFeatureManager::setGraphicsLevel(S32 level, bool skipFeatures)
|
||||
void LLFeatureManager::setGraphicsLevel(U32 level, bool skipFeatures)
|
||||
{
|
||||
LLViewerShaderMgr::sSkipReload = true;
|
||||
|
||||
applyBaseMasks();
|
||||
|
||||
switch (level)
|
||||
|
||||
// if we're passed an invalid level, default to "Low"
|
||||
std::string features(isValidGraphicsLevel(level)? getNameForGraphicsLevel(level) : "Low");
|
||||
if (features == "Low")
|
||||
{
|
||||
case 0:
|
||||
#if LL_DARWIN
|
||||
// This Mac-specific change is to insure that we force 'Basic Shaders' for all Mac
|
||||
// systems which support them instead of falling back to fixed-function unnecessarily
|
||||
// MAINT-2157
|
||||
//
|
||||
if (gGLManager.mGLVersion < 2.1f)
|
||||
{
|
||||
maskFeatures("LowFixedFunction");
|
||||
}
|
||||
else
|
||||
{ //same as low, but with "Basic Shaders" enabled
|
||||
maskFeatures("Low");
|
||||
}
|
||||
// This Mac-specific change is to insure that we force 'Basic Shaders' for all Mac
|
||||
// systems which support them instead of falling back to fixed-function unnecessarily
|
||||
// MAINT-2157
|
||||
if (gGLManager.mGLVersion < 2.1f)
|
||||
#else
|
||||
if (gGLManager.mGLVersion < 3.f || gGLManager.mIsIntel)
|
||||
{ //only use fixed function by default if GL version < 3.0 or this is an intel graphics chip
|
||||
maskFeatures("LowFixedFunction");
|
||||
}
|
||||
else
|
||||
{ //same as low, but with "Basic Shaders" enabled
|
||||
maskFeatures("Low");
|
||||
}
|
||||
// only use fixed function by default if GL version < 3.0 or this is an intel graphics chip
|
||||
if (gGLManager.mGLVersion < 3.f || gGLManager.mIsIntel)
|
||||
#endif
|
||||
break;
|
||||
case 1:
|
||||
maskFeatures("LowMid");
|
||||
break;
|
||||
case 2:
|
||||
maskFeatures("Mid");
|
||||
break;
|
||||
case 3:
|
||||
maskFeatures("MidHigh");
|
||||
break;
|
||||
case 4:
|
||||
maskFeatures("High");
|
||||
break;
|
||||
case 5:
|
||||
maskFeatures("HighUltra");
|
||||
break;
|
||||
case 6:
|
||||
maskFeatures("Ultra");
|
||||
break;
|
||||
default:
|
||||
maskFeatures("Low");
|
||||
break;
|
||||
{
|
||||
// same as Low, but with "Basic Shaders" disabled
|
||||
features = "LowFixedFunction";
|
||||
}
|
||||
}
|
||||
|
||||
maskFeatures(features);
|
||||
|
||||
applyFeatures(skipFeatures);
|
||||
|
||||
LLViewerShaderMgr::sSkipReload = false;
|
||||
|
|
|
|||
|
|
@ -134,8 +134,18 @@ public:
|
|||
// skipFeatures forces skipping of mostly hardware settings
|
||||
// that we don't want to change when we change graphics
|
||||
// settings
|
||||
void setGraphicsLevel(S32 level, bool skipFeatures);
|
||||
|
||||
void setGraphicsLevel(U32 level, bool skipFeatures);
|
||||
|
||||
// What 'level' values are valid to pass to setGraphicsLevel()?
|
||||
// 0 is the low end...
|
||||
U32 getMaxGraphicsLevel() const;
|
||||
bool isValidGraphicsLevel(U32 level) const;
|
||||
|
||||
// setGraphicsLevel() levels have names.
|
||||
std::string getNameForGraphicsLevel(U32 level) const;
|
||||
// returns -1 for unrecognized name (hence S32 rather than U32)
|
||||
S32 getGraphicsLevelForName(const std::string& name) const;
|
||||
|
||||
void applyBaseMasks();
|
||||
void applyRecommendedSettings();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue