|Category||D3D11 support||D3D12 support||Vulkan support|
|Multi threaded command recording||✓||✓||✓|
|Multi threaded command submission||✗||✓||✓|
|Shader dynamic resource indexing||✗||✓||✓|
|Microsoft Windows||✓ (7+)||✓ (10+)||✓ (XP+)|
|Mac OSX||✗||✗||✗ (commercial solution in production)|
Direct3D 12 has facilities to share resources between multiple GPUs. Using
OpenSharedHandle resources and fences can be shared between multiple devices for offloading work on other devices. This can be useful in the case of multiple dedicated GPU setups or setups with one dedicated GPU and one integrated GPU.
Descriptor binding notes
Vulkan and Direct3D 12 share the concept of descriptors, but the method of binding descriptors is pretty substantially different when comparing the two implementations.
Direct3D 12 uses a root signature for binding purposes. The root signature can be updated on the command list, allowing for a single root signature to be used for a single pipeline state if so desired.
Vulkan, on the other hand, uses descriptor sets. These descriptor sets have to be prepared before use in the command buffer. When updating a descriptor set bound at any point in a command buffer will invalidate that command buffer. The descriptor sets have to be updated using CPU function