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
Nat Goodspeed 2013-06-28 15:26:18 -04:00
parent 4a9b688b4d
commit c08b60ac6f
4 changed files with 88 additions and 88 deletions

View File

@ -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>

View File

@ -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"))

View File

@ -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;

View File

@ -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();