diff --git a/Source/Core/VideoCommon/Present.cpp b/Source/Core/VideoCommon/Present.cpp index d6794a5d54..66d377acd7 100644 --- a/Source/Core/VideoCommon/Present.cpp +++ b/Source/Core/VideoCommon/Present.cpp @@ -175,6 +175,25 @@ void Presenter::ViSwap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, present_info.reason = PresentInfo::PresentReason::VideoInterface; } + if (m_xfb_entry) + { + // With no references, this XFB copy wasn't stitched together + // so just use its name directly + if (m_xfb_entry->references.empty()) + { + if (!m_xfb_entry->texture_info_name.empty()) + present_info.xfb_copy_hashes.push_back(m_xfb_entry->texture_info_name); + } + else + { + for (const auto& reference : m_xfb_entry->references) + { + if (!reference->texture_info_name.empty()) + present_info.xfb_copy_hashes.push_back(reference->texture_info_name); + } + } + } + BeforePresentEvent::Trigger(present_info); if (!is_duplicate || !g_ActiveConfig.bSkipPresentingDuplicateXFBs) diff --git a/Source/Core/VideoCommon/VideoEvents.h b/Source/Core/VideoCommon/VideoEvents.h index 1d8b329265..9c763dce34 100644 --- a/Source/Core/VideoCommon/VideoEvents.h +++ b/Source/Core/VideoCommon/VideoEvents.h @@ -3,6 +3,9 @@ #pragma once +#include +#include + #include "Common/CommonTypes.h" #include "Common/HookableEvent.h" @@ -71,6 +74,8 @@ struct PresentInfo // Accuracy of actual_present_time PresentTimeAccuracy present_time_accuracy = PresentTimeAccuracy::Unimplemented; + + std::vector xfb_copy_hashes; }; // An event called just as a frame is queued for presentation.