MPCook And CookPackageSplitter: Implement on demand creation and splitting of generator packages rather than only creating them during save.
#jira UE-188805
#jira UE-177380
#rnx
#rb Zousar.Shaker
[CL 32468020 by matt peters in ue5-main branch]
-Fix Panning on Linux is slow
-Add bUseHighPrecisionMouseMovement (true by default) and bUseInterpolationWithManualPanning (false by default) as Graph Editor Settings, set to the current behaviour, but can be switched to allow for a better panning experience on Linux versions of the editor.
#jira UE-209711
#rb ben.hoffman, ronald.koppers
[FYI] jason.walter
[CL 32463490 by jared therriault in ue5-main branch]
[FYI] Matt.Peters
Original CL Desc
-----------------------------------------------------------------
MPCook And CookPackageSplitter: Implement on demand creation and splitting of generator packages rather than only creating them during save.
#jira UE-188805
#jira UE-177380
#rnx
#rb Zousar.Shaker
[CL 32446435 by bob tellez in ue5-main branch]
#rb bradley.heath, carles.fernandez, tyler.staples
#tests Tested against Dedicated Server Win64 Cooked Data
[CL 32321776 by matt harris in ue5-main branch]
- This was mainly used for bindless descriptor updates, where updates need to be applied to all GPU pipelines.
- Switching pipeline can change the current active breadcrumb on the new pipeline. Doing this at the bottom-of-pipe is not possible as the start/end breadcrumbs for each command list must be known at dispatch time (before execution / translation).
- Added EnqueueLambdaMultiPipe which passes an array of RHI contexts to the lambda. This generally replaces the FRHICommandListBase& which is handed down through the platform RHI.
- EnqueueLambdaMultiPipe may only be called at the top-of-pipe.
Replace RHITransfer[...]UnderlyingResource with RHIReplaceResources on FDynamicRHI / platform implementations
- Old function was always bottom-of-pipe, so couldn't call EnqueueLambdaMultiPipe. New function takes the RHICmdList and is called at top-of-pipe.
- All resource types are merged into the same function (currently buffers and raytracing geometry).
Remove use of RHILockBuffer and RHIUnlockBuffer at the bottom-of-pipe
- Since platform RHIs need to use EnqueueLambdaMultiPipe for buffer locks/unlocks, it is no longer possible to call RHILock/UnlockBuffer at the bottom-of-pipe.
- Also, buffers locked on parallel translating command lists are broken. Lock/unlock calls RHIThreadFence(true), which flags the command list for single-thread translate, however calling this at the bottom-of-pipe is too late, as the decision to dispatch the command list in parallel has already been made.
- Added checks in these functions to catch future use.
#rb zach.bethel
#jira UE-208823
[FYI] christopher.waters
[CL 32220227 by luke thatcher in ue5-main branch]
Add basic DX12 Work Graph support.
For this first pass there is no exposed RHI functionality for directly dispatching a work graph. Instead shader bundles have been extended to support a work graph based implementation.
Nanite compute materials now can use work graph shader bundles on D3D12 when r.Nanite.AllowWorkGraphMaterials and r.Nanite.Bundle.Shading are both set. Both of these default to off at the moment.
Also DataDrivenPlatformInfo now expose bSupportsWorkGraphs. This is false everywhere, but will be enabled for D3D12_SM6 as soon as we have the latest DXC shader compiler with lib_6_8 support submitted.
#rb Kenzo.Terelst, Yuriy.ODonnell
[CL 32196717 by jeremy moore in ue5-main branch]
Currently disabling VT in Project Settings breaks Android SM5 renderer because shaders are missing.
By removing r.VirtualTextures=1 from the config it's now possibler to toggle it via Project Settings.
It is still possible to use VT for SM5 but have it disabled for mobile since mobile already requires an additional mobile CVar to be enabled.
#rb Dmitriy.Dyomin, Jack.Porter
#jira UE-208703
[CL 32062814 by florian penzkofer in ue5-main branch]
#rb Martin.Ridgers
#jira UE-189912
#rnx
- When it was added ForceTocFromMountedPaks controlled if we should create .uondemandtoc files when building IAS data and if we should use them at runtime, this was inflexiable for testing purposes so has been split into:
-- engine.ini:[Ias]:CreatePerContainerTocs which controls if we should create the files.
-- engine.ini:[Ias]:UsePerContainerTocs which controls if we should run from the files.
- Both values remain defaulted to off so that the system is only used as opt in.
[CL 31943526 by paul chipchase in ue5-main branch]
::Before::
- Boot -> PIE (6m3s)
- FCoreRedirects::RedirectNameAndValues: 18s
::After::
- Boot -> PIE (5m41s)
- FCoreRedirects::RedirectNameAndValues: 5.3s
- MatchWildcard=true support has been added to how CoreRedirects are defined in INI files. You may now define OldName="...SomeSuffix", OldName="SomePrefix..." or OldName="...SomeSubstring..." to perform string manipulation based matching for redirects, deprecating MatchSubstring=true
- Substring matches are very expensive compared to pure FName matching or even prefix and suffix matching. This expense is problematic since the presence of a substring matching rule can mean that all queries for a particular redirect type, such as package name, will need to perform the substring check even if a substring match is relatively uncommon. To combat this cost, we add a reimplementation of the PM-k, (PredictMatch-8) algorithm. This allows a redirect query to check for substring matches against _all_ possible substrings with a single pass over the redirect query name. The fuzzy matching is designed such that false positives may occur but not false negatives. When a fuzzy match is found we must perform the slow substring match to confirm. However fuzzy matching allows use to dramatically reduce our string scannin. In a case where there were 4 MatchSubstrings, from boot to PIE, we now perform slow substring matches < 0.8% of the time compared to previously.
- Replaces `FString` manipulation during redirect queries to instead use a small wrapper type `FNameUtf8String` which provides a small API to allow for FName comparisons, building and ultimately reducing copies. UTF8 is used since we need to ensure we have an encoding that we can keep the same for storing wildcard strings that will match how we query for wildcard matches. UTF8 is byte efficient for ANSI text, which improves fuzzy match prediction.
==========================================
Substring Stats
Substring Lookups: 24342736
Prediction Hit: 72
Prediction Miss: 213377
==========================================
#jira UE-204063
#rb Matt.Peters
[FYI] Francis.Hurteau
[CL 31941627 by kevin macaulayvacher in ue5-main branch]