Overriding the SDL_VIDEODRIVER variable (for Wayland support as an example)
on the Linux side can lead to some games under Wine failing to load (so treat
that variable as special).
--
v6: ntdll: Add SDL audio driver variables to the special variables list.
ntdll: Add SDL video driver variables to the special variables list.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5231
I think it would be very nice to have something like that to reduce the burden of implementing COM interfaces. This shows for instance on the windows.gaming.input module a 30% LoC reduction (from ~6800 to ~4700), even though the module already had a boilerplate helper macros already.
The MR introduces macros to automatically implement each IUnknown method, as well as all of them at once. It also includes a helper to implement IInspectable methods at once, as well as macros to forward both interface methods to a base interface or an outer object. Last, it provides higher-level macros to implement a main interface and any number of sub interfaces and generate IUnknown, forwarding and vtables for all of them at once, with IInspectable support when needed.
It uses widl to generate additional per-interface macros, for things like inheritance and vtable generation. The rest of the macros are otherwise shared in a Wine-specific header.
The implementation is split to show individual macro being used, although they are later replaced by higher-level macros. The individual helpers are still useful in some corner cases where specific behavior needs to be implemented, or for aggregating classes.
--
v3: include: Add a parameter to COM helper END to control QI traces.
windows.gaming.input: Use the new COM macros everywhere possible.
include: Introduce new macros for COM heritage implementation.
widl: Generate some INTERFACE_IMPL/FWD helper macros.
include: Introduce new macros for IInspectable WinRT implementation.
include: Introduce new macros for COM IUnknown implementation.
include: Introduce new macros for COM QueryInterface implementation.
widl: Generate some QUERY_INTERFACE helper macros.
include: Introduce new macros for COM AddRef/Release implementation.
include: Introduce new helper macros for COM implementation.
windows.gaming.input: Use the new INTERFACE_VTBL macros.
widl: Generate some INTERFACE_VTBL helper macros.
windows.gaming.input: Use a separate interface for IAgileObject.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6207
Some games with support for the haptic feedback and speaker features of the Sony DualSense controller select the controller's audio output by filtering on the ContainerId IMMDevice property to find one that matches the controller's HID's. This MR allows this information to be accessible from the IMMDevice's property store when the audio driver provides it (none for now, but I intend to add that feature to `winepulse.drv` and maybe `winealsa.drv`)
This is made specific to containerId rather than supporting VT_CLSID on every property because Wine currently stores VT_BLOBs directly in the registry value, which does not allow us to safely disambiguate between VT_CLSID and VT_BLOB values when reading from registry.
--
v7: mmdevapi: Invalidate ContainerID of unavailable audio devices.
https://gitlab.winehq.org/wine/wine/-/merge_requests/359
This variable is the Wine's equivalent of the SDL_VIDEODRIVER/
SDL_VIDEO_DRIVER variable in SDL 2 and 3 (it explicitly selects
a list of graphics/video drivers to be used).
--
v2: man: Add documentation for the WINE_VIDEO_DRIVER variable.
explorer: Introduce a new WINE_VIDEO_DRIVER variable.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6301