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


Функция D3DKMTCreateNativeFence (d3dkmthk.h)

Dxgkrnl вызывает D3DKMTCreateNativeFence для создания собственного объекта ограждения GPU на определенном устройстве.

Синтаксис

NTSTATUS D3DKMTCreateNativeFence(
  D3DKMT_CREATENATIVEFENCE *unnamedParam1
);

Параметры

unnamedParam1

[вход/выход] Указатель на структуру D3DKMT_CREATENATIVEFENCE , описывающую создаваемый объект ограждения.

Возвращаемое значение

D3DKMTCreateNativeFence возвращает STATUS_SUCCESS при успешном создании. В противном случае возвращается код ошибки NTSTATUS, например STATUS_INVALID_PARAMETER.

Комментарии

Указанный D3DDDI_NATIVEFENCE_TYPE определяет тип собственного ограждения, создаваемого ОС. Эти ограждения отличаются по функциональным возможностям, характеристикам производительности и требованиям к хранилищу для CurrentValue и MonitoredValue. В следующей таблице показаны эти различия, где CVal означает CurrentValue, а MVal — MonitoredValue.

Тип CurrentValue MonitoredValue Поддерживает общий доступ между процессами на ЦП Поддерживает общий доступ между адаптерами CVal ЦП единой системы обмена сообщениями KM CPUVA CVal GPU VA CVal CMPVA CVal MVal единой системы обмена сообщениями KM MVal GPU VA MVal CMPVA MVal Вариант использования
D3DDDI_NATIVEFENCE_TYPE_DEFAULT Sysmem Sysmem Да Да Только для чтения Чтение/запись Чтение/запись Чтение/запись Н/Д Write ReadOnly (или Read/Write) Чтение/запись Ограждения приложений с сокращением количества прерываний ЦП. Ожидание GPU разблокировано без пробуждения ЦП
D3DDDI_NATIVEFENCE_TYPE_DEFAULT (ОПТИМИЗИРОВАНО) Sysmem VRAM Да Да Только для чтения Чтение/запись Чтение/запись Чтение/запись Н/Д Write ReadOnly (или Read/Write) Чтение/запись Аналогично типу 0, но с уменьшенным трафиком шины PCI, так как операции чтения MVal являются локальными для GPU. Команда сигнала GPU выполняется быстрее из-за этого снижения задержки (пропускная способность++).
D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU VRAM VRAM Да Нет Н/Д Н/Д Чтение/запись Чтение/запись Н/Д Н/Д ReadOnly (или Read/Write) Чтение/запись Синхронизация на уровне буфера команд (невидимая для приложения) в пределах одного GPU. Чтение и запись в значение ограждения (CVal) является локальным, поэтому операции сигнала и разблокировки выполняются быстро.
  • D3DDDI_NATIVEFENCE_TYPE_DEFAULT

    • Поддерживается в Windows 11 версии 24H2.
    • Этот тип ограждения поддерживает все существующие объекты синхронизации D3DKMT Wait/Signal from CPU/GPU operations.
    • Хранилища CurrentValue и MonitoredValue для этого типа ограждения выделяются в сегменте системной памяти.
  • D3DDDI_NATIVEFENCE_TYPE_DEFAULT (оптимизировано)

    • Эта возможность в настоящее время не поддерживается ОС.
    • Оптимизированная версия D3DDDI_NATIVEFENCE_TYPE_DEFAULT, в которой хранилище MonitoredValue можно выделить в виртуальной памяти, ускорит операции чтения MonitoredValue из ядра GPU.
    • Эта оптимизация не предоставляется UMD. Вместо этого Dxgkrnl и KMD решат, можно ли оптимизировать тип ограждения по умолчанию, выделяя хранилище MonitoredValue в VRAM.
    • Хранилище MonitoredValue, выделенное в виртуальной памяти, по-прежнему может быть понижено до системной памяти, если в системе наблюдается нехватка локальной памяти.
    • Если ОС поддерживает этот тип ограждения, в таблице интерфейсов функций DXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1 для параметра SupportOptimizedDefaultFenceType устанавливается значение TRUE. Ожидается, что KMD будет запрашивать таблицу интерфейсов функций во время инициализации драйвера, чтобы определить эту возможность ОС.
  • D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU

    • Эта возможность в настоящее время не поддерживается ОС.
    • D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU ограждение не поддерживает операции ЦП; то есть ОС не позволяет пользовательскому режиму ставить в очередь ожидание и сигналов этому объекту ограждения.
    • Поэтому этот тип нельзя использовать для ограждений приложений DX, которые должны поддерживать семантику ожидания ЦП и сигналов. Этот тип в основном используется для внутренних ограждений UMD для синхронизации между ядрами GPU. Создание этого типа в виде собственного объекта ограждения D3DKMT обеспечивает видимость этих ограждений для таких средств, как GpuView и отладка.
    • Поддерживаемый сегмент для этого ограждения должен быть сегментом локальной памяти, не видимым для ЦП.
    • Хранилище, выделенное в локальной памяти, по-прежнему может быть понижено до системной памяти, если система находится под давлением локальной памяти.
    • Если ОС поддерживает этот тип ограждения, в таблице интерфейсов функций DXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1 для параметра SupportIntraGpuFenceType устанавливается значение TRUE. Ожидается, что KMD будет запрашивать таблицу интерфейсов функций во время инициализации драйвера, чтобы определить эту возможность ОС.

Дополнительные сведения о собственных ограждениях GPU см. в разделе Собственные объекты ограждения GPU.

Требования

Требование Значение
Минимальная версия клиента Windows 11, версия 24H2
Верхняя часть d3dkmthk.h

См. также раздел

D3DKMT_CREATENATIVEFENCE

D3DKMTOpenNativeFenceFromNTHandle

D3DKMTDesynchronizationObject

DxgkDdiCreateNativeFence