ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ DirectX 12 ] - DirectX API
    DirectX 2021. 5. 15. 13:49

     

    DirectX API

     

    DirectX는 마이크로소프트 [ Microsoft ]에서 개발된 APIs[Application Programming Interfaces]들의 집합입니다. 이 APIs의 다양한 요소[Component]들이 Microsoft의 Windows OS를 기반으로 한 하드웨어에 대해서 Low-Level단계에서 접근할 수 있는 권한을 줍니다. 

    첫 번째 DirectX SDK는 Windows 95와 함께 배포되지 않고 그보다 약간 뒤인 그 해 9월에 발표되었습니다. 초창기의 이 DirectX SDK는 'Windows Game SDK'라는 이름으로 세상에 나왔습니다. DirectX 2.0은 1996년 6월에 나왔고 같은 해 10월에 DirectX 3.0 APIs가 공개되었습니다. 1995년부터 1997년에 이르는 시간 동안에 DirectX는 몇 번의 버전업데이트가 있었고 5버전에 이르렀습니다. DirectX 8.0이 출시되고 2년 후 DirectX 9가 출시되기 전까지 매년 주요한 리비전이 있었습니다. 

    DirectX 8.0은 2000년 11월에 출시되었으며 그래픽 프로그래머들로 하여금 그래픽 랜더링 파이프라인[Rendering Pipeline]의 Vertex와 Shading 단계의 과정을 통제할 수 있는, 프로그래밍이 가능한 Vertex와 Pixel Shaders의 기능을 소개했습니다.

    DirectX 9.0은 2002년 12월에 발표되었고 Shader Model 2.0이 소개되었습니다.

    DirectX 9.0c는 2009년 8월에 출시되었고 Shader Model 3.0이 소개되었습니다. 이 Shader Model 3.0은 기존 Shader Model 2.0에 HLSL[High Level Shader Language]에  함수를 추가하고 더 복잡한 Shader Programme을 위해 vertex shader와 pixel shader의 instruction count를 증가시켰습니다.

    2006년 11월, DirectX 10이 Shader Model 1.0을 제외한 Shader Model들을 지원하는 ( Backward Compatibility 혹은 Compatability) Shader Model 4.0과 함께 출시되었습니다. Shader Model 4.0은 Shader instruction의 한계를 끌어올리고 프로그래밍이 가능한 파이프 라인에 Geometry Shader를 포함시켰습니다. 이 Geometry Shader는 개발자들로 하여금 기존의 Primitive로부터 새로운 Geometric Primitive를 만들 수 있게 해주었습니다. ( 예를 들어서, 하나의 지점을 Geometry Shader의 input으로써 쓰고 삼각형을 하나 만드는 것이 있습니다. )

    DirectX 11은 2009년 10월에 Shader Model 5.0과 함께 등장했습니다. Shader Model 5.0부터는 Tessellation shader와 Compute Shader의 기능이 추가되어 탑재되기도 했습니다. Tessellation Shader는 Bézier surfaces의 컨트롤 포인트[Control points]로부터 삼각형 Primitive들을 계산하는 것으로 만든 모델의 세세한 부분을 동적으로 정제할 수 있는 능력을 제공합니다. Compute Shader GPU[Grahpics Processing Unit]의 Massive Parallelism을 십분 활용할 수 있는 일반목적의 프로그램[General-Pupose Programme]을 만들 수 있도록 해줍니다.

    2015년 7월 29일, Windows 10의 출시와 함께 마이크로소프트사는 12버전의 DirectX를 내놓았습니다. 이것이 바로 DirectX 12이며 여기서 Shader Model 5.1이 소개되었지만 렌더링 파이프라인에 프로그래밍이 가능하도록 한 Stage ( Rendering Pipeline에는 몇 가지의 Stage가 존재합니다. )를 추가하지는 않았습니다. 대신에 Descriptor Arrays에 대한 Indexing을 이용한 리소스 접근의 기능을 포함하였습니다. Texture Arrays는 이미 Shader Model 5.1이전부터 사용이 가능했으나 각 텍스쳐[Texture]는 반드시 같은 사이즈 ( Width, Height )와 저장포맷[Storage Format]이여야만 했습니다. 여기서 Discriptor Arrays를 사용하면 다양한 차원[Dimensions]과 저장포맷을 단 하나의 Shader variable통해서 접근[Access] 할 수 있습니다. 제한사항이 하나 있는데 그것은 변수의 형태[Variable Type]입니다. ( 예를 들어서, Texture1D, Texture2D, Texture3D )

     2017년 4월 11일, Windows 10 Creators의 업데이트 ( Version 1703 )와 함께 Shader Model 6.0이 소개되었습니다. Shader Model 6.0은 HLSL 안에 추가적인 Wave-Level intrinsic functions을 더했습니다. 이 Wave-Level intrinsic functions은 동기화의 범위[Scope of synchronisation] SIMD 프로세서의 폭 내에 있을 때, Shader 프로그래머가 Barrier Construct를 제거할 수 있도록 해줍니다. 

     

    DirectX 12 Components

     

    DirectX 12 SDK는 사실 APIs의 집합일 뿐입니다. 특히 Hardware-accelerated 3D 그래픽 렌더링과 관련된 APIs들은 Direct3D라고 하며 앞으로의 다룰 대부분의 것들과 일치합니다. 물론 이를 제외하더라고 DirectX의 APIs를 이루고 있는 부분은 다양합니다.

    Direct2D는 2D Geometry, 비트맵[bitmaps] 그리고 텍스트[text]등의 높은 품질의 렌더링을 제공하는 Hardware-accelerated, immediate-mode 2D 그래픽 API입니다. 이는 Direct3D와 함께 사용할 수 있도록 만들어졌습니다. 

    Direct3D는 높은 성능의 3D Geometry를 렌더링할 수 있도록 해주는 3D Graphics API입니다. 또, GPU의 대량 병렬처리기능을 활용하는 일반목적어플리케이션[General-Purpose Application]을 만들 수 있도록 해줍니다. 전에도 언급했던 것처럼 이 Direct3D가 앞으로의 주요 주제가 될 것입니다. DirectX 12라는 단어를 쓰더라도 Direct3D 12 Graphics API를 주로 일컫는다고 여기면 됩니다.

    DirectWrite는 높은 성능의 글자[Text], Resolution-independent font, Full Unicode Text, Layout을 제공해줍니다. 

    DirectXMathSingle-precision Floating-point vector나 행렬[Matrix]의 선형대수나 산술적 연산을 위한 간편하고 최적화된 인터페이스를 제공합니다.

    XAudio2는 게임을 위한 Single processing과 Mixing foundation을 제공합니다. 이는 DirectSound를 대체합니다.

    XInput는 XBox컨트롤로가 Windows OS의 컴퓨터에 연결되었을 때, XInput API가 어떻게 상호작용하는지를 정의합니다. 기존의 DirectInput을 대체합니다.

     

    Geometric Primitive : Primitive는 대체로 더 이상 작게 쪼개지 않는, 어떤 시스템이 다룰 수 있는 최소한의 단위이다. 

    Array Descriptor : Global Arrays에 대한 Resource management를 수행한다. 이는 각 배열들의 프로세스, 메모리 위치와 진입점을 맵핑할 때 요구되는 정보를 저장하고 있다.

    Barrier : Parallel Computing에서 Synchronise의 한 방법이다. 각 Thread나 Process들이 Barrier에 이르면 다른 Thread와 Process들이 Barrier에 이를 때까지 반드시 멈춰야만 한다.

    Immediate mode : API의 주요한 Design Pattern이다. (1) 클라이언트의 호출이 화면에 표시될 오브젝트의 렌더링을 즉각 유발한다. (2) 표시할 Primitive들이 클라이언트가 Command list에 직접 입력함으로써 프레임 마다 입력된다. 

    'DirectX' 카테고리의 다른 글

    [ DirectX 12 ] - Graphics Pipeline - 1  (0) 2021.05.20
    [ DirectX 12 ] - Introduction  (0) 2021.05.15
Designed by Tistory.