일반적인 생성 순서
- Descriptor Heap 생성
- Descriptor들을 담을 수 있는 테이블.
- Resource 생성
- 실제 자원을 생성.
- 보통 HEAP_TYPE_DEFAULT로 만든다.
- 이경우 CPU에서는 접근할 수 없고 GPU에서만 접근할 수 있는 모드인데 속도가 가장 빠르다.
- Descriptor 생성
- 위에서 만든 Resource를 가리키고 관리하는 Descriptor 생성.
- ex)
- CreateRenderTargetView
- CreateDepthStencilView
- 생성할 때 어느 Descriptor Heap에서 관리될지도 지정한다.
가상 메모리
- 논리적으로 메모리들이 존재하는것처럼 관리하는 기법.
- 실제 물리 메모리가 부족하더라도 하드 디스크 등을 사용해서 관리한다.
Direct3D에서 제공하는 리소스는 크게 아래 3가지 종류가 있다.
커밋 리소스(Committed Resource)
- 가상 메모리 공간과 물리적 메모리 공간을 모두 생성.
- 힙을 할당할 때 Committed Resource의 물리적 메모리를 할당.
- 생성
- Device의 CreateCommittedResource() 함수를 통해서 생성 가능.
- 가상 메모리, 물리적 메모리 둘 다 생성하는 함수이다.
- 리소스를 많이 생성시 그래픽카드 메모리가 부족할 수 있다.
- 반환되는 주소는 가상 메모리 주소이다.
위치 리소스(Placed Resource)
- 리소스 생성시 물리적 메모리가 만들어지지 않는다.
- 그러나 할당할 HEAP 메모리 영역은 제공해 줘야한다.
- 이때문에 두 개의 리소스가 겹쳐서 매핑되는 경우도 발생할 수 있다.
예약 리소스(Reserved Resource)
- 자체적인 GPU 가상 주소 공간을 가진다.
- 이후 가상 페이지를 HEAP 메모리 영역으로 매핑할 수 있다.
- 지원되는 하드웨어를 확인해야 한다.