On Mon Dec 18 23:49:33 2023 +0000, Vixea wrote:
> if you want you could try this patch might fix it like roblox
> https://pastebin.com/9H3TALp7
> (updated by me and beerserker created by Giraffe - these are all discord
> names so you know) - works as of today may break in the future of course
This is already fixed in the upstream.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4522#note_56250
On Sun Dec 3 10:53:53 2023 +0000, Yona-TYT wrote:
> I've noticed more overloading in Xwayland when playing oldrunescape, so
> I'm playing Wayland despite having no keyboard input.
if you want you could try this patch might fix it like roblox
https://pastebin.com/9H3TALp7
(updated by me and beerserker created by Giraffe - these are all discord names so you know) - works as of today may break in the future of course
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4522#note_56249
--
v4: vkd3d-shader/hlsl: Allow non-numeric types in the ternary operator.
vkd3d-shader/hlsl: Separate an add_ternary() helper.
tests: Add many more tests for ternary expressions.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/463
This series should fix gitlab pipeline failures in riched20.
Notes:
- some tests triggered an exception in KiUserCallbackDispatcher,
but it's displayed back to user with ERR on seh channel,
which is silenced during gitlab pipeline.
Maybe this should still be displayed (eg. with MESSAGE)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4689
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55637
--
v2: dmime/tests: Remove some unnecessary and spuriously failing waits.
dmime/tests: Add optional notification sequence on segment stop.
dmime/tests: Allow small time variation in test_segment_state.
dmime/tests: Allow small time variation in test_performance_time.
dmime/tests: Check reference time and allow 0.5 tick difference.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4702
On Thu Nov 30 17:40:31 2023 +0000, beh 591 wrote:
> looking forward for the mouselock support (you mean putting the cursor
> in the center I suppose)
> basically all I need to switch to wine-wayland which is great
> having support for wl-clipboard is appreciated since xwayland is broken
@afrantzis just a quick question
```plaintext
00d8:err:d3d:wined3d_caps_gl_ctx_create Failed to find a suitable pixel format.
00d8:err:d3d:wined3d_adapter_gl_init Failed to get a GL context for adapter 00007F53BC3F2D50.
```
is this a bug that has to do with that opengl support you are talking about
well genshin impact works but its launcher doesn't so yeah just woundering
maybe this is already a known bug or something
* it works in the x11 side
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4522#note_56206
This patch should change the module list in the automatic backtraces from "info share" to "info wow share". That way all loaded modules should get listed instead of just the process native ones.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4709
Some games exhibit freeze in game play because they implement something like:
- upon an event (exception...)
- use toolhelp to get a snapshot of self loaded modules,
- call SymLoadModule() on each module,
- furthermore, they keep their dbghelp session active, and
redo the process above when a new event occurs.
This ends up with trying to reload at the very same base address
each one of the already loaded modules.
Native implements a fast exit path when asking to load a module at the exact
same base address of an already loaded one: it simply bails out (without checking
anything else).
Builtin is way more slow (it resync:s ELF/Mach-o module list, load the new module
before actually dropping at the end of the process).
This can result in second of relay.
This serie adds the tests for supporting above claim and fix it.
Credit to Paul Gofman for triaging this behavior.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4712
Fix Toad for Oracle F3 find next function not working properly because its WH_KEYBOARD hook gets called too many times.
There is another case that could cause WH_CBT HCBT_CLICKSKIPPED hooks to get called recursively as the tests show. I will send patches for that after the code freeze.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4711
On Sat Dec 16 08:27:12 2023 +0000, David Kahurani wrote:
> "I don't believe draw_poly is the right place for this. Either
> optimizations should be in gdi32, or in SOFTWARE_GdipFillPath (which we
> don't use now for drawing outlines because the gdi32 path is currently
> more efficient, but we could if that changed)."
> Looking at this again, it looks like we should try to re-implement
> SOFTWARE_GdipFillPath to allow for drawing outlines. Maybe add a flag
> for whether we need to outline only and when we need to fill it?
We have a special case for drawing 1-pixel outlines. In other cases, the way to do that is by generating a path for the outline with GdipWidenPath and filling that.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288#note_56161
On Fri Dec 15 16:56:08 2023 +0000, Esme Povirk wrote:
> My thinking is that we will eventually need to implement an equivalent
> for `GdipGetRegionHrgn` that returns some raw data instead of an HRGN,
> and more importantly optimizes generally for known bounding boxes (this
> would include the Graphics bounding box as well as its clip region). See
> https://gitlab.winehq.org/wine/wine/-/merge_requests/4206 for some of my
> initial work on that.
> If we do the translation outside of gdi32, we can do it by scanline and
> treat the path as a set of independent line segments. We can then ignore
> scanlines and line segments outside of our output range. I think
> `create_polypolygon_region` in win32 does something similar, but sadly I
> don't think there's a way to pass in a value for `clip_rect` from the outside.
"I don't believe draw_poly is the right place for this. Either optimizations should be in gdi32, or in SOFTWARE_GdipFillPath (which we don't use now for drawing outlines because the gdi32 path is currently more efficient, but we could if that changed)."
Looking at this again, it looks like we should try to re-implement SOFTWARE_GdipFillPath to allow for drawing outlines. Maybe add a flag for whether we need to outline only and when we need to fill it?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288#note_56152
--
v5: gdiplus: Implement font linking for gdiplus.
gdiplus/tests: Add interactive test for font linking.
mlang: Fix bug with codepage priority in GetStrCodePages.
mlang/tests: Test codepages priority bug in GetStrCodepages.
mlang: Implement GetGlobalFontLinkObject.
mlang/tests: Test for GetGlobalFontLinkObject.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4082
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55967
Fixes a regression introduced by commit
efd03f40e6e315d89cd1d09c48180aae82033f9f.
The app reads syscall thunk for NtQueryInformationProcess() from ntdll file and just calls that from some memory location. That worked before the referenced commit because without performing relocations that was jumping to wine_syscall in the loaded ntdll.dll. Now when the actual ntdll load address is different that jumps to the same address which is now non sensual.
The existing tests show that in general 32-bit syscall thunks need relocation. The same trick with some other Nt functions I tried doesn't work on Windows, but turns out NtQueryInformationProcess is special (the included test replicates that). The form of syscall thunk I used in the patch corresponds to what was in Wine-Staging before the upsream implementation of syscall thunks (that is, call to NtCurrentTeb()->WOW32Reserved).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4705
--
v3: vkd3d-shader/hlsl: Allow non-numeric types in the ternary operator.
vkd3d-shader/hlsl: Separate an add_ternary() helper.
tests: Add many more tests for ternary expressions.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/463
On Fri Dec 15 16:05:24 2023 +0000, David Kahurani wrote:
> I guess the way forward would be:
> 1) Optimize `GdipGetRegionHrgn` in GDI+ which is done in this
> MR(assuming we remove the last patch)
> 2) Optimize `DrawPoly` in gdi32
My thinking is that we will eventually need to implement an equivalent for `GdipGetRegionHrgn` that returns some raw data instead of an HRGN, and more importantly optimizes generally for known bounding boxes (this would include the Graphics bounding box as well as its clip region). See https://gitlab.winehq.org/wine/wine/-/merge_requests/4206 for some of my initial work on that.
If we do the translation outside of gdi32, we can do it by scanline and treat the path as a set of independent line segments. We can then ignore scanlines and line segments outside of our output range. I think `create_polypolygon_region` in win32 does something similar, but sadly I don't think there's a way to pass in a value for `clip_rect` from the outside.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288#note_56116
Stopping my detailed review because I don't think this approach to optimizing the path is quite right.
Suppose I fill a polygon that very closely approximates a circle, that this circle contains the entire bounding rectangle of the Graphics object, and that it does not intersect any edges of the bounding rectangle. That would mean that none of the individual points intersect the bounding rectangle. For a sufficiently close approximation, no set of 3 adjacent points in the polygon would intersect the bounding rectangle.
If I understand correctly how `clip_path` is meant to work, it would remove every point except for the starting point, which would mean that nothing would be drawn, when instead the full bounding box of the Graphics object should be filled.
I think that in order to fix this case, you would need to ignore any points not added to the output rectangle. So if I have a polygon that goes A B C D (with A being a start point and B C D being line points), and point B is removed, then you need to check points A, C, and D in order to determine whether point C can be removed.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288#note_56114
DMUS_PMSG::dwType is the type of the message, but we are comparing it to
curve types. We should be using DMUS_CURVE_PMSG::bType instead.
* * *
(I tried to write some test cases for this. I created a IDirectMusicPort implementation that checks the generated midi commands, but instead I cannot get Windows to generate any midi commands for CCCURVEs. )
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4703
Validate user data before passing it to PolyDraw.
The program in the bug requests to draw figures outrageously outside the DC's region after presumably, some uninitialized values happen as a result of a missing font. Native gdiplus seems to handle this gracefully so we probably also should.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=41617
Signed-off-by: David Kahurani <k.kahurani(a)gmail.com>
--
v7: gdiplus: Hook on optimized path drawing code
gdiplus: Re-implement trace_path to avoid circular dependency
gdiplus: Make get_region_hrgn public to gdiplus
gdiplus: Clip polygons before drawing them
gdiplus: Make get_graphis_device_bounds public to gdiplus
gdiplus: Allow for writing nodes to an empty path points list
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288
On Fri Dec 15 16:05:24 2023 +0000, Esme Povirk wrote:
> I don't believe `draw_poly` is the right place for this. Either
> optimizations should be in gdi32, or in `SOFTWARE_GdipFillPath` (which
> we don't use now for drawing outlines because the gdi32 path is
> currently more efficient, but we could if that changed).
I guess the way forward would be:
1) Optimize `GdipGetRegionHrgn` in GDI+ which is done in this MR(assuming we remove the last patch)
2) Optimize `DrawPoly` in gdi32
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288#note_56103
Esme Povirk (@madewokherd) commented about dlls/gdiplus/graphics.c:
> return Ok;
> }
>
> -static GpStatus get_graphics_device_bounds(GpGraphics* graphics, GpRectF* rect)
> +GpStatus get_graphics_device_bounds(GpGraphics* graphics, GpRectF* rect)
Changing a static function to non-static shouldn't be in its own commit. You should combine it with the first commit that uses it outside its source file.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288#note_56101
Esme Povirk (@madewokherd) commented about dlls/gdiplus/graphicspath.c:
> * pointer on success
> * NULL on allocation problems
> */
> -static path_list_node_t* add_path_list_node(path_list_node_t *node, REAL x, REAL y, BOOL type)
> +static path_list_node_t* add_path_list_node(path_list_node_t **node, REAL x, REAL y, BOOL type)
> {
> path_list_node_t *new;
>
> + if (!*node)
> + {
> + *node = calloc(1, sizeof(path_list_node_t));
All fields are immediately initialized below, so I think it's fine to use `malloc`.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288#note_56100
Adds an env variable WINE_WAYLAND_UNACCELERATED_POINTER
which allows raw input. This makes it easier to calculate
the same sensitivity in different games, use sensitivity
calculators, and easily change values when changing DPI
and do not depend on the compositor or OS.
For example, you want to set the sensitivity to half as much,
and sensitivity curves in libinput are more difficult
to calculate than in the games themselves.
--
v3: winewayland.drv: Add unaccelerated pointer support
https://gitlab.winehq.org/wine/wine/-/merge_requests/4698
Validate user data before passing it to PolyDraw.
The program in the bug requests to draw figures outrageously outside the DC's region after presumably, some uninitialized values happen as a result of a missing font. Native gdiplus seems to handle this gracefully so we probably also should.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=41617
Signed-off-by: David Kahurani <k.kahurani(a)gmail.com>
--
v6: gdiplus: Hook on optimized path drawing code
gdiplus: Re-implement trace_path to avoid circular dependency
gdiplus: Make get_region_hrgn public to gdiplus
gdiplus: Clip polygons before drawing them
gdiplus: Make get_graphis_device_bounds public to gdiplus
gdiplus: Allow for writing nodes to an empty path points list
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288
--
v15: vkd3d-shader/ir: Store code block names in struct vkd3d_shader_desc.
vkd3d-shader/ir: Flatten SWITCH/CASE/DEFAULT/ENDSWITCH control flow instructions.
vkd3d-shader/ir: Flatten LOOP/BREAK/CONTINUE/ENDLOOP control flow instructions.
vkd3d-shader/ir: Flatten IF/ELSE/ENDIF control flow instructions.
vkd3d-shader/spirv: Handle RETP in spirv_compiler_handle_instruction().
vkd3d-shader/spirv: Handle DISCARD and TEXKILL in spirv_compiler_handle_instruction().
vkd3d-shader/spirv: Emit descriptor offset loads in the function entry block.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/450
Validate user data before passing it to PolyDraw.
The program in the bug requests to draw figures outrageously outside the DC's region after presumably, some uninitialized values happen as a result of a missing font. Native gdiplus seems to handle this gracefully so we probably also should.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=41617
Signed-off-by: David Kahurani <k.kahurani(a)gmail.com>
--
v5: gdiplus: Clip polygons before drawing them
https://gitlab.winehq.org/wine/wine/-/merge_requests/3288
--
v6: vkd3d-shader/dxil: Support 16-bit types.
vkd3d-shader/spirv: Introduce HALF and UINT16 types for minimum precision.
vkd3d-shader/spirv: Introduce a data_type_is_floating_point() helper function.
tests/shader-runner: Add tests for minimum-precision constants.
tests/shader-runner: Run Shader Model 6 tests in the crossbuild.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/519
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
v12: vkd3d-shader/tpf: Add initial support for writing fx_4_0/fx_4_1 binaries.
vkd3d-shader: Add separate binary target type for effects.
vkd3d-shader/hlsl: Handle effect group statement.
vkd3d-shader/hlsl: Add variables for techniques.
vkd3d-shader/hlsl: Rename rule for top-level techniques.
vkd3d-shader/hlsl: Add 'fxgroup' token.
tests: Add some tests for effects groups syntax.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/443
Recap:
My previous proposals to extend the shader_runner to SM1 were focusing on separating compilation tests ([shader] directives) from execution tests ([test] directives), and let the generic shader_runner.c:compile_shader() in charge of the former.
However, Henri was more inclined to aim for making the parser agnostic to the language of the tests so we can potentially extend the shader_runner tests to other languages such as d3d-asm. This means, removing the burden of compilation from the parser altogether, and moving it to the runners, probably through a runner->compile function pointer (even if most of them end up doing the same thing, compiling with vkd3d-shader or the native compiler, depending on availability).
Agreeing with going in this general direction, this MR contains patches to do SM1 compilation calling run_shader_tests() for SM1 profiles from the Vulkan runner (skipping execution for now), and some improvements to the qualifiers syntax.
Despite this, there are parallel discussions on:
- Whether to name the shader models individually in the [require] directives or expressing the range of shader models where the test should pass. In the latter case, whether to run for all shader models, only the lowest one in the SM1, SM4, and SM6 groups, or to allow the runner to select a shader model within the range (I feel strongly against this now, I think the runner should just retrieve a boolean in runner->check_requirements).
- Where to do the iteration across different shader models, if in run_shader_tests() or expect each runner to call run_shader_tests() several times as we do now.
But there is no need to settle on something for these yet.
---
Now, what may be the most noisy part of this MR is that even though we are calling run_shader_tests() through the Vulkan runner, this will result in calling shader_runner.c:compile_shader() instead of shader_runner_vulkan.c:compile_shader(), but if we follow the "making the parser agnostic" plan, we eventually should get rid of shader_runner.c:compile_shader() and introduce the runner->compile pointer instead.
--
v4: tests: Use the vulkan runner to run SM1 compilation tests.
tests/shader-runner: Call each runner only once.
tests/shader-runner: Support reading multiple model range args for qualifiers.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/514
Recap:
My previous proposals to extend the shader_runner to SM1 were focusing on separating compilation tests ([shader] directives) from execution tests ([test] directives), and let the generic shader_runner.c:compile_shader() in charge of the former.
However, Henri was more inclined to aim for making the parser agnostic to the language of the tests so we can potentially extend the shader_runner tests to other languages such as d3d-asm. This means, removing the burden of compilation from the parser altogether, and moving it to the runners, probably through a runner->compile function pointer (even if most of them end up doing the same thing, compiling with vkd3d-shader or the native compiler, depending on availability).
Agreeing with going in this general direction, this MR contains patches to do SM1 compilation calling run_shader_tests() for SM1 profiles from the Vulkan runner (skipping execution for now), and some improvements to the qualifiers syntax.
Despite this, there are parallel discussions on:
- Whether to name the shader models individually in the [require] directives or expressing the range of shader models where the test should pass. In the latter case, whether to run for all shader models, only the lowest one in the SM1, SM4, and SM6 groups, or to allow the runner to select a shader model within the range (I feel strongly against this now, I think the runner should just retrieve a boolean in runner->check_requirements).
- Where to do the iteration across different shader models, if in run_shader_tests() or expect each runner to call run_shader_tests() several times as we do now.
But there is no need to settle on something for these yet.
---
Now, what may be the most noisy part of this MR is that even though we are calling run_shader_tests() through the Vulkan runner, this will result in calling shader_runner.c:compile_shader() instead of shader_runner_vulkan.c:compile_shader(), but if we follow the "making the parser agnostic" plan, we eventually should get rid of shader_runner.c:compile_shader() and introduce the runner->compile pointer instead.
--
v3: tests: Use the vulkan runner to run SM1 compilation tests.
tests/shader-runner: Call each runner only once.
tests/shader-runner: Support reading multiple model range args for qualifiers.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/514
On Thu Dec 14 16:34:26 2023 +0000, Giovanni Mascellani wrote:
> Defining `SONAME_LIBDXCOMPILER` when the dxcompiler library is not
> indeed available means that tests start failing. If no soname was
> specified or detected at configuration time, I don't think we should
> even try to use that library.
I made this change so runner crosstests can be run in a Visual Studio command prompt, where dxcompiler.dll is in the path. `SONAME_LIBDXCOMPILER` is already defined even for crosstests, and there's no way to tell at compile time what its value should actually be for crosstest builds.
It's convenient to have this work if dxcompiler.dll is available. It has no effect otherwise.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/519#note_56045
Many of these patches are small, but the series can be split in two if necessary.
--
v5: vkd3d-shader/spirv: Handle ITOI and UTOU in spirv_compiler_map_alu_instruction().
vkd3d-shader/spirv: Support UINT64 source in spirv_compiler_emit_bool_cast().
vkd3d-shader/spirv: Support 64-bit sources in spirv_compiler_emit_int_div().
vkd3d-shader/spirv: Introduce a UINT64 component type.
vkd3d-shader/spirv: Introduce a data_type_is_64_bit() helper function.
vkd3d-shader/spirv: Use data_type_is_integer() in spirv_compiler_emit_neg().
vkd3d: Pass int64 capability info to vkd3d-shader.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/490
Fixes spurious crashes in Steam when downloading games.
The download causes a huge amount of SIGUSR1 signals, and it becomes
very likely that one signal will be received while being inside the
syscall or unix call dispatchers.
When this happens, it can be received within the small range of
instructions where %fs has been restored but we have not yet switched
to the syscall stack, or the other way around in the return path.
The signal handler then was restoring the 32bit %fs while returning to
the syscall dispatcher, then we are entering a syscall with %fs set to
the wrong value.
--
v2: ntdll: Avoid breaking leave_handler heuristics for fs32_sel restore.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4683
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
v11: vkd3d-shader/tpf: Add initial support for writing fx_4_0/fx_4_1 binaries.
vkd3d-shader: Add separate binary target type for effects.
vkd3d-shader/hlsl: Handle effect group statement.
vkd3d-shader/hlsl: Add variables for techniques.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/443
On Thu Dec 14 19:23:37 2023 +0000, Fabian Maurer wrote:
> You should probably add the dll prefix, like it's done in the "previous" commit
> `ntdll: Only free reserved memory for HIGH_ENTROPY_VA binaries.`
Done! :smiley:
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4694#note_56020
On Thu Dec 14 19:18:12 2023 +0000, Looming Linux wrote:
> Thanks! Amended commit with more descriptive message.
You should probably add the dll prefix, like it's done in the "previous" commit
`ntdll: Only free reserved memory for HIGH_ENTROPY_VA binaries.`
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4694#note_56016
On Thu Dec 14 19:18:13 2023 +0000, Fabian Maurer wrote:
> You probably want to use a more descriptive commit message. Like, the MR
> title looks okay but the commit title not.
Thanks! Amended commit with more descriptive message.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4694#note_56015
```
Datta: what have we given?
My friend, blood shaking my heart
The awful daring of a moment's surrender
Which an age of prudence can never retract
By this, and this only, we have existed
Which is not to be found in our obituaries
Or in memories draped by the beneficient spider
Or under seals broken by the lean solicitor
In our empty rooms
```
--
v3: vkd3d-shader: Allow compiling d3d bytecode to SPIR-V.
tests: Avoid using "SV_Position" as a name for the vertex shader input.
tests: Use struct vkd3d_shader_scan_signature_info to retrieve the VS input signature.
vkd3d-shader: Do not scan DCL instructions which do not declare resources.
vkd3d-shader: Do not scan the shader in vkd3d_shader_parser_compile() for assembly targets.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/518
On Thu Dec 14 16:34:26 2023 +0000, Henri Verbeet wrote:
> > ```diff
> > -#if defined(SONAME_LIBDXCOMPILER) && !defined(VKD3D_CROSSTEST)
> > +#if defined(SONAME_LIBDXCOMPILER) || defined(VKD3D_CROSSTEST)
> > ```
> Should that just be "#if defined(SONAME_LIBDXCOMPILER)"? We could
> perhaps consider defining SONAME_LIBDXCOMPILER to "dxcompiler.dll" if it
> isn't already defined and we have VKD3D_CROSSTEST, but in principle I
> don't think VKD3D_CROSSTEST needs special handling here.
Defining `SONAME_LIBDXCOMPILER` when the dxcompiler library is not indeed available means that tests start failing. If no soname was specified or detected at configuration time, I don't think we should even try to use that library.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/519#note_55995