XDK없이 UWP+DX12로 XBOX ONE 게임 개발(욕설주의)

내 게임-내 코드를 XBOX에서 돌리고 싶다.

  1. XDK를 받으려고 몇번이나 ID@XBOX신청했지만 전부 까임.
  2. UWP빌드는 만들어놨으므로 그냥 UWP빌드로 테스트하려고 함.
  3. 좇같은 UWP on XBOX는 DirectX 11을 사용할 경우 DX Feature Level 10만 지원함.
  4. 예전에 작업한 내 엔진의 UWP버전에선 Feature Level 10에 맞춰서 어떻게든 돌아가게 했지만 그간 업데이트 된 기능들이 Compute Shader를 쓰니 이젠 Feature Level 10으로는 도저히 돌릴 수 없다.
  5. 찾아보니 DX12를 사용하면 UWP on XBOX에서도 Feature Level 12까지 쓸수 있다 함.
  6. 이를 악물고 몇 일간 삽질을 한 끝에 내 엔진의 DX12렌더러를 UWP API에 맞춰서 포팅했다. 데탑에서 잘 돌아가는거 확인.
  7. XBOX ONE S(Series S아님. 최초의 S버전)에서 돌려보니 타이틀 화면까진 잘 나오는데 3D데이터 초기화하다가 D3D Device가 날라간다.
  8. 한참 삽질 끝에 내 코드는 이상이 없다고 결론지었다. 그래도 모르니 Debug layer활성화시켜서 돌려보니 command queue에서 실행중에 hang됐거나 crash했을거라고 나온다.
  9. 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버전이랑 멀티플레이 하는 영상을 찍었다.


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

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

Google photo

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

Twitter 사진

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

Facebook 사진

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

%s에 연결하는 중