DirectX SDK 9.0c 의 Pure Device 에 대한 보고

반응형
출처 : http://www.tomatowax.com/ZeroboardXE/6856

1. DirectX SDK Direct3D Device 의 생성시 사용될 수 있는 PURE DEVICE Option Flag

D3DCREATE_PUREDEVICE
Specifies that Direct3D does not support Get* calls for anything that can be stored in state blocks. It also tells Direct3D not to provide any emulation services for vertex processing. This means that if the device does not support vertex processing, then the application can use only post-transformed vertices.

위의 D3DCREATE_PUREDEVICE 플래그의 기본 설명입니다. 많은 분들이 Pure Device 의 역할에 대해 궁금해 하실텐데, 검색을 해보시거나 Reference 를 보신 분들이라면 기본적으로 알고 계실 내용입니다.

D3DCREATE_PUREDEVICE 는 Get* 함수 시리즈를 사용할 수 없다.

네, Pure Device 는 말그대로 '순수 디바이스 만' 이라는 의미로써, 주로 Debug 시에 사용될 수 있는 (뭐 사용하기 나름이겠지만서도..) Get* 함수 시리즈들을 비활성화 시키는 플래그 입니다. 이렇게 함으로써 D3D 장치는 Get* 함수 시리즈를 위해 매번 저장해두는 내역이 없으므로, 더 빠른 State 의 변화를 할 수 있습니다. 이것이 Pure Device 가 갖는 특성입니다. Pure Device 는 장치가 지원해야만 사용할 수 있는 플래그 입니다.


2. Pure Device 는 속도가 빠르다 ??

기본 설명에 의하면 Pure Device 는 일반 Device 보다 더욱 빠른 속도를 지원한다고 합니다. 정확히 말해 '빠르거나 같거나' 입니다. 즉, 느려지는 경우에 대해서는 언급하지 않고, '빠를 수' 있다고 합니다. 그런데 제가 얼마전 작업을 하면서 일반 Windows 환경에서 Pure Device 옵션을 준 Device 가 더 느리게 작동하고 있는 것을 발견하였습니다. 이에 대해서는 '뭐 무슨 옵션을 안켜서 그렇다, D3D 가 Debug 버전이라서 그렇다' 등등 이견들이 붙을 수 있겠으나, 일단 제가 항상 작업해오던 상황에서 이런 결과는 조금 저를 놀라게 하였습니다. 제법 많이 느렸기 때문입니다. 이에 대해 Pure Device 의 속도에 대한 언급을 찾아보았습니다.

링크 : http://www.gamedev.net/community/forums/topic.asp?topic_id=512074

내용 : (생략) As with all performance issues, the only way to know whether or not your application will perform better with a pure device is to compare your application's performance with a pure vs. non-pure device. A pure device has the potential to speed up an application by reducing the CPU overhead of the API. But be careful! For some scenarios, a pure device will slow down your application (due to the additional CPU work caused by redundant state changes). If you are not sure which type of device will work best for your application, and you do not filter redundant changes in the application, use a non-pure device. (생략)

중간에 이러한 내용이 나오는데, 간단하게 말하자면 Pure Device 는 상황에 따라 느려질 수 있다- 라고 합니다. 물론 공식적인 MS 의 언급은 검색 결과에서 찾아내지 못하였기 때문에, 이렇게 '누군가'의 언급을 인용합니다.

일단 제가 아주 오래전 작업시에는 Pure Device 가 더 빠른 것을 확인하고 프레임 워크를 구성하였기 때문에 아무런 의심조차 하지 않았습니다. 때문에 최근의 결과가 조금 놀라웠는데, 제 나름대로 추측을 하기에는 이렇습니다. 제가 그 당시 다른 3D 를 이용하는 Application 을 켜두고 있었는데, 해당 Application 의 CPU 점유율이 제법 높았습니다. 이에 대해서 저는 Pure Device 가 외부에 다른 Application 으로 하여금 CPU 가 느려진 상태거나, 혹은 다른 Application 이 3D Graphics Device 를 사용하고 있으면- 속도가 일반 장치보다 느린게 아닐까- 하는 생각이 듭니다.

'Study > Directx 9' 카테고리의 다른 글

d3dx9d.dll 못 찾을 경울.  (0) 2014.12.29
디바이스 소실에 따른 처리  (0) 2011.03.21
비디오 메모리, 시스템 메모리 체크하는법  (0) 2010.05.31
D3D10 resource usage.  (0) 2009.12.16
큐브맵의 밉맵생성  (0) 2009.12.08
TAGS.

Comments