diff --git a/rpcs3/Emu/RSX/Common/ProgramStateCache.h b/rpcs3/Emu/RSX/Common/ProgramStateCache.h index 0c83bdccb9..46b940e599 100644 --- a/rpcs3/Emu/RSX/Common/ProgramStateCache.h +++ b/rpcs3/Emu/RSX/Common/ProgramStateCache.h @@ -195,7 +195,9 @@ protected: std::tuple search_fragment_program(const RSXFragmentProgram& rsx_fp, bool force_load = true) { bool recompile = false; + typename binary_to_fragment_program::iterator it; fragment_program_type* new_shader; + { reader_lock lock(m_fragment_mutex); @@ -213,15 +215,14 @@ protected: rsx_log.notice("FP not found in buffer!"); lock.upgrade(); - auto [it, inserted] = m_fragment_shader_cache.try_emplace(rsx_fp); + std::tie(it, recompile) = m_fragment_shader_cache.try_emplace(rsx_fp); new_shader = &(it->second); - recompile = inserted; + } - if (inserted) - { - it->first.clone_data(); - backend_traits::recompile_fragment_program(rsx_fp, *new_shader, m_next_id++); - } + if (recompile) + { + it->first.clone_data(); + backend_traits::recompile_fragment_program(rsx_fp, *new_shader, m_next_id++); } return std::forward_as_tuple(*new_shader, false);