diff --git a/examples/VulkanTest/main.cpp b/examples/VulkanTest/main.cpp index f456edf96..8690fc699 100644 --- a/examples/VulkanTest/main.cpp +++ b/examples/VulkanTest/main.cpp @@ -181,38 +181,17 @@ int main() Nz::UInt32 uniformSize = sizeof(ubo); - Nz::Vk::Buffer uniformBuffer; - if (!uniformBuffer.Create(vulkanDevice.shared_from_this(), 0, uniformSize, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)) + Nz::UniformBuffer uniformBuffer(uniformSize, Nz::DataStorage_Hardware, Nz::BufferUsage_Dynamic); + uniformBuffer.Fill(&ubo, 0, uniformSize); + + Nz::RenderBuffer* renderBufferUB = static_cast(uniformBuffer.GetBuffer()->GetImpl()); + if (!renderBufferUB->Synchronize(&vulkanDevice)) { - NazaraError("Failed to create vertex buffer"); - return __LINE__; - } - - VkMemoryRequirements memRequirement = uniformBuffer.GetMemoryRequirements(); - - Nz::Vk::DeviceMemory uniformBufferMemory; - if (!uniformBufferMemory.Create(vulkanDevice.shared_from_this(), memRequirement.size, memRequirement.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)) - { - NazaraError("Failed to allocate vertex buffer memory"); - return __LINE__; - } - - if (!uniformBufferMemory.Map(0, uniformSize)) - { - NazaraError("Failed to map vertex buffer"); - return __LINE__; - } - - std::memcpy(uniformBufferMemory.GetMappedPointer(), &ubo, uniformSize); - - uniformBufferMemory.Unmap(); - - if (!uniformBuffer.BindBufferMemory(uniformBufferMemory)) - { - NazaraError("Failed to bind uniform buffer to its memory"); + NazaraError("Failed to synchronize render buffer"); return __LINE__; } + Nz::VulkanBuffer* uniformBufferImpl = static_cast(renderBufferUB->GetHardwareBuffer(&vulkanDevice)); VkDescriptorSetLayoutBinding layoutBinding = {}; layoutBinding.binding = 0; @@ -241,7 +220,7 @@ int main() Nz::Vk::DescriptorSet descriptorSet = descriptorPool.AllocateDescriptorSet(descriptorLayout); - descriptorSet.WriteUniformDescriptor(0, uniformBuffer, 0, uniformSize); + descriptorSet.WriteUniformDescriptor(0, uniformBufferImpl->GetBufferHandle(), 0, uniformSize); Nz::RenderPipelineInfo pipelineInfo; @@ -561,15 +540,14 @@ int main() { ubo.viewMatrix = Nz::Matrix4f::ViewMatrix(viewerPos, camAngles); - if (!uniformBufferMemory.Map(0, uniformSize)) + uniformBuffer.Fill(&ubo, 0, uniformSize); + + Nz::RenderBuffer* renderBufferUB = static_cast(uniformBuffer.GetBuffer()->GetImpl()); + if (!renderBufferUB->Synchronize(&vulkanDevice)) { - NazaraError("Failed to map vertex buffer"); + NazaraError("Failed to synchronize render buffer"); return __LINE__; } - - std::memcpy(uniformBufferMemory.GetMappedPointer(), &ubo, uniformSize); - - uniformBufferMemory.Unmap(); } Nz::UInt32 imageIndex; diff --git a/src/Nazara/VulkanRenderer/VulkanBuffer.cpp b/src/Nazara/VulkanRenderer/VulkanBuffer.cpp index 08c9469a9..db834d035 100644 --- a/src/Nazara/VulkanRenderer/VulkanBuffer.cpp +++ b/src/Nazara/VulkanRenderer/VulkanBuffer.cpp @@ -4,6 +4,7 @@ #include #include +#include #include namespace Nz @@ -25,7 +26,27 @@ namespace Nz bool VulkanBuffer::Initialize(UInt32 size, BufferUsageFlags usage) { - if (!m_buffer.Create(m_device, 0, size, (m_type == BufferType_Index) ? VK_BUFFER_USAGE_INDEX_BUFFER_BIT : VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)) + VkBufferUsageFlags type; + switch (m_type) + { + case BufferType_Index: + type = VK_BUFFER_USAGE_INDEX_BUFFER_BIT; + break; + + case BufferType_Vertex: + type = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; + break; + + case BufferType_Uniform: + type = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; + break; + + default: + NazaraError("Unhandled buffer usage 0x" + String::Number(m_type, 16)); + return false; + } + + if (!m_buffer.Create(m_device, 0, size, type)) { NazaraError("Failed to create vertex buffer"); return false;