내 게임-내 코드를 XBOX에서 돌리고 싶다.
- XDK를 받으려고 몇번이나 ID@XBOX신청했지만 전부 까임.
- UWP빌드는 만들어놨으므로 그냥 UWP빌드로 테스트하려고 함.
- 좇같은 UWP on XBOX는 DirectX 11을 사용할 경우 DX Feature Level 10만 지원함.
- 예전에 작업한 내 엔진의 UWP버전에선 Feature Level 10에 맞춰서 어떻게든 돌아가게 했지만 그간 업데이트 된 기능들이 Compute Shader를 쓰니 이젠 Feature Level 10으로는 도저히 돌릴 수 없다.
- 찾아보니 DX12를 사용하면 UWP on XBOX에서도 Feature Level 12까지 쓸수 있다 함.
- 이를 악물고 몇 일간 삽질을 한 끝에 내 엔진의 DX12렌더러를 UWP API에 맞춰서 포팅했다. 데탑에서 잘 돌아가는거 확인.
- XBOX ONE S(Series S아님. 최초의 S버전)에서 돌려보니 타이틀 화면까진 잘 나오는데 3D데이터 초기화하다가 D3D Device가 날라간다.
- 한참 삽질 끝에 내 코드는 이상이 없다고 결론지었다. 그래도 모르니 Debug layer활성화시켜서 돌려보니 command queue에서 실행중에 hang됐거나 crash했을거라고 나온다.
- Debug Layer의 GPU validation을 켜서 재차 확인 GPU validation까지 켜니 이젠 D3D12 Device생성 단계에서 크래시. 에러 내용은 다음과 같다.
D3D12: Removing Device.
D3D12 WARNING: ID3D12Device::RemoveDevice: Device removal has been triggered for the following reason (DXGI_ERROR_DRIVER_INTERNAL_ERROR: There is strong evidence that the driver has performed an undefined operation; but it may be because the application performed an illegal or undefined operation to begin with.). [ EXECUTION WARNING #233: DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT]
아 지랄한다. 똥이나 처먹어라 MS. 똥이나 처먹어라 AMD.
원래 XBOX ONE과 XBOX ONE S는 DX12에 맞춰서 만들어진 하드웨어가 아니다. XBOX ONE X나온 담에 MS에서 XBOX에서도 DX12쓸 수 있다고 홍보를 했다. XBOX ONE X는 몰라도 이전 세대 XBOX ONE 제품들의 드라이버는 DX12를 제대로 작동할 수 있는지 테스트되지 않았을것이다. 아니 문제가 있는걸 이미 알고 있겠지만 고치지 않았을것이다.
XBOX게임 만드는 사람들은 어차피 XDK + DirectX 11로 개발하지. 누가 UWP on XBOX로 개발을 하겠으며, 거기서 Feature Level 10 제한을 뚫겠다고 DirectX 12 + UWP로 개발을 하겠냐고.
결국 MS와 AMD의 농간에 나같은 먼저 나서는 선의의 개발자만 개피를 보지.
아 신발. 진짜 욕나오네.

추가
Hi-Z Occlusion Culling하는 Compute Shader를 호출할때 GPU드라이버가 크래시하는걸 확인했다. 정확히 왜 그리 되는지는 모른다. 일단 hi-Z Occlusion Culling을 막아서 돌아는가게 만들었다. 그리고 돌아는 가는데 화면에 반점이 가득하다. 이거 오래된 intel 내장 GPU에서 DX12돌리면 나타나는 증상이다. 뭐 그냥 한마디로 DX12를 정상 지원하지 못한다고 할 수 있겠다. 어쨌든 돌아는 간다. PC버전이랑 멀티플레이 하는 영상을 찍었다.