[FYI] erica.stella
Original CL Desc
-----------------------------------------------------------------
Added movable point lights dynamic shadows in mobile forward renderer
#jira UE-211646
#rb Dmitriy.Dyomin, Florin.Pascu
[CL 35974859 by bob tellez in ue5-main branch]
#rb charles.derousiers
[FYI] florin.pascu, henry.falconer, per.karefelt
#ushell-cherrypick of 30955220 by Charles.deRousiers
[CL 30955660 by charles derousiers in ue5-main 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]