This series provides a bunch of new tests related to module management
in dbghelp, and a couple of fixes:
- correcting some module's name vs filename propagation
- better handling in SymLoadModules when module overlaps the already
loaded module(s)
--
v2: dbghelp: Unload overlapping modules in SymLoadModule*().
dbghelp: Add new module at end of the process' modules list.
dbghelp: Add some more tests about module handling.
dbghelp: Add test for loaded modules enumeration.
dbghelp: Let EnumerateLoadedModules() expose image names.
dbghelp: Add tests for 'module' name in EnumLoadedModules() callback.
dbghelp/tests: Test return value of SymLoadModule.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2220
This is what it looks like:
**v1**

**v2**

--
v3: winecfg: Add an option to enable WinRT app dark theme.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2183
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51848
SPORE creates a swapchain on a window, then destroys it, then creates a
different swapchain on the same window and uses it for the rest of its lifetime.
The swapchains have different GLX visuals (the details are unimportant).
The effect is that the second swapchain sees the pixel format set by the first
swapchain, through GetPixelFormat(), and therefore needs to set and then
restore the new pixel format on every present. This results in recreating the
GLX drawable twice per frame, which is extremely expensive.
This patch series changes WGL_WINE_pixel_format_passthrough to only set an
"internal" pixel format. The real pixel format will still be set as it is now,
but GetPixelFormat() will always return 0, signalling to wined3d that the
application has not set the pixel format, and therefore there is no need to
restore it.
As the tests show, this change also matches Windows, which does not report that
a pixel format has been set after presenting a Direct3D swapchain.
This is a large series by patch count, but I fear that splitting it into two
parts would make it difficult to grasp the entire picture, and purpose of the
earlier patches. It also contains six patches which are simply repetitions
across the three user drivers, which should ease the burden of review somewhat.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2217
This series provides a bunch of new tests related to module management
in dbghelp, and a couple of fixes:
- correcting some module's name vs filename propagation
- better handling in SymLoadModules when module overlaps the already
loaded module(s)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2220
There are two common ways I observe how games get monitor name to display:
1. Registry key under Enum/Display (also present in EnumDisplayDevicesA result for monitors). On Windows this key is derived from edid as 'Manufacturer ID' (3 letters) combined with "Manufacturer product code" (4 hex digits). We currently have 'Default_Display' there for all the displays;
2. DisplayConfigGetDeviceInfo(DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME). Windows sets friendlyNameFromEdid flag and returns a name from 'EDID Display Descriptor' with code 0xfc ("Display name"). As far as I could see by searching through the Windows registry this name doesn't seem to be explicitly present anywhere in registry (besides binary raw edid of course).
The first patch removes name from the gdi driver's display structure. Now none of the drivers set anything genuine there. x11 and winemac always end up with "Generic Non-Pnp Monitor" string, wineandroid sets NULL there and "Generic Non-Pnp Monitor" is set in win32u in this case. That "Generic Non-Pnp Monitor" goes to "DeviceDesc" registry value. While our value doesn't match Windows string exactly, Windows also doesn't have any meaningful name under DeviceDesc (and contains "Generic Non-Pnp Monitor" as a part of it). So this patch is essentially a no-op currently. Going forward my idea is that we just want to have edid from drivers. If the raw one is not available we can generate fallback one ourselves based on the info about the monitor we might have from elsewhere in the drivers. My motivation is:
- EDID is sometimes queried by apps directly, and it is better to provide a true one or a synthetic one with as much of accurate info as possible / reasonable;
- There is more info in EDID, e. g., colorimetry for HDR support in d3d. As far as I can tell, there is no documented way to query HDR info on Windows besides dxgi interfaces (which in case on Wine are based on gdi drivers for such things and can hardly become a genine source of such info in Wine) and WinRT interface (for which I don't know where it takes the info on Windows but we probably don't want to make it a lower level source of such info in Wine).
The alternative would be, instead of basing higher level win32u on EDID, parse EDID in drivers instead and add all the necessary info into gdi_monitor structure (instead of removing display name from there), but so far it seems less straightforward to me.
--
v2: win32u: Get friendly monitor name from EDID in NtUserDisplayConfigGetDeviceInfo().
win32u: Return edidManufactureId and edidProductCodeId from NtUserDisplayConfigGetDeviceInfo().
win32u: Store EDID in monitors cache.
win32u: Use monitor ID from EDID when available.
win32u: Remove monitor name from gdi driver monitor info.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2177