diff --git a/openVulkanoCpp/Scene/UniformBuffer.hpp b/openVulkanoCpp/Scene/UniformBuffer.hpp index 1551d3f..f198c3e 100644 --- a/openVulkanoCpp/Scene/UniformBuffer.hpp +++ b/openVulkanoCpp/Scene/UniformBuffer.hpp @@ -7,6 +7,8 @@ #pragma once #include "Base/ICloseable.hpp" +#include "Scene/Shader/DescriptorInputDescription.hpp" +#include "Scene/UpdateFrequency.hpp" namespace OpenVulkano::Scene { diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp index 88ac114..2fc8b8d 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp @@ -225,12 +225,22 @@ namespace OpenVulkano::Vulkan return static_cast(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); diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp index fe75424..3910542 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp @@ -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);