Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Windows 11 версии 22H2 (WDDM 3.1), WDDM был расширен, чтобы разрешить доступ к хранилищу выделения графики из драйвера режима ядра (KMD). Запасное хранилище представляет собой зафиксированный буфер памяти, содержащий содержимое графического выделения памяти, когда она не загружена в видеопамять.
Эта функция позволяет драйверу пользовательского режима (UMD) и KMD получить доступ к одной памяти выделения. Эту функцию можно использовать при запуске UMD на узле или в виртуальной машине с помощью паравиртуализации GPU (GPU-PV).
Эта функция была перенесена обратно в Windows 10 версии 20H1. DDI доступен для драйверов WDDM 3.1 или более поздней версии.
Выделение графики WDDM и резервные хранилища
Каждое выделение памяти для графики в модели WDDM имеет резервируемое хранилище. Выделение графики создается, когда UMD вызывает функцию DxgkrnlD3DKMTCreateAllocation. UMD передает частные данные для этого выделения, которые Dxgkrnl передает в KMD через вызов DxgkddiCreateAllocation. KMD возвращает требуемые флаги выделения для Dxgkrnl.
Проверка доступности компонентов
Чтобы проверить, доступна ли функция общего доступа к резервному хранилищу, KMD должен сначала вызвать один из следующих обратных вызовов с FeatureId для DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD:
- DXGKCB_QUERYFEATURESUPPORT (доступно начиная с WDDM 2.9)
- DXGKCB_ISFEATUREENABLED
Эту функцию можно использовать только в том случае, если обратный вызов выполнен успешно и Включить имеет значение TRUE.
Поток функций
После того как KMD успешно определяет, что функционал включен, UMD вызывает D3DKMTCreateAllocation для создания общего выделения, видимого для ЦП, и через частные данные указывает KMD, что это выделение должно быть им предоставлено. В ходе этого вызова происходит следующее:
KMD устанавливает флаг DXGK_ALLOCATIONINFOFLAGS2ShareBackingStoreWithKmd, когда ОС вызывает обратный вызов KMD DxgkddiCreateAllocation. Если функция не включена, KMD ни в коем случае не должен устанавливать флаг ShareBackingStoreWithKmd.
Dxgkrnl вызывает DXGKDDI_SETALLOCATIONBACKINGSTORE DDI, чтобы предоставить KMD адрес режима ядра для резервного хранилища выделения.
Вызов UMD D3DKMTLock2 для получения адреса выделения в пользовательском режиме.
Свойства распределения
Выделение, созданное таким образом, должно иметь следующие свойства:
- Выделение допускается только в сегменте системной памяти.
- Распределение должно быть создано совместно.
- Выделение не может использовать существующую системную память в качестве резервного хранилища.
- UMD может выполнять любую операцию, как для обычного выделения памяти.
- UMD может вызывать D3DKMTLock2, чтобы получить указатель на выделение.
- UMD может вызывать D3DKMTMakeResident, чтобы сделать выделение доступным GPU.