Vulkan DescriptorSet のアップデート
自分用メモ。DescriptorSet アップデート手順のメモ
はじめに
アロケートした DescriptorPool に Sampler 等を元に Descriptor を書き込む手順の説明。
VkSampler
フィルタ情報を保持するオブジェクト、vkCreateSampler() で生成する。引数はデバイスとVkSamplerCreateInfo という情報クラスを受け取る。デバイスが必要なのはサポートできるフィルタ設定のエラーチェックと GPU によってはサンプラをグローバルに管理しないといけない物があるからと推測される。
参考:Vulkan Cookbook p.234
DescriptorSet のアップデート
- VkSampler sampler を生成する
- VkImage sampledImage を生成する
- DescriptorSetLayout/DescriptorPool の構築
上記は済ませているとする。vkUpdateDescriptorSets() をコールする事で実際にでスクリプタが書き込まれる。以下、引数の説明
- VkDevice device
- uint32_t descriptorWriteCount
pDescriptorWrites の配列サイズを指定する - const VkWriteDescriptorSet* pDescriptorWrites
書き込み先のデスクリプタセット、書き込む VkSampler の情報を保持している。詳細は後述。 - uint32_t descriptorCopyCount
デスクリプタセットのコピーをしない時は 0 - const VkCopyDescriptorSet* pDescriptorCopies
今回は使わないので割愛
VkWriteDescriptorSet、これを構築して vkUpdateDescriptorSets() に渡せればアロケートした DescriptorPool 上に書き込める。VkWriteDescriptorSet は一時変数でいい、vkUpdateDescriptorSets() コール後は破棄可能。以下、各メンバ変数です。
- VkStructureType sType
- const void * pNext
- VkDescriptorSet dstSet
- uint32_t dstBinding
- uint32_t dstArrayElement
- uint32_t descriptorCount
- VkDescriptorType descriptorType
- const VkDescriptorImageInfo * pImageInfo
- const VkDescriptorBufferInfo * pBufferInfo
- const VkBufferView * pTexelBufferView
VkDescriptorImageInfo、これが使用する VkSampler のポインタを持っている。以下、各メンバ変数です。VkSampler 等は恐らくハンドラなのでポインタになっていない。
- VkSampler sampler
- VkImageView imageView
- VkImageLayout imageLayout
View もわざわざ vkCreateImageView() で作っている…。単に Info から Create() するというインターフェース統一のためかな?
コメントを残す