mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-10-12 02:08:45 +00:00
GS/TC: Add new HW Readback option to force full download
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -399,6 +399,7 @@ enum class SavestateCompressionLevel : u8
|
||||
enum class GSHardwareDownloadMode : u8
|
||||
{
|
||||
Enabled,
|
||||
EnabledForceFull,
|
||||
NoReadbacks,
|
||||
Unsynchronized,
|
||||
Disabled
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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."));
|
||||
|
||||
Reference in New Issue
Block a user