▄▄▄▄▄ ▄ █ ▀█ ▄ ▄▄ ▄▄▄ ▄▄█▄▄ ▄▄▄ ▄ ▄▄ █▄▄▄█▀ █▀ ▀ █▀ ▀█ █ █▀ ▀█ █▀ █ █ █ █ █ █ █ █ █ █ █ █ ▀█▄█▀ ▀▄▄ ▀█▄█▀ █ █ What Lies Down the Stream? by ivyl # Disclaimers State of the experimental_7.0 branch as of Aug 26th. The numbers here as accurate as possible but may be a bit off. I'm just mopping the floors here... # The State Of The Downstream ```bash git log --oneline wine-7.0..HEAD | wc -l 2228 ``` Yikes. # Reverts? ```bash git log --oneline wine-7.0..HEAD --grep reverts | wc -l 131 ``` With those squashed in we have 2228 - (2*131) commits. Still yikes. # Cherry-Picks? Let's see how many cherry-picks are there. ```bash git log --oneline wine-7.0..HEAD --grep 'cherry picked' | wc -l 910 ``` 2228 - (2*131) - 910 commits. Getting there... # Fixup / Amends? How about fixups? Those are not that standalone. ```bash git log --oneline wine-7.0..HEAD --grep 'fixup!' | wc -l 29 ``` 2228 - (131*2) - 910 - 29 There's also a bunch of `amend!` commits that adapt downstream changes to upstream version and add the `(cherry picked ...)` tag. ```bash git log --oneline wine-7.0..cw/experimental_7.0 --grep 'amend!' | wc -l 24 ``` # The Count We can subtract some of those as well, so we don't count both the original and the amend commits. Some of those are duplicates because of being pushed to multiple branches and how autosquash works. `git rebase --autosquash` + some cleanup later would leave us with 1071 commits. Let's have a look what are those and why are they not upstream. # FSYNC / ESYNC 140 commits Not included in the count: ``` rpcrt4: Avoid closing the server thread handle while it is being waited on. This, or something like this, should go upstream. This is invalid behaviour. ``` # wine-staging * server-File_Permissions Rebased ?: * user32-rawinput-mouse Requires rebase: * bcrypt-ECDHSecretAgreement * ntdll-Builtin_Prot Rebase diverged: * user32-rawinput-mouse-experimental * ntdll-ForceBottomUpAlloc * sapi-iteration-tokens * user32-recursive-activation * ntdll-Builtin_Prot * winex11-key_translation 47 commits # Low Fragmentation Heap 17 commits ``` ntdll: Implement Low Fragmentation Heap. This is a high performance multithreaded heap implementation that tries to minimize memory fragmentation as well. It takes inspiration from rpmalloc / tcmalloc and other thread-local heap implementations, while avoiding the complexity of a cache. ``` Most of the cleanups around it are upstream. The current implementetion is very ad-hoc and doesn't pass all the test and will be rewriten upstream. # Non-System DLLs/EXEs amd_ags_x64.dll: 38 commits atiadlxx.dll: 16 commits dotnetfx35.exe: 1 commit amd_ags_x64.dll - games ship with it, interfaces with their driver, native doesn't work. atiadlxx.dll - ships with Radeon's software. Some game just assume it's there using GPU's vendor ID. dotnetfx35.exe - broken installer. Very cursed. Stubs to just make things go. There's also Nvidia's counterpart, nvapi, but it implements much more functionality as a separate project - dxvk-nvapi. We include one registry key to make DLSS works - 1 commit. # UI Automation Currently being upstreamed. A lot of the changes already made in in. Some are Steam Deck On-Screen Keyboard specific hacks. 33 commits. # Vulkan Child Window Rendering `winex11.drv: Support child window vulkan rendering.` 8 commits. # Steam Hacks Very specific changes to support Steam and its runtime and to make the logs accessible: ``` winex11.drv: Don't fail GetCursorPos() from X11DRV_GetCursorPos() when Steam overlay is active. xinput1_3: Insert Steam virtual controllers in their expected slot. HACK: gamescope: xinput1_3: Ignore gamepad input when Steam Keyboard is opened. tabtip: Only trigger steam OSK link if we're running on Steam Deck. winebus.sys: Automatically bypass udevd in Flatpak or pressure-vessel. HACK: winebus.sys: Don't use hidraw for Steam controllers. HACK: proton: server: Set default timeout to 0 HACK: steam: ntdll: Setup steamclient trampolines to lsteamclient. HACK: steam: wine.inf: Add required Steam registry entries. HACK: proton: wineboot: Don't show "updating prefix" window. winebus.sys: Guess the type of evdev input devices. ``` 50 commits. # MSHTML / JScript Push to get Final Fantasy XIV launcher running. Getting upstreamed. ``` mshtml: Implement checkValidity for HTMLInputElement. mshtml: Implement HTMLLocation_put_hash. mshtml: Add window.msCrypto stub. jscript: Implement Typed Array construction from objects. jscript: Add initial implementation of ArrayBuffer. ``` 110 commits. # Shared Resources ``` sharedgpures: Add support for arbitrary metadata. winevulkan: Implement support for KMT handles and named objects. sharedgpures.sys: Add support for associating additional NT objects with shared resources. ``` 11 commits. # Targeted Game Hacks ``` user32: HACK: Do not reply to message sent from FFXIV Launcher via ReplMessage. HACK: mscoree: Add hack for missing UnrealEdCSharp assembly for Karmaflow ntdll: HACK: Add WINE_NO_PRIV_ELEVATION option and auto enable it for Aquarist - My First Job. winex11.drv: HACK: Enable WINE_SHARE_ALL_GL_CONTEXTS for Cossacks 3. ntdll: HACK: Report LocalSystem accound SID for MicrosoftEdgeUpdate. kernelbase: HACK: Force CEF swiftshader for EpicOnlineServicesUIHelper. wine.inf: HACK: Disable winusb for Nickelodeon All-Star Brawl. ``` 48 commits. # Performance Tuning ``` HACK: proton: ntdll,server: Never use CLOCK_MONOTONIC_RAW winex11.drv: Bypass compositor in fullscreen mode msvcrt: Add an SSE2 memset_aligned_32 implementation. server: Move the cursor position and last change time to the shared data. user32: Use the desktop shared data for GetCursorPos(). user32: Use the shared data if possible for GetAsyncKeyState() server: Create a thread queue shared mapping. user32: Use the thread queue shared data for peek_message. user32: Allocate heap in peek_message only when necessary. user32: Use input shared memory for GetActiveWindow. server: Use setpriority to update thread niceness when safe. server: Update individual thread priority when process priority changes. ``` 57 commits. # Logging/Debugging ``` winebus.sys: Enable SDL input logging when hid channel is enabled. winex11.drv: Log more information about X11 errors. winex11.drv: Dump keysyms and translations for all keys. msv1_0: Downgrade missing ntlm_auth message. tools: Add gdbinit helper with LoadSymbolFiles command. wineboot: Print more information when TSC calibration fails. HACK: gamescope: winex11.drv: Turn OSK input filtering messages to FIXME. wine/server: Add traces for client requests. ntdll: Add +microsecs channel for precise timestamps. ntdll: Guard against syscall stack overrun. ``` 10 commits. # Upstreaming Stuck ``` user32: Test Get/SetWindowPlacement with invalid length. user32: Reject invalid length in SetWindowPlacement. winex11.drv: Call XIconifyWindow() after XMapWindow() with a minimized window. kernel32: Implement GetPackagePath(). kernel32: Implement PackageFullNameFromId(). kernel32: Implement GetPackagesByPackageFamily() wine.inf: Create package repository for VCLibs.140. dwmapi: Improve DwmGetWindowAttribute stub. dwmapi: Add partial implementation of DWMWA_EXTENDED_FRAME_BOUNDS. ntdll: Factor out validate_context_xstate() function. ntdll: Validate context xstate at once in NtGetContextThread(). ntdll: Validate xstate alignment in validate_context_xstate(). xinputuap.dll: Add DLLs. ``` 13 commits. # Should Get Upstreamed(?) ``` kernelbase: Add stub for GetConsoleSelectionInfo. user32: Add GetPointerTouchInfo(History) stubs. include/xact3.h: Add missing legacy classes dsound: Initialize primary buffer with device's channel layout winepulse: Add stub IAudioClockAdjustment implementation winepulse: Implement IAudioClockAdjustment::SetSampleRate devenum: Register IEEE float for Direct Sound default device. winevulkan: Don't hardcode performance frequency. setupapi: Support DICGF_PRESENT when looking for devices twinapi.appcore.dll: Stub DLL. twinapi.appcore.dll: Stub implement IEasClientDeviceInformation. ntdll: Add stub implementation for NtSetInformationFile(FileAllocationInformation). winex11.drv: Call SetForegroundWindow instead of SetActiveWindow on restore. winepulse: Add stub IAudioClockAdjustment implementation winepulse: Implement IAudioClockAdjustment::SetSampleRate devenum: Register IEEE float for Direct Sound default device. ``` 13 commits + bcrypt DH. # Application Naming ``` winepulse: Set PulseAudio application name property in the environment. ntdll: Set platform native thread name in NtSetInformationThread. ntdll: Notice THREADNAME_INFO exceptions and set thread name on Linux ``` # To Be Dropped Part of a series that mostly got accepted upstream: `gdi32/tests: Test GetDeviceCaps() for DCs on multiple monitor systems.` Upstream bug marked as CLOSED: `winex11.drv: Remove active client window from window data before deleting it.` The extension was released: `winevulkan: Add cusotm vk.xml with VK_VALVE_descriptor_set_host_mapping.` Replaced by `kernelbase: Don't use LdrLockLoaderLock() in GetModuleHandleExW().`: `advapi32: HACK: Don't free provider library in CryptReleaseContext() for DeathLoop.` # Windows Version Updates ``` Bump current build number to 19043 (Win10 2009). wine.inf: Set default Windows version to win10. wineboot: On prefix upgrade, update win10 build number ``` 5 commis. # Controller Support ``` HACK: winebus.sys: Prefer devices on UDEV hidraw bus over SDL bus. HACK: winebus.sys: Don't use hidraw for XBox controllers. HACK: winebus.sys: Ignore blacklisted SDL controllers and joysticks. winebus.sys: Enable hidraw only for the DS4/DualSense controllers. winebus.sys: Enable hidraw for Thrustmaster T.Flight Rudder Pedals winebus.sys: Enable hidraw for Thrustmaster HOTAS. winebus.sys: Always return success from PID effect control. winebus.sys: Enable all PID effect types for wheel devices. ``` ``` winebus.sys: Add Logitech G920 mapping to the SDL backend. HACK: winebus.sys: Defer Logitech G920 to the SDL backend. dinput: Add mapping for Logitech G920. dinput: Make it possible to add hacks that override names and GUID of axes. ``` 19 commits. # Fonts ``` wine.inf: Add font registry entries. wine.inf: Substitute Times New Roman for Palatino Linotype win32u: Add CJK font replacements. HACK: dwrite: Don't recommend outline rendering mode dwrite: Add free fallback fonts for CJK. dwrite: Support at least some Latin fallbacks. dwrite: Search more generously for font fallbacks. HACK: dwrite: Fix font mappings for the Cyberpunk 2077 installer. loader/wine.inf: Add registry entries for Microsoft Sans Serif (micross.ttf) and Nirmala UI (nirmala.ttf) HACK: win32u/font: Add other font linking entries. win32u: Don't load bitmap only TTF fonts without bitmap table. ``` 10 commits. # MFPlat 68 commits. Synergy with the upstream. Rémi has backported current upstream recently. Huge thanks to Q&A. # ▄▄▄▄▄▄▄ █ ▄ ▄ ▀▀█ █ █ ▄▄ ▄▄▄ █ █ ▄▄▄▄ █ ▄ ▄ █ █▀ █ █▀ █ █ █ █▀ ▀█ █ ▀▄ ▄▀ █ █ █ █▀▀▀▀ █ █ █ █ █ █▄█ █ █ █ ▀█▄▄▀ ▀▄▄▄▄▀ ▀█▄▀█ ▀▄▄ ▀█ ▄ █ ▄▀ ▀▀ ▀▀ # winex11 ``` HACK: winex11.drv: Add WM detection code. HACK: gamescope: user32: Pretend that windows are undecorated with gamescope. HACK: gamescope: winex11.drv: Track GAMESCOPE_FOCUSED_APP property changes. HACK: mutter: winex11.drv: Workaround mutter issue #649. HACK: mutter: winex11.drv: Workaround mutter issue #676. HACK: mutter: winex11.drv: Add a bit of delay before restoring mouse grabs on FocusIn. HACK: mutter: winex11.drv: Avoid setting empty shape for window on mutter. winex11.drv: Support concurrent Vulkan surfaces using XComposite. winex11.drv: Support multiple vulkan surfaces per HWND. winex11.drv: Implement other process window Vulkan rendering. winex11.drv: Generate EDID if one is not available from xrandr. winex11.drv: Add a GPU for each Vulkan device that was not tied to an XRandR provider. winex11.drv: Send missed KEYUP events on KeymapNotify. ``` 47 commits. # The Rest ~100 commits with missing context. This was a good excercise to identify those. I'll be reaching out to people to figure out what those are for and if we can just drop them. # ▄▄▄▄▄▄▄ █ █ ▄ █ █ ▄▄ ▄▄▄ ▄ ▄▄ █ ▄ ▄▄▄ █ █ █▀ █ ▀ █ █▀ █ █ ▄▀ █ ▀ █ █ █ █ ▄▀▀▀█ █ █ █▀█ ▀▀▀▄ ▀ █ █ █ ▀▄▄▀█ █ █ █ ▀▄ ▀▄▄▄▀ █ # ▄▄▄▄ ▄ ▀ ▄▄▄ ▄▀ ▀▄ ▄ ▄ ▄▄▄ ▄▄▄ ▄▄█▄▄ ▄▄▄ ▄▄▄ ▄ ▄▄ ▄▄▄ ▀ █ █ █ █ █ █▀ █ █ ▀ █ █ █▀ ▀█ █▀ █ █ ▀ ▄█▀ █ █ █ █ █▀▀▀▀ ▀▀▀▄ █ █ █ █ █ █ ▀▀▀▄ ▀ █▄▄█▀ ▀▄▄▀█ ▀█▄▄▀ ▀▄▄▄▀ ▀▄▄ ▄▄█▄▄ ▀█▄█▀ █ █ ▀▄▄▄▀ █ █