Tuesday, March 22, 2016

Wine Staging 1.9.6 has been released with Vulkan support

We are happy to announce the release of Wine Staging 1.9.6. This version adds support for Vulkan and fixes for various other bugs.

This release adds a first version of a Vulkan wrapper to make the Vulkan API accessible to applications running in Wine. The work was started by Erich E. Hoover and later finished by other Wine Staging maintainers. The code translates the Windows specific surface extensions to the corresponding X11 / XCB extensions and passes the remaining functions on the host Vulkan library. Although this seems to be an easy task on first sight, there are various pitfalls that make this wrapper more complicated than you might think. While the Vulkan API is almost binary compatible in 64 bit (except the differences in the calling convention), properly translating Vulkan calls on 32 bit turned out to be a bit difficult.

The biggest problem on 32-bit is caused by alignment differences when using 64 bit integers in structures. On Windows a 64 bit integer is aligned on a 8 byte memory address, while compilers on most other systems only align them on a 4 byte boundary. Passing such a structure without conversion to the host library would cause problems and eventually lead to a crash. As the Vulkan API contains more than 120 structures, we had to spent a lot of time to implement structure and array conversions, which make the 32-bit version slightly slower than the 64-bit version. The final implementation adds about 10.000 lines of code to the Wine Staging code base.

Although this is the first beta version, we are happy to say that this version already passes all (~80300) Khronos Vulkan conformance tests (32 + 64 bit) when using a compliant driver on the host system. We also tested the windows version of the game "The Talos Principle" and various samples from the LunarG SDK and so far, we aren't aware of any bugs. If you still encounter any issues, feel free to open a bug report. Here is a screenshot showing The Talos Principle running in Wine Staging using the Vulkan option:
Before talking about the smaller additions, there is another important announcement regarding this release. We are aware that a big group of people uses Wine Staging because of the CSMT (command-stream multi-threading) patch-set, and we are glad to see that there is again (slow, but steady) progress to include this feature in the development version of Wine. The whole process also has a downside though. Various design goals have been changed during the up-streaming process and we are currently not aware of any fully functional patch-set, which provides all CSMT features. So far the multi-threading part, which contains the actual performance improvement, is not upstream yet and the remaining patches are getting more and more incompatible. Working around all those problem (which we did in the last releases) is not possible in the long term, and we therefore decided to disable CSMT support in this release. If you depend on this feature, you should not update to Wine Staging 1.9.6. The feature might be available in future versions again, so don't forget to check the release notes.

As mentioned at the beginning, we also added several smaller fixes. There are several patches to improve the compatibility with Python 3.5 as well as patches to improve Wines gdiplus.dll implementation. Here is the usual list of all changes, without those which already have been accepted upstream:
  • Do not update iosb.Status after FSCTL_PIPE_LISTEN call (Python 3.5)
  • Implement GdipCreateMetafileFromStream (Captvty v3, Wine Bug #40325)
  • Implement support for WICPixelFormat32bppGrayFloat (SlovoEB 2.1, Wine Bug #36517)
  • Fake success in dwmapi.DwmSetWindowAttribute function (Epic Games Launcher)
  • Implement support for Vulkan (Wine Bug #40164)
  • Fix pointer to custom dialog control data (Wine Bug #40303)
  • Populate CA certificate store in registry (Python 3.5)
  • Fix handling of GetOverlappedResult when status remains STATUS_PENDING (Python 3.5)
  • Implement semi-stub for ws2_32 DisconnectEx (Python 3.5)
  • Implement wuauserv dummy service (Python 3.5 installer)
  • Fix handling of INTERNET_INVALID_PORT_NUMBER in HttpOpenRequestW (Wine Bug #40169)
  • Implement windowscodecs.WICCreateBitmapFromSection(Ex) (Paprika Recipe Manager, Wine Bug #40273)
  • Implement a better stub for IPicture::SaveAsFile (JawsEditor, Wine Bug #8532)
  • Implement query operation in reg.exe (Wine Bug #24017)

Run Microsoft Windows Applications and Games on Mac, Linux or ChromeOS save up to 20% off  CodeWeavers CrossOver+ today.

No comments: