aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorladevieq <qladevie@wanadev.fr>2021-01-13 09:08:10 +0100
committerladevieq <qladevie@wanadev.fr>2021-01-13 09:08:10 +0100
commita47d155de94cae99205ad3f50f195343fab5655b (patch)
treefc4ac7694b9949355a67dffa54c6c7253f314694
parent41d9d143468e88ce5e76c5d3c0543095339a0242 (diff)
Update descriptor in one call
-rw-r--r--src/vk-renderer.cpp51
1 files changed, 31 insertions, 20 deletions
diff --git a/src/vk-renderer.cpp b/src/vk-renderer.cpp
index e00d672..9d2519e 100644
--- a/src/vk-renderer.cpp
+++ b/src/vk-renderer.cpp
@@ -509,7 +509,7 @@ void vkrenderer::select_compute_queue() {
}
void vkrenderer::fill_descriptor_set(const input_data& inputs) {
- // Update uniform buffer binding
+ // Create and fill input data buffer
VkBufferCreateInfo buffer_info = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
buffer_info.size = sizeof(inputs);
buffer_info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
@@ -523,36 +523,47 @@ void vkrenderer::fill_descriptor_set(const input_data& inputs) {
vmaMapMemory(allocator, allocation, (void**) &mapped_data);
std::memcpy(&mapped_data, &inputs, sizeof(inputs));
+ // Update uniform buffer descriptor
VkDescriptorBufferInfo descriptor_buf_info = {};
descriptor_buf_info.buffer = compute_shader_buffer;
descriptor_buf_info.offset = 0;
descriptor_buf_info.range = VK_WHOLE_SIZE;
- VkWriteDescriptorSet write_descriptor_set = {};
- write_descriptor_set.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
- write_descriptor_set.pNext = nullptr;
- write_descriptor_set.dstSet = compute_shader_set;
- write_descriptor_set.dstBinding = 0;
- write_descriptor_set.dstArrayElement = 0;
- write_descriptor_set.descriptorCount = 1;
- write_descriptor_set.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
- write_descriptor_set.pImageInfo = VK_NULL_HANDLE;
- write_descriptor_set.pBufferInfo = &descriptor_buf_info;
- write_descriptor_set.pTexelBufferView = VK_NULL_HANDLE;
+ VkWriteDescriptorSet write_buffer_descriptor = {};
+ write_buffer_descriptor.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ write_buffer_descriptor.pNext = nullptr;
+ write_buffer_descriptor.dstSet = compute_shader_set;
+ write_buffer_descriptor.dstBinding = 0;
+ write_buffer_descriptor.dstArrayElement = 0;
+ write_buffer_descriptor.descriptorCount = 1;
+ write_buffer_descriptor.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
+ write_buffer_descriptor.pImageInfo = VK_NULL_HANDLE;
+ write_buffer_descriptor.pBufferInfo = &descriptor_buf_info;
+ write_buffer_descriptor.pTexelBufferView = VK_NULL_HANDLE;
- vkUpdateDescriptorSets(device, 1, &write_descriptor_set, 0, nullptr);
-
- // Update storage image binding
+ // Update storage image descriptor
VkDescriptorImageInfo descriptor_image_info = {};
descriptor_image_info.sampler = VK_NULL_HANDLE;
descriptor_image_info.imageView = swapchain_images_views[current_image_index];
descriptor_image_info.imageLayout = VK_IMAGE_LAYOUT_GENERAL;
- write_descriptor_set.dstBinding = 1;
- write_descriptor_set.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
- write_descriptor_set.pImageInfo = &descriptor_image_info;
- write_descriptor_set.pBufferInfo = VK_NULL_HANDLE;
+ VkWriteDescriptorSet write_image_descriptor = {};
+ write_image_descriptor.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ write_image_descriptor.pNext = nullptr;
+ write_image_descriptor.dstSet = compute_shader_set;
+ write_image_descriptor.dstBinding = 1;
+ write_image_descriptor.dstArrayElement = 0;
+ write_image_descriptor.descriptorCount = 1;
+ write_image_descriptor.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
+ write_image_descriptor.pImageInfo = &descriptor_image_info;
+ write_image_descriptor.pBufferInfo = VK_NULL_HANDLE;
+ write_image_descriptor.pTexelBufferView = VK_NULL_HANDLE;
+
+ std::vector<VkWriteDescriptorSet> write_descriptors {
+ write_buffer_descriptor,
+ write_image_descriptor,
+ };
- vkUpdateDescriptorSets(device, 1, &write_descriptor_set, 0, nullptr);
+ vkUpdateDescriptorSets(device, write_descriptors.size(), write_descriptors.data(), 0, nullptr);
}