GS/TC: Add new HW Readback option to force full download

This commit is contained in:
refractionpcsx2
2026-06-07 14:39:52 -04:00
committed by Ty
parent 3b2962fe1c
commit 4b76157b9e
5 changed files with 11 additions and 4 deletions
@@ -43,6 +43,11 @@
<string>Accurate (Recommended)</string>
</property>
</item>
<item>
<property name="text">
<string>Accurate Force Full (Can Reduce Readbacks)</string>
</property>
</item>
<item>
<property name="text">
<string>Disable Readbacks (Synchronize GS Thread)</string>
+1
View File
@@ -399,6 +399,7 @@ enum class SavestateCompressionLevel : u8
enum class GSHardwareDownloadMode : u8
{
Enabled,
EnabledForceFull,
NoReadbacks,
Unsynchronized,
Disabled
+3 -3
View File
@@ -4893,7 +4893,7 @@ void GSTextureCache::InvalidateLocalMem(const GSOffset& off, const GSVector4i& r
// Could be reading Z24/32 back as CT32 (Gundam Battle Assault 3)
if (GSLocalMemory::m_psm[psm].bpp >= 16)
{
if (GSConfig.HWDownloadMode != GSHardwareDownloadMode::Enabled)
if (GSConfig.HWDownloadMode > GSHardwareDownloadMode::EnabledForceFull)
{
DevCon.Error("TC: Skipping depth readback of %ux%u @ %u,%u", r.width(), r.height(), r.left, r.top);
return;
@@ -4926,7 +4926,7 @@ void GSTextureCache::InvalidateLocalMem(const GSOffset& off, const GSVector4i& r
const bool swizzle_match = GSLocalMemory::m_psm[psm].depth == GSLocalMemory::m_psm[t->m_TEX0.PSM].depth;
// Calculate the rect offset if the BP doesn't match.
GSVector4i targetr = {};
if (full_flush || t->readbacks_since_draw > 1)
if (full_flush || GSConfig.HWDownloadMode == GSHardwareDownloadMode::EnabledForceFull || t->readbacks_since_draw > 1)
{
targetr = t->m_drawn_since_read;
}
@@ -5163,7 +5163,7 @@ void GSTextureCache::InvalidateLocalMem(const GSOffset& off, const GSVector4i& r
}
}
if (GSConfig.HWDownloadMode != GSHardwareDownloadMode::Enabled)
if (GSConfig.HWDownloadMode > GSHardwareDownloadMode::EnabledForceFull)
{
DevCon.Error("TC: Skipping depth readback of %ux%u @ %u,%u", targetr.width(), targetr.height(), targetr.left, targetr.top);
continue;
+1
View File
@@ -2862,6 +2862,7 @@ void FullscreenUI::DrawGraphicsSettingsPage(SettingsInterface* bsi, bool show_ad
};
static constexpr const char* s_hw_download[] = {
FSUI_NSTR("Accurate (Recommended)"),
FSUI_NSTR("Accurate Force Full (Can Reduce Readbacks)"),
FSUI_NSTR("Disable Readbacks (Synchronize GS Thread)"),
FSUI_NSTR("Unsynchronized (Non-Deterministic)"),
FSUI_NSTR("Disabled (Ignore Transfers)"),
+1 -1
View File
@@ -3252,7 +3252,7 @@ void VMManager::WarnAboutUnsafeSettings()
append(ICON_FA_PAINTBRUSH,
TRANSLATE_SV("VMManager", "Blending Accuracy is below Basic, this may break effects in some games."));
}
if (EmuConfig.GS.HWDownloadMode != GSHardwareDownloadMode::Enabled)
if (EmuConfig.GS.HWDownloadMode > GSHardwareDownloadMode::EnabledForceFull)
{
append(ICON_FA_DOWNLOAD,
TRANSLATE_SV("VMManager", "Hardware Download Mode is not set to Accurate, this may break rendering in some games."));