diff options
Diffstat (limited to 'src/vulkan/buffer_descriptor.h')
-rw-r--r-- | src/vulkan/buffer_descriptor.h | 48 |
1 files changed, 14 insertions, 34 deletions
diff --git a/src/vulkan/buffer_descriptor.h b/src/vulkan/buffer_descriptor.h index 3c6a690..d481ae5 100644 --- a/src/vulkan/buffer_descriptor.h +++ b/src/vulkan/buffer_descriptor.h @@ -23,6 +23,7 @@ #include "amber/vulkan_header.h" #include "src/buffer.h" #include "src/engine.h" +#include "src/vulkan/buffer_backed_descriptor.h" #include "src/vulkan/transfer_buffer.h" namespace amber { @@ -31,53 +32,32 @@ namespace vulkan { class CommandBuffer; class Device; -enum class DescriptorType : uint8_t { - kStorageBuffer = 0, - kUniformBuffer, -}; - /// Stores descriptor set and binding information for storage and uniform /// buffers. -class BufferDescriptor { +class BufferDescriptor : public BufferBackedDescriptor { public: BufferDescriptor(Buffer* buffer, DescriptorType type, Device* device, uint32_t desc_set, uint32_t binding); - ~BufferDescriptor(); - - uint32_t GetDescriptorSet() const { return descriptor_set_; } - uint32_t GetBinding() const { return binding_; } - - VkDescriptorType GetVkDescriptorType() const; + ~BufferDescriptor() override; - bool IsStorageBuffer() const { - return type_ == DescriptorType::kStorageBuffer; + void UpdateDescriptorSetIfNeeded(VkDescriptorSet descriptor_set) override; + Result CreateResourceIfNeeded() override; + Result MoveResourceToBufferOutput() override; + std::vector<uint32_t> GetDynamicOffsets() override { + return dynamic_offsets_; } - bool IsUniformBuffer() const { - return type_ == DescriptorType::kUniformBuffer; - } - - Result CreateResourceIfNeeded(); - void RecordCopyDataToResourceIfNeeded(CommandBuffer* command); - Result RecordCopyDataToHost(CommandBuffer* command); - Result MoveResourceToBufferOutput(); - void UpdateDescriptorSetIfNeeded(VkDescriptorSet descriptor_set); + void AddDynamicOffset(uint32_t offset) { dynamic_offsets_.push_back(offset); } + BufferDescriptor* AsBufferDescriptor() override { return this; } - Result SetSizeInElements(uint32_t element_count); - Result AddToBuffer(const std::vector<Value>& values, uint32_t offset); + protected: + std::vector<Resource*> GetResources() override; private: - 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; + std::vector<std::unique_ptr<TransferBuffer>> transfer_buffers_; + std::vector<uint32_t> dynamic_offsets_; }; } // namespace vulkan |