Функция 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 |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по