Files
UnrealEngineUWP/Engine/Source/Runtime/SlateCore
luke thatcher 8bcaa1fff8 Remove use of SwitchPipeline at the bottom-of-pipe (i.e. during RHI command list execution).
- 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]
2024-03-13 13:49:59 -04:00
..