When Microsoft launched Windows 10, it made its stance on DirectX 12 clear: Windows 10 would be the only OS that supported the company’s latest API, period. For years, the company stuck to this stance. Then, earlier this year, Microsoft announced that one game — World of Warcraft — would be allowed to take advantage of the DX12 API while running Windows 7.
The reason for this allowance? Probably China. World of Warcraft has always had a huge Chinese following, and Blizzard’s decision to add DX12 support to WoW was a significant step for both the developer and the API. Now, Microsoft has announced that it’s expanding this program. In a short blog post pointing an array of API documents, Microsoft notes:
We have received warm welcome from the gaming community, and we continued to work with several game studios to further evaluate this work. To better support game developers at larger scales, we are publishing the following resources to allow game developers to run their DirectX 12 games on Windows 7.
The development guidance document for how to move DX12 to Windows 7 actually contains some useful information on how difficult it is to get games running under the older OS and what the differences are between the two. Microsoft states:
We only ported the D3D12 runtime to Windows 7. Therefore, the difference of Graphics Kernel found on Windows 7 still requires some game code changes, mainly around the presentation code path, use of monitored fences, and memory residency management (all of which will be detailed below). Early adopters reported from a few days to two weeks of work to have their D3D12 games up and running on Windows 7, though the actual engineering work required for your game may vary.
There are technical differences between DX12 on Windows 7 and DX12 on Windows 10. DirectML (Direct Machine Learning) is not supported under Windows 7, but all other features implemented in the October 2018 Windows 10 update are supported. There are differences in terms of API usage (D3D12 on Windows 7 uses different Present APIs), and some fence usage patterns are also unsupported.
There are, however, some limits to support. Only 64-bit Windows 7 with SP1 installed is supported. There’s no PIX or D3D12 debug layer on Windows 7, no shared surfaces or cross-API interop, no SLI/LDA support, no D3D12 video, and no WARP support. According to Microsoft, “HDR support is orthogonal to D3D12 and requires DXGI/Kernel/DWM functionalities on Windows 10 but not on Windows 7.” This seems to imply that HDR content can work in Windows 7, but it may be on the developer to implement it properly.
Microsoft has published additional resources on the topic, including a NuGet package and a D3D12 code sample that runs on Windows 7 and 10 with the same binary.
Why Make DX12 More Accessible?
This is honestly a little surprising to see. Windows 7 is supposed to be headed for firm retirement in a matter of months. The implication here is that Microsoft is taking this step to cater to gamers that are still using Windows 7, but the Steam Hardware Survey suggests that’s a distinct minority of gamers. Windows 10 has a 71.57 percent market share according to the SHS, while Windows 7 64-bit is pegged at 20.4 percent. What’s interesting here is that the SHS actually tilts much more towards Windows 10 than a generic OS survey.
StatCounter data puts Windows 10 at 58.63 percent of the market as of July, compared with 31.22 percent of Windows 10. This suggests that gamers tend to update their hardware more quickly than the mass market, which makes sense. But from what we’ve read, the Windows 7 gamers may be concentrated in China, where it remains the most popular OS. 49.46 percent of Chinese gamers are using Windows 7, compared with just 41.13 percent of PC gaming occurring under Windows 10. Even if we assume Chinese gamers are more likely to be using Windows 10 — and it’s not clear they are — there’s still a much larger share of users in that nation.
It’s not clear at all how Microsoft is going to deal with that problem as it relates to overall support, but it could be that this is Microsoft’s way of providing a certain degree of backward-compatibility without being willing to do anything equivalent as far as continuing to provide security features. Microsoft wants its customer base — all of it — to be Windows 10. It’s surprising to see the company extending DX12 backward, but we’d be stunned if they granted Windows 7 a stay of reprieve and kept publishing patches for it.
MS could also be hoping to encourage devs to adopt DX12 more widely. Three years after debut, neither DX12 nor Vulkan has done much to revolutionize APIs or gaming. Developers do use the APIs, but we’ve seen comparatively little use of them to pull off anything unique. The need to support older hardware and a wide range of users, plus the fact that these APIs require developers to be more familiar with the underlying hardware, seems to be a drag on their overall usage.