#rb charles.derousiers
[FYI] florin.pascu, henry.falconer, per.karefelt
#ushell-cherrypick of 30955220 by Charles.deRousiers
[CL 30955839 by charles derousiers in 5.4 branch]
- Added r.ParallelGatherDynamicMeshElements to control whether the feature is enabled. When disabled, tasks are constrained to the render thread as before.
- Added r.Visibility.DynamicMeshElements.NumTasks and r.Shadow.DynamicMeshElements.NumTasks which both default to 4. Thread contention becomes an issue at higher task counts for proxies which do a lot of uniform buffer or resource creation / updates.
Implementation Details:
The scene view visibility path typically has many dynamic elements per view, whereas there are typically more shadow views processing fewer elements each.
The main visibility path pushes dynamic primitives into a queue which is then processed by N async tasks, each with its own mesh collector and global vertex / index buffer. If a scene proxy is marked as not supporting parallel GDME, it is processed instead on the render thread in parallel with other async tasks. Niagara is currently the only proxy which is marked as unsupported by parallel GDME, as it has many potential sync points that would need to be untangled. When the async tasks complete, the task contexts are merged back to the view in an async task prior to launching dynamic mesh passes. Another important detail is that all material and GPU scene ops are deferred by the mesh collector and finalized at the end on the render thread. Deferring materials is necessary to allow the VT update task to overlap with GDME. The GPU scene updates are not thread safe and must be deferred.
The shadow path instead creates a queue of FProjectedShadowInfo's which is processed in parallel by async gather tasks (each with its own collector context). If a particular shadow has proxies that do not support parallel GDME, then a second pass is done over that FProjectedShadowInfo on the render thread to process the render thread only proxies. The dynamic mesh passes are launched asynchronously as well and are waited on by the shadow depth rendering passes later in the frame.
#rb krzysztof.narkowicz, christopher.waters
[CL 29289633 by zach bethel in ue5-main branch]
this way having the OODLE_ or TFO_ prefix enabled doesn't break ETC or ASTC remaps in the platform
fix TextureFormatRemovePrefixFromName incorrectly assuming format names don't have underscores in them
Platform remap config no longer needs prefixed versions
this also turns on Oodle for Android DXT flavor
#preflight https://horde.devtools.epicgames.com/job/63fcf77960163ed3c2494e6e
#rb dan.thompson
#jira none
[CL 24428598 by charles bloom in ue5-main branch]
#jira UE-159832
#rb Aaron.mcleran Phil.Popp Dan.Thompson Josh.Adams
#preflight 62d260033c3df323907eaa93
[CL 21153330 by jimmy smith in ue5-main branch]
Also, removed Game Circle
#jira UE-155308
#rb bertrand carre
#fyi jack.porter
#preflight 62b9c65ee77151e5996eb9b2
[CL 20831323 by axel riffard in ue5-main branch]
Improved UX For Device Tree and CVar Conditions
- Clean up Niagara Device Tree
- new bIsVisibleForAsssets value in device profiles to have them indicate which device profiles should be visible in other assets.
- Improved tooltips and colouring on device tree to better show what is enabled/disabled and why.
- Added tooltips for CVar conditions to text entry and suggestion boxes showing the CVar help text.
PlatformSet Redirect feature =
- Can redirect usage of device profiles to other device profiles or CVar conditions.
- Allows fixup of content referncing legacy device profiles.
- Adding CVar fx.Niagara.LegacyDeviceProfiles to facilitate some legacy DP fixup.
Platforms now specifiy a min & max Niagara Quality Level they support which reduces need for trawling ini files and allows fragments to set quality level.
CVar Conditions now have more control over what occurs when the condition is passed or failed. Previously they could only disable the set when the condition is failed which is now the default.
Misc Fixes
- Preview DP is cleared before restoring CVar states so CVar callbacks have the correct preview DP value.
- Data Driven CVars are now updated correctly when default is modified in project settings.
- Console Manager now has a callback when CVars are unregistered.
- Utility function for calling a functor on all platform sets in a Niagara system.
- Tweaked callbacks for CVar changes so updates are defered and also limited to only refresh things that references changed CVars.
#rb Stu.Mckenna, Josh.Adams
#preflight 6228bc3a1f1ec97d4e89a3c4
#ROBOMERGE-OWNER: josh.adams
#ROBOMERGE-AUTHOR: simon.tovey
#ROBOMERGE-SOURCE: CL 19321301 via CL 19321315 via CL 19325452 via CL 19327333 via CL 19327341
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v926-19321884)
[CL 19348289 by josh adams in ue5-main branch]
AndroidDeviceProfileSelectorModule is configured with values from a device.json file and used during device profile selection process.
the results are saved out to multiple files.
#rb chris.babcock
[FYI] jack.porter
#preflight 61f16731be0f0e0a62328476
#ROBOMERGE-AUTHOR: allan.bentham
#ROBOMERGE-SOURCE: CL 18736599 via CL 18736612 via CL 18736622 via CL 18736890 via CL 18737367
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v903-18687472)
[CL 18737698 by allan bentham in ue5-main branch]
Waiting on ITH-152309 to compress memory footprint of Marcie_Grain texture that is used by default.
#rb none
#lockdown michal.valient
#ROBOMERGE-SOURCE: CL 16824567
#ROBOMERGE-BOT: (v836-16769935)
[CL 16824585 by guillaume abadie in ue5-main branch]