DirectX12

[DirectX12] 리소스, 서술자

wnstjd 2024. 1. 28. 21:53

리소스

리소스는 GPU가 쉐이더를 통해 렌더링을 할 때 필요한 행렬, 텍스처, 사용자 지정 자료 등의 데이터를 의미한다. 

이러한 리소스를 GPU가 사용하기 위해선 CPU에서 렌더링 파이프라인에 바인딩을 해주어야 한다. 

 

루트 시그니처

루트 시그니처는 파이프라인에 바인딩되는 리소스 종류를 정의한다. 

쉽게 생각해서 쉐이더가 사용할 리소스를 CPU에서 넘겨주는 것이라고 할 수 있다.

바인딩 될 수 있는 것은 상수와 서술자, 서술자를 묶는 서술자 테이블이 있다. 

이곳에 바인딩된 값의 형식은 표시되지 않고 DWORD 형식의 슬롯에 바인딩되며 리소스의 크기에 따라 사용되는 슬롯의 개수도 달라진다.

 

서술자

리소스는 자신이 어떤 형식인지, 어느 지점에서 사용되어야 하는지 모른다. 그렇기 때문에 렌더링 파이프라인에는 리소스 대신 리소스의 정보들을 가진 서술자가 바인딩된다.

서술자는 리소스를 GPU에 서술하는 수단으로 DixrectX에게 리소스를 어떻게 사용해야 하는지 알려주는 수단이다. 

하나의 리소스가 여러 방식으로 사용될 수 있기 때문에 하나의 리소스에 여려 개의 서술자가 만들어 질 수 있다.

 

정점, 인덱스, 쉐이더 코드, 렌더 타겟 뷰, 깊이 스텐실 뷰 등 CPU에서 GPU로 넘기는 모든 자원들이 서술자를 통해 GPU에서 사용된다. 리소스의 사용 용도에 따라 여러 종류의 서술자가 만들어 진다. 

 

서술자 힙

서술자 힙은 서술자들의 배열로 서술자들이 저장되는 공간이다.

서술자의 종류에 따라 서술자 힙이 존재해야 하며 같은 종류의 서술자는 같은 힙에 저장된다.