Выступление на мантии, дх и огле
В последнее время, несмотря на всеобщее волнение по поводу нового API для трехмерной графики, который якобы значительно ускоряет графику, я удивляюсь, почему это не было сделано раньше. Чем же отличается старый способ от нового?
Я хотел бы знать, как это достигается и, возможно, даже краткий обзор, как это работает от GPU до драйвера для API DX или OGL.
2 ответа
Главное, что произошло, - это то, что сами графические процессоры стали довольно стандартизированными даже для разных поставщиков. DirectX и OpenGL исторически прилагали немало усилий, чтобы скрыть различия между графическими процессорами разных производителей, многие из которых в прошлом имели довольно четкую аппаратную архитектуру -OpenGL всегда был гораздо более "утечкой" абстракции со всеми этими миллионами поставщиков. специфические расширения.
DirectX 12 и Mantle раскрывают гораздо больше базового поведения графического процессора, чем в прошлом, поэтому библиотеки времени выполнения являются гораздо более тонкой абстракцией по сравнению с базовым драйвером. Этот подход не будет работать на каждой видеокарте, особенно на многих старых, которые могли поддерживать традиционные DirectX и OpenGL - с OpenGL, обладающим огромным наследием поддержки, уходящей в течение десятилетий. Стремление нормализовать функции графического процессора для DirectX 10, а затем и DirectX 11 сделало графическое оборудование для ПК различного производителя на потребительском уровне намного менее изворотливым с первых дней существования DirectX.
Следует также помнить, что этот компромисс требует гораздо большего от самого приложения / игры, чтобы правильно обрабатывать синхронизацию CPU/GPU, эффективно управлять оборудованием, отслеживать и исчерпывающе описывать комбинации состояний, которые они используют, и в целом работать. почти без уровня безопасности и поддержки из среды выполнения.
Написание приложения DirectX 12 требует гораздо больше навыков графического программирования, чем DirectX 11 или OpenGL сегодня. Настройка устройства /swapchain и простой сцены рендеринга в Direct3D 9 может занять несколько десятков строк кода, в Direct3D 11 - несколько сотен, но в DirectX 12 - намного больше, потому что само приложение должно выполнять все отдельные шаги, которые использовались быть сделано "по волшебству" во время выполнения. Это позволяет приложениям / играм настраивать точную последовательность и, возможно, пропускать шаги, которые им на самом деле не нужны, но это зависит от времени выполнения, а не от времени выполнения.
По словам дяди Бена, к великой силе приходит большая ответственность.
Разработчики настаивали на том, что они годами хотят иметь "консольный" API на ПК, поэтому теперь они узнают, действительно ли они этого хотят. Для авторов игровых движков, названий AAA с пользовательскими движками и демонстрационной технологической сцены чертовски круто иметь практически прямой контроль над аппаратным обеспечением. Для простых смертных будет намного проще использовать DirectX 11 на некоторое время дольше или использовать движок, который уже внедрил DirectX 12.
Для обзора того, как он работает от графического процессора до драйвера к API, вы можете начать с этого графического конвейера