API comparison

Feature support

Category D3D11 support D3D12 support Vulkan support
Features - - -
Multi threaded command recording
Multi threaded command submission
Multiple queues
Explicit multi-GPU
Render passes
Shader dynamic resource indexing
Platform - - -
Microsoft Windows ✓ (7+) ✓ (10+) ✓ (XP+)
Mac OSX (commercial solution in production)

Multi-GPU notes

Direct3D 12 has facilities to share resources between multiple GPUs. Using D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER, CreateSharedHandle and 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.

Vulkan does not as of yet appear to have similar functionality built in, although this could be added in future versions of the API or through extensions.

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 vkUpdateDescriptorSets.