A snapshot from insight is provided in the description. Below are further questions I am hoping detailed :
Also, it seems that all “ParallelDraw” call are capped to 8 parallel instances. Looking into the code, I found this variable :
TAutoConsoleVariable<int32> CVarRHICmdWidth(
TEXT(“r.RHICmdWidth”),
8,
TEXT(“Controls the task granularity of a great number of things in the parallel renderer.”));
Can you elaborate on its impact ?
Also, I may read the code wrongly but I feel that code path is flagged as deprecated :
PRAGMA_DISABLE_DEPRECATION_WARNINGS
UE_DEPRECATED(5.5, “Use Draw / Dispatch instead.”)
void DispatchDraw(FParallelCommandListSet* ParallelCommandListSet, FRHICommandList& RHICmdList, const FInstanceCullingDrawParams* InstanceCullingDrawParams = nullptr) const;
PRAGMA_ENABLE_DEPRECATION_WARNINGS
Is there any project setting that could enforce this usage ? Any hint on how to ensure the most performant path is selected ?
[Attachment Removed]
Steps to Reproduce
Hi,
We are reaching a point where performances are becoming an issue into our project.
Is there any existing documentation on the various rendering passes, their purpose and the leverages for getting data in / out the passes.
Attached is an example from our insight capture.
As you can expect, the base pass is way too long for our objectives.
Thanks,
[Attachment Removed]
Hello,
Thank you for reaching out.
I’ve been assigned this issue, and we will be looking into your questions.
[Attachment Removed]
Hello,
You are correct that FParallelMeshDrawCommandPass::DispatchDraw was deprecated in Unreal Engine 5.5.
The minimum of r.RHICmdWidth and the number of worker threads is used in FParallelMeshDrawCommandPass::Dispatch to determine the number of tasks per pass.
The geometry passes seem to have a lot of draw commands per task. Are you using Nanite with this project?
Can you please send an Unreal Insights trace?
Please see this documentation page for an overview of potential optimizations:
https://dev.epicgames.com/documentation/en-us/unreal-engine/optimizing-and-debugging-projects-for-realtime-rendering-in-unreal-engine#getting-started-optimizing-your-project
[Attachment Removed]
Hi Stern,
I uploaded a small insight trace in the other case ( [Content removed] )
If FParallelMeshDrawCommandPass::DispatchDraw is getting deprecated, what is the preferred code path and how can we ensure it is selected ?
We are not using Nanite for the project. Last we check, there was no guarantee it will be suitable for blended displays as required in our nDisplay setups…
We reviewed the mentioned page a few times already and are picking elements from it in an order that seems accessible and benefitial to us.
Best,
Basile
[Attachment Removed]
Hello,
There is no caller of FParallelMeshDrawCommandPass::DispatchDraw in Unreal Engine 5.6.
It is possible that preemptive thread scheduling of many Background Worker threads is causing tasks on the same time interval as the ParallelDraw tasks to take longer.
This would affect the performance of the “Gather Deleted Resources” task mentioned in this ticket: [Content removed]
You can use a sampling CPU profiler to investigate context switching and potential thread starvation issues.
Please let us know if this helps.
[Attachment Removed]
Hi Stern,
First, I believe you are right. The deprecated method is not called and this inquiry was a misread from the trace on my side. I was not confident in the beginning as I pointed it out right. So this item can be closed.
However, while we were able to play with the variable to have better parallelisation, the main question in this ticket for us was :
Is there any existing documentation on the various rendering passes, their purpose and the leverages for getting data in / out the passes ?
For instance, what gets inside the velocity pass ?
I doubt we need much in it and it seems our assets / levels are deeply contributing to the load. The idea would be to determine how to rework / configure our assets to reduce the contribution to the minimum.
Thanks,
Basile
[Attachment Removed]
Hello,
Here are a couple of documentation pages and similar covering the Rendering Pipeline.
The Graphics Programming page leads to a number of other pages that might be helpful:
https://dev.epicgames.com/documentation/en-us/unreal-engine/graphics-programming-for-unreal-engine
The best place to look for more detailed information is the source code.
The console command “dumpgpu” produces a HTML-based GPU dump in a cross-platform method that allows you to better examine the inputs and outputs of each major pass.
[Attachment Removed]