The Wine development release 8.21 is now available.
What's new in this release: - High-DPI scaling and initial Vulkan support in the Wayland driver. - Beginnings of support for ARM64EC target. - Updates to the locale database. - Various bug fixes.
The source is available at:
https://dl.winehq.org/wine/source/8.x/wine-8.21.tar.xz
Binary packages for various distributions will be available from:
https://www.winehq.org/download
You will find documentation on https://www.winehq.org/documentation
You can also get the current source directly from the git repository. Check https://www.winehq.org/git for details.
Wine is available thanks to the work of many people. See the file AUTHORS in the distribution for the complete list.
----------------------------------------------------------------
Bugs fixed in 8.21 (total 29):
- #9127 Multiple applications require system stream support in the MPEG-I splitter (Drome Racers, Ninki Seiyuu no Tsukukurikata) - #22596 PhotoScape unable to change/save files - #34197 RootMagic 6 error on launch (Invalid operation GDI+ (Code 1)) - #36739 PreSonus Studio One 2.6 user interface/controls text is invisible - #47609 Multiple apps crash on unimplemented function msvcp140.dll.??0?$codecvt@_UDU_Mbstatet@@@std@@QEAA@_K@Z (Godhood, WechatOCR) - #52963 d3d10core:d3d10core & d3d11:d3d11 - test_resinfo_instruction() fails on Debian 11 + Intel GPU - #53287 MxManagementCenter crashes on unimplemented function msvcp140.dll.??0?$codecvt@_SDU_Mbstatet@@@std@@QEAA@_K@Z when adding a camera - #54554 kernel32:file & ntdll:file get unexpected count values on Windows 11 - #54839 3DMark 2000: missing benchmark information - #54962 GDI+ text rendering does not handle carriage returns - #55058 dbghelp:dbghelp - SymRefreshModuleList() sometimes returns 0 in 64-bit Wine - #55165 Age of Empires II Definitive Edition quits on startup, due to WinVerifyTrust() failing on game binaries. - #55215 user32:text - test_DrawTextCalcRect() crashes on Windows - #55403 Office 2021 needs Windows.Management.Deployment.PackageManager - #55437 Death Stranding: "Start" and "Back" buttons are reversed - #55504 .NET 7 not working - #55640 ModOrganizer 2.5.0 beta 5+ (Qt 6.5) requires a better uisettings3::GetColorValue implementation - #55660 HID with more than 8 axis overwrites inputs after it - #55709 Flutter apps that use the local_auth package need Windows.Security.Credentials.UI.UserConsentVerifier - #55770 Port Royale 2: flickering in the menus and during gameplay - #55788 Wayland driver: GNOME: no cursor over Wine windows when 2 monitors connected - #55795 .NET 8 SDK Installer does not finish setup - #55847 SetThreadDpiHostingBehavior not implemented - #55886 No more audio (FreeBSD and OSS) since Wine 8.15 - #55888 Quicken stopped working after upgrading to wine 8.20 - #55898 WinSCP crashes with wine-8.20 - #55909 wine does not start with free(): invalid pointer when compiling without xrandr - #55918 printf() can overrun the "p10s" buffer with certain values when using 24-bit precision - #55929 wined3d: wined3d_state_get_ffp_texture() breaks DragonAge Origins
----------------------------------------------------------------
Changes since 8.20:
Alex Henrie (9): user32/tests: Allocate clipboard data with HeapAlloc. gdi32/tests: Free what GdiConvertToDevmodeW returns with HeapFree. winmm/tests: Use calloc instead of HeapAlloc. sapi: Use CRT allocation functions. ntoskrnl/tests: Put test_input on the stack in the main_test function. d3dcompiler_43/tests: Use CRT allocation functions. d3dcompiler_43: Use CRT allocation functions. comctl32/tests: Use CRT allocation functions. d3d8: Allocate what Validate(Vertex|Pixel)Shader return with HeapAlloc.
Alexandre Julliard (72): winebuild: Add a helper to build an ARM64EC function name. winebuild: Include x86-64 entry points in ARM64EC builds. makefiles: Avoid generating the .tab.c file twice with bison. makefiles: Remove support for obsolete source variables. winecrt0: Implement setjmp/longjmp for ARM64EC. ntdll: Add a stub ARM64EC CPU backend. ntdll: Don't use x86-64 assembly on ARM64EC. ntdll: Export __chkstk_arm64ec(). makefiles: Use --defines instead of --header for compatibility with older bison. ntdll: Set function pointers in the ARM64EC metadata on dll load. ntdll: Implement __os_arm64x_check_call(). ntdll: Implement __os_arm64x_get/set_x64_information(). ntdll: Redirect PE function pointers through the ARM64EC redirection map. ntdll: Remove DECLSPEC_HIDDEN usage. make_specfiles: Generate a list of syscalls from the corresponding spec files. ntdll: Use the generated syscall list. win32u: Use the generated syscall list. wow64: Use the generated syscall list. wow64win: Use the generated syscall list. wow64: Remove DECLSPEC_HIDDEN usage. wow64cpu: Remove DECLSPEC_HIDDEN usage. ntdll: Build the syscall argument array from the generated syscall list. win32u: Set the syscall dispatcher on the PE side. win32u: Build the syscall argument array from the generated syscall list. win32u: Store the service table entry directly into the ntdll variable. wow64: Build the syscall argument array from the generated list. winebuild: Stop generating the syscall argument array and related data. win32u: Remove DECLSPEC_HIDDEN usage. tools: Upgrade the config.guess/config.sub scripts. explorer: Remove DECLSPEC_HIDDEN usage. wusa: Remove DECLSPEC_HIDDEN usage. ntdll: Generate syscall entry points from the C code with asm macros. win32u: Generate syscall entry points from the C code with asm macros. winebuild: Stop generating syscall entry points. ntdll: Add syscall entries for ARM64EC. win32u: Add syscall entries for ARM64EC. tiff: Fix size_t type size detection on 64-bit. fluidsynth: Use a signed atomic type to avoid warnings. faudio: Fix a few printf formats. ntdll: Store the syscall table in the TEB on i386. ntdll: Store the syscall table in the TEB on ARM. ntdll: Directly access the syscall table variable on x86-64. ntdll: Directly access the syscall table variable on ARM64. ntdll: Add a syscall_cfa member to the ARM64 syscall frame. ntdll: Add a syscall_cfa member to the ARM syscall frame. ntdll: Connect syscall frames across user callbacks on ARM64. ntdll: Connect syscall frames across user callbacks on ARM. ntdll: Switch to the kernel stack to abort a thread on i386. ntdll: Switch to the kernel stack to abort a thread on x86-64. ntdll: Switch to the kernel stack to abort a thread on ARM64. ntdll: Switch to the kernel stack to abort a thread on ARM. ntdll: Get rid of the thread exit frame on i386. ntdll: Get rid of the thread exit frame on x86-64. ntdll: Get rid of the thread exit frame on ARM64. ntdll: Get rid of the thread exit frame on ARM. ntdll: Remove the signal_exit_thread wrapper. nls: Update locale data to CLDR version 44. fluidsynth: Make glib replacement functions inline to avoid unused function warnings. jxr: Fix some clang compiler warnings. vkd3d: Disable printf format checks. bcrypt: Remove DECLSPEC_HIDDEN usage. crypt32: Remove DECLSPEC_HIDDEN usage. mmdevapi: Remove DECLSPEC_HIDDEN usage. netapi32: Remove DECLSPEC_HIDDEN usage. secur32: Remove DECLSPEC_HIDDEN usage. mountmgr: Remove DECLSPEC_HIDDEN usage. nsiproxy.sys: Remove DECLSPEC_HIDDEN usage. winebus.sys: Remove DECLSPEC_HIDDEN usage. ws2_32: Remove DECLSPEC_HIDDEN usage. ntdll: Use RtlFindExportedRoutineByName to simplify loader initialization. ntdll: Convert the ARM64EC context to ARM64 for syscalls. winedump: Display PE section offsets using their virtual address.
Alexandros Frantzis (26): win32u: Assume thread dpi for rect in NtUserIsWindowRectFullScreen. win32u: Respect per-monitor thread dpi awareness when getting window from point. winewayland.drv: Prepare to handle different coordinate spaces. winewayland.drv: Present surfaces with the correct scale. winewayland.drv: Refactor cursor code to prepare for scaling support. winewayland.drv: Present cursors with the correct scale. winewayland.drv: Ignore spurious size hints. winewayland.drv: Add skeleton Vulkan driver. winewayland.drv: Implement vkEnumerateInstanceExtensionProperties. winewayland.drv: Implement vkCreateInstance. winewayland.drv: Implement vkDestroyInstance. winewayland.drv: Implement vkGetDeviceProcAddr and vkGetInstanceProcAddr. winewayland.drv: Implement vkCreateWin32SurfaceKHR. winewayland.drv: Implement vkDestroySurfaceKHR. winewayland.drv: Use a client area subsurface as the Vulkan target. winewayland.drv: Set client area subsurface position. winewayland.drv: Set client area subsurface size. winewayland.drv: Forward all client surface pointer events to parent. winewayland.drv: Implement vkGetPhysicalDeviceSurfaceSupportKHR. winewayland.drv: Implement vkGetPhysicalDeviceSurfaceFormats(2)KHR. winewayland.drv: Implement vkGetPhysicalDeviceSurfaceCapabilities(2)KHR. winewayland.drv: Implement vkCreateSwapchainKHR. winewayland.drv: Implement vkDestroySwapchainKHR. winewayland.drv: Implement vkGetPhysicalDeviceSurfacePresentModesKHR. winewayland.drv: Implement vkGetPhysicalDeviceWin32PresentationSupportKHR. winewayland.drv: Implement vkGetSwapchainImagesKHR.
Alfred Agrell (6): winegstreamer: Store duration in the duration field. winegstreamer: Add wg_format_from_caps_audio_wma function. winegstreamer: Implement WMA <-> AMT conversion. winegstreamer: Switch WMA decoder to use wg_format internally. winegstreamer: Implement DMO interface for WMA decoder. mf/tests: Test IMediaObject_GetOutputSizeInfo.
Alistair Leslie-Hughes (7): dbghelp: Remove DECLSPEC_HIDDEN usage. include: Add DBPROPVAL_MR_* defines. msdasql: GetAvailableColumns correct assignment of DBCOLUMN data. rpcrt4: Remove DECLSPEC_HIDDEN usage. msado15: Updating recordset EditMode when field value changes. msado15: Correct logic when setting field value. msdasql: Check rowset pointer before assignment in ICommandText::Execute.
Anton Baskanov (14): dmsynth: Move instrument search to synth_preset_noteon(). dmsynth: Get rid of instrument reference counting. dmsynth: Factor out instrument and region search. dmsynth: Fall back to the Standard drum set when there is no matching instrument or region. dmsynth: Use FLUID_MOD_KEY for CONN_SRC_KEYNUMBER. dmime: Factor out timeout computation. dmime: Don't queue messages with immediate delivery type. dmime: Always queue messages with non-immediate delivery type. dmime: Correctly requeue messages with changed time. dmime/tests: Move scale_music_time() and check_dmus_note_pmsg() up. dmime/tests: Test output tool note requeueing. dmime: Requeue the note message instead of directly queueing MIDI note-off. dmsynth: Preserve event order when positions are equal. dmsynth: Use time instead of position to order events.
Bartosz Kosiorek (2): msvcrt: Fix _mbsspn_l implementation. msvcrt: Add _mbsspnp_l implementation.
Bernhard Übelacker (2): uxtheme: Add stub for RefreshImmersiveColorPolicyState. notepad: Use GetDesktopWindow() when main window is not yet created.
Brendan Shanks (1): ntdll: Don't use sysconf(_SC_PHYS_PAGES) on macOS.
Daniel Lehman (8): msxml3/tests: Remove unused test field. msxml3/tests: Add tests for get_xml. msxml3/tests: Test for specific HRESULT in some tests. msxml6/tests: Add tests for default namespace. msxml4/tests: Add tests for default namespace. msxml3/tests: Add tests for default namespace. msxml4/tests: Copy create namespace tests. msxml6/tests: Copy create namespace tests.
Davide Beatrici (1): wineoss: Fix sound not working.
Dmitry Timoshkov (5): user32/tests: Add some tests for font charset returned by SPI_GETICONTITLELOGFONT and SPI_GETNONCLIENTMETRICS. user32: Return DEFAULT_CHARSET from SPI_GETICONTITLELOGFONT and SPI_GETNONCLIENTMETRICS. shell32: Improve FolderView2::GetViewModeAndIconSize() stub. shell32: Return S_OK from IFolderView2::SetViewModeAndIconSize() stub. shell32: Implement IFolderView2::Items(&IID_IShellItemArray).
Eric Pouech (13): dbghelp: Remove DMT_ entries for .DBG and .PDB files. dbghelp: Expose some internal information about modules to winedbg. dbghelp: No longer decorate ELF/Mach-O module names. dbghelp: Expose PE native vs builtin information to winedbg. dbghelp: Pretend mach-o is present in case of failure. msvcrt/tests: Test passing environment in child process. ucrtbase/tests: Introduce environment tests. msvcrt: Lazily initialize ___winitenv. msvcrt: Allocate environment variables in separate allocation chunks. msvcrt: Fix ucrtbase environment initialization. regsvr32: Use message boxes by default for output. regedit: Use message boxes by default for output. winedbg: Use dbghelp extended module info.
Esme Povirk (1): user32/tests: Accept another variation in send_message_5.
Fabian Maurer (1): winex11: Free correct pointer when using xf86vm.
François Gouget (2): advapi32/tests: Fix a service stop race condition. user32/tests: Add a trailing linefeed to ok() and skip() calls.
Hans Leidekker (5): wldp: Improve the WldpGetLockdownPolicy() stub. fusion: Bump version to 4.6.1590.0. wineusb.sys: Add support for URB_FUNCTION_VENDOR_DEVICE. ntoskrnl: Stub EtwRegisterClassicProvider() and EtwUnregister(). winhttp: Use an unsigned integer for number values in query_headers().
Jacek Caban (13): configure: Add arm64ec PE target support. tools: Initial ARM64EC target support. winebuild: Use COMDAT sections for ARM64EC functions. winecrt0: Initial ARM64EC support. include: Don't use dllexport attribute for Wine PE modules. msi: Store Context as MSIINSTALLCONTEXT in MSIPACKAGE. msi/tests: Initialize pathkey in test_installprops. gdiplus: Remove unused variable. ole32/tests: Remove unused variable. mshtml: Store Gecko inner window in HTMLInnerWindow and use it in HTMLTxtRange_select. mshtml: Use Gecko inner window in HTMLXMLHttpRequestFactory_create. mshtml: Use Gecko inner window in get_ns_selection. mshtml: Use Gecko inner window in get_clipboard_commands.
Jactry Zeng (1): msvcp140: Add codecvt<char32> class stub.
Louis Lenders (2): wbemprox: Add StandardCimv2 namespace. shcore: Add stub for RegisterScaleChangeEvent.
Marc-Aurel Zent (2): ntdll: Implement thread-ID alerts using kqueue/kevent. ntdll: Use IOPowerSources API to fill battery info on macOS.
Matteo Bruni (1): opengl32: Skip filter_extensions_index() on GL contexts < 3.0.
Michael Stefaniuc (9): dmime: Remove redundant NULL check before free(). dmime/tests: Remove superfluous casts to self. dmime: Remove superfluous casts to self. dmsynth: Remove superfluous casts to self. dmusic: Remove superfluous casts to self. gdiplus: Remove redundant NULL check before free(). sane.ds: Use ARRAY_SIZE instead of open coding it. winegstreamer: Remove redundant NULL check before free(). quartz: Remove redudant NULL checks before CoTaskMemFree().
Myah Caron (1): windows.ui: Support accent colors in uisettings3_GetColorValue.
Nell Hardcastle (3): winebus.sys: Identify DualSense Edge as a DualSense controller. mmdevapi: Override product strings for DualSense Edge. hidclass.sys: Add DualSense Edge to device_strings.
Nikolay Sivov (6): d3dx9/effect: Rename effect initialization helper. evr/presenter: Handle failure to initialize D3D9. evr/tests: Skip tests if D3D9 is unusable. dxva2/tests: Skip tests if D3D9 is unusable. d3dcompiler/tests: Do not crash on device creation. oleaut32: Remove some deadcode from VarMod().
Paul Gofman (14): combase/tests: Add tests for implicit MTA with RoGetActivationFactory(). combase: Ensure MTA existence in RoGetActivationFactory(). winepulse.drv: Change device description. dnsapi: Handle IP address as DNS name in DnsQuery_UTF8(). gdiplus: Round width and height in gdip_format_string(). windowscodecs: Enable WICPixelFormat32bppBGRA in BMP encoder. msvcp110: Implement std::_Xbad_function_call(). include: Add Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation runtimeclass. include: Fix ID3DXLoadUserData definition. d3dx9/tests: Add test for user data in D3DXLoadMeshHierarchyFromXInMemory(). d3dx9: Implement loading top and frame user data in D3DXLoadMeshHierarchyFromXInMemory(). d3dx9: Unify calling parse_mesh helper functions. d3dx9: Factor out mesh_get_parse_func(). d3dx9: Support loading mesh user data in D3DXLoadMeshHierarchyFromXInMemory().
Paweł Ulita (1): user32: Add stubs for GetWindowDpiHostingBehavior and SetThreadDpiHostingBehavior.
Piotr Caban (6): msvcrt: Avoid temporary buffer allocation in _mbsrev_l. msvcrt: Add _mbsrev tests. msvcrt: Factor out env_get_index helper. msvcrt: Factor out wenv_get_index helper. msvcrt: Hold _ENV_LOCK when accessing environment variables. msvcp140: Add codecvt<char16> class stub.
Rémi Bernon (47): dmime/tests: Avoid discarding old notifications in test. dmime/tests: Test that IDirectMusicPerformance_Stop clears messages. dmime: Clear all pending messages in IDirectMusicPerformance_Stop. dmime: Send MIDI_SYSTEM_RESET message on performance reset. dmsynth: Reset synthesizer defaults on MIDI_SYSTEM_RESET. dmime: Split segment_state_play_chunk helper. dmime: Implement segment state repeat and looping. gitlab: Install libxkbcommon and libxkbregistry dependencies. winewayland.drv: Basic handling of Wayland keyboard events. winebus.sys: Ignore events on unsupported axes. windows.gaming.input: Fix inverted start / select gamepad buttons. winebus.sys: Fix incorrect hid_device_set index check. evr: Set last presented sample atomically. ntdll: Add comments to stack switches in dispatchers. ntdll: Remove unnecessary stack pointer CFI rules. ntdll: Add a syscall_cfa member to the i386 syscall frame. ntdll: Add a syscall_cfa member to the x86_64 syscall frame. ntdll: Connect syscall frames across user callbacks on i386. ntdll: Connect syscall frames across user callbacks on x86-64. winewayland.drv: Configure win32u keyboard repeat delay and speed. win32u: Implement opt-in auto-repeat for WM_(SYS)KEYDOWN messages. mfplat: Add support for internal MFVideoFormat_A2B10G10R10. mfplat: Add MFCreateAMMediaTypeFromMFMediaType stub. mfplat: Add MFInitAMMediaTypeFromMFMediaType stub. mfplat/tests: Add tests for MFInitAMMediaTypeFromMFMediaType. mfplat/tests: Add tests for MFCreateAMMediaTypeFromMFMediaType. mfplat/tests: Add IMFMediaType_GetRepresentation tests. mfplat: Only convert MEDIASUBTYPE for the formats which need it. mfplat: Use bits per pixel in uncompressed formats metadata. mfplat: Implement MFInitAMMediaTypeFromMFMediaType. mfplat: Implement MFCreateAMMediaTypeFromMFMediaType. mfplat: Implement IMFMediaType_(Get|Free)Representation. twinapi.appcore: Stub implement EasClientDeviceInformation runtimeclass. twinapi.appcore: Succeed some EasClientDeviceInformation stub calls. include: Use nested namespaces in windows.system.userprofile.idl. include: Add Windows.Globalization.GeographicRegion runtimeclass. windows.globalization: Stub Windows.Globalization.GeographicRegion factory. windows.globalization: Stub Windows.Globalization.GeographicRegion runtimeclass. windows.globalization: Implement GeographicRegion_get_CodeTwoLetter. include: Add Windows.System.Profile.AnalyticsInfo runtimeclass. twinapi.appcore: Stub Windows.System.Profile.AnalyticsInfo factory. twinapi.appcore: Stub Windows.System.Profile.AnalyticsInfo runtimeclass. twinapi.appcore: Implement Windows.System.Profile.AnalyticsInfo_get_DeviceFamily. twinapi.appcore: Implement Windows.System.Profile.AnalyticsInfo_get_DeviceFamilyVersion. include: Add Windows.System.UserProfile.AdvertisingManager runtimeclass. twinapi.appcore: Stub Windows.System.UserProfile.AdvertisingManager factory. twinapi.appcore: Return success from AdvertisingManager_get_AdvertisingId stub.
Santino Mazza (4): mlang/tests: Test GetStrCodePages with different codepages character. mlang: Fix GetStrCodePages for characters with different codepages. mlang/tests: Test for codepages priority. mlang: Implement codepages priority.
Tim Clem (3): msvcrt: Pass INT_MAX as the length in implementations of the _mbscoll family. winemac.drv: Move surface-related logs to the bitblt channel. winemac.drv: Return success from query_ime_char_rect.
Zebediah Figura (18): d3d8: Pass NOOVERWRITE to redundantly discarded maps. wined3d: Create the XFB counter BO in wined3d_context_vk_bind_stream_output_buffers(). wined3d: Provide a null counter BO for slots with no corresponding XFB buffer bound. wined3d: Introduce a wined3d_state_get_ffp_texture() helper. wined3d: Trigger constant update when an SRV requiring NPOT fixup is bound. wined3d: Set the active texture in sampler_texdim(). wined3d: Set the active texture in nvts_texdim(). ws2_32/tests: Test sending data to a peer which is closed. http.sys: Keep connection sockets open after sending a 400 response. ws2_32/tests: Test send() after TCP reset. ws2_32/tests: Work around a Linux bug. server: Return ERROR_CONNECTION_RESET when trying to recv() on a reset socket. server: Translate AFD_POLL_RESET to FD_CLOSE plus WSAECONNABORTED in window messages. ws2_32: Translate AFD_POLL_RESET to FD_CLOSE plus WSAECONNABORTED in WSAEnumNetworkEvents(). msvcrt: Perform a base-10 logarithm using integer math. wined3d: Revert uses of wined3d_state_get_ffp_texture() for non-FFP textures. ddraw/tests: Add a test for drawing to a flippable surface. ddraw: Read the current RTV before flipping any surfaces.
Zhiyi Zhang (13): uiribbon: Fix IUIFramework::SetUICommandProperty() prototype. msdasql/tests: Fix memory leaks. msdasql/tests: Add more IDBProperties::GetProperties() tests. msdasql: Return all initialization properties if no property ID is specified in dbprops_GetProperties(). oledb32: Add missing const modifiers. oledb32/tests: Use wide-char string literals. oledb32/tests: Remove test_odbc_provider(). oledb32/tests: Fix memory leaks. oledb32/tests: Add more IDataInitialize::GetInitializationString() tests. oledb32: Remove the trailing semicolon. oledb32: Fix property count in datainit_GetInitializationString(). oledb32: Quote values containing semicolons. oledb32: Remove unnecessary properties in datainit_GetInitializationString().
Ziqing Hui (2): winestreamer: Introduce media_sink_write_stream. winegstreamer: Implement wg_muxer_read_data.