Allow custom input descriptors

This commit is contained in:
2023-09-01 14:59:11 +02:00
parent df4194be51
commit be7a48dc09
7 changed files with 40 additions and 21 deletions

View File

@@ -189,6 +189,18 @@ namespace openVulkanoCpp::Vulkan
}
}
UniformBuffer* ResourceManager::CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId)
{
const std::unique_lock lock(mutex);
const vk::DeviceSize allocSize = Utils::Align(size, uniformBufferAlignment);
auto buffer = CreateDeviceOnlyBufferWithData(allocSize, vk::BufferUsageFlagBits::eUniformBuffer, data);
UniformBuffer* uBuffer = new UniformBuffer();
uBuffer->Init(buffer, 0, allocSize, GetDescriptorLayoutSet(binding), binding, setId);
return uBuffer;
}
vk::DescriptorSetLayout* ResourceManager::GetDescriptorLayoutSet(const DescriptorSetLayoutBinding& descriptorSetLayoutBinding)
{
auto& layout = descriptorSetLayoutCache[descriptorSetLayoutBinding];

View File

@@ -97,6 +97,8 @@ namespace openVulkanoCpp
[[nodiscard]] vk::Device GetDevice() const { return device; }
UniformBuffer* CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId = 2);
protected: // Allocation management
void DoFreeBuffer(ManagedBuffer* buffer);

View File

@@ -51,7 +51,7 @@ namespace openVulkanoCpp::Vulkan
void Record(VulkanDrawContext* drawContext) override
{
uint32_t frameOffset = m_frameOffset * drawContext->currentImageId;
drawContext->commandBuffer.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, drawContext->GetShader()->pipelineLayout, m_setOffset, m_setCount, &m_descriptorSet, 1, &frameOffset);
drawContext->commandBuffer.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, drawContext->GetShader()->pipelineLayout, m_setOffset, m_setCount, &m_descriptorSet, (m_frameOffset) ? 1 : 0, &frameOffset);
}
void Update(void* data, uint32_t size, uint32_t bufferId) const