CPU performance improvements for using half edge buffers in deformer graph data interface.
The half edge buffer was being uploaded per frame. Now it is stored in a resource owned by the data provider and uploaded once.
This is still less than ideal. We want the resource to be owned by the skel mesh, so that it is cooked instead of created at runtime. But that is work for another day.
Also test if we have any compute worker jobs before kicking off RDG graph. This allows for a fairer CPU comparison between skin cache and deformer graph. (We don't want to add RDG overhead to skin cache only work).
Also added support for reordering the compute work so for optimal GPU execution. Ordering by kernel index instead of graph index allows greater overlap of work on GPU when multiple compute graphs are running.
Added a per graph sort priority so that work sorting doesn't cause any setup graphs to run later than execution graphs.
#preflight 63f40694977ceed915769bfe
[CL 24343458 by jeremy moore in ue5-main branch]
Fix bug where dispatch sizes were being added in all dimensions, causing way too many threads to launch.
Fix is fine for all current execution data interfaces which launch 1d thread groups. Will need refining in the future for 2d or 3d thread groups.
#preflight 63ed944b0a06073fef033645
#rbx
[CL 24253413 by jeremy moore in ue5-main branch]
ComputeFramework: Support for unified dispatches.
When a kernel supports unified dispatch it combines any subinvocations into a single dispatch invocation.
This can only happen if all data interfaces support unified dispatch, and all subinvocation shaders are the same.
Some data interfaces, such as skeleton, don't support this because each section keeps its own bone buffer to keep bone count to a minimum.
In future we should look to change the underlying structures to support unified dispatch as much as possible, since it will be more performant.
#preflight 63ed39c7514832b242bce7a7
#rb jack.cai
[CL 24251753 by jeremy moore in ue5-main branch]
Change OptimusSource files to set virtual path through virtual file name instead of through (less robust) line directives.
#preflight 63cc5a8d574ab9cae49dc676
[CL 23803742 by Jeremy Moore in ue5-main branch]
This allows us to jump to compile errors in source for data interfaces that have simple source templates.
#preflight 63cc5a0bd83c1837b1b02af6
[CL 23803741 by Jeremy Moore in ue5-main branch]
Tidied logging during shader compilation.
Optimus: Add support for opening file in visual studio from shader compile errors in Editor or VS log.
#preflight 63c8c39f8168e8b2526e1c66
[CL 23772051 by Jeremy Moore in ue5-main branch]
Existing system was single threaded. With this change we can make used of shader workers.
#preflight 63c01769d862fdd347e46cc0
[CL 23662505 by Jeremy Moore in ue5-main branch]
Move them to ComputeFramework virtual path by default and use valid paths with .ush suffix.
This is in preparation for migrating to the core shared compliler manager which validates these things.
Compile error path->object resolution for source libraries will be broken, but fixed in a second pass.
#preflight 63c0123e577437afe639b2f5
[CL 23662136 by Jeremy Moore in ue5-main branch]
Source is included from there in generically named generated file.
#preflight 63bf6109de27f9bc450b69b1
[CL 23658267 by Jeremy Moore in ue5-main branch]
Failure can happen immediately or later in the pipe (for example when we try to fetch shaders).
Optimus: Use fallback for mesh deformers. Fallback is to simply reset the gpu passthrough vertex factory so that we see the bind pose. This is the same behavior as before, but now can happen at top or bottom of the pipe.
#preflight 63bda31aaf3ebedd992348eb
[CL 23629300 by Jeremy Moore in ue5-main branch]
Aim of change is to allow validation later in the pipe on the render thread, so that we can validate shader compilation etc.
Late validation of shader compilation will allow us to implement on demand compilation for compute framework shaders in the editor.
#preflight 63bcc30e5d4ef8faf6678bf2
[CL 23623611 by Jeremy Moore in ue5-main branch]
- CoreMinimal.h include removal all the way to PlayerController.h not transitively including it
#preflight 63b927dbc927e34482e15e18
#rb none
[CL 23608545 by henrik karlsson in ue5-main branch]
Change consist of only forward declaration and additional includes
#preflight 63789c1de30d438849c48188
#rb none
[CL 23218412 by henrik karlsson in ue5-main branch]
Added an Immediate execution group which will immediately enqueue the work to the render thread.
Optimus: Use Immediate execution to submit a deformer update when mesh component render state is recreated.
This prevents potential issue with one frame not having any deformerd vertices.
[CL 23147807 by jeremy moore in ue5-main branch]