Wine‘s Direct3D 11 implementation is making progress! Over the past months Józef Kucia and Matteo Bruni have been slowly, but steadily piling on work in d3d11.dll and wined3d.dll to restructure and add the necessary features. A lot of work is still missing, so don‘t expect fancy titles to run yet. Simpler games have started working a year ago .
Last month Andrew Wesie sent a big patchset consisting of 23 changes to wine-patches that promised to make Blizzard‘s Overwatch run on Wine. Not all of these changes concerned d3d11 – some were changes to the way certain CPU registers are handled in ntdll‘s exception handler. Andrew indicated that those changes are necessary to make the game‘s anti-debug protection work. The d3d-related patches add a few missing d3d11 pieces: Instancing-related shader registers, buffer shader resource views, primitive restart and so on. He also warned that these patches are not enough to make the game run, and more work was needed.
Matteo and Henri Verbeet have provided reviews for the patches. The main concern were missing tests and some implementation details. Andrew has submitted tests and an implementation for two sided stencil, tests for the primitive restart index and the return instruction in shader functions . These patches passed review and are already included in Wine git. Józef has cleaned up Andrew‘s implementation of the return instruction, which is upstream now too.
Besides helping Andrew, Józef has been busy implementing Unordered Access Views (UAVs). They provide read-modify-write access to resources from shaders. Historically resources could either be read (Textures, Buffers) or written to (Render Targets), and it was not allowed to use the same resource for reading and writing at the same time. The OpenGL equivalent of this feature is called image load/store .
An open issue with anything newer than Direct3D9 is that wined3d still depends on legacy OpenGL 2 features and many drivers do not expose some features necessary for d3d10/11 in legacy contexts. With the MaxVersionGL key set wined3d will request a core context, but certain blitting corner cases are still broken. Mesa and the Nvidia binary driver mostly work. On MacOS you are most likely out of luck.
And finally here is a screenshot provided by Andrew showing Overwatch running on his Linux desktop:
Again, the patches necessary to run the game are not in Wine or Wine-Staging yet, and they won’t make it in for Wine 2.0. So don’t hold your breath just yet!