diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/vulkan/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/vulkan/buffer_descriptor.cc | 59 | ||||
-rw-r--r-- | src/vulkan/buffer_descriptor.h | 50 | ||||
-rw-r--r-- | src/vulkan/compute_pipeline.cc | 4 | ||||
-rw-r--r-- | src/vulkan/descriptor.cc | 76 | ||||
-rw-r--r-- | src/vulkan/descriptor.h | 120 | ||||
-rw-r--r-- | src/vulkan/engine_vulkan.cc | 1 | ||||
-rw-r--r-- | src/vulkan/engine_vulkan.h | 1 | ||||
-rw-r--r-- | src/vulkan/graphics_pipeline.cc | 4 | ||||
-rw-r--r-- | src/vulkan/pipeline.cc | 65 | ||||
-rw-r--r-- | src/vulkan/pipeline.h | 6 |
11 files changed, 90 insertions, 297 deletions
diff --git a/src/vulkan/CMakeLists.txt b/src/vulkan/CMakeLists.txt index 4eaa5ea..376ea53 100644 --- a/src/vulkan/CMakeLists.txt +++ b/src/vulkan/CMakeLists.txt @@ -17,7 +17,6 @@ set(VULKAN_ENGINE_SOURCES command_buffer.cc command_pool.cc compute_pipeline.cc - descriptor.cc device.cc engine_vulkan.cc format_data.cc diff --git a/src/vulkan/buffer_descriptor.cc b/src/vulkan/buffer_descriptor.cc index d58e59d..360adb6 100644 --- a/src/vulkan/buffer_descriptor.cc +++ b/src/vulkan/buffer_descriptor.cc @@ -23,6 +23,7 @@ #include "src/engine.h" #include "src/make_unique.h" #include "src/vulkan/command_buffer.h" +#include "src/vulkan/device.h" namespace amber { namespace vulkan { @@ -32,10 +33,11 @@ BufferDescriptor::BufferDescriptor(Buffer* buffer, Device* device, uint32_t desc_set, uint32_t binding) - : Descriptor(type, device, desc_set, binding), amber_buffer_(buffer) { - assert(type == DescriptorType::kStorageBuffer || - type == DescriptorType::kUniformBuffer); -} + : device_(device), + amber_buffer_(buffer), + type_(type), + descriptor_set_(desc_set), + binding_(binding) {} BufferDescriptor::~BufferDescriptor() = default; @@ -56,17 +58,18 @@ Result BufferDescriptor::CreateResourceIfNeeded( transfer_buffer_ = MakeUnique<TransferBuffer>(device_, size_in_bytes, properties); - Result r = transfer_buffer_->Initialize(GetVkBufferUsage() | - VK_BUFFER_USAGE_TRANSFER_SRC_BIT | - VK_BUFFER_USAGE_TRANSFER_DST_BIT); + Result r = transfer_buffer_->Initialize( + (IsStorageBuffer() ? VK_BUFFER_USAGE_STORAGE_BUFFER_BIT + : VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) | + VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT); if (!r.IsSuccess()) return r; - SetUpdateDescriptorSetNeeded(); + is_descriptor_set_update_needed_ = true; return {}; } -Result BufferDescriptor::RecordCopyDataToResourceIfNeeded( +void BufferDescriptor::RecordCopyDataToResourceIfNeeded( CommandBuffer* command) { if (amber_buffer_ && !amber_buffer_->ValuePtr()->empty()) { transfer_buffer_->UpdateMemoryWithRawData(*amber_buffer_->ValuePtr()); @@ -74,14 +77,12 @@ Result BufferDescriptor::RecordCopyDataToResourceIfNeeded( } transfer_buffer_->CopyToDevice(command); - return {}; } Result BufferDescriptor::RecordCopyDataToHost(CommandBuffer* command) { if (!transfer_buffer_) { return Result( - "Vulkan: BufferDescriptor::RecordCopyDataToHost() |vk_buffer| is " - "empty"); + "Vulkan: BufferDescriptor::RecordCopyDataToHost() no transfer buffer"); } return transfer_buffer_->CopyToHost(command); @@ -90,8 +91,8 @@ Result BufferDescriptor::RecordCopyDataToHost(CommandBuffer* command) { Result BufferDescriptor::MoveResourceToBufferOutput() { if (!transfer_buffer_) { return Result( - "Vulkan: BufferDescriptor::MoveResourceToBufferOutput() |vk_buffer| " - "is empty"); + "Vulkan: BufferDescriptor::MoveResourceToBufferOutput() no transfer" + " buffer"); } // Only need to copy the buffer back if we have an attached amber buffer to @@ -100,8 +101,8 @@ Result BufferDescriptor::MoveResourceToBufferOutput() { void* resource_memory_ptr = transfer_buffer_->HostAccessibleMemoryPtr(); if (!resource_memory_ptr) { return Result( - "Vulkan: BufferDescriptor::MoveResourceToBufferOutput() |vk_buffer| " - "has nullptr host accessible memory"); + "Vulkan: BufferDescriptor::MoveResourceToBufferOutput() " + "no host accessible memory pointer"); } if (!amber_buffer_->ValuePtr()->empty()) { @@ -121,18 +122,29 @@ Result BufferDescriptor::MoveResourceToBufferOutput() { return {}; } -Result BufferDescriptor::UpdateDescriptorSetIfNeeded( +void BufferDescriptor::UpdateDescriptorSetIfNeeded( VkDescriptorSet descriptor_set) { - if (!IsDescriptorSetUpdateNeeded()) - return {}; + if (!is_descriptor_set_update_needed_) + return; VkDescriptorBufferInfo buffer_info = VkDescriptorBufferInfo(); buffer_info.buffer = transfer_buffer_->GetVkBuffer(); buffer_info.offset = 0; buffer_info.range = VK_WHOLE_SIZE; - return Descriptor::UpdateDescriptorSetForBuffer( - descriptor_set, GetVkDescriptorType(), buffer_info); + VkWriteDescriptorSet write = VkWriteDescriptorSet(); + write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + write.dstSet = descriptor_set; + write.dstBinding = binding_; + write.dstArrayElement = 0; + write.descriptorCount = 1; + write.descriptorType = IsStorageBuffer() ? VK_DESCRIPTOR_TYPE_STORAGE_BUFFER + : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + write.pBufferInfo = &buffer_info; + + device_->GetPtrs()->vkUpdateDescriptorSets(device_->GetVkDevice(), 1, &write, + 0, nullptr); + is_descriptor_set_update_needed_ = false; } Result BufferDescriptor::AddToBuffer(DataType type, @@ -153,5 +165,10 @@ Result BufferDescriptor::AddToBuffer(DataType type, return {}; } +VkDescriptorType BufferDescriptor::GetVkDescriptorType() const { + return IsStorageBuffer() ? VK_DESCRIPTOR_TYPE_STORAGE_BUFFER + : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; +} + } // namespace vulkan } // namespace amber diff --git a/src/vulkan/buffer_descriptor.h b/src/vulkan/buffer_descriptor.h index 3d2c098..c4ba908 100644 --- a/src/vulkan/buffer_descriptor.h +++ b/src/vulkan/buffer_descriptor.h @@ -24,7 +24,6 @@ #include "src/buffer.h" #include "src/datum_type.h" #include "src/engine.h" -#include "src/vulkan/descriptor.h" #include "src/vulkan/transfer_buffer.h" namespace amber { @@ -33,24 +32,40 @@ namespace vulkan { class CommandBuffer; class Device; +enum class DescriptorType : uint8_t { + kStorageBuffer = 0, + kUniformBuffer, +}; + // Among Vulkan descriptor types, this class handles Storage Buffers // and Uniform Buffers. -class BufferDescriptor : public Descriptor { +class BufferDescriptor { public: BufferDescriptor(Buffer* buffer, DescriptorType type, Device* device, uint32_t desc_set, uint32_t binding); - ~BufferDescriptor() override; + ~BufferDescriptor(); + + uint32_t GetDescriptorSet() const { return descriptor_set_; } + uint32_t GetBinding() const { return binding_; } + + VkDescriptorType GetVkDescriptorType() const; + + bool IsStorageBuffer() const { + return type_ == DescriptorType::kStorageBuffer; + } + bool IsUniformBuffer() const { + return type_ == DescriptorType::kUniformBuffer; + } - // Descriptor Result CreateResourceIfNeeded( - const VkPhysicalDeviceMemoryProperties& properties) override; - Result RecordCopyDataToResourceIfNeeded(CommandBuffer* command) override; - Result RecordCopyDataToHost(CommandBuffer* command) override; - Result MoveResourceToBufferOutput() override; - Result UpdateDescriptorSetIfNeeded(VkDescriptorSet descriptor_set) override; + const VkPhysicalDeviceMemoryProperties& properties); + void RecordCopyDataToResourceIfNeeded(CommandBuffer* command); + Result RecordCopyDataToHost(CommandBuffer* command); + Result MoveResourceToBufferOutput(); + void UpdateDescriptorSetIfNeeded(VkDescriptorSet descriptor_set); Result AddToBuffer(DataType type, uint32_t offset, @@ -58,18 +73,15 @@ class BufferDescriptor : public Descriptor { const std::vector<Value>& values); private: - VkBufferUsageFlagBits GetVkBufferUsage() const { - return IsStorageBuffer() ? VK_BUFFER_USAGE_STORAGE_BUFFER_BIT - : VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; - } - - VkDescriptorType GetVkDescriptorType() const { - return IsStorageBuffer() ? VK_DESCRIPTOR_TYPE_STORAGE_BUFFER - : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - } - + Device* device_ = nullptr; Buffer* amber_buffer_ = nullptr; std::unique_ptr<TransferBuffer> transfer_buffer_; + + DescriptorType type_ = DescriptorType::kStorageBuffer; + + bool is_descriptor_set_update_needed_ = false; + uint32_t descriptor_set_ = 0; + uint32_t binding_ = 0; }; } // namespace vulkan diff --git a/src/vulkan/compute_pipeline.cc b/src/vulkan/compute_pipeline.cc index 41dcdf9..da6c0de 100644 --- a/src/vulkan/compute_pipeline.cc +++ b/src/vulkan/compute_pipeline.cc @@ -86,9 +86,7 @@ Result ComputePipeline::Compute(uint32_t x, uint32_t y, uint32_t z) { // Note that a command updating a descriptor set and a command using // it must be submitted separately, because using a descriptor set // while updating it is not safe. - r = UpdateDescriptorSetsIfNeeded(); - if (!r.IsSuccess()) - return r; + UpdateDescriptorSetsIfNeeded(); { CommandBufferGuard guard(GetCommandBuffer()); diff --git a/src/vulkan/descriptor.cc b/src/vulkan/descriptor.cc deleted file mode 100644 index a54b575..0000000 --- a/src/vulkan/descriptor.cc +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2018 The Amber Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "src/vulkan/descriptor.h" - -#include "src/vulkan/device.h" - -namespace amber { -namespace vulkan { - -Descriptor::Descriptor(DescriptorType type, - Device* device, - uint32_t desc_set, - uint32_t binding) - : descriptor_set_(desc_set), - binding_(binding), - device_(device), - type_(type) {} - -Descriptor::~Descriptor() = default; - -VkWriteDescriptorSet Descriptor::GetWriteDescriptorSet( - VkDescriptorSet descriptor_set, - VkDescriptorType descriptor_type) const { - VkWriteDescriptorSet write = VkWriteDescriptorSet(); - write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; - write.dstSet = descriptor_set; - write.dstBinding = binding_; - write.dstArrayElement = 0; - write.descriptorCount = 1; - write.descriptorType = descriptor_type; - return write; -} - -Result Descriptor::UpdateDescriptorSetForBuffer( - VkDescriptorSet descriptor_set, - VkDescriptorType descriptor_type, - const VkDescriptorBufferInfo& buffer_info) { - VkWriteDescriptorSet write = - GetWriteDescriptorSet(descriptor_set, descriptor_type); - switch (descriptor_type) { - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: - case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: - write.pBufferInfo = &buffer_info; - break; - default: - return Result( - "Vulkan::UpdateDescriptorSetForBuffer not descriptor based on " - "buffer"); - } - - UpdateVkDescriptorSet(write); - return {}; -} - -void Descriptor::UpdateVkDescriptorSet(const VkWriteDescriptorSet& write) { - device_->GetPtrs()->vkUpdateDescriptorSets(device_->GetVkDevice(), 1, &write, - 0, nullptr); - is_descriptor_set_update_needed_ = false; -} - -} // namespace vulkan -} // namespace amber diff --git a/src/vulkan/descriptor.h b/src/vulkan/descriptor.h deleted file mode 100644 index 1c8300a..0000000 --- a/src/vulkan/descriptor.h +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright 2018 The Amber Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SRC_VULKAN_DESCRIPTOR_H_ -#define SRC_VULKAN_DESCRIPTOR_H_ - -#include <memory> -#include <vector> - -#include "amber/result.h" -#include "amber/vulkan_header.h" -#include "src/datum_type.h" -#include "src/engine.h" -#include "src/vulkan/resource.h" - -namespace amber { -namespace vulkan { - -enum class DescriptorType : uint8_t { - kStorageBuffer = 0, - kUniformBuffer, -}; - -class CommandBuffer; -class Device; - -class Descriptor { - public: - Descriptor(DescriptorType type, - Device* device, - uint32_t desc_set, - uint32_t binding); - - virtual ~Descriptor(); - - uint32_t GetDescriptorSet() const { return descriptor_set_; } - uint32_t GetBinding() const { return binding_; } - - DescriptorType GetType() const { return type_; } - - bool IsStorageBuffer() const { - return type_ == DescriptorType::kStorageBuffer; - } - bool IsUniformBuffer() const { - return type_ == DescriptorType::kUniformBuffer; - } - - // Call vkUpdateDescriptorSets() to update the backing resource - // for this descriptor only when the backing resource was newly - // created or changed. - virtual Result UpdateDescriptorSetIfNeeded(VkDescriptorSet) = 0; - - // Create vulkan resource e.g., buffer or image used for this - // descriptor if needed. This method assumes that the resource is empty when - // it is called that means the resource must be created only when it is - // actually needed i.e., compute or draw command and destroyed right after - // those commands. - virtual Result CreateResourceIfNeeded( - const VkPhysicalDeviceMemoryProperties& properties) = 0; - - // Record a command for copying buffer data to the resource in device. After - // the copy it clears the internal buffer data. Note that - // it only records the command and the actual submission must be - // done later. - virtual Result RecordCopyDataToResourceIfNeeded(CommandBuffer* command) = 0; - - // Only record the copy command for copying the resource data to - // the host accessible memory. The actual submission of the command - // must be done later. - virtual Result RecordCopyDataToHost(CommandBuffer* command) = 0; - - // Copy contents of resource e.g., VkBuffer to host buffer. - // This method assumes that we already copy the resource data to the host - // accessible memory by calling RecordCopyDataToHost() method and submitting - // the command buffer. After copying the contents, it destroys |buffer_|. - virtual Result MoveResourceToBufferOutput() = 0; - - protected: - Result UpdateDescriptorSetForBuffer( - VkDescriptorSet descriptor_set, - VkDescriptorType descriptor_type, - const VkDescriptorBufferInfo& buffer_info); - - void SetUpdateDescriptorSetNeeded() { - is_descriptor_set_update_needed_ = true; - } - bool IsDescriptorSetUpdateNeeded() { - return is_descriptor_set_update_needed_; - } - - uint32_t descriptor_set_ = 0; - uint32_t binding_ = 0; - Device* device_ = nullptr; - - private: - VkWriteDescriptorSet GetWriteDescriptorSet( - VkDescriptorSet descriptor_set, - VkDescriptorType descriptor_type) const; - void UpdateVkDescriptorSet(const VkWriteDescriptorSet& write); - - DescriptorType type_ = DescriptorType::kStorageBuffer; - - bool is_descriptor_set_update_needed_ = false; -}; - -} // namespace vulkan -} // namespace amber - -#endif // SRC_VULKAN_DESCRIPTOR_H_ diff --git a/src/vulkan/engine_vulkan.cc b/src/vulkan/engine_vulkan.cc index 9c147aa..cb177a3 100644 --- a/src/vulkan/engine_vulkan.cc +++ b/src/vulkan/engine_vulkan.cc @@ -21,7 +21,6 @@ #include "amber/amber_vulkan.h" #include "src/make_unique.h" #include "src/vulkan/compute_pipeline.h" -#include "src/vulkan/descriptor.h" #include "src/vulkan/format_data.h" #include "src/vulkan/graphics_pipeline.h" diff --git a/src/vulkan/engine_vulkan.h b/src/vulkan/engine_vulkan.h index 9374775..fae2b5a 100644 --- a/src/vulkan/engine_vulkan.h +++ b/src/vulkan/engine_vulkan.h @@ -25,6 +25,7 @@ #include "src/cast_hash.h" #include "src/engine.h" #include "src/pipeline.h" +#include "src/vulkan/buffer_descriptor.h" #include "src/vulkan/command_pool.h" #include "src/vulkan/device.h" #include "src/vulkan/pipeline.h" diff --git a/src/vulkan/graphics_pipeline.cc b/src/vulkan/graphics_pipeline.cc index 705ca37..b9f7736 100644 --- a/src/vulkan/graphics_pipeline.cc +++ b/src/vulkan/graphics_pipeline.cc @@ -848,9 +848,7 @@ Result GraphicsPipeline::Draw(const DrawArraysCommand* command, // Note that a command updating a descriptor set and a command using // it must be submitted separately, because using a descriptor set // while updating it is not safe. - r = UpdateDescriptorSetsIfNeeded(); - if (!r.IsSuccess()) - return r; + UpdateDescriptorSetsIfNeeded(); { CommandBufferGuard cmd_buf_guard(GetCommandBuffer()); diff --git a/src/vulkan/pipeline.cc b/src/vulkan/pipeline.cc index de7c20c..d0257f3 100644 --- a/src/vulkan/pipeline.cc +++ b/src/vulkan/pipeline.cc @@ -32,21 +32,6 @@ namespace { const char* kDefaultEntryPointName = "main"; -Result ToVkDescriptorType(DescriptorType type, VkDescriptorType* ret) { - Result r = Result("Unknown resource type"); - switch (type) { - case DescriptorType::kStorageBuffer: - *ret = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; - r = {}; - break; - case DescriptorType::kUniformBuffer: - *ret = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - r = {}; - break; - } - return r; -} - } // namespace Pipeline::Pipeline( @@ -109,15 +94,10 @@ Result Pipeline::CreateDescriptorSetLayouts() { // If there are no descriptors for this descriptor set we only // need to create its layout and there will be no bindings. std::vector<VkDescriptorSetLayoutBinding> bindings; - for (auto& desc : info.descriptors_) { - VkDescriptorType desc_type = VK_DESCRIPTOR_TYPE_MAX_ENUM; - Result r = ToVkDescriptorType(desc->GetType(), &desc_type); - if (!r.IsSuccess()) - return r; - + for (auto& desc : info.buffer_descriptors) { bindings.emplace_back(); bindings.back().binding = desc->GetBinding(); - bindings.back().descriptorType = desc_type; + bindings.back().descriptorType = desc->GetVkDescriptorType(); bindings.back().descriptorCount = 1; bindings.back().stageFlags = VK_SHADER_STAGE_ALL; } @@ -140,12 +120,8 @@ Result Pipeline::CreateDescriptorPools() { continue; std::vector<VkDescriptorPoolSize> pool_sizes; - for (auto& desc : info.descriptors_) { - VkDescriptorType type; - Result r = ToVkDescriptorType(desc->GetType(), &type); - if (!r.IsSuccess()) - return r; - + for (auto& desc : info.buffer_descriptors) { + VkDescriptorType type = desc->GetVkDescriptorType(); auto it = find_if(pool_sizes.begin(), pool_sizes.end(), [&type](const VkDescriptorPoolSize& size) { return size.type == type; @@ -250,16 +226,11 @@ Result Pipeline::CreateVkDescriptorRelatedObjectsIfNeeded() { return {}; } -Result Pipeline::UpdateDescriptorSetsIfNeeded() { +void Pipeline::UpdateDescriptorSetsIfNeeded() { for (auto& info : descriptor_set_info_) { - for (auto& desc : info.descriptors_) { - Result r = desc->UpdateDescriptorSetIfNeeded(info.vk_desc_set); - if (!r.IsSuccess()) - return r; - } + for (auto& desc : info.buffer_descriptors) + desc->UpdateDescriptorSetIfNeeded(info.vk_desc_set); } - - return {}; } Result Pipeline::RecordPushConstant(const VkPipelineLayout& pipeline_layout) { @@ -300,8 +271,8 @@ Result Pipeline::AddDescriptor(const BufferCommand* cmd) { } descriptor_set_info_[desc_set].empty = false; - auto& descriptors = descriptor_set_info_[desc_set].descriptors_; - Descriptor* desc = nullptr; + auto& descriptors = descriptor_set_info_[desc_set].buffer_descriptors; + BufferDescriptor* desc = nullptr; for (auto& descriptor : descriptors) { if (descriptor->GetBinding() == cmd->GetBinding()) desc = descriptor.get(); @@ -347,7 +318,7 @@ Result Pipeline::SendDescriptorDataToDeviceIfNeeded() { return guard.GetResult(); for (auto& info : descriptor_set_info_) { - for (auto& desc : info.descriptors_) { + for (auto& desc : info.buffer_descriptors) { Result r = desc->CreateResourceIfNeeded(memory_properties_); if (!r.IsSuccess()) return r; @@ -370,11 +341,8 @@ Result Pipeline::SendDescriptorDataToDeviceIfNeeded() { return guard.GetResult(); for (auto& info : descriptor_set_info_) { - for (auto& desc : info.descriptors_) { - Result r = desc->RecordCopyDataToResourceIfNeeded(command_.get()); - if (!r.IsSuccess()) - return r; - } + for (auto& desc : info.buffer_descriptors) + desc->RecordCopyDataToResourceIfNeeded(command_.get()); } return guard.Submit(GetFenceTimeout()); } @@ -400,11 +368,8 @@ Result Pipeline::ReadbackDescriptorsToHostDataQueue() { return guard.GetResult(); for (auto& desc_set : descriptor_set_info_) { - for (auto& desc : desc_set.descriptors_) { - Result r = desc->RecordCopyDataToHost(command_.get()); - if (!r.IsSuccess()) - return r; - } + for (auto& desc : desc_set.buffer_descriptors) + desc->RecordCopyDataToHost(command_.get()); } Result r = guard.Submit(GetFenceTimeout()); @@ -413,7 +378,7 @@ Result Pipeline::ReadbackDescriptorsToHostDataQueue() { } for (auto& desc_set : descriptor_set_info_) { - for (auto& desc : desc_set.descriptors_) { + for (auto& desc : desc_set.buffer_descriptors) { Result r = desc->MoveResourceToBufferOutput(); if (!r.IsSuccess()) return r; diff --git a/src/vulkan/pipeline.h b/src/vulkan/pipeline.h index 7240910..4a9a099 100644 --- a/src/vulkan/pipeline.h +++ b/src/vulkan/pipeline.h @@ -24,8 +24,8 @@ #include "amber/vulkan_header.h" #include "src/cast_hash.h" #include "src/engine.h" +#include "src/vulkan/buffer_descriptor.h" #include "src/vulkan/command_buffer.h" -#include "src/vulkan/descriptor.h" #include "src/vulkan/push_constant.h" namespace amber { @@ -77,7 +77,7 @@ class Pipeline { // Initialize the pipeline. Result Initialize(CommandPool* pool, VkQueue queue); - Result UpdateDescriptorSetsIfNeeded(); + void UpdateDescriptorSetsIfNeeded(); Result SendDescriptorDataToDeviceIfNeeded(); void BindVkDescriptorSets(const VkPipelineLayout& pipeline_layout); @@ -105,7 +105,7 @@ class Pipeline { VkDescriptorSetLayout layout = VK_NULL_HANDLE; VkDescriptorPool pool = VK_NULL_HANDLE; VkDescriptorSet vk_desc_set = VK_NULL_HANDLE; - std::vector<std::unique_ptr<Descriptor>> descriptors_; + std::vector<std::unique_ptr<BufferDescriptor>> buffer_descriptors; }; // Create Vulkan descriptor related objects i.e., |