Hello Alex.
Thanks for welcoming (even if I contributed once something like 10 years ago :smile:).
You are right, I forgot to mention it was required by Tableau Hyper API as you can download it [here](https://pypi.org/project/tableauhyperapi/0.0.21200/#files). This is shipped with a python package to read/write .hyper DB files (see [doc](https://tableau.github.io/hyper-db/docs/guides/sql_commands) on how to that in a few lines of python).
Don't ask why I'm using python windows on a linux machine :slight_smile: We work with an ETL tool that integrates this as a way to import/export files for Tableau (which is also an ETL tool).
Cheers.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7115#note_92566
These tests are for implementing encoding of sink writer. The implements MR is !7160, working in progress. Submitted the tests MR first.
--
v3: mfreadwrite/tests: Test sample processing for mp4 sink writer.
mfreadwrite/tests: Test getting transforms from mp4 sink writer.
mfreadwrite/tests: Test AddStream and SetInputMediaType for mp4 sink writer.
mfreadwrite/tests: Remove trivial if.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7125
> I was trying to figure out how I should fix the failing tests, but I couldn't find any documentation regarding them: could someone please give me some hints? Thanks!
>
> I've also had a look at commit b0a5fa50f989 (the previous addition of PCI IDs to wined3d) in hope to learn what test updates were necessary, but there were no test updates at all in that commit :? I'm quite confused...
The failing tests are spurious and unrelated; please feel free to just ignore them.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7171#note_92547
I was trying to figure out how I should fix the failing tests, but I couldn't find any documentation regarding them: could someone please give me some hints? Thanks!
I've also had a look at commit b0a5fa50f989 (the previous addition of PCI IDs to wined3d) in hope to learn what test updates were necessary, but there were no test updates at all in that commit :? I'm quite confused...
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7171#note_92545
This should fix [bug 54339](https://bugs.winehq.org/show_bug.cgi?id=54339) for desktop models.
PCI IDs were obtained from https://devicehunt.com/view/type/pci/vendor/10DE/ and additionally verified against https://techpowerup.com/vgabios/ except for the 40xx SUPER line models that were obtained only from https://techpowerup.com/vgabios/ .
I tested the patch on Debian trixie against wine-9.0 and 10.0~rc2 with my 3090: my card was correctly recognized and there were some performance gains when playing SC2. I've also created a [ppa with patched packages for Ubuntu noble and oracular](https://launchpad.net/~morgwai/+archive/ubuntu/wine) and posted links on reddit to [r/linux_gaming](https://www.reddit.com/r/linux_gaming/comments/1i37g2q/pls_… and [r/ubuntu](https://www.reddit.com/r/Ubuntu/comments/1i3ifkx/pls_help_testing… asking for help with testing with other models, but the posts were removed and [my account was banned](https://www.reddit.com/user/morgwai666/) for "posting spam" (I tried to appeal, but never got a reply). I am however completely almost sure that other 30xx models will work correctly as well since this is the same GPU architecture. 40xx models should work correctly as long as
`DRIVER_NVIDIA_KEPLER` is able to support them: I believe this to be the case, but was not able to test it.
As both 30xx and 40xx series are really messed up in terms of different variants within the same "base models" (things "Ti", "LHR", VRAM size *may* correspond to different PCI IDs), constant names and string descriptions became really long which in turn messed up the code formatting/alignment. Please let me know if the current formatting is acceptable or if I should change it somehow or maybe even add one more commit that increases spacing between fields in all other rows to make it all aligned.
I skipped mobile models for now: honestly putting this together was extremely tedious and frustrating (especially as it was unfolding before my eyes how messed up the mapping is due to different variants), so I didn't want to dedicate more time to this until I received some positive feedback.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7171
This is an alternative proposal to !5830. It fixes the same glitches in Horizon Zero Dawn, but attempts to do that by implementing the proper behavior expected from the swapchain. More precisely, it fixes a few mistakes I had made the last time I touched this code, it implements the frame latency waitable with a semaphore instead of an event (as it should be) and at last it uses the frame latency waitable to implement an appropriate wait after presentation when the client didn't request to manage the waitable directly.
This implementation is not yet complete, because the semaphore should be released when the frame is presented. Knowing when this is the case would require using `VK_KHR_present_wait`. We currently approximate that with the moment in which the frame is submitted for presentation to Vulkan, which as far as I can tell is good enough. Eventually I'll try to write the proper thing.
This MR depends on https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1343, which has been submitted in the meantime to vkd3d. The vkd3d change is included in the first commit, so this MR is already functional.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7152
No reviews required.\
This is just to get the test results as seen by gitlab.\
MR will be cancelled afterwards.
--
v6: winhttp/tests: Allow some more notifications for the new test.winehq.org server.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7098
Is this a mistake? are the brackets very strangely located, or was the condition accidentally deleted there? Maybe legacy code.
--
v2: msvcrt: fixed missing TRACE_ON check
https://gitlab.winehq.org/wine/wine/-/merge_requests/7153
We don't need copies of this function in three places.
--
v2: comdlg32: Use StrRetToBuf instead of reimplementing it.
shell32: Use StrRetToBuf instead of reimplementing it.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7165
If application sends out-of-range values for FFB effects, they become -1, which is undesireable, when -1 is in the physical range of the field and being sent to the device. This patch fixes it, clamping values to the field range. Clamping was earlier implemented [here](https://gitlab.winehq.org/wine/wine/-/blob/wine-6.19/dlls/dinput/effe… in 6.19. Windows does this clamping silently, and doesn't fail `SetParameters` call when values is out of range.
Affected application is Assetto Corsa EVO, which with default settings sends out ConstantForce magnitude under/over [documented](https://learn.microsoft.com/en-us/previous-versions/ms835644(v=… \[-10000, 10000\]. [Link to the discussion with some investigation on Steam](https://steamcommunity.com/app/3058630/discussions/0/756142145462617….
In this submission scaling and clamping were moved to the separate `scale_and_clamp_value` function, which is now called every time from `set_parameter_value`. To avoid regression with sending `-1` for the infinite duration effects, separate function `set_parameter_value_no_scaling` created. Gain values in `hid_joystick_send_device_gain` are also scaled and clamped.
--
v2: dinput: Clamp FFB effect report value to the field range.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7161
If application sends out-of-range values for FFB effects, they become -1, which is undesireable, when -1 is in the physical range of the field and being sent to the device. This patch fixes it, clamping values to the field range. Clamping was earlier implemented [here](https://gitlab.winehq.org/wine/wine/-/blob/wine-6.19/dlls/dinput/effe… in 6.19. Windows does this clamping silently, and doesn't fail `SetParameters` call when values is out of range.
Affected application is Assetto Corsa EVO, which with default settings sends out ConstantForce magnitude under/over [documented](https://learn.microsoft.com/en-us/previous-versions/ms835644(v=… \[-10000, 10000\]. [Link to the discussion with some investigation on Steam](https://steamcommunity.com/app/3058630/discussions/0/756142145462617….
In this submission scaling and clamping were moved to the separate `scale_and_clamp_value` function, which is now called every time from `set_parameter_value`. To avoid regression with sending `-1` for the infinite duration effects, separate function `set_parameter_value_no_scaling` created. Gain values in `hid_joystick_send_device_gain` are also scaled and clamped.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7161
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57665
---
The issue is that The Medium launcher uses a dialog window procedure, and implements its background by doing a StretchBlt call on WM_PAINT in the dialog procedure call, which happens before the window message loop.
It then itself calls InvalidateRect(hwnd, NULL, 0), which queues a WM_PAINT as well but with only the RDW_INVALIDATE flag.
Next, when the window message loop is executed, the WM_PAINT message is being processed as it should, but as we've invalidate the window with RDW_ERASE ourselves from the expose event, the WM_NCPAINT handler erases the entire window, clearing the pixels that the launcher has just painted.
This regressed since the window surface clipping region logic changed, as the expose event handling was previously not calling `NtUserRedrawWindow` on windows with a surface and without a clipping region. The clipping region was also previously not always set, or set later, and we're setting it more consistently since 51b16963f6e0e8df43118deac63f640aee4698b7, even when it matches the window rect, for compatibility with some old wineandroid logic (where I believe it was used to clip window surfaces to their proper sizes).
--
v2: winex11: Only erase the desktop window pixels on expose events.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7157
This ensures that the induced non-client redraw are sent and executed
right away, and before the WM_PAINT messages are sent.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57665
---
The issue is that The Medium launcher uses a dialog window procedure, and implements its background by doing a StretchBlt call on WM_PAINT in the dialog procedure call, which happens before the window message loop.
It then itself calls InvalidateRect(hwnd, NULL, 0), which queues a WM_PAINT as well but with only the RDW_INVALIDATE flag.
Next, when the window message loop is executed, the WM_PAINT message is being processed as it should, but as we've invalidate the window with RDW_ERASE ourselves from the expose event, the WM_NCPAINT handler erases the entire window, clearing the pixels that the launcher has just painted.
Using RDW_ERASENOW we make sure that the erase happens right away on expose, and before the WM_PAINT message is being processed.
This regressed since the window surface clipping region logic changed, as the expose event handling was previously not calling `NtUserRedrawWindow` on windows with a surface and without a clipping region. The clipping region was also previously not always set, or set later, and we're setting it more consistently since 51b16963f6e0e8df43118deac63f640aee4698b7, even when it matches the window rect, for compatibility with some old wineandroid logic (where I believe it was used to clip window surfaces to their proper sizes).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7157
Tests run via your command line fail to run for me, certainly due to lack of dependencies in my build. I'll work on addressing those, to see if I can get the tests to run.
./wine programs/winetest/x86_64-windows/winetest.exe -o - cmd.exe
0050:err:vulkan:vulkan_init_once Wine was built without Vulkan support.
00c4:err:ntoskrnl:ZwLoadDriver failed to create driver L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\winebth": c00000e5
003c:fixme:service:scmdatabase_autostart_services Auto-start service L"winebth" failed to start: 1359
wine: failed to open "programs/winetest/x86_64-windows/winetest.exe": c0000135
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7131#note_92190
Currently the logic of syncing of certificates with host effectively assumes that all the root certificates come from host and doesn't mind the certificates added by the app (those erroneously get deleted during host sync).
That fixes Battle.net being unable to complete game installs / update after Battle net update on 14 Jan 2025.
This is not for code freeze obviously.
The issue is that Battle.net fails to verify certificate chain which depends on an ephemeral certificate marked valid for DNS:localbattle.net (which resolves to 127.0.0.1) server auth. The certificate is self signed and is added to system root storage by Battle.bet setup (and also possibly later if it is missing). The addition of certificate to system root storage works per se, but then upon syncing host root certificates (in another process or new prefix start) the certificate gets wiped from registry.
--
v2: crypt32: Do not delete root certs which were not imported from host in sync_trusted_roots_from_known_locations().
https://gitlab.winehq.org/wine/wine/-/merge_requests/7150
This MR intends to add the complex numbers related functions:
* cimag
* _FCbuild
* crealf
* cimagf
These functions are defined in dlls/msvcr120/math.c and mapped in dlls/msvcr120/msvcr120.spec and dlls/ucrbase/ucrbase.spec.
The related tests were added in dlls/mscr120/tests/msvcr120.c and result were checked.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7109
On Fri Jun 21 06:04:13 2024 +0000, Conor McCarthy wrote:
> I replaced this with a wait for the blit before returning from
> `d3d12_swapchain_present()`. After a call to Present() returns, the
> client can render to the next buffer in sequence, so we must wait for
> completion of the blit read of that buffer. The old version using
> `vkAcquireNextImageKHR()` is not strict enough. HZD with vsync has frame
> pacing issues in some parts of the benchmark even on the old
> implementation, and this makes it a little bit worse. We can't really
> avoid that though, and the best fix is to improve frame times in vkd3d.
Sorry it took so much time to react, but I don't think that's correct, at least not in general.
I did some research on how maximum frame latency and `Present()` timing is supposed to work and this is what I could gather so far:
* I'll assume that we're using a flip presentation model (the only one that is allowed for D3D12; the blt model is restricted to D3D11 and previous) and assume that `Present()` is always called with sync interval 1.
* Partially repealing an earlier comment by me, it doesn't seem that `Present()` cares at all about `BufferCount`. The swapchain images are basically treated like a ring buffer of `BufferCount` elements. Each time `Present()` is called a presentation operation is queued; each time a presentation operation is dequeued (following the timing expressed by the sync interval), the next image is selected from the ring buffer (adding one to the read counter and wrapping it around) and presented. If you didn't synchronize correctly and write on an image before it is presented (or even while it is presented), bad for you, but the presentation engine doesn't care. You'll probably miss frames or have tearing.
* So your only hope to not step on the presentation engine's feet is to make judicious use of frame latency commands. There the swapchain behaves differently depending of whether it was created with `DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT` or not.
* The legacy behavior is without `DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT`. In this case the swapchain automatically manages the frame latency waits, so the application can just relay on `Present()` waiting appropriately. The maximum latency has to be set with `IDXGIDevice1::SetMaximumFrameLatency()`, but `IDXGIDevice` is not available for D3D12 devices, as far as I can tell; so we can only keep the default value, which is 3 in the docs (and that value aligns with my timing observations). In practice not having `DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT` isn't a lot different than having it: the only difference is that at the end of each `Present()` call a wait on the latency waitable is done by D3D12 on behalf of the client (other minor differences is that you can't retrive the waitable itself or change the latency number).
* Instead, if the swapchain is created with `DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT` then some cooperation from the application is expected: the application has to retrieve the waitable object (which in practice behaves like a semaphore, even if the docs never seem to explicitly mention that). This is already tested in `test_frame_latency_event()`, even if the waitable is not an event: the semaphore starts at the default maximum latency (which is 1) and is released each time a frame is presented (for real, not when `Present()` is called). When `IDXGISwapChain2::SetMaximumFrameLatency()` and the new value is larger than the previous one, then the semaphore is released a number of times equal to the difference between the new and old value. If the new value is smaller, the semaphore is not touched (i.e., `SetMaximumFrameLatency()` never waits). The application is supposed to wait on the semaphore before starting rendering; if it doesn't, `Present()` will happily keep queuei
ng presentation operations even if the ring buffer overflows and/or the set maximum latency is exceeded.
I wrote an alternative implementation which should fix the same problem. It's in !7152 (it replaces only the last commit here, the first three make sense on their own).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5830#note_92165
On Fri Jun 21 06:04:13 2024 +0000, Conor McCarthy wrote:
> I do see a small but measurable performance gain in HZD. It's only 0.7%,
> but that shoud be weighed that against the very simple change needed to
> gain it.
That's indeed a lot for such a simple change. Good!
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5830#note_92164
Currently the logic of syncing of certificates with host effectively assumes that all the root certificates come from host and doesn't mind the certificates added by the app (those erroneously get deleted during host sync).
That fixes Battle.net being unable to complete game installs / update after Battle net update on 14 Jan 2025.
This is not for code freeze obviously.
The issue is that Battle.net fails to verify certificate chain which depends on an ephemeral certificate marked valid for DNS:localbattle.net (which resolves to 127.0.0.1) server auth. The certificate is self signed and is added to system root storage by Battle.bet setup (and also possibly later if it is missing). The addition of certificate to system root storage works per se, but then upon syncing host root certificates (in another process or new prefix start) the certificate gets wiped from registry.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7150
Thank you. I know nothing about running these tests. I just opened a command prompt via "wine cmd" and then just launched the test .cmd file. When I have some time I'll research how to run the tests, assuming that it's in the dev docs here somewhere.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7131#note_92045
On Thu Jan 16 11:31:22 2025 +0000, Patrick Laimbock wrote:
> Hi Rémi. With the change below (bug51357.patch) from
> https://bugs.winehq.org/show_bug.cgi?id=51357 the wrong mouse offset is
> fixed in the VST plugin's main window titled 'Spire'. But, e.g. clicking
> the 'menu' button shows the menu in the wrong place. See screenshot. The
> menu should appear below the 'menu' button (top row) in the window
> titled 'Spire'. So the change above does not fix the issue but hopefully
> it gives you an idea what the problem might be. If you need more
> information please let me know. Thanks!
> [bug51357.patch](/uploads/dea8a1e711846f7e7642c16eacd284b4/bug51357.patch)
> 
Thank you! Yes, I think we could consider doing something like and use window-relative coordinates all the time, now that we're better tracking the X window tree position, and stopped using XTranslateCoordinates. It would have to wait until Wine 10 is released though, I don't want to break something else this late.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6569#note_92037
On Sat Dec 7 21:33:25 2024 +0000, Rémi Bernon wrote:
> I don't know for sure but there are probably some ways to make it work.
> It works already more or less well with embedded systray windows, so
> maybe doing something similar could be enough.
> Alternatively mouse input is mapped in `map_event_coords` and we
> preferred event root/x_root/y_root values when available because it
> avoided some inconsistencies when moving windows, but window positioning
> has been refactored lately, and maybe this isn't necessary anymore.
> Using window-relative mouse input could solve your case too (or we could
> also perhaps consider a winecfg option to prefer it over absolute positions).
Hi Rémi. With the change below (bug51357.patch) from https://bugs.winehq.org/show_bug.cgi?id=51357 the wrong mouse offset is fixed in the VST plugin's main window titled 'Spire'. But, e.g. clicking the 'menu' button shows the menu in the wrong place. See screenshot. The menu should appear below the 'menu' button (top row) in the window titled 'Spire'. So the change above does not fix the issue but hopefully it gives you an idea what the problem might be. If you need more information please let me know. Thanks!
[bug51357.patch](/uploads/dea8a1e711846f7e7642c16eacd284b4/bug51357.patch)

--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6569#note_92034
if you can start cmd.exe and notepad.exe from your installation, that should be sufficient to run the tests
are you running the tests with winetest or make test? the later can sometimes have issues with some symlinks from the build directory. using the former is safer
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7131#note_92028
OK, well, these tests appear to be practically a complete failure on my system. I'm receiving what appears to be an endless stream of lines like "Can't recognize 'temp.bat "Z:\\home\joe..." as an external command"..., etc. Admittedly, my wine build system is minimal; I do not have nearly all of the dependencies installed, but it was enough to build a basic wine installation including my changes to DIR. What I can probably do is make the changes to DIR as I think they should be, and either submit those changes or leave them here for someone else if they want to devote the time and effort into getting the tests to run.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7131#note_92010
The aim of this MR is to mark some debug formats loaded by dbghelp as
deprecated.
The idea is to remove them from dbghelp:
- after Wine 11 is released (for the ones still working)
- during PDB rewrite landing (after Wine 10 is released) if this
can help the process
The considered debug formats are:
1) COFF inside PE images
2) CodeView inside PE images
3) OMAP inside PE images
4) split debug info in .DBG files
5) PDB (in JG format). This is an early format, which has been superseded
by the DS format. clang only supports/understands the later DS format.
I retested on a small 'Hello World' application, using a MSVC compiler
from 1998 (version 12.0).
This compiler allows to emit COFF in PE images, split .DBG and PDB/JG debug
formats (it doesn't even seem to be able to emit Codeview inside PE images,
nor OMAP).
And from MSVC 14.0 onwards, none of these formats are available (only PDB DS).
Test results with MSVC 12.0:
- COFF inside PE image: doesn't work
- split .DBG: doesn't work
- PDB JG: does work (even if exceptions are caught)
work = can set BP on main, can backtrace (with line number) when that BP is hit
(using winedbg + builtin dbghelp)
--
v2: dbghelp: Emit deprecation FIXME for embedded, .dbg and PDB JG formats.
winedump: Use correct computation for first section out of a .DBG file.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7148
The aim of this MR is to mark some debug formats loaded by dbghelp as
deprecated.
The idea is to remove them from dbghelp:
- after Wine 11 is released (for the ones still working)
- during PDB rewrite landing (after Wine 10 is released) if this
can help the process
The considered debug formats are:
1) COFF inside PE images
2) CodeView inside PE images
3) OMAP inside PE images
4) split debug info in .DBG files
5) PDB (in JG format). This is an early format, which has been superseded
by the DS format. clang only supports/understands the later DS format.
I retested on a small 'Hello World' application, using a MSVC compiler
from 1998 (version 12.0).
This compiler allows to emit COFF in PE images, split .DBG and PDB/JG debug
formats (it doesn't even seem to be able to emit Codeview inside PE images,
nor OMAP).
And from MSVC 14.0 onwards, none of these formats are available (only PDB DS).
Test results with MSVC 12.0:
- COFF inside PE image: doesn't work
- split .DBG: doesn't work
- PDB JG: does work (even if exceptions are caught)
work = can set BP on main, can backtrace (with line number) when that BP is hit
(using winedbg + builtin dbghelp)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7148
About the multicriteria sort, there is clearly a hierarchy involved, and some options are mutually-exclusive (e.g DIR /O:SD on Windows 10 sorts by size, not time). Looking at the available options, it appears to me that G is the only one that can be combined, and with only one additional option. In the code, we probably need separate handling for N,E,S,D each by themselves, and separate handling for these combined with G.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7131#note_92002
"DIR /o" (no order specifier after /o) hasn't functioned the same as it does on Windows. This change makes the functionality of /o by itself equivalent to behavior on Windows.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7131
This is more code refactoring than micro-optimization. Modern compilers may skip optimizations in some places, so we strictly make it clear to them that we need common variable to determine const result strlen() function.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7143
On Tue Jan 14 07:51:31 2025 +0000, Jacek Caban wrote:
> Sorry for the delay, I'm not sure what to think about it. If it's
> dropped in modern Windows, it's not clear if we want it. I guess it
> wouldn't hurt...
> We usually add SVGs so that maintainer mode can generate binary blobs.
> It seems that Tango theme repo contains SVGs, could we use them?
Hi Jacek, thanks for the review. When I wrote this patch, I considered combining the Tango SVGs into a single SVG file that would be converted to a PNG when building in Wine maintainer mode, but it turned out to be more trouble than it was worth. It's trivial to combine PNG files with ImageMagick, whereas combining SVG files requires a lot of manual effort. Moreover, no one cares about modifying these icons or has made an argument for why different icons would be better than the Tango defaults. And if in the future someone decides to import the SVGs into Wine, the resulting PNG will still have to be regenerated and replaced in the Git repository; we have to have a PNG in Git regardless of how it is created.
It seems to me that we either need to merge a patch like the one I am proposing, or we need to close [Bug 40236](https://bugs.winehq.org/show_bug.cgi?id=40236) as WONTFIX and remove the [patches in Wine Staging](https://github.com/wine-staging/wine-staging/tree/master/patches/s…. The most important thing is just to make a decision.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4174#note_91975