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.