summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llcommon/tests/llprocess_test.cpp148
-rw-r--r--indra/newview/featuretable.txt23
-rw-r--r--indra/newview/featuretable_mac.txt9
-rw-r--r--indra/newview/llfeaturemanager.cpp3
-rw-r--r--indra/newview/llfloaterpreferencesgraphicsadvanced.cpp2
-rw-r--r--indra/newview/lltexturefetch.cpp20
-rw-r--r--indra/newview/lltexturefetch.h2
-rw-r--r--indra/newview/llviewertexture.cpp3
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml1
9 files changed, 119 insertions, 92 deletions
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<LLSD> mHistory;
+ template <typename CALLABLE>
+ void checkHistory(CALLABLE&& code)
+ {
+ try
+ {
+ // we expect this lambda to contain tut::ensure() calls
+ std::forward<CALLABLE>(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<LLSD>;
+ Listory mHistory;
LLTempBoundListener mConnection;
};
@@ -1136,23 +1156,26 @@ namespace tut
// finish out the run
waitfor(*py.mPy);
// now verify history
- std::list<LLSD>::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<LLSD>::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(
+ [&params](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 bd7c11a52f..fceb81f061 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_mac.txt b/indra/newview/featuretable_mac.txt
index a11a08f752..b411e69ab9 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
@@ -166,7 +166,7 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
+RenderVintageMode 1 1
//
// Medium Graphics Settings (standard)
@@ -207,7 +207,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// Medium High Graphics Settings
@@ -248,7 +247,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// High Graphics Settings (SSAO + sun shadows)
@@ -289,7 +287,6 @@ RenderCASSharpness 1 0
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// High Ultra Graphics Settings (SSAO + all shadows)
@@ -330,7 +327,6 @@ RenderCASSharpness 1 0.4
RenderExposure 1 1
RenderTonemapType 1 1
RenderTonemapMix 1 0.7
-RenderVintageMode 1 0
//
// Ultra graphics (REALLY PURTY!)
@@ -371,7 +367,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 f45b70a6f9..28f26b1eac 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -717,6 +717,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/llfloaterpreferencesgraphicsadvanced.cpp b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
index e29ea0c39a..247c0d249a 100644
--- a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
+++ b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
@@ -271,6 +271,7 @@ void LLFloaterPreferenceGraphicsAdvanced::disableUnavailableSettings()
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail");
LLTextBox* sky_text = getChild<LLTextBox>("SkyMeshDetailText");
+ LLSliderCtrl* cas_slider = getChild<LLSliderCtrl>("RenderSharpness");
// disabled windlight
if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
@@ -330,6 +331,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/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index dd1be028cd..5172fad29d 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1503,18 +1503,13 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
if (http_not_found == mGetStatus)
{
- if (mFTType != FTT_MAP_TILE)
- {
- LL_WARNS(LOG_TXT) << "Texture missing from server (404): " << mUrl << LL_ENDL;
- }
-
if(mWriteToCacheState == NOT_WRITE) //map tiles or server bakes
{
setState(DONE);
releaseHttpSemaphore();
if (mFTType != FTT_MAP_TILE)
{
- LL_WARNS(LOG_TXT) << mID << " abort: WAIT_HTTP_REQ not found" << LL_ENDL;
+ LL_WARNS(LOG_TXT) << mID << "NOT_WRITE texture missing from server (404), abort: " << mUrl << LL_ENDL;
}
return true;
}
@@ -1524,6 +1519,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
LLViewerRegion* region = getRegion();
if (!region || mLastRegionId != region->getRegionID())
{
+ if (mFTType != FTT_MAP_TILE)
+ {
+ LL_INFOS(LOG_TXT) << "Texture missing from server (404), retrying: " << mUrl << " mRetryAttempt " << mRetryAttempt << LL_ENDL;
+ }
// cap failure? try on new region.
mUrl.clear();
++mRetryAttempt;
@@ -1532,6 +1531,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
return false;
}
}
+
+ if (mFTType != FTT_MAP_TILE)
+ {
+ LL_WARNS(LOG_TXT) << "Texture missing from server (404): " << mUrl << LL_ENDL;
+ }
}
else if (http_service_unavail == mGetStatus)
{
@@ -2734,7 +2738,7 @@ LLTextureFetchWorker* LLTextureFetch::getWorker(const LLUUID& id)
// Threads: T*
-bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
+bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level, S32& worker_state,
LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux,
LLCore::HttpStatus& last_http_get_status)
{
@@ -2743,6 +2747,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
LLTextureFetchWorker* worker = getWorker(id);
if (worker)
{
+ worker_state = worker->mState;
if (worker->wasAborted())
{
res = true;
@@ -2821,6 +2826,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level,
}
else
{
+ worker_state = 0;
res = true;
}
return res;
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index 3405f76e37..c2c5ec5acc 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -95,7 +95,7 @@ public:
// Threads: T*
// keep in mind that if fetcher isn't done, it still might need original raw image
- bool getRequestFinished(const LLUUID& id, S32& discard_level,
+ bool getRequestFinished(const LLUUID& id, S32& discard_level, S32& worker_state,
LLPointer<LLImageRaw>& raw, LLPointer<LLImageRaw>& aux,
LLCore::HttpStatus& last_http_get_status);
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index d2511aef7b..00e1ea4cd3 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1872,7 +1872,7 @@ bool LLViewerFetchedTexture::updateFetch()
if (mRawImage.notNull()) sRawCount--;
if (mAuxRawImage.notNull()) sAuxCount--;
// keep in mind that fetcher still might need raw image, don't modify original
- bool finished = LLAppViewer::getTextureFetch()->getRequestFinished(getID(), fetch_discard, mRawImage, mAuxRawImage,
+ bool finished = LLAppViewer::getTextureFetch()->getRequestFinished(getID(), fetch_discard, mFetchState, mRawImage, mAuxRawImage,
mLastHttpGetStatus);
if (mRawImage.notNull()) sRawCount++;
if (mAuxRawImage.notNull())
@@ -1979,6 +1979,7 @@ bool LLViewerFetchedTexture::updateFetch()
<< " mRawDiscardLevel " << mRawDiscardLevel
<< " current_discard " << current_discard
<< " stats " << mLastHttpGetStatus.toHex()
+ << " worker state " << mFetchState
<< LL_ENDL;
}
setIsMissingAsset();
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 a64b3eee36..b4b4bb6fd3 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -361,6 +361,7 @@
<slider
control_name="RenderExposure"
+ disabled_control="RenderVintageMode"
decimal_digits="1"
follows="left|top"
height="16"