Улучшения 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 больше не является исключительно владельцем дисплея, поэтому элементы операционной системы, инициированные пользователем, могут легко отображаться перед выходными данными приложения. Примером этого является настройка тома.