rumham However, I noticed a 1.5ms increase in the following call stack:
• TimeUpdate.WaitForLastPresentationAndUpdateTime
• GfxDeviceD3D11.WaitForLastPresent
• DXGI.WaitOnSwapChain
That's (usually) waiting for VSync.
rumham However, on the Steam Deck, FPS dropped from 45 to 5 instead.
Do you mean that FPS dropped from 45 to 5 if disabling SkeletonAnimation
components when they are not needed? That's very strange indeed. Could you verify that removing the disable/enable code brings everything back to 45 FPS and it's really this change that causes the FPS drop?
Note that there is an Advanced - Update When Invisible
property available at the SkeletonAnimation
component (and SkeletonRenderer
in general). If you don't want to utilize this feature and manually want to disable updates, you could also change skeletonAnimation.UpdateMode
from UpdateMode.FullUpdate
to e.g. UpdateMode.OnlyAnimationStatus
or UpdateMode.Nothing
.
Could you please try if setting skeletonAnimation.UpdateMode
to Nothing
and back to FullUpdate
instead of disabling and re-enabling the component makes any difference?
rumham but VSync is disabled in this case.
Are you sure that nothing (the OS, when being in Desktop instead of Game Mode) is overriding your
vsync settings to on? Can you see screen tearing? Otherwise I would assume that vsync is still on.
rumham My best guess is that the GPU is stalling while waiting for a mesh update that never happens because SkeletonAnimation is disabled.
Unfortunately, this is where my knowledge of graphic rendering and hardware ends.
That can't be the cause, as a different mesh is only modified and assigned if it is changed. If nothing is changed, nothing is done at all, so no buffer being locked and waiting to be unlocked or anything like that. There is no such low-level buffer access happening for mesh updates.