This completes the implementation of display setting virtualization using DPI scaling, ie: Proton fshack done right.
There's various things to tweak still, and this will stay as an experimental feature with X11 (Wayland actually needs it to implement display mode change so it's as experimental as the driver):
- Fullscreen windows aren't padded when the display mode aspect ratio doesn't match the physical one.
- Dragging a window over another monitor with a different raw DPI is broken, and window dimensions may flicker/break, this will need the winex11 window configure refactoring (ie: https://gitlab.winehq.org/wine/wine/-/merge_requests/6731 and the other changes in https://gitlab.winehq.org/wine/wine/-/merge_requests/6569) to be fixed.
- DPI scaling is implemented with NtGdiStretchBlt, which is suboptimal, may not be performing well, and present sync is reportedly broken with GL/VK.
- A couple of other more minor tweaks.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6804
The surface scale is there to match between the Wine DPI and the
compositor scaling, not to implement Wine DPI scaling, ie: when
compositor scaling is set to 200% and Wine DPI is also set to 192,
windows are shown at 1:1 scale, instead of being upscaled twice.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6805
This is the first of 3 planned MRs reworking how `D3DXSaveSurfaceToFileInMemory()` functions, starting with DDS files.
--
v2: d3dx9: Add support for saving paletted surfaces to DDS files.
d3dx9: Set the DDSCAPS_ALPHA flag when saving DDS files with a pixel format containing an alpha channel.
d3dx9: Improve save_dds_surface_to_memory().
d3dx9/tests: Add more tests for saving surfaces as DDS files.
d3dx9: Don't attempt to save palettized surfaces in D3DXSaveSurfaceToFileInMemory().
d3dx9/tests: Include ddraw.h in surface.c for DDS header flag definitions.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6776
Some FOURCC values such as 0xdeadbeef will en up being negative when cast to the
enum type, and may cause a random crash later on. This happens randomly in the
ddraw tests, depending on the compiler being used.
--
v2: wined3d: Cast format_id when comparing it to the last format index.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6698
So we don't crash if the application unloads dinput. This can only happen if the application didn't
release all dinput objects before unloading the module, which we have observed the Yakuza games to
do.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6781
These changes are the documented way to implement IMFMediaEventGenerator for a media source. Avoiding using a destroyed event queue is the only reason to lock the CS that I can find. On top of !6783 it seems to resolve hanging while switching characters in Killsquad (not decisively proven though).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6800
This is an alternate solution to MR 6761 [1]
(actually is based on comment in that MR).
WriteProcessMemory() should succeed when process handle doesn't have
PROCESS_QUERY_INFORMATION access right set (test attached).
Plus some additional cleanup in test for ReadProcessMemory().
Feedback from Proton says that this patch solves the reported game issue.
[1] https://gitlab.winehq.org/wine/wine/-/merge_requests/6761
--
v5: server: Amend process rights mapping.
advapi32: Test some other cases of process access rights mapping.
advapi32/tests: Fix typo in manifest constant.
kernel32/tests: Don't hardcode page size in buffer size.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6767