Skip to content
Snippets Groups Projects
Verified Commit 76dc8be9 authored by Tobias Frisch's avatar Tobias Frisch
Browse files

[#53] Works on my machine! (with texture)

parent 85a130ce
No related branches found
No related tags found
1 merge request!42Resolve "Texture the cube"
Pipeline #25301 passed
...@@ -85,6 +85,13 @@ namespace vkcv ...@@ -85,6 +85,13 @@ namespace vkcv
m_ResourceDescriptions.emplace_back(vk_sets, vk_setLayouts); m_ResourceDescriptions.emplace_back(vk_sets, vk_setLayouts);
return ResourcesHandle(m_NextResourceDescriptionID++); return ResourcesHandle(m_NextResourceDescriptionID++);
} }
struct WriteDescriptorSetInfo {
size_t imageInfoIndex;
size_t bufferInfoIndex;
uint32_t binding;
vk::DescriptorType type;
};
void DescriptorManager::writeResourceDescription( void DescriptorManager::writeResourceDescription(
ResourcesHandle handle, ResourcesHandle handle,
...@@ -96,84 +103,124 @@ namespace vkcv ...@@ -96,84 +103,124 @@ namespace vkcv
vk::DescriptorSet set = m_ResourceDescriptions[handle.getId()].descriptorSets[setIndex]; vk::DescriptorSet set = m_ResourceDescriptions[handle.getId()].descriptorSets[setIndex];
std::vector<vk::WriteDescriptorSet> vulkanWrites; std::vector<vk::DescriptorImageInfo> imageInfos;
std::vector<vk::DescriptorBufferInfo> bufferInfos;
std::vector<WriteDescriptorSetInfo> writeInfos;
for (const auto& write : writes.sampledImageWrites) { for (const auto& write : writes.sampledImageWrites) {
vk::DescriptorImageInfo imageInfo( const vk::DescriptorImageInfo imageInfo(
nullptr, nullptr,
imageManager.getVulkanImageView(write.image), imageManager.getVulkanImageView(write.image),
vk::ImageLayout::eShaderReadOnlyOptimal); vk::ImageLayout::eShaderReadOnlyOptimal
);
vk::WriteDescriptorSet vulkanWrite(
set, imageInfos.push_back(imageInfo);
write.binding,
(uint32_t)0, WriteDescriptorSetInfo vulkanWrite = {
vk::DescriptorType::eSampledImage, imageInfos.size(),
imageInfo); 0,
vulkanWrites.push_back(vulkanWrite); write.binding,
vk::DescriptorType::eSampledImage,
};
writeInfos.push_back(vulkanWrite);
} }
for (const auto& write : writes.storageImageWrites) { for (const auto& write : writes.storageImageWrites) {
vk::DescriptorImageInfo imageInfo( const vk::DescriptorImageInfo imageInfo(
nullptr, nullptr,
imageManager.getVulkanImageView(write.image), imageManager.getVulkanImageView(write.image),
vk::ImageLayout::eGeneral); vk::ImageLayout::eGeneral
);
vk::WriteDescriptorSet vulkanWrite(
set, imageInfos.push_back(imageInfo);
write.binding,
(uint32_t)0, WriteDescriptorSetInfo vulkanWrite = {
vk::DescriptorType::eStorageImage, imageInfos.size(),
imageInfo); 0,
vulkanWrites.push_back(vulkanWrite); write.binding,
vk::DescriptorType::eStorageImage
};
writeInfos.push_back(vulkanWrite);
} }
for (const auto& write : writes.uniformBufferWrites) { for (const auto& write : writes.uniformBufferWrites) {
vk::DescriptorBufferInfo bufferInfo( const vk::DescriptorBufferInfo bufferInfo(
bufferManager.getBuffer(write.buffer), bufferManager.getBuffer(write.buffer),
(uint32_t)0, static_cast<uint32_t>(0),
bufferManager.getBufferSize(write.buffer)); bufferManager.getBufferSize(write.buffer)
);
bufferInfos.push_back(bufferInfo);
vk::WriteDescriptorSet vulkanWrite( WriteDescriptorSetInfo vulkanWrite = {
set, 0,
write.binding, bufferInfos.size(),
(uint32_t)0, write.binding,
vk::DescriptorType::eUniformBuffer, vk::DescriptorType::eUniformBuffer
nullptr, };
bufferInfo);
vulkanWrites.push_back(vulkanWrite); writeInfos.push_back(vulkanWrite);
} }
for (const auto& write : writes.storageBufferWrites) { for (const auto& write : writes.storageBufferWrites) {
vk::DescriptorBufferInfo bufferInfo( const vk::DescriptorBufferInfo bufferInfo(
bufferManager.getBuffer(write.buffer), bufferManager.getBuffer(write.buffer),
(uint32_t)0, static_cast<uint32_t>(0),
bufferManager.getBufferSize(write.buffer)); bufferManager.getBufferSize(write.buffer)
);
vk::WriteDescriptorSet vulkanWrite(
set, bufferInfos.push_back(bufferInfo);
write.binding,
(uint32_t)0, WriteDescriptorSetInfo vulkanWrite = {
vk::DescriptorType::eStorageBuffer, 0,
nullptr, bufferInfos.size(),
bufferInfo); write.binding,
vulkanWrites.push_back(vulkanWrite); vk::DescriptorType::eStorageBuffer
};
writeInfos.push_back(vulkanWrite);
} }
for (const auto& write : writes.samplerWrites) { for (const auto& write : writes.samplerWrites) {
vk::DescriptorImageInfo imageInfo( const vk::Sampler& sampler = samplerManager.getVulkanSampler(write.sampler);
samplerManager.getVulkanSampler(write.sampler),
const vk::DescriptorImageInfo imageInfo(
sampler,
nullptr, nullptr,
vk::ImageLayout::eGeneral); vk::ImageLayout::eGeneral
);
imageInfos.push_back(imageInfo);
WriteDescriptorSetInfo vulkanWrite = {
imageInfos.size(),
0,
write.binding,
vk::DescriptorType::eSampler
};
writeInfos.push_back(vulkanWrite);
}
std::vector<vk::WriteDescriptorSet> vulkanWrites;
for (const auto& write : writeInfos) {
vk::WriteDescriptorSet vulkanWrite( vk::WriteDescriptorSet vulkanWrite(
set, set,
write.binding, write.binding,
(uint32_t)0, static_cast<uint32_t>(0),
vk::DescriptorType::eSampler, 1,
imageInfo); write.type,
(write.imageInfoIndex > 0? &(imageInfos[write.imageInfoIndex - 1]) : nullptr),
(write.bufferInfoIndex > 0? &(bufferInfos[write.bufferInfoIndex - 1]) : nullptr)
);
vulkanWrites.push_back(vulkanWrite); vulkanWrites.push_back(vulkanWrite);
} }
m_Device.updateDescriptorSets(vulkanWrites, nullptr); m_Device.updateDescriptorSets(vulkanWrites, nullptr);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment