DirectX12 바인딩의 주요 디자인 결정 중 하나는 다른 관리 작업과 분리하는 것입니다. 이렇게 하면 특정 잠재적인 위험을 관리하기 위해 앱에 몇 가지 요구 사항이 적용됩니다.
D3D12 바인딩 모델의 주요 이점은 앱이 CPU 성능 비용 없이 텍스처 바인딩을 자주 변경할 수 있다는 것입니다. 다른 이점은 셰이더가 매우 많은 수의 리소스에 액세스할 수 있고, 셰이더가 바인딩될 리소스 수를 미리 알 필요가 없으며, 하드웨어 또는 앱 콘텐츠 흐름에 관계없이 통합 리소스 바인딩 모델을 사용할 수 있다는 것입니다.
성능을 향상시키기 위해 바인딩 모델은 시스템에서 앱이 GPU에 사용하도록 요청한 바인딩을 추적할 필요가 없으며 바인딩과 다중 스레드 명령 목록 간에 깨끗한 통합이 있습니다.
다음 섹션에서는 D3D11 이후의 리소스 바인딩 모델에 대한 일부 변경 내용을 나열합니다.
- 바인딩과 분리된 메모리 상주 관리
- 바인딩에서 분리된 개체 수명 관리
- 바인딩으로부터 분리된 드라이버 리소스 상태 추적
- CPU와 GPU의 매핑된 메모리 동기화가 바인딩 에서 분리됨
- 관련 항목
바인딩과 분리된 메모리 거주 관리
애플리케이션은 GPU에서 직접 사용할 수 있어야 하는 표면을 명시적으로 제어할 수 있습니다("상주"라고 함). 반대로, 명시적으로 해당 상태를 상주하지 않도록 하거나 OS가 최소 메모리 공간이 필요한 애플리케이션의 특정 클래스에 대해 선택하도록 하는 것과 같은 리소스에 다른 상태를 적용할 수 있습니다. 여기서 중요한 점은 상주하는 항목에 대한 애플리케이션의 관리가 셰이더에 대한 리소스에 대한 액세스를 제공하는 방법과 완전히 분리된다는 것입니다.
셰이더가 리소스에 액세스할 수 있도록 하는 메커니즘에서 상주 관리를 분리하면 OS가 지역 바인딩 상태를 지속적으로 검사하여 상주할 항목을 알 필요가 없으므로 렌더링에 대한 시스템/하드웨어 비용이 줄어듭니다. 또한, 셰이더는 전체 잠재적 액세스 가능 리소스의 집합이 미리 상주하고 있으면, 참조해야 할 정확한 표면을 알 필요가 없습니다.
바인딩에서 분리된 개체 수명 관리
이전 API와 달리 시스템은 더 이상 파이프라인에 대한 리소스 바인딩을 추적하지 않습니다. 이는 시스템이 뛰어난 GPU 작업에서 여전히 참조되기 때문에 애플리케이션이 릴리스한 활성 리소스를 유지할 수 있도록 하는 데 사용됩니다.
텍스처와 같은 리소스를 해제하기 전에 애플리케이션은 이제 GPU가 참조를 완료했는지 확인해야 합니다. 즉, 애플리케이션이 리소스를 안전하게 해제하려면 먼저 GPU가 리소스를 참조하는 명령 목록 실행을 완료해야 합니다.
드라이버 리소스 상태 추적이 바인딩에서 분리됨
시스템은 더 이상 리소스 바인딩을 검사하여 추가 드라이버 또는 GPU 작업이 필요한 리소스 전환이 발생한 시기를 파악하지 않습니다. 많은 GPU 및 드라이버의 일반적인 예는 표면이 RTV(렌더링 대상 뷰)로 사용되는 것에서 SRV(셰이더 리소스 뷰)로 전환되는 시기를 알아야 한다는 것입니다. 이제 애플리케이션 자체는 시스템에서 중요할 수 있는 리소스 전환이 전용 API를 통해 발생하는 시기를 식별해야 합니다.
바인딩과 분리된 CPU와 GPU의 매핑된 메모리 동기화
CPU 액세스를 위해 매핑되었지만 아직 매핑되지 않은 리소스에 따라 달라지므로 렌더링이 지연되어야 하는지 파악하기 위해 시스템은 더 이상 리소스 바인딩을 검사하지 않습니다. 이제 애플리케이션은 CPU 및 GPU 메모리 액세스를 동기화해야 합니다. 이를 돕기 위해 시스템은 작업이 완료될 때까지 애플리케이션이 CPU 스레드의 절전 모드를 요청하는 메커니즘을 제공합니다. 폴링도 수행할 수 있지만 효율성이 떨어집니다.
관련 항목