I’ve been investigating Vulkan ever since it came out roughly a month ago. Ideally we would be able to port the engine to Vulkan sometime by the end of this year. It’s a radical change and a non-trivial effort, probably a whole man month of work, but the more stuff we build the bad old way the harder it will be to move to the new good way at some point in the future. Also, due to the unique nature of our technology, we could see some pretty serious performance improvements by moving to D3D12/Vulkan.

Unfortunately Vulkan is still very much in its infancy. The drivers are in Beta which actually doesn’t concern me too much as they will probably be stable well before we ship I:B to retail. The bigger problem is the state of its shader compiler ecosystem. To say it’s a complete mess is probably giving it too much credit. A disaster of epic proportions straddles a fine line between being slightly melodramatic and accurately describing the current situation. Recent benchmarks have Vulkan shaders running ~30% slower than D3D11/D3D12 which is an incredible performance differential (http://www.anandtech.com/show/10047/quick-look-vulkan-performance-on-the-talos-principle). It makes Vulkan seriously unattractive in the near to mid-term. The worst part is that the long-term promise of SPIR-V is actually pretty great - if only Khronos had more cohesively invested in achieving this vision within a reasonable time frame. Lastly Apple hasn’t announced it’s going to support Vulkan which also seriously undercuts it.

So this brings us to D3D12. It’s near identical to Vulkan except everything that’s wrong with Vulkan isn’t a problem with D3D12 - except one major flaw which is that it’s Win10/XB1 only. This seriously puts us in a bind when choosing our next-gen API. If Apple had declared support for Vulkan this would be a no-brainer, the pro’s of adopting Vulkan would outweigh the cons of working through its shader compiler issues, however that’s not the case. No matter what if we want to support Apple platforms we’ll have to implement another rendering backend for Metal. Given that there aren’t many compelling business reasons to support Linux the only real incentive to choose Vulkan over D3D12 is that it supports Windows 7/8/8.1.

Lastly we don’t have the manpower to support both a D3D11 and D3D12/Vulkan rendering backend. The divergence between the old and new is massive and we can’t afford to support something that will become less relevant with every passing day. This means that if we choose D3D12 you will simply not be able to play I:B without Windows 10 - period. Otherwise we’ll have to deal with that 30% shader performance hit which will likely be a major problem in its own right. Damned if we do and damned if we don’t. At this juncture I’m leaning toward saying to hell with Vulkan and implementing D3D12, we’ll just have to deal with being Win10 only which I suspect will be easier than all other alternatives. I’ve been using Win10 for almost a year and so far I’m pretty happy with it. It’s a proper successor to Win7 and I think at this point anyone refraining from upgrading is merely delaying the inevitable.