Descriptor
Descriptor는 shader가 자원에 접근할 수 있게 해주는 handle이다.
Vertex shader에서 view matrix, projection matrix 등이 필요한 상황을 생각해보자.
이런 matrix 자원들은 매 frame 바뀌기 때문에
vertex position 같은 자원들처럼 vertex buffer(GPU memory)에 복사해놓고 사용하기 부담스럽다.
그래서 shader가 알아서 접근하도록 손잡이를 만들어준 개념이다.
Descriptor Set
복잡하게 생각할 것 없이 그냥
descriptor 집합이다.
(내가 공부하는 예제 프로그램에서는) 각 frame마다 descriptor set이 1개씩 배정되는데,
모든 frame의 descriptor set 전체를 descriptor pool로부터 한번에 할당받아 사용한다.
Descriptor pool을 생성하는 함수가 vkCreateDescriptorPool이고,
descriptor pool에서 descriptor set을 할당하는 함수가 vkAllocateDescriptorSets이다.
Descriptor set에 각 descriptor를 넣고자 할때,
각 descriptor의 설명서가 VkWriteDescriptorSet type의 구조체에 담기고
vkUpdateDescriptorSets 에서 descriptor set에 제출된다.
Descriptor Layout (Descriptor Set Layout)
Descriptor set에서 각각의 descriptor들이 어떻게 배열되어 있는지를 설명하는 layout이다.
1개의 descriptor set에 'uniform buffer object' descriptor와 'combined image sampler' descriptor가 있다면,
각 descriptor는 VkDescriptorSetLayoutBinding type 구조체에 내용을 입력하여
VkDescriptorSetLayout type의 layout을 만들게 된다.
이 layout을 만들때 호출하는 함수가 vkCreateDescriptorSetLayout이다.
이렇게 만든 descriptor layout은 pipeline layout을 만들때 참조한다.
Drawing command들 record하기 직전, descriptor set을 바인드하여 사용한다.
'Graphics' 카테고리의 다른 글
[Unity] 공놀이 게임 만들기 (0) | 2023.07.12 |
---|---|
[이론] Single Buffering / Double Buffering / VSync / Triple Buffering (0) | 2023.03.13 |
* 일반적인 Rendering Pipeline 정리 (0) | 2023.03.13 |
[GLUT/openGL] glViewport 함수 (0) | 2023.03.08 |
[GLUT/openGL] 그래픽스 프로그램의 흐름 (0) | 2023.03.06 |