DXGKCB_CREATECONTEXTALLOCATION 콜백 함수(d3dkmddi.h)
DXGKCB_CREATECONTEXTALLOCATION GPU 컨텍스트 또는 디바이스별 컨텍스트를 할당합니다.
구문
DXGKCB_CREATECONTEXTALLOCATION DxgkcbCreatecontextallocation;
NTSTATUS DxgkcbCreatecontextallocation(
[in/out] INOUT_PDXGKARGCB_CREATECONTEXTALLOCATION unnamedParam1
)
{...}
매개 변수
[in/out] unnamedParam1
할당할 컨텍스트의 특성을 지정하는 DXGKARGCB_CREATECONTEXTALLOCATION 구조체에 대한 포인터입니다.
반환 값
DXGKCB_CREATECONTEXTALLOCATION 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 Ntstatus.h에 정의된 오류 코드 중 하나를 반환합니다.
설명
WDDM 1.2부터 디스플레이 미니포트 드라이버는 GPU 관련 컨텍스트(GPU 컨텍스트 할당) 또는 디바이스별 컨텍스트(디바이스 컨텍스트 할당)를 할당할 수 있습니다.
GPU 컨텍스트 할당을 사용하면 GPU가 실행 중간에 선점된 DMA 버퍼의 컨텍스트 상태를 저장할 수 있습니다. 드라이버는 GPU 컨텍스트와 연결된 할당을 만들어 필요할 때 상태를 저장합니다. 운영 체제는 이 컨텍스트의 명령이 GPU의 하드웨어 실행 큐에 배치되기 전에 컨텍스트 할당이 상주하도록 합니다. 컨텍스트는 다른 컨텍스트의 명령이 하드웨어 실행 큐에 배치될 때까지 상주합니다.
또한 운영 체제는 컨텍스트에 속하는 명령을 완료한 후 하드웨어 컨텍스트 상태가 GPU에 유지되는 것으로 가정하여 지연 GPU 컨텍스트 전환을 지원합니다. 이러한 방식으로 컨텍스트는 다른 컨텍스트의 명령이 하드웨어 큐에 제출될 때만 GPU에서 전환됩니다.
DXGKCB_XXX 함수는 Dxgkrnl에 의해 구현됩니다. 이 콜백 함수를 사용하려면 DXGKARGCB_ALLOCATEPAGESFORMDL 멤버를 설정한 다음 DXGKRNL_INTERFACE 통해 DxgkCbCreateContextAllocation을 호출합니다.
GPU 컨텍스트 할당
GPU 컨텍스트 할당은 비시스템 컨텍스트에 대해서만 수행할 수 있습니다. 디스플레이 미니포트 드라이버는 DxgkDdiCreateContext를 호출하여 이러한 컨텍스트를 만듭니다. 비시스템 컨텍스트를 만들기 위해 드라이버는 DXGK_CREATECONTEXTFLAGS 구조체의 SystemContext 멤버를 0으로 설정하고 pCreateContext 매개 변수에서 이 구조체에 대한 포인터를 전달합니다.
디바이스 컨텍스트 할당은 연결된 디바이스에 속하는 모든 컨텍스트에 대해 상주한다는 점을 제외하고 유사한 모델을 따릅니다. 이 모델을 사용하면 드라이버가 GPU 컨텍스트 할당을 사용하여 GPU CSA(컨텍스트 저장 영역) 데이터를 저장하고 디바이스 컨텍스트 할당을 사용하여 페이지 테이블 데이터를 저장할 수 있습니다.
디바이스 컨텍스트 할당
디바이스 컨텍스트 할당은 비시스템 디바이스에 대해서만 수행할 수 있습니다. 디스플레이 미니포트 드라이버는 DxgkDdiCreateDevice를 호출하여 이러한 디바이스를 만듭니다. 비시스템 디바이스를 만들기 위해 드라이버는 DXGK_CREATEDEVICEFLAGS 구조체의 Flags.SystemDevice 멤버를 0으로 설정하고 pCreateDevice 매개 변수에서 이 구조체에 대한 포인터를 전달합니다.
디스플레이 미니포트 드라이버는 DXGKCB_DESTROYCONTEXTALLOCATION 호출하여 DxgkCbCreateContextAllocation을 통해 할당된 컨텍스트 리소스를 해제합니다.
대상 컨텍스트 할당에 대한 가상 주소
디스플레이 미니포트 드라이버가 DxgkCbCreateContextAllocation을 호출할 때 운영 체제가 대상 컨텍스트 할당(DXGKARG_BUILDPAGINGBUFFER 구조의 InitContextResource-Destination-VirtualAddress>> 멤버)에 대해 유효한(NULL이 아닌) 가상 주소를 설정하도록 하려면 다음을 수행해야 합니다.
- DXGK_ALLOCATIONINFOFLAGS 구조체의 CpuVisible 및 Protected 멤버를 설정합니다.
- DXGKARGCB_CREATECONTEXTALLOCATION 구조체의 SupportedSegmentSet 멤버를 설정하여 조리개 세그먼트에 대한 할당의 페이지입니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8(WDDM 1.2) |
지원되는 최소 서버 | Windows Server 2012 |
대상 플랫폼 | 데스크톱 |
머리글 | d3dkmddi.h(D3dkmddi.h 포함) |
IRQL | PASSIVE_LEVEL |
추가 정보
DXGKARGCB_CREATECONTEXTALLOCATION