th2빌드는 현재 Windows 10의 공식 빌드이다.
Redstone은 7월 릴리즈가 예정된 Windows 10의 베타 빌드이다.
개발중인 D3D12 엔진을 Redsone과 th2에서 돌려보면 조금 다르게 돌아간다.
렌더링이 다른게 아니고 에러 발생 여부가 다르다.
대부분 ResourceBarrier관련인데 th2와 Redstone 모두 렌더링은 정상적으로 되고 있던 것들이다. th2빌드에선 에러가 나지 않았는데 Redstone에선 에러가 발생하고 DX Control Panel에서 에러 발생시 브레이크를 걸도록 하면 확실히 브레이크가 걸렸다.
지난 몇일단 열심히 뒤진 결과 Redstone에서 출력하는 에러가 잘못 출력하는 에러가 아니라는 결론을 얻었다. 그리고 Redstone에서 발생하는 DirectX 12 에러는 싹 다 잡았다. 딱 하나 옵티머스 장비에서 Present()할때 발생하는 에러만 빼고.
이건 내쪽 문제가 아니다. 에러 자체만 놓고 볼때는 DX12의 DebugLayer가 에러라고 보고하는 것도 맞다. 런타임이나 드라이버에 뭔가 버그가 있다. 그 결과로 에러를 날려준 것이다.
옵티머스 장비에서 Present()하고나면 RTV버퍼의 ResourceState가 바뀌어있고 그래서 다음번 OMSetRenderTarget()할때 에러가 발생한다.
옵티머스 장비에서 Present()할때 에러가 발생하는건 사실 th2에서도 마찬가지다. 다만 th2에선 피해가는 방법이 있었고 프레임레이트가 낮으면 티가 거의 나지 않았다.
그러던것이 Redstone에선 100% 발생한다. 피해갈 방법도 없다.
1. th2의 DX12보다 Redstone의 DX12의 D3DDebugLayer가 훨씬 엄격하게 작동한다. 더 정확한 에러 리포팅을 해준다.
2. Optimus장비에서 Present()할때 생기는 에러는 th2, Redstone모두 발생한다. 다만 Redstone에서는 항상 발생한다. 피해갈 방법이 없다. 이 상태 그대로 릴리즈 된다면 옵티머스 기술이 적용된 수많은 노트북들에선 DX12 게임들은 돌릴 수 없다.
7월까지 데스크탑은 Redstone빌드를 유지할 생각이다. 정확한 에러 리포팅이 필요하다. th2에서의 에러 리포팅은 너무 부실하다.
ㅅ