Game Developers Conference 2016(GDC 2016)에서 마이크로소프트는 DirectX 12 Advancements(DirectX의 발전)란 제목으로 차세대 다이렉트 X에 대해 언급했습니다.

 

 

다이렉트 X 12가 안고 있는 과제와 그 대책

 

1.jpg

 

다이렉트 3D 개발을 맡은 Max McMullen(Direct3D Development Lead, Microsoft)가 먼저 등장했습니다. 다이렉트 X 12는 윈도우 10의 출시와 동시에 제공하기 시작했으나, 본격적인 활용은 최근에서야 이루어졌으며, 개발 현장에서의 피드백도 이제야 들어오는 수준이라네요.

 

2.jpg

 

이를 바탕으로 즉시 개선해야 할 것이 윈도우 10부터 사용하는 표준 윈도우 애플리케이션인 Universal Windows Platform(UWP)에서 프리싱크와 G-SYNC를 쓸 수 없다는 것인데, 이 문제는 API를 새로 추가해서 대응할 것이라고 합니다.

 

3.jpg

 

두번째는 Pipeline State Object(PSO)의 증가 문제입니다. 다이렉트 X 12에선 그래픽 파이프라인의 흐름을 정의해 PSO로 만듬으로서 API 호출의 오버헤드를 줄일 수 있으나, 이렇게 정의된 파이프라인 구성은 조금만 바뀌어도 다른 PSO로 정의해야 합니다.

 

그래서 그래픽 표현 규모가 큰 게임이나 스테이지 변화가 많은 게임에선 PSO의 수가 늘어나 문제가 되는데, 이는 여러 PSO를 한 덩어리로 관리하는 PSO 라이브러리 정의로 해결할 것이라고 합니다.

 

4.jpg

 

또 다이렉트 X 12 기반 GPU 디버깅 기술 환경도 개선할 것이라고 합니다.

 

5.jpg

 

이런 내용들은 3월 20일에 열리는 빌드 2016에서 보다 자세한 내용이 공개될 예정.

 

 

쉐이더 모델 6이 온다

 

6.jpg

 

그럼 앞으로 나올 쉐이더 모델 6.0에 대해서 볼까요. 쉐이더 모델은 프로그래머블 쉐이더의 버전으로 다음과 같이 구분할 수 있습니다.

 

DirectX 8.x : Shader Model 1.x
DirectX 9.x : Shader Model 2.x ~ 3.x
DirectX 10.x : Shader Model 4.x
Directx 11.x : Shader Model 5.x

 

다이렉트 X 12는 쉐이더 모델 5 그대로입니다. 다이렉트 X 12는 기본적으로 다이렉트 X 11 세대의 GPU를 더 낮은 오버헤드로 활용하자는 컨셉으로 만든 것이거든요. 즉 쉐이더 모델에 대한 개발 검토는 꽤 늦게 시작했다는 것.

 

7.jpg

 

이 부분에 대해 강연을 담당한 사람은 Chas. Boyd(DirectX PM, Microsoft)입니다.

 

8.jpg

 

쉐이더 모델 6은 쉐이더 명령의 크기를 바꿀 수 있게 됩니다. 화소를 예로 들어보면 쉐이더 모델 5 이전에선 1픽셀 단위로 명령을 실행했으나, 쉐이더 모델 6에선 2x2 픽셀 같은 식으로 처리할 수 있게 됩니다. 이는 타일 기반 렌더링은 물론이고 GPU에서 네이티브 SIMD에 맞춰 최적화가 된다는 것을 의미해 GPGPU에서도 효과를 볼 수 있습니다.

 

9.jpg

 

쉐이더 모델 6.0은 앞으로 등장할 GPU에서 구현할 것으로 기대되는 여러 기능도 지원합니다. 이는 쉐이더 모델의 역사를 보면 짐작도 가능하지요. 구체적인 예를 들어보면 VR을 위한 뷰포트 프로그래머블 블렌딩, 절차 기반 텍스처 등이 포함됩니다.

 

10.jpg

 

쉐이더 모델 6은 언어에서도 큰 확장이 이루어집니다. C++ 같은 열거형(Enum)이나 공용체(Uniom), 가상 함수(Virtual), 비트필드 구조체 등을 예시로 들었는데, 이와는 별도로 GPU 프로그래밍 모델의 장점인 데이터 벙렬 프로그래밍은을 계속 살리겠다고도 했습니다. CPU 프로그래밍을 구현하겠다는 건 아니라네요. 그래서 문자 오브젝트와 스택 조작 재귀 제어, C00/Stdlib 호환 등을 지원하진 않습니다.

 

11.jpg

 

쉐이더 모델 6에서 쓰일 것으로 보이는 요소들(왼쪽)과 쓰지 않는 요소(오른쪽).

 

12.jpg

 

쉐이더 모델 6.0에서 도입할 후보들.

 

13.jpg

 

그렇지 않은 것들.

 

14.jpg

 

또 쉐이더 모델 6 High Level Shader Languate에선 컨파일러 기반으로 LLVM/Clang을 쓸 것이라고 합니다.

 

15.jpg

 

LLVM은 오픈 소스 프로젝트라 GPU 프로그래밍 언어와 최적화 기법을 독자적으로 설계할 수 있습니다. 올해 말까지는 프로덕션 데모를 선보일 것이라고 하네요.

 

16.jpg

 

쉐이더 프로그램의 컴파일과 최적화 흐림을 비교한 것. Clang HLSL 컴파일러 부분을 대체해 다른 언어로 쉐이더 프로그램을 만들 수도 있습니다.

 

17.jpg

 

쉐이더 모델 6의 로드맵과 현재의 개발 상황. 아직은 쉐이더 모델 5.x를 LLVM에서 구현하기 위해 Clang HLSL을 개발하고 있는데 이건 별도의 프로덕션 레벨이 매겨집니다.

 

18.jpg

 

새로운 쉐이더 스테이지가 추가된 것은 아니지만, 다이렉트 X 12의 프로그래밍 모델이 더욱 네이티브에 가까워지면서 언어 관련 스펙도 더욱 현대화될 것으로 기대됩니다. 

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.