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