버퍼 내의 하위 할당
버퍼에는 애플리케이션이 CPU에서 GPU로 광범위한 임시 데이터를 전송하는 데 필요한 모든 기능이 D3D12에 있습니다. 이 섹션에서는 리소스 및 버퍼의 사용 및 관리에 대한 네 가지 일반적인 시나리오를 설명합니다.
D3D11과 마찬가지로 D3D12의 애플리케이션은 D3D11의 동적/스테이징 리소스에 비해 D3D12에서 버퍼를 할당할 때 메모리 사용을 선언해야 하지만, D3D12에서는 개발자가 메모리 사용을 보다 유연하고 엄격하게 제어할 수 있습니다. 버퍼는 하위 할당을 통해 하위 수준 메모리 관리에 필요한 모든 기능을 제공합니다.
이 섹션에서는
주제 | 묘사 |
---|---|
다양한 유형의 리소스 업로드 |
하나의 버퍼를 사용하여 상수 버퍼 데이터와 꼭짓점 버퍼 데이터를 GPU에 업로드하는 방법과 버퍼 내에 데이터를 올바르게 하위 할당하고 배치하는 방법을 보여 줍니다. 단일 버퍼를 사용하면 메모리 사용 유연성이 향상되고 애플리케이션에서 메모리 사용량을 보다 엄격하게 제어할 수 있습니다. 또한 다양한 유형의 리소스를 업로드하기 위한 D3D11 모델과 D3D12 모델 간의 차이점을 보여 줍니다. |
버퍼 통해 텍스처 데이터 업로드 |
2D 또는 3D 텍스처 데이터 업로드는 애플리케이션이 행 피치와 관련된 데이터 정렬에 더 주의를 기울여야 한다는 점을 제외하고 1D 데이터를 업로드하는 것과 유사합니다. 버퍼는 그래픽 파이프라인의 여러 부분에서 직교 및 동시에 사용할 수 있으며 매우 유연합니다. |
버퍼 통해 데이터를 다시 읽습니다. |
스크린샷 캡처와 같이 GPU에서 데이터를 다시 읽는 데는 Readback 힙을 사용하는 것이 포함됩니다. |
리소스 관리 Fence-Based |
펜스를 통해 GPU 진행률을 추적하여 리소스 데이터 수명 범위를 관리하는 방법을 보여 줍니다. 메모리는 업로드 힙에 대한 링 버퍼 구현과 같이 메모리에서 사용 가능한 공간의 가용성을 신중하게 관리하는 펜스와 함께 효과적으로 다시 사용할 수 있습니다. |