Current implementation handles correctly % only at the end of the
string. Nothing else matches.
The new implementation while naïve and recursive handles both _ and *
correctly.
--
v2: wbemprox: Reimplement LIKE.
wbemprox/tests: Test LIKE queries.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4993
This is a preparation for supporting more xstate features in the contexts.
The remaining parts are:
- support arbitrary xstate in usr1_handler();
- support arbitrary xstate in the server contexts (probably transferring only the present part);
- support arbitrary xstate in context manipulation functions;
- enabling more xstates in system.c and in user shared data.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4987
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v17: dmime: Create a band track for MIDI segments.
dmime/test: Add test for getting band track from midi file.
dmime: Implement IDirectMusicTrack_Play for MIDI tracks.
dmime: Implement getting/setting TempoParam for MIDI tracks.
dmime: Parse MIDI tracks.
dmime: Add stubs for MIDI tracks
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v15: dmloader: soundfont override, don't push
dmime: Create a band track for MIDI segments.
dmime/test: Add test for getting band track from midi file.
dmime: Implement IDirectMusicTrack_Play for MIDI tracks.
dmime: Implement getting/setting TempoParam for MIDI tracks.
dmime: Parse MIDI tracks.
dmime: Add stubs for MIDI tracks
dmime: Parse MIDI headers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
This test currently hit a Metal bug when run on Apple Silicon with
MoltenVK and fails. We don't have an easy way to mark shader runner
tests as buggy and we're not interested in tracking that bug anyway,
so I'm just working around it.
--
v2: tests: Work around a Metal bug.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/625
This is relevant to the structuriser because branched DXIL can sometimes contain forward refs. It doesn't need to be implemented in the backend until necessary, but it adds a parameter to `register_init_ssa_vector()` and `register_init_ssa_scalar()` so it's convenient to add before further use of those functions.
--
v3: vkd3d-shader/dxil: Support forward-referenced value ids.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/590
This is the first part of !608, which I decided to separate to ease review.
It consists of improvements to SM1 testing, mainly:
- Correctly passing int and bool uniforms as IEEE 754 floats to SM1 profiles.
- The introduction of the "only" qualifier to avoid abusing `[require]` blocks in case tests retrieve different results for different shader models.
- Allowing some of the tests we already have for SM4/SM6 to run in SM1 after those improvements.
--
v3: tests: Remove [require] directives for tests that use int and bool uniforms.
tests/shader-runner: Introduce "if" qualifier.
tests: Don't ignore SM1 on a non-const-indexing.shader_test test.
tests/vkd3d-shader: Set uninitialized uniforms to zero.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/616
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v14: dmime: Create a band track for MIDI segments.
dmime/test: Add test for getting band track from midi file.
dmime: Implement IDirectMusicTrack_Play for MIDI tracks.
dmime: Implement getting/setting TempoParam for MIDI tracks.
dmime: Parse MIDI tracks.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v13: dmime: Create a band track for MIDI segments.
dmime/test: Add test for getting band track from midi file.
dmime: Implement IDirectMusicTrack_Play for MIDI tracks.
dmime: Implement getting/setting TempoParam for MIDI tracks.
dmime: Parse MIDI tracks.
dmime: Add stubs for MIDI tracks
dmime: Parse MIDI headers.
dmime/test: add MIDI loading test
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v12: dmime: Create a band track for MIDI segments.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
While using [x64dbg](https://x64dbg.com/) I was experiencing incredibly strange issue - `int3` was swallowed and `KiUserExceptionDispatcher` was never invoked.
Turns out that x64dbg ([TitanEngine](https://github.com/x64dbg/TitanEngine/blob/x64dbg/TitanEngine/…) expects system breakpoint to be first breakpoint that will be triggered and it always swallows it (it's hardcoded no setting to change it's behavior).
That means if you have a DLL with `int3` for example
```c
LONG ExceptionHandler(EXCEPTION_POINTERS *ExceptionInfo) {
ExceptionInfo->ContextRecord->Rip++;
return EXCEPTION_CONTINUE_EXECUTION;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
AddVectoredExceptionHandler(1, ExceptionHandler);
asm("int $0x03; nop; nop;");
}
return TRUE;
}
```
That `int3` would be swallowed and `ExceptionHandler` never invoked when running under x64dbg.
Now with this MR applied it works correctly and as expected (same as on Windows).
Another interesting thing is that without this MR it wouldn't just swallow `int3` but even skip first `nop` aswell and RIP would end up on 2nd `nop`.
--
v3: ntdll: loader_init() invoke breakpoint before loading dlls
https://gitlab.winehq.org/wine/wine/-/merge_requests/4655
This allows to declare SRV buffers in the shader tests using `[buffer srv n]` blocks, and passing them to the different backends.
Also, 1/2 includes a missing bit required to parse `Buffer<>` types in the HLSL compiler.
This is a step towards supporting StructuredBuffer types in further patches.
--
v5: vkd3d-shader/hlsl: Parse Buffer types.
tests/shader-runner: Change probe directive syntax on shader_test files.
tests/shader-runner: Change resource declaration syntax on shader_test files.
tests/shader-runner: Support SRV buffers.
tests/shader-runner: Separate resource_type into type and dimension.
vkd3d-shader/hlsl: Use positive logic on add_*_method_call() functions.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/569
On Tue Feb 6 18:17:58 2024 +0000, Piotr Caban wrote:
> That's a shame, I was hoping that there will be correlation between
> maximum values. I'm OK with current patch in this case.
Note that most "extreme" differences from UTC time zone are:
- +14 hours at Line Islands (Kiribati)
- -12 hours in and around Baker Islands
I guess that may by the cause of 14 hours range difference.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5024#note_60424
--
v4: win32u: Don't move an owned window on top of its owner if it's not activated ever.
user32/tests: Test the z-order for an owned window that's not activated ever.
win32u: Skip windows that are not activated even once in activate_other_window().
user32/tests: Add window activation tests.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4066
--
v14: tests/d3d12: Test multiple clip distance inputs in test_clip_distance().
tests/d3d12: Use five clip distances for the multiple test in test_clip_distance().
vkd3d-shader/ir: Transform clip/cull outputs and patch constants into arrays.
vkd3d-shader/ir: Transform clip/cull inputs into an array.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/564
Checking flags of the thread desktop to determine whether virtual desktop is on is unreliable.
For example, CEF applications create their own desktop and so is_virtual_desktop() could incorrectly
report that virtual desktop is off.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55810
--
v4: server: inherit wine internal desktop flags when creating desktops.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4786
The game I was trying to run (Ravendawn) was polluting the stdout with hundreds of CreateFile2 FIXMEs.
The game worked fine, probably because the params pointer was NULL, so any non-implemented extra parameters weren't even used and we just forwarded to CreateFileW.
So, a simple if was added to check whether the pointer is null, and if it is, we just call TRACE instead of FIXME since in this case it isn't really necessary.
--
v2: kernelbase: Refactor extended parameter logging.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5037
That seems to fix some (difficult to reproduce) crashes in EA Desktop / CEF, usually on shutdown but sometimes during starting up.
Currently TpSetWait can set (or clear) the event, while waitqueue_thread_proc() gets woken from NtWaitForMultipleObjects by previously set wait object and call the callback as if new set (or cleared) wait object is signaled. The crashes I was reproducing were always happening when RtlDeregisterWaitEx call is racing with waking the wait and calling the callback.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5044
Fixes "True Reporter. Mystery of Mistwood" broken startup from launcher when the launcher wants to minimize all windows (which is probably not strictly necessary) but we instead pop Start menu.
--
v2: explorer: Don't pop start menu on "undo minimize all windows" systray command.
explorer: Don't pop start menu on "minimize all windows" systray command.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5025
It's possible that a state object pointer not in the topology node collection gets passed to
session_get_node_object(). Instead of returning the last node when the object is not found, we
should return a NULL so that the state of the last node is not changed by mistake.
--
v11: mf/tests: Test IMFMediaSession::Start().
mf: Support seeking while a session is started.
mf/tests: Add a create_test_topology() helper.
mf: Add a session_flush_nodes() helper.
mf: Make session_get_node_object() more robust.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3572
The IVideoWindow_put_Visible runs the NtUserShowWindow which may trigger the VideoWindow_NotifyOwnerMessage with a WM_PAINT message and afterwards try to send a WM_ERASEBKND. This will cause the VideoWindow_NotifyOwnerMessage to be stuck waiting on the lock. This causes a deadlock because the IVideoWindow_put_Visible is never able to return, as it is waiting for the WM_ERASEBKND message to go through in the send_erase function, which can only go through once the WM_PAINT has returned.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5023
Theoretically, this allows debuggers to tell them apart. https://devblogs.microsoft.com/oldnewthing/20110429-00/?p=10803
But in practice, this is more about cleanliness than anything else; I'm not aware of anyone running SetLastError-aware debuggers in Wine. Feel free to reject if this is a waste of time.
The changeable SetLastError calls were found by this script:
```python
#!/usr/bin/env python3
import os
import re
for (dirpath, dirnames, filenames) in os.walk("."):
for fn in filenames:
if not fn.endswith(".c") and not fn.endswith(".h"):
continue
text = open(dirpath+"/"+fn,"rt").read()
text = text.replace("RtlSetLastWin32Error","SetLastError")
text = text.replace("RtlGetLastWin32Error","GetLastError")
if "SetLastError" not in text:
continue
varname = None
for line in text.split("\n"):
if "GetLastError" in line:
if m := re.search(r"([A-Za-z0-9_]+) *= *GetLastError", line):
prevline = line
varname = m[1]
if line == "}":
varname = None
if varname is not None and "SetLastError" in line:
if m := re.search(r"SetLastError\( *([A-Za-z0-9_]+) *\)", line):
if m[1] == varname:
print(dirpath+"/"+fn, prevline, line)
```
The script also flags https://gitlab.winehq.org/wine/wine/-/blob/master/dlls/mpr/wnet.c#L2811, which is half set and half restore; I chose to left it unchanged.
Idea from https://gitlab.winehq.org/wine/wine/-/merge_requests/5020/diffs#6c845445f68…
--
v3: win32u: Use RtlRestoreLastWin32Error instead of RtlSetLastWin32Error if appropriate
everywhere: Change SetLastError to RestoreLastError if appropriate
https://gitlab.winehq.org/wine/wine/-/merge_requests/5035
Normally I am a strong proponent of adjusting implementations one small step at
a time, but this is a bit of an extreme case.
The current state of UrlCanonicalize() is a prototypical example of "spaghetti
code": the implementation has been repeatedly adjusted to fix a new discovered
edge case, without properly testing the scope of the new logic, with the effect
that the current logic is a scattered mess of conditions that interact in
unpredictable ways.
To be fair, the actual function is much more complicated than one would
anticipate, and the number of new weird edge cases I found while trying to flesh
out existing logic was rather exhausting.
I initially tried to "fix" the existing implementation one step at a time. After
racking up dozens of commits without an end in sight, though, and having to
waste time carefully unravelling the broken code in the right order so as to
avoid temporary failures, I decided instead to just fix everything at once,
effectively rewriting the function from scratch, and this proved to be much more
productive.
Hopefully the huge swath of new tests is enough to prove that this new
implementation really is correct, and has no more spaghetti than what Microsoft
made necessary.
--
v4: shlwapi/tests: Add many more tests for UrlCanonicalize().
kernelbase: Use scheme_is_opaque() in UrlIs().
kernelbase: Reimplement UrlCanonicalize().
kernelbase: Do not canonicalize the relative part in UrlCombine().
kernelbase: Do not use isalnum() with Unicode characters.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4954
This MR implements `NtContinueEx(PCONTEXT, PCONTINUE_OPTIONS)` which was added in Windows 10 20H1.
Also added basic test reusing existing `test_continue()` (included from !4720)
League of Legends game hooks `NtContinue()` and `NtContinueEx()` by putting `jmp` instruction in front of it.
Note that LoL doesn't actually use `NtContinueEx()` itself and game will work fine without it but if game doesn't find `NtContinueEx()` it will permanently ban your account due to detecting "scripting program"
--
v5: ntdll/tests: Implement APC test for NtContinue()
ntdll/tests: Add basic test for NtContinueEx()
ntdll: Implement NtContinueEx()
ntdll/tests: Unify APC test functions
https://gitlab.winehq.org/wine/wine/-/merge_requests/4761
On Tue Feb 6 18:52:35 2024 +0000, Esme Povirk wrote:
> No, that doesn't seem right either, I need to think about this.
Thought about it, I do think it should be ||. We should break if all of the text has been measured, and we should break if the current section doesn't fully fit in to_measure_length.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4082#note_60325
On Tue Feb 6 15:01:50 2024 +0000, Santino Mazza wrote:
> I tested GdipMeasureString with different strings that require font
> linking and it behaves correctly. It's strange because I also tested
> with the exact same string the game uses and with the generic
> typographic format, but I still can't get the bug to reproduce.
> Apparently when the game tries to draw that specific string,
> GdipMeasureString returns a bounding box with width 0, which causes
> draw_string_callback to not increase the X position, so it overwrites
> the other word. Again this doesn't happen if I use font_link_get_text_extent_point.
The difference might have to do with scaling? It looks like GdipMeasureString scales the size, and I don't think font_link_get_text_extent_point would.
Come to think of it, it's probably necessary to account for text rotation when in draw_string_callback (an arbitrary affine transform can be applied to the text, although I think at the moment our handling of anything beyond rotation is a bit broken). I think it might be a good idea to add output parameters for dx and dy to draw_driver_string.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4082#note_60317
Fixes a crash in Microsoft Flight Simulator (which passes some currently invalid values to ucrtbase._gmtime64() and doesn't expect NULL result).
It looks like any msvcrt version on modern Windows accepts wider range of values. Meanwhile, the exact range is different for ucrtbase vs older CRT versions (the exact values for ucrtbase also vary before Win10 1909). Also, older msvcrt.dll matches what we have in Wine now. So the patch keeps old msvcrt behavior, adds universally correct limits for msvcrt 70-120 and the latest (Win10 1909+) for ucrtbase.
--
v2: msvcrt: Adjust _gmtime64_s() accepted time limits.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5024
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v11: dmime: Create a band track for MIDI segments.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
The game I was trying to run (Ravendawn) was polluting the stdout with hundreds of CreateFile2 FIXMEs.
The game worked fine, probably because the params pointer was NULL, so any non-implemented extra parameters weren't even used and we just forwarded to CreateFileW.
So, a simple if was added to check whether the pointer is null, and if it is, we just call TRACE instead of FIXME since in this case it isn't really necessary.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5037
Theoretically, this allows debuggers to tell them apart. https://devblogs.microsoft.com/oldnewthing/20110429-00/?p=10803
But in practice, this is more about cleanliness than anything else; I'm not aware of anyone running SetLastError-aware debuggers in Wine. Feel free to reject if this is a waste of time.
The changeable SetLastError calls were found by this script:
```python
#!/usr/bin/env python3
import os
import re
for (dirpath, dirnames, filenames) in os.walk("."):
for fn in filenames:
if not fn.endswith(".c"):
continue
text = open(dirpath+"/"+fn,"rt").read()
text = text.replace("RtlSetLastWin32Error","SetLastError")
text = text.replace("RtlGetLastWin32Error","GetLastError")
if "SetLastError" not in text:
continue
varname = None
for line in text.split("\n"):
if "GetLastError" in line:
if m := re.search(r"([A-Za-z0-9_]+) *= *GetLastError", line):
prevline = line
varname = m[1]
if line == "}":
varname = None
if varname is not None and "SetLastError" in line:
if m := re.search(r"SetLastError\( *([A-Za-z0-9_]+) *\)", line):
if m[1] == varname:
print(dirpath+"/"+fn, prevline, line)
```
The script also flags https://gitlab.winehq.org/wine/wine/-/blob/master/dlls/mpr/wnet.c#L2811, which is half set and half restore; I chose to left it unchanged.
Idea from https://gitlab.winehq.org/wine/wine/-/merge_requests/5020/diffs#6c845445f68…
--
v2: win32u: Use RtlRestoreLastWin32Error instead of RtlSetLastWin32Error if appropriate
everywhere: Change SetLastError to RestoreLastError if appropriate
ntdll: Duplicate RtlSetLastWin32Error to RtlRestoreLastWin32Error
https://gitlab.winehq.org/wine/wine/-/merge_requests/5035
Most paths that hold both the display_lock and the display_devices_init mutex acquire them in the order just mentioned. However, there are two cases where these are acquired in the opposite order, which with unfortunate thread interactions and timings can lead to a deadlock. Fix these cases to use the same order as the rest of the code.
---
The instance of this deadlock I am seeing happens when enabling the virtual desktop mode with the Wayland driver (with pristine master) with any program. It's a deadlock between two threads calling:
1. `get_display_depth` =\> first acquires `display_lock` (in `lock_display_devices`) then `display_devices_init` (in `adapter_get_current_settings)`
2. `desktop_update_display_devices` =\> `add_gpu` =\> first acquires `display_devices_init` then `display_lock`
The deadlock is not very easy to hit normally, but a sleep like in the attached patch below makes it 100% reproducible for me:
[add_gpu_sleep.patch](/uploads/c08632d7a9dec751840199bdb16fb9a8/add_gpu_sleep.patch)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5036
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v9: dmusic: Don't stop instrument downloading early on failure.
dmime: Create a band track for MIDI segments.
dmband: Move band.c to dmusic
dmband: Implement getting/setting GUID_BandParam on band tracks.
dmime/test: Add test for getting band track from midi file.
dmime: Implement IDirectMusicTrack_Play for MIDI tracks.
dmime: Implement getting/setting TempoParam for MIDI tracks.
dmime: Parse MIDI files.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
Theoretically, this allows debuggers to tell them apart. https://devblogs.microsoft.com/oldnewthing/20110429-00/?p=10803
But in practice, this is more about cleanliness than anything else; I'm not aware of anyone running SetLastError-aware debuggers in Wine. Feel free to reject if this is a waste of time.
The changeable SetLastError calls were found by this script:
```python
#!/usr/bin/env python3
import os
import re
for (dirpath, dirnames, filenames) in os.walk("."):
for fn in filenames:
if not fn.endswith(".c"):
continue
text = open(dirpath+"/"+fn,"rt").read()
text = text.replace("RtlSetLastWin32Error","SetLastError")
text = text.replace("RtlGetLastWin32Error","GetLastError")
if "SetLastError" not in text:
continue
varname = None
for line in text.split("\n"):
if "GetLastError" in line:
if m := re.search(r"([A-Za-z0-9_]+) *= *GetLastError", line):
prevline = line
varname = m[1]
if line == "}":
varname = None
if varname is not None and "SetLastError" in line:
if m := re.search(r"SetLastError\( *([A-Za-z0-9_]+) *\)", line):
if m[1] == varname:
print(dirpath+"/"+fn, prevline, line)
```
The script also flags https://gitlab.winehq.org/wine/wine/-/blob/master/dlls/mpr/wnet.c#L2811, which is half set and half restore; I chose to left it unchanged.
Idea from https://gitlab.winehq.org/wine/wine/-/merge_requests/5020/diffs#6c845445f68…
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5035
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v8: dmusic: Don't stop instrument downloading early on failure.
dmime: Create a band track for MIDI segments.
dmband: Move band.c to dmusic
dmband: Implement getting/setting GUID_BandParam on band tracks.
dmime/test: Add test for getting band track from midi file.
dmime: Implement IDirectMusicTrack_Play for MIDI tracks.
dmime: Implement getting/setting TempoParam for MIDI tracks.
dmime: Parse MIDI files.
dmime: Add stubs for MIDI tracks
dmime/test: add MIDI loading test
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
I originally added this for Minecraft Education Edition to see if it would help with a sign-in issue, but it didn't seem to so I didn't create an MR for it. But this library is also used by Office and other apps. For Office, there are 2 reports[[1](https://forum.winehq.org/viewtopic.php?p=138513)][[2](https://f… that say this is the cause of an installation crash. I can't confirm it as I don't have an Office subscription.
I have some more patches for this that Minecraft Education Edition calls but I don't know if they're helpful for Office.
--
v2: windows.security.authentication.onlineid: Implement IOnlineIdSystemAuthenticatorStatics::get_Default().
windows.security.authentication.onlineid: Add IOnlineIdServiceTicketRequestFactory stub interface.
windows.security.authentication.onlineid: Add IOnlineIdSystemAuthenticatorStatics stub interface.
windows.security.authentication.onlineid: Add stub DLL.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5021
# W.I.P
Code for parsing AUTOEXEC.BAT for environment variables was originally added in Windows NT 4.0. It's primary purpose was to make it so that Win32-based apps originally designed for Windows 9x that set environment variables using the file (as many did) would still work properly under NT. However, despite the fact that the last release of Windows 9x came out over 25 years ago, the feature still remains in Windows to this day. As is indicated by the period the feature was introduced during, it's mostly useful for running legacy software from around the time of the 9x to NT transition, but since it was never removed it's entirely possible that some newer software makes use of it as well. The feature is also toggleable using the ParseAutoexec value in the HCKU\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon registry key.
Note that this feature is entirely unrelated to the AUTOEXEC.NT file intended for use with NTVDM.
**Todo**
* [x] Add ParseAutoexec value to wine.inf.
* [x] Write code to check ParseAutoexec value.
* [x] Write code to parse Autoexec.bat for environment variables.
* [ ] Add code to concatenate the path to NTDLL.
--
v2: ntdll: Added autoexec.bat parsing code and ParseAutoexec value check. [1/2]
wine.inf: add ParseAutoexec to HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
https://gitlab.winehq.org/wine/wine/-/merge_requests/5029
With tests from !364, separated out from the HLSL changes there and updated.
It is apparently unnecessary to match the SM4/5 implementation, since the AMD Windows results differ. The RADV results are a bit wrong, but Proton uses the SPIR-V GLSL extension instructions too, and no workarounds have been implemented there.
--
v4: vkd3d-shader/spirv: Handle the ACOS, ASIN and ATAN instructions in spirv_compiler_emit_ext_glsl_instruction().
vkd3d-shader/dxil: Handle inverse trigonometric functions in sm6_parser_emit_dx_unary().
tests/shader-runner: Add tests for atan and atan2 trig intrinsics.
tests/shader-runner: Add tests for acos and asin trig intrinsics.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/602
There are still some issues I need to fix, mainly around timing conversion between MIDI and dmusic. Right now MIDI files seem to be cut off before the end is reached.
Please have a look at the general approach in the meantime, I need to know if this is the right way to do this or not.
--
v7: dmusic: Don't stop instrument downloading early on failure.
dmime: Create a band track for MIDI segments.
dmband: Move band.c to dmusic
dmband: Implement getting/setting GUID_BandParam on band tracks.
dmime/test: Add test for getting band track from midi file.
dmime: Implement IDirectMusicTrack_Play for MIDI tracks.
dmime: Implement getting/setting TempoParam for MIDI tracks.
dmime: Parse MIDI files.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4982
This test currently hit a Metal bug when run on Apple Silicon with
MoltenVK and fails. We don't have an easy way to mark shader runner
tests as buggy and we're not interested in tracking that bug anyway,
so I'm just working around it.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/625
I tried various Wine builds trying to figure out why NFS Underground was crashing only
on 32-bit Wine that I deleted my patch archive by accident so hopefully this change doesn't
have to wait too long.
This change should be a no-op on 2.71 (so I would have to update the configure stuff to
2.72 if I wanted to change anything but the configure.ac file which would be a different MR).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5031
This goes atop !598 and !603.
--
v8: vkd3d-shader/ir: Introduce a simple control flow graph structurizer.
vkd3d-shader/ir: Handle PHI nodes when materializing SSA registers.
vkd3d-shader/ir: Materialize SSA registers to temporaries.
vkd3d-shader/spirv: Support bool TEMP registers.
vkd3d-shader/spirv: Move bool casting helpers above register loading helpers.
vkd3d-shader/spirv: Convert the swizzle according to the source bit width.
vkd3d-shader/dxil: Set the register before calling src_param_init_scalar().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/607
With tests from !364, separated out from the HLSL changes there and updated.
It is apparently unnecessary to match the SM4/5 implementation, since the AMD Windows results differ. The RADV results are a bit wrong, but Proton uses the SPIR-V GLSL extension instructions too, and no workarounds have been implemented there.
--
v3: vkd3d-shader/spirv: Handle the ACOS, ASIN and ATAN instructions in spirv_compiler_emit_ext_glsl_instruction().
vkd3d-shader/dxil: Handle inverse trigonometric functions in sm6_parser_emit_dx_unary().
tests/shader-runner: Add tests for atan and atan2 trig intrinsics.
tests/shader-runner: Add tests for acos and asin trig intrinsics.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/602
Normally I am a strong proponent of adjusting implementations one small step at
a time, but this is a bit of an extreme case.
The current state of UrlCanonicalize() is a prototypical example of "spaghetti
code": the implementation has been repeatedly adjusted to fix a new discovered
edge case, without properly testing the scope of the new logic, with the effect
that the current logic is a scattered mess of conditions that interact in
unpredictable ways.
To be fair, the actual function is much more complicated than one would
anticipate, and the number of new weird edge cases I found while trying to flesh
out existing logic was rather exhausting.
I initially tried to "fix" the existing implementation one step at a time. After
racking up dozens of commits without an end in sight, though, and having to
waste time carefully unravelling the broken code in the right order so as to
avoid temporary failures, I decided instead to just fix everything at once,
effectively rewriting the function from scratch, and this proved to be much more
productive.
Hopefully the huge swath of new tests is enough to prove that this new
implementation really is correct, and has no more spaghetti than what Microsoft
made necessary.
--
v3: shlwapi/tests: Add many more tests for UrlCanonicalize().
kernelbase: Use scheme_is_opaque() in UrlIs().
kernelbase: Reimplement UrlCanonicalize().
https://gitlab.winehq.org/wine/wine/-/merge_requests/4954
Found while refactoring FFP code; no known application is affected.
--
v2: wined3d/glsl: Pass through the specular varying when SPECULARENABLE is FALSE.
wined3d/glsl: Always set WINED3D_SHADER_CONST_FFP_LIGHTS in FFP constant update masks.
d3d8/tests: Add more tests for SPECULARENABLE.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4956