I'm starting to consider wrapping more vulkan objects in win32u, I think it'll be useful to implement compositing (and incidentally shared resources with interop with the D3DKMT/NtGdi API), starting with nulldrv/offscreen swapchains. Alternatively we could export more functions from win32u and keep all the wrappers in winevulkan, but having access to win32u internals with a generic vulkan object wrapping mechanism seems to be more interesting.
Right now this is not very convenient because the vulkan object hierarchy is only available in winevulkan. This introduces shared structures and API between win32u and winevulkan so they can manipulate the wrapped objects from both side. The interface would only expose what is necessary, ie: the object hierarchy and wrapped handles, the instance and device functions, and the objects rbtree for debugging, so win32u can insert its wrapper there as well.
After moving the surface and swapchain wrappers to win32u, the interface would look like this: https://gitlab.winehq.org/rbernon/wine/-/blob/65ca1280d46a2dff792e298c22242… (I pushed a complete WIP branch to https://gitlab.winehq.org/rbernon/wine/-/commits/wip/vulkan-win32u-driver?r…). We can also consider moving all the winevulkan wrappers to win32u but it's not clear whether it's necessary or desirable, and we can also do that later using this interface.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6427
This activates the new DPI scaling, and stops pretending that every window is per-monitor DPI aware. It uses the GDI scaled surfaces for DPI-unaware windows, instead of the current higher resolution surfaces, which gives more blurry results but this is the same as Windows for DPI-unaware cases.
--
v3: win32u: Stop setting DPI_PER_MONITOR_AWARE by default.
explorer: Make the desktop thread per-monitor DPI aware.
user32: Move dpiaware_init to SYSPARAMS_Init.
server: Pass window's per-monitor DPI in set_window_pos.
win32u: Pass window_from_point dpi to list_children_from_point.
win32u: Map rect to window DPI in expose_window_surface.
winex11: Map message pos to physical DPI in move_resize_window.
winewayland: Remove unnecessary logical to physical DPI mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6396
This activates the new DPI scaling, and stops pretending that every window is per-monitor DPI aware. It uses the GDI scaled surfaces for DPI-unaware windows, instead of the current higher resolution surfaces, which gives more blurry results but this is the same as Windows for DPI-unaware cases.
--
v2: win32u: Stop setting DPI_PER_MONITOR_AWARE by default.
explorer: Make the desktop thread per-monitor DPI aware.
server: Pass window's per-monitor DPI in set_window_pos.
win32u: Pass window_from_point dpi to list_children_from_point.
win32u: Map rect to window DPI in expose_window_surface.
winex11: Map message pos to physical DPI in move_resize_window.
winewayland: Remove unnecessary logical to physical DPI mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6396