At the moment GL/VK content can only be presented in top-level windows, since child windows are not backed by Wayland surfaces. This MR adds support for such scenarios, in a few gradual steps:
1. Create Wayland (sub)surfaces for all child windows, anchoring them to their parent surface, which may also be a child window surface (i.e., we support GL/VK in nested child windows). This approach works, but it pollutes the compositor with mostly unused, and possibly nested (sub)surfaces. We will deal with this later in the MR.
2. Ensure that the child window (sub)surfaces are properly updated and reconfigured, and support WS_POPUP <-> WS_CHILD style changes (reparenting etc).
3. In the second to last commit, improve efficiency by creating (sub)surfaces only for the child windows needed by GL/VK, and anchor them directly to the parent toplevel. This removes (sub)surface bloat and unnecessary nesting, the trade-off being some extra complexity when dealing with updates.
4. Finally improve the display of GDI content along with accelerated content.
Note that this MR doesn't clip GL/VK child window contents at the moment.
The subsurface mechanism introduced in this MR could also handle other kinds of windows in the future, for example display and properly position transient windows, menus etc.
--
v4: winewayland: Create Wayland surfaces for child windows on demand.
winewayland: Ensure parent surface contents for accelerated windows.
winewayland: Support Wayland surface role changes.
win32u: Update children window state when the parent state changes.
winewayland: Post WM_WAYLAND_CONFIGURE outside of the surface lock.
winewayland: Use weak references for parent wayland_surfaces.
winewayland: Handle subsurface reconfiguration.
winewayland: Create subsurfaces for child windows.
winewayland: Store all window rects in wayland_win_data.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6107
Test Driver Unlimited Solar Crown depends on that (both calling ProcessTlsInformation and hotpatches the same to fixup the thread local storage allocation from ntdll).
--
v2: ntdll: Match memory allocation layout for ThreadLocalStoragePointer.
ntdll: Use NtSetInformationProcess( ProcessTlsInformation ) in alloc_tls_slot().
ntdll: Implement NtSetInformationProcess( ProcessTlsInformation ).
ntdll/tests: Add tests for NtSetInformationProcess( ProcessTlsInformation ).
https://gitlab.winehq.org/wine/wine/-/merge_requests/6549
On Tue Sep 24 22:54:03 2024 +0000, Shmerl wrote:
> registry / regedit is a way to handle wine settings. That's not limited
> to winedmo. Though naming could be a bit better. I was trying to dig
> through it using ffmpeg as a filter, while the key is
> DisableGstByteStreamHandler. I.e. may be instead of negative it could be
> positive `UseFfmpeg...` or something..
Yes i know. But they use to make them into "Settings" when they are broadly used (i.e. gamers).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6442#note_83282