summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorRunitaiLinden <davep@lindenlab.com>2023-10-16 13:54:38 -0500
committerRunitaiLinden <davep@lindenlab.com>2023-10-16 13:54:38 -0500
commit09aedbb7a9b4bfa56b7acd3250d10c483a5ac219 (patch)
treeb1c666d988ee67bd464da537be423b03bc247419 /indra
parent71d0603773a0d406560fc6add8a61f7e8d3cdb27 (diff)
SL-20258 Fix for LSL spamming new probes into the scene deadlocking probe updater. Add probe update debug display.
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llreflectionmapmanager.cpp23
-rw-r--r--indra/newview/llviewermenu.cpp6
-rw-r--r--indra/newview/pipeline.h3
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml10
4 files changed, 38 insertions, 4 deletions
diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 915c8893a4..283c97ff0a 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -39,6 +39,8 @@
extern BOOL gCubeSnapshot;
extern BOOL gTeleportDisplay;
+static U32 sUpdateCount = 0;
+
// get the next highest power of two of v (or v if v is already a power of two)
//defined in llvertexbuffer.cpp
extern U32 nhpo2(U32 v);
@@ -91,7 +93,7 @@ static bool check_priority(LLReflectionMap* a, LLReflectionMap* b)
return false;
}
else if (b->mCubeIndex == -1)
- { // certainly higher priority than b
+ { // b is not a candidate for updating, a is higher priority by default
return true;
}
else if (!a->mComplete && !b->mComplete)
@@ -103,7 +105,13 @@ static bool check_priority(LLReflectionMap* a, LLReflectionMap* b)
return update_score(a) > update_score(b);
}
- // one of these probes is not complete, if b is complete, a is higher priority
+ // a or b is not complete,
+ if (sUpdateCount % 3 == 0)
+ { // every third update, allow complete probes to cut in line in front of non-complete probes to avoid spammy probe generators from deadlocking scheduler (SL-20258))
+ return !b->mComplete;
+ }
+
+ // prioritize incomplete probe
return b->mComplete;
}
@@ -351,6 +359,7 @@ void LLReflectionMapManager::update()
probe->autoAdjustOrigin();
+ sUpdateCount++;
mUpdatingProbe = probe;
doProbeUpdate();
}
@@ -537,8 +546,14 @@ void LLReflectionMapManager::doProbeUpdate()
updateProbeFace(mUpdatingProbe, mUpdatingFace);
+ bool debug_updates = gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PROBE_UPDATES) && mUpdatingProbe->mViewerObject;
+
if (++mUpdatingFace == 6)
{
+ if (debug_updates)
+ {
+ mUpdatingProbe->mViewerObject->setDebugText(llformat("%.1f", (F32)gFrameTimeSeconds), LLColor4(1, 1, 1, 1));
+ }
updateNeighbors(mUpdatingProbe);
mUpdatingFace = 0;
if (isRadiancePass())
@@ -552,6 +567,10 @@ void LLReflectionMapManager::doProbeUpdate()
mRadiancePass = true;
}
}
+ else if (debug_updates)
+ {
+ mUpdatingProbe->mViewerObject->setDebugText(llformat("%.1f", (F32)gFrameTimeSeconds), LLColor4(1, 1, 0, 1));
+ }
}
// Do the reflection map update render passes.
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 3708ad82e8..553eaaf9b2 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1089,7 +1089,11 @@ U64 info_display_from_string(std::string info_display)
}
else if ("reflection probes" == info_display)
{
- return LLPipeline::RENDER_DEBUG_REFLECTION_PROBES;
+ return LLPipeline::RENDER_DEBUG_REFLECTION_PROBES;
+ }
+ else if ("probe updates" == info_display)
+ {
+ return LLPipeline::RENDER_DEBUG_PROBE_UPDATES;
}
else
{
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index d4c6432e55..6e4c9c7a97 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -605,7 +605,8 @@ public:
RENDER_DEBUG_TEXEL_DENSITY = 0x40000000,
RENDER_DEBUG_TRIANGLE_COUNT = 0x80000000,
RENDER_DEBUG_IMPOSTORS = 0x100000000,
- RENDER_DEBUG_REFLECTION_PROBES = 0x200000000
+ RENDER_DEBUG_REFLECTION_PROBES = 0x200000000,
+ RENDER_DEBUG_PROBE_UPDATES = 0x400000000
};
public:
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 8b39ea192b..0bfdead6e7 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2975,6 +2975,16 @@ function="World.EnvPreset"
parameter="reflection probes" />
</menu_item_check>
<menu_item_check
+ label="Probe Updates"
+ name="Probe Updates">
+ <menu_item_check.on_check
+ function="Advanced.CheckInfoDisplay"
+ parameter="probe updates" />
+ <menu_item_check.on_click
+ function="Advanced.ToggleInfoDisplay"
+ parameter="probe updates" />
+ </menu_item_check>
+ <menu_item_check
label="Particles"
name="Particles">
<menu_item_check.on_check