Note that this creates two global DISPLAY DCs, where the drawables are selected, to avoid frequent DC recreations which is costly. The draw calls are serialized between threads with the global context mutex.
As far as I can tell it performs similarly to the current XCopyArea implementation that is used for child window rendering, but has the advantage of being able to use XRender for scaling when we need to rescale the GL client area.
This also avoids all the issues that come with Proton fshack (with hooking the GL context to scale the framebuffer through GL calls), and hopefully achieving more or less the same thing, at the probable cost of additional copies.
--
v4: winex11: Use offscreen rendering to scale DPI-unaware GL windows.
winex11: Drop now unnecessary X11DRV_FLUSH_GL_DRAWABLE ExtEscape.
winex11: Implement offscreen window presents with NtGdiStretchBlt.
winex11: Introduce a new present_gl_drawable helper.
winex11: Detach offscreen OpenGL windows after creation.
winex11: Create OpenGL client windows in window DPI units.
winex11: Resize offscreen client surfaces after they are presented.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6398
v2: Better version which creates per-drawable DCs instead and fixes missing offscreen drawable resize.
Fwiw this fixes GL display when DPI scaling is used, and will also work for display mode virtualization, which I also intend to implement with DPI, similarly to how Windows now implements it.
I understand that using a display DC blit isn't great but it allows us to use XRender and to perform not too badly. Ideally this would be using some composition mechanism, but this will require a lot more work and could hopefully later replace it.
It's also not clear whether a compositor is doable in every case, as for instance it will require being able to export/import surfaces as DMA buffers, which simply may not be possible with remote X sessions.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6398#note_81606
Note that this creates two global DISPLAY DCs, where the drawables are selected, to avoid frequent DC recreations which is costly. The draw calls are serialized between threads with the global context mutex.
As far as I can tell it performs similarly to the current XCopyArea implementation that is used for child window rendering, but has the advantage of being able to use XRender for scaling when we need to rescale the GL client area.
This also avoids all the issues that come with Proton fshack (with hooking the GL context to scale the framebuffer through GL calls), and hopefully achieving more or less the same thing, at the probable cost of additional copies.
--
v2: winex11: Use offscreen rendering to scale DPI-unaware GL windows.
winex11: Drop now unnecessary X11DRV_FLUSH_GL_DRAWABLE ExtEscape.
winex11: Implement offscreen window presents with NtGdiStretchBlt.
winex11: Introduce a new present_gl_drawable helper.
winex11: Detach offscreen OpenGL windows after creation.
winex11: Create OpenGL client windows in window DPI units.
winex11: Resize offscreen client surfaces after they are presented.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6398
Previously, map_font() could return a font that does not directly
support the requested codepage but has a child font that does. By
enumerating fonts for the specific charset, as well as checking each
candidate font's signature, the returned font now directly supports the
codepage.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6450
Commit 1 prevents the media session from starting execution of an asynchronous operation while another asynchronous operation is still running. Without this, it was possible for invalid state transitions to happen, which could leave the session in an intermediary state (not stopped, started, paused, closed or shut down) indefinitely.
Commits 2, 3 and 4 are some more fixes around pausing and unpausing in mfplat.
--
v2: mf/session: Fix pausing a media session when the media source sends buffering events.
winegstreamer: Also flush token queue on seek.
mf/sar: Allow starting audio renderer again after pausing it.
mf/session: Prevent media session from running commands concurrently.
mf: Fix media session staying in RESTARTING_SOURCES state after failing to start/seek a media source.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6255