Moving the client specific extension filtering to the PE side, and tracking supported and enabled extension lists as bitfields. This makes it possible to store the client/host supported/enabled extension list on the vulkan objects, making it easily available and shareable with win32u.
The goal is to then move the Vulkan device and instance wrappers to win32u, to benefit from their infrastructure (function pointer loading, etc), but also because D3DKMT will have to create Vulkan objects on its own for timeline and shared D3D12 fences, and allowing it to create Vulkan wrapped objects will make things easier than having a mix of host handles (in the D3DKMT stack) and wrapped handles (in the Vulkan stack).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9452
Some small dsound fixes I came up with while looking into Wine bug 30639
--
v4: dsound/tests: Mark weird DescriptionW propset failure on the AMD testbot machine.
dsound: Return the mmdevapi endpoint ID as module.
dsound: Fill all the DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE data.
dsound: Check data size in propset methods.
dsound: Consistently trace locked byte count as an unsigned value.
dsound: Print time as an unsigned value.
dsound: Simplify check in DSOUND_RecalcFormat().
dsound/tests: Get rid of a crashing test.
https://gitlab.winehq.org/wine/wine/-/merge_requests/9438
As it is right now, with _all_ envars removed, then `XDG_DATA_DIRS` is always removed as well, right?
Then, what about first sorting for size, and then doing a stable sort on whether it's a special envar? (So that while special envars like `XDG_DATA_DIRS` become high priority, the big envars that aren't special remains at the lowest priority.)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9423#note_121874
Esme Povirk (@madewokherd) commented about dlls/ole32/filelockbytes.c:
>
> static HRESULT WINAPI FileLockBytesImpl_Flush(ILockBytes* iface)
> {
> + FileLockBytesImpl *This = impl_from_ILockBytes(iface);
> +
> + TRACE("(%p)\n", iface);
> +
> + /* verify a sane environment */
> + if (!This) return E_FAIL;
> +
> + if (!FlushFileBuffers(This->hfile))
> + return STG_E_WRITEFAULT;
According to MSDN, this will fail if the file isn't opened with write permission (which, I think, shows that the tests aren't testing what you want).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9431#note_121872
Esme Povirk (@madewokherd) commented about dlls/ole32/tests/storage32.c:
> DeleteTestLockBytes(lockbytes);
> }
>
> +static void test_lockbytes_flush_operation(void)
> +{
> + static const WCHAR stmname[] = { 'T','E','S','T','S','T','R','E','A','M',0 };
> + TestLockBytes* lockbytes;
> + HRESULT hr;
> + IStorage* stg;
> + IStream* stm;
> +
> + /* Test 1: Normal flush operation */
> + CreateTestLockBytes(&lockbytes);
I don't think this tests what you want to test. `CreateTestLockBytes` uses the `TestLockBytes_Vtbl` implementation defined in the test itself. So calling the implementation of Flush defined in the test file doesn't really test anything about Windows.
In fact, there doesn't seem to be a way to get the `ILockBytes` implementation from `filelockbytes.c` directly. I think that means that only the application-observable behavior matters.
So, I think all we need the test to do is call `IStorage_Flush` on a storage file (and I think it needs to be a file, not an in-memory lockbytes) that was opened read-only. If that succeeds, then our internal ILockBytes should succeed in that case. If not, it'll depend on the behavior of `IStorage_Flush` in other situations.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9431#note_121871