DirectX 12 as a cross-platform graphics API?

I think it’s best to use graphics API directly instead of using wrappers like bgfx, sokol, Diligent Engine and so on. Best performance and latency can be achieved by fine tuning the rendering flow (especially with modern API’s) when using graphics API directly. And then on top of that, have a clear specification to work on. But those wrappers provide one big benefits, cross-platform support. Also one big downside with modern APIs is that one needs really to know what you are doing with it to get the benefits over DirectX 11 or OpenGL.

So Vulkan is known to be cross-platform but what about DX12? With some help it seems that it can support every popular modern platform, but PS4/PS5?

Thanks to rising popularity of Linux gaming the quality of DX12 to Vulkan wrapper VKD3D-Proton is very high so I would not hesitate in using it.

  • Windows 10+ and XBOX directly trough DX12. Windows can be also provided with Vulkan backend through VKD3D-Proton.
  • Linux, Nintendo Switch, Steam Deck and Android trough Vulkan using VKD3D-Proton.
  • MacOS and iOS trough Metal using MoltenVK and VKD3D-Proton.

It would be interesting to test this in practice. MacOS and iOS might be bit stretching it to get to work and debug through two layers.

Paradox of choice in software development

There is so much to choose in today’s software world even compared to 10 years ago. And it’s growing very fast, new libraries and languages pop up everyday. Should thing A be built from ground up or just use library X, Y or Z instead? What about programming language? Do I need to support this and that, etc.

I think the only way to make good choices is to have actual experience in said choice. But in the end, I think every choice is valid if one has right justification for it. And what right is comes down to one’s feeling, experience and company guides or culture. If one can find clear focus and zen of choosing then software development becomes much easier.

It’s hard or impossible to make right choices as in the end, you don’t know what you don’t know 🙂