29 m_ctx->maxFrameInFlight() : 1;
35 for (uint32_t i = 0; i < bufferCount; i++) {
36 vk::BufferCreateInfo bufferInfo;
37 bufferInfo.size = bufferSize;
38 bufferInfo.usage = vk::BufferUsageFlagBits::eIndexBuffer;
39 bufferInfo.sharingMode = vk::SharingMode::eExclusive;
43 vk::MemoryRequirements memRequirements =
m_ctx->getDevice().getBufferMemoryRequirements(
m_buffers[i]);
45 vk::MemoryAllocateInfo allocInfo;
46 allocInfo.allocationSize = memRequirements.size;
47 allocInfo.memoryTypeIndex =
m_ctx->findMemoryType(
48 memRequirements.memoryTypeBits,
49 vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent
146 frameIndex = frameIndex %
m_buffers.size();
150 uint32_t oldBufferSize =
static_cast<uint32_t
>(oldSize *
m_stride);
151 uint32_t newBufferSize =
static_cast<uint32_t
>(size *
m_stride);
153 void* tempData =
nullptr;
154 uint32_t copySize =
static_cast<uint32_t
>(std::min(oldSize, size) *
m_stride);
157 tempData = malloc(copySize);
159 void* srcData =
m_ctx->getDevice().mapMemory(
m_memories[frameIndex], 0, copySize);
160 memcpy(tempData, srcData, copySize);
175 vk::BufferCreateInfo bufferInfo;
176 bufferInfo.size = newBufferSize;
177 bufferInfo.usage = vk::BufferUsageFlagBits::eIndexBuffer;
178 bufferInfo.sharingMode = vk::SharingMode::eExclusive;
180 m_buffers[frameIndex] =
m_ctx->getDevice().createBuffer(bufferInfo);
182 vk::MemoryRequirements memRequirements =
m_ctx->getDevice().getBufferMemoryRequirements(
m_buffers[frameIndex]);
184 vk::MemoryAllocateInfo allocInfo;
185 allocInfo.allocationSize = memRequirements.size;
186 allocInfo.memoryTypeIndex =
m_ctx->findMemoryType(
187 memRequirements.memoryTypeBits,
188 vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent
194 if (tempData && copySize > 0) {
195 void* mappedData =
m_ctx->getDevice().mapMemory(
m_memories[frameIndex], 0, copySize);
196 memcpy(mappedData, tempData, copySize);