디바이스 유형 및 꼭짓점 처리 요구 사항(Direct3D 9)
변환 및 조명을 포함한 꼭짓점 처리 작업의 성능은 메모리에 꼭짓점 버퍼가 있는 위치와 사용 중인 렌더링 디바이스 유형에 따라 크게 달라집니다. 애플리케이션은 만들 때 꼭짓점 버퍼에 대한 메모리 할당을 제어합니다. D3DPOOL_SYSTEMMEM 메모리 플래그가 설정되면 꼭짓점 버퍼가 시스템 메모리에 만들어집니다. D3DPOOL_DEFAULT 메모리 플래그를 사용하는 경우 디바이스 드라이버는 꼭짓점 버퍼에 대한 메모리가 가장 잘 할당되는 위치를 결정하며, 이를 드라이버 최적 메모리라고도 합니다. 드라이버 최적 메모리는 로컬 비디오 메모리, 비로컬 비디오 메모리 또는 시스템 메모리일 수 있습니다.
IDirect3DDevice9::CreateVertexBuffer를 사용하여 D3DUSAGE_SOFTWAREPROCESSING 상수를 설정하면 꼭짓점 버퍼 데이터에 대한 소프트웨어 꼭짓점 처리가 가능합니다. 이 플래그는 혼합 모드에서 소프트웨어 꼭짓점 처리에 필요합니다. 플래그는 하드웨어 꼭짓점 처리 모드에 사용할 수 없습니다. 소프트웨어 꼭짓점 처리에 사용되는 꼭짓점 버퍼는 다음과 같습니다.
- IDirect3DDevice9::P rocessVertices에 대한 모든 입력 스트림입니다.
- IDirect3DDevice9::D rawPrimitive 및 IDirect3DDevice9::D rawIndexedPrimitive에 대한 모든 입력 스트림입니다.
꼭짓점 버퍼의 메모리 위치(시스템 또는 드라이버 최적)를 결정하는 데 사용하는 추론은 텍스처의 경우와 동일합니다. 하드웨어에서 변환 및 조명을 포함한 꼭짓점 처리는 꼭짓점 버퍼가 드라이버 최적 메모리에 할당되는 경우 가장 잘 작동하지만 소프트웨어 꼭짓점 처리는 시스템 메모리에 할당된 꼭짓점 버퍼에서 가장 잘 작동합니다. 텍스처의 경우 하드웨어 래스터화는 드라이버 최적 메모리에 텍스처가 할당되는 경우 가장 잘 작동하지만 소프트웨어 래스터화는 시스템 메모리 텍스처에서 가장 잘 작동합니다.
Microsoft Direct3D 9는 IDirect3DDevice9::P rocessVertices 메서드를 사용하여 기본 형식을 렌더링하지 않고도 꼭짓점의 독립 실행형 처리를 지원합니다. 이 독립 실행형 꼭짓점 처리는 항상 호스트 프로세서의 소프트웨어에서 수행됩니다. 이 때문에 IDirect3DDevice9::SetStreamSource 로 설정된 원본으로 사용되는 꼭짓점 버퍼는 D3DUSAGE_SOFTWAREPROCESSING 플래그를 사용하여 만들어야 합니다. IDirect3DDevice9::P rocessVertices에서 제공하는 기능은 소프트웨어 꼭짓점 처리를 사용하는 동안 IDirect3DDevice9::D rawPrimitive 및 IDirect3DDevice9::D rawIndexedPrimitive 메서드의 기능과 동일합니다.
애플리케이션이 자체 꼭짓점 처리를 수행하고 변환, 조명 및 잘린 꼭짓점을 렌더링 메서드에 전달하는 경우 애플리케이션은 드라이버 최적 메모리에 할당된 꼭짓점 버퍼에 꼭짓점을 직접 쓸 수 있습니다. 이 기술은 나중에 중복 사본 작업이 발생하는 것을 방지합니다. 드라이버 최적 메모리에서 호스트가 수행한 읽기 작업은 매우 느릴 수 있으므로 애플리케이션이 꼭짓점 버퍼에서 데이터를 다시 읽는 경우에는 이 기술이 제대로 작동하지 않습니다. 따라서 처리 중에 애플리케이션을 읽거나 버퍼에 데이터를 불규칙하게 쓰는 경우 시스템 메모리 꼭짓점 버퍼를 선택하는 것이 좋습니다.
Direct3D 꼭짓점 처리 기능을 사용하는 경우(변환되지 않은 꼭짓점을 꼭짓점 버퍼 렌더링 메서드에 전달) 디바이스 유형 및 디바이스 만들기 플래그에 따라 하드웨어 또는 소프트웨어에서 처리가 발생할 수 있습니다. 거의 모든 경우에 최상의 성능을 위해 꼭짓점 버퍼를 풀 D3DPOOL_DEFAULT 할당하는 것이 좋습니다. 디바이스가 하드웨어 꼭짓점 처리를 사용하는 경우 플래그 D3DUSAGE_DYNAMIC 및 D3DUSAGE_WRITEONLY 기반으로 수행할 수 있는 여러 가지 추가 최적화가 있습니다. 이러한 플래그 사용에 대한 자세한 내용은 IDirect3DDevice9::CreateVertexBuffer를 참조하세요.
관련 항목