Поделиться через


Улучшения DXGI 1.4

Следующие функции были добавлены или изменены в инфраструктуре графики Microsoft DirectX (DXGI) 1.4, в основном для поддержки Direct3D 12.

Более дешевое перечисление адаптеров

Для Direct3D 12 больше невозможно вернуться с устройства к IDXGIAdapter , который использовался для его создания. Также невозможно предоставить D3D_DRIVER_TYPE_WARP в D3D12CreateDevice. Чтобы упростить разработку, можно использовать IDXGIFactory4 для работы с обоими из них. IDXGIFactory4::EnumAdapterByLuid (предназначен для связывания с ID3D12Device::GetAdapterLuid) позволяет приложению получать сведения об адаптере, где было создано устройство Direct3D 12. IDXGIFactory4::EnumWarpAdapter предоставляет адаптер, который можно предоставить D3D12CreateDevice для использования отрисовщика WARP.

Отслеживание бюджета видеопамять

Разработчикам приложений рекомендуется использовать систему резервирования видеопамяти, чтобы сообщить ОС о том, без каких объемов физической видеопамяти приложение не может обойтись.

Объем физической памяти, доступный для процесса, называется "бюджетом видеопамять". Бюджет может заметно колебаться, так как фоновые процессы пробуждения и сна; и резко изменяются, когда пользователь переключается на другое приложение. Приложение может получать уведомления при изменении бюджета и опрашив текущий бюджет и текущий объем потребляемой памяти. Если приложение не остается в пределах своего бюджета, процесс будет периодически заморожен, чтобы разрешить запуск других приложений, и (или) API создания возвратит ошибку. Интерфейс IDXGIAdapter3 предоставляет методы, относящиеся к этой функции, в частности QueryVideoMemoryInfo и RegisterVideoMemoryBudgetChangeNotificationEvent.

Дополнительные сведения см. в разделе Direct3D 12 о месте проживания.

Изменения цепочки буферов Direct3D 12

Некоторые из существующих функций цепочки буферов Direct3D 11 были нерекомендуемы для сокращения накладных расходов в Direct3D 12. В то время как другие изменения были внесены, чтобы либо соответствовать концепциям Direct3D 12, либо обеспечить лучшую поддержку функций Direct3D 12.

Инвариантное удостоверение backbuffer

В Direct3D 11 приложения могут вызывать GetBuffer( 0, ... ) только один раз. Каждый вызов Present неявно изменяет удостоверение ресурса возвращаемого интерфейса. Direct3D 12 больше не поддерживает это неявное изменение удостоверения ресурсов из-за необходимой нагрузки на ЦП и гибкой структуры дескриптора ресурсов. В результате приложение должно вручную вызывать GetBuffer для каждого буфера, созданного с помощью цепочки буферов. Приложение должно вручную выполнить отрисовку в следующий буфер последовательности после вызова Present. Приложениям рекомендуется создавать кэш дескрипторов для каждого буфера вместо повторного создания множества объектов в каждом present.

Поддержка нескольких адаптеров

При создании цепочки буферов на адаптере с несколькими GPU все обратные буферы создаются на узле 1 и поддерживается только одна очередь команд. ResizeBuffers1 позволяет приложениям создавать backbuffers на разных узлах, позволяя использовать с каждым из них разные очереди команд. Эти возможности позволяют использовать методы альтернативной отрисовки кадров (AFR) с цепочкой буферов. См. раздел Системы с несколькими адаптерами.

Разное

  • Объект очереди команд должен передаваться методам CreateSwapChain , а не объекту устройства Direct3D 12.
  • Поддерживаются только следующие два эффекта переключения модели переключения:
    DXGI_SWAP_EFFECT_FLIP_DISCARD следует использовать, если приложения полностью отрисовываются через backbuffer перед его представлением или заинтересованы в поддержке сценариев с несколькими адаптерами.
    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL следует использовать приложениям, которые полагаются на частичную оптимизацию представления или регулярно считывают данные из ранее представленных backbuffers.
  • SetFullscreenState больше не является исключительно владельцем дисплея, поэтому элементы операционной системы, инициированные пользователем, могут легко отображаться перед выходными данными приложения. Примером этого является настройка тома.

Уровни компонентов оборудования Direct3D 12

Руководство по программированию для DXGI