WARP(Windows Advanced Rasterization Platform) 가이드

이 문서에서는 WARP(Windows Advanced Rasterization Platform) 및 WARP의 다음과 같은 측면을 설명합니다.

WARP란?

WARP는 고속, 완전 준수 소프트웨어 래스터라이저입니다. Direct3D 11 런타임에서 도입한 DirectX 그래픽 기술의 구성 요소입니다. Direct3D 11 런타임은 [KB971644] 업데이트와 함께 Windows 7, Windows Server 2008 R2 및 Windows Vista에 설치됩니다. Windows 8, Windows 10, Windows Server 2012 이상 및 Windows RT에는 업데이트된 버전의 WARP가 있는 Direct3D 11.1 런타임이 포함됩니다. Windows 10 Fall Creators Update(1709)에는 Direct3D 11 및 Direct3D 12 런타임을 모두 지원하는 WARP 버전이 포함되어 있습니다.

WARP 혜택

WARP는 다음과 같은 이점을 제공합니다.

사용자 지정 소프트웨어 래스터라이저 필요 제거

WARP는 사용자 지정 소프트웨어 래스터라이저를 빌드할 필요를 제거하고 하드웨어용 애플리케이션을 조정하는 대신 애플리케이션을 조정하여 개발을 간소화합니다. 범용 소프트웨어 래스터라이저를 하나만 제공하면 더 이상 다양한 기능과 기능을 갖춘 하드웨어 또는 소프트웨어에서 실행하는 여러 가지 방법으로 이미지 렌더링 알고리즘을 작성할 필요가 없습니다. 여러 가지 방법으로 알고리즘을 구현하여 더 나은 성능 또는 크기 조정을 달성할 수 있습니다. 그러나 이러한 알고리즘을 구현하는 데 사용되는 API 또는 렌더링 아키텍처를 변경할 필요는 없습니다. 대신, 동일하게 보이고 하드웨어 또는 소프트웨어에서 잘 작동하는 훌륭한 Direct3D 10 이상 애플리케이션을 만드는 데 집중할 수 있습니다.

그래픽 하드웨어에서 최대 성능 사용

애플리케이션이 하드웨어에서 효율적으로 실행되도록 조정되면 WARP에서도 효율적으로 실행됩니다. 대화도 마찬가지입니다. WARP에서 잘 실행되도록 조정된 모든 애플리케이션은 하드웨어에서 잘 수행됩니다. Direct3D 10 이상을 비효율적으로 사용하는 애플리케이션은 다른 하드웨어에서 효율적으로 확장되지 않을 수 있습니다. WARP에는 하드웨어와 비슷한 성능 프로필이 있으므로 대규모 일괄 처리에 대한 애플리케이션 튜닝, 상태 변경 최소화, 동기화 지점 또는 잠금 제거는 하드웨어와 WARP 모두에 도움이 됩니다.

Direct3D 하드웨어를 사용할 수 없는 경우 렌더링 사용

WARP를 사용하면 다음을 포함하여 하드웨어 구현이 바람직하지 않거나 사용할 수 없는 다양한 상황에서 빠른 렌더링이 가능합니다.

  • 사용자에게 Direct3D 지원 하드웨어가 없는 경우
  • 애플리케이션이 서비스 또는 서버 환경에서 실행되는 경우
  • 애플리케이션이 Direct3D 하드웨어 리소스를 다른 용도로 예약하려는 경우
  • 비디오 카드 설치되지 않은 경우
  • 비디오 드라이버를 사용할 수 없거나 제대로 작동하지 않는 경우
  • 비디오 카드 메모리가 부족하거나, 중단되거나, 너무 많은 시스템 리소스를 사용하여 초기화할 수 없습니다.

소프트웨어 렌더링에 대한 기존 리소스 활용

Direct3D 10 이상 셰이더 기반 이미지 렌더링을 활용하는 데 도움이 되는 거대한 커뮤니티, 많은 책, 웹 사이트, SDK, 샘플, 백서, 우편물 목록 및 기타 리소스가 있습니다. WARP를 소프트웨어 대체로 사용하면 하드웨어에 대한 기존 지식을 사용하여 하드웨어 또는 소프트웨어로 실행될 때 애플리케이션의 성능을 향상시킬 수 있습니다. 또한 그래픽 카드 공급업체 및 DirectX SDK의 많은 뛰어난 도구는 그래픽 애플리케이션의 성능 문제를 디자인, 빌드, 개발, 디버그 및 분석하는 데 도움이 될 수 있습니다. 이러한 도구와 지식은 이제 WARP를 사용할 때 하드웨어와 소프트웨어를 모두 대상으로 하는 애플리케이션 개발에 도움이 될 수 있습니다.

그래픽 하드웨어가 필요하지 않은 시나리오 사용

다양한 알고리즘 및 애플리케이션(이미지 처리 알고리즘, 인쇄, 원격, 가상 PC 및 기타 에뮬레이터, 고품질 글꼴 렌더링, 차트, 그래프 등)은 일반적으로 하드웨어에 종속되지 않기 때문에 CPU에 최적화되었습니다. WARP를 사용하면 이러한 알고리즘 및 애플리케이션을 실행하고 소프트웨어에서 완전히 실행할 수 있는 단일 아키텍처를 사용할 수 있습니다. 그러나 하드웨어 가속을 사용할 수 있는 경우 이를 활용할 수 있습니다.

DirectX 그래픽 플랫폼 완료

WARP를 사용하면 Direct3D 10 이상 그래픽 하드웨어가 없는 컴퓨터에서도 모든 Direct3D 10 이상 그래픽 기능에 액세스할 수 있습니다. Direct3D 10 제거된 기능 비트(caps); 즉, Direct3D 10 이상에서는 이 가용성을 보장하므로 그래픽 하드웨어에서 그래픽 기능을 사용할 수 있는지 여부를 더 이상 확인할 필요가 없습니다. 이제 다양한 비디오 카드 애플리케이션이 동작하고 모든 위치에서 동일하게 표시될 것이라는 것을 알고 있는 모든 기능을 사용할 수 있습니다. 저가형 비디오 카드 고가의 그래픽 기능을 사용하지 않도록 설정하거나 더 작은 대상으로 렌더링하여 이러한 애플리케이션의 성능을 확장할 수 있습니다.

WARP 기능 및 요구 사항

WARP는 모든 Direct3D 10 및 10.1 기능을 완벽하게 지원합니다. 예를 들어 WARP는 다음과 같은 가장 중요한 기능을 지원합니다.

  • Direct3D 10 및 10.1 사양의 모든 정밀도 요구 사항
  • 기능 수준 9_1, 9_2, 9_3, 10_0 및 10_1과 함께 사용되는 Direct3D 11(기능 수준에 대한 자세한 내용은 D3D_FEATURE_LEVEL 참조)
  • 다중 샘플 렌더링 대상 및 부동 표면의 샘플링과 같은 모든 선택적 텍스처 형식
  • MSAA(앤티앨리어싱) 최대 8배 멀티샘플 앤티앨리어싱(Antialiased, 고품질 렌더링)
  • 이방성 필터링
  • 32비트 및 64비트 애플리케이션 및 대용량 주소 인식 32비트 애플리케이션

Windows 7 SP1 또는 Windows Server 2008 R2 SP1에 Windows 7용 플랫폼 업데이트를 설치하는 경우 그러면 해당 운영 체제에는 Direct3D 11.1 런타임 및 기능 수준 9_1, 9_2, 9_3, 10_0, 10_1 및 11_0과 함께 사용할 때 Direct3D 11.x를 지원하는 WARP 버전이 포함됩니다.

Windows 8, Windows 10, Windows Server 2012 이상 및 Windows RT에는 Direct3D 11.1 런타임 및 새 버전의 WARP가 포함됩니다. 이 버전은 기능 수준 9_1, 9_2, 9_3, 10_0, 10_1, 11_0 및 11_1과 함께 사용되는 경우 Direct3D 11.x를 지원합니다.

Windows 10 Fall Creators Update(1709)에는 Direct3D 12 기능 수준 12_0 및 12_1을 지원하는 새로운 버전의 WARP가 포함되어 있습니다.

WARP에 대한 최소 컴퓨터 요구 사항은 Windows Vista의 경우와 동일합니다. 특히 다음과 같습니다.

  • 최소 800MHz CPU
  • MMX, SSE 또는 SSE2는 필요하지 않습니다.
  • 최소 512MB RAM

WARP 사용 방법

Direct3D 12의 경우 WARP 디바이스를 만들려면 먼저 WARP 어댑터를 식별해야 합니다. 이를 용이하게 하기 위해 DXGI 1.4는 IDXGIFactory4::EnumWarpAdapter 메서드를 제공합니다. WARP 어댑터를 D3D12CreateDevice에 제공하여 WARP 디바이스를 만들 수 있습니다.

Direct3D 10, 10.1 및 11 구성 요소는 디바이스를 만들 때 지정할 수 있는 추가 드라이버 유형을 사용할 수 있습니다(예: D3D11CreateDevice 함수를 호출할 때). 해당 드라이버 유형이 D3D10_DRIVER_TYPE_WARP 또는 D3D_DRIVER_TYPE_WARP. 해당 드라이버 유형을 지정하면 런타임에서 WARP 디바이스를 만들고 하드웨어 디바이스를 초기화하지 않습니다.

WARP는 참조 래스터라이저와 동일한 소프트웨어 인터페이스를 Direct3D에 사용하므로 참조 래스터라이저를 사용하여 실행을 지원할 수 있는 모든 Direct3D 애플리케이션은 WARP를 사용하여 테스트할 수 있습니다. WARP를 사용하려면 D3d10warp.dll의 이름을 D3d10ref.dll로 바꾸고 샘플 또는 애플리케이션과 동일한 폴더에 배치합니다. 다음으로 ref로 전환하면 WARP 렌더링이 표시됩니다.

WARP의 이름을 D3d10ref.dll로 바꾸고 C:\Program Files (x86)\Microsoft DirectX SDK(2010년 6월)\Samples\C++\Direct3D\Bin\x86에 배치하는 경우 샘플에서 "참조 토글" 단추를 클릭하거나 명령줄에 /ref가 지정된 샘플을 실행하여 WARP에 대해 모든 DirectX 샘플을 실행할 수 있습니다.

Direct3D를 사용할 수 있는 모든 애플리케이션은 WARP를 사용할 수 있습니다. 여기에는 다음과 같은 유형의 애플리케이션이 포함됩니다.

캐주얼 게임

게임에는 일반적으로 간단한 렌더링 요구 사항이 있습니다. 그러나 하드웨어 가속이 필요할 수 있는 인상적인 시각 효과도 사용해야 합니다. Windows용 베스트 셀러 게임 타이틀의 대부분은 시뮬레이션 또는 캐주얼 게임이며, 둘 다 고성능 그래픽이 필요하지 않습니다. 그러나 두 게임 스타일 모두 최신 셰이더 기반 그래픽과 하드웨어에서 스케일링할 수 있는 기능의 이점을 크게 활용합니다.

기존 비게임 애플리케이션

많은 양의 그래픽 애플리케이션에는 렌더링 계층에서 최소한의 코드 경로가 필요합니다. WARP를 사용하면 이러한 애플리케이션이 많은 수의 컴퓨터 구성을 대상으로 할 수 있는 단일 Direct3D 코드 경로를 구현할 수 있습니다.

고급 렌더링 게임

게임 개발자는 그래픽 카드 또는 드라이버별 렌더링 오류를 격리하려고 할 수 있습니다. 따라서 그래픽이 매우 까다로운 모든 게임은 WARP를 사용하여 콘텐츠를 렌더링할 수 있는 이점을 얻을 수 있습니다. WARP를 사용하여 찾은 시각적 아티팩트가 하드웨어 또는 드라이버에 대한 오류 또는 문제를 렌더링하는지 확인할 수 있습니다.

기타 애플리케이션

WARP의 대상 애플리케이션에는 현재 Direct3D 10 또는 Direct3D 10.1을 사용하지 않을 수도 있는 애플리케이션도 포함됩니다. 이러한 대상 애플리케이션에는 항상 모든 컴퓨터에서 작동해야 하는 애플리케이션, CPU 및 GPU 버전의 이미지 처리 알고리즘을 작성하지 않는 이미지 처리 애플리케이션, 속도 또는 GPU 사용이 중요하지 않은 이미지 처리 알고리즘(예: 인쇄) 및 고급 3D 그래픽을 표시하는 에뮬레이터 및 가상 환경이 포함됩니다.

WARP 아키텍처 및 성능

WARP는 참조 래스터라이저 코드베이스를 기반으로합니다. 따라서 WARP는 Direct3D 10 이상 및 DXGI 둘 다에 동일한 소프트웨어 인터페이스를 사용합니다. WARP는 Windows 시스템 폴더에 있는 D3d10warp.dll의 Windows 7에 포함되어 있습니다. WARP의 두 버전은 64비트 컴퓨터, 즉 x86 및 x64 버전에 설치됩니다. WARP에 포함된 코드 생성기가 사용자가 64비트 애플리케이션을 실행할 때 사용할 수 있는 추가 레지스터를 활용할 수 있으므로 x64 버전은 특정 상황에서 더 빠르게 실행될 수 있습니다.

WARP에는 다음과 같은 두 개의 고속 실시간 컴파일러가 포함되어 있습니다.

  • HLSL 바이트 코드 및 현재 렌더링 상태를 파이프라인의 기하 도형 셰이더(GS), 꼭짓점 셰이더(VS) 및 PS(픽셀 셰이더) 단계에 최적화된 벡터 명령 스트림으로 변환하는 상위 수준 중간 언어 컴파일러입니다.
  • 이러한 명령을 사용하고 최적화된 SSE2, SSE4.1, x86, x64, arm 및 arm64 어셈블리 코드를 생성할 수 있는 고성능 Just-In-Time 코드 생성기입니다.

WARP는 Windows Vista에서 도입된 스레드 풀 및 복잡한 작업 관리 및 종속성 추적을 사용하여 렌더링 파이프라인의 모든 부분을 사용 가능한 CPU 코어에 효율적으로 분산할 수 있도록 합니다.

WARP는 지연된 렌더링을 사용합니다. 즉, WARP는 모든 CPU 리소스를 효율적으로 사용할 수 있는 충분한 데이터를 사용할 수 있는 경우에만 래스터화가 수행되도록 렌더링 명령을 일괄 처리할 수 있습니다. 애플리케이션 스레드가 기본 작업을 최소화하여 애플리케이션이 명령을 최대한 빨리 제출할 수 있도록 합니다. 애플리케이션도 다중 스레드이고 스레드 풀을 사용하는 경우 작업은 WARP와 애플리케이션 간에 균등하게 분산됩니다.

WARP 코드 생성기는 최신 CPU 아키텍처를 최대한 활용하도록 조정되었습니다. WARP는 컴퓨터가 SSE를 지원하지 않더라도 Windows Vista 이상 운영 체제를 실행할 수 있는 모든 컴퓨터에서 실행됩니다. 그러나 WARP는 SSE2를 지원하는 컴퓨터에 최적화되었습니다. AMD 및 Intel 프로세서의 특정 아키텍처에 대한 최적화와 SSE 4.1 확장 지원도 포함되어 있습니다.

WARP는 그래픽 하드웨어를 실행할 필요가 없습니다. 하드웨어를 사용할 수 없거나 초기화할 수 없는 경우에도 실행할 수 있습니다.

WARP에 대한 지식이 없는 Direct3D 10 이상 하드웨어에서 실행되도록 설계되고 빌드된 애플리케이션 및 샘플은 WARP를 사용하여 잘 실행될 가능성이 높습니다. 그러나 사용 가능한 프레임 속도를 달성하기 위해 품질 설정 및 해상도를 최대한 낮추는 것이 좋습니다. WARP를 사용하여 하드웨어와 소프트웨어 모두에서 잘 실행되는 애플리케이션을 개발하고 튜닝할 수 있습니다.

WARP는 병렬 실행에 여러 CPU 코어를 사용하므로 최신 다중 코어 CPU에서 가장 잘 수행됩니다. 또한 WARP는 SSE4.1 확장이 설치된 컴퓨터에서 훨씬 더 빠르게 실행됩니다. Microsoft는 8개 이상의 코어와 SSE4.1이 있는 컴퓨터에서 상당한 테스트 및 성능 튜닝을 수행했습니다. 이러한 고급 컴퓨터는 Windows 7 이상 운영 체제 수명 동안 일반화되기 때문입니다.

WARP가 CPU에서 실행되는 경우 여러 가지 방법으로 그래픽 카드 비해 제한됩니다. CPU의 전면 버스 속도는 일반적으로 약 또는 10GB/s 미만입니다. 반면, 카드 그래픽에는 20~100GB 이상의 그래픽 대역폭을 사용하는 전용 메모리가 있는 경우가 많습니다. 그래픽 하드웨어에는 오버헤드나 전원 비용이 거의 들지 않고 텍스처 필터링, 형식 압축 해제 또는 변환과 같은 복잡하고 비용이 많이 드는 작업을 비동기적으로 수행할 수 있는 고정 함수 단위도 있습니다. 일반적인 CPU에서 이러한 작업을 수행하는 것은 전력 소비 및 성능 주기 측면에서 비용이 많이 듭니다.

Intel Penryn 기반 3.0GHz Quad Core 컴퓨터의 일반적인 성능 수치는 WARP가 경우에 따라 여러 벤치마크에서 저사용자 통합 Direct3D 10 이상 그래픽 GPU를 능가할 수 있음을 보여줍니다. 저가형 불연속 그래픽 하드웨어는 일반적으로 이러한 벤치마크를 실행할 때 WARP보다 4~5배 더 빠릅니다. 이러한 저사단 통합 GPU 또는 불연속 GPU는 CPU 리소스를 최소한으로 사용합니다. 특히 애플리케이션이 이러한 그래픽에서 제공하는 병렬 처리 및 메모리 대역폭을 활용할 수 있는 경우, 많은 애플리케이션의 경우 중급 또는 고급 그래픽 카드 카드 WARP보다 훨씬 빠릅니다.

WARP는 그래픽 하드웨어를 대체하는 것이 아니며, 특히 저가형 Direct3D 10 이상 불연속 하드웨어를 비교적 저렴하게 수행할 수 있습니다. WARP의 목표는 애플리케이션이 크게 다른 코드 경로 또는 테스트 요구 사항 없이 Direct3D 호환 수준 하드웨어를 대상으로 할 수 있도록 하는 것입니다.

다음 두 표에서는 다양한 CPU와 그래픽 카드 사용하는 WARP 예제 데이터를 보여 줍니다.

첫 번째 표에는 Direct3D 10 Crysis가 800x600에서 실행되고 가장 낮은 수준의 모든 품질 설정이 있는 WARP 예제 데이터가 표시됩니다.

CPU Time Ave FPS 최소 FPS 최소 프레임 최대 FPS 최대 프레임
코어 i7 8 Core @ 3.0GHz 271.57 7.36 3.46 1966 15.01 995
Penryn 4 Core @ 3.0GHz 351.35 5.69 2.49 1967 10.95 980
Penryn 2 Core @ 3.0GHz 573.98 3.48 1.35 1964 6.61 988
Core 2 Duo @ 2.6GHz 707.19 2.83 0.81 1959 5.18 982
Core 2 Duo @ 2.4GHz 763.25 2.62 0.76 1964 4.70 984
Core 2 Duo @ 2.1GHz 908.87 2.20 0.64 1965 3.72 986
Xeon 8 Core @ 2.0GHz 424.04 4.72 1.84 1967 9.56 988
AMD FX74 4 Core @ 3.0GHz 583.12 3.43 1.41 1967 5.78 986
Phenom 9550 4 Core @ 2.2GHz 664.69 3.01 0.53 1959 5.46 987

두 번째 표에서는 다양한 그래픽 카드 동일한 테스트를 실행하는 예제 데이터를 보여 줍니다.

그래픽 카드 Time Ave FPS 최소 FPS 최소 프레임 최대 FPS 최대 프레임
NVIDIA 8800 GTS 23.58 84.80 60.78 1957 130.83 1022
NVIDIA 8500 GT 47.63 41.99 25.67 1986 72.57 991
NVIDIA Quadro 290 67.16 29.78 18.19 1969 49.87 1017
NVIDIA 8400 GS 59.01 33.89 21.22 1962 51.82 1021
ATI 3400 53.79 37.18 22.97 618 59.77 1021
ATI 3200 67.19 29.77 18.91 1963 45.74 980
ATI 2400 PRO 67.04 29.83 17.97 606 45.91 987
Intel DX10 통합 386.94 5.17 1.74 1974 16.22 995

WARP 규칙

WARP는 Direct3D 하드웨어 디바이스의 유효성을 검사하기 위한 모든 표준 WHQL(Windows 하드웨어 품질 랩) 규칙 테스트를 통과합니다.

WARP는 Direct3D 10 및 Direct3D 10.1 애플리케이션 및 벤치마크 제품군과 DirectX, NVIDIA 및 AMD의 SDK 샘플에 대해 테스트되었습니다.

WARP는 테스트에 Windows용 PIX 디버깅 및 분석 도구를 사용했습니다. Microsoft에는 하드웨어와 WARP를 비교하는 데 사용되는 애플리케이션의 단일 프레임 캡처에 대한 큰 라이브러리가 있습니다. 대부분의 이미지는 하드웨어와 WARP 간에 거의 동일하게 표시됩니다. 경우에 따라 작은 차이가 발생하는 경우 Direct3D 10 사양에 정의된 허용 오차 내에 있는 것으로 확인됩니다.