Current code handles omitted deleteCount but assumes it to be zero in that case. Instead an omitted deleteCount means delete everything from `start`.
This prevents Adobe sign-in page from loading.
--
v2: jscript: fix Array.prototype.splice with omitted deleteCount in html mode
https://gitlab.winehq.org/wine/wine/-/merge_requests/3567
Mesa sometimes calls debug message callback from its own Unix native thread. Then it inevitably crashes in KeUserModeCallback().
So far I spotted only harmless notification messages called this way:
```
Shader Stats: SGPRS: 24 VGPRS: 12 Code Size: 124 LDS: 0 Scratch: 0 Max Waves: 10 Spilled SGPRs: 0 Spilled VGPRs: 0 PrivMem VGPRs: 0 Outputs: 1 PatchOutputs: 0 DivergentLoop: 0 InlineUniforms: 0 (PS, W64)
```
So I guess the best is just to ignore the callbacks called from native threads. The only other solution I see in the current architecture is to spin a PE thread from opengl and poll for debug messages, but that looks less than ideal and probably doesn't worth it.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3553
> There's no special logic for NULL handles in the client side of NtTerminateProcess()
Actually there is some logic, and NULL handle has a special meaning in NtTerminateProcess. This would need tests to determine if the special meaning also applies to NtTerminateThread.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3447#note_42184
Since Yousician's last update, it was throwing an error when initialising audio output. Unfortunately I don't have access to the old version, but they seem to have dropped win<10 support, and are using only IAudioClient3_InitializeSharedAudioStream. They also use IDeviceTopology to get the type of the first output connector.
This is the bare minimum I needed to get it working.
--
v3: mmdevapi: add stub for IDeviceTopology
mmdevapi/tests: add test for IDeviceTopology
https://gitlab.winehq.org/wine/wine/-/merge_requests/3554
The first few patches will introduce temporary leaks or cyclic refs, but that's because we'll handle them properly with the dispex CC, and the last patch should fix this. Other objects' traversal will follow in another MR.
--
v3: mshtml: Traverse inner windows.
mshtml: Traverse variants using a helper function.
mshtml: Implement Cycle Collection for dispex without traversal.
mshtml: Implement Cycle Collection for outer windows.
mshtml: Split IUnknown methods for outer windows into separate vtable.
mshtml: Use unlink and destructor in the vtbl for HTMLLocation.
mshtml: Separate the HTMLLocation from the outer window.
mshtml: Use unlink and destructor in the vtbl for PerformanceTiming.
mshtml: Move PerformanceTiming related fields to the window.
mshtml: Move PerformanceNavigation related fields to the window.
mshtml: Move console to the inner window.
mshtml: Use ASCII strings for dispex object names.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3542
--
v3: tests: Add a test for fmod() with vector arguments.
vkd3d-shader: Use ternary operator in fmod() implementation.
vkd3d-shader/tpf: Use 'movc' to implement ternary operator.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/268
Avoid blocking the default callback queue with file I/O.
--
v2: mfplat: Use MFASYNC_CALLBACK_QUEUE_IO for byte stream async requests.
mfplat/tests: Test that BeginRead doesn't use MFASYNC_CALLBACK_QUEUE_STANDARD.
mfplat/tests: Create the test_callback event in the constructor.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3531
This has been annoying me for at least 3 years now. I have no idea why the later check for `async_queued( &sock->read_q )` and `async_waiting( &sock->read_q )` doesn't catch this case, but this commit fixes it so idc too much.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3557
--
v2: tests: Add a test for fmod() with vector arguments.
vkd3d-shader: Use ternary operator in fmod() implementation.
vkd3d-shader/tpf: Use 'movc' to implement ternary operator.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/268
I'm not sure how could I test this behavior, right now the test I wrote works but there are times where it doesn't enter into the deadlock.
--
v10: evr: Remove process input handling from streaming thread.
evr: Don't lock presenter allocator when calling NotifyRelease.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319
The first few patches will introduce temporary leaks or cyclic refs, but that's because we'll handle them properly with the dispex CC, and the last patch should fix this. Other objects' traversal will follow in another MR.
--
v2: mshtml: Traverse inner windows.
mshtml: Traverse variants using a helper function.
mshtml: Implement Cycle Collection for dispex without traversal.
mshtml: Implement Cycle Collection for outer windows.
mshtml: Use unlink and destructor in the vtbl for HTMLLocation.
mshtml: Separate the HTMLLocation from the outer window.
mshtml: Use unlink and destructor in the vtbl for PerformanceTiming.
mshtml: Move PerformanceTiming related fields to the window.
mshtml: Move PerformanceNavigation related fields to the window.
mshtml: Use ASCII strings for dispex object names.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3542
For example, currently, if --enable-archs=i386,x86_64 is used, and there is an
x86_64 cross compiler present but no i386 cross compiler, Wine will silently
remove i386 from the list of cross-compiled architechtures, and only compile
PE code for x86_64. This seems quite undesirable.
I am not aware of any practical reason for this to happen. Debian does ship
i686 and x86_64 MinGW compilers in separate packages, though, so it is possible
in theory.
--
I noticed this while looking into a different, related issue.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3560
This MR fixes a bug in Far Cry 6 where the necessary objects cannot be initialized in its speech synthesis thread.
--
v2: sapi/tests: Increase timeout in tts test_spvoice.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3514
gdiplus: fillPath and strokePath parameters cannot be used at the same time for GdipCreateCustomLineCap
--
v2: gdiplus: fillPath and strokePath parameters cannot be used at the same time for GdipCreateCustomLineCap
https://gitlab.winehq.org/wine/wine/-/merge_requests/3550
Since Yousician's last update, it was throwing an error when initialising audio output. Unfortunately I don't have access to the old version, but they seem to have dropped win<10 support, and are using only IAudioClient3_InitializeSharedAudioStream. They also use IDeviceTopology to get the type of the first output connector.
This is the bare minimum I needed to get it working.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3554
Fixes balloon tooltips so that they can be drawn outside of the work area (required for system tray icons) and improves the shape of the tooltips so that they resemble their shape on Windows.
--
v2: Fix balloon without breaking GDI
https://gitlab.winehq.org/wine/wine/-/merge_requests/3547
Builtin gdiplus behaves as documented but tests are indicating that Windows behaviour sometimes differs from the documentation.
I believe this issue is at least one of the contributing issues to bug https://bugs.winehq.org/show_bug.cgi?id=46947, if not the sole issue. I propose that this flag be disabled until it is well understood. I noticed as issue with DrawString seeming to ignore the flag sometimes(sometimes the text fits without any noticeable defects which I believe is the case with the program in the bug) and sometimes even drawing clipped text with the flag on. Other times it works as expected. I can't seem to find a pattern to identify that could be used to predict its behaviour.
Signed-off-by: David Kahurani k.kahurani(a)gmail.com
--
v5: gdiplus: fix StringFormatFlagsLineLimit handling
https://gitlab.winehq.org/wine/wine/-/merge_requests/3407
This is mostly an attempt to consolidate all the duplicated logic for matching the expected message sequence with the actual message sequence.
Other improvements:
* It seems that winevent_hook_todo wasn't previously reporting cases where Wine correctly sends the event.
* More clarity about which type of message was received when there's a mismatch.
* If a message doesn't match, and does not exist in the expected sequence, only the actual message will be skipped. Otherwise, only the expected message will be skipped. This isn't perfect, but I think it will help make the output from failures more readable.
* Fixed dump_sequence not printing anything for WM_NCCALCSIZE with wParam == FALSE.
Unfortunately, this is going to change the test output, so it will probably break the patterns for testbot detecting known failures. Sorry, Francois.
--
v2: user32/tests: Always generate a description for WM_NCCALCSIZE.
user32/tests: Distinguish between extra and missing messages.
user32/tests: Share code between ok_sequence and dump_sequence.
user32: Remove some todo's for working tests.
user32/tests: Use winetest context in ok_sequence.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3492
This is mostly an attempt to consolidate all the duplicated logic for matching the expected message sequence with the actual message sequence.
Other improvements:
* It seems that winevent_hook_todo wasn't previously reporting cases where Wine correctly sends the event.
* More clarity about which type of message was received when there's a mismatch.
* If a message doesn't match, and does not exist in the expected sequence, only the actual message will be skipped. Otherwise, only the expected message will be skipped. This isn't perfect, but I think it will help make the output from failures more readable.
* Fixed dump_sequence not printing anything for WM_NCCALCSIZE with wParam == FALSE.
Unfortunately, this is going to change the test output, so it will probably break the patterns for testbot detecting known failures. Sorry, Francois.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3492
I'm not sure how could I test this behavior, right now the test I wrote works but there are times where it doesn't enter into the deadlock.
--
v9: evr: Remove process input handling from streaming thread.
evr: Don't lock presenter allocator when calling NotifyRelease
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319
Needed by Underworld Island (Steam ID: 2150830) to skip videos properly.
--
v4: mfmediaengine: Implement media_engine_GetSeekable().
mfmediaengine/tests: Test IMFMediaEngine::GetSeekable().
https://gitlab.winehq.org/wine/wine/-/merge_requests/3536
`getpeername()` is currently handled in ntdll. This merge request changes ntdll to forward `getpeername()` to wineserver. The implementation utilises new `peer_addr` and `peer_addr_len` fields in wineserver's `struct sock`.
This fixes multiple `todo_wine`s in `ws2_32/tests` and allows for more accurate peer names to be provided in case the address the socket is bound to on the Unix side does not match what `bind()` was called with on the Windows side.
*This merge request was originally intended to be included in !2786 (Add support for AF_UNIX sockets) but was split into its own merge request because this is not an insignificant change.*
--
v25: server: Move getpeername() implementation from ntdll/unix.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3074
Fixes balloon tooltips so that they can be drawn outside of the work area (required for system tray icons) and improves the shape of the tooltips so that they resemble their shape on Windows.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3547
There are two motivations for this:
* First, the structure *almost* corresponds to D3D12_SHADER_INPUT_BIND_DESC, and
if more elements were included, it could be used as-is for shader reflection.
There is the quirk that currently we return scan information based on the
shader instructions, whereas d3dcompiler shader reflection expects to get it
from the shader reflection data (i.e. the RDEF chunk), which is particularly
relevant in the case that the RDEF chunk is stripped.
That said, even if we have to introduce an extra scan API to account for this
difference, being able to reuse the same structure seems like a benefit.
In order to reuse this structure, we need to add the following elements:
- Register ID (added in part 1 of this series)
- Sample count (added in part 2 of this series)
- Flags or resource types to distinguish between typed, raw, and structured
buffers. I have not decided which representation makes the most sense;
opinions are welcome.
* Second, I think it makes sense to use this reflection information internally
in spirv.c (and potentially other compiler backends) to declare resources in
the target environment, instead of parsing DCL instructions. The idea here is
that this allows backends to be more agnostic as to how resources are declared
(or inferred) in the frontend, while avoiding the need to synthesize those DCL
instructions in the frontend either [especially since epenthesizing
instructions is more expensive than converting them to NOPs.]
In order to do that, we will need vkd3d_shader_scan_descriptor_info1 to cover
everything that is currently covered by DCL instructions. This needs the same
elements as above (register ID and sample count), but also:
- Structure stride (added in part 2 of this series)
- Constant buffer used width (added in part 2 of this series)
I don't currently have a proof-of-concept using these new elements. On the other
hand, since it's just an extension of an existing API, I figured that seemed
less critical.
This does conflict trivially with 280; I'm submitting it now since 280 is
accepted, but due to Alexandre's vacation may not be committed soon, and since
this is new API I'd rather get comments early anyway.
--
v3: vkd3d-shader: Get rid of the uav_ranges array.
vkd3d-shader: Add register ID to struct vkd3d_shader_descriptor_info1.
vkd3d-shader: Introduce struct vkd3d_shader_scan_descriptor_info1.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/295
Recap:
I implemented relative addressing in !229, but I was suggested to handle register indexes by moving all the registers to the heap, which I did in my [nonconst-offsets-6](https://gitlab.winehq.org/fcasas/vkd3d/-/commits/noncon… branch. A part of this implementation required !269, but I was asked to try to turn the sm4 register structs into the vkd3d-shader register structs instead, to get closer to a common low level IR.
This is the first part of that transformation. The whole thing is in my [use_vkd3d_reg_4](https://gitlab.winehq.org/fcasas/vkd3d/-/commits/use_vkd3d… branch.
~~This is built on top of !225 (the first two patches), so it may be good to get that upstream first.~~
---
This patch series aims to do the following replacements:
```
struct sm4_register -> struct vkd3d_shader_register
struct sm4_dst_register -> struct vkd3d_shader_dst_param
struct sm4_src_register -> struct vkd3d_shader_src_param
```
to get us closer to a common level IR and simplify the implementation of relative-addressing.
To achieve this, the fields in the sm4 register structs are replaced with fields in the vkd3d-shader structs or removed altogether, one at the time.
As can be seen when looking at the whole branch, it is possible to do this transformation without having to add additional fields to `struct vkd3d_shader_register`, by restricting each register type to a single `enum vkd3d_sm4_dimension` (and its src registers to a single `enum vkd3d_sm4_swizzle_type`) by default.
The only exception we need so far is for sampler registers: They always have dimension NONE, except when used as arguments of gather instructions, in which case they have dimension VEC4 and SCALAR swizzle. This, and similar exceptions we may find in the future, can be handled using the opcode_info, as in 7/8 [81e17506](https://gitlab.winehq.org/fcasas/vkd3d/-/commit/81e17506ba2cb1fbf….
--
v8:
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/281
I'm not sure how could I test this behavior, right now the test I wrote works but there are times where it doesn't enter into the deadlock.
--
v8: evr: Remove process input handling from streaming thread.
evr: Don't lock presenter allocator when calling NotifyRelease
evr: Create critical section for sample queue.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319
The first few patches will introduce temporary leaks or cyclic refs, but that's because we'll handle them properly with the dispex CC, and the last patch should fix this. Other objects' traversal will follow in another MR.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3542
I'm not sure how could I test this behavior, right now the test I wrote works but there are times where it doesn't enter into the deadlock.
--
v7: evr: Remove process input handling from streaming thread.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319
Needed by Underworld Island (Steam ID: 2150830) to skip videos properly.
--
v3: mfmediaengine: Implement media_engine_GetSeekable().
mfmediaengine/tests: Test IMFMediaEngine::GetSeekable().
https://gitlab.winehq.org/wine/wine/-/merge_requests/3536
This comes from behavioral study of Windows, which doesn't seem to check if the
lock is actually exclusively held, and just simply decrement the value stored
in the lock.
This fixes a dead lock which prevents WeCom from starting up.
--
v12: ntdll: An implementation of SRWLOCK that closer matches Windows'.
include: add atomic read/write of pointers
https://gitlab.winehq.org/wine/wine/-/merge_requests/3504
This comes from behavioral study of Windows, which doesn't seem to check if the
lock is actually exclusively held, and just simply decrement the value stored
in the lock.
This fixes a dead lock which prevents WeCom from starting up.
--
v11: ntdll: An implementation of SRWLOCK that closer matches Windows'.
include: add atomic read/write of pointers
https://gitlab.winehq.org/wine/wine/-/merge_requests/3504