* 3D 그래픽스 처리와 관련된 글이라서 게임 개발자로서 흥미가 생겨서 정리해 보았습니다.

 

Windows 7 Windows Server 2008 R2의 새로운 디스플레이 드라이버 사양. 종래의 Windows Vista/Windows Server 2008 디스플레이 드라이버WDDM 1(WDDM v1)을 개량한 것(Windows XP/Windows Server 2003XPDM으로 불린다. 관련 기사 참조).


WDDM 1.1을 지원하는 드라이버의 예

이것은 NVIDIAGeForce 8600M GS용의 WDDM 1.1드라이버의  . dxdiag커멘드를 실행하면 이와 같이 표시된다.

(1)

WDDM 1.1드라이버가 인스톨 되고 있으면 이와 같이 표시된다.



WDDM 1.1의 특징으로서는 다음과 같은 것이 있다.

  • Direct3D 10/11지원
  • Direct2D 지원
  • 비디오 재생 지원(비디오 오버레이, DXVA-HD, 컨텐츠 암호화용의 AES128 지원)
  • 고정밀 DPI 지원
  • 멀티 GPU(복수의 그래픽스 카드) 지원
  • Linked Display Adapter(여러 개를 링크 시켜 성능을 향상시킨 그래픽스 카드) 지원

 

Windows 7/ Windows Server 2008 R2에서는 Windows Vista/Windows Server 2008 용의 WDDM 드라이버(WDDM v1)도 이용할 수 있지만 WDDM 1.1 대응 드라이버를 이용하는 것으로 Direct2D에 의한 고속 렌더링이나 DWM의 사용 메모리량 감소의 메리트가 있다.

 

 

Direct2D에 의한 렌더링 지원

Direct2D Direct3D 위에 GDI/GDI+ API(2D 렌더링 API. 이하 GDI) 구현한 것이다. Windows 7WDDM 1.1 환경에서는 Direct2D를 사용하는 것으로 고속의 GDI(Graphics Device Interface) 처리를 실현하고 있다.


Direct2D API

Direct2DDirect3D 위에서 GDI/GDI+ 처리를 행하기 위한 새로운 API이다. Windows 7이 호출할 뿐만 아니라 유저가 직접 호출해도 괜찮다. 하위 하드웨어의 사양에 의해 Direct2D의 구현 방법은 몇 종류인가 있다. GPU로 처리하는 것으로써 고속 GDI처리가 가능하게 된다.

(1) DirectX 11 하드웨어의 경우는 하드웨어(GPU) 혹은 디바이스 드라이버 내의 에뮬레이션으로 Direct2D를 지원한다. 하드웨어로 처리하는 것이 가장 고속으로 된다. DXGI(DirectX Graphics Infrastructure) DirectX(WDDM드라이버)를 호출하기 위한 인터페이스.

(2) DirectX 10 하드웨어의 경우는 Windows 7측에서 Direct3D 10의 기능만을 사용히여 Direct2D를 구현한다.

(3) DirectX 9 하드웨어의 경우는 Windows 7측에서 Direct3D 10  Level 9의 기능만을 사용하여 Direct2D 구현한다. Direct3D 10 Level 9Direct9 하드웨어 상에 DirectX 10 API를 구현한 것.



GDI는 일반적인 Windows 어플리케이션으로 자주 사용되는 직선이나 곡선, 도형, 문자 렌더링, 스크롤(BitBlt처리) 등을 실시하는 API이다. 3D보급하기 이전의 그래픽스 카드에서는 GDI 처리를 하드웨어 지원을 하여 고속의 윈도우 시스템을 실현하고 있었다.

 

하지만 Windows Vista Aero Glass 환경에서는 그래픽스 카드가 가진 GPU의 기능을 구사해 데스크탑을 3D로 렌더링 하게 되었기 때문에 하드웨어가 가진 GDI 처리 기능은 사용되지 않게 되어 있었다(앞의 칼럼 참조). 3D 2D의 가속기는 메카니즘이 완전히 다르기 때문에 공존할 수 없기 때문이다. 대신 Windows Vista Aero Glass 환경에서는 완전하게 소프트웨어(CPU)에 의해서 GDI 렌더링 처리를 하고 있다.


GDI Direct3D 위에 구현하여 다시 하드웨어(GPU) 위에서 처리하는 것을 가능하게 한 것이 WDDM 1.1이다. Windows 7에서는 Direct2D를 사용하는 것으로 2D 렌더링 처리도 그래픽스 드라이버+GPU 처리하여 고속 렌더링을 실현하고 있다.

 

DWM의 사용 메모리량 감소

DWM Aero Glass의 데스크탑 화면을 실현하기 위한 윈도우 매니저이다. 각 어플리케이션의 표시 윈도우나 데스크탑의 파트 등을 3D 공간상에서 합성하여 2D의 데스크탑을 실현하고 있다. 테두리나 배경의 틈으로 아래 윈도우가 보이는 것은 3D적으로 보면 뒤에 배치되어 있기 때문이다. 또 플립 3D기능(Windows]-[Tab]키에 의한 다이나믹한 바꾸) 3D 공간 안에 윈도우를 비스듬하게 거듭해 배치하는 것으로써  페이지를 넘기는 어플리케이션의 변환을 실현하고 있다.

Windows Vista에 있어서의 이 구조의 실현 방법은 다음과 같다.
1) 우선 어플리케이션의 윈도우 사이즈에 상당하는 버퍼를 하나 준비하여 모든 렌더링을 이 버퍼에서 실시한다(GDI 렌더링 명령을 호출하면 CPU 처리하 이 버퍼에 쓴다). 
이 버퍼는 실제로는 각 어플리케이션의 공유 메모리 address 공간 내에 배치되어 있다. 다2) 다음에 이 버퍼를(공유 메모리로서 액세스 하여) DWM 모아 그래픽스 카드 상에 비트 맵 데이터로서 전송 한다.
3)
마지막에 그래픽스 카드가 그러한 비트 맵을 3D 모델에 텍스쳐 매핑 한다. 이것이 최종적인 데스크탑 화면이 된다.


한 번 중간 버퍼를 사용
하여 렌더링 하는 것은 CPU 직접 그래픽스 카드 상의 버퍼에 쓰는 것은 코스트가 비싸기 때문이다(메인 메모리쓰기와 달라서 시간이 걸려 패널티가 크다).


Windows 7
WDDM 1.1 환경에서는 공유 메모리상의 버퍼를 사용하지 않고 어플리케이션의 GDI 렌더링 명령을 Direct2D API로 실행하고 있다. 이것에 의해 중간 버퍼를 사용하지 않고 그래픽스 카드 상의 버퍼에 직접 쓰는 것이 가능하게 되었다. 또 메모리를 절약하면서도 GPU에 의한 고속 GDI 처리를 실현하고 있다.


Windows Vista(
혹은Windows 7WDDM 1) 환경에서는 반드시 중간 윈도우 사이즈에 상당하는 버퍼가 필요하고 있었지만 이것에 필요한 메모리 사이즈는 결코 적은 것이 아니었. 예를 들면1024×1024 정도의 윈도우 사이즈를 가지는 어플리케이션의 경우 필요한 버퍼 사이즈는 약 4Mbytes가 된다(1픽셀 당 RGB+알파 채널의 4bytes). 이러한 어플리케이션이 50개 있었다고 하면 이만큼으로 4×50=200Mbytes된다. Windows 7WDDM 1.1에서는 200Mbytes 불필요하게 되어 그 만큼 다른 어플리케이션에서 이용 가능한 메모리가 증가하게 된다. 실제로는 Direct2D의 하드웨어 가속화에 의한 혜택도 있어 Windows 7Windows Vista 보다 경쾌하게 이용할 수 있게 되어 있다.

 

출처 : http://www.atmarkit.co.jp/fwin2k/words/009wddm11/wddm11.html

 




저작자 표시
신고
by 흥배 2009.09.02 00:05
| 1 |