간만에 DX11 vs DX12 관련 잡설

DX12엔진 작업하느라 DX11엔진은 한동안 방치상태였는데 요 근래 Hololens 작업하면서 DX11엔진을 집중적으로 뜯어고쳤다.
그 와중에 약간의 최적화도 이루어졌고 기능도 추가됐다.

DX11엔진의 변경분을 DX12엔진에 반영하면서 HLSL Shader코드를 똑같이 맞췄다.
DX12에서 특별한 기능 추가된게 거의 없기 때문에 일반적으로 쉐이더코드는 그냥 공유한다. MS샘플도 그렇게 되어있다.
나도 최대한 공유하고 싶었다. 하지만 DX12엔진 작업할때 Constant Buffer 메모리 관리가 워낙 빡세서 이걸 좀 코딩하기 쉽게 처리하다보니 DX11엔진과 Constant Buffer 구조가 달라졌다.
그걸 이번에 아예 똑같이 맞췄다. Constant Buffer 구조는 DX12기준으로 맞췄다. 앞으로 유지보수가 한결 편해진다. 아 기뻐.

복셀 렌더링에서 Geometry Shader코드를 약간 최적화시켰다. Geometry Shader가 엄청나게 느린 Windows Phone에선 성능향상이 좀 있는것 같다.

하여간 DX11코드와 DX12코드를 넘나들며 정신 없이 작업했다. 뿌듯한 마음이 들어 간만에 DX11과 DX12성능비교를 해봤다.

데스크탑은 넘사벽으로 DX11이 빠르기 때문에 비교 자체가 의미가 없다.
프레임레이트가 150프레임 정도 이하면 어쩌면 DX12쪽이 빠를수도 있는데 내 게임이나 데모나 400프레임 이상 나오다보니 DX11이 2배 이상 빠르다. 그래서 데스크탑은 제외.

애매하게 느린 GPU를 탑재한 Surface Book으로 테스트했다.

내 게임(Project D Online)의 경우
3000×2000해상도에서 DX12가 27프레임, DX11이 23프레임 나온다. DX12가 약 15%빠르다.

개발중인 게임 데모 Voxel Horizon의 경우 3000×2000해상도에서 DX12가 37프레임, DX11이 26프레임 나온다.DX12가 약 30%빠르다.

뭐 이런 긍정적인 결과도 있지만 이 결과까지 오는데 얼마나 빡셨는지 이미 몇번인가 발표했고 그 동안의 욕설을 보면 충분히 짐작할 수 있을 것이다.

Surface Book에서 빠른 이유는 GPU성능이 좋지 않아서 11이든 12든 GPU점유율이 거의 꽉 차고, 그 상태에서 CPU처리 시간이 짧은 DX12가 이득을 보기 때문이다. GPU성능이 좋으면 좋을수록 DX12가 11보다 빠르기 어렵다.

DX12로 포팅할 경우 성능이 올라간다는 보장은 당연히 없으며, 단순히 포팅만 한다면 프레임 레이트가 1/4로 떨어진다는데 구구콘 하나를 건다. 물론 단순 포팅만 하려해도 2개월 정도는 걸린다.
DX12엔진은 아직도 DX11엔진에 비해 메모리를 많이 쳐먹고 있고 난 이걸 개선할 방법을 알고 있지만 너.무.나 귀찮아서 작업하고 싶지 않다.

뭐…근데 한 30% 성능 차이 나는거 보면 그래도 시간 남고 에너지 남으면 한번 도전해볼만한 가치는 있는것 같다.

재미로 한다면…난 이거 포팅할때 꽤 재밌었거든?


간만에 DX11 vs DX12 관련 잡설”에 대한 답글 1개

댓글 남기기