I'm not sure about the need for this solution, so it's a **DRAFT**. For me it is an academic interest to check whether atomic locks will give advantages over pthread_mutex in games. First impressions are that games have become smoother, but need to think about tests that can actually be measured.
Before build need define `WINE_USE_ATOMIC_LOCKS`.
```bash
export CFLAGS="${CFLAGS} -DWINE_USE_ATOMIC_LOCKS"
```
--
v7: ws2_32: Add atomic lock support.
wine32u: Add atomic lock support.
winevulkan: Add atomic lock support.
ntdll: Add atomic lock support.
winewayland: Add atomic lock support.
include: Define custom mutex macroses.
msxml3: Fix compilation errors with Clang 18.
configure: Change C standard to C17.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6031
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`.
--
v6: winepulse.drv: Implement set_sample_rate.
mmdevapi: Add stub IAudioClockAdjustment implementation.
mmdevapi/tests: Add more IAudioClock tests.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5585
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 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.
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.
--
v2: winewayland: Improve integration of GDI rendering with accelerated content.
winewayland: Create Wayland surfaces for child windows on demand.
winewayland: Ensure parent surface contents for accelerated windows.
winewayland: Support Wayland surface role changes.
winewayland: Use weak references for parent wayland_surfaces.
winewayland: Handle subsurface reconfiguration.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6107
--
v2: qcap: Delay setting v4l device format until stream start.
quartz: Propagate graph start error in MediaControl_Run().
qcap/tests: Add a test for simultaneous video capture usage.
qcap/tests: Fix test failure in testsink_Receive() on some hardware.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6022
--
v2: widl: Propagate attrs to inner pointer types.
widl: Ignore strings in is_embedded_complex().
widl: Get rid of the write_embedded_types() helper.
widl: Explicitly check for top-level parameters before adding FC_ALLOCED_ON_STACK.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6165
In win32u/font.c's `create_child_font_list` function:
- We remove the `ansi_cp` `MaximumCharacterSize` check since this is the current locale's codepage, not the font's codepage. This was preventing certain child fonts from being loaded when they should have been.
- We include Microsoft Sans Serif as a child font, whereas previously we were only including its linked fonts as child font.
- As a backup, we also add Tahoma (which should ship with Wine) and its linked fonts as child fonts in case Microsoft Sans Serif is not available.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6046