Allow shared memory uniform buffer creation
This commit is contained in:
@@ -7,6 +7,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "Base/ICloseable.hpp"
|
||||
#include "Scene/Shader/DescriptorInputDescription.hpp"
|
||||
#include "Scene/UpdateFrequency.hpp"
|
||||
|
||||
namespace OpenVulkano::Scene
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user