From 8fd974ce3fc303b1e1a8eb896ab7f0e3c734c5fe Mon Sep 17 00:00:00 2001 From: xbzk Date: Sat, 1 Aug 2026 16:02:40 -0300 Subject: [PATCH] [video_core] Avoid stale macro upload references --- src/video_core/macro.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/video_core/macro.cpp b/src/video_core/macro.cpp index 5123962e37..f9280a321f 100644 --- a/src/video_core/macro.cpp +++ b/src/video_core/macro.cpp @@ -1391,29 +1391,26 @@ void MacroEngine::Execute(Core::System& system, Engines::Maxwell3D& maxwell3d, u std::span code; auto macro_code = uploaded_macro_code.find(method); if (macro_code == uploaded_macro_code.end()) { - std::optional mid_method; - for (const auto& [method_base, uploaded_code] : uploaded_macro_code) { + for (auto it = uploaded_macro_code.begin(); it != uploaded_macro_code.end(); ++it) { + const auto& [method_base, uploaded_code] = *it; if (method >= method_base && (method - method_base) < uploaded_code.size()) { - mid_method = method_base; + macro_code = it; break; } } - if (!mid_method) { + if (macro_code == uploaded_macro_code.end()) { ASSERT_MSG(false, "Macro 0x{0:x} was not uploaded", method); return; } - const auto source = uploaded_macro_code.find(*mid_method); - ASSERT(source != uploaded_macro_code.end()); - const auto rebased_method = method - *mid_method; - std::vector rebased_code(source->second.begin() + rebased_method, - source->second.end()); + const auto rebased_method = method - macro_code->first; + std::vector rebased_code(macro_code->second.begin() + rebased_method, + macro_code->second.end()); const auto [it, inserted] = uploaded_macro_code.emplace(method, std::move(rebased_code)); ASSERT(inserted); - code = it->second; - } else { - code = macro_code->second; + macro_code = it; } + code = macro_code->second; auto& ci = macro_cache[method]; ci.hash = Common::HashRange(code.begin(), code.end());