데브허브 | DEVHUB | D3D12 전환, Dx12 초기화 삼각형 그리기D3D12 전환, Dx12 초기화 삼각형 그리기
- DX11에서 DX12로의 전환은 그래픽스/게임 엔진 프로그래머의 경쟁력 강화를 위한 필수적인 단계로, 메쉬 쉐이더 및 레이 트레이싱과 같은 고급 파이프라인 활용을 목표로 합니다. 🚀
- DX12는 DX11보다 개발자에게 GPU 작업에 대한 더 많은 직접적인 제어와 명시적인 관리를 요구합니다. 🛠️
- DX12 개발을 위한 헤더 파일은 NuGet 패키지(D3D12 Agility SDK)를 통해 설치됩니다. 📦
- 그래픽 디바이스 생성 및 팩토리를 통한 하드웨어 정보(GPU, 메모리) 조회 및 어댑터 선택 과정은 DX11과 유사합니다. 🖥️
- DX12의 핵심은 GPU 명령을 담는 '커맨드 큐'와 개별 명령을 기록하는 '커맨드 리스트'입니다. 커맨드 큐는 GPU가 처리할 명령 대기열 역할을 합니다. 📝
- 스왑 체인은 더블/트리플 버퍼링을 구현하여 화면 깜빡임이나 찢어짐 현상을 방지하며, 버퍼 상태를 명시적으로 관리합니다. 🔄
- 디스크립터 힙은 GPU 메모리에 할당된 리소스(상수 버퍼, 쉐이더 리소스 뷰 등)의 '설명서'를 저장하는 공간으로, GPU가 리소스에 접근하는 방식을 정의합니다. 🗺️
- 루트 시그니처는 쉐이더가 파이프라인에서 접근할 수 있는 자원(상수 버퍼, 텍스처 등)의 종류, 개수, 위치를 정의하는 약속입니다. 🤝
- 파이프라인 스테이트 오브젝트(PSO)는 쉐이더, 블렌드, 래스터라이저, 깊이/스텐실 상태 등 전체 그래픽스 파이프라인 상태를 캡슐화하며, 병렬 처리를 위해 불변 객체로 사용됩니다. ⚙️
- 커맨드 얼로케이터는 커맨드 리스트의 메모리를 관리하는 오브젝트 풀 역할을 하며, 멀티프레임 구조에서는 프레임별로 별도 관리하는 것이 유리합니다. 🧠
- IMAGUI를 통합하려면 게임에서 사용하는 SRV 힙과 충돌을 방지하고 독립적인 관리를 위해 별도의 쉐이더 리소스 뷰(SRV) 디스크립터 힙을 생성해야 합니다. 🎨
- 버텍스 버퍼 생성 및 쉐이더(버텍스, 픽셀) 컴파일은 DX11과 개념적으로 유사하나, 커맨드 리스트와 PSO를 통해 바인딩 및 사용이 관리됩니다. 🔺
- 펜스 오브젝트는 CPU와 GPU 간의 동기화를 위한 핵심 메커니즘으로, GPU가 특정 명령 처리를 완료할 때까지 CPU를 대기시켜 병렬 실행 중 발생할 수 있는 문제를 방지합니다. 🚧
- 리소스 배리어는 GPU 자원의 상태(예: PRESENT에서 RENDER_TARGET으로)를 명시적으로 전환하여 올바른 사용을 보장하고 데이터 충돌을 방지합니다. 🚦