From bff22bbd812c815a5a2305420ffccc124ac1c18e Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sat, 23 Nov 2019 12:09:05 +0100 Subject: [PATCH] - don't map the frame buffer memory every frame when doing software rendering --- src/rendering/vulkan/textures/vk_hwtexture.cpp | 11 +++++++++-- src/rendering/vulkan/textures/vk_hwtexture.h | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/rendering/vulkan/textures/vk_hwtexture.cpp b/src/rendering/vulkan/textures/vk_hwtexture.cpp index 93a1cc92d5d..d43abaf6ac2 100644 --- a/src/rendering/vulkan/textures/vk_hwtexture.cpp +++ b/src/rendering/vulkan/textures/vk_hwtexture.cpp @@ -69,6 +69,12 @@ void VkHardwareTexture::Reset() { ResetDescriptors(); + if (mappedSWFB) + { + mImage.Image->Unmap(); + mappedSWFB = nullptr; + } + auto &deleteList = fb->FrameDeleteList; if (mImage.Image) deleteList.Images.push_back(std::move(mImage.Image)); if (mImage.View) deleteList.ImageViews.push_back(std::move(mImage.View)); @@ -348,12 +354,13 @@ void VkHardwareTexture::AllocateBuffer(int w, int h, int texelsize) uint8_t *VkHardwareTexture::MapBuffer() { - return (uint8_t*)mImage.Image->Map(0, mImage.Image->width * mImage.Image->height * mTexelsize); + if (!mappedSWFB) + mappedSWFB = (uint8_t*)mImage.Image->Map(0, mImage.Image->width * mImage.Image->height * mTexelsize); + return mappedSWFB; } unsigned int VkHardwareTexture::CreateTexture(unsigned char * buffer, int w, int h, int texunit, bool mipmap, int translation, const char *name) { - mImage.Image->Unmap(); return 0; } diff --git a/src/rendering/vulkan/textures/vk_hwtexture.h b/src/rendering/vulkan/textures/vk_hwtexture.h index 6d461184fa9..9770cb1c013 100644 --- a/src/rendering/vulkan/textures/vk_hwtexture.h +++ b/src/rendering/vulkan/textures/vk_hwtexture.h @@ -77,4 +77,6 @@ class VkHardwareTexture : public IHardwareTexture int mTexelsize = 4; VkTextureImage mDepthStencil; + + uint8_t* mappedSWFB = nullptr; };