아무도 궁금하지 않는 정보글 일 것 같지만


그래도 최대한 간단하게 설명해 봄.

VULKAN 공부한 사람은 알겠지만, Instance-Descriptor 라는 중요한 관계가 이 이유에 속한다.

(

Descriptor Set - Descriptro Set Layout,

PipeLine Set - Pipeline Layout,

FrameBuffer - RenderTarget

이 대표적인 Instance-Descriptor 관계

)


간단하게 이 관계에 대해 설명 하자면

Instance (일렬로 나열된 굉장히 긴 데이터 정보 리스트), Descriptor (Instance가 어떠한 형태로 구성되어있고 어떻게 instance를 읽어야 하는지에 대한 기술)

로 즉 Instance를 넘겨주면 Descriptor로 해당 Instance를 해독하여 파이프라인에 바인딩 한다는 뜻이다.


그런데 이게 장점이 정말 어마무시한데,

1. Instance로 데이터 정보 열이 한 번에 넘어오기 때문에 이를 GPU에 카피하기 굉장히 용이하다 (memcpy를 사용한 코드와 사용하지 않은 코드의 속도 차이를 한 번 검색해 보기를 바람.)


2. Instance를 Descriptor로 해독을 하는데 이는 즉 제약을 프로그래머가 집적 Descriptor로 기술하여 넘겨 주므로 굉장히 다양한 형태의 Instance를 자유롭게 바인딩 할 수 있게 되었고, 또한 자유로워진 제약에 따라 컴파일러가 리소스를 검사해야 하는 일 또한 겁나게 줄어들었다 라는 강점이 있다. 즉 컴파일러의 크기가 작아지며 실행 속도가 빨라지고, 크기가 작아지면서 엔진의 용량 또한 축소 된다.


3. 그래픽스 파이프 라인도 Instance-Descriptor 형식을 따르기 때문에 12부터는 조금이라도 다른 형태의 그래픽스 파이프라인이 필요하다면 새로 그래픽스 파이프라인을 만드는 수 밖에 없게 됨. 하지만 이는 DX11에선 매번 Draw에서 파이프 라인에 필요한 정보들을 하나하나 대화형 식으로 불러들여와 파이프 라인을 만들고 Command Q에 넣었는데, 이제는 필요한 그래픽스 파이프 라인을 찾아서 바로 꽂아주기만 하면 끝남.

더구나 이런식으로 미리 만들어진 파이프라인을 그냥 넘기기만 하면 되는 간단한 구조(독립적 흐름)를 가지고 있기에 멀티 렌더링이 가능해짐


4. 내장 SIMD (VECTOR, MATRIX)


그래도 아직까지는 DX11이 짱짱인건 어쩔 수 없는 듯


+ 그리고 DX12가 Instance-Descriptor를 채택하면서 낮은 사양의 GPU에서도 돌아갈 수 있게 된 영향이 큼