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


Совместное использование резервного хранилища совместно с KMD

Начиная с 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:

Эту функцию можно использовать только в том случае, если обратный вызов выполнен успешно и Включить имеет значение 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.