DXGKDDI_BEGINEXCLUSIVEACCESS 콜백 함수(d3dkmddi.h)

DxgkrnlDxgkDdiBeginExclusiveAccess 를 호출하여 IOMMU 도메인 스위치가 발생하려고 했음을 커널 모드 드라이버에 알립니다.

구문

DXGKDDI_BEGINEXCLUSIVEACCESS DxgkddiBeginexclusiveaccess;

NTSTATUS DxgkddiBeginexclusiveaccess(
  IN_CONST_HANDLE hAdapter,
  IN_PDXGKARG_BEGINEXCLUSIVEACCESS pBeginExclusiveAccess
)
{...}

매개 변수

hAdapter

[in] 디스플레이 어댑터와 연결된 컨텍스트 블록에 대한 핸들입니다.

pBeginExclusiveAccess

[in] DxgkDdiBeginExclusiveAccess에 대한 입력 인수를 포함하는 DXGKARG_BEGINEXCLUSIVEACCESS 구조체에 대한 포인터입니다.

반환 값

작업이 성공하면 DxgkDdiBeginExclusiveAccess는 STATUS_SUCCESS 반환해야 합니다. 그렇지 않으면 적절한 NTSTATUS 오류 코드를 반환해야 합니다.

설명

IOMMU 도메인 연결 및 분리는 매우 빠르지만 현재 원자성이 아닙니다. 즉, 다른 매핑이 있는 도메인으로 교환하는 동안 PCIe를 통해 발급된 트랜잭션이 올바르게 변환되지 않습니다.

이 상황을 처리하기 위해 Dxgkrnl 은 다음 KMD DDI 쌍을 호출합니다.

  • DxgkDdiBeginExclusiveAccess - IOMMU 도메인 스위치가 발생하려고 했음을 KMD에 알립니다.
  • IOMMU 도메인 스위치가 완료된 후 DxgkDdiEndExclusiveAccess입니다.

드라이버는 디바이스가 새 IOMMU 도메인으로 전환될 때마다 하드웨어가 자동으로 유지되도록 해야 합니다. 즉, 드라이버는 이러한 두 호출 사이에 디바이스에서 시스템 메모리를 읽거나 쓰지 않도록 해야 합니다.

이러한 두 호출 사이에 Dxgkrnl 은 다음을 보장합니다.

  • 스케줄러가 일시 중단됩니다. 모든 활성 워크로드가 플러시되고 하드웨어에 새 워크로드가 전송되거나 예약되지 않습니다.
  • 다른 DDI 호출은 발생하지 않습니다.

이러한 호출의 일부로 드라이버는 OS의 명시적 알림 없이도 단독 액세스 기간 동안 인터럽트(vsync 인터럽트 포함)를 사용하지 않도록 설정하고 표시하지 않도록 선택할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 버전 1803(WDDM 2.4)
머리글 d3dkmddi.h
IRQL PASSIVE_LEVEL

추가 정보

DRIVER_INITIALIZATION_DATA

DXGKARG_BEGINEXCLUSIVEACCESS

DxgkDdiEndExclusiveAccess