24 const void* data =
m_buffer->getData();
27 if (!data || size == 0) {
31 uint32_t maxFrames =
m_ctx->maxFrameInFlight();
32 size_t copySize = std::min(size,
static_cast<size_t>(
m_bufferInfos[0].range));
39 uint32_t frameIndex =
m_ctx->currentSubmitFrameIndex();
50 uint32_t currentFrame =
m_ctx->currentSubmitFrameIndex();
62 for (uint32_t i = 0; i < maxFrames; i++) {
63 if (i != currentFrame) {
111 vk::Device device =
m_ctx->getDevice();
112 uint32_t maxFramesInFlight =
m_ctx->maxFrameInFlight();
114 vk::DeviceSize bufferSize =
m_layout.getTotalSize();
115 if (bufferSize == 0) {
124 for (uint32_t i = 0; i < maxFramesInFlight; i++) {
126 vk::BufferCreateInfo bufferInfo;
127 bufferInfo.size = bufferSize;
128 bufferInfo.usage = vk::BufferUsageFlagBits::eUniformBuffer;
129 bufferInfo.sharingMode = vk::SharingMode::eExclusive;
131 m_buffers[i] = device.createBuffer(bufferInfo);
133 vk::MemoryRequirements memRequirements = device.getBufferMemoryRequirements(
m_buffers[i]);
135 vk::MemoryAllocateInfo allocInfo;
136 allocInfo.allocationSize = memRequirements.size;
137 allocInfo.memoryTypeIndex =
m_ctx->findMemoryType(
138 memRequirements.memoryTypeBits,
139 vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent
142 m_memories[i] = device.allocateMemory(allocInfo);
148 memset(
m_mappedData[i], 0,
static_cast<size_t>(bufferSize));
150 catch (
const vk::SystemError& e) {
151 throw std::runtime_error(
"Failed to create uniform buffer: " + std::string(e.what()));
156 for (uint32_t i = 0; i < maxFramesInFlight; i++) {