GameTechDev / PresentMon

Capture and analyze the high-level performance characteristics of graphics applications on Windows.
https://game.intel.com/story/intel-presentmon/
MIT License
1.65k stars 151 forks source link

Lose iFlip if the overlay is brought up. #235

Open otaku690 opened 5 months ago

otaku690 commented 5 months ago

I suppose the way the overlay is drawn, it forces OS composition and loses iFlip when overlay is ON. Is it possible to improve this?

giias commented 5 months ago

yes, and yeah this can be a big issue (because the dwm composition from a composed flip presentation results in lower performance and/or higher latency... and normally breaks VRR). i wouldn't really consider this a bug with intel's presentmon though tbh.

anyway, you'd basically need at least 2 MPO planes (with the display you're running the game on) to retain independent flip presentation if you got gamebar or presentmon widgets on top of the game.

If your display doesn't have MPOs (which i imagine is your case if your game is losing independent flip when you have a presentmon widget on top of the game), then i'd suggest moving the presentmon widgets to a side monitor if you have more than one monitor. Intel's presentmon fortunately does have an option to move the widgets to another monitor... and, who knows, maybe someday there'll also be an option to use a hook/injection based approach for the presentmon widgets.

a hook/injection based approach normally won't bring the game down into a composed flip presentation (plus may allow for a zero delay graphing of frametime/FPS; since presentmon could then measure the values directly via the target application's Present calls), but a hook/injection based approach may also bring in some compatibility challenges with certain games/apps (some may still not allow the hooking/injection overlays to show up at all...) as well as some different considerations for different render APIs, plus there could be a conflict with other/third-party overlays/videocapture/streaming apps also using hooking/injection

so Intel presentmon introducing a hook/injection based approach while also having an option for its current approach where the widgets are external would be ideal as i see it.