void VertexShaderCache::WaitForBackgroundCompilesToComplete() { g_async_compiler->WaitUntilCompletion([](size_t completed, size_t total) { Host_UpdateProgressDialog(GetStringT("Compiling shaders...").c_str(), static_cast<int>(completed), static_cast<int>(total)); }); g_async_compiler->RetrieveWorkItems(); Host_UpdateProgressDialog("", -1, -1); // Switch from precompile -> runtime compiler threads. g_async_compiler->ResizeWorkerThreads(g_ActiveConfig.GetShaderCompilerThreads()); }
void HiresTexture::Prefetch() { Common::SetCurrentThreadName("Prefetcher"); const size_t total = s_textureMap.size(); size_t count = 0; size_t notification = 10; u32 starttime = Common::Timer::GetTimeMs(); for (const auto& entry : s_textureMap) { const std::string& base_filename = entry.first; std::unique_lock<std::mutex> lk(s_textureCacheMutex); auto iter = s_textureCache.find(base_filename); if (iter == s_textureCache.end()) { lk.unlock(); HiresTexture* ptr = Load(base_filename, [](size_t requested_size) { return new u8[requested_size]; }, true); lk.lock(); if (ptr != nullptr) { size_sum.fetch_add(ptr->m_cached_data_size); iter = s_textureCache.insert( iter, std::make_pair(base_filename, std::shared_ptr<HiresTexture>(ptr))); } } if (s_textureCacheAbortLoading.IsSet()) { if (g_ActiveConfig.bWaitForCacheHiresTextures) { Host_UpdateProgressDialog("", -1, -1); } return; } if (size_sum.load() > max_mem) { Config::SetCurrent(Config::GFX_HIRES_TEXTURES, false); OSD::AddMessage( StringFromFormat( "Custom Textures prefetching after %.1f MB aborted, not enough RAM available", size_sum / (1024.0 * 1024.0)), 10000); if (g_ActiveConfig.bWaitForCacheHiresTextures) { Host_UpdateProgressDialog("", -1, -1); } return; } count++; size_t percent = (count * 100) / total; if (percent >= notification) { if (g_ActiveConfig.bWaitForCacheHiresTextures) { Host_UpdateProgressDialog(GetStringT("Prefetching Custom Textures...").c_str(), static_cast<int>(count), static_cast<int>(total)); } else { OSD::AddMessage(StringFromFormat("Custom Textures prefetching %.1f MB %zu %% finished", size_sum / (1024.0 * 1024.0), percent), 2000); } notification += 10; } } if (g_ActiveConfig.bWaitForCacheHiresTextures) { Host_UpdateProgressDialog("", -1, -1); } u32 stoptime = Common::Timer::GetTimeMs(); OSD::AddMessage(StringFromFormat("Custom Textures loaded, %.1f MB in %.1f s", size_sum / (1024.0 * 1024.0), (stoptime - starttime) / 1000.0), 10000); }