D3DKMT_CREATE_DOORBELL 구조체(d3dkmthk.h)

중요

일부 정보는 상용 출시 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.

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;
} D3DKMT_CREATE_DOORBELL;

멤버

hHwQueue

[in] D3DKMTCreateHwQueue에 대한 이전 호출에서 만든 하드웨어 큐 개체의 UMD 핸들입니다. 이 개체는 초인종을 할당해야 하는 하드웨어 큐를 식별합니다.

hRingBuffer

[in] UMD 가 이전에 만든 링 버퍼 할당에 대한 UMD 핸들입니다. 할당은 GPU가 표시되고 이미 상주해야 합니다. Dxgkrnl 은 해당 DxgkDdiCreateDoorbell 호출에서 이 할당의 GPU 가상 주소 및 크기를 KMD에 전달합니다. ResizeRingBufferOperation 플래그는 크기가 조정된 새로운 링 버퍼를 사용하여 이 하드웨어 큐에 대해 초인종을 다시 만드는 UMD에서 KMD로의 힌트입니다.

hRingBufferControl

[in/optional] UMD에서 이전에 만든 링 버퍼 컨트롤 할당에 대한 UMD 핸들입니다. UMD 및 KMD는 필요한 경우 이 할당을 제어 영역으로 사용하여 링 버퍼 읽기/쓰기 포인터 위치를 저장할 수 있습니다. 할당은 GPU가 표시되고 이미 상주해야 합니다. Dxgkrnl 은 해당 DxgkDdiCreateDoorbell 호출에서 이 할당의 GPU 가상 주소 및 크기를 KMD에 전달합니다.

Flags

[in/optional] 초인종 만들기 플래그를 지정하는 D3DKMT_CREATE_DOORBELL_FLAGS 값의 비트 필드입니다.

PrivateDriverDataSize

[in] pPrivateDriverData 가 가리키는 프라이빗 드라이버 데이터의 크기(바이트)입니다.

PrivateDriverData

[in/out] 드라이버에 대한 프라이빗 버퍼에 대한 포인터입니다. 이 버퍼의 크기는 PrivateDriverDataSize로 지정됩니다.

DoorbellCPUVirtualAddress

[out] 이 초인종에 대해 OS에서 예약한 CPU 가상 주소(읽기/쓰기 모두)에 대한 포인터입니다. UMD는 이 주소에 특정 값을 작성하여 사실상 "초인종 울림"을 통해 GPU 스케줄러에 하드웨어 큐의 새 작업 제출을 알립니다. 이 주소는 기본 물리적 초인종의 연결이 끊어지더라도 초인종의 수명 동안 일정하게 유지됩니다. UMD는 항상 이 주소를 사용하여 이 초인종에 쓰고 읽어야 합니다.

DoorbellSecondaryCPUVirtualAddress

[out/optional] 이 초인종에 대해 OS에서 예약한 보조 CPU 가상 주소(읽기/쓰기 모두)에 대한 포인터입니다.

보조 초인종 위치를 구현하는 하드웨어에서 UMD는 RequireSecondaryCpuVA 플래그를 설정합니다. 이러한 디바이스의 경우 OS는 이 초인종에 대한 또 다른 CPU 가상 주소를 예약합니다. 초인종의 수명 동안 기본 물리적 초인종의 연결이 끊어지더라도 이 주소는 일정하게 유지됩니다.

DoorbellStatusCPUVirtualAddress

[out] 초인종 상태 CPU 가상 주소에 대한 포인터입니다. 이 주소의 값은 이 하드웨어 큐에 할당된 초인종이 현재 연결되어 있는지 여부를 UMD에 나타냅니다. UMD가 큐에 새 작업을 제출하고 초인종을 울릴 때마다 이 값을 검사 초인종 링이 성공했는지 여부를 결정해야 합니다. 링이 실패하면 UMD는 D3DKMTConnectDoorbell 을 호출하여 초인종을 다시 연결한 다음 작업을 다시 제출해야 합니다.

OS는 이 64비트 초인종 상태 메모리를 할당하고 쓰고, 프로세스의 주소 공간에 매핑하고, 사용자 모드 CPU 가상 주소를 읽을 UMD에 제공합니다. 따라서 UMD는 이 주소에 저장된 64비트 값을 읽어 초인종 상태 가져와야 합니다. 이 주소의 값은 D3DDDI_DOORBELL_STATUS 열거형 값 중 하나일 수 있습니다.

의미
D3DDDI_DOORBELL_STATUS_CONNECTED 초인종이 연결되어 있고 작업 제출이 준비되었습니다.
D3DDDI_DOORBELL_STATUS_CONNECTED_NOTIFY 초인종이 연결되어 있습니다. 그러나 새 작업 제출 및 초인종 링이 있을 때마다 UMD는 D3DKMTNotifyWorkSubmission을 호출하여 KMD에 알려야 합니다.
D3DDDI_DOORBELL_STATUS_DISCONNECTED_RETRY 지금은 초인종을 연결할 수 없지만 UMD는 다시 연결해야 합니다.
D3DDDI_DOORBELL_STATUS_DISCONNECTED_ABORT 초인종은 연결되지 않으며 UMD는 작업 제출에 이 하드웨어 큐를 사용할 수 없습니다. 이 오류는 일반적으로 GPU 재설정 또는 중지된 어댑터와 같은 복구할 수 없는 시나리오를 의미합니다.

이 주소는 기본 물리적 초인종의 연결이 끊어지더라도 초인종의 수명 동안 일정하게 유지됩니다. 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 상태 기록합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 WIN11_FUTURE
머리글 d3dkmthk.h

추가 정보

D3DKMT_CREATE_DOORBELL_FLAGS

D3DKMTConnectDoorbell

D3DKMTCreateAllocation

D3DKMTCreateDoorbell

DxgkDdiConnectDoorbell

DxgkDdiCreateDoorbell