Fix game not closing when compiled with --without-nvtt.

Fixes: #6107

Differential Revision: https://code.wildfiregames.com/D4138
This was SVN commit r25766.
This commit is contained in:
Stan 2021-06-10 15:42:38 +00:00
parent 4de9c4c164
commit 79e772152b
2 changed files with 16 additions and 10 deletions

View File

@ -293,20 +293,21 @@ CTextureConverter::Settings CTextureConverter::ComputeSettings(const std::wstrin
CTextureConverter::CTextureConverter(PIVFS vfs, bool highQuality) : CTextureConverter::CTextureConverter(PIVFS vfs, bool highQuality) :
m_VFS(vfs), m_HighQuality(highQuality), m_Shutdown(false) m_VFS(vfs), m_HighQuality(highQuality), m_Shutdown(false)
{ {
#if CONFIG2_NVTT
// Verify that we are running with at least the version we were compiled with, // Verify that we are running with at least the version we were compiled with,
// to avoid bugs caused by ABI changes // to avoid bugs caused by ABI changes
#if CONFIG2_NVTT
ENSURE(nvtt::version() >= NVTT_VERSION); ENSURE(nvtt::version() >= NVTT_VERSION);
#endif
m_WorkerThread = std::thread(Threading::HandleExceptions<RunThread>::Wrapper, this); m_WorkerThread = std::thread(Threading::HandleExceptions<RunThread>::Wrapper, this);
// Maybe we should share some centralised pool of worker threads? // Maybe we should share some centralised pool of worker threads?
// For now we'll just stick with a single thread for this specific use. // For now we'll just stick with a single thread for this specific use.
#endif // CONFIG2_NVTT
} }
CTextureConverter::~CTextureConverter() CTextureConverter::~CTextureConverter()
{ {
#if CONFIG2_NVTT
// Tell the thread to shut down // Tell the thread to shut down
{ {
std::lock_guard<std::mutex> lock(m_WorkerMutex); std::lock_guard<std::mutex> lock(m_WorkerMutex);
@ -326,6 +327,7 @@ CTextureConverter::~CTextureConverter()
// Wait for it to shut down cleanly // Wait for it to shut down cleanly
m_WorkerThread.join(); m_WorkerThread.join();
#endif // CONFIG2_NVTT
} }
bool CTextureConverter::ConvertTexture(const CTexturePtr& texture, const VfsPath& src, const VfsPath& dest, const Settings& settings) bool CTextureConverter::ConvertTexture(const CTexturePtr& texture, const VfsPath& src, const VfsPath& dest, const Settings& settings)
@ -476,10 +478,10 @@ bool CTextureConverter::ConvertTexture(const CTexturePtr& texture, const VfsPath
return true; return true;
#else #else // CONFIG2_NVTT
LOGERROR("Failed to convert texture \"%s\" (NVTT not available)", src.string8()); LOGERROR("Failed to convert texture \"%s\" (NVTT not available)", src.string8());
return false; return false;
#endif #endif // !CONFIG2_NVTT
} }
bool CTextureConverter::Poll(CTexturePtr& texture, VfsPath& dest, bool& ok) bool CTextureConverter::Poll(CTexturePtr& texture, VfsPath& dest, bool& ok)
@ -528,24 +530,26 @@ bool CTextureConverter::Poll(CTexturePtr& texture, VfsPath& dest, bool& ok)
ok = true; ok = true;
return true; return true;
#else // #if CONFIG2_NVTT #else // CONFIG2_NVTT
return false; return false;
#endif #endif // !CONFIG2_NVTT
} }
bool CTextureConverter::IsBusy() bool CTextureConverter::IsBusy()
{ {
#if CONFIG2_NVTT
std::lock_guard<std::mutex> lock(m_WorkerMutex); std::lock_guard<std::mutex> lock(m_WorkerMutex);
return !m_RequestQueue.empty(); return !m_RequestQueue.empty();
#else // CONFIG2_NVTT
return false;
#endif // !CONFIG2_NVTT
} }
void CTextureConverter::RunThread(CTextureConverter* textureConverter) void CTextureConverter::RunThread(CTextureConverter* textureConverter)
{ {
#if CONFIG2_NVTT
debug_SetThreadName("TextureConverter"); debug_SetThreadName("TextureConverter");
g_Profiler2.RegisterCurrentThread("texconv"); g_Profiler2.RegisterCurrentThread("texconv");
#if CONFIG2_NVTT
// Wait until the main thread wakes us up // Wait until the main thread wakes us up
while (true) while (true)
{ {
@ -595,5 +599,5 @@ void CTextureConverter::RunThread(CTextureConverter* textureConverter)
std::lock_guard<std::mutex> wait_lock(textureConverter->m_WorkerMutex); std::lock_guard<std::mutex> wait_lock(textureConverter->m_WorkerMutex);
textureConverter->m_Shutdown = false; textureConverter->m_Shutdown = false;
#endif #endif // CONFIG2_NVTT
} }

View File

@ -207,9 +207,11 @@ private:
PIVFS m_VFS; PIVFS m_VFS;
bool m_HighQuality; bool m_HighQuality;
#if CONFIG2_NVTT
std::thread m_WorkerThread; std::thread m_WorkerThread;
std::mutex m_WorkerMutex; std::mutex m_WorkerMutex;
std::condition_variable m_WorkerCV; std::condition_variable m_WorkerCV;
#endif // CONFIG2_NVTT
struct ConversionRequest; struct ConversionRequest;
struct ConversionResult; struct ConversionResult;