Quick Comparison
작은 renderer는 immediate context 하나가 기본입니다. Deferred context는 draw 준비가 CPU 병목이고 command list 기록을 독립 작업으로 나눌 수 있을 때 검토합니다.
| 기준 | Immediate Context | Deferred Context |
|---|---|---|
| 개수 | Device당 하나 | 필요에 따라 생성 |
| 역할 | 실제 명령 제출·command list 실행 | 명령을 command list로 기록 |
| GPU readback | 가능 | 제한됨 |
| 기본 선택 | 단일 render thread | 측정된 command recording 병렬화 |
기록과 실행
Worker는 각자 deferred context에 state와 draw를 기록하고 FinishCommandList로 command list를 만듭니다. Render thread가 immediate context의 ExecuteCommandList로 실행합니다.
Command list는 녹화 당시 필요한 state를 포함해야 합니다. 이전 deferred context state가 알아서 이어진다고 추측하지 않고 worker task마다 명시적으로 설정합니다.
Threading 경계
Device의 resource creation은 API 계약과 driver 지원을 확인해 여러 thread에서 사용할 수 있지만 immediate context는 기본적으로 동시에 호출하지 않습니다. ID3D11Multithread 보호는 serialization 비용이 있으므로 render ownership을 한 thread로 모으는 구조가 더 명확할 수 있습니다.
자주 틀리는 점
- Deferred context가 GPU를 여러 개로 나누어 병렬 실행하는 기능이라고 설명하지 않습니다.
- Command list 생성·실행 비용을 제외하고 무조건 빠르다고 보지 않습니다.
- Resource update와 query처럼 deferred context 제약이 있는 API를 확인합니다.
- Record 순서와 final Execute 순서가 frame dependency를 만족하는지 검증합니다.
참고 링크
2 sources