- release staging buffer after the frame it was used in

This commit is contained in:
Magnus Norddahl 2019-04-30 19:36:34 +02:00
parent 34a8e9050b
commit d985d98122
2 changed files with 7 additions and 7 deletions

View file

@ -65,7 +65,6 @@ void VkHardwareTexture::Reset()
auto &deleteList = fb->FrameDeleteList; auto &deleteList = fb->FrameDeleteList;
if (mImage) deleteList.Images.push_back(std::move(mImage)); if (mImage) deleteList.Images.push_back(std::move(mImage));
if (mImageView) deleteList.ImageViews.push_back(std::move(mImageView)); if (mImageView) deleteList.ImageViews.push_back(std::move(mImageView));
if (mStagingBuffer) deleteList.Buffers.push_back(std::move(mStagingBuffer));
} }
} }
@ -223,12 +222,12 @@ void VkHardwareTexture::CreateTexture(int w, int h, int pixelsize, VkFormat form
BufferBuilder bufbuilder; BufferBuilder bufbuilder;
bufbuilder.setSize(totalSize); bufbuilder.setSize(totalSize);
bufbuilder.setUsage(VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_ONLY); bufbuilder.setUsage(VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_ONLY);
mStagingBuffer = bufbuilder.create(fb->device); std::unique_ptr<VulkanBuffer> stagingBuffer = bufbuilder.create(fb->device);
mStagingBuffer->SetDebugName("VkHardwareTexture.mStagingBuffer"); stagingBuffer->SetDebugName("VkHardwareTexture.mStagingBuffer");
uint8_t *data = (uint8_t*)mStagingBuffer->Map(0, totalSize); uint8_t *data = (uint8_t*)stagingBuffer->Map(0, totalSize);
memcpy(data, pixels, totalSize); memcpy(data, pixels, totalSize);
mStagingBuffer->Unmap(); stagingBuffer->Unmap();
ImageBuilder imgbuilder; ImageBuilder imgbuilder;
imgbuilder.setFormat(format); imgbuilder.setFormat(format);
@ -254,7 +253,9 @@ void VkHardwareTexture::CreateTexture(int w, int h, int pixelsize, VkFormat form
region.imageExtent.depth = 1; region.imageExtent.depth = 1;
region.imageExtent.width = w; region.imageExtent.width = w;
region.imageExtent.height = h; region.imageExtent.height = h;
cmdbuffer->copyBufferToImage(mStagingBuffer->buffer, mImage->image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region); cmdbuffer->copyBufferToImage(stagingBuffer->buffer, mImage->image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
fb->FrameDeleteList.Buffers.push_back(std::move(stagingBuffer));
GenerateMipmaps(mImage.get(), cmdbuffer); GenerateMipmaps(mImage.get(), cmdbuffer);
} }

View file

@ -72,7 +72,6 @@ private:
std::vector<DescriptorEntry> mDescriptorSets; std::vector<DescriptorEntry> mDescriptorSets;
std::unique_ptr<VulkanImage> mImage; std::unique_ptr<VulkanImage> mImage;
std::unique_ptr<VulkanImageView> mImageView; std::unique_ptr<VulkanImageView> mImageView;
std::unique_ptr<VulkanBuffer> mStagingBuffer;
VkImageLayout mImageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; VkImageLayout mImageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
int mTexelsize = 4; int mTexelsize = 4;
}; };