Función D3DKMTCreateNativeFence (d3dkmthk.h)

Dxgkrnl llama a D3DKMTCreateNativeFence para crear un objeto nativo de barrera de GPU en un dispositivo determinado.

Sintaxis

NTSTATUS D3DKMTCreateNativeFence(
  D3DKMT_CREATENATIVEFENCE *unnamedParam1
);

Parámetros

unnamedParam1

[in/out] Puntero a una estructura de D3DKMT_CREATENATIVEFENCE que describe el objeto de barrera que se va a crear.

Valor devuelto

D3DKMTCreateNativeFence devuelve STATUS_SUCCESS al crearse correctamente. De lo contrario, devuelve un código de error NTSTATUS, como STATUS_INVALID_PARAMETER.

Comentarios

El D3DDDI_NATIVEFENCE_TYPE especificado determina el tipo de barrera nativa que crea el sistema operativo. Estas barreras difieren en la funcionalidad, las características de rendimiento y los requisitos de almacenamiento para CurrentValue y MonitoredValue. En la tabla siguiente se muestran estas diferencias, donde CVal significa CurrentValue y MVal significa MonitoredValue.

Tipo CurrentValue MonitoredValue Admite el uso compartido entre procesos en la CPU Admite el uso compartido entre adaptadores CVal de CPUVA de mensajería unificada KM CPUVA CVal GPU VA CVal CMPVA CVal UM MVal KM MVal GPU VA MVal CMPVA MVal Caso de uso
D3DDDI_NATIVEFENCE_TYPE_DEFAULT Sysmem Sysmem ReadOnly Lectura/Escritura Lectura/Escritura Lectura/Escritura N/D Escritura ReadOnly (o lectura y escritura) Lectura/Escritura Barreras de aplicación con interrupciones de CPU reducidas. El waiter de GPU se desbloquea sin despertar la CPU
D3DDDI_NATIVEFENCE_TYPE_DEFAULT (OPTIMIZADO) Sysmem VRAM ReadOnly Lectura/Escritura Lectura/Escritura Lectura/Escritura N/D Escritura ReadOnly (o lectura y escritura) Lectura/Escritura Igual que el tipo 0, pero con el tráfico reducido del bus PCI que las lecturas de MVal son locales para la GPU. El comando de señal de GPU se completa más rápido debido a esta latencia reducida (rendimiento++).
D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU VRAM VRAM No N/D N/D Lectura/Escritura Lectura/Escritura N/D N/D ReadOnly (o lectura y escritura) Lectura/Escritura Sincronización del nivel de búfer de comandos (no visible para la aplicación) dentro de la misma GPU. Lectura y escritura en el valor de barrera (CVal) es local, por lo que las operaciones de señal y desbloqueo son rápidas.
  • D3DDDI_NATIVEFENCE_TYPE_DEFAULT

    • Compatible con Windows 11, versión 24H2.
    • Este tipo de barrera admite todos los objetos de sincronización D3DKMT existentes Wait/Signal desde operaciones de CPU/GPU.
    • Tanto el almacenamiento CurrentValue como monitoredValue para este tipo de barrera se asignan en el segmento de memoria del sistema.
  • D3DDDI_NATIVEFENCE_TYPE_DEFAULT (optimizado)

    • Esta funcionalidad no es compatible actualmente con el sistema operativo.
    • La versión optimizada de D3DDDI_NATIVEFENCE_TYPE_DEFAULT, en la que se puede asignar el almacenamiento MonitoredValue en VRAM, acelerará las lecturas de MonitoredValue desde el motor de GPU.
    • Esta optimización no se expone a UMD. En su lugar, Dxgkrnl y KMD decidirán si el tipo de barrera predeterminado se puede optimizar asignando el almacenamiento MonitoredValue en VRAM.
    • El almacenamiento monitoredValue asignado en VRAM todavía puede reducirse a la memoria del sistema si el sistema está bajo presión de memoria local.
    • Si el sistema operativo admite este tipo de barrera, establece SupportOptimizedDefaultFenceType en TRUE en la tabla de interfaz de características de DXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1 . Se espera que KMD consulte la tabla de interfaz de características durante la inicialización del controlador para determinar esta funcionalidad del sistema operativo.
  • D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU

    • Esta funcionalidad no es compatible actualmente con el sistema operativo.
    • Una barrera de D3DDDI_NATIVEFENCE_TYPE_INTRA_GPU no admite ninguna operación de CPU; es decir, el sistema operativo no permite al modo de usuario poner en cola las esperas y señales a este objeto de barrera.
    • Por lo tanto, este tipo no se puede usar para las barreras de aplicaciones DX que deben admitir la semántica de espera y señal de CPU. Este tipo se usa principalmente para barreras umD internas para la sincronización entre motores de GPU. La creación de este tipo como un objeto de barrera nativa D3DKMT proporciona visibilidad sobre estas barreras para herramientas como GpuView y depuración.
    • El segmento admitido para esta barrera debe ser un segmento de memoria local no visible para cpu.
    • El almacenamiento asignado en la memoria local puede reducirse a la memoria del sistema si el sistema está bajo presión de memoria local.
    • Si el sistema operativo admite este tipo de barrera, establece SupportIntraGpuFenceType en TRUE en la tabla de interfaz de características de DXGKARGCB_FEATURE_NATIVEFENCE_CAPS_1 . Se espera que KMD consulte la tabla de interfaz de características durante la inicialización del controlador para determinar esta funcionalidad del sistema operativo.

Para obtener más información sobre las barreras nativas de GPU, consulte Objetos de barrera de GPU nativas.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 11, versión 24H2
Encabezado d3dkmthk.h

Consulte también

D3DKMT_CREATENATIVEFENCE

D3DKMTOpenNativeFenceFromNTHandle

D3DKMTDestroySynchronizationObject

DxgkDdiCreateNativeFence