해결된 질문
24.08.05 15:31 작성
·
100
0
안녕하세요? DescriptionSet, DescriptionSetLayout, DescriptionPool 등을 생성할 때 info 구조체에 descriptionCount를 강의에서는 항상 1로 설정하는데요.
이 값에 의미가 있나요? 즉, 이 값이 1이 아닌 경우가 있나요?
섹션 9-3의 Hello-Texture-Mapping 강의를 예로 들면,
array<VkWriteDescriptorSet, 2> writeDescriptorSets{
VkWriteDescriptorSet{
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
.dstSet = mDescriptorSet,
.dstBinding = 0,
.descriptorCount = 1,
.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
.pBufferInfo = &descriptorBufferInfo
},
VkWriteDescriptorSet{
.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,
.dstSet = mDescriptorSet,
.dstBinding = 1,
.descriptorCount = 1,
.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
.pImageInfo = &descriptorImageInfo
}
};
이렇게 DescriptionSet을 갱신할 때 descriptorCount가 각각 1로 설정되고,
이 각각의 descriptor? 들은 dstBinding이라는 특정 binding index로 1:1로 mapping되는 것 같습니다. 이러면 count 값은 항상 1이 되어야할 것 같습니다.
섹션 8-1 Descriptor Pool 에서 maxSets와 DescriptorCount 간의 관계를 설명하실 때도 count값은 1로 설정되어 있습니다. 그래서 count에 설정되는 값이 1 이외일 경우가 무엇인지 잘 모르겠습니다.
답변 2
1
2024. 08. 06. 10:01
네 여러개가 될 수 있습니다. 하지만 대부분 1만 사용합니다. 2 이상인 경우는 좀 더 벌칸을 깊게 사용할때 필요한데요. 리소스가 2D_ARRAY와 같이 배열인 경우에 2D로 바인딩할때 count가 2 이상이 될 수 있습니다. 이후에 고급 강좌에서 이에 대한 내용도 다뤄보겠습니다.
1
VkDescriptorPoolSize 에서는 동기화 관련 작업을 할때 descriptorCount를 스왑체인 이미지의 개수로 정의합니다. 아마 강의 뒷부분에 나올겁니다.
그런데 남은 2부분은 저도 궁금한데요
1)
VkDescriptorSetLayoutBinding 에서 discriptorCount가 2가 된다면,
하나의 디크스립터 세트 레이아웃 바인딩이 두 개의 디스크립터와 연결 될수 있다는 의미인데,
1이 아닌 코드는 못본것 같습니다.
2) VkWriteDescriptorSet 에서 discriptorCount가 2가 된다면,
디스크립터 세트의 내부 디스크립터가 두개인데,
pBufferInfo에서 버퍼를 하나밖에 지정을 못하니,
두 개의 디스크립터가 하나의 리소스를 공유 하는 것처럼 되어버리는데,
이것도 1이 아닌 코드를 저는 못봤습니다.