D3DKMT_CREATE_DOORBELL 구조체(d3dkmthk.h)
D3DKMT_CREATE_DOORBELL 구조에는 D3DKMTCreateDoorbell대한 매개 변수가 포함되어 있습니다.
통사론
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;
회원
hHwQueue
[in] D3DKMTCreateHwQueue이전 호출에서 만든 하드웨어 큐 개체의 UMD 핸들입니다. 이 핸들은 초인종을 할당해야 하는 하드웨어 큐를 식별합니다.
hRingBuffer
[in] UMD가 이전에 만든 링 버퍼 할당에 대한 UMD 핸들은 . 할당은 GPU가 표시되고 이미 상주해야 합니다. Dxgkrnl 해당 DxgkDdiCreateDoorbell 호출에서 GPU VA(가상 주소) 및 이 할당의 크기를 KMD에 전달합니다. ResizeRingBufferOperation 플래그는 크기가 조정된 새로운 링 버퍼를 사용하여 이 하드웨어 큐에 대해 초인종을 다시 만드는 UMD에서 KMD로의 힌트입니다.
hRingBufferControl
[in/optional] 링 버퍼 컨트롤 할당에 대한 UMD 핸들은 이전에 UMD에서 만든. UMD 및 KMD는 이 할당을 제어 영역으로 사용하여 필요한 경우 링 버퍼 읽기/쓰기 포인터 위치를 저장할 수 있습니다. 할당은 UMD가 D3DKMTCreateDoorbell 호출할 때 GPU가 표시되고 이미 상주해야 합니다. Dxgkrnl 해당 DxgkDdiCreateDoorbell 호출에서 GPU VA 및 이 할당의 크기를 KMD에 전달합니다.
Flags
[in/optional] 초인종 만들기 플래그를 지정하는 D3DKMT_CREATE_DOORBELL_FLAGS 값의 비트 필드입니다.
PrivateDriverDataSize
[in] pPrivateDriverData 가리키는 개인 드라이버 데이터의 크기(바이트)입니다.
PrivateDriverData
[in/out] 드라이버에 대한 프라이빗 버퍼에 대한 포인터입니다. 이 버퍼의 크기는 PrivateDriverDataSize의해 지정됩니다. 허용되는 최대 버퍼 크기는 D3DDDI_DOORBELL_PRIVATEDATA_MAX_BYTES_WDDM3_1 바이트입니다.
DoorbellCPUVirtualAddress
[out] 이 초인종에 대해 OS에서 예약한 CPU VA(읽기/쓰기 모두)에 대한 포인터입니다. UMD는 이 주소에 특정 값을 작성하여 하드웨어 큐에서 새 작업 제출을 GPU 스케줄러에 알리기 위해 효과적으로 "초인종을 울립니다". 이 주소는 기본 물리적 초인종의 연결이 끊어지더라도 초인종의 수명 동안 일정하게 유지됩니다. UMD는 항상 이 주소를 사용하여 이 초인종에 쓰거나 읽어야 합니다.
DoorbellSecondaryCPUVirtualAddress
[out/optional] 이 초인종에 대해 OS에서 예약한 보조 CPU VA(읽기/쓰기 모두)에 대한 포인터입니다.
보조 초인종 위치를 구현하는 하드웨어에서 UMD는 RequireSecondaryCpuVA플래그설정합니다. 이러한 디바이스의 경우 OS는 이 초인종에 대해 다른 CPU VA를 예약합니다. 초인종의 수명 동안 기본 물리적 초인종 연결이 끊어지더라도 이 주소는 일정하게 유지됩니다.
DoorbellStatusCPUVirtualAddress
[out] 초인종 상태의 CPU VA에 대한 포인터입니다. 이 주소의 값은 이 하드웨어 큐에 할당된 초인종이 현재 연결되어 있는지 여부를 UMD에 나타냅니다. UMD가 큐에 새 작업을 제출하고 초인종을 울릴 때마다 이 값을 확인하여 초인종 링이 성공했는지 확인해야 합니다. 링이 실패하면 UMD는 D3DKMTConnectDoorbell 호출하여 초인종을 다시 연결한 다음 작업을 다시 제출해야 합니다.
OS는 이 64비트 초인종 상태 메모리를 할당하고 쓰고, 프로세스의 주소 공간에 매핑하고, 읽을 UMD에 사용자 모드 CPU VA를 제공합니다. 따라서 UMD는 이 주소에 저장된 64비트 값을 읽어 초인종 상태를 가져와야 합니다. 이 주소의 값은 D3DDDI_DOORBELL_STATUS 열거형 값 중 하나일 수 있습니다.
이 주소는 기본 물리적 초인종의 연결이 끊어지더라도 초인종의 수명 동안 일정하게 유지됩니다. UMD는 항상 이 주소를 사용하여 초인종의 상태를 읽어야 합니다.
OS만 이 상태 메모리에 쓰고 업데이트합니다.
- DxgkDdiConnectDoorbell성공적으로 반환되면 OS는 상태를 D3DDDI_DOORBELL_STATUS_CONNECTED 씁니다.
- OS가 하드웨어 큐를 일시 중단하거나 GPU 전원을 끊는 과정의 일부로 초인종의 연결을 끊으면 KMD의 DxgkDdiDisconnectDoorbell 호출한 다음 상태를 D3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRY 씁니다.
- KMD가 어떤 이유로든 초인종 연결을 끊으려면 DxgkDisconnectDoorbellCB 콜백을 호출하여 OS에 알릴 수 있습니다. KMD는 OS가 이 상태 페이지에 쓰는 상태로 D3DDDI_DOORBELL_STATUS 제공합니다.
- GPU 손실 또는 중지된 시나리오에서 OS는 D3DDDI_DOORBELL_STATUS_DISCONNECTED_ABORT 상태로 씁니다.
HwQueueProgressFenceLastQueuedValueCPUVirtualAddress
[out] 새 명령 버퍼가 링 버퍼에 추가될 때마다 UMD가 새로 큐에 대기 중인 진행률 펜스 값을 쓰는 위치의 CPU VA입니다.
hDoorbell
[out] 새로 만든 초인종 개체에 대한 런타임 핸들입니다.
발언
자세한 내용은 사용자 모드 작업 제출참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 11 버전 24H2(WDDM 3.2) |
헤더 | d3dkmthk.h |