summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llcommon/llcommon.cpp8
-rw-r--r--indra/llcommon/llmemory.h2
-rw-r--r--indra/llrender/llimagegl.cpp32
-rw-r--r--indra/llrender/llshadermgr.cpp3
-rw-r--r--indra/llui/lluistring.cpp6
-rw-r--r--indra/llui/lluistring.h7
-rw-r--r--indra/llwindow/llwindowmacosx.cpp52
-rw-r--r--indra/llwindow/llwindowmacosx.h3
-rw-r--r--indra/newview/app_settings/settings.xml2
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl3
-rw-r--r--indra/newview/featuretable_mac.txt26
-rw-r--r--indra/newview/llappviewer.cpp54
-rw-r--r--indra/newview/llavatarpropertiesprocessor.cpp7
-rw-r--r--indra/newview/llfloatereditextdaycycle.cpp4
-rw-r--r--indra/newview/llfloaterenvironmentadjust.cpp4
-rw-r--r--indra/newview/llfloaterfixedenvironment.cpp2
-rw-r--r--indra/newview/llfloaterpreferencesgraphicsadvanced.cpp21
-rw-r--r--indra/newview/llfloaterregioninfo.cpp10
-rw-r--r--indra/newview/llfloaterregioninfo.h4
-rw-r--r--indra/newview/llpaneleditsky.cpp2
-rw-r--r--indra/newview/llpanelenvironment.cpp14
-rw-r--r--indra/newview/llreflectionmapmanager.cpp10
-rw-r--r--indra/newview/llsettingsvo.cpp2
-rw-r--r--indra/newview/llviewercontrol.cpp18
-rw-r--r--indra/newview/llviewershadermgr.cpp61
-rw-r--r--indra/newview/llviewerwindow.cpp13
-rw-r--r--indra/newview/pipeline.cpp15
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml6
-rw-r--r--indra/newview/skins/default/xui/pl/notifications.xml5
29 files changed, 242 insertions, 154 deletions
diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp
index f1f3958fe0..84b35749cc 100644
--- a/indra/llcommon/llcommon.cpp
+++ b/indra/llcommon/llcommon.cpp
@@ -54,7 +54,7 @@ void* ll_tracy_new(size_t size)
{
throw std::bad_alloc();
}
- TracyAlloc(ptr, size);
+ LL_PROFILE_ALLOC(ptr, size);
return ptr;
}
@@ -70,7 +70,7 @@ void* operator new[](std::size_t count)
void ll_tracy_delete(void* ptr)
{
- TracyFree(ptr);
+ LL_PROFILE_FREE(ptr);
if (gProfilerEnabled)
{
//LL_PROFILE_ZONE_SCOPED_CATEGORY_MEMORY;
@@ -102,13 +102,13 @@ void operator delete[](void* ptr) noexcept
void *tracy_aligned_malloc(size_t size, size_t alignment)
{
auto ptr = ll_aligned_malloc_fallback(size, alignment);
- if (ptr) TracyAlloc(ptr, size);
+ if (ptr) LL_PROFILE_ALLOC(ptr, size);
return ptr;
}
void tracy_aligned_free(void *memblock)
{
- TracyFree(memblock);
+ LL_PROFILE_FREE(memblock);
ll_aligned_free_fallback(memblock);
}
diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h
index 80cfe554c4..b616edfde7 100644
--- a/indra/llcommon/llmemory.h
+++ b/indra/llcommon/llmemory.h
@@ -222,7 +222,7 @@ inline void* ll_aligned_realloc_16(void* ptr, size_t size, size_t old_size) // r
ll_aligned_free_16(ptr);
}
#endif
- LL_PROFILE_ALLOC(ptr, size);
+ LL_PROFILE_ALLOC(ret, size);
return ret;
}
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 84c61c790f..5ac3243fd4 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1052,7 +1052,7 @@ U32 type_width_from_pixtype(U32 pixtype)
bool should_stagger_image_set(bool compressed)
{
#if LL_DARWIN
- return false;
+ return !compressed && on_main_thread() && gGLManager.mIsAMD;
#else
// glTexSubImage2D doesn't work with compressed textures on select tested Nvidia GPUs on Windows 10 -Cosmic,2023-03-08
// Setting media textures off-thread seems faster when not using sub_image_lines (Nvidia/Windows 10) -Cosmic,2023-03-31
@@ -1270,37 +1270,37 @@ void LLImageGL::generateTextures(S32 numTextures, U32 *textures)
}
}
+constexpr int DELETE_DELAY = 3; // number of frames to wait before deleting textures
+static std::vector<U32> sFreeList[DELETE_DELAY+1];
+
// static
void LLImageGL::updateClass()
{
sFrameCount++;
+
+ // wait a few frames before actually deleting the textures to avoid
+ // synchronization issues with the GPU
+ U32 idx = (sFrameCount+DELETE_DELAY) % (DELETE_DELAY+1);
+
+ if (!sFreeList[idx].empty())
+ {
+ free_tex_images((GLsizei) sFreeList[idx].size(), sFreeList[idx].data());
+ glDeleteTextures((GLsizei)sFreeList[idx].size(), sFreeList[idx].data());
+ sFreeList[idx].resize(0);
+ }
}
// static
void LLImageGL::deleteTextures(S32 numTextures, const U32 *textures)
{
- // wait a few frames before actually deleting the textures to avoid
- // synchronization issues with the GPU
- static std::vector<U32> sFreeList[4];
-
if (gGLManager.mInited)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
- U32 idx = sFrameCount % 4;
-
+ U32 idx = sFrameCount % (DELETE_DELAY+1);
for (S32 i = 0; i < numTextures; ++i)
{
sFreeList[idx].push_back(textures[i]);
}
-
- idx = (sFrameCount + 3) % 4;
-
- if (!sFreeList[idx].empty())
- {
- free_tex_images((GLsizei) sFreeList[idx].size(), sFreeList[idx].data());
- glDeleteTextures((GLsizei)sFreeList[idx].size(), sFreeList[idx].data());
- sFreeList[idx].resize(0);
- }
}
}
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index 47f1032c34..254ead2bd8 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -580,7 +580,8 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev
}
else
{
- if (type == GL_GEOMETRY_SHADER)
+ // OpenGL 3.2 had GLSL version 1.50. anything after that the version numbers match.
+ if (type == GL_GEOMETRY_SHADER || minor_version >= 50)
{
//set version to 1.50
shader_code_text[shader_code_count++] = strdup("#version 150\n");
diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp
index bfadeb8428..ab6de16639 100644
--- a/indra/llui/lluistring.cpp
+++ b/indra/llui/lluistring.cpp
@@ -47,6 +47,12 @@ void LLUIString::assign(const std::string& s)
dirty();
}
+void LLUIString::assign(const LLWString& instring)
+{
+ mOrig = wstring_to_utf8str(instring);
+ dirty();
+}
+
void LLUIString::setArgList(const LLStringUtil::format_map_t& args)
{
diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h
index b9d4ff0ebb..950d4e72c6 100644
--- a/indra/llui/lluistring.h
+++ b/indra/llui/lluistring.h
@@ -61,10 +61,11 @@ public:
LLUIString() : mArgs(NULL), mNeedsResult(false), mNeedsWResult(false) {}
LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args);
LLUIString(const std::string& instring) : mArgs(NULL) { assign(instring); }
- LLUIString(const LLWString& instring) : mArgs(NULL) { insert(0, instring); }
+ LLUIString(const LLWString& instring) : mArgs(NULL) { assign(instring); }
~LLUIString() { delete mArgs; }
void assign(const std::string& instring);
+ void assign(const LLWString& instring);
LLUIString& operator=(const std::string& s) { assign(s); return *this; }
void setArgList(const LLStringUtil::format_map_t& args);
@@ -109,8 +110,8 @@ private:
LLStringUtil::format_map_t* mArgs;
// controls lazy evaluation
- mutable bool mNeedsResult;
- mutable bool mNeedsWResult;
+ mutable bool mNeedsResult { true };
+ mutable bool mNeedsWResult { true };
};
#endif // LL_LLUISTRING_H
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index 80001b14ee..f26d692363 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -68,6 +68,41 @@ namespace
bool LLWindowMacOSX::sUseMultGL = false;
+//static
+void LLWindowMacOSX::setUseMultGL(bool use_mult_gl)
+{
+ bool was_enabled = sUseMultGL;
+
+ sUseMultGL = use_mult_gl;
+
+ if (gGLManager.mInited)
+ {
+ CGLContextObj ctx = CGLGetCurrentContext();
+ //enable multi-threaded OpenGL (whether or not sUseMultGL actually changed)
+ if (sUseMultGL)
+ {
+ CGLError cgl_err;
+
+ cgl_err = CGLEnable( ctx, kCGLCEMPEngine);
+
+ if (cgl_err != kCGLNoError )
+ {
+ LL_INFOS("GLInit") << "Multi-threaded OpenGL not available." << LL_ENDL;
+ sUseMultGL = false;
+ }
+ else
+ {
+ LL_INFOS("GLInit") << "Multi-threaded OpenGL enabled." << LL_ENDL;
+ }
+ }
+ else if (was_enabled)
+ {
+ CGLDisable( ctx, kCGLCEMPEngine);
+ LL_INFOS("GLInit") << "Multi-threaded OpenGL disabled." << LL_ENDL;
+ }
+ }
+}
+
// Cross-platform bits:
bool check_for_card(const char* RENDERER, const char* bad_card)
@@ -704,23 +739,8 @@ bool LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
// Disable vertical sync for swap
toggleVSync(enable_vsync);
- //enable multi-threaded OpenGL
- if (sUseMultGL)
- {
- CGLError cgl_err;
- CGLContextObj ctx = CGLGetCurrentContext();
-
- cgl_err = CGLEnable( ctx, kCGLCEMPEngine);
+ setUseMultGL(sUseMultGL);
- if (cgl_err != kCGLNoError )
- {
- LL_INFOS("GLInit") << "Multi-threaded OpenGL not available." << LL_ENDL;
- }
- else
- {
- LL_INFOS("GLInit") << "Multi-threaded OpenGL enabled." << LL_ENDL;
- }
- }
makeFirstResponder(mWindow, mGLView);
return true;
diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h
index f5b6441746..7de1a40d93 100644
--- a/indra/llwindow/llwindowmacosx.h
+++ b/indra/llwindow/llwindowmacosx.h
@@ -147,6 +147,9 @@ public:
void toggleVSync(bool enable_vsync) override;
+ // enable or disable multithreaded GL
+ static void setUseMultGL(bool use_mult_gl);
+
protected:
LLWindowMacOSX(LLWindowCallbacks* callbacks,
const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 6d6a52a77f..07298fa921 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -9185,7 +9185,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>1</integer>
+ <integer>0</integer>
</map>
<key>RenderSkyAutoAdjustAmbientScale</key>
<map>
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
index 02aaf24194..3e702f26be 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
@@ -308,6 +308,7 @@ void main()
final_scale = 1;
#endif
- frag_color = max(color * final_scale, vec4(0));
+ color.rgb *= final_scale;
+ frag_color = max(color, vec4(0));
}
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index b05e66fed6..a0af98a451 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -1,4 +1,4 @@
-version 68
+version 71
// 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
@@ -67,9 +67,9 @@ RenderFSAAType 1 2
RenderFSAASamples 1 3
RenderMaxTextureIndex 1 16
RenderGLContextCoreProfile 1 1
-RenderGLMultiThreadedTextures 1 0
-RenderGLMultiThreadedMedia 1 0
-RenderAppleUseMultGL 1 0
+RenderGLMultiThreadedTextures 1 1
+RenderGLMultiThreadedMedia 1 1
+RenderAppleUseMultGL 1 1
RenderReflectionsEnabled 1 1
RenderReflectionProbeDetail 1 2
RenderScreenSpaceReflections 1 1
@@ -111,7 +111,7 @@ RenderShadowDetail 1 0
WLSkyDetail 1 96
RenderFSAAType 1 0
RenderFSAASamples 1 0
-RenderReflectionsEnabled 1 1
+RenderReflectionsEnabled 1 0
RenderReflectionProbeDetail 1 0
RenderScreenSpaceReflections 1 0
RenderReflectionProbeLevel 1 0
@@ -405,20 +405,30 @@ list TexUnit16orLess
RenderTerrainPBRDetail 1 -1
list AMD
-RenderDeferredSSAO 1 0
+UseOcclusion 1 0
+RenderGLMultiThreadedTextures 1 0
+
+list NVIDIA
+RenderGLMultiThreadedTextures 1 0
+RenderGLMultiThreadedMedia 1 0
+RenderAppleUseMultGL 1 0
list Intel
RenderAnisotropic 1 0
RenderFSAASamples 1 0
+RenderGLMultiThreadedTextures 1 0
+RenderGLMultiThreadedMedia 1 0
+RenderAppleUseMultGL 1 0
// AppleGPU and NonAppleGPU can be thought of as Apple silicon vs Intel Mac
list AppleGPU
RenderGLMultiThreadedMedia 1 0
RenderAppleUseMultGL 1 0
+RenderGLMultiThreadedTextures 1 0
+RenderGLMultiThreadedMedia 1 0
list NonAppleGPU
-RenderGLMultiThreadedMedia 1 0
-RenderAppleUseMultGL 1 0
+RenderDeferredSSAO 1 0
list GL3
RenderFSAASamples 0 0
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 08b7b439e8..c770b7c917 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1038,53 +1038,6 @@ bool LLAppViewer::init()
}
}
-#if LL_WINDOWS && ADDRESS_SIZE == 64
- if (gGLManager.mIsIntel)
- {
- // Check intel driver's version
- // Ex: "3.1.0 - Build 8.15.10.2559";
- std::string version = ll_safe_string((const char *)glGetString(GL_VERSION));
-
- const boost::regex is_intel_string("[0-9].[0-9].[0-9] - Build [0-9]{1,2}.[0-9]{2}.[0-9]{2}.[0-9]{4}");
-
- if (boost::regex_search(version, is_intel_string))
- {
- // Valid string, extract driver version
- std::size_t found = version.find("Build ");
- std::string driver = version.substr(found + 6);
- S32 v1, v2, v3, v4;
- S32 count = sscanf(driver.c_str(), "%d.%d.%d.%d", &v1, &v2, &v3, &v4);
- if (count > 0 && v1 <= 10)
- {
- LL_INFOS("AppInit") << "Detected obsolete intel driver: " << driver << LL_ENDL;
-
- if (!gViewerWindow->getInitAlert().empty() // graphic initialization crashed on last run
- || LLVersionInfo::getInstance()->getChannelAndVersion() != gLastRunVersion // viewer was updated
- || mNumSessions % 20 == 0 //periodically remind user to update driver
- )
- {
- LLUIString details = LLNotifications::instance().getGlobalString("UnsupportedIntelDriver");
- std::string gpu_name = ll_safe_string((const char *)glGetString(GL_RENDERER));
- LL_INFOS("AppInit") << "Notifying user about obsolete intel driver for " << gpu_name << LL_ENDL;
- details.setArg("[VERSION]", driver);
- details.setArg("[GPUNAME]", gpu_name);
- S32 button = OSMessageBox(details.getString(),
- LLStringUtil::null,
- OSMB_YESNO);
- if (OSBTN_YES == button && gViewerWindow)
- {
- std::string url = LLWeb::escapeURL(LLTrans::getString("IntelDriverPage"));
- if (gViewerWindow->getWindow())
- {
- gViewerWindow->getWindow()->spawnWebBrowser(url, false);
- }
- }
- }
- }
- }
- }
-#endif
-
// Obsolete? mExpectedGLVersion is always zero
#if LL_WINDOWS
if (gGLManager.mGLVersion < LLFeatureManager::getInstance()->getExpectedGLVersion())
@@ -2218,7 +2171,12 @@ bool LLAppViewer::initThreads()
// get the number of concurrent threads that can run
S32 cores = std::thread::hardware_concurrency();
-
+#if LL_DARWIN
+ if (!gGLManager.mIsApple)
+ {
+ cores /= 2;
+ }
+#endif
U32 max_cores = gSavedSettings.getU32("EmulateCoreCount");
if (max_cores != 0)
{
diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp
index 299cc5ed64..6277e65b2d 100644
--- a/indra/newview/llavatarpropertiesprocessor.cpp
+++ b/indra/newview/llavatarpropertiesprocessor.cpp
@@ -41,6 +41,7 @@
#include "lltrans.h"
#include "llui.h" // LLUI::getLanguage()
#include "message.h"
+#include "llappviewer.h"
LLAvatarPropertiesProcessor::LLAvatarPropertiesProcessor()
{
@@ -367,7 +368,11 @@ void LLAvatarPropertiesProcessor::requestAvatarPropertiesCoro(std::string cap_ur
avatar_data.picks_list.emplace_back(pick_data["id"].asUUID(), pick_data["name"].asString());
}
- inst.notifyObservers(avatar_id, &avatar_data, type);
+ LLAppViewer::instance()->postToMainCoro(
+ [avatar_id, avatar_data, type]()
+ {
+ LLAvatarPropertiesProcessor::instance().notifyObservers(avatar_id, (void*) &avatar_data, type);
+ });
}
void LLAvatarPropertiesProcessor::processAvatarLegacyPropertiesReply(LLMessageSystem* msg, void**)
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp
index fd58cd8aaf..42307dd3f8 100644
--- a/indra/newview/llfloatereditextdaycycle.cpp
+++ b/indra/newview/llfloatereditextdaycycle.cpp
@@ -1712,6 +1712,7 @@ void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID item_id, S32 track)
void LLFloaterEditExtDayCycle::showHDRNotification(const LLSettingsDay::ptr_t &pday)
{
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
for (U32 i = LLSettingsDay::TRACK_GROUND_LEVEL; i <= LLSettingsDay::TRACK_MAX; i++)
{
LLSettingsDay::CycleTrack_t &day_track = pday->getCycleTrack(i);
@@ -1722,7 +1723,8 @@ void LLFloaterEditExtDayCycle::showHDRNotification(const LLSettingsDay::ptr_t &p
while (iter != end)
{
LLSettingsSky::ptr_t sky = std::static_pointer_cast<LLSettingsSky>(iter->second);
- if (sky
+ if (should_auto_adjust()
+ && sky
&& sky->canAutoAdjust()
&& sky->getReflectionProbeAmbiance(true) != 0.f)
{
diff --git a/indra/newview/llfloaterenvironmentadjust.cpp b/indra/newview/llfloaterenvironmentadjust.cpp
index 3b8a25b3a6..35f8340997 100644
--- a/indra/newview/llfloaterenvironmentadjust.cpp
+++ b/indra/newview/llfloaterenvironmentadjust.cpp
@@ -178,7 +178,7 @@ void LLFloaterEnvironmentAdjust::refresh()
getChild<LLTextureCtrl>(FIELD_SKY_CLOUD_MAP)->setValue(mLiveSky->getCloudNoiseTextureId());
getChild<LLTextureCtrl>(FIELD_WATER_NORMAL_MAP)->setValue(mLiveWater->getNormalMapID());
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true);
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
getChild<LLUICtrl>(FIELD_REFLECTION_PROBE_AMBIANCE)->setValue(mLiveSky->getReflectionProbeAmbiance(should_auto_adjust));
LLColor3 glow(mLiveSky->getGlow());
@@ -494,7 +494,7 @@ void LLFloaterEnvironmentAdjust::updateGammaLabel()
{
if (!mLiveSky) return;
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true);
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
F32 ambiance = mLiveSky->getReflectionProbeAmbiance(should_auto_adjust);
if (ambiance != 0.f)
{
diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp
index e44202312b..d28c987414 100644
--- a/indra/newview/llfloaterfixedenvironment.cpp
+++ b/indra/newview/llfloaterfixedenvironment.cpp
@@ -182,8 +182,10 @@ void LLFloaterFixedEnvironment::setEditSettingsAndUpdate(const LLSettingsBase::p
LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT);
// teach user about HDR settings
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
if (mSettings
&& mSettings->getSettingsType() == "sky"
+ && should_auto_adjust()
&& ((LLSettingsSky*)mSettings.get())->canAutoAdjust()
&& ((LLSettingsSky*)mSettings.get())->getReflectionProbeAmbiance(true) != 0.f)
{
diff --git a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
index cf5b2d033b..8e8967ee3d 100644
--- a/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
+++ b/indra/newview/llfloaterpreferencesgraphicsadvanced.cpp
@@ -63,17 +63,24 @@ LLFloaterPreferenceGraphicsAdvanced::~LLFloaterPreferenceGraphicsAdvanced()
bool LLFloaterPreferenceGraphicsAdvanced::postBuild()
{
- // Don't do this on Mac as their braindead GL versioning
- // sets this when 8x and 16x are indeed available
+ // Disable FSAA combo when shaders are not loaded
//
-#if !LL_DARWIN
- if (gGLManager.mIsIntel || gGLManager.mGLVersion < 3.f)
- { //remove FSAA settings above "4x"
+ {
LLComboBox* combo = getChild<LLComboBox>("fsaa");
- combo->remove("8x");
- combo->remove("16x");
+ if (!gFXAAProgram[0].isComplete())
+ combo->remove("FXAA");
+
+ if (!gSMAAEdgeDetectProgram[0].isComplete())
+ combo->remove("SMAA");
+
+ if (!gFXAAProgram[0].isComplete() && !gSMAAEdgeDetectProgram[0].isComplete())
+ {
+ combo->setEnabled(false);
+ getChild<LLComboBox>("fsaa quality")->setEnabled(false);
+ }
}
+#if !LL_DARWIN
LLCheckBoxCtrl *use_HiDPI = getChild<LLCheckBoxCtrl>("use HiDPI");
use_HiDPI->setVisible(false);
#endif
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index efeee1ad3c..3239921259 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -2100,8 +2100,14 @@ LLPanelEstateInfo::LLPanelEstateInfo()
mEstateID(0) // invalid
{
LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
- estate_info.setCommitCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
- estate_info.setUpdateCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
+ mEstateInfoCommitConnection = estate_info.setCommitCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
+ mEstateInfoUpdateConnection = estate_info.setUpdateCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
+}
+
+LLPanelEstateInfo::~LLPanelEstateInfo()
+{
+ mEstateInfoCommitConnection.disconnect();
+ mEstateInfoUpdateConnection.disconnect();
}
// static
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 65c1291728..201d8b0a68 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -320,7 +320,7 @@ public:
bool onMessageCommit(const LLSD& notification, const LLSD& response);
LLPanelEstateInfo();
- ~LLPanelEstateInfo() {}
+ ~LLPanelEstateInfo();
void updateControls(LLViewerRegion* region);
@@ -352,6 +352,8 @@ protected:
bool checkSunHourSlider(LLUICtrl* child_ctrl);
U32 mEstateID;
+ boost::signals2::connection mEstateInfoCommitConnection;
+ boost::signals2::connection mEstateInfoUpdateConnection;
};
/////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llpaneleditsky.cpp b/indra/newview/llpaneleditsky.cpp
index ea2b2ba944..3d376251ff 100644
--- a/indra/newview/llpaneleditsky.cpp
+++ b/indra/newview/llpaneleditsky.cpp
@@ -209,7 +209,7 @@ void LLPanelSettingsSkyAtmosTab::refresh()
F32 droplet_radius = mSkySettings->getSkyDropletRadius();
F32 ice_level = mSkySettings->getSkyIceLevel();
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true);
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
F32 rp_ambiance = mSkySettings->getReflectionProbeAmbiance(should_auto_adjust);
getChild<LLUICtrl>(FIELD_SKY_DENSITY_MOISTURE_LEVEL)->setValue(moisture_level);
diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp
index d3df88b65e..831ad7827a 100644
--- a/indra/newview/llpanelenvironment.cpp
+++ b/indra/newview/llpanelenvironment.cpp
@@ -359,12 +359,14 @@ void LLPanelEnvironmentInfo::refresh()
void LLPanelEnvironmentInfo::refreshFromEstate()
{
- LLViewerRegion *pRegion = gAgent.getRegion();
-
- bool oldAO = mAllowOverride;
- mAllowOverride = (isRegion() && LLEstateInfoModel::instance().getAllowEnvironmentOverride()) || pRegion->getAllowEnvironmentOverride();
- if (oldAO != mAllowOverride)
- refresh();
+ LLViewerRegion* pRegion = gAgent.getRegion();
+ if (pRegion)
+ {
+ bool oldAO = mAllowOverride;
+ mAllowOverride = (isRegion() && LLEstateInfoModel::instance().getAllowEnvironmentOverride()) || pRegion->getAllowEnvironmentOverride();
+ if (oldAO != mAllowOverride)
+ refresh();
+ }
}
std::string LLPanelEnvironmentInfo::getNameForTrackIndex(U32 index)
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 8695022147..8f75b108cc 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -404,6 +404,13 @@ void LLReflectionMapManager::update()
{
closestDynamic = probe;
}
+
+ if (sLevel == 0)
+ {
+ // only update default probe when coverage is set to none
+ llassert(probe == mDefaultProbe);
+ break;
+ }
}
if (realtime && closestDynamic != nullptr)
@@ -713,6 +720,7 @@ void LLReflectionMapManager::updateProbeFace(LLReflectionMap* probe, U32 face)
}
else
{
+ llassert(gSavedSettings.getS32("RenderReflectionProbeLevel") > 0); // should never update a probe that's not the default probe if reflection coverage is none
probe->update(mRenderTarget.getWidth(), face);
}
@@ -1070,7 +1078,7 @@ void LLReflectionMapManager::updateUniforms()
LLEnvironment& environment = LLEnvironment::instance();
LLSettingsSky::ptr_t psky = environment.getCurrentSky();
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true);
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
F32 minimum_ambiance = psky->getReflectionProbeAmbiance(should_auto_adjust);
bool is_ambiance_pass = gCubeSnapshot && !isRadiancePass();
diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp
index 85e2f4db90..cf96072ae2 100644
--- a/indra/newview/llsettingsvo.cpp
+++ b/indra/newview/llsettingsvo.cpp
@@ -795,7 +795,7 @@ void LLSettingsVOSky::applySpecial(void *ptarget, bool force)
F32 g = getGamma();
static LLCachedControl<bool> hdr(gSavedSettings, "RenderHDREnabled");
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true);
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
static LLCachedControl<F32> auto_adjust_ambient_scale(gSavedSettings, "RenderSkyAutoAdjustAmbientScale", 0.75f);
static LLCachedControl<F32> auto_adjust_hdr_scale(gSavedSettings, "RenderSkyAutoAdjustHDRScale", 2.f);
static LLCachedControl<F32> auto_adjust_blue_horizon_scale(gSavedSettings, "RenderSkyAutoAdjustBlueHorizonScale", 1.f);
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 172ffcb0d4..18746e76fc 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -77,6 +77,10 @@
#include "llstartup.h"
#include "llperfstats.h"
+#if LL_DARWIN
+#include "llwindowmacosx.h"
+#endif
+
// Third party library includes
#include <boost/algorithm/string.hpp>
@@ -453,6 +457,17 @@ static bool handleReflectionProbeDetailChanged(const LLSD& newvalue)
return true;
}
+#if LL_DARWIN
+static bool handleAppleUseMultGLChanged(const LLSD& newvalue)
+{
+ if (gGLManager.mInited)
+ {
+ LLWindowMacOSX::setUseMultGL(newvalue.asBoolean());
+ }
+ return true;
+}
+#endif
+
static bool handleHeroProbeResolutionChanged(const LLSD &newvalue)
{
if (gPipeline.isInit())
@@ -820,6 +835,9 @@ void settings_setup_listeners()
setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeLevel", handleReflectionProbeDetailChanged);
setting_setup_signal_listener(gSavedSettings, "RenderReflectionProbeDetail", handleReflectionProbeDetailChanged);
setting_setup_signal_listener(gSavedSettings, "RenderReflectionsEnabled", handleReflectionProbeDetailChanged);
+#if LL_DARWIN
+ setting_setup_signal_listener(gSavedSettings, "RenderAppleUseMultGL", handleAppleUseMultGLChanged);
+#endif
setting_setup_signal_listener(gSavedSettings, "RenderScreenSpaceReflections", handleReflectionProbeDetailChanged);
setting_setup_signal_listener(gSavedSettings, "RenderMirrors", handleReflectionProbeDetailChanged);
setting_setup_signal_listener(gSavedSettings, "RenderHeroProbeResolution", handleHeroProbeResolutionChanged);
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index 9f04c98770..5b4648a0bf 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -2512,6 +2512,7 @@ bool LLViewerShaderMgr::loadShadersDeferred()
{"28", "High"},
{"39", "Ultra"} };
int i = 0;
+ bool failed = false;
for (const auto& quality_pair : quality_levels)
{
if (success)
@@ -2535,10 +2536,26 @@ bool LLViewerShaderMgr::loadShadersDeferred()
gFXAAProgram[i].mShaderLevel = mShaderLevel[SHADER_DEFERRED];
success = gFXAAProgram[i].createShader();
- llassert(success);
+ // llassert(success);
+ if (!success)
+ {
+ LL_WARNS() << "Failed to create shader '" << gFXAAProgram[i].mName << "', disabling!" << LL_ENDL;
+ // continue as if this shader never happened
+ failed = true;
+ success = true;
+ break;
+ }
}
++i;
}
+
+ if (failed)
+ {
+ for (auto i = 0; i < 4; ++i)
+ {
+ gFXAAProgram[i].unload();
+ }
+ }
}
if (gGLManager.mGLVersion > 3.15f && success)
@@ -2546,8 +2563,9 @@ bool LLViewerShaderMgr::loadShadersDeferred()
std::vector<std::pair<std::string, std::string>> quality_levels = { {"SMAA_PRESET_LOW", "Low"},
{"SMAA_PRESET_MEDIUM", "Medium"},
{"SMAA_PRESET_HIGH", "High"},
- {"SMAA_PRESET_ULTRA", "Ultra"} };
+ {"SMAA_PRESET_ULTRA", "Ultra"} };
int i = 0;
+ bool failed = false;
for (const auto& smaa_pair : quality_levels)
{
std::map<std::string, std::string> defines;
@@ -2576,6 +2594,15 @@ bool LLViewerShaderMgr::loadShadersDeferred()
gSMAAEdgeDetectProgram[i].mShaderFiles.push_back(make_pair("deferred/SMAA.glsl", GL_VERTEX_SHADER_ARB));
gSMAAEdgeDetectProgram[i].mShaderLevel = mShaderLevel[SHADER_DEFERRED];
success = gSMAAEdgeDetectProgram[i].createShader();
+ // llassert(success);
+ if (!success)
+ {
+ LL_WARNS() << "Failed to create shader '" << gSMAAEdgeDetectProgram[i].mName << "', disabling!" << LL_ENDL;
+ // continue as if this shader never happened
+ failed = true;
+ success = true;
+ break;
+ }
}
if (success)
@@ -2593,6 +2620,15 @@ bool LLViewerShaderMgr::loadShadersDeferred()
gSMAABlendWeightsProgram[i].mShaderFiles.push_back(make_pair("deferred/SMAA.glsl", GL_VERTEX_SHADER_ARB));
gSMAABlendWeightsProgram[i].mShaderLevel = mShaderLevel[SHADER_DEFERRED];
success = gSMAABlendWeightsProgram[i].createShader();
+ // llassert(success);
+ if (!success)
+ {
+ LL_WARNS() << "Failed to create shader '" << gSMAABlendWeightsProgram[i].mName << "', disabling!" << LL_ENDL;
+ // continue as if this shader never happened
+ failed = true;
+ success = true;
+ break;
+ }
}
if (success)
@@ -2610,9 +2646,28 @@ bool LLViewerShaderMgr::loadShadersDeferred()
gSMAANeighborhoodBlendProgram[i].mShaderFiles.push_back(make_pair("deferred/SMAA.glsl", GL_VERTEX_SHADER_ARB));
gSMAANeighborhoodBlendProgram[i].mShaderLevel = mShaderLevel[SHADER_DEFERRED];
success = gSMAANeighborhoodBlendProgram[i].createShader();
+ // llassert(success);
+ if (!success)
+ {
+ LL_WARNS() << "Failed to create shader '" << gSMAANeighborhoodBlendProgram[i].mName << "', disabling!" << LL_ENDL;
+ // continue as if this shader never happened
+ failed = true;
+ success = true;
+ break;
+ }
}
++i;
}
+
+ if (failed)
+ {
+ for (auto i = 0; i < 4; ++i)
+ {
+ gSMAAEdgeDetectProgram[i].unload();
+ gSMAABlendWeightsProgram[i].unload();
+ gSMAANeighborhoodBlendProgram[i].unload();
+ }
+ }
}
if (success && gGLManager.mGLVersion > 4.05f)
@@ -2811,7 +2866,7 @@ bool LLViewerShaderMgr::loadShadersDeferred()
gDeferredStarProgram.mShaderGroup = LLGLSLShader::SG_SKY;
gDeferredStarProgram.addConstant( LLGLSLShader::SHADER_CONST_STAR_DEPTH ); // SL-14113
- add_common_permutations(&gDeferredWLSkyProgram);
+ add_common_permutations(&gDeferredStarProgram);
success = gDeferredStarProgram.createShader();
llassert(success);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 4bd1cdd6a1..8a5aac9b8b 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -5391,6 +5391,8 @@ bool LLViewerWindow::cubeSnapshot(const LLVector3& origin, LLCubeMapArray* cubea
camera->setUserClipPlane(clipPlane);
}
+ gPipeline.pushRenderTypeMask();
+
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); // stencil buffer is deprecated | GL_STENCIL_BUFFER_BIT);
U32 dynamic_render_types[] = {
@@ -5479,16 +5481,7 @@ bool LLViewerWindow::cubeSnapshot(const LLVector3& origin, LLCubeMapArray* cubea
}
}
- if (!dynamic_render)
- {
- for (int i = 0; i < dynamic_render_type_count; ++i)
- {
- if (prev_dynamic_render_type[i])
- {
- gPipeline.toggleRenderType(dynamic_render_types[i]);
- }
- }
- }
+ gPipeline.popRenderTypeMask();
if (hide_hud)
{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 6c8fe60776..1ca67dd88a 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7142,7 +7142,7 @@ void LLPipeline::tonemap(LLRenderTarget* src, LLRenderTarget* dst)
// Apply gamma correction to the frame here.
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true);
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
@@ -7192,7 +7192,7 @@ void LLPipeline::gammaCorrect(LLRenderTarget* src, LLRenderTarget* dst)
LLGLDepthTest depth(GL_FALSE, GL_FALSE);
static LLCachedControl<bool> buildNoPost(gSavedSettings, "RenderDisablePostProcessing", false);
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true);
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
LLGLSLShader& shader = psky->getReflectionProbeAmbiance(should_auto_adjust) == 0.f ? gLegacyPostGammaCorrectProgram :
@@ -7396,8 +7396,7 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst)
{
{
llassert(!gCubeSnapshot);
- bool multisample = RenderFSAAType == 1 && mFXAAMap.isComplete();
- LLGLSLShader* shader = &gGlowCombineProgram;
+ bool multisample = RenderFSAAType == 1 && gFXAAProgram[0].isComplete() && mFXAAMap.isComplete();
// Present everything.
if (multisample)
@@ -7410,7 +7409,7 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst)
mFXAAMap.bindTarget();
mFXAAMap.clear(GL_COLOR_BUFFER_BIT);
- shader = &gGlowCombineFXAAProgram;
+ LLGLSLShader* shader = &gGlowCombineFXAAProgram;
shader->bind();
S32 channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
@@ -7481,7 +7480,7 @@ void LLPipeline::applyFXAA(LLRenderTarget* src, LLRenderTarget* dst)
void LLPipeline::generateSMAABuffers(LLRenderTarget* src)
{
llassert(!gCubeSnapshot);
- bool multisample = RenderFSAAType == 2 && mFXAAMap.isComplete() && mSMAABlendBuffer.isComplete();
+ bool multisample = RenderFSAAType == 2 && gSMAAEdgeDetectProgram[0].isComplete() && mFXAAMap.isComplete() && mSMAABlendBuffer.isComplete();
// Present everything.
if (multisample)
@@ -7599,7 +7598,7 @@ void LLPipeline::generateSMAABuffers(LLRenderTarget* src)
void LLPipeline::applySMAA(LLRenderTarget* src, LLRenderTarget* dst)
{
llassert(!gCubeSnapshot);
- bool multisample = RenderFSAAType == 2 && mFXAAMap.isComplete() && mSMAABlendBuffer.isComplete();
+ bool multisample = RenderFSAAType == 2 && gSMAAEdgeDetectProgram[0].isComplete() && mFXAAMap.isComplete() && mSMAABlendBuffer.isComplete();
// Present everything.
if (multisample)
@@ -8318,7 +8317,7 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, LLRenderTarget* light_
}
// auto adjust legacy sun color if needed
- static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", true);
+ static LLCachedControl<bool> should_auto_adjust(gSavedSettings, "RenderSkyAutoAdjustLegacy", false);
static LLCachedControl<F32> auto_adjust_sun_color_scale(gSavedSettings, "RenderSkyAutoAdjustSunColorScale", 1.f);
LLSettingsSky::ptr_t psky = LLEnvironment::instance().getCurrentSky();
LLColor3 sun_diffuse(mSunDiffuse.mV);
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index cb31bea237..b5f742e5fb 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -10159,12 +10159,6 @@ Do you wish to continue?
yestext="OK"/>
</notification>
- <global name="UnsupportedIntelDriver">
-The installed Intel graphics driver for [GPUNAME], version [VERSION], is significantly out of date and is known to cause excessive rates of program crashes. You are strongly advised to update to a current Intel driver
-
-Do you want to check the Intel driver website?
- </global>
-
<global name="UnsupportedCPUAmount">
796
</global>
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index e668c6cc20..ad9d2ecf1d 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -3577,11 +3577,6 @@ Czy chcesz kontynuować?
Wybrany obiekt ma wpływ na Navmesh. Dodanie elastyczności spowoduje usunięcie go z Navmesha.
<usetemplate ignoretext="Wybrany obiekt ma wpływ na Navmesh. Dodanie elastyczności spowoduje usunięcie go z Navmesha." name="okcancelignore" notext="Anuluj" />
</notification>
- <global name="UnsupportedIntelDriver">
- Zainstalowany sterownik graficzny Intela dla [GPUNAME], wersja [VERSION], jest przestarzały i jest znany z powodowania awarii. Zdecydowanie zaleca się aktualizację do aktualnego sterownika Intel.
-
-Czy chcesz sprawdzić witrynę sterowników firmy Intel?
- </global>
<global name="UnsupportedGPU">
- Twoja karta graficzna nie spełnia minimalnych wymagań.
</global>