Refactored KRTexture::_swapHandles for Vulkan. Added KRTexture::m_haveNewHandles.

This commit is contained in:
2022-07-13 23:44:43 -07:00
parent 85847fd2e0
commit 1d11be0e61
2 changed files with 12 additions and 5 deletions

View File

@@ -47,6 +47,7 @@ KRTexture::KRTexture(KRContext &context, std::string name) : KRResource(context,
m_last_frame_max_lod_coverage = 0.0f; m_last_frame_max_lod_coverage = 0.0f;
m_last_frame_usage = TEXTURE_USAGE_NONE; m_last_frame_usage = TEXTURE_USAGE_NONE;
m_handle_lock.clear(); m_handle_lock.clear();
m_haveNewHandles = false;
} }
KRTexture::~KRTexture() KRTexture::~KRTexture()
@@ -227,17 +228,22 @@ void KRTexture::bind(GLuint texture_unit) {
void KRTexture::_swapHandles() void KRTexture::_swapHandles()
{ {
KRDeviceManager* deviceManager = getContext().getDeviceManager();
//while(m_handle_lock.test_and_set()); // Spin lock //while(m_handle_lock.test_and_set()); // Spin lock
if(!m_handle_lock.test_and_set()) { if(!m_handle_lock.test_and_set()) {
if(m_iHandle != m_iNewHandle) { if(m_haveNewHandles) {
if(m_iHandle != 0) { for (TextureHandle t : m_handles) {
GLDEBUG(glDeleteTextures(1, &m_iHandle)); std::unique_ptr<KRDevice>& device = deviceManager->getDevice(t.device);
getContext().getTextureManager()->memoryChanged(-m_textureMemUsed); VmaAllocator allocator = device->getAllocator();
vmaDestroyImage(allocator, t.image, t.allocation);
} }
m_handles.clear();
m_handles.swap(m_newHandles);
m_textureMemUsed = (long)m_newTextureMemUsed; m_textureMemUsed = (long)m_newTextureMemUsed;
m_newTextureMemUsed = 0; m_newTextureMemUsed = 0;
m_iHandle = m_iNewHandle;
m_current_lod_max_dim = m_new_lod_max_dim; m_current_lod_max_dim = m_new_lod_max_dim;
m_haveNewHandles = false;
} }
m_handle_lock.clear(); m_handle_lock.clear();
} }

View File

@@ -99,6 +99,7 @@ protected:
std::vector<TextureHandle> m_handles; std::vector<TextureHandle> m_handles;
std::vector<TextureHandle> m_newHandles; std::vector<TextureHandle> m_newHandles;
std::atomic_bool m_haveNewHandles;
// TODO - Remove m_iHandle and m_iNewHandle once Vulkan refactoring complete // TODO - Remove m_iHandle and m_iNewHandle once Vulkan refactoring complete
GLuint m_iHandle; GLuint m_iHandle;