지연된 컨텍스트 소개

이 섹션은 Windows 7 이상 및 Windows Server 2008 R2 이상 버전의 Windows 운영 체제에만 적용됩니다.

지연된 컨텍스트는 애플리케이션에서 명령 목록을 만드는 데 사용됩니다. 사용자 모드 표시 드라이버가 D3D11DDI_THREADING_CAPS 구조의 D3D11DDICAPS_COMMANDLISTS_BUILD_2 플래그를 통해 명령 목록을 지원한다고 나타내는 경우 지연된 컨텍스트를 만들고 조작하는 기능도 지원해야 합니다. 드라이버가 스레딩 기능을 나타내는 방법에 대한 자세한 내용은 스레딩 지원, 명령 목록 및 3차원 파이프라인을 참조하세요. 지연된 컨텍스트는 애플리케이션이 생성된 명령 목록을 실행하여 명령 실행을 명시적으로 요청할 때까지 지연된 컨텍스트 레코드를 실행할 수 없다는 점에서 즉각적인 컨텍스트와 다릅니다. 지연된 컨텍스트를 만들고 사용하기 위해 Direct3D 버전 11은 다음과 같은 새로운 DDI 함수를 제공합니다. 이러한 함수는 디바이스/즉각적인 컨텍스트 조합을 만드는 데 필요한 정보의 하위 집합입니다.

CalcPrivateDeferredContextSizeCreateDeferredContext 함수의 의미 체계는 다른 유사한 DDI 함수와 유사합니다.

Direct3D 런타임은 드라이버의 CreateDeferredContext 함수를 호출할 때마다 새 드라이버 핸들 및 코어 계층 핸들을 전달하여 지연된 각 컨텍스트를 만듭니다. 지연된 각 컨텍스트의 파이프라인 상태는 명확한 상태 작업이 수행된 후 직접 컨텍스트에 있는 파이프라인 상태와 동일해야 합니다. 드라이버는 D3D11DDIARG_CREATEDEFERREDCONTEXT 구조체의 p11ContextFuncs 멤버가 가리키는 D3D11DDI_DEVICEFUNCS 구조체의 멤버를 함수 테이블의 함수 하위 집합으로 채워야 합니다. 런타임은 D3D11DDIARG_CREATEDEFERREDCONTEXT hDrvContext 멤버가 이 함수 테이블로 지정하는 값을 처리하기 D3D10DDI_HDEVICE 각 지연된 컨텍스트를 사용합니다.

드라이버는 지연된 컨텍스트에 대해 pfnCreate, pfnOpenpfnDestroy 로 시작하는 함수를 계속 제공해야 합니다. 이러한 함수는 지연된 컨텍스트의 나머지 부분과 동일한 스레딩 의미 체계를 공유하며 Context-Local DDI 핸들 사용에 설명된 대로 컨텍스트 로컬 DDI 핸들을 열고 닫는 데 사용됩니다. pfnCalcPrivate 또는 pfnCheck로 시작하는 함수는 지연된 컨텍스트에 활용되지 않습니다. 따라서 드라이버는 지연된 컨텍스트를 만들 때 이러한 함수에 대한 D3D11DDI_DEVICEFUNCS 멤버를 NULL로 설정할 수 있습니다. 나머지 디바이스 함수의 대부분은 지연된 컨텍스트 지원에 활용됩니다. 하지만 드라이버는 QueryGetData 함수를 활용하지 않습니다. 그러나 드라이버는 ResourceMap 및 ResourceUnmap 함수를 활용합니다. 드라이버는 직접 컨텍스트 핸들을 사용하여 직접 컨텍스트에서 Direct3D 버전 11 리소스 클램프에 대한 ResourceIsStagingBusy 함수 및 새 DDI 함수만 지원합니다. 지연된 컨텍스트에 활용되지 않는 함수의 전체 목록은 지연된 컨텍스트에 대한 DDI 함수 제외를 참조하세요.

드라이버는 D3D11DDIARG_CREATEDEFERREDCONTEXT p11UMCallbacks 멤버 가 가리키는 메모리 블록에 제공되는 핵심 계층 콜백 함수를 활용합니다. 이러한 핵심 계층 콜백 함수는 지연된 각 컨텍스트에 대해 새로 고침 상태 DDI를 제공합니다. 그러나 가장 중요한 것은 Direct3D 10의 변경 내용에 설명된 pfnPerformAmortizedProcessingCb 콜백 함수를 추가하는 것입니다.

드라이버는 D3D11DDI_CORELAYER_DEVICECALLBACKS 지점의pfnDisableDeferredStagingResourceDestruction 멤버가 유효한 pfnDisableDeferredStagingResourceDestruction 콜백 함수를 예상해서는 안 됩니다. 드라이버는 디바이스/즉각적인 컨텍스트에 대한 CreateDevice(D3D10) 함수 내에서 pfnDisableDeferredStagingResourceDestruction을 호출해야 합니다. 그 후 드라이버는 새 Direct3D 버전 11 DDI 의미 체계를 사용하여 pfnDisableDeferredStagingResourceDestruction을 호출해서는 안 됩니다.

드라이버의 RecycleCreateDeferredContext 함수는 드라이버의 CreateDeferredContext 가 지연된 컨텍스트에 대한 파이프라인 상태를 지우는 방법과 유사하게 지연된 컨텍스트에 대한 파이프라인 상태를 지워야 합니다. 런타임이 드라이버의 AbandonCommandList, CreateCommandList 또는 RecycleCreateCommandList를 호출한 후 런타임은 드라이버의 DestroyDevice(D3D10) 또는 RecycleCreateDeferredContext 함수와 함께 지연된 컨텍스트 핸들을 사용할 수 있습니다. RecycleCreateDeferredContext에 대한 자세한 내용은 작은 명령 목록에 대한 최적화를 참조하세요.