최근 기술방송 -D3D12게임프로젝트 로딩성능 개선 ( https://www.youtube.com/live/R_sMY_jjZnE?si=qGerBiAmCkMehLbp )- 에서 언급했다시피 CreateCommittedResource()함수가 엄청 느리기 때문에 할당하는 버퍼 수가 많다면 성능에 상당한 영향을 준다.
이 문제를 해결하기 위해 D3D12Resource를 Heap에 맵핑한 D3DResourceBufferHeap를 만들었고 주요 매시 데이터는 D3DResourceBufferHeap에서 할당하도록 했다.
다만 RayTracing을 위한 BLAS메모리는 아직 처리하지 못했다.
DXR렌더러에서 BLAS생성하느라 D3D12Resource를 엄청 많이 할당하는데 이게 성능에 적지 않게 영향을 주고 있다고 예상했다.
오늘 BLAS메모리도 D3DResourceBufferHeap을 사용하도록 코드를 수정했다.
<코드 수정>
이전 방식: BLAS로 사용할 D3D12Resource를 CreateCommittedResource()함수로 개별 할당
수정한 방식 : D3D12Resource를 Heap에 맵핑한 D3DResourceBufferHeap으로부터 할당
<로딩 속도>
맵 로딩 후 첫 프레임 렌더링 부터 복셀 데이터 -> RayTracing을 위한 BLAS/TLAS빌드 완료까지 걸리는 시간
V111 : 5670 ms -> 4335 ms – 24% up
F111 : 4356 ms -> 3222 ms – 26% up
F112 : 7225 ms -> 5614 ms – 23% up
F113 : 3899 ms -> 2904 ms – 26% up
F114 : 6812 ms -> 5303 ms – 23% up
F116 : 7141 ms -> 5486 ms – 24% up
전체적으로 24% 정도의 성능향상이 있다.
<GPU 메모리 사용량(V101맵 기준 )>
[기존방식]
BLAS 메모리 – D3D12Resource : 2398개 , 152 MiB
프로세스 GPU 메모리 – 2.12 GiB
[수정한 방식]
BLAS 메모리 – D3D12Resource : 6개 , 24 MiB
프로세스 GPU메모리 – 1.19GiB
[결론]
확실한 성능향상이 있다!
