diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp index 6e8422ca0c..b63cc52bec 100644 --- a/indra/llcommon/tests/llprocess_test.cpp +++ b/indra/llcommon/tests/llprocess_test.cpp @@ -1085,7 +1085,27 @@ namespace tut return false; } - std::list mHistory; + template + void checkHistory(CALLABLE&& code) + { + try + { + // we expect this lambda to contain tut::ensure() calls + std::forward(code)(mHistory); + } + catch (const failure&) + { + LL_INFOS() << "event history:" << LL_ENDL; + for (const LLSD& item : mHistory) + { + LL_INFOS() << item << LL_ENDL; + } + throw; + } + } + + using Listory = std::list; + Listory mHistory; LLTempBoundListener mConnection; }; @@ -1136,23 +1156,26 @@ namespace tut // finish out the run waitfor(*py.mPy); // now verify history - std::list::const_iterator li(listener.mHistory.begin()), - lend(listener.mHistory.end()); - ensure("no events", li != lend); - ensure_equals("history[0]", (*li)["data"].asString(), "abc"); - ensure_equals("history[0] len", (*li)["len"].asInteger(), 3); - ++li; - ensure("only 1 event", li != lend); - ensure_equals("history[1]", (*li)["data"].asString(), "abcdef"); - ensure_equals("history[0] len", (*li)["len"].asInteger(), 6); - ++li; - ensure("only 2 events", li != lend); - ensure_equals("history[2]", (*li)["data"].asString(), "abcdefghi" EOL); - ensure_equals("history[0] len", (*li)["len"].asInteger(), 9 + sizeof(EOL) - 1); - ++li; - // We DO NOT expect a whole new event for the second line because we - // disconnected. - ensure("more than 3 events", li == lend); + listener.checkHistory( + [](const EventListener::Listory& history) + { + auto li(history.begin()), lend(history.end()); + ensure("no events", li != lend); + ensure_equals("history[0]", (*li)["data"].asString(), "abc"); + ensure_equals("history[0] len", (*li)["len"].asInteger(), 3); + ++li; + ensure("only 1 event", li != lend); + ensure_equals("history[1]", (*li)["data"].asString(), "abcdef"); + ensure_equals("history[0] len", (*li)["len"].asInteger(), 6); + ++li; + ensure("only 2 events", li != lend); + ensure_equals("history[2]", (*li)["data"].asString(), "abcdefghi" EOL); + ensure_equals("history[0] len", (*li)["len"].asInteger(), 9 + sizeof(EOL) - 1); + ++li; + // We DO NOT expect a whole new event for the second line because we + // disconnected. + ensure("more than 3 events", li == lend); + }); } template<> template<> @@ -1172,14 +1195,17 @@ namespace tut // (or any other intervening layer) does crazy buffering. What we want // to ensure is that there was exactly ONE event with "eof" true, and // that it was the LAST event. - std::list::const_reverse_iterator rli(listener.mHistory.rbegin()), - rlend(listener.mHistory.rend()); - ensure("no events", rli != rlend); - ensure("last event not \"eof\"", (*rli)["eof"].asBoolean()); - while (++rli != rlend) - { - ensure("\"eof\" event not last", ! (*rli)["eof"].asBoolean()); - } + listener.checkHistory( + [](const EventListener::Listory& history) + { + auto rli(history.rbegin()), rlend(history.rend()); + ensure("no events", rli != rlend); + ensure("last event not \"eof\"", (*rli)["eof"].asBoolean()); + while (++rli != rlend) + { + ensure("\"eof\" event not last", ! (*rli)["eof"].asBoolean()); + } + }); } template<> template<> @@ -1202,13 +1228,17 @@ namespace tut ensure_equals("getLimit() after setlimit(10)", childout.getLimit(), 10); // okay, pump I/O to pick up output from child waitfor(*py.mPy); - ensure("no events", ! listener.mHistory.empty()); - // For all we know, that data could have arrived in several different - // bursts... probably not, but anyway, only check the last one. - ensure_equals("event[\"len\"]", - listener.mHistory.back()["len"].asInteger(), abc.length()); - ensure_equals("length of setLimit(10) data", - listener.mHistory.back()["data"].asString().length(), 10); + listener.checkHistory( + [abc](const EventListener::Listory& history) + { + ensure("no events", ! history.empty()); + // For all we know, that data could have arrived in several different + // bursts... probably not, but anyway, only check the last one. + ensure_equals("event[\"len\"]", + history.back()["len"].asInteger(), abc.length()); + ensure_equals("length of setLimit(10) data", + history.back()["data"].asString().length(), 10); + }); } template<> template<> @@ -1275,18 +1305,22 @@ namespace tut params.postend = pumpname; LLProcessPtr child = LLProcess::create(params); ensure("shouldn't have launched", ! child); - ensure_equals("number of postend events", listener.mHistory.size(), 1); - LLSD postend(listener.mHistory.front()); - ensure("has id", ! postend.has("id")); - ensure_equals("desc", postend["desc"].asString(), std::string(params.desc)); - ensure_equals("state", postend["state"].asInteger(), LLProcess::UNSTARTED); - ensure("has data", ! postend.has("data")); - std::string error(postend["string"]); - // All we get from canned parameter validation is a bool, so the - // "validation failed" message we ourselves generate can't mention - // "executable" by name. Just check that it's nonempty. - //ensure_contains("error", error, "executable"); - ensure("string", ! error.empty()); + listener.checkHistory( + [¶ms](const EventListener::Listory& history) + { + ensure_equals("number of postend events", history.size(), 1); + LLSD postend(history.front()); + ensure("has id", ! postend.has("id")); + ensure_equals("desc", postend["desc"].asString(), std::string(params.desc)); + ensure_equals("state", postend["state"].asInteger(), LLProcess::UNSTARTED); + ensure("has data", ! postend.has("data")); + std::string error(postend["string"]); + // All we get from canned parameter validation is a bool, so the + // "validation failed" message we ourselves generate can't mention + // "executable" by name. Just check that it's nonempty. + //ensure_contains("error", error, "executable"); + ensure("string", ! error.empty()); + }); } template<> template<> @@ -1308,16 +1342,20 @@ namespace tut { yield(); } - ensure("no postend event", i < timeout); - ensure_equals("number of postend events", listener.mHistory.size(), 1); - LLSD postend(listener.mHistory.front()); - ensure_equals("id", postend["id"].asInteger(), childid); - ensure("desc empty", ! postend["desc"].asString().empty()); - ensure_equals("state", postend["state"].asInteger(), LLProcess::EXITED); - ensure_equals("data", postend["data"].asInteger(), 35); - std::string str(postend["string"]); - ensure_contains("string", str, "exited"); - ensure_contains("string", str, "35"); + listener.checkHistory( + [i, timeout, childid](const EventListener::Listory& history) + { + ensure("no postend event", i < timeout); + ensure_equals("number of postend events", history.size(), 1); + LLSD postend(history.front()); + ensure_equals("id", postend["id"].asInteger(), childid); + ensure("desc empty", ! postend["desc"].asString().empty()); + ensure_equals("state", postend["state"].asInteger(), LLProcess::EXITED); + ensure_equals("data", postend["data"].asInteger(), 35); + std::string str(postend["string"]); + ensure_contains("string", str, "exited"); + ensure_contains("string", str, "35"); + }); } struct PostendListener diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 7a1d0bcddb..3fbff62d62 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -1,4 +1,4 @@ -version 71 +version 72 // The version number above should be incremented IF AND ONLY IF some // change has been made that is sufficiently important to justify // resetting the graphics preferences of all users to the recommended @@ -127,8 +127,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 0 -RenderHDREnabled 1 0 RenderVintageMode 1 1 // @@ -170,9 +168,7 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 +RenderVintageMode 1 1 // // Medium Graphics Settings (standard) @@ -213,9 +209,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // Medium High Graphics Settings @@ -256,9 +249,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // High Graphics Settings (SSAO + sun shadows) @@ -299,9 +289,6 @@ RenderCASSharpness 1 0.4 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // High Ultra Graphics Settings (deferred + SSAO + all shadows) @@ -342,9 +329,6 @@ RenderCASSharpness 1 0.4 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // Ultra graphics (REALLY PURTY!) @@ -385,9 +369,6 @@ RenderCASSharpness 1 0.4 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // Class Unknown Hardware (unknown) diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index 955b7accff..e38ee2a50e 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -1,4 +1,4 @@ -version 51 +version 52 // The version number above should be incremented IF AND ONLY IF some // change has been made that is sufficiently important to justify // resetting the graphics preferences of all users to the recommended @@ -127,8 +127,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 0 -RenderHDREnabled 1 0 RenderVintageMode 1 1 // @@ -170,9 +168,7 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 +RenderVintageMode 1 1 // // Medium Graphics Settings (standard) @@ -213,9 +209,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // Medium High Graphics Settings @@ -256,9 +249,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // High Graphics Settings (SSAO + sun shadows) @@ -299,9 +289,6 @@ RenderCASSharpness 1 0.4 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // High Ultra Graphics Settings (deferred + SSAO + all shadows) @@ -342,9 +329,6 @@ RenderCASSharpness 1 0.4 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // Ultra graphics (REALLY PURTY!) @@ -385,9 +369,6 @@ RenderCASSharpness 1 0.4 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderEnableEmissiveBuffer 1 1 -RenderHDREnabled 1 1 -RenderVintageMode 1 0 // // Class Unknown Hardware (unknown) diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index 8fe2649c19..ecf423cf80 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 65 +version 66 // The version number above should be incremented IF AND ONLY IF some // change has been made that is sufficiently important to justify // resetting the graphics preferences of all users to the recommended @@ -165,7 +165,7 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderVintageMode 1 0 +RenderVintageMode 1 1 // // Medium Graphics Settings (standard) @@ -206,7 +206,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderVintageMode 1 0 // // Medium High Graphics Settings @@ -247,7 +246,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderVintageMode 1 0 // // High Graphics Settings (SSAO + sun shadows) @@ -288,7 +286,6 @@ RenderCASSharpness 1 0 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderVintageMode 1 0 // // High Ultra Graphics Settings (SSAO + all shadows) @@ -329,7 +326,6 @@ RenderCASSharpness 1 0.4 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderVintageMode 1 0 // // Ultra graphics (REALLY PURTY!) @@ -370,7 +366,6 @@ RenderCASSharpness 1 0.4 RenderExposure 1 1 RenderTonemapType 1 1 RenderTonemapMix 1 0.7 -RenderVintageMode 1 0 // // Class Unknown Hardware (unknown) diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 4f71a051b1..939902b6b1 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -727,6 +727,9 @@ void LLFeatureManager::applyBaseMasks() // make sure to disable background context activity in GL3 mode LLImageGLThread::sEnabledMedia = false; LLImageGLThread::sEnabledTextures = false; + + // Make extra sure that vintage mode also gets enabled. + gSavedSettings.setBOOL("RenderVintageMode", true); } // now mask by gpu string diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index d7d9770075..381994845c 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -2301,6 +2301,7 @@ void LLFloaterPreference::disableUnavailableSettings() { LLComboBox* ctrl_shadows = getChild("ShadowDetail"); LLCheckBoxCtrl* ctrl_ssao = getChild("UseSSAO"); + LLSliderCtrl* cas_slider = getChild("RenderSharpness"); // disabled deferred SSAO if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO")) @@ -2315,6 +2316,20 @@ void LLFloaterPreference::disableUnavailableSettings() ctrl_shadows->setEnabled(false); ctrl_shadows->setValue(0); } + + // Vintage mode + LLCachedControl is_vintage(gSavedSettings, "RenderVintageMode"); + LLSliderCtrl* tonemapMix = getChild("TonemapMix"); + LLComboBox* tonemapSelect = getChild("TonemapType"); + LLTextBox* tonemapLabel = getChild("TonemapTypeText"); + LLSliderCtrl* exposureSlider = getChild("RenderExposure"); + + tonemapSelect->setEnabled(!is_vintage); + tonemapLabel->setEnabled(!is_vintage); + tonemapMix->setEnabled(!is_vintage); + exposureSlider->setEnabled(!is_vintage); + cas_slider->setEnabled(!is_vintage); + } void LLFloaterPreference::refresh() diff --git a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp index 4e4d66023a..640b90b1e0 100644 --- a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp +++ b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp @@ -272,6 +272,7 @@ void LLFloaterPreferenceGraphicsAdvanced::disableUnavailableSettings() LLCheckBoxCtrl* ctrl_dof = getChild("UseDoF"); LLSliderCtrl* sky = getChild("SkyMeshDetail"); LLTextBox* sky_text = getChild("SkyMeshDetailText"); + LLSliderCtrl* cas_slider = getChild("RenderSharpness"); // disabled windlight if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders")) @@ -331,6 +332,7 @@ void LLFloaterPreferenceGraphicsAdvanced::disableUnavailableSettings() tonemapLabel->setEnabled(!is_vintage); tonemapMix->setEnabled(!is_vintage); exposureSlider->setEnabled(!is_vintage); + cas_slider->setEnabled(!is_vintage); } void LLFloaterPreferenceGraphicsAdvanced::refreshEnabledState() 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 85b9d64152..5a20c4a0b1 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -754,6 +754,7 @@