С точки зрения архитектуры разница между D3D12 и Вулканом — слегка разные модели дескрипторов (на Вулкане image view и descriptor это отдельные штуки, там может драйвер реализовывать работу с дескрипторами примерно так, как можно вручную делать bindless на tier 2 на D3D12; а на D3D descriptor это и есть view), разные модели барьеров (на D3D они завёрнуты в resource states), немножко неявной синхронизации в конвейере на D3D12, и, следовательно, слегка разные понятия очереди (например, между операциями копирования в D3D неявное упорядочивание, и fence сигнализирует об окончании всех предыдущих сабмитов, а не о конкретно каком-то), и на Вулкане Present разрезан на явные AcquireNextImage и Present