LunarG / gfxreconstruct

Graphics API Capture and Replay Tools for Reconstructing Graphics Application Behavior
https://vulkan.lunarg.com/doc/sdk/latest/linux/capture_tools.html
MIT License
384 stars 106 forks source link

Support Multiple Surfaces Types for Linux Replay #199

Open dustin-lunarg opened 5 years ago

dustin-lunarg commented 5 years ago

Linux replay currently converts all surface creation calls to either Xcb or Wayland surface creation calls. The tool should support creating multiple surface types during replay.

If a capture file contains both Xcb and Wayland surfaces, and the replay tool was built with support for both Xcb and Wayland surfaces, it should create both Wayland and Xcb surfaces instead of converting all surfaces to either Xcb surfaces or Wayland surfaces. It should only convert a surface if it was not built with support for that surface type.

per-mathisen-arm commented 3 years ago

Is the plan to also support surface composition? Especially on Android, I see games and apps increasingly using multiple surfaces (such as user interface) that overlap and leave it to SurfaceFlinger to compose them on top of each other. The capabilities for composition (display controller, OS compositor, etc.) may vary between platforms, and hopefully gfxreconstruct would be able to reconstruct the replay to work independently of them, so that eg you could trace on Android and replay correctly on desktop.

dustin-lunarg commented 3 years ago

The intent of this issue was to make Linux replay more flexible with respect to surface creation. We now support Xcb, Xlib, Wayland surface creation. By default, replay will always create surfaces as Xcb surfaces, with the --wsi option allowing the user to select a different WSI surface type. Eventually, we would like replay to automatically create surfaces based on the captured surface creation call. So if the capture file included a vkCreateXlibSurfaceKHR call, replay would automatically create an Xlib surface, instead of the current behavior where it will create an Xcb surface unless the uses specifies --wsi xlib to force creation of an Xlib surface.

Support for composition would be a separate issue. I'm assuming that it would be hard to automatically determine when surfaces need to be composited, so would require some user input to enable composition.