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; };