estructura D3DKMT_CREATE_DOORBELL (d3dkmthk.h)
La estructura D3DKMT_CREATE_DOORBELL contiene parámetros para D3DKMTCreateDoorbell.
Sintaxis
typedef struct _D3DKMT_CREATE_DOORBELL {
D3DKMT_HANDLE hHwQueue;
D3DKMT_HANDLE hRingBuffer;
D3DKMT_HANDLE hRingBufferControl;
D3DKMT_CREATE_DOORBELL_FLAGS Flags;
UINT PrivateDriverDataSize;
VOID *PrivateDriverData;
VOID *DoorbellCPUVirtualAddress;
VOID *DoorbellSecondaryCPUVirtualAddress;
VOID *DoorbellStatusCPUVirtualAddress;
VOID *HwQueueProgressFenceLastQueuedValueCPUVirtualAddress;
D3DKMT_HANDLE hDoorbell;
} D3DKMT_CREATE_DOORBELL;
Miembros
hHwQueue
[in] Identificador UMD del objeto de cola de hardware creado en una llamada anterior a D3DKMTCreateHwQueue. Este identificador identifica la cola de hardware para la que se debe asignar un timbre.
hRingBuffer
[in] UmD controla una asignación de búfer de anillo que umD creado anteriormente. La asignación debe ser visible para GPU y ya residente. dxgkrnl pasa a lo largo de la dirección virtual de GPU (VA) y el tamaño de esta asignación a KMD en un dxgkDdiCreateDoorbell llamada. La marcaResizeRingBufferOperation es una sugerencia de UMD a KMD que se vuelve a crear un timbre de puerta para esta cola de hardware con un búfer de anillo nuevo y cambiado de tamaño.
hRingBufferControl
[in/optional] Identificador umD para una asignación de control de búfer de anillo creado anteriormente por UMD. UMD y KMD pueden usar esta asignación como área de control para almacenar ubicaciones de punteros de lectura y escritura de búfer de anillo si es necesario. La asignación debe ser visible y ya residente cuando las llamadas UMD D3DKMTCreateDoorbell. Dxgkrnl pasa el VA de GPU y el tamaño de esta asignación a KMD en una llamada DxgkDdiCreateDoorbell correspondiente.
Flags
[in/optional] Campo de bits de D3DKMT_CREATE_DOORBELL_FLAGS valores que especifican las marcas de creación del timbre.
PrivateDriverDataSize
[in] Tamaño de los datos del controlador privado a los que pPrivateDriverData apunta, en bytes.
PrivateDriverData
[in/out] Puntero a un búfer que es privado para el controlador. El tamaño de este búfer se especifica mediante PrivateDriverDataSize. El tamaño máximo de búfer permitido es D3DDDI_DOORBELL_PRIVATEDATA_MAX_BYTES_WDDM3_1 bytes.
DoorbellCPUVirtualAddress
[out] Puntero al VA de CPU (ambos de lectura y escritura) reservado por el sistema operativo para este timbre. UMD escribirá un valor específico en esta dirección, "llamando al timbre de puerta" para notificar al programador de GPU un nuevo envío de trabajo en la cola de hardware. Esta dirección permanece constante durante la vigencia del timbre, incluso si el timbre físico subyacente se desconecta. El UMD siempre debe usar esta dirección para escribir o leer en este timbre.
DoorbellSecondaryCPUVirtualAddress
[out/optional] Puntero a una VA de CPU secundaria (ambas lecturas y escrituras) reservadas por el sistema operativo para este timbre.
En el hardware que implementa una ubicación secundaria del timbre, el UMD establece la marca RequireSecondaryCpuVA. Para estos dispositivos, el sistema operativo reservará otro VA de CPU para este timbre de puerta. Durante la vigencia del timbre, esta dirección permanecerá constante incluso si el timbre físico subyacente se desconecta.
DoorbellStatusCPUVirtualAddress
[out] Puntero al VA de CPU del estado del timbre de puerta. El valor de esta dirección indica al UMD si el timbre de puerta asignado a esta cola de hardware está conectado actualmente. Cada vez que el UMD envía un nuevo trabajo a la cola y suena el timbre de puerta, debe comprobar este valor para determinar si el anillo de timbre de puerta se realizó correctamente. Si se produjo un error en el anillo, UMD debe llamar a D3DKMTConnectDoorbell para volver a conectar el timbre y, a continuación, intentar enviar el trabajo de nuevo.
El sistema operativo asigna y escribe esta memoria de estado de timbre de 64 bits, la asigna al espacio de direcciones del proceso y proporciona su VA de CPU en modo de usuario al UMD desde el que se va a leer. Por lo tanto, UMD debe leer el valor de 64 bits almacenado en esta dirección para obtener el estado del timbre. El valor de esta dirección puede ser uno de los D3DDDI_DOORBELL_STATUS valores de enumeración.
Esta dirección permanece constante durante la vigencia del timbre, incluso si el timbre físico subyacente se desconecta. El UMD siempre debe usar esta dirección para leer el estado del timbre.
Solo el sistema operativo escribe en y actualiza esta memoria de estado:
- Al devolver correctamente DxgkDdiConnectDoorbell, el sistema operativo escribe el estado como D3DDDI_DOORBELL_STATUS_CONNECTED.
- Si el sistema operativo desconecta el timbre como parte de suspender la cola de hardware o encender la GPU, llama a la DxgkDdiDisconnectDoorbell de KMD y, a continuación, escribe el estado como D3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRY.
- Si el KMD quiere desconectar el timbre por cualquier motivo, llama al DxgkDisconnectDoorbellCB devolución de llamada para informar al sistema operativo. KMD proporciona D3DDDI_DOORBELL_STATUS como estado, que el sistema operativo escribe en esta página de estado.
- En escenarios perdidos o detenidos de GPU, el sistema operativo escribe D3DDDI_DOORBELL_STATUS_DISCONNECTED_ABORT como estado.
HwQueueProgressFenceLastQueuedValueCPUVirtualAddress
[out] VA de CPU de la ubicación donde umD escribirá el valor de barrera de progreso recién en cola cada vez que se anexa un nuevo búfer de comandos al búfer de anillo.
hDoorbell
[out] Identificador en tiempo de ejecución del objeto de timbre recién creado.
Observaciones
Para obtener más información, consulte envío de trabajo en modo de usuario.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 11, versión 24H2 (WDDM 3.2) |
encabezado de | d3dkmthk.h |