I mean, yes, DX12 is more difficult than DX11. DX11 is more difficult than DX10. DX10 is more difficult than DX9 and OpenGL.
IMHO, in rank of how easy to use they are, it goes: Dx11, Dx9, OpenGL, Dx12, Vulkan.
Dx10 isn't listed because there's no reason to ever use it - it's dead/replaced by Dx11 (you can use feature-level-10 via the Dx11 API).
OpenGL ranks low for me because there's so many different ways to achieve the same goal, and many of them are "slow paths" or have different behaviours across vendors. Testing is also a nightmare because OpenGL is really four different API's with a mostly-common interface: Intel, NVidia, AMD and Apple's implementation of it... and it's a requirement that you test for functionality and performance of every feature across all four implementations
So I recently read a few posts on DirectX 11 vs 12 and based on everything I've read, I've come to the conclusion that DirectX 11 is good for mostly all tasks and you should only use DirectX 12 to get more control over optimizations if you think you'll benefit from it, eg if your doing a large scale game.
If by "large scale" you mean, "the budget is large enough that you can afford to spend money on excessive optimization"... or you mean "supports Xbox One"
The API's used by different desktop/console platforms are:
XbOne - Dx11.x or Dx12.x
PS4 - GNM/GNMX
Windows 10 - Dx12 or Dx11 or Dx9 or OpenGL or Vulkan
Windows Vista/7/8 - Dx11 or Dx9 or OpenGL or Vulkan
Windows XP - Dx9 or OpenGL or Vulkan
Linux - OpenGL or Vulkan
Mac - OpenGL or Metal
So if you're making a game for Windows, Dx11 gets you Windows Vista/7/8/10, whereas Dx12 only gets you Windows 10... So it's not really a choice between one of the other at the moment -- if you support Dx12, you should also support Dx11 so that half of your customers who are still using Windows 7/8 can play your game!
If you're making a game for Xbox One, you can use Dx11.x or Dx12.x... but the Xbox One has a terribly slow CPU, so it would be quite important to optimize as much as possible (which means using Dx12).
So if you're making a game for Windows, Xbox One and PS4, then your engine would contain four (or, three and a bit) renderers: PS4 GNM, Xbox One Dx12, Windows Dx11 and perhaps Windows Dx12.
If you're making a game for the above three platforms plus Mac and Linux, then you'd add OpenGL as a fifth API (and perhaps Vulkan as a sixth, and Metal as a seveth!). Alternatively, you could use OpenGL on Windows instead of Dx11, but I personally wouldn't because of the testing/cross-vendor nightmare mentioned above...
Using Vulkan in place of Dx12 is a more justifiable choice in general -- but if you're supporting Xbox One, then you've already got Dx12 support, so you may as well use it on Windows too.
DX11 hides a lot of work for you, which you need to take care of yourself in DX12 or Vulkan. If you are fresh to any Graphics API I believe DX11 or OpenGL are the far better choises instead of Vulkan/DX12. If you already know the other APIs and know where your bottlenecks are and why the are there, the new APIs will be the right choice. Otherwise if never touched an API like DX or OpenGL someone should stick with the much simpler and well documented Dx11 or OpenGL APIs until there's a fair understanding of how the graphics card and all the stuff is working.
^^ This. Dx12/Vulkan require you to implement a lot of systems that the NVidia/AMD/Intel graphics driver implements for you in Dx11. If you're not comfortable writing a graphics driver, then some parts of Dx12 will be scary.
...which is a shame, because in many other respects, Dx12 is one of the simplest and easiest to use API's out there... it's just also simultaneously dangerous, and has parts that are very hard to use and understand...
Edited by Hodgman, 28 July 2016 - 07:30 AM.