D3D12- D3DResource 64KB Align의 폐해

D3D12에서 GPU Dedicated메모리를 쳐묵쳐묵하는 건은 64KB Align 문제가 맞는것으로 결론.
Vertex Buffer 1개 잡고 안에서 잘라쓰니 메모리가 확실히 줄어든다.

10년쯤 전에 나는 다용도로 쓸 수 있는, 그러니까 zero-base의 어드레스를 할당/해제/병합 시켜주는 Heap자료구조 코드를 만들었었다. 그 자료구조에 Vertex Buffer를 맵핑해서 Vertex Buffer 덩어리를 놓고 heap처럼 사용해서 Vertex Buffer Cache란걸 만들어서 사용했다.

지금 64KB Align 낭비를 피하기 위해 Vertex Buffer와 Index Buffer를 heap으로 만들어서 사용할 수 있다.

그런데 그렇게까지 해야되나?
애초에 D3DResource에 대해 64KB Align을 강제한 이유부터가 이해가 안돼. 아마 Copy할때 최적 성능을 얻으려고 그렇게 했을텐데, 아 니미 그럼 옵션으로 줘야지 이렇게 강제하면 내 게임처럼 Overcommit상황이 거의 없고 copy도 거의 없는 상황이면 메모리 낭비 말곤 아무 이득도 없잖아.
그보다 더 근본적인 의문은 이렇게까지했는데도 D3D12 API에 의한 성능 향상이 실로 미비한것으로 판명되는 분위기인데….
이렇게까지 해야되냐는거다.

물론 D3D12프로그래밍을 통해 나도 정말 많이 배웠다.
아마 D3D13은 11의 장점과 12의 장점을 합친게 되겠지. 따라서 12에 대해서 알고 있는 편이 좋을 것이다.

그건 그거고.
좌우간 내가 MS에서 돈 받는것도 아니고 개인 프로젝트를 D3D12로 굳이 게임을 만들 필요가 있는가 하는 회의까지 들고 있다.

하지만 하기로 마음 먹은거니까… 결과를 내야겠지…
.
그래서 Vertex Buffer Heap을 또 만들어서 이거 메모리 낭비를 피해 가? 말어?


답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중