Allow shared memory uniform buffer creation

This commit is contained in:
Georg Hagen
2024-07-22 21:08:08 +02:00
parent 06e6623050
commit 53410bb8db
3 changed files with 15 additions and 3 deletions

View File

@@ -7,6 +7,8 @@
#pragma once
#include "Base/ICloseable.hpp"
#include "Scene/Shader/DescriptorInputDescription.hpp"
#include "Scene/UpdateFrequency.hpp"
namespace OpenVulkano::Scene
{

View File

@@ -225,12 +225,22 @@ namespace OpenVulkano::Vulkan
return static_cast<VulkanCamera*>(camera->renderCamera);
}
UniformBuffer* ResourceManager::CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId)
UniformBuffer* ResourceManager::CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId, bool hostVis)
{
const std::unique_lock lock(mutex);
const vk::DeviceSize allocSize = Utils::Align(size, uniformBufferAlignment);
auto buffer = CreateDeviceOnlyBufferWithData(allocSize, vk::BufferUsageFlagBits::eUniformBuffer, data);
MemoryPool::ManagedBufferPtr buffer;
if (hostVis)
{
buffer = memPool.CreateBuffer(allocSize, vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostVisible);
buffer->Map();
buffer->Copy(data, size, 0);
}
else
{
buffer = CreateDeviceOnlyBufferWithData(allocSize, vk::BufferUsageFlagBits::eUniformBuffer, data);
}
UniformBuffer* uBuffer = new UniformBuffer();
uBuffer->Init(std::move(buffer), 0, allocSize, GetDescriptorLayoutSet(binding), binding, setId);

View File

@@ -114,7 +114,7 @@ namespace OpenVulkano
[[nodiscard]] vk::Device GetDevice() const { return device; }
UniformBuffer* CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId = 2);
UniformBuffer* CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId = 2, bool hostVis = false);
vk::Sampler CreateSampler(const vk::SamplerCreateInfo& samplerConfig);