DirectX 11 и DirectX 12 решают эту проблему, но по-разному. Они оба управляют одним и тем же оборудованием и имеют доступ к тем же аппаратным функциям. Разница заключается в управлении процессором и памятью.
С DirectX 11 API является «низкоуровневым», но DirectX Runtime управляет видеопамятью, координирует загрузку/загрузку ресурсов, обрабатывает переименование буфера и обеспечивает правильную синхронизацию между GPU и CPU.
С DirectX 12, DirectX Runtime делает очень мало, и приложение отвечает за все DirectX 11 Runtime будет работать для вас. Это очень мощно, что позволяет приложениям гораздо больше контролировать то, как аппаратное обеспечение управляется, но это означает, что бремя на программиста, чтобы получить все прямо даже в необычных сценариях и в широком спектре оборудования.
Графическое программирование и отладка уже является проблемой, и использование DirectX 12 очень усложняет задачу синхронизации (аналогично тем, какие виды рисков вы можете выполнять многопоточным программированием lockfree), более специфичное для вендора поведение, требующее большего тестирования валидации, проблем управления ресурсами, которые могут произойти в нескольких кадрах, и больше ответственности за то, как все ваши программируемые шейдеры управляют обменом информацией с PCU.
Если вы новичок в графическом программировании с DirectX, я настоятельно рекомендую вам использовать DirectX 11. Даже если для вас в конечном итоге использовать DirectX 12, дизайн и документация API предполагают, что вы уже являетесь экспертом в программировании DirectX 11 и HLSL. Как только вы являетесь экспертом в DirectX 11, все равно может не иметь смысла использовать DirectX 12 для вашего конкретного проекта, если вы не обнаружите, что накладные расходы процессора API DirectX 11 действительно являются узким местом. Для кого-то, в основном заинтересованного в изучении технологии , тогда стоит изучать оба, но сначала вы должны иметь твердое понимание DirectX 11.
Также важно отметить, что DirectX 11 и DirectX 12 имеют различные системные требования. DirectX 11 поддерживается в Windows 7, Windows 8.1 и Windows 10 и требует наличия драйверов WDDM 1.x, которые широко доступны для видеоустройства от Direct3D hardware feature level от 9.1 до 11.1. DirectX 12 поддерживается в Windows 10 (включая Xbox One) и требует наличия драйверов WDDM 2.0, которые недоступны для всего видеооборудования. Драйверы WDDM 2.0 широко доступны для большинства устройств Direct3D Feature Level 11.0 или более поздних версий, которые являются большинством графических процессоров на рынке для «основных геймеров», но не для большинства видеокарт, используемых в бизнес-настройках или более старых игровых системах для ПК.
В настоящее время «сладкое пятно» для использования DirectX 12 - это если вы пишете игру и имеете опытную команду разработчиков графики большого размера; ориентированы на консоль, «основные» геймеры ПК и/или универсальную платформу Windows (UWP) для настольных компьютеров; и ожидают, что игра будет связана с процессором.
См DirectX Tool Kit для DirectX 11 и DirectX 12
Очень простой, использовать DX11. Не пытайтесь использовать DX12 только на основе вероятности того, что вы столкнетесь с узким местом производительности из-за связи с GPU-CPU. Если вы задаете вопрос, то вам определенно не нужна производительность DX12. – rlam12