There was talk about having a shared library to allow reuse of common code between each DirectX version.
Here is a proof of concept, for a single shared function between Dx10 and 11.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3481
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.
--
v5: ntdll: An implementation of SRWLOCK that closer matches Windows'.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3504
Particularly it implements '/logonid' and '/user' options,
as well as adds stubs for '/upn' and '/fqdn'.
--
v6: whoami: Refactor and add more commands.
secur32: Add stub message for unimplemented name types in GetUserNameExW.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3473
lParam being NULL is handled in win32u/defwnd.c so make sure to pass the NULL through rather than relying on the pointer always being valid since it may not be in this case.
--
v2: wow64win: Skip WM_CREATE/WM_NCCREATE lParam conversion if NULL
https://gitlab.winehq.org/wine/wine/-/merge_requests/3314
Nikolay Sivov (@nsivov) commented about dlls/evr/sample.c:
> }
>
> IMFSample_Release(sample);
> -
> - if (allocator->callback)
> - IMFVideoSampleAllocatorNotify_NotifyRelease(allocator->callback);
> + callback = allocator->callback;
>
> LeaveCriticalSection(&allocator->cs);
>
> + if (callback)
> + IMFVideoSampleAllocatorNotify_NotifyRelease(allocator->callback);
> +
> return S_OK;
This is public API, and NotifyRelease() is blocking on Windows. What I suggested was to create some customized version of this, just for internal use. For example conditionally, or with a different Invoke() method implementation, whatever looks better.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319#note_41781
Nikolay Sivov (@nsivov) commented about dlls/evr/presenter.c:
> WARN("Failed to get a backbuffer, hr %#lx.\n", hr);
> }
>
> - EnterCriticalSection(&presenter->cs);
> + EnterCriticalSection(&presenter->thread.queue.cs);
> if (presenter->thread.queue.last_presented)
> IMFSample_Release(presenter->thread.queue.last_presented);
> presenter->thread.queue.last_presented = sample;
> IMFSample_AddRef(presenter->thread.queue.last_presented);
> - LeaveCriticalSection(&presenter->cs);
> + LeaveCriticalSection(&presenter->thread.queue.cs);
Let's add a local variable for a queue pointer to make this more readable.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319#note_41780
Needed by Underworld Island (Steam ID: 2150830) to skip videos properly.
--
v2: mfmediaengine: Implement media_engine_GetSeekable().
mfmediaengine/tests: Test IMFMediaEngine::GetSeekable().
mfmediaengine/tests: Fix a test failure in test_GetDuration().
https://gitlab.winehq.org/wine/wine/-/merge_requests/3536