Direct3D

Direct3D
개발자마이크로소프트
발표일1996년 6월 2일(30년 전)(1996-06-02)
안정화 버전
12.0 Beta 3 / 2015년 1월 13일(11년 전)(2015-01-13)
운영 체제마이크로소프트 윈도우, 윈도우 CE, 윈도우 모바일, 윈도우 폰, 윈도우 임베디드, 엑스박스 시스템 소프트웨어
플랫폼X86, ARM
종류3차원 컴퓨터 그래픽스 API
라이선스독점
웹사이트learn.microsoft.com/en-us/windows/win32/direct3d

다이렉트3D(영어: Direct3D)는 마이크로소프트 윈도우를 위한 그래픽 응용 프로그램 인터페이스(API)이다. DirectX의 일부인 Direct3D는 게임과 같이 성능이 중요한 애플리케이션에서 3차원 그래픽을 렌더링하는 데 사용된다. Direct3D는 그래픽 카드에서 지원하는 경우 하드웨어 가속을 사용하며, 이를 통해 전체 3D 렌더링 파이프라인이나 일부만 하드웨어 가속할 수 있다. Direct3D는 Z 버퍼링,[1] W-버퍼링,[2] 스텐실 버퍼링, 공간 위신호 제거, 알파 블렌딩, 색상 블렌딩, 밉맵핑, 텍스처 블렌딩,[3][4] 클리핑, 컬링, 대기 효과, 원근 보정 텍스처 매핑, 프로그래밍 가능한 HLSL 셰이더[5] 및 효과를 포함한 3D 그래픽 하드웨어의 고급 그래픽 기능을 제공한다.[6] 다른 DirectX 기술과의 통합을 통해 Direct3D는 비디오 매핑, 2D 비디오 오버레이 평면에서의 하드웨어 3D 렌더링, 심지어 스프라이트와 같은 기능을 제공하여 대화형 미디어에서 2D 및 3D 그래픽을 함께 사용할 수 있게 한다.

Direct3D는 3차원 컴퓨터 그래픽스 렌더링을 위한 많은 명령을 포함하고 있다. 하지만 버전 8부터는 다이렉트드로 프레임워크를 대체하고 2D 그래픽 렌더링에 대한 책임도 갖게 되었다.[7] 마이크로소프트는 3D 그래픽 카드에서 사용할 수 있는 최신 기술을 지원하기 위해 Direct3D를 지속적으로 업데이트하고 있다. Direct3D는 완전한 정점 소프트웨어 에뮬레이션을 제공하지만, 하드웨어에서 지원하지 않는 기능에 대해서는 픽셀 소프트웨어 에뮬레이션을 제공하지 않는다. 예를 들어, Direct3D를 사용하여 프로그래밍된 소프트웨어가 픽셀 셰이더를 필요로 하는데 사용자의 컴퓨터에 있는 그래픽 카드가 해당 기능을 지원하지 않는 경우, Direct3D는 이를 에뮬레이트하지 않는다. 다만, 3D 모델의 폴리곤과 텍스처를 계산하고 렌더링할 수는 있으나, 하드웨어와 비교하면 대개 품질과 성능이 떨어진다. API에는 소프트웨어로 일반 그래픽 카드를 에뮬레이트하는 참조 래스터라이저(REF 장치)가 포함되어 있지만, 이는 대부분의 실시간 3D 애플리케이션에서 사용하기에는 너무 느리며 일반적으로 디버깅 용도로만 사용된다. Direct3D 10.1의 전체 기능 세트를 에뮬레이트하도록 설계된 새로운 실시간 소프트웨어 래스터라이저인 WARP윈도우 7 및 플랫폼 업데이트가 적용된 윈도우 비스타 서비스 팩 2에 포함되어 있으며, 멀티코어 CPU에서 저가형 3D 카드와 맞먹는 성능을 보여준다.[8]

DirectX의 일부로서 Direct3D는 윈도우 95 이상에서 사용할 수 있으며, 다양한 버전의 엑스박스 콘솔 시스템의 벡터 그래픽스 API 기반이 된다. 여러 윈도우 API를 자유 소프트웨어로 다시 구현한 와인 호환 계층에는 Direct3D 구현이 포함되어 있다.

Direct3D의 주요 경쟁자는 크로노스의 OpenGL 및 그 후속인 벌컨이다. 페렌하이트는 1990년대에 마이크로소프트와 SGI가 OpenGL과 Direct3D를 통합하려는 시도였으나 결국 취소되었다.

개요

  • Direct3D 6.0 – 멀티텍스처링
  • Direct3D 7.0 – 하드웨어 변환, 클리핑 및 조명(TCL/T&L), DXVA 1.0
  • Direct3D 8.0 – 픽셀 셰이더 1.0/1.1 및 정점 셰이더 1.0/1.1[9]
  • Direct3D 8.1 – 픽셀 셰이더 1.2/1.3/1.4[10][11][12]
  • Direct3D 9.0 – 셰이더 모델 2.0 (픽셀 셰이더 2.0 & 정점 셰이더 2.0)
  • Direct3D 9.0a – 셰이더 모델 2.0a (픽셀 셰이더 2.0a & 정점 셰이더 2.0a)
  • Direct3D 9.0b – 픽셀 셰이더 2.0b, H.264
  • Direct3D 9.0c – 윈도우 98/ME(초기 릴리스)를 지원하는 마지막 버전[13]윈도우 2000/XP(모든 릴리스)용 마지막 버전;[14] 셰이더 모델 3.0 (픽셀 셰이더 3.0 & 정점 셰이더 3.0)
  • Direct3D 9Ex – 윈도우 비스타 전용; Direct3D 9.0c, 셰이더 모델 3.0, Windows Graphics Foundation 1.0, GPGPU, DXVA 2.0
  • Direct3D 10.0 – 윈도우 비스타/윈도우 7; 셰이더 모델 4.0, Windows Graphics Foundation 2.0
  • Direct3D 10.1 – 윈도우 비스타 SP1/윈도우 7; 셰이더 모델 4.1, Windows Graphics Foundation 2.1
  • Direct3D 11.0 – 윈도우 비스타 SP2/윈도우 7; 셰이더 모델 5.0, 테셀레이션, 멀티스레드 렌더링, 컴퓨트 셰이더, Direct3D 9/10/10.1을 실행하는 하드웨어 및 소프트웨어에 의해 구현됨
  • Direct3D 11.1 – 윈도우 8(윈도우 7 SP1에서도 부분 지원); 스테레오스코픽 3D 렌더링, H.265
  • Direct3D 11.2 – 윈도우 8.1; 타일 리소스
  • Direct3D 11.3 – 윈도우 10
  • Direct3D 12.0 – 윈도우 10; 로우 레벨 렌더링 API, 셰이더 모델 5.1 및 6.0
  • Direct3D 12.1 – 윈도우 10; DirectX 레이트레이싱
  • Direct3D 12.2 – 윈도우 10; DirectX 12 얼티밋

Direct3D 2.0 및 3.0

1992년, 세르반 케온지안(Servan Keondjian), 더그 랍슨(Doug Rabson), 케이트 시킹스(Kate Seekings)는 렌더모픽스(RenderMorphics)라는 회사를 설립하여 의료 영상 및 CAD 소프트웨어에 사용되는 리얼리티 랩(Reality Lab)이라는 3D 그래픽 API를 개발했다.[15] 이 API의 두 가지 버전이 출시되었다.[16] 마이크로소프트는 1995년 2월에 렌더모픽스를 인수하고, 직원들을 영입하여 윈도우 95를 위한 3D 그래픽 엔진을 구현하게 했다.[17] Direct3D의 첫 번째 버전은 DirectX 2.0(1996년 6월 2일)과 DirectX 3.0(1996년 9월 26일)에서 제공되었다.

Direct3D는 초기에 "즉시 모드" 3D API를 구현하고 그 위에 "보존 모드(retained mode)" 3D API를 계층화했다.[18] 두 유형의 API 모두 Direct3D가 출시되기 전 리얼리티 랩의 두 번째 릴리스에서 이미 제공되었었다.[16] 다이렉트드로와 같은 다른 DirectX API와 마찬가지로 둘 다 COM을 기반으로 했다. 보존 모드 API는 거의 채택되지 않은 장면 그래프 API였다. 게임 개발자들은 Direct3D 보존 모드가 제공할 수 있는 것보다 더 직접적인 하드웨어 제어를 원했다. 상당한 판매량을 기록한 게임 중 Direct3D 보존 모드를 기반으로 한 게임은 레고 아일랜드레고 락 레이더스뿐이었기 때문에 마이크로소프트는 DirectX 3.0 이후 보존 모드 API를 업데이트하지 않았다.

DirectX 2.0 및 3.0에서 Direct3D 즉시 모드는 하드웨어 벤더들이 직접 지원해주기를 희망했던 "실행 버퍼" 프로그래밍 모델을 사용했다. 실행 버퍼는 하드웨어 메모리에 할당되고 하드웨어가 3D 렌더링을 수행하기 위해 파싱하도록 의도되었다. 그러나 당시 프로그래밍하기가 매우 까다롭다고 여겨져 새로운 API의 채택을 방해했으며, 마이크로소프트가 게임과 워크스테이션 애플리케이션을 위한 공식 3D 렌더링 API로 OpenGL을 채택해야 한다는 요구를 불러일으켰다.[19]

마이크로소프트는 게임 API로서 OpenGL을 채택하는 대신, OpenGL과 경쟁할 뿐만 아니라 3dfx글라이드와 같은 다른 독점 API와 더 효과적으로 경쟁하기 위해 Direct3D를 계속 개선하기로 선택했다.

처음부터 즉시 모드는 IDirect3DDevice 인터페이스의 BeginScene/EndScene 메서드를 사용하여 탈리스만타일 렌더링도 지원했다.

Direct3D 4.0

1996년 말 출시 예정이었다가 취소된 DirectX 4.0을 위해 Direct3D에 계획된 실질적인 변경 사항은 없었다.[20]

Direct3D 5.0

1996년 12월, 레드먼드의 한 팀이 Direct3D 즉시 모드 개발을 맡았고, 런던에 기반을 둔 렌더모픽스 팀은 보존 모드 작업을 계속했다. 레드먼드 팀은 애플리케이션이 실행 버퍼를 구성할 필요를 없애주는 DrawPrimitive API를 추가하여 Direct3D가 글라이드OpenGL과 같은 다른 즉시 모드 렌더링 API와 더 유사해지도록 만들었다. DrawPrimitive의 첫 번째 베타는 1997년 2월에 출시되었으며,[21] 최종 버전은 1997년 8월 DirectX 5.0과 함께 출시되었다.[22]

더 사용하기 쉬운 즉시 모드 API를 도입한 것 외에도, DirectX 5.0은 Direct3D 장치가 그래픽 출력을 다양한 다이렉트드로 서피스에 쓸 수 있도록 하는 SetRenderTarget 메서드를 추가했다.[23]

Direct3D 6.0

1998년 8월에 출시된 DirectX 6.0은 최신 하드웨어를 지원하기 위한 수많은 기능(멀티텍스처[24]스텐실 버퍼 등)과 X87, SSE, 3D나우!를 위한 최적화된 지오메트리 파이프라인, 프로그래밍을 단순화하기 위한 선택적 텍스처 관리 기능을 도입했다.[25] Direct3D 6.0에는 특정 하드웨어 벤더로부터 라이선스를 받아 API에 포함한 기능들에 대한 지원도 포함되었다. S3 텍스처 압축 지원이 그러한 기능 중 하나였으며, API 포함을 위해 DXTC로 이름이 변경되었다. 다른 하나는 TriTech의 독점 범프 매핑 기술이었다. 마이크로소프트는 이러한 기능을 DirectX에 포함한 다음, 다른 벤더 하드웨어에서도 널리 채택되도록 장려하기 위해 드라이버가 윈도우 로고를 받기 위한 필수 조건으로 추가했다.

1999년 2월 DirectX 6.1 업데이트에서 DirectX 6.0에 대한 사소한 업데이트가 있었다. 다이렉트뮤직 지원을 처음으로 추가한 것 외에도 이 릴리스는 인텔 펜티엄 III 3D 확장에 대한 지원을 개선했다.[26]

1997년에 발송된 기밀 메모[27]에는 마이크로소프트가 DirectX 6.0에서 탈리스만에 대한 전체 지원을 발표할 계획이었으나 해당 API는 취소된 것으로 나타나 있다 (자세한 내용은 마이크로소프트 탈리스만 문서 참조).

Direct3D 7.0

1999년 9월에 출시된 DirectX 7.0.dds 텍스처 형식을 도입하고[28] 변환 및 조명(T&L) 하드웨어 가속(엔비디아의 지포스 256에서 PC 하드웨어로 처음 제공됨)과 하드웨어 메모리에 정점 버퍼를 할당하는 기능을 지원했다.[29] 하드웨어 정점 버퍼는 DirectX 역사상 OpenGL보다 실질적으로 개선된 첫 번째 기능이다. Direct3D 7.0은 멀티텍스처링 하드웨어에 대한 DirectX 지원을 강화했으며 고정 기능 멀티텍스처 파이프라인 기능의 정점을 나타낸다. 비록 강력하지만 프로그래밍하기가 너무 복잡해서 그래픽 하드웨어의 셰이딩 기능을 활용하려면 새로운 프로그래밍 모델이 필요했다. Direct3D 7.0은 DXVA 기능도 도입했다.

Direct3D 8.0

2000년 11월에 출시된 DirectX 8.0은 정점 및 픽셀 셰이더 형태의 프로그래밍 가능성을 도입하여 개발자가 불필요한 하드웨어 상태를 걱정하지 않고 코드를 작성할 수 있게 했다.[30] 셰이더 프로그램의 복잡성은 작업의 복잡성에 따라 달라지며, 디스플레이 드라이버는 이러한 셰이더를 하드웨어가 이해할 수 있는 명령어로 컴파일했다. Direct3D 8.0과 그 프로그래밍 가능한 셰이딩 기능은 복잡한 상태 머신에 의해 드로잉이 제어되는 OpenGL 스타일의 고정 기능 아키텍처로부터의 첫 번째 주요 탈피였다. 또한 Direct3D 8.0은 다이렉트드로를 별도의 API로 제거했다.[31][32] Direct3D는 렌더링 결과를 표시하는 데 사용되는 Present()와 같이 애플리케이션 개발에 여전히 필요한 모든 나머지 다이렉트드로 API 호출을 흡수했다.

Direct3D는 사용자 친화적이지 않은 것으로 간주되었으나, DirectX 8.1 버전부터 많은 사용성 문제가 해결되었다. Direct3D 8은 정점 셰이더, 픽셀 셰이더, 안개(Distance fog), 범프 매핑, 텍스처 매핑과 같은 많은 강력한 3D 그래픽 기능을 포함하고 있었다.

Direct3D 9

2002년 12월에 출시된 Direct3D 9.0[33]고급 셰이더 언어의 새 버전,[34][35] 부동 소수점 텍스처 형식에 대한 지원, 다중 렌더 타겟(MRT),[36] 다중 요소 텍스처,[37] 정점 셰이더에서의 텍스처 조회 및 스텐실 버퍼 기술에 대한 지원을 추가했다.[38]

Direct3D 9Ex

Direct3D 9Ex[39](이전 버전은 9.0L, 'L'은 윈도우 비스타의 코드명인 롱혼을 의미)는 윈도우 비스타 이상에서만 사용할 수 있는 확장 기능으로, 윈도우 비스타의 윈도우 디스플레이 드라이버 모델(WDDM)이 제공하는 이점을 활용하며 윈도우 에어로에 사용된다.[40] Direct3D 9Ex는 DirectX 9 등급의 WDDM 드라이버와 함께 그래픽 메모리를 가상화하고 시스템 메모리로 페이징 아웃할 수 있게 하며, 그래픽 작업을 중단하고 예약하거나 프로세스 간에 DirectX 서피스를 공유할 수 있게 한다.[41] Direct3D 9Ex는 이전에 Windows Graphics Foundation(WGF) 버전 1.0으로 알려져 있었다.

Direct3D 9Ex improvements - Win32 apps

Direct3D 10

윈도우 비스타에는 Direct3D API에 대한 주요 업데이트가 포함되어 있다. 원래 WGF 2.0(Windows Graphics Foundation 2.0), 그 후 DirectX 10 및 DirectX Next로 불렸던 Direct3D 10[42]은 업데이트된 셰이더 모델 4.0과 셰이더 프로그램을 위한 선택적 인터럽트 기능을 특징으로 한다.[41] 이 모델에서 셰이더는 이전 버전과 마찬가지로 고정 스테이지로 구성되지만, 모든 스테이지는 거의 통합된 인터페이스를 지원하며 텍스처 및 셰이더 상수와 같은 리소스에 대한 통합된 액세스 패러다임을 지원한다. 언어 자체는 정수 연산, 크게 증가된 명령어 수, 더 C 언어와 유사한 구조를 포함하도록 확장되었다. 이전에 사용 가능했던 정점픽셀 셰이더 스테이지 외에도, API에는 하나의 정점을 입력받아 하나의 정점을 출력하는 이전 모델을 깨고 셰이더 내부에서 지오메트리를 생성할 수 있게 하여 그래픽 하드웨어만으로 복잡한 지오메트리를 생성할 수 있도록 하는 지오메트리 셰이더 스테이지가 포함되어 있다.

윈도우 XP 및 그 이전 버전은 DirectX 10.0 이상을 지원하지 않는다. 또한 Direct3D 10은 처음부터 Direct3D의 일부였던 보존 모드 API에 대한 지원을 중단하여, 보존 모드 API를 렌더링 엔진으로 사용했던 3D 게임들과 윈도우 비스타 간의 비호환성을 야기했다.[43]

이전 API 버전과 달리 Direct3D 10은 주어진 그래픽 장치에서 지원되는 기능을 나타내기 위해 "기능 비트"("캡")를 더 이상 사용하지 않는다. 대신 디스플레이 시스템이 "Direct3D 10 호환"이 되기 위해 지원해야 하는 최소 하드웨어 기능 표준을 정의한다. 이는 특정 기능의 존재 여부에 따라 능력 검사 코드와 특수 사례를 제거하여 애플리케이션 코드를 간소화하는 것을 목표로 하는 중요한 변화이다.

윈도우 비스타 초기 릴리스 이후 Direct3D 10 하드웨어가 상대적으로 드물었고 Direct3D 10을 호환하지 않는 그래픽 카드의 설치 기반이 거대했기 때문에, 최초의 Direct3D 10 호환 게임들은 여전히 Direct3D 9 렌더 경로를 제공한다. 이러한 타이틀의 예로는 원래 Direct3D 9용으로 작성되었다가 출시 후 Direct3D 10으로 포팅된 컴퍼니 오브 히어로즈나, 원래 Direct3D 9용으로 개발되었다가 개발 후반부에 Direct3D 10 경로를 소급 적용한 헬게이트: 런던 또는 크라이시스가 있다. DirectX 10 SDK는 2007년 2월에 출시되었다.[44]

Direct3D 10.0

Direct3D 10.0 수준의 하드웨어는 다음 기능을 지원해야 한다: 새로운 지오메트리 셰이더 스테이지에서 전체 프리미티브를 처리하는 기능, 스트림 출력 스테이지를 사용하여 파이프라인에서 생성된 정점 데이터를 메모리로 출력하는 기능, 멀티샘플 알파-투-커버리지 지원, 뎁스/스텐실 서피스나 멀티샘플 리소스가 더 이상 렌더 타겟으로 바인딩되지 않을 때 읽기, 전체 HLSL 통합 (모든 Direct3D 10 셰이더는 HLSL로 작성되고 공통 셰이더 코어로 구현됨), 정수 및 비트 단위 셰이더 연산, 파이프라인 상태를 5개의 불변 상태 객체로 구성, 셰이더 상수를 상수 버퍼로 구성, 렌더 타겟, 텍스처 및 샘플러 수 증가, 셰이더 길이 제한 없음, 새로운 리소스 유형 및 리소스 형식,[45] 계층화된 런타임/API 계층,[46] 지오메트리 셰이더를 사용하여 프리미티브별 재질 교체 및 설정 수행 옵션, 뷰를 사용하여 리소스 액세스의 일반화 증가, 레거시 하드웨어 기능 비트 (캡) 제거.

  • 고정 파이프라인[47]은 이를 에뮬레이트하도록 프로그래밍할 수 있는 완전 프로그래밍 가능 파이프라인 (종종 통합 파이프라인 아키텍처라고 함)으로 대체되고 있다.
  • CPU가 효율적으로 상태를 변경할 수 있도록 하는 새로운 상태 객체.
  • 통합 셰이더 모델그래픽스 파이프라인의 프로그래밍 가능성을 향상시킨다. 정수 및 비트 단위 계산을 위한 명령어가 추가되었다.
  • 공통 셰이더 코어[48]는 IEEE 호환 32비트 정수 및 비트 단위 연산의 전체 세트를 제공한다. 이러한 연산은 그래픽 하드웨어에서 알고리즘의 새로운 클래스를 활성화하는데, 압축 및 패킹 기술, FFT, 비트필드 프로그램 흐름 제어 등이 그 예이다.
  • 메시를 형성하는 인접 삼각형에서 작동하는 지오메트리 셰이더.[49][50]
  • 텍스처 배열을 통해 CPU 개입 없이 GPU에서 텍스처를 교체할 수 있다.
  • 조건부 렌더링(Predicated rendering)을 통해 다른 조건에 따라 드로우 호출이 무시될 수 있다. 이를 통해 개체가 보이지 않거나 너무 멀리 있어 보이지 않을 경우 렌더링되지 않도록 하는 신속한 오클루전 컬링이 가능하다.
  • 인스턴싱 2.0 지원으로 군대, 풀, 나무와 같은 유사한 메시의 여러 인스턴스를 단일 드로우 호출로 렌더링할 수 있어 여러 유사한 개체에 필요한 처리 시간을 단일 개체 수준으로 줄일 수 있다.[51]

Direct3D 10.1

Direct3D 10.1[52]은 Direct3D 10 출시 직후 마이크로소프트가 마이너 업데이트로 발표했다. 사양은 2007년 11월 DirectX SDK 릴리스와 함께 확정되었으며, 런타임은 2008년 3월 중순부터 제공되는 윈도우 비스타 서비스 팩 1과 함께 배포되었다.

Direct3D 10.1은 그래픽 벤더를 위해 몇 가지 이미지 품질 표준을 설정하고 개발자에게 이미지 품질에 대한 더 많은 제어권을 제공한다.[53][54] 기능에는 안티앨리어싱 (샘플별 셰이딩 및 샘플 위치에 대한 애플리케이션 제어를 통한 멀티샘플링 및 슈퍼샘플링 모두)에 대한 더 정밀한 제어와 기존 기능 중 일부에 대한 더 많은 유연성 (큐브맵 배열 및 독립적인 블렌딩 모드)이 포함된다. Direct3D 10.1 수준의 하드웨어는 다음 기능을 지원해야 한다: 멀티샘플링은 커버리지 기반 투명도를 일반화하고 멀티 패스 렌더링에서 더 효과적으로 작동하도록 향상되었다. 더 나은 컬링 동작 – 제로 영역 면은 자동으로 컬링된다; 이는 와이어프레임 렌더링에만 영향을 준다. 렌더 타겟당 독립적인 블렌드 모드, 프리미티브 래스터화와 함께 새로운 샘플 빈도 픽셀 셰이더 실행, 파이프라인 스테이지 대역폭 증가. 컬러 및 뎁스/스텐실 MSAA 서피스 모두 이제 CopyResource와 함께 소스 또는 대상으로 사용할 수 있다. MultisampleEnable은 라인 래스터화에만 영향을 주며 (포인트 및 삼각형은 영향을 받지 않음), 라인 드로잉 알고리즘을 선택하는 데 사용된다. 이는 Direct3D 10의 일부 멀티샘플 래스터화가 더 이상 지원되지 않음을 의미한다. 텍스처 샘플링 – sample_c 및 sample_c_lz 명령은 Texture2DArrays 및 TextureCubeArrays 모두와 함께 작동하도록 정의되며 Location 멤버 (알파 구성 요소)를 사용하여 배열 인덱스를 지정한다. TextureCubeArrays 지원.

  • 필수 32비트 부동 소수점 필터링.
  • 부동 소수점 규칙 – IEEE-754 부동 소수점 규칙을 동일하게 사용하지만, 32비트 부동 소수점 연산은 무한 정밀 결과의 0.5 ULP(unit-last-place) 이내의 결과를 생성하도록 강화되었다. 이는 더하기, 빼기 및 곱하기에 적용된다. (곱하기는 0.5 ULP, 나눗셈은 1.0 ULP까지 정확도).
  • 형식 – float16 블렌딩의 정밀도가 0.5 ULP로 증가했다. 블렌딩은 UNORM16/SNORM16/SNORM8 형식에도 필요하다.
  • 특정 32/64/128비트 사전 구조화, 유형화된 리소스 및 동일한 비트 폭의 압축된 표현 간 복사 시 형식 변환.
  • R32G32B32A32 및 R32G32B32를 제외한 모든 렌더 타겟에 대해 4x MSAA 필수 지원.[55]
  • 셰이더 모델 4.1

Direct3D 10-클래스 하드웨어 및 드라이버 인터페이스를 엄격히 요구했던 Direct3D 10과 달리, Direct3D 10.1 런타임은 "기능 수준" 개념을 사용하여 Direct3D 10.0 하드웨어에서 실행될 수 있지만,[56][57][58] 새로운 기능은 기능 수준 10_1을 노출하는 새로운 하드웨어에서만 독점적으로 지원된다.

2008년 6월 현재 사용 가능한 유일한 Direct3D 10.1 하드웨어는 ATI라데온 HD 3000 시리즈라데온 HD 4000 시리즈였다. 2009년에는 S3 그래픽스크롬 430/440GT GPU와 엔비디아지포스 200 시리즈 일부 저가형 모델이 추가되었다. 2011년, 인텔 칩셋은 인텔 HD 그래픽스 2000(GMA HD) 도입과 함께 Direct3D 10.1을 지원하기 시작했다.

Direct3D 11

Direct3D 11[59]윈도우 7의 일부로 출시되었다. 2008년 7월 22일 게임페스트(Gamefest) 2008에서 발표되었고 2008년 8월 26일 Nvision 08 기술 컨퍼런스에서 시연되었다.[60][61] Direct3D 11 기술 프리뷰는 2008년 11월 릴리스된 DirectX SDK에 포함되었다.[62] AMD는 2009년 6월 3일 컴퓨텍스(Computex)에서 DirectX 11 SDK 샘플을 실행하는 DirectX 11 하드웨어를 미리 선보였다.[63]

Direct3D 11 런타임은 Direct3D 10.1 런타임에서 처음 도입된 기능의 확장 개념인 "기능 수준"을 사용하여 Direct3D 9 및 10.x 클래스 하드웨어 및 드라이버에서 실행될 수 있다.[56][64][65] 기능 수준을 통해 개발자는 Direct3D 11 API 아래에서 렌더링 파이프라인을 통합하고 보급형 카드에서도 더 나은 리소스 관리 및 멀티스레딩과 같은 API 개선 사항을 사용할 수 있지만, 새로운 셰이더 모델 및 렌더링 스테이지와 같은 고급 기능은 상위 하드웨어에서만 노출된다.[64][66] 인기 있는 DirectX 9.0a 카드의 다양한 기능을 캡슐화하는 세 가지 "10 수준 9" 프로필이 있으며, Direct3D 10, 10.1 및 11 각각은 별도의 기능 수준을 가진다. 각 상위 수준은 하위 수준의 엄격한 상위 집합이다.[67]

테셀레이션은 이전에 Direct3D 10을 위해 고려되었으나 나중에 폐기되었다. 라데온 R600과 같은 GPU는 Direct3D 9/10/10.1[68][69][70] 및 OpenGL[71]과 함께 사용할 수 있는 테셀레이션 엔진을 특징으로 하지만, 마이크로소프트에 따르면 Direct3D 11과는 호환되지 않는다. 라데온 8xxx, 지포스 3/4와 같은 구형 그래픽 하드웨어는 다른 형태의 테셀레이션(RT 패치, N 패치)을 지원했지만, 이러한 기술은 실질적인 사용을 보지 못했다. 따라서 더 새로운 하드웨어에서는 지원이 중단되었다.

마이크로소프트는 또한 순서 독립적 투명도(order independent transparency)와 같은 다른 기능들을 암시했지만, 이는 Direct3D API에 의해 노출된 적이 없으며 비디오로직의 파워VR 칩 라인과 같은 초기 Direct3D 하드웨어에서 거의 투명하게 지원되었다.

Direct3D 11.0

Direct3D 11.0 기능에는 다음이 포함된다: 셰이더 모델 5.0 지원, 동적 셰이더 링킹, 주소 지정 가능 리소스, 추가 리소스 유형,[72] 서브루틴, 지오메트리 인스턴싱, 픽셀 셰이더 입력으로서의 커버리지, 입력의 프로그래밍 가능한 보간, 새로운 텍스처 압축 형식 (새로운 LDR 형식 1개 및 HDR 형식 1개), WDDM 프리로드를 제한하기 위한 텍스처 클램프, 텍스처 필터링에서 8비트 하위 텍셀 및 하위 밉 정밀도 요구, 16K 텍스처 제한, Gather4(다중 구성 요소 텍스처 지원, 프로그래밍 가능한 오프셋 지원), DrawIndirect, 보수적 oDepth, 뎁스 바이어스,[73][74] 주소 지정 가능 스트림 출력, 리소스별 밉맵 클램핑, 부동 소수점 뷰포트, 셰이더 변환 명령어, 향상된 멀티스레딩.

  • 셰이더 모델 5[75]
  • 테셀레이션[76] 및 테셀레이션 셰이더[77] 지원 — 낮은 세부 수준의 폴리곤 모델에서 런타임 시 가시적인 폴리곤 수를 증가시킴
  • 멀티스레드 렌더링 — 멀티코어 CPU를 위해 서로 다른 스레드에서 동일한 Direct3D 장치 객체로 렌더링함
  • 컴퓨트 셰이더OpenCL, 엔비디아 CUDA, ATI 스트림, HLSL 셰이더 모델 5 등이 달성하는 것과 정신적으로 유사한 스트림 프로세싱 및 물리 가속과 같은 비그래픽 작업을 위해 셰이더 파이프라인을 노출함.[60][61]
  • R32G32B32A32 형식을 제외한 모든 렌더 타겟 형식에 대해 4x MSAA 필수 지원 및 모든 렌더 타겟 형식에 대해 8x MSAA 지원.[55]

다른 주목할 만한 기능으로는 고품질 및 HDR/알파 텍스처의 더 효율적인 패킹을 위한 두 가지 새로운 텍스처 압축 알고리즘 추가와 텍스처 캐시 증가가 있다.

릴리스 캔디데이트 버전에서 처음 확인된 윈도우 7은 최초의 Direct3D 11 지원을 통합한다. 윈도우 비스타를 위한 플랫폼 업데이트에는 완전한 기능을 갖춘 Direct3D 11 런타임과 DXGI 1.1 업데이트뿐만 아니라 WARP, Direct2D, DirectWrite, 윈도우 이미징 컴포넌트와 같은 윈도우 7의 다른 관련 구성 요소가 포함되어 있다.[78][79]

Direct3D 11.1

Direct3D 11.1[80][81]윈도우 8과 함께 제공되는 API 업데이트이다.[82][83] 윈도우 8의 Direct3D 런타임은 DXGI 1.2[84]를 특징으로 하며 새로운 WDDM 1.2[85] 장치 드라이버가 필요하다.[86] 윈도우 8 개발자 프리뷰용 윈도우 SDK 예비 버전은 2011년 9월 13일에 출시되었다.

새로운 API는 셰이더 트레이싱 및 HLSL 컴파일러 향상, 최소 정밀도 HLSL 스칼라 데이터 유형 지원,[87] 모든 파이프라인 스테이지에서의 UAV(Unordered Access Views), 타겟 독립적 래스터화(TIR), NO_OVERWRITE로 동적 버퍼의 SRV를 매핑하는 옵션, 비디오 리소스의 셰이더 처리, 렌더 타겟에서 논리 연산을 사용할 수 있는 옵션, 상수 버퍼의 하위 범위를 셰이더에 바인딩하고 검색할 수 있는 옵션, 셰이더가 액세스할 수 있는 것보다 큰 상수 버퍼를 생성할 수 있는 옵션, 리소스 및 리소스 뷰를 삭제할 수 있는 옵션, 새로운 복사 옵션으로 하위 리소스를 변경할 수 있는 옵션, 래스터라이저 상태를 생성하기 위해 샘플 수를 강제할 수 있는 옵션, 리소스 뷰의 전체 또는 일부를 지울 수 있는 옵션, 세션 0 프로세스에서 Direct3D를 사용할 수 있는 옵션, 기능 수준 9 이상에서 HLSL로 사용자 클립 평면을 지정할 수 있는 옵션, 기능 수준 9에서 섀도 버퍼 지원, 비디오 재생 지원, 공유 Texture2D 리소스에 대한 확장 지원, Direct3D 10 컨텍스트와 11 컨텍스트 및 기능 수준 간의 즉시 전환 옵션을 특징으로 한다. Direct3D 11.1에는 새로운 기능 수준 11_1이 포함되어 있어 셰이더 언어에 대한 사소한 업데이트 (더 큰 상수 버퍼 및 선택적 배정밀도 명령어 등)뿐만 아니라 개선된 블렌딩 모드와 인텔 HD 그래픽스와 같은 저가형 GPU의 성능을 향상시키기 위한 16비트 컬러 형식에 대한 필수 지원을 제공한다.[86][88] WARP는 기능 수준 11_1을 지원하도록 업데이트되었다.

윈도우 7플랫폼 업데이트에는 Direct3D 11.1의 제한된 기능 세트가 포함되어 있지만, 기능 수준 11_1 및 관련 API나 스테레오스코픽 렌더링을 위한 쿼드 버퍼링과 같이 WDDM 1.2에 의존하는 구성 요소는 존재하지 않는다.[89][90]

Direct3D 11.2

Direct3D 11.2[91][92][93]윈도우 8.1과 함께 배포되었다.[94][95] 새로운 하드웨어 기능에는 WDDM 1.3[96] 드라이버가 포함된 DXGI 1.3[97]이 필요하며 런타임 셰이더 수정 및 링킹, 함수 링킹 그래프(FLG), 수신함 HLSL 컴파일러, 그래픽 명령 주석 옵션이 포함되어 있다.[98] 기능 수준 11_0 및 11_1은 셰이더 상세 수준 클램프 (티어 2)와 함께 타일 리소스에 대한 선택적 지원을 도입한다.[99] 후자의 기능은 현재 많은 GPU에 존재하는 하드웨어 페이지 테이블에 대한 제어를 효과적으로 제공한다.[100] WARP는 새로운 기능을 완전히 지원하도록 업데이트되었다.[94][101] 기능 수준 11_2는 없으며, 새로운 기능은 기존 기능 수준 전반에 걸쳐 분산되어 있다. 하드웨어 종속적인 기능은 CheckFeatureSupport를 통해 개별적으로 확인할 수 있다.[95][102] Direct3D 11.2의 일부 "새로운" 기능은 실제로는 일부 구형 하드웨어 기능을 더 세분화된 방식으로 노출한다. 예를 들어 D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT는 기능 수준 9_1 및 9_2 하드웨어에서 인스턴싱에 대한 부분 지원을 노출하며, 이는 기능 수준 9_3 이상에서는 완전히 지원된다.[103]

Direct3D 11.X

Direct3D 11.X엑스박스 원에서 실행되는 DirectX 11.2의 상위 집합이다.[104][105] 여기에는 나중에 DirectX 12의 일부로 발표된 드로우 번들과 같은 일부 기능이 포함되어 있다.[106]

Direct3D 11.3

Direct3D 11.3[107]은 2015년 7월 윈도우 10과 함께 출시되었다. Direct3D 11.x API의 전체 구조를 유지하면서 Direct3D 12의 마이너 렌더링 기능이 포함되어 있다.[108][109][110] Direct3D 11.3은 선택적 셰이더 지정 스텐실 참조 값, 유형화된 순서 없는 액세스 뷰 로드, 래스터라이저 순서 뷰(ROV), 선택적 표준 스위즐, 선택적 기본 텍스처 매핑, 보수적 래스터화 (세 가지 티어 중),[111] 선택적 통합 메모리 액세스(UMA) 지원 및 추가 타일 리소스 (티어 2)(볼륨 타일 리소스)를 도입한다.[112]

Direct3D 11.4

  • Direct3D 11.4 버전 1511 – 초기 Direct3D 11.4는 윈도우 10 Threshold 2 업데이트 (버전 1511)와 함께 도입되어 외부 그래픽 어댑터 지원 및 DXGI 1.5가 개선되었다.[113]
  • Direct3D 11.4 버전 1607 – 윈도우 10 Anniversary 업데이트 (버전 1607)와 함께 업데이트된 Direct3D 11.4는 WDDM 2.1 지원 및 UHDTV HDR10 형식(ST 2084) 지원, UWP 애플리케이션에 대한 가변 주사율 지원을 포함한다.

Direct3D 12

Direct3D 12[114]는 이전 버전보다 낮은 수준의 하드웨어 추상화를 허용하여 향후 애플리케이션이 멀티스레드 스케일링을 크게 개선하고 CPU 활용도를 낮출 수 있도록 한다. 이는 간접 드로잉, 디스크립터 테이블, 간결한 파이프라인 상태 객체 및 드로우 호출 번들과 같은 새로운 기능을 통해 Direct3D 추상화 계층을 기본 하드웨어와 더 잘 일치시킴으로써 달성된다. 드라이버 오버헤드를 줄이는 것은 AMD의 맨틀과 마찬가지로 Direct3D 12의 주요 매력이다.[114] 수석 개발자 맥스 맥멀렌(Max McMullen)의 말에 따르면, Direct3D 12의 주요 목표는 "콘솔 수준의 효율성"과 개선된 CPU 병렬성을 달성하는 것이다.[115][116][117]

엔비디아는 Direct3D 12에 대한 광범위한 지원을 발표했지만, 게임 엔진 개발자는 애플리케이션 코드에서 직접 GPU 리소스를 관리하는 데 열광할 수 있는 반면, "다른 많은 사람들"은 그렇게 해야 하는 것에 만족하지 않을 것이라고 언급하며 새로운 API의 보편적인 매력에 대해서는 다소 유보적인 입장을 보였다.[118]

일부 새로운 하드웨어 기능도 Direct3D 12에 포함되어 있다,[110][108][119] 여기에는 셰이더 모델 5.1,[120] 볼륨 타일 리소스 (티어 2),[120] 셰이더 지정 스텐실 참조 값, 유형화된 UAV 로드, 보수적 래스터화 (티어 1), 보수적 래스터화를 이용한 더 나은 충돌 및 컬링, 래스터라이저 순서 뷰(ROV), 표준 스위즐, 기본 텍스처 매핑, 스왑 체인, 스위즐 리소스압축 리소스,[121] 추가 블렌드 모드,[122] 프로그래밍 가능한 블렌딩 및 픽셀 순서 UAV를 사용한 효율적인 순서 독립적 투명도(OIT)가 포함된다.[123]

파이프라인 상태 객체(PSO)[124]는 Direct3D 11에서 진화했으며, 새로운 간결한 파이프라인 상태는 프로세스가 단순화되었음을 의미한다. DirectX 11은 성능을 저해하면서 상태를 변경하는 방법에 대한 유연성을 제공했다. 프로세스를 단순화하고 파이프라인 (예: 픽셀 셰이더 상태)을 통합함으로써 프로세스가 더 간소화되어 오버헤드를 크게 줄이고 그래픽 카드가 각 프레임에 대해 더 많은 호출을 그릴 수 있게 되었다. 일단 생성되면 PSO는 변경할 수 없다.[125]

루트 서명은 명령어 목록을 셰이더에 필요한 리소스에 연결하는 구성을 도입한다. 이는 셰이더가 사용할 리소스의 레이아웃을 정의하고 어떤 리소스가 파이프라인에 바인딩될지 지정한다. 그래픽 명령어 목록은 그래픽 및 컴퓨트 루트 서명을 모두 가지는 반면, 컴퓨트 명령어 목록은 컴퓨트 루트 서명만 가진다. 이러한 루트 서명은 서로 완전히 독립적이다. 루트 서명은 셰이더가 사용할 데이터 유형을 레이아웃하지만 실제 메모리나 데이터를 정의하거나 매핑하지는 않는다.[126]

루트 파라미터는 루트 서명의 한 가지 유형의 항목이다. 런타임에 수정되는 루트 파라미터의 실제 값을 루트 인수라고 한다. 이것이 셰이더가 읽는 데이터이다.[126]

Direct3D 11 내에서 명령은 CPU에서 GPU로 하나씩 전송되며, GPU는 이러한 명령을 순차적으로 처리한다. 이는 명령이 CPU가 선형 방식으로 전송할 수 있는 속도에 의해 병목 현상이 발생함을 의미한다. DirectX 12 내에서 이러한 명령은 단일 패키지 내의 모든 필수 정보를 포함하는 명령어 목록으로 전송된다. GPU는 CPU로부터 추가 정보를 기다릴 필요 없이 단일 프로세스에서 이 명령을 계산하고 실행할 수 있다.

이러한 명령어 목록 안에는 번들이 있다. 이전에는 명령이 GPU에 의해 취해지고 사용된 다음 잊혀졌으나, 번들은 재사용될 수 있다. 이는 GPU의 작업량을 줄여주며 반복되는 에셋을 훨씬 더 빠르게 사용할 수 있음을 의미한다.

Direct3D 11에서 리소스 바인딩은 현재 개발자들에게 상당히 편리하지만, 그 비효율성은 여러 현대적인 하드웨어 기능이 지나치게 과소평가되고 있음을 의미한다. 게임 엔진이 DX11에서 리소스를 필요로 할 때마다 매번 데이터를 처음부터 그려야 했으므로 반복적인 프로세스와 불필요한 사용을 의미했다. Direct3D 12에서 디스크립터 힙과 테이블은 가장 자주 사용되는 리소스를 개발자가 GPU가 쉽고 빠르게 액세스할 수 있는 테이블에 할당할 수 있음을 의미한다. 이는 동일한 하드웨어에서 Direct3D 11보다 더 나은 성능에 기여할 수 있지만, 개발자에게는 더 많은 작업이 필요하다.

동적 힙 또한 Direct3D 12의 기능이다.[127]

Direct3D 12는 명시적 멀티 어댑터 지원을 특징으로 하며, 다중 GPU(mGPU) 구성 시스템에 대한 명시적인 제어를 허용한다. 이러한 구성은 동일한 하드웨어 벤더뿐만 아니라 서로 다른 하드웨어 벤더의 그래픽 어댑터로도 구축할 수 있다.[128]

윈도우 7 SP1에 대한 D3D 12의 실험적 지원은 마이크로소프트에 의해 2019년에 전용 NuGet 패키지를 통해 출시되었다.[129][130][131]

  • Direct3D 12 버전 1607 – 2016년 8월 2일에 출시된 윈도우 10 Anniversary 업데이트 (버전 1607)와 함께 Direct3D 12 런타임이 업데이트되어 명시적 멀티스레딩 및 프로세스 간 통신을 위한 구조를 지원하며, 개발자가 현대적인 대규모 병렬 GPU를 활용할 수 있게 되었다.[132] 다른 기능으로는 업데이트된 루트 서명 버전 1.1과 HDR10 형식 및 가변주사율 지원이 있다.
  • Direct3D 12 버전 1703 – 2017년 4월 11일에 출시된 윈도우 10 크리에이터스 업데이트 (버전 1703)와 함께 Direct3D 12 런타임이 업데이트되어 셰이더 모델 6.0 및 DXIL을 지원한다. 셰이더 모델 6.0은 윈도우 10 Anniversary 업데이트 (버전 1607) 및 WDDM 2.1이 필요하다. 새로운 그래픽 기능으로 뎁스 바운드 테스팅 및 프로그래밍 가능한 MSAA가 있다.[133]
  • Direct3D 12 버전 1709 – 2017년 10월 17일에 출시된 윈도우 10 Fall 크리에이터스 업데이트 (버전 1709)의 Direct3D는 디버깅 기능이 향상되었다.[133]
  • Direct3D 12 버전 1809 – 윈도우 10 2018년 10월 업데이트 (버전 1809)는 DirectX 레이트레이싱을 지원하여 GPU가 해당 API의 이점을 누릴 수 있게 한다.
  • Direct3D 12 버전 1903 – 윈도우 10 2019년 5월 업데이트 (버전 1903)는 DirectML 및 NPU를 지원한다.[134][135] DirectML은 컴퓨트 셰이더텐서 셰이더를 모두 지원할 수 있다.
  • Direct3D 12 버전 2004 – 윈도우 10 2020년 5월 업데이트 (버전 2004)는 DirectX 12 얼티밋, 메시 및 증폭 셰이더,[136] 샘플러 피드백,[137] DirectX 레이트레이싱 티어 1.1[138] 및 메모리 할당 개선 사항을 지원한다.[139]
  • Direct3D 12 버전 21H2 – 윈도우 10 버전 21H2 및 윈도우 11 버전 21H2는 DirectStorage를 지원한다.

아키텍처

Abstract Layer

Direct3D는 마이크로소프트 DirectX API 하위 시스템 구성 요소이다. Direct3D의 목적은 그래픽 애플리케이션과 그래픽 하드웨어 드라이버 간의 통신을 추상화하는 것이다. 이는 GDI와 비교할 수 있는 수준의 얇은 추상 계층으로 제공된다 (첨부된 다이어그램 참조). Direct3D는 GDI가 부족한 수많은 기능을 포함하고 있다.

Direct3D는 즉시 모드 그래픽 API이다. 모든 비디오 카드 3D 기능(변환, 클리핑, 조명, 재질, 텍스처, 깊이 버퍼링 등)에 대한 저레벨 인터페이스를 제공한다. 한때는 고레벨의 보존 모드 구성 요소가 있었으나, 현재는 공식적으로 중단되었다.

Direct3D 즉시 모드는 장치, 리소스 및 스왑 체인이라는 세 가지 주요 추상화를 제공한다 (첨부된 다이어그램 참조). 장치는 3D 장면 렌더링을 담당한다. 장치는 서로 다른 렌더링 기능을 갖춘 인터페이스를 제공한다. 예를 들어, 모노 장치는 흰색과 검은색 렌더링을 제공하는 반면, RGB 장치는 색상으로 렌더링한다. 장치에는 네 가지 유형이 있다:

Device
  • 참조(Reference) 장치: 하드웨어에서 아직 사용할 수 없는 새로운 기능을 시뮬레이트한다. 이 장치 유형을 사용하려면 Direct3D SDK를 설치해야 한다.
  • Null 참조 장치: 아무것도 수행하지 않는다. 이 장치는 SDK가 설치되지 않고 참조 장치가 요청될 때 사용된다.
  • 플러그형 소프트웨어 장치: 소프트웨어 렌더링을 수행한다. 이 장치는 DirectX 9.0과 함께 도입되었다.[140]

모든 장치는 하나 이상의 스왑 체인을 포함한다. 스왑 체인은 하나 이상의 백 버퍼 서피스로 구성된다. 렌더링은 백 버퍼에서 발생한다.

또한 장치는 리소스 컬렉션을 포함하며, 렌더링 중에 특정 데이터가 사용된다. 각 리소스에는 네 가지 속성이 있다:

  • 유형: 리소스의 유형을 결정한다: 서피스, 볼륨, 텍스처, 큐브 텍스처, 볼륨 텍스처, 서피스 텍스처, 인덱스 버퍼 또는 정점 버퍼.
  • :[141] 런타임에 의해 리소스가 관리되는 방식과 저장되는 위치를 설명한다. 기본 풀에서 리소스는 장치 메모리에만 존재한다. 관리형 풀의 리소스는 시스템 메모리에 저장되며 필요할 때 장치로 전송된다. 시스템 메모리 풀의 리소스는 시스템 메모리에만 존재한다. 마지막으로 스크래치 풀은 기본적으로 시스템 메모리 풀과 같지만 리소스가 하드웨어 제한을 받지 않는다.
  • 형식: 메모리에 있는 리소스 데이터의 레이아웃을 설명한다. 예를 들어 D3DFMT_R8G8B8 형식 값은 24비트 색 깊이를 의미한다 (빨간색 8비트, 녹색 8비트, 파란색 8비트).
  • 사용량: 플래그 비트 컬렉션과 함께 애플리케이션에서 리소스가 사용되는 방식을 설명한다. 이러한 플래그는 동적 또는 정적 액세스 패턴에서 어떤 리소스가 사용되는지를 결정한다. 정적 리소스 값은 로드된 후 변경되지 않지만, 동적 리소스 값은 수정될 수 있다.

Direct3D는 두 가지 디스플레이 모드를 구현한다:

  • 전체 화면 모드: Direct3D 애플리케이션은 디스플레이 장치에 대한 모든 그래픽 출력을 생성한다. 이 모드에서 Direct3D는 프로그래머의 개입 없이 자동으로 Alt-Tab을 캡처하고 화면 해상도 및 픽셀 형식을 설정/복원한다. 이는 '독점 협력 모드'로 인해 디버깅에 많은 문제를 제공한다.
  • 창 모드: 결과가 창 영역 내에 표시된다. Direct3D는 디스플레이에서 그래픽 출력을 생성하기 위해 GDI와 통신한다. 창 모드는 드라이버 지원에 따라 전체 화면과 동일한 수준의 성능을 가질 수 있다.

파이프라인

Direct3D 11 graphics pipeline process

마이크로소프트 Direct3D 11 API는 정점, 텍스처, 버퍼 및 상태 그룹을 화면의 이미지로 변환하는 프로세스를 정의한다. 이 프로세스는 몇 개의 뚜렷한 스테이지가 있는 렌더링 파이프라인으로 설명된다. Direct3D 11 파이프라인의 다양한 스테이지는 다음과 같다:[142]

  1. 입력-어셈블러:[143] 애플리케이션에서 제공하는 정점 버퍼에서 정점 데이터를 읽어 파이프라인으로 보낸다.
  2. 정점 셰이더:[144] 변환, 스키닝 또는 조명과 같이 한 번에 하나의 정점에 대해 작업을 수행한다.
  3. 헐-셰이더:[145] 패치 제어 포인트 세트에 대해 작업을 수행하고 패치 상수라고 하는 추가 데이터를 생성한다.
  4. 테셀레이터:[146] 지오메트리를 세분화하여 헐의 고차 표현을 생성한다.
  5. 도메인-셰이더:[147] 테셀레이션 스테이지에서 출력된 정점에 대해 정점 셰이더와 거의 동일한 방식으로 작업을 수행한다.
  6. 지오메트리 셰이더:[148] 삼각형, 포인트 또는 선과 같은 전체 프리미티브를 처리한다. 프리미티브가 주어지면 이 스테이지는 이를 폐기하거나 하나 이상의 새로운 프리미티브를 생성한다.
  7. 스트림-출력:[149] 이전 스테이지의 결과를 메모리에 쓸 수 있다. 이는 데이터를 파이프라인으로 다시 순환시키는 데 유용하다.
  8. 래스터라이저:[150][151] 프리미티브를 픽셀로 변환하고 이 픽셀을 픽셀 셰이더로 보낸다. 래스터라이저는 또한 보이지 않는 것을 클리핑하거나 정점 데이터를 픽셀당 데이터로 보간하는 등의 다른 작업을 수행할 수 있다.
  9. 픽셀 셰이더:[152] 렌더 타겟에 기록될 최종 픽셀 색상을 결정하며 깊이 버퍼에 기록될 깊이 값을 계산할 수도 있다.
  10. 출력-머저:[153] 최종 결과를 만들기 위해 다양한 유형의 출력 데이터(픽셀 셰이더 값, 알파 블렌딩, 깊이/스텐실 등)를 병합한다.

둥근 상자로 예시된 파이프라인 스테이지는 완전히 프로그래밍 가능하다. 애플리케이션은 해당 스테이지에 대해 완료될 정확한 작업을 설명하는 셰이더 프로그램을 제공한다. 많은 스테이지는 선택 사항이며 완전히 비활성화될 수 있다.

기능 수준

Direct3D 5에서 9까지, 새로운 버전의 API가 새로운 하드웨어 기능을 지원하게 되었을 때, 대부분은 선택 사항이었다. 각 그래픽 벤더는 기본 필수 기능을 외에 자신만의 지원 기능 세트를 유지했다. 개별 기능에 대한 지원은 "기능 비트" 또는 "캡"을 사용하여 결정해야 했으며, 이는 교차 벤더 그래픽 프로그래밍을 복잡한 작업으로 만들었다.

Direct3D 10은 지원되는 텍스처 형식 및 작업에 대한 몇 가지 선택적 기능만 있는, 대부분의 그래픽 카드가 준수해야 하는 가장 인기 있는 Direct3D 9 기능을 기반으로 한 훨씬 단순화된 필수 하드웨어 요구 사항 세트를 도입했다.

Direct3D 10.1은 몇 가지 새로운 필수 하드웨어 요구 사항을 추가했으며, 10.0 하드웨어 및 드라이버와 호환성을 유지하기 위해 이러한 기능은 "기능 수준"이라는 두 세트로 캡슐화되었으며, 10.1 수준은 10.0 수준의 상위 집합을 형성했다. Direct3D 11.0, 11.1 및 12가 새로운 하드웨어 지원을 추가함에 따라 새로운 필수 기능은 더 높은 기능 수준으로 그룹화되었다.[56]

Direct3D 11은 또한 WDDM 드라이버를 사용하는 다양한 Direct3D 9 카드를 캡슐화하는 세 가지 기능 수준을 가진 Direct3D 10 API의 하위 집합인 "10level9"를 도입했으며, Direct3D 11.1은 Direct3D 11.2 및 이후 버전에서 확장된 모든 수준에 대한 몇 가지 선택적 기능을 다시 도입했다.[154]

이 접근 방식을 통해 개발자는 렌더링 파이프라인을 통합하고 최신 런타임의 성능 및 사용성 향상을 활용하여 새로운 하드웨어와 이전 하드웨어 모두에서 단일 API 버전을 사용할 수 있다.[60]

새로운 기능 수준은 업데이트된 API 버전과 함께 도입되며 일반적으로 다음을 캡슐화한다:

  • 주요 필수 기능 – (Direct3D 11.0, 12),
  • 몇 가지 사소한 기능 (Direct3D 10.1, 11.1), 또는
  • 이전에 선택 사항이었던 기능의 공통 세트 (Direct3D 11.0 "10 수준 9").

각 상위 수준은 하위 수준의 엄격한 상위 집합이며, 핵심 기능으로 이동하는 소수의 새로운 기능이나 이전에 선택적이었던 기능만 상위 수준에 포함된다.[67] 새로운 셰이더 모델 및 렌더링 스테이지와 같은 Direct3D API의 주요 개정판에 포함된 더 고급 기능은 상위 수준 하드웨어에서만 노출된다.[65][66]

특정 텍스처 작업 및 리소스 형식에 대한 지원을 나타내기 위해 별도의 기능이 존재하며, 이는 기능 플래그의 조합을 사용하여 각 텍스처 형식별로 지정된다.[155][156]

기능 수준은 밑줄을 구분 기호로 사용하고("12_1"), API/런타임 버전은 점을 사용한다("Direct3D 11.4").

Direct3D 11 수준

윈도우 10용 Direct3D 11.4에는 D3D_FEATURE_LEVEL 구조체에 의해 제공되는 9개의 기능 수준이 있다. 수준 9_1, 9_2 및 9_3(통칭 Direct3D 10 수준 9)은 인기 있는 Direct3D 9 카드의 다양한 기능을 재캡슐화하고, 수준 10_0, 10_1은 Direct3D 10의 각각의 레거시 버전을 참조하며,[65] 11_0 및 11_1은 Direct3D 11 및 Direct3D 11.1 API와 런타임에서 도입된 기능을 반영하고, 수준 12_0 및 12_1은 Direct3D 12 API에서 도입된 새로운 기능 수준에 해당한다.

Direct3D 11.4의 기능 수준
기능 수준 필수 하드웨어 기능 선택적 기능
9_1 셰이더 모델 2.0 (vs_2_0/ps_2_0), 2K 텍스처, 볼륨 텍스처, 이벤트 쿼리, BC1-3(a.k.a. DXTn), 기타 몇 가지 특정 기능. 빈칸
9_2 오클루전 쿼리, 부동 소수점 형식 (블렌딩 없음), 확장 캡, 모든 9_1 기능.
9_3 인스턴싱 및 추가 셰이더 캡이 포함된 vs_2_a/ps_2_x, 4K 텍스처, 다중 렌더 타겟(4 MRTs), 부동 소수점 블렌딩 (제한적), 모든 9_2 기능.
10_0 셰이더 모델 4.0, 지오메트리 셰이더, 스트림 아웃, 알파-투-커버리지, 8K 텍스처, MSAA 텍스처, 양면 스텐실, 일반 렌더 타겟 뷰, 텍스처 배열, BC4/BC5, 전체 부동 소수점 형식 지원, 모든 9_3 기능. 논리 블렌드 연산, DirectCompute (CS 4.0/4.1), 확장 픽셀 형식.[154]
10_1 셰이더 모델 4.1, 큐브맵 배열, 확장 MSAA, 모든 10_0 기능.
11_0 셰이더 모델 5.0/5.1, 헐 & 도메인 셰이더, DirectCompute (CS 5.0/5.1), 16K 텍스처, BC6H/BC7, 확장 픽셀 형식, 모든 10_1 기능. 샘플 수 강제 사용 시 UAV 전용 렌더링, 상수 버퍼 오프셋 및 부분 업데이트, 배정밀도(64비트) 부동 소수점 연산, 최소 부동 소수점 정밀도(10- 또는 16비트), 최소/최대 필터링.
11_1 논리 블렌드 연산, 타겟 독립적 래스터화, 슬롯 수가 증가된 모든 파이프라인 스테이지의 UAV, 샘플 수 강제 사용 시 UAV 전용 렌더링, 상수 버퍼 오프셋 및 부분 업데이트, 모든 11_0 기능. 타일 리소스 (네 가지 티어), 보수적 래스터화 (세 가지 티어), 픽셀 셰이더의 스텐실 참조 값, 래스터라이저 순서 뷰, 추가 형식에 대한 유형화된 UAV 로드.
12_0 타일 리소스 티어 2 (Texture2D), 유형화된 UAV 로드 (추가 형식).
12_1 보수적 래스터화 티어 1, 래스터라이저 순서 뷰.

Direct3D 12 수준

윈도우 10용 Direct3D 12는 가상 메모리 주소 변환을 지원하는 기능 수준 11_0 및 11_1을 준수하는 그래픽 하드웨어가 필요하며 WDDM 2.0 드라이버가 필요하다. 수준 11_0 및 11_1에서 선택 사항인 Direct3D 12에 의해 노출된 새로운 기능이 포함된 12_0 및 12_1이라는 두 가지 새로운 기능 수준이 있다.[157] 이전에 선택 사항이었던 일부 기능은 수준 11_0 및 11_1에서 기준으로 재조정된다. 셰이더 모델 6.0은 윈도우 10 크리에이터스 업데이트와 함께 출시되었으며 윈도우 10 Anniversary 업데이트 및 WDDM 2.1 드라이버가 필요하다.

Direct3D 12 기능 수준
수준 필수 기능 선택적 기능
11_0 Direct3D 11의 모든 필수 11_0 기능, 셰이더 모델 5.1, 리소스 바인딩 티어 1. 논리 블렌드 연산, 배정밀도(64비트) 부동 소수점 연산, 최소 부동 소수점 정밀도(10- 또는 16비트).

리소스 바인딩 (세 가지 티어), 타일 리소스 (네 가지 티어), 보수적 래스터화 (세 가지 티어), 픽셀 셰이더의 스텐실 참조 값, 래스터라이저 순서 뷰, 추가 형식에 대한 유형화된 UAV 로드, 뷰 인스턴싱.

셰이더 모델 6.0–6.7

메타명령, 가변 셰이딩 속도, 레이트레이싱, 메시 셰이더, 샘플러 피드백.

기타 선택적 기능.[158]

모든 파이프라인 스테이지의 UAV, 샘플 수 강제 사용 시 UAV 전용 렌더링, 상수 버퍼 오프셋 및 부분 업데이트.
11_1 논리 블렌드 연산, 타겟 독립적 래스터화, 증가된 UAV 슬롯 수.
12_0 리소스 바인딩 티어 2, 타일 리소스 티어 2 (Texture2D), 유형화된 UAV 로드 (추가 형식), 셰이더 모델 6.0.
12_1 보수적 래스터화 티어 1, 래스터라이저 순서 뷰.
12_2 DirectX 12 얼티밋: 셰이더 모델 6.5, 레이트레이싱 티어 1.1, 메시 셰이더, 가변 속도 셰이딩, 샘플러 피드백, 리소스 바인딩 티어 3, 타일 리소스 티어 3 (Texture3D), 보수적 래스터화 티어 3, 40비트 가상 주소 공간.

Direct3D 12는 메모리에 대한 명시적 제어를 허용하는 개편된 리소스 바인딩 모델을 도입한다. 추상 "리소스 뷰" 객체[159]는 이제 메모리 힙과 테이블을 사용하여 할당되는 리소스 디스크립터로 표현된다.[160] 리소스 바인딩 티어는 CBV(상수 버퍼 뷰), SRV(셰이더 리소스 뷰) 및 UAV(순서 없는 액세스 뷰)를 사용하여 주소를 지정할 수 있는 리소스의 최대 수와 텍스처 샘플러 단위를 정의한다. 티어 3 하드웨어는 디스크립터 힙의 크기에 의해서만 제한되는 완전히 바인드리스(bindless) 리소스를 허용하는 반면, 티어 1 및 티어 2 하드웨어는 동시에 사용할 수 있는 디스크립터("뷰") 수에 약간의 제한을 둔다.[161][162]

리소스 바인딩 티어
리소스 제한 티어 1 티어 2 티어 3
CBV/SRV/UAV 힙 내 디스크립터 1M 1M >1M
셰이더 스테이지당 CBV 14 14 전체 힙
셰이더 스테이지당 SRV 128 전체 힙
모든 스테이지에 걸친 UAV 8, 64 64 전체 힙
셰이더 스테이지당 샘플러 16 전체 힙
기능 수준 11_1 하드웨어에서 64 슬롯

멀티스레딩

윈도우 비스타 이상의 WDDM 드라이버 모델은 하드웨어 또는 소프트웨어에서 임의로 많은 실행 컨텍스트 (또는 스레드)를 지원한다. 윈도우 XP는 Direct3D에 대한 멀티태스킹 액세스만 지원했으며, 별도의 애플리케이션이 서로 다른 창에서 실행되고 하드웨어 가속을 받을 수 있었지만, OS는 GPU가 수행할 수 있는 작업에 대한 제어가 제한적이었고 드라이버는 실행 스레드를 임의로 전환할 수 있었다.

런타임을 멀티스레드 모드로 실행하는 기능은 Direct3D 11 런타임과 함께 도입되었다. 각 실행 컨텍스트에는 GPU의 리소스 뷰가 제공된다. 실행 컨텍스트는 서로로부터 보호되지만, 악의적이거나 잘못 작성된 앱은 사용자 모드 드라이버에서 실행을 제어할 수 있으며 명령을 수정하여 GPU 메모리 내의 다른 프로세스에서 데이터를 잠재적으로 액세스할 수 있다. 다른 앱의 액세스로부터 보호되더라도, 잘 작성된 앱은 여전히 다른 애플리케이션으로 인해 발생하는 오류 및 장치 손실로부터 스스로를 보호해야 한다.

OS는 스레드를 스스로 관리하여 하드웨어가 적절할 때 한 스레드에서 다른 스레드로 전환할 수 있도록 하며, 통합 OS 커널 메모리 관리를 통해 메모리 관리 및 페이징 (시스템 메모리 및 디스크로)도 처리한다.

더 세밀한 컨텍스트 전환, 즉 단일 명령 레벨이나 명령 배치가 아니라 셰이더 명령어 레벨에서 두 개의 실행 스레드를 전환할 수 있는 기능은 윈도우 8과 함께 제공된 WDDM/DXGI 1.2에서 도입되었다.[86] 이는 애플리케이션이 단일 명령/명령 배치의 실행 시간이 매우 길어 OS 감시 타이머에 의해 종료되어야 할 경우 발생할 수 있는 잠재적인 스케줄링 문제를 극복한다.[163]

WDDM 2.0 및 DirectX 12는 완전히 멀티스레드 드로우 호출을 허용하도록 재설계되었다. 이는 모든 리소스를 불변 (즉, 읽기 전용)으로 만들고, 렌더링 상태를 직렬화하고, 드로우 호출 번들을 사용하여 달성되었다. 이를 통해 커널 모드 드라이버에서 복잡한 리소스 관리를 피하고 동일한 애플리케이션 내의 별도 렌더링 스레드에서 제공하는 동시 실행 컨텍스트를 통해 사용자 모드 드라이버로의 다중 재진입 호출이 가능해졌다.

Direct3D Mobile

Direct3D 모바일은 Direct3D에서 파생되었으나 더 작은 메모리 풋프린트를 가진다. 윈도우 CE는 Direct3D 모바일 지원을 제공한다.[164]

대체 구현

Direct3D API의 다음과 같은 대체 구현이 존재한다. 이들은 윈도우가 아닌 플랫폼과 일부 DX 지원 버전이 없는 하드웨어에 유용하다:

  • DXVK – Direct3D 8/9/10/11을 위한 오픈 소스 벌컨 기반 번역 계층으로, 와인을 사용하여 리눅스에서 3D 애플리케이션을 실행할 수 있게 한다.[165][166] 리눅스용 프로톤/스팀[167]에서 사용된다. DXVK는 리눅스에서 대규모의 최신 윈도우 게임을 실행할 수 있다.
    • D7VK – Direct3D 3, 5, 6, 7 전용 DXVK 포크.[168][169][170][171]
    • D8VK – 리눅스에서 Direct3D 8 지원을 추가하기 위한 폐기된 DXVK 포크.[172] 2024년 7월 10일에 출시된 DXVK 버전 2.4와 병합되었다.
    • D9VK – Direct3D 9 지원을 추가하기 위한 폐기된 DXVK 포크로,[173] 리눅스의 스팀/프로톤에 포함되어 있다.[174] 2019년 12월 16일 D9VK는 DXVK로 병합되었다.[175]
  • Gallium Nine – Gallium Nine은 Direct3D 9 애플리케이션을 리눅스에서 네이티브로 실행할 수 있게 하며, 호출 번역이 없기 때문에 거의 네이티브에 가까운 속도를 허용한다. 와인 및 메사에 의존한다.[176][177]
  • vkd3d – vkd3d는 벌컨 위에 구축된 오픈 소스 3D 그래픽 라이브러리로, 벌컨 위에 Direct3D 12 애플리케이션을 실행할 수 있게 한다.[178] 주로 와인 프로젝트에서 사용되며,[179][180] 현재 밸브의 프로톤 프로젝트와 함께 리눅스 스팀에 포함되어 있다.
  • 와인D3D – 와인 오픈 소스 프로젝트는 OpenGL로 번역을 통해 Direct3D API를 구현하고 있다.[181] 와인의 구현은 특정 조건 하에서 윈도우에서도 실행될 수 있다.[182]

관련 도구

D3DX

Direct3D는 유클리드 벡터, 행렬 및 색상에 대한 공통 수학 계산을 수행하고, look-at 및 사영 행렬, 스플라인 보간법을 계산하며, 3D 그래픽 프로그래밍에 사용되는 셰이더 컴파일 또는 어셈블, 압축된 골격 애니메이션 저장 및 행렬 스택과 같은 더 복잡한 작업을 수행하도록 설계된 도구 라이브러리인 D3DX와 함께 제공된다. 탄젠트 공간 계산, 메시 단순화, 미리 계산된 복사 전송, 정점 캐시 최적화 및 스트립화, 3D 텍스트 메시 생성기와 같은 3D 메시에 대해 복잡한 작업을 제공하는 함수가 많이 있다. 2D 기능으로는 화면 공간 선, 텍스트 및 스프라이트 기반 입자 시스템을 그리기 위한 클래스가 포함된다. 공간 기능에는 다양한 교차 루틴, 바리센트릭 좌표 간의 변환 및 바운딩 박스/구 생성기가 포함된다. D3DX는 DLL로 제공된다. D3DX는 윈도우 8부터는 더 이상 사용되지 않으며 Windows 스토어 앱에서는 사용할 수 없다.[183]

이전 버전의 D3DX에 있던 일부 기능은 Direct3D 11에서 제거되었으며 이제 별도의 소스로 제공된다:[184]

  • 윈도우 SDK 및 비주얼 스튜디오[185]
  • 수학 라이브러리의 많은 부분이 제거되었다. 마이크로소프트는 대신 DirectX 수학 라이브러리 사용을 권장한다.
  • 구면 조화(Spherical harmonics) 수학이 제거되었으며 이제 소스로 배포된다.[186]
  • 효과 프레임워크가 제거되었으며 이제 CodePlex를 통해 소스로 배포된다.[187]
  • 메시 인터페이스와 지오메트리 기능이 제거되었으며 이제 DirectXMesh 지오메트리 처리 라이브러리 아래 CodePlex를 통해 소스로 배포된다.[188]
  • 텍스처 기능이 제거되었으며 이제 DirectXTex 텍스처 처리 라이브러리 아래 CodePlex를 통해 소스로 배포된다.[189]
  • 일반 헬퍼가 제거되었으며 이제 DirectX 툴 킷(DirectXTK) 프로젝트 아래 CodePlex를 통해 소스로 배포된다.[190]
  • 아이소차트(isochart) 텍스처 아틀라스가 제거되었으며 이제 UVAtlas 프로젝트 아래 CodePlex를 통해 소스로 배포된다.[191]

DXUT

DXUT(샘플 프레임워크라고도 함)는 Direct3D API 위에 구축된 계층이다. 이 프레임워크는 프로그래머가 창 생성, 장치 생성, 윈도우 메시지 처리 및 장치 이벤트 처리와 같은 평범한 작업에 시간을 덜 소비하도록 돕기 위해 설계되었다. DXUT는 윈도우 SDK 8.0에서 제거되었으며 이제 CodePlex를 통해 소스로 배포된다.[192]

같이 보기

각주

  1. “Configuring Depth-Stencil Functionality”. Microsoft. 2020년 8월 19일. 
  2. “RenderStateManager.UseWBuffer”. Microsoft. 2009년 11월 6일. 
  3. “Texture Blending (Direct3D 9)”. Microsoft. 2021년 1월 6일. 
  4. “Geometry Blending (Direct3D 9)”. Microsoft. 2021년 1월 6일. 
  5. “HLSL”. Microsoft. 2021년 8월 4일. 
  6. “Effects (Direct3D 11)”. Microsoft. 2021년 6월 11일. 
  7. “DirectX Software Development Kit, October 2006”. Microsoft. 2011년 11월 2일에 원본 문서에서 보존된 문서. 
  8. “Windows Advanced Rasterization Platform (WARP) Guide – WARP Architecture and Performance”. MSDN. 2022년 10월 11일. 
  9. “DirectX 8: Raising the Ante for Realism in Graphics” (PDF). 《evga.com》. 2023년 9월 6일에 확인함. 
  10. “Home> GPUs ATI SMARTSHADER Technology - Powering the next generation Radeon”. 《anandtech.com》. 2017년 4월 4일에 원본 문서에서 보존된 문서. 2023년 9월 6일에 확인함. 
  11. “Vertex Shaders and Pixel Shaders”. 《thg.ru/》. 2023년 9월 6일에 확인함. 
  12. Penfold, Dom (2002년 1월 16일). “Vertex Shaders and Pixel Shaders”. 2012년 9월 1일에 원본 문서에서 보존된 문서. 2026년 3월 15일에 확인함. 
  13. “MicroSoft DirectX Downloads for Windows (Win95, Win98, Win98SE, WinME, Win2000, WinXP)”. 《www.falconfly.de》. 2006년 11월 10일에 원본 문서에서 보존된 문서. 2022년 1월 11일에 확인함. 
  14. “DirectX 9.0c End-User Runtime”. 《Microsoft》. 2007년 10월 17일. 2012년 9월 11일에 원본 문서에서 보존된 문서. 2022년 1월 11일에 확인함. 
  15. “Qube Soft Management Team”. qubesoft.com. 2017년 4월 4일. 2017년 4월 6일에 원본 문서에서 보존된 문서. 2017년 4월 5일에 확인함. 
  16. 인용 오류: 잘못된 <ref> 태그; ":2"이라는 이름을 가진 ref에 텍스트가 없습니다.
  17. Prosise, Jeff (1995년 5월 16일). “Joining the Multimedia Party”. 《PC 매거진. 2022년 8월 20일에 확인함. 
  18. Thompson, Nigel (August 1996). “Building a Scene Using Retained Mode Direct3D” (PDF). 《게임 디벨로퍼 매거진》. 2021년 1월 26일에 원본 문서 (PDF)에서 보존된 문서. 2022년 8월 20일에 확인함. 
  19. Berkes, Otto (2015년 4월 12일). “DirectX”. 《오토 버크스의 블로그》. 2022년 8월 22일에 확인함. 
  20. Chen, Raymond (2004년 1월 22일). “What happened to DirectX 4?”. 《The Old New Thing》. 마이크로소프트. 2022년 8월 28일에 확인함. 
  21. “Press Release-Microsoft Meltdown (February 1997)”. 마이크로소프트. 
  22. “Press Release-Microsoft Meltdown (July 1997)”. 마이크로소프트. 
  23. Ron Fosner. “Get Fast and Simple 3D Rendering with DrawPrimitive and DirectX 5.0”. Microsoft Systems Journal. 
  24. “Direct3D 7 Immediate Mode Framework Programming 3: Multitexturing”. gamedev.net. 2000년 5월 29일. 2011년 8월 5일에 원본 문서에서 보존된 문서. 2011년 9월 17일에 확인함. 
  25. “Microsoft Ships Final Release of DirectX 6.0”. 마이크로소프트. 1998년 8월 7일. 
  26. “Microsoft Ships DirectX 6.1”. 마이크로소프트. 1999년 2월 3일. 
  27. “Bill Gates April 1997 Talisman Update” (PDF). 마이크로소프트. 1997년 5월 5일. 2015년 12월 8일에 원본 문서 (PDF)에서 보존된 문서. 2015년 10월 31일에 확인함. 
  28. “DDS (DirectDraw Surface format)”. MSDN. 2020년 8월 19일. 
  29. “DirectX 7: [due] July 99”. 《게임스팟》 (UK). March 1999. 1999년 5월 8일에 원본 문서에서 보존된 문서. 2019년 7월 20일에 확인함. 
  30. “Microsoft Announces Release of DirectX 8.0”. 마이크로소프트. 2000년 11월 9일. 2015년 1월 7일에 확인함. 
  31. “Direct Action Feature: DirectX 8.0”. 《게임스팟》 (UK). 2001년 2월 23일에 원본 문서에서 보존된 문서. 2019년 7월 20일에 확인함. 
  32. “DirectX 8 Graphics and Video: A Fresh Start”. gamedev.net. 2000년 11월 30일. 2007년 6월 4일에 원본 문서에서 보존된 문서. 2007년 2월 18일에 확인함. 
  33. “Direct3D 9 Graphics”. MSDN. 2014년 9월 30일에 확인함. 
  34. “Writing HLSL Shaders in Direct3D 9”. MSDN. 2014년 9월 30일에 확인함. 
  35. “HLSL in Direct3D 9.0”. 《마이크로소프트》. 2010년 8월 27일에 원본 문서에서 보존된 문서. 
  36. “Multiple Render Targets (Direct3D 9)”. MSDN. 2014년 9월 30일에 확인함. 
  37. “Multiple-element Textures (Direct3D 9)”. MSDN. 2014년 9월 30일에 확인함. 
  38. “Stencil Buffer Techniques (Direct3D 9)”. MSDN. 2014년 9월 30일에 확인함. 
  39. “Direct3D 9Ex Improvements”. MSDN. 2014년 9월 30일에 확인함. 
  40. “Graphics APIs in Windows”. MSDN. August 2009. 
  41. “The role of the Windows Display Driver Model in the DWM”. 2006년 4월 2일. 
  42. “API Features (Direct3D 10)”. MSDN. 2014년 9월 30일에 확인함. 
  43. Microsoft Support (2009년 3월 17일). “Direct3D Retained Mode removed from Windows Vista”. 2013년 6월 1일에 원본 문서에서 보존된 문서. 
  44. “DirectX Software Development Kit”. 마이크로소프트. 2007년 2월 2일. 2012년 11월 18일에 원본 문서에서 보존된 문서. 
  45. “Resource Types (Direct3D 10)”. MSDN. 2014년 9월 30일에 확인함. 
  46. “API Layers (Direct3D 10)”. MSDN. 2014년 9월 30일에 확인함. 
  47. “CNet News”. 2014년 9월 30일에 확인함. 
  48. “Common-Shader Core”. 마이크로소프트. 2021년 6월 30일. 
  49. “Geometry Shader Features”. 마이크로소프트. 2019년 8월 23일. 
  50. “Shader Stages”. 마이크로소프트. 2016년 10월 11일. 
  51. “What Direct3D 10 is all about – Additional Improvements”. Tom's Hardware. 2006년 11월 8일. 
  52. “Direct3D 10.1 Features”. MSDN. 2014년 9월 30일에 확인함. 
  53. “Microsoft Presents DirectX 10.1 Details at SIGGRAPH”. ExtremeTech. 2007년 8월 7일. 
  54. “Direct3D 10.1 Features”. MSDN. 2021년 1월 6일. 
  55. “ID3D11Device::CheckMultisampleQualityLevels method”. MSDN. 2014년 9월 30일에 확인함. 
  56. Chuck Walbourn (2012년 6월 20일). “Direct3D Feature Levels”. 《Games for Windows and the DirectX SDK Blog》. 
  57. “D3D10_FEATURE_LEVEL1 enumeration”. MSDN. 2009년 11월 22일에 확인함. 
  58. “Direct3D feature levels”. MSDN. 2014년 9월 30일에 확인함. 
  59. “Direct3D 11 Features”. MSDN. 2014년 9월 30일에 확인함. 
  60. “Gamefest 2008 Presentations”. 마이크로소프트. 2013년 11월 13일에 원본 문서에서 보존된 문서. 
  61. “Nvision 08 Tech Presentations”. 엔비디아. 2011년 9월 16일에 확인함. 
  62. “DirectX Software Development Kit, November 2008”. 마이크로소프트. 2008년 11월 7일. 
  63. “AMD shows off world's first DirectX 11 GPU”. 엔가젯. 2009년 6월 3일. 
  64. “Introduction to the Direct3D 11 Graphics Pipeline - Presentation from GameFest 2008”. 마이크로소프트. 2008년 8월 27일. Slide 56. 2012년 11월 5일에 원본 문서에서 보존된 문서. 
  65. “Direct3D 11 on Downlevel Hardware”. MSDN. 2012년 11월 18일에 확인함. 
  66. “Windows Driver Kit – Supporting Direct3D 11”. MSDN. 2009년 6월 13일에 확인함. 
  67. “Direct3D feature levels”. MSDN. 2012년 7월 2일에 확인함. 
  68. “Using ATI hardware tessellation in DX9”. 2008년 7월 14일. 
  69. “AMD DX9 Tessellation SDK”. 2010년 11월 8일에 원본 문서에서 보존된 문서. 
  70. “Programming for Real-Time Tessellation on GPU” (PDF). 2011년 7월 27일에 원본 문서 (PDF)에서 보존된 문서. 
  71. “OpenGL Tessellation Samples”. 2010년 4월 9일에 원본 문서에서 보존된 문서. 
  72. “New Resource Types”. MSDN. 2014년 9월 30일에 확인함. 
  73. “Depth Bias”. MSDN. 2014년 9월 30일에 확인함. 
  74. “D3D11_RASTERIZER_DESC1 structure”. MSDN. 2014년 9월 30일에 확인함. 
  75. “Shader Model 5”. MSDN. 2014년 9월 30일에 확인함. 
  76. “Tessellation Overview”. 마이크로소프트. 2020년 9월 16일. 
  77. “Tessellation Overview”. MSDN. 2014년 9월 30일에 확인함. 
  78. “Description of the Platform Update for Windows Server 2008 and the Platform Update for Windows Vista”. Support.microsoft.com. 2012년 10월 2일. 2013년 6월 15일에 확인함. 
  79. “The Platform Update for Windows Vista – DirectX Developer Blog – Site Home – MSDN Blogs”. Blogs.msdn.com. 2009년 9월 10일. 2014년 4월 8일에 원본 문서에서 보존된 문서. 2013년 6월 15일에 확인함. 
  80. “Direct3D 11.1 Features”. MSDN. 2014년 9월 30일에 확인함. 
  81. “D3D11_FEATURE_DATA_D3D11_OPTIONS structure”. MSDN. 2014년 9월 30일에 확인함. 
  82. “DirectX feature improvements in Windows 8”. MSDN. 2014년 9월 30일에 확인함. 
  83. “Direct3D 11.1 Features”. MSDN. 2009년 9월 13일에 확인함. 
  84. “DXGI 1.2 Improvements”. MSDN. 2014년 9월 30일에 확인함. 
  85. “WDDM 1.2 features”. MSDN. 2014년 9월 30일에 확인함. 
  86. “Windows Display Driver Model Enhancements in Windows Developer Preview”. MSDN. 2011년 9월 13일. 
  87. “Scalar Types”. 2014년 10월 2일에 확인함. 
  88. “Intel's Haswell IGP to Feature DirectX 11.1, Increased Professional Application Support”. AnandTech. 2011년 8월 5일. 2011년 9월 13일에 원본 문서에서 보존된 문서. 
  89. “DirectX Graphics – Platform Update for Windows 7”. MSDN. 2012년 11월 14일. 
  90. “DirectX 11.1 and Windows 7”. 《Games for Windows and the DirectX SDK Blog》. 2012년 11월 13일. 
  91. “DirectX programming”. MSDN. 2013년 10월 31일에 원본 문서에서 보존된 문서. 2014년 9월 30일에 확인함. 
  92. “Direct3D 11.2 Features”. MSDN. 2014년 9월 30일에 확인함. 
  93. “D3D11_FEATURE_DATA_D3D11_OPTIONS1 structure”. MSDN. 2014년 9월 30일에 확인함. 
  94. “Windows 8.1 Feature Guide – DirectX programming”. 《MSDN Library》. 2013년 6월 26일. 2015년 8월 27일에 원본 문서에서 보존된 문서. 2013년 6월 27일에 확인함. 
  95. Bennett Sorbo (2013년 6월 26일). “What's New in Direct3D 11.2”. 《Channel9 – BUILD 2013》. 
  96. “What's new for Windows 8.1 Preview display drivers (WDDM 1.3)”. MSDN. 2014년 9월 30일에 확인함. 
  97. “DXGI 1.3 Improvements”. 《MSDN Library》. 2013년 6월 26일. 
  98. “Content Moved (Windows)”. 2016년 3월 4일에 원본 문서에서 보존된 문서. 2015년 3월 6일에 확인함. 
  99. “D3D11_TILED_RESOURCES_TIER enumeration”. MSDN. 2014년 9월 30일에 확인함. 
  100. Charles Hollemeersch, Matt Sandy (2013년 6월 26일). “Massive Virtual Textures for Games: Direct3D Tiled Resources”. 《Channel9 – BUILD 2013》. 
  101. “Direct3D 11.2 Features”. 《MSDN Library》. 2013년 6월 26일. 
  102. “MSDN Blogs”. MSDN. 2014년 9월 30일에 확인함. 
  103. “D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT structure”. MSDN. 2014년 9월 30일에 확인함. 
  104. “Raising the Bar with Direct3D”. 《Building Apps for Windows》. 2013년 10월 14일. 2014년 9월 30일에 확인함. 
  105. “Microsoft officially turns down Mantle”. 2013년 10월 16일. 2014년 9월 30일에 확인함. 
  106. Chris Tector's segment of http://channel9.msdn.com/Blogs/DirectX-Developer-Blog/DirectX-Evolving-Microsoft-s-Graphics-Platform (starting approx. 18 minute in.)
  107. “Rendering (Direct3D 12 Graphics) - Win32 apps”. 2021년 12월 30일. 
  108. Smith, Ryan (2014년 9월 18일). “Microsoft Details Direct3D 11.3 & 12 New Rendering Features”. 《AnandTech》. 2014년 9월 26일에 원본 문서에서 보존된 문서. 2014년 9월 30일에 확인함. 
  109. Smith, Ryan (2014년 9월 18일). “The NVIDIA GeForce GTX 980 Review: Maxwell Mark 2”. 《AnandTech》. 2014년 9월 22일에 원본 문서에서 보존된 문서. 2014년 9월 30일에 확인함. First and foremost among Maxwell 2's new features is the inclusion of full Direct3D 11.2/11.3 compatibility. 
  110. “DirectX 11.3 New Features Outline – Tiled Resources – Typed UAV Loads”. 2014년 9월 19일. 2014년 9월 30일에 확인함. 
  111. “D3D11_CONSERVATIVE_RASTERIZATION_TIER enumeration”. 《MSDN library》. 2015년 2월 22일. 2015년 2월 22일에 확인함. 
  112. “Direct3D 11.3 Features”. 《MSDN library》. 2015년 3월 28일. 2015년 3월 28일에 확인함. 
  113. “Games for Windows and the DirectX SDK blog”. 
  114. Ryan Smith. “AnandTech – Microsoft Announces DirectX 12: Low-Level Graphics Programming Comes To DirectX”. 2014년 3월 27일에 원본 문서에서 보존된 문서. 2014년 9월 30일에 확인함. 
  115. “Intel Developer Zone”. 《인텔》. 2022년 12월 21일에 확인함. 
  116. “Direct3D 12 Overview Part 1: 'Closer To The Metal'. 2014년 10월 2일에 확인함. 
  117. first two minutes of https://channel9.msdn.com/Events/Build/2014/3-564
  118. “A closer look at DirectX 12 – The Tech Report – Page 3”. 2014년 3월 31일. 2014년 9월 30일에 확인함. 
  119. “2484602-pixel+ordered+uav.jpg”. 2018년 4월 30일에 원본 문서에서 보존된 문서. 2014년 9월 19일에 확인함. 
  120. “Shader Model 5.1 - Win32 apps”. 2019년 11월 20일. 
  121. “Meet the future of PC graphics: Microsoft reveals faster, console-like DirectX 12”. 《PCWorld》. 2014년 3월 20일. 2014년 9월 30일에 확인함. 
  122. “DirectX 12 will also add new features for next-gen GPUs”. 2014년 3월 21일. 2014년 9월 30일에 확인함. 
  123. Kowaliski, Cyril (2014년 3월 21일). “DirectX 12 will also add new features for next-gen GPUs”. 《The Tech Report》. 2014년 4월 1일에 확인함. 
  124. “Technical Library”. 《인텔》. 2022년 12월 21일에 확인함. 
  125. stevewhims (2021년 12월 30일). “Pipelines and Shaders with Direct3D 12 - Win32 apps” (미국 영어). 《learn.microsoft.com》. 2023년 12월 19일에 확인함. 
  126. stevewhims (2023년 2월 6일). “Root Signatures Overview - Win32 apps” (미국 영어). 《learn.microsoft.com》. 2023년 12월 19일에 확인함. 
  127. “Direct3D 12 Overview Part 7: Dynamic Heaps”. 2014년 10월 2일에 확인함. 
  128. “Multi-Adapter”. 2016년 9월 14일에 원본 문서에서 보존된 문서. 2016년 8월 3일에 확인함. 
  129. “Porting DirectX 12 games to Windows 7”. 2019년 8월 21일. 
  130. “DirectX-Specs”. 
  131. “Microsoft.Direct3D.D3D12On7 1.1.0”. 
  132. HLSL 셰이더 모델 6.0
  133. 인용 오류: 잘못된 <ref> 태그; ":0"이라는 이름을 가진 ref에 텍스트가 없습니다.
  134. 인용 오류: 잘못된 <ref> 태그; "directml"이라는 이름을 가진 ref에 텍스트가 없습니다.
  135. 인용 오류: 잘못된 <ref> 태그; "directml2"이라는 이름을 가진 ref에 텍스트가 없습니다.
  136. 인용 오류: 잘못된 <ref> 태그; ":1"이라는 이름을 가진 ref에 텍스트가 없습니다.
  137. “Coming to DirectX 12— Sampler Feedback: some useful once-hidden data, unlocked” (미국 영어). 《DirectX Developer Blog》. 2019년 11월 4일에 확인함. 
  138. “DirectX Raytracing (DXR) Tier 1.1” (미국 영어). 《DirectX Developer Blog》. 2019년 11월 6일에 확인함. 
  139. “Coming to DirectX 12: More control over memory allocation” (미국 영어). 《DirectX Developer Blog》. 2019년 11월 11일에 확인함. 
  140. “Software Rasterizer for the Microsoft DirectX 9.0 Software Development Kit (SDK)”. 마이크로소프트. 2005년 8월 1일. 2012년 9월 5일에 원본 문서에서 보존된 문서. 
  141. “Direct3D Resources – Memory pool”. 2008년 5월 9일에 원본 문서에서 보존된 문서. 
  142. “Graphics Pipeline”. Direct3D 11 Graphics. 《마이크로소프트 독스. 2021년 10월 19일에 확인함. 
  143. “Input-Assembler Stage”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2020년 11월 4일. 2021년 10월 19일에 확인함. 
  144. “Vertex Shader Stage”. Direct3D 11 Graphics. 《마이크로소프트 독스. 2021년 10월 19일에 확인함. 
  145. “Tessellation Stages”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2020년 9월 16일. Hull-Shader Stage. 2021년 10월 19일에 확인함. 
  146. “Tessellation Stages”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2020년 9월 16일. Tessellator Stage. 2021년 10월 19일에 확인함. 
  147. “Tessellation Stages”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2020년 9월 16일. Domain-Shader Stage. 2021년 10월 19일에 확인함. 
  148. “Geometry Shader Stage”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2021년 5월 24일. 2021년 10월 19일에 확인함. 
  149. “Stream-Output Stage”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2020년 11월 4일. 2021년 10월 19일에 확인함. 
  150. “RenderStates”. DirectX 9.0 for Managed Code. 《마이크로소프트 독스》. 2009년 11월 6일. 2021년 10월 19일에 확인함. 
  151. “Rasterizer Stage”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2020년 11월 4일. 2021년 10월 19일에 확인함. 
  152. “Pixel Shader Stage”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2020년 8월 19일. 2021년 10월 19일에 확인함. 
  153. “Output-Merger Stage”. Direct3D 11 Graphics. 《마이크로소프트 독스》. 2021년 5월 24일. 2021년 10월 19일에 확인함. 
  154. “Direct3D 11.1 Features - Win32 apps”. 2020년 8월 19일. 
  155. “D3D11_FORMAT_SUPPORT enumeration”. MSDN. 2015년 6월 16일에 확인함. 
  156. “D3D11_FORMAT_SUPPORT2 enumeration”. MSDN. 2015년 6월 16일에 확인함. 
  157. “Hardware Tiers - Win32 apps”. 《learn.microsoft.com》. 2021년 12월 30일. 2022년 12월 21일에 확인함. 
  158. “D3D12_FEATURE - Win32 apps”. 2023년 2월 14일. 
  159. “Introduction to a Resource in Direct3D 11 - Win32 apps”. 2021년 10월 6일. 
  160. 볼프강 엥겔. “Introduction to Resource Binding in Microsoft DirectX 12”. 
  161. GVCS005 - Microsoft Direct3D 12: New API Details and Intel Optimizations 보관됨 4월 4, 2015 - 웨이백 머신
  162. “Shows”. 《learn.microsoft.com》. 2022년 12월 21일에 확인함. 
  163. “Timeout detection and recovery (TDR) - Windows drivers”. 《마이크로소프트》. 
  164. Direct3D Mobile, 마이크로소프트, 2010년 1월 6일.
  165. Jason Evangelho (2019년 3월 1일). “Windows 10 Versus Linux: 6 Steam Games Benchmarked On Intel's Hades Canyon NUC”. 《포브스. 2019년 10월 7일에 확인함. 
  166. Rebohle, Philip (2019년 4월 3일), 《Vulkan-based D3D11 and D3D10 implementation for Linux / Wine: doitsujin/dxvk》, 2019년 4월 3일에 확인함 
  167. 《Compatibility tool for Steam Play based on Wine and additional components: ValveSoftware/Proton》, 밸브 코퍼레이션, 2019년 4월 3일, 2019년 4월 3일에 확인함 
  168. WinterSnowfall (2026년 3월 13일), 《WinterSnowfall/d7vk》, 2026년 3월 13일에 확인함 
  169. Larabel, Michael (2025년 11월 7일). “D7VK Aims To Deliver Direct3D 7 Atop Vulkan” (영어). 《Phoronix》. 2026년 3월 13일에 확인함. 
  170. Orland, Kyle (2025년 11월 10일). “New project brings strong Linux compatibility to more classic Windows games” (영어). 《Ars Technica》. 2026년 3월 13일에 확인함. 
  171. Larabel, Michael (2026년 3월 11일). “D7VK 1.5 Released With Direct3D 3 Now Implemented Over Vulkan” (영어). 《Phoronix》. 2026년 3월 15일에 확인함. 
  172. “D8VK GitHub repository”. GitHub. 2024년 2월 2일에 확인함. 
  173. “D9VK GitHub repository”. GitHub. 2019년 10월 6일에 확인함. 
  174. Larabel, Michael (2019년 7월 30일). “Proton Re-Based To Wine 4.11, Adds D9VK Direct3D 9, Better CPU Utilization & DXVK 1.3”. 《Phoronix》. 2026년 3월 15일에 확인함. 
  175. “Implement Direct3D9 Frontend by Joshua-Ashton · Pull Request #1275 · doitsujin/dxvk” (영어). 《GitHub》. 2019년 12월 17일에 확인함. 
  176. 《Build Gallium Nine support on top of an existing WINE installation: iXit/wine-nine-standalone》, iXit Group, 2019년 4월 3일, 2019년 4월 3일에 확인함 
  177. Joey Sneddon (2018년 10월 10일). “Ubuntu 18.10 Adds Gallium Nine Support, Latest Mesa 18.2.2”. 《OMG! Ubuntu!》. 2019년 10월 7일에 확인함. 
  178. 《WineHQ - vkd3d》, Direct3D 12, 2019년 4월 3일, 2020년 6월 30일에 확인함 
  179. “Vkd3d 1.0 Released” (영어). 《WineHQ》. 2019년 4월 3일에 확인함. 
  180. Larabel, Michael (2019년 8월 23일). “Valve's Proton Offers Branch With VKD3D For Direct3D 12 Over Vulkan”. 《Phoronix》. 2026년 3월 15일에 확인함. 
  181. “The Wine team is proud to announce that the stable release Wine 4.0” (영어). 《WineHQ》. 2019년 4월 3일에 확인함. 
  182. “WineD3DOnWindows – The Official Wine Wiki”. Wiki.winehq.org. 2013년 6월 2일. 2009년 1월 17일에 원본 문서에서 보존된 문서. 2013년 6월 15일에 확인함. 
  183. “D3DX 11 Reference”. MSDN. 2014년 9월 30일에 확인함. 
  184. “Living without D3DX”. MSDN. 
  185. “Effect-Compiler Tool”. 마이크로소프트. 2020년 8월 19일. 
  186. “Spherical Harmonics Math”. 《msdn.com》. 2014년 11월 23일에 확인함. 
  187. “Effects 11”. 《CodePlex》. 2014년 9월 24일에 원본 문서에서 보존된 문서. 2014년 9월 30일에 확인함. 
  188. “DirectXMesh geometry processing library”. 《CodePlex》. 2014년 9월 29일에 원본 문서에서 보존된 문서. 2014년 9월 30일에 확인함. 
  189. “DirectXTex texture processing library”. 《CodePlex》. 2014년 9월 25일에 원본 문서에서 보존된 문서. 2014년 9월 30일에 확인함. 
  190. “DirectX Tool Kit”. 《CodePlex》. 2014년 9월 29일에 원본 문서에서 보존된 문서. 2014년 9월 30일에 확인함. 
  191. “UVAtrlas”. 《CodePlex》. 2015년 6월 27일에 원본 문서에서 보존된 문서. 2014년 11월 23일에 확인함. 
  192. “DXUT for Win32 Desktop Update”. MSDN. 

외부 링크

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.