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) |
Linux | ✗ | ✗ | ✓ |
Android | ✗ | ✗ | ✓ |
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
.