(From https://gitlab.winehq.org/wine/wine/-/merge_requests/6323)
--
v3: winewayland: Get rid of the window surface individual locks.
winewayland: Introduce a new wayland_client_surface_create helper.
winewayland: Get rid of window_surface reference from wayland_win_data.
winewayland: Get rid of wayland_surface reference from window_surface.
winewayland: Move window contents buffer to wayland_win_data struct.
winewayland: Reset the buffer damage region immediately after copy.
winewayland: Introduce a new get_window_surface_contents helper.
winewayland: Introduce a new set_window_surface_contents helper.
winewayland: Introduce a new ensure_window_surface_contents helper.
winewayland: Post WM_WAYLAND_CONFIGURE outside of the surface lock.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6374
This allows to use DLLOVERRIDES with native DLLs, making it more convenient for testing and debugging. This will also makes it possible to create an alternative media source implementation with a different backend without breaking the current one.
--
v2: mfmp4srcsnk: Register the MP3 and MPEG4 sink factory classes.
mfasfsrcsnk: Register the Asf Byte Stream Handler class.
mfmp4srcsnk: Register the MPEG4 Byte Stream Handler class.
mfsrcsnk: Register the WAV Byte Stream Handler class.
mfsrcsnk: Register the AVI Byte Stream Handler class.
mfsrcsnk: Refactor sink class factory helpers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6362
This is based on work done by Andrew Eikum. It has been in some form in Proton for the last 4 years.
If server's sampling rate is not 48kHz **DOOM Eternal** will try to set it 48kHz for the streams using the implemented interface. There's a whole class of audio devices that use 44.1kHz sampling rate and at least PulseAudio / PipeWire tends to inherit the value from the hardware to avoid resampling. The value can also be overridden by the user via the audio server's config files.
In such cases, if the interface is not present or stubbed, this results in **audio underruns and noticeable crackling**.
It's easy to test with pipewire-pulse:
```
$ cat /etc/pipewire/pipewire.conf.d/sample-rate.conf
context.properties = {
default.clock.rate = 41100
}
```
With PulseAudio this should be doable via setting `default-sample-rate = 41100` in `/etc/pulse/daemon.conf`.
--
v9: winepulse.drv: Implement set_sample_rate.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5585
I'm starting to consider wrapping more vulkan objects in win32u, I think it'll be useful to implement compositing (and incidentally shared resources with interop with the D3DKMT/NtGdi API), starting with nulldrv/offscreen swapchains. Alternatively we could export more functions from win32u and keep all the wrappers in winevulkan, but having access to win32u internals with a generic vulkan object wrapping mechanism seems to be more interesting.
Right now this is not very convenient because the vulkan object hierarchy is only available in winevulkan. This introduces shared structures and API between win32u and winevulkan so they can manipulate the wrapped objects from both side. The interface would only expose what is necessary, ie: the object hierarchy and wrapped handles, the instance and device functions, and the objects rbtree for debugging, so win32u can insert its wrapper there as well.
After moving the surface and swapchain wrappers to win32u, the interface would look like this: https://gitlab.winehq.org/rbernon/wine/-/blob/65ca1280d46a2dff792e298c22242… (I pushed a complete WIP branch to https://gitlab.winehq.org/rbernon/wine/-/commits/wip/vulkan-win32u-driver?r…). We can also consider moving all the winevulkan wrappers to win32u but it's not clear whether it's necessary or desirable, and we can also do that later using this interface.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6427
This activates the new DPI scaling, and stops pretending that every window is per-monitor DPI aware. It uses the GDI scaled surfaces for DPI-unaware windows, instead of the current higher resolution surfaces, which gives more blurry results but this is the same as Windows for DPI-unaware cases.
--
v3: win32u: Stop setting DPI_PER_MONITOR_AWARE by default.
explorer: Make the desktop thread per-monitor DPI aware.
user32: Move dpiaware_init to SYSPARAMS_Init.
server: Pass window's per-monitor DPI in set_window_pos.
win32u: Pass window_from_point dpi to list_children_from_point.
win32u: Map rect to window DPI in expose_window_surface.
winex11: Map message pos to physical DPI in move_resize_window.
winewayland: Remove unnecessary logical to physical DPI mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6396
This activates the new DPI scaling, and stops pretending that every window is per-monitor DPI aware. It uses the GDI scaled surfaces for DPI-unaware windows, instead of the current higher resolution surfaces, which gives more blurry results but this is the same as Windows for DPI-unaware cases.
--
v2: win32u: Stop setting DPI_PER_MONITOR_AWARE by default.
explorer: Make the desktop thread per-monitor DPI aware.
server: Pass window's per-monitor DPI in set_window_pos.
win32u: Pass window_from_point dpi to list_children_from_point.
win32u: Map rect to window DPI in expose_window_surface.
winex11: Map message pos to physical DPI in move_resize_window.
winewayland: Remove unnecessary logical to physical DPI mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6396