It's a dependency of !9209. I'm not sure yet if more changes are needed on ucrtbase/msvcp140 side.
--
v2: msvcrt: Call __DestructExceptionObject() in __ExceptionPtrDestroy.
https://gitlab.winehq.org/wine/wine/-/merge_requests/9285
On Sun Oct 26 12:05:40 2025 +0000, Michael Stefaniuc wrote:
> -600 looks like a magic constant. How did you get to that number?
By trying different values and comparing the volume by ear. I can probably make an interactive test for this.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9259#note_119699
There exist clients that disable hardware cursors, and instead draw a
software cursor during their renderloop. Such clients incorrectly cause
winewayland to enable relative pointer motion because winewayland thinks
the cursor is not visible, when it is in fact visible and just drawn by
the client instead.
Enabling relative pointer motion breaks compositors that simulate
wl_pointer from tablet tool motion. sway is one such compositor that
supports sending wl_pointer events for clients that don't understand
tablet-v2.
Fix this by not discarding absolute motion events even in the case that
relative pointer motion is active. When relative pointer was
implemented, winewayland didn't support SetCursorPos and accepting
absolute motion events would break mouselook in 3D games. However, now
it does support SetCursorPos so there should be no harm in accepting
absolute motion events as well.
This allows tablet devices to work with winewayland running badly
behaved clients that do software rendering of cursors on compositors
that do simulate wl_pointer from tablet motion, despite winewayland not
supporting tablet-v2 yet.
Signed-off-by: Gopal Prasad <llyyr.public(a)gmail.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9068
I'm opening this MR as an RFC. It's an initial attempt to support OpenGL persistent memory mapping in the new wow64. The implementation is not complete yet (details below), but it's intentionally kept as simple as possible for a proof of concept.
Since we can't control where OpenGL maps memory, the idea is to use the available Vulkan extension with enough glue between them. Because of how GL–VK interop works, this requires creating a memory object on the Vulkan side and importing it into OpenGL. Once that's done, all operations on such buffers are performed through GL, except for mapping, which is handled by Vulkan. This is achieved by hooking `gl*BufferStorage` and reimplementing it on top of `glImportMemoryFdEXT` for mappable buffers. Recently introduced buffer wrappers make further tracking of these buffers straightforward.
If we move forward with this, the feature will need to be enabled based on available driver capabilities (for now, it's force-enabled). Some parts might also be worth moving into win32u.
This alone seems enough to claim persistent memory support and thus expose OpenGL 4.6 on the new wow64. Performance looks good in my limited testing, although that hasn't been a focus yet. Possible improvements include:
- Currently only GL buffers created with `gl*BufferStorage` are affected. Other cases still fall back to the slow memcpy path.
- The draft just picks the first host-visible coherent memory type exposed by Vulkan. We could try harder to pick an optimal type taking into account GL flags.
- The draft allocates a new Vulkan memory and fd for each mapped buffer. This is inefficient for small buffers, for which a suballocator could help.
- The draft always picks the first GPU reported by Vulkan. We may need to ensure that the selected device matches the one OpenGL actually uses.
An alternative would be a new OpenGL extension. A driver-level solution could be more efficient, and it would certainly be nice to have. However, since such an extension doesn't exist yet, and even if we have it soon, I think it's still valuable to have a fallback solution that works with existing drivers.
--
v2: opengl32: Support wow64 buffer storage and persistent memory mapping using Vulkan.
opengl32: Wrap buffer storage functions.
opengl32: Use stored extensions in filter_extensions.
opengl32: Use stored extension list in is_extension_supported.
opengl32: Compute supported extensions in make_context_current.
opengl32: Split extensions by null bytes in the registry.
https://gitlab.winehq.org/wine/wine/-/merge_requests/9032
try following locations for wineserver directory:
- `${XDG_RUNTIME_DIR}/wine`
- `/run/user/${uid}/wine`
- `${TMPDIR}/wine` - only if `${TMPDIR}` is owned by user
- `${TMPDIR}/.wine-${uid}`
- `/tmp/.wine-${uid}`
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=39013
Signed-off-by: Konstantin Demin <rockdrilla(a)gmail.com>
--
v8: ntdll: Try isolate wineserver directory.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3381
Caching the `IKsControl` in `struct channel` feels excessive.
As most stuff just uses a single port you could cache the last `port` <==> `control` mapping in `update_master_volume()`.
Or am I missing something?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9259#note_119687
Michael Stefaniuc (@mstefani) commented about dlls/dmusic/port.c:
> if (SUCCEEDED(hr))
> hr = IDirectMusicSynth_Open(obj->synth, port_params);
>
> + if (SUCCEEDED(hr))
> + {
> + KSPROPERTY volume_prop;
> + DWORD volume_size;
> + LONG volume = 0;
> +
> + volume = -600;
-600 looks like a magic constant. How did you get to that number?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9259#note_119686