Compare commits

..
Author SHA1 Message Date
refractionpcsx2 99bfb337d5 GS/HW/NS: Detect fake bilinear jiggle effect 2026-08-13 12:17:07 +01:00
refractionpcsx2 01a3e955d9 GameDB: Add required GameDB Entries
S.L.A.I. - Steel Lancer Arena International
Syphon Filter - Logan's Shadow
2026-08-13 12:17:06 +01:00
refractionpcsx2 2d735b67b7 GS/HW: Improve "jiggle" blur effect detection and handling 2026-08-13 12:11:44 +01:00
refractionpcsx2 bd643f2e93 GS/HW: Native Scaling detection of mild downscale and write back 2026-08-13 12:11:44 +01:00
51 changed files with 205726 additions and 296223 deletions
+6 -5
View File
@@ -12928,6 +12928,7 @@ SCUS-97584:
autoFlush: 2
preloadFrameData: 1
nativeScaling: 2 # Fixes post-processing.
halfPixelOffset: 4 # Aligns post bloom.
SCUS-97589:
name: "NBA '08 featuring The Life Vol.3"
region: "NTSC-U"
@@ -21923,6 +21924,7 @@ SLES-52940:
region: "PAL-M3"
gsHWFixes:
halfPixelOffset: 5 # Fixes double image and aligns glow effects.
nativeScaling: 2 # Fixes depth blur.
SLES-52941:
name: "Gungrave - Overdose"
region: "PAL-M3"
@@ -25662,7 +25664,6 @@ SLES-54138:
preloadFrameData: 1 # Fixes menu graphics.
autoFlush: 1 # Fixes motion blur.
minimumBlendingLevel: 2 # Improves post effects.
limit24BitDepth: 2 # Fixes icon brightness.
SLES-54139:
name: "Earache - Extreme Metal Racing"
region: "PAL-E"
@@ -26319,7 +26320,6 @@ SLES-54335:
preloadFrameData: 1 # Fixes menu graphics.
autoFlush: 1 # Fixes motion blur.
minimumBlendingLevel: 2 # Improves post effects.
limit24BitDepth: 2 # Fixes icon brightness.
SLES-54336:
name: "Lumines Plus"
region: "PAL-M5"
@@ -45832,6 +45832,7 @@ SLPM-65791:
region: "NTSC-J"
gsHWFixes:
halfPixelOffset: 5 # Fixes double image and aligns glow effects.
nativeScaling: 2 # Fixes depth blur.
SLPM-65793:
name: "SSX3 [EA BEST HITS]"
name-sort: "SSX3 [EA BEST HITS]"
@@ -69378,6 +69379,7 @@ SLUS-20969:
compat: 5
gsHWFixes:
halfPixelOffset: 5 # Fixes double image and aligns glow effects.
nativeScaling: 2 # Fixes depth blur.
SLUS-20970:
name: "Rumble Roses"
region: "NTSC-U"
@@ -71847,7 +71849,6 @@ SLUS-21344:
preloadFrameData: 1 # Fixes menu graphics.
autoFlush: 1 # Fixes motion blur.
minimumBlendingLevel: 2 # Improves post effects.
limit24BitDepth: 2 # Fixes icon brightness.
SLUS-21345:
name: "Grandia III [Disc 2 of 2]"
region: "NTSC-U"
@@ -75406,7 +75407,6 @@ SLUS-28061:
preloadFrameData: 1 # Fixes menu graphics.
autoFlush: 1 # Fixes motion blur.
minimumBlendingLevel: 2 # Improves post effects.
limit24BitDepth: 2 # Fixes icon brightness.
SLUS-28062:
name: "Dance Factory [Trade Demo]"
region: "NTSC-U"
@@ -75910,6 +75910,7 @@ SLUS-29132:
region: "NTSC-U"
gsHWFixes:
halfPixelOffset: 5 # Fixes double image and aligns glow effects.
nativeScaling: 2 # Fixes depth blur.
SLUS-29133:
name: "Namco Transmission Demo Disc Vol.2"
region: "NTSC-U"
@@ -76193,7 +76194,6 @@ SLUS-29188:
preloadFrameData: 1 # Fixes menu graphics.
autoFlush: 1 # Fixes motion blur.
minimumBlendingLevel: 2 # Improves post effects.
limit24BitDepth: 2 # Fixes icon brightness.
SLUS-29189:
name: "FIFA World Cup - Germany 2006 [Demo]"
region: "NTSC-U"
@@ -76713,6 +76713,7 @@ TLES-52940:
region: "PAL-E"
gsHWFixes:
halfPixelOffset: 5 # Fixes double image and aligns glow effects.
nativeScaling: 2 # Fixes depth blur.
TLES-53544:
name: "Pro Evolution Soccer 5 Beta Trial Code"
region: "PAL-E"
-79
View File
@@ -1202,21 +1202,6 @@ void MainWindow::updateDisplayRelatedActions(bool has_surface, bool render_to_ma
QSignalBlocker blocker(m_ui.actionToolbarFullscreen);
m_ui.actionToolbarFullscreen->setChecked(fullscreen);
}
#ifdef __APPLE__
if (render_to_main && fullscreen)
{
m_ui.toolBar->setVisible(false);
m_ui.statusBar->setVisible(false);
}
else
{
m_ui.toolBar->setVisible(m_ui.actionViewToolbar->isChecked());
m_ui.statusBar->setVisible(m_ui.actionViewStatusBar->isChecked());
}
m_ui.actionViewToolbar->setEnabled(!(render_to_main && fullscreen));
m_ui.actionViewStatusBar->setEnabled(!(render_to_main && fullscreen));
#endif
}
void MainWindow::updateStatusBarWidgetVisibility()
@@ -1391,12 +1376,6 @@ bool MainWindow::isRenderingFullscreen() const
if (!MTGS::IsOpen() || !m_display_surface)
return false;
#ifdef __APPLE__
// When rendering to main, the main window is what goes fullscreen.
if (isRenderingToMain())
return isFullScreen();
#endif
return m_display_surface->isFullScreen();
}
@@ -1415,12 +1394,7 @@ bool MainWindow::shouldHideMainWindow() const
{
// NOTE: We can't use isRenderingToMain() here, because this happens post-fullscreen-switch.
return (Host::GetBoolSettingValue("UI", "HideMainWindowWhenRunning", false) && !g_emu_thread->shouldRenderToMain()) ||
#ifdef __APPLE__
// macOS keeps fullscreen on the main window so don't hide it there.
(g_emu_thread->shouldRenderToMain() && (g_emu_thread->isExclusiveFullscreen() || m_is_temporarily_windowed)) ||
#else
(g_emu_thread->shouldRenderToMain() && (isRenderingFullscreen() || g_emu_thread->isExclusiveFullscreen() || m_is_temporarily_windowed)) ||
#endif
Host::InNoGUIMode();
}
@@ -2822,27 +2796,6 @@ std::optional<WindowInfo> MainWindow::acquireRenderWindow(bool recreate_window,
return m_display_surface->getWindowInfo();
}
#ifdef __APPLE__
// Skip recreating when toggling fullscreen if we're still rendering to main.
if (m_display_created && !recreate_window && is_rendering_to_main && render_to_main && !changing_surfaceless)
{
updateDisplayRelatedActions(true, true, fullscreen);
if (fullscreen)
showFullScreen();
else
showNormal();
while (!m_is_closing && isFullScreen() != fullscreen)
QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
updateDisplayWidgetCursor();
m_display_surface->setFocus();
updateWindowState();
return m_display_surface->getWindowInfo();
}
#endif
destroyDisplayWidget(surfaceless);
m_display_created = true;
@@ -2882,23 +2835,14 @@ void MainWindow::createDisplayWidget(bool fullscreen, bool render_to_main)
{
// If we're rendering to main and were hidden (e.g. coming back from fullscreen),
// make sure we're visible before trying to add ourselves. Otherwise Wayland breaks.
#ifdef __APPLE__
// On macOS the main window itself goes fullscreen so it needs to be visible then too.
if (render_to_main && !isVisible())
#else
if (!fullscreen && render_to_main && !isVisible())
#endif
{
setVisible(true);
QGuiApplication::sync();
}
m_display_surface = new DisplaySurface();
#ifdef __APPLE__
if (!render_to_main)
#else
if (fullscreen || !render_to_main)
#endif
{
#ifdef DISPLAY_SURFACE_WINDOW
m_display_surface->setTitle(windowTitle());
@@ -2914,11 +2858,7 @@ void MainWindow::createDisplayWidget(bool fullscreen, bool render_to_main)
m_display_container = m_display_surface->createWindowContainer(getContentParent());
}
#ifdef __APPLE__
if (!render_to_main && (fullscreen || g_emu_thread->isExclusiveFullscreen()))
#else
if (fullscreen || g_emu_thread->isExclusiveFullscreen())
#endif
{
// On Wayland, while move/restoreGeometry can't position the window, it can influence which screen they show up on.
// Other platforms can position windows fine, but the only thing that matters here is the screen.
@@ -2974,15 +2914,6 @@ void MainWindow::createDisplayWidget(bool fullscreen, bool render_to_main)
updateDisplayRelatedActions(true, render_to_main, fullscreen);
#ifdef __APPLE__
if (render_to_main && fullscreen)
{
showFullScreen();
while (!m_is_closing && !isFullScreen())
QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
}
#endif
// We need the surface visible.
QGuiApplication::sync();
}
@@ -3075,16 +3006,6 @@ void MainWindow::destroyDisplayWidget(bool show_game_list)
if (!(m_display_surface->isFullScreen() || m_display_is_exclusive_fullscreen) && !isRenderingToMain())
saveDisplayWindowGeometryToConfig();
#ifdef __APPLE__
// Need to leave fullscreen before destroying otherwise we could get stuck in it.
if (isRenderingToMain() && isFullScreen())
{
showNormal();
while (isFullScreen())
QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
}
#endif
if (isRenderingToMain())
{
pxAssertRel(m_ui.mainContainer->indexOf(m_display_container) == 1, "Display widget in stack");
-5
View File
@@ -898,12 +898,7 @@ std::optional<WindowInfo> EmuThread::acquireRenderWindow(bool recreate_window)
// Check if we're wanting to get exclusive fullscreen. This should be safe to read, since we're going to be calling from the GS thread.
m_is_exclusive_fullscreen = m_is_fullscreen && GSWantsExclusiveFullscreen();
const bool window_fullscreen = m_is_fullscreen && !m_is_exclusive_fullscreen;
#ifdef __APPLE__
// Fullscreen the main window instead of opening a separate one on macOS.
const bool render_to_main = !m_is_exclusive_fullscreen && m_is_rendering_to_main;
#else
const bool render_to_main = !m_is_exclusive_fullscreen && !window_fullscreen && m_is_rendering_to_main;
#endif
return emit onAcquireRenderWindowRequested(recreate_window, window_fullscreen, render_to_main, m_is_surfaceless);
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+153 -153
View File
@@ -5826,116 +5826,116 @@ Do you want to overwrite?</source>
<context>
<name>EmuThread</name>
<message>
<location filename="../QtHost.cpp" line="1062"/>
<location filename="../QtHost.cpp" line="1057"/>
<source>No Image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1084"/>
<location filename="../QtHost.cpp" line="1079"/>
<source>FPS: N/A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1084"/>
<location filename="../QtHost.cpp" line="1079"/>
<source>FPS: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1001"/>
<location filename="../QtHost.cpp" line="996"/>
<source>Slot: %1 | %2 | EE: %3% | VU: %4% | GS: %5%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1010"/>
<location filename="../QtHost.cpp" line="1005"/>
<source>Slot: %1 | %2 | EE: %3% | GS: %4%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1038"/>
<location filename="../QtHost.cpp" line="1033"/>
<source>Volume: %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1040"/>
<location filename="../QtHost.cpp" line="1035"/>
<source>Volume: Muted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1051"/>
<location filename="../QtHost.cpp" line="1046"/>
<source>Auto (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1064"/>
<location filename="../QtHost.cpp" line="1059"/>
<source>%1x%2 (%3x)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1077"/>
<location filename="../QtHost.cpp" line="1072"/>
<source>GPU: %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1091"/>
<location filename="../QtHost.cpp" line="1086"/>
<source>VPS: N/A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1091"/>
<location filename="../QtHost.cpp" line="1086"/>
<source>VPS: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1098"/>
<location filename="../QtHost.cpp" line="1093"/>
<source>Speed: %1%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1162"/>
<location filename="../QtHost.cpp" line="1157"/>
<source>Game: %1 (%2)
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1170"/>
<location filename="../QtHost.cpp" line="1165"/>
<source>Rich presence inactive or unsupported.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1174"/>
<location filename="../QtHost.cpp" line="1169"/>
<source>Game not loaded or no RetroAchievements available.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1611"/>
<location filename="../QtHost.cpp" line="1631"/>
<location filename="../QtHost.cpp" line="1639"/>
<location filename="../QtHost.cpp" line="1673"/>
<location filename="../QtHost.cpp" line="1606"/>
<location filename="../QtHost.cpp" line="1626"/>
<location filename="../QtHost.cpp" line="1634"/>
<location filename="../QtHost.cpp" line="1668"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1611"/>
<location filename="../QtHost.cpp" line="1606"/>
<source>Failed to create HTTPDownloader.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1619"/>
<location filename="../QtHost.cpp" line="1614"/>
<source>Downloading %1...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1632"/>
<location filename="../QtHost.cpp" line="1627"/>
<source>Download failed with HTTP status code %1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1640"/>
<location filename="../QtHost.cpp" line="1635"/>
<source>Download failed: Data is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1674"/>
<location filename="../QtHost.cpp" line="1669"/>
<source>Failed to write downloaded data to file &apos;%1&apos;.</source>
<translation type="unfinished"></translation>
</message>
@@ -18801,13 +18801,13 @@ Right click to clear binding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1919"/>
<location filename="../MainWindow.cpp" line="1980"/>
<location filename="../MainWindow.cpp" line="1893"/>
<location filename="../MainWindow.cpp" line="1954"/>
<source>Change Disc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3567"/>
<location filename="../MainWindow.cpp" line="3488"/>
<source>Load State</source>
<translation type="unfinished"></translation>
</message>
@@ -19275,7 +19275,7 @@ Right click to clear binding</source>
</message>
<message>
<location filename="../MainWindow.ui" line="1034"/>
<location filename="../MainWindow.cpp" line="2023"/>
<location filename="../MainWindow.cpp" line="1997"/>
<source>Start Big Picture &amp;Mode</source>
<translation type="unfinished"></translation>
</message>
@@ -19389,7 +19389,7 @@ Right click to clear binding</source>
</message>
<message>
<location filename="../MainWindow.ui" line="1042"/>
<location filename="../MainWindow.cpp" line="2024"/>
<location filename="../MainWindow.cpp" line="1998"/>
<source>Big Picture</source>
<comment>In Toolbar</comment>
<translation type="unfinished"></translation>
@@ -19464,8 +19464,8 @@ Right click to clear binding</source>
</message>
<message>
<location filename="../MainWindow.cpp" line="859"/>
<location filename="../MainWindow.cpp" line="1583"/>
<location filename="../MainWindow.cpp" line="1628"/>
<location filename="../MainWindow.cpp" line="1557"/>
<location filename="../MainWindow.cpp" line="1602"/>
<source>Do not show again</source>
<translation type="unfinished"></translation>
</message>
@@ -19505,363 +19505,363 @@ Are you sure you want to continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1465"/>
<location filename="../MainWindow.cpp" line="1439"/>
<source>WARNING: Memory Card Busy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1469"/>
<location filename="../MainWindow.cpp" line="1443"/>
<source>Your memory card is still saving data.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1470"/>
<location filename="../MainWindow.cpp" line="1444"/>
<source>WARNING: Shutting down now can &lt;b&gt;IRREVERSIBLY CORRUPT YOUR MEMORY CARD.&lt;/b&gt;&lt;br&gt;&lt;br&gt;You are strongly advised to select &apos;No&apos; and let the save finish.&lt;br&gt;&lt;br&gt;Do you want to shutdown anyway and &lt;b&gt;IRREVERSIBLY CORRUPT YOUR MEMORY CARD&lt;/b&gt;?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1572"/>
<location filename="../MainWindow.cpp" line="1546"/>
<source>Failed to Load State From Backup Slot %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1574"/>
<location filename="../MainWindow.cpp" line="1548"/>
<source>Failed to Load State From Slot %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1578"/>
<location filename="../MainWindow.cpp" line="1552"/>
<source>Failed to Load State</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1622"/>
<location filename="../MainWindow.cpp" line="1596"/>
<source>Failed to Save State To Slot %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1624"/>
<location filename="../MainWindow.cpp" line="1598"/>
<source>Failed to Save State</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1698"/>
<location filename="../MainWindow.cpp" line="1672"/>
<source>Confirm Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1701"/>
<location filename="../MainWindow.cpp" line="1675"/>
<source>Are you sure you want to shut down the virtual machine?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1703"/>
<location filename="../MainWindow.cpp" line="1677"/>
<source>Save State For Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1809"/>
<location filename="../MainWindow.cpp" line="2210"/>
<location filename="../MainWindow.cpp" line="2676"/>
<location filename="../MainWindow.cpp" line="2865"/>
<location filename="../MainWindow.cpp" line="3388"/>
<location filename="../MainWindow.cpp" line="3485"/>
<location filename="../MainWindow.cpp" line="3504"/>
<location filename="../MainWindow.cpp" line="3521"/>
<location filename="../MainWindow.cpp" line="3543"/>
<location filename="../MainWindow.cpp" line="3586"/>
<location filename="../MainWindow.cpp" line="1783"/>
<location filename="../MainWindow.cpp" line="2184"/>
<location filename="../MainWindow.cpp" line="2650"/>
<location filename="../MainWindow.cpp" line="2818"/>
<location filename="../MainWindow.cpp" line="3309"/>
<location filename="../MainWindow.cpp" line="3406"/>
<location filename="../MainWindow.cpp" line="3425"/>
<location filename="../MainWindow.cpp" line="3442"/>
<location filename="../MainWindow.cpp" line="3464"/>
<location filename="../MainWindow.cpp" line="3507"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1809"/>
<location filename="../MainWindow.cpp" line="1783"/>
<source>You must select a disc to change discs.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1840"/>
<location filename="../MainWindow.cpp" line="1814"/>
<source>Properties...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1856"/>
<location filename="../MainWindow.cpp" line="1830"/>
<source>Set Cover Image...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1860"/>
<location filename="../MainWindow.cpp" line="1834"/>
<source>Create Game Shortcut...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1863"/>
<location filename="../MainWindow.cpp" line="1837"/>
<source>Exclude From List</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1869"/>
<location filename="../MainWindow.cpp" line="1843"/>
<source>Reset Play Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1873"/>
<location filename="../MainWindow.cpp" line="1847"/>
<source>Check Wiki Page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1876"/>
<location filename="../MainWindow.cpp" line="1850"/>
<source>Open Memory Card Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1882"/>
<location filename="../MainWindow.cpp" line="1856"/>
<source>Open Texture Dump/Replacement Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1885"/>
<location filename="../MainWindow.cpp" line="1859"/>
<source>Open Video Capture Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1891"/>
<location filename="../MainWindow.cpp" line="1865"/>
<source>Default Boot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1898"/>
<location filename="../MainWindow.cpp" line="1872"/>
<source>Fast Boot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1901"/>
<location filename="../MainWindow.cpp" line="1875"/>
<source>Full Boot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1906"/>
<location filename="../MainWindow.cpp" line="1880"/>
<source>Boot and Debug</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1930"/>
<location filename="../MainWindow.cpp" line="1904"/>
<source>Add Search Directory...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1939"/>
<location filename="../MainWindow.cpp" line="1913"/>
<source>Start File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1948"/>
<location filename="../MainWindow.cpp" line="1922"/>
<source>Start Disc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1965"/>
<location filename="../MainWindow.cpp" line="1939"/>
<source>Select Disc Image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2109"/>
<location filename="../MainWindow.cpp" line="2083"/>
<source>Updater Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2115"/>
<location filename="../MainWindow.cpp" line="2089"/>
<source>&lt;p&gt;Sorry, you are trying to update a PCSX2 version which is not an official GitHub release. To prevent incompatibilities, the auto-updater is only enabled on official builds.&lt;/p&gt;&lt;p&gt;To obtain an official build, please download from the link below:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://pcsx2.net/downloads/&quot;&gt;https://pcsx2.net/downloads/&lt;/a&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2120"/>
<location filename="../MainWindow.cpp" line="2094"/>
<source>Automatic updating is not supported on the current platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2200"/>
<location filename="../MainWindow.cpp" line="2174"/>
<source>Confirm File Creation</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2201"/>
<location filename="../MainWindow.cpp" line="2175"/>
<source>The pnach file &apos;%1&apos; does not currently exist. Do you want to create it?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2210"/>
<location filename="../MainWindow.cpp" line="2184"/>
<source>Failed to create &apos;%1&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2306"/>
<location filename="../MainWindow.cpp" line="2280"/>
<source>Input Recording Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2307"/>
<location filename="../MainWindow.cpp" line="2281"/>
<source>Failed to create file: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2329"/>
<location filename="../MainWindow.cpp" line="2303"/>
<source>Select a File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2330"/>
<location filename="../MainWindow.cpp" line="2304"/>
<source>Input Recording Files (*.p2m2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2365"/>
<location filename="../MainWindow.cpp" line="2339"/>
<source>Input Playback Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2366"/>
<location filename="../MainWindow.cpp" line="2340"/>
<source>Failed to open file: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2452"/>
<location filename="../MainWindow.cpp" line="2426"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2640"/>
<location filename="../MainWindow.cpp" line="2614"/>
<source>Load State Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2640"/>
<location filename="../MainWindow.cpp" line="2614"/>
<source>Cannot load a save state without a running VM.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2664"/>
<location filename="../MainWindow.cpp" line="2638"/>
<source>The new ELF cannot be loaded without resetting the virtual machine. Do you want to reset the virtual machine now?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2676"/>
<location filename="../MainWindow.cpp" line="2650"/>
<source>Cannot change from game to GS dump without shutting down first.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2865"/>
<location filename="../MainWindow.cpp" line="2818"/>
<source>Failed to get window info from widget</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2023"/>
<location filename="../MainWindow.cpp" line="1997"/>
<source>Stop Big Picture Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2024"/>
<location filename="../MainWindow.cpp" line="1998"/>
<source>Exit Big Picture</source>
<comment>In Toolbar</comment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3294"/>
<location filename="../MainWindow.cpp" line="3215"/>
<source>Game Properties</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3294"/>
<location filename="../MainWindow.cpp" line="3215"/>
<source>Game properties is unavailable for the current game.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3346"/>
<location filename="../MainWindow.cpp" line="3267"/>
<source>Could not find any CD/DVD-ROM devices. Please ensure you have a drive connected and sufficient permissions to access it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3364"/>
<location filename="../MainWindow.cpp" line="3285"/>
<source>Select disc drive:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3388"/>
<location filename="../MainWindow.cpp" line="3309"/>
<source>This save state does not exist.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3401"/>
<location filename="../MainWindow.cpp" line="3322"/>
<source>Select Cover Image</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3418"/>
<location filename="../MainWindow.cpp" line="3339"/>
<source>Cover Already Exists</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3419"/>
<location filename="../MainWindow.cpp" line="3340"/>
<source>A cover image for this game already exists, do you wish to replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3414"/>
<location filename="../MainWindow.cpp" line="3428"/>
<location filename="../MainWindow.cpp" line="3434"/>
<location filename="../MainWindow.cpp" line="3440"/>
<location filename="../MainWindow.cpp" line="3335"/>
<location filename="../MainWindow.cpp" line="3349"/>
<location filename="../MainWindow.cpp" line="3355"/>
<location filename="../MainWindow.cpp" line="3361"/>
<source>Copy Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3428"/>
<location filename="../MainWindow.cpp" line="3349"/>
<source>Failed to remove existing cover &apos;%1&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3434"/>
<location filename="../MainWindow.cpp" line="3355"/>
<source>Failed to copy &apos;%1&apos; to &apos;%2&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3440"/>
<location filename="../MainWindow.cpp" line="3361"/>
<source>Failed to remove &apos;%1&apos;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="2663"/>
<location filename="../MainWindow.cpp" line="3449"/>
<location filename="../MainWindow.cpp" line="2637"/>
<location filename="../MainWindow.cpp" line="3370"/>
<source>Confirm Reset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1879"/>
<location filename="../MainWindow.cpp" line="1853"/>
<source>Open Snapshots Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3401"/>
<location filename="../MainWindow.cpp" line="3322"/>
<source>All Cover Image Types (*.jpg *.jpeg *.png *.webp)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3414"/>
<location filename="../MainWindow.cpp" line="3335"/>
<source>You must select a different file to the current cover image.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3485"/>
<location filename="../MainWindow.cpp" line="3406"/>
<source>Failed to create snapshots directory &apos;%1&apos;
Opening default directory.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3561"/>
<location filename="../MainWindow.cpp" line="3482"/>
<source>Load Resume State</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3564"/>
<location filename="../MainWindow.cpp" line="3485"/>
<source>A resume save state was found for this game, saved at:
%1.
@@ -19870,43 +19870,43 @@ Do you want to load this state, or start from a fresh boot?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3568"/>
<location filename="../MainWindow.cpp" line="3489"/>
<source>Fresh Boot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3569"/>
<location filename="../MainWindow.cpp" line="3490"/>
<source>Delete And Boot</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3586"/>
<location filename="../MainWindow.cpp" line="3507"/>
<source>Failed to delete save state file &apos;%1&apos;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3644"/>
<location filename="../MainWindow.cpp" line="3565"/>
<source>Load State File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3644"/>
<location filename="../MainWindow.cpp" line="3565"/>
<source>Load From File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3647"/>
<location filename="../MainWindow.cpp" line="3721"/>
<location filename="../MainWindow.cpp" line="3568"/>
<location filename="../MainWindow.cpp" line="3642"/>
<source>Select Save State File</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3692"/>
<location filename="../MainWindow.cpp" line="3613"/>
<source>Load Backup Slot %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
<location filename="../MainWindow.cpp" line="3709"/>
<location filename="../MainWindow.cpp" line="3630"/>
<source>%n save states deleted.</source>
<translation type="unfinished">
<numerusform></numerusform>
@@ -19914,12 +19914,12 @@ Do you want to load this state, or start from a fresh boot?</source>
</translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3721"/>
<location filename="../MainWindow.cpp" line="3642"/>
<source>Save States (*.p2s)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3654"/>
<location filename="../MainWindow.cpp" line="3575"/>
<source>Delete Save States...</source>
<translation type="unfinished"></translation>
</message>
@@ -19934,7 +19934,7 @@ Do you want to load this state, or start from a fresh boot?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3450"/>
<location filename="../MainWindow.cpp" line="3371"/>
<source>Are you sure you want to reset the play time for &apos;%1&apos; (%2)?
Your current play time is %3.
@@ -19943,94 +19943,94 @@ This action cannot be undone.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3451"/>
<location filename="../MainWindow.cpp" line="3372"/>
<source>empty title</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3452"/>
<location filename="../MainWindow.cpp" line="3373"/>
<source>no serial</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3504"/>
<location filename="../MainWindow.cpp" line="3425"/>
<source>Failed to create game texture directory &apos;%1&apos;
Opening default directory.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3521"/>
<location filename="../MainWindow.cpp" line="3442"/>
<source>Failed to open memory card directory.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3543"/>
<location filename="../MainWindow.cpp" line="3464"/>
<source>Failed to create game video capture directory &apos;%1&apos;
Opening default directory.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3647"/>
<location filename="../MainWindow.cpp" line="3568"/>
<source>Save States (*.p2s *.p2s.backup)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3664"/>
<location filename="../MainWindow.cpp" line="3585"/>
<source>Resume (%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3680"/>
<location filename="../MainWindow.cpp" line="3601"/>
<source>Load Slot %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3701"/>
<location filename="../MainWindow.cpp" line="3709"/>
<location filename="../MainWindow.cpp" line="3622"/>
<location filename="../MainWindow.cpp" line="3630"/>
<source>Delete Save States</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3702"/>
<location filename="../MainWindow.cpp" line="3623"/>
<source>Are you sure you want to delete all save states for %1?
The saves will not be recoverable.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3719"/>
<location filename="../MainWindow.cpp" line="3640"/>
<source>Save To File...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3739"/>
<location filename="../MainWindow.cpp" line="3660"/>
<source>Empty</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3741"/>
<location filename="../MainWindow.cpp" line="3662"/>
<source>Save Slot %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3801"/>
<location filename="../MainWindow.cpp" line="3722"/>
<source>Confirm Disc Change</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3802"/>
<location filename="../MainWindow.cpp" line="3723"/>
<source>Do you want to swap discs or boot the new image (via system reset)?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3803"/>
<location filename="../MainWindow.cpp" line="3724"/>
<source>Swap Disc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="3804"/>
<location filename="../MainWindow.cpp" line="3725"/>
<source>Reset</source>
<translation type="unfinished"></translation>
</message>
@@ -22793,45 +22793,45 @@ Ejecting {2} and replacing it with {3}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1142"/>
<location filename="../QtHost.cpp" line="1137"/>
<source>RA: Logged in as %1 (%2 pts, Casual: %3 pts). %4 unread messages.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1581"/>
<location filename="../QtHost.cpp" line="1596"/>
<location filename="../QtHost.cpp" line="1576"/>
<location filename="../QtHost.cpp" line="1591"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1582"/>
<location filename="../QtHost.cpp" line="1577"/>
<source>An error occurred while deleting empty game settings:
{}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1597"/>
<location filename="../QtHost.cpp" line="1592"/>
<source>An error occurred while saving game settings:
{}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1756"/>
<location filename="../QtHost.cpp" line="1751"/>
<source>Controller {} connected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1769"/>
<location filename="../QtHost.cpp" line="1764"/>
<source>System paused because controller {} was disconnected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="1782"/>
<location filename="../QtHost.cpp" line="1777"/>
<source>Controller {} disconnected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../QtHost.cpp" line="2025"/>
<location filename="../QtHost.cpp" line="2020"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -531,6 +531,7 @@ REG_END2
__forceinline bool IsOpaque() const { return ((A == B || (C == 2 && FIX == 0)) && D == 0) || (A == 0 && B == D && C == 2 && FIX == 0x80); }
__forceinline bool IsOpaque(int amin, int amax) const { return ((A == B || amax == 0) && D == 0) || (A == 0 && B == D && amin == 0x80 && amax == 0x80); }
__forceinline bool IsCd() const { return (A == B) && (D == 1); }
__forceinline bool IsAdditive() const { return (A == 0 && B == 2 && (C != 2 || FIX != 0) && D == 1); }
// output will be Cd, Cs is discarded
__forceinline bool IsCdOutput() const { return (C == 2 && D != 1 && FIX == 0x00); }
+12 -7
View File
@@ -3939,8 +3939,7 @@ void GSRendererHW::Draw()
if (next_ctx.FRAME.Block() == FRAME_TEX0.TBP0 && next_ctx.FRAME.PSM != FRAME_TEX0.PSM)
FRAME_TEX0.PSM = next_ctx.FRAME.PSM;
// Be careful of the next draw being a channel shuffle!
else if (next_ctx.TEX0.TBP0 == FRAME_TEX0.TBP0 && next_ctx.TEX0.PSM != FRAME_TEX0.PSM && GSLocalMemory::m_psm[next_ctx.TEX0.PSM].trbpp >= 16)
else if (next_ctx.TEX0.TBP0 == FRAME_TEX0.TBP0 && next_ctx.TEX0.PSM != FRAME_TEX0.PSM)
FRAME_TEX0.PSM = next_ctx.TEX0.PSM;
else
FRAME_TEX0.PSM = PSMCT32; // Guess full color if no upcoming hint, it'll fix itself later.
@@ -10708,8 +10707,10 @@ int GSRendererHW::IsScalingDraw(GSTextureCache::Source* src, bool no_gaps)
IsMipMapDraw() || GSLocalMemory::m_psm[m_cached_ctx.TEX0.PSM].trbpp <= 8)
return 0;
const bool is_smaller = draw_size.x <= (tex_size.x * 0.75f) && draw_size.y <= (tex_size.y * 0.75f);
const bool is_smaller_and_writing_back = draw_size.x < tex_size.x && draw_size.y < tex_size.y && next_ctx.FRAME.Block() == m_cached_ctx.TEX0.TBP0 && next_ctx.TEX0.TBP0 == m_cached_ctx.FRAME.Block();
// Should usually be 2x but some games like Monster House goes from 512x448 -> 128x128
const bool is_downscale = m_cached_ctx.TEX0.TBW >= m_cached_ctx.FRAME.FBW && draw_size.x <= (tex_size.x * 0.75f) && draw_size.y <= (tex_size.y * 0.75f);
const bool is_downscale = m_cached_ctx.TEX0.TBW >= m_cached_ctx.FRAME.FBW && (is_smaller || is_smaller_and_writing_back);
// Check we're getting most of the texture and not just stenciling a part of it.
// Only allow non-bilineared downscales if it's most of the target (misdetections of shadows in Naruto, Transformers etc), otherwise it's fine.
const GSVector4i src_valid = src->m_from_target ? src->m_from_target->m_valid : src->m_valid_rect;
@@ -10733,7 +10734,8 @@ int GSRendererHW::IsScalingDraw(GSTextureCache::Source* src, bool no_gaps)
}
// Last ditched check if it's doing a lot of small draws exactly the same which could be recursive lighting bloom.
if (m_vt.m_primclass == GS_SPRITE_CLASS && m_index->tail > 2 && !no_gaps_or_single_sprite && m_context->TEX1.MMAG == 1 && !m_context->ALPHA.IsOpaque())
if (m_vt.m_primclass == GS_SPRITE_CLASS && m_index->tail > 2 && !no_gaps_or_single_sprite && m_context->TEX1.MMAG == 1 && is_target_src && (m_cached_ctx.TEST.ZTST == ZTST_ALWAYS || m_cached_ctx.TEST.ZTE == 0) &&
!m_context->ALPHA.IsOpaque() && GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].bpp == GSLocalMemory::m_psm[m_cached_ctx.TEX0.PSM].bpp)
{
GSVertex* v = &m_vertex->buff[0];
float tw = 1 << src->m_TEX0.TW;
@@ -10744,7 +10746,10 @@ int GSRendererHW::IsScalingDraw(GSTextureCache::Source* src, bool no_gaps)
const int first_x = (v[1].XYZ.X - v[0].XYZ.X) >> 4;
const int first_y = (v[1].XYZ.Y - v[0].XYZ.Y) >> 4;
if (first_x > first_u && first_y > first_v && !no_resize && std::abs(draw_size.x - first_x) <= 4 && std::abs(draw_size.y - first_y) <= 4)
const u32 half_color_mask = (m_vt.m_min.c == GSVector4i(64, 64, 64, 64)).mask() & 0xfff;
const bool possible_fake_bilinear = no_resize && PRIM->ABE && m_context->ALPHA.IsAdditive() && m_cached_ctx.TEX0.TFX == TFX_MODULATE && m_vt.m_eq.rgba && half_color_mask == 0xfff;
if (first_x >= first_u && first_y >= first_v && (!no_resize || possible_fake_bilinear) && ((draw_size.x != first_x && draw_size.y != first_y) || (tex_size.x != first_u && tex_size.y != first_v)) && std::abs(draw_size.x - first_x) <= 4 && std::abs(draw_size.y - first_y) <= 4)
{
for (u32 i = 2; i < m_index->tail; i += 2)
{
@@ -10753,14 +10758,14 @@ int GSRendererHW::IsScalingDraw(GSTextureCache::Source* src, bool no_gaps)
const int next_x = (v[i + 1].XYZ.X - v[i].XYZ.X) >> 4;
const int next_y = (v[i + 1].XYZ.Y - v[i].XYZ.Y) >> 4;
if (std::abs(draw_size.x - next_x) > 4 || std::abs(draw_size.y - next_y) > 4)
if (std::abs(draw_size.x - next_x) > 4 || std::abs(draw_size.y - next_y) > 4 || (draw_size.x == next_x && tex_size.x == next_u) || (draw_size.y == next_y && tex_size.y == next_v))
break;
if (next_u != first_u || next_v != first_v || next_x != first_x || next_y != first_y)
break;
if (i + 2 >= m_index->tail)
return 2;
return (is_target_src && src->m_from_target->m_downscaled) ? -1 : 2;
}
}
}
+1 -10
View File
@@ -2580,21 +2580,12 @@ GSTextureCache::Target* GSTextureCache::LookupDrawTarget(GIFRegTEX0 TEX0, const
{
// Some games misuse the scissor so it ends up valid 1 pixel over, which causes hell for us. So check if it still overlaps without the extra pixel.
const GSVector4i adjusted_valid = GSVector4i(t->m_valid.x, t->m_valid.y, std::min(t->m_valid.z, static_cast<int>(t->m_TEX0.TBW) * 64), t->m_valid.w - 1);
u32 adjusted_endblock = GSLocalMemory::GetUnwrappedEndBlockAddress(t->m_TEX0.TBP0, t->m_TEX0.TBW, t->m_TEX0.PSM, adjusted_valid);
const u32 adjusted_endblock = GSLocalMemory::GetEndBlockAddress(t->m_TEX0.TBP0, t->m_TEX0.TBW, t->m_TEX0.PSM, adjusted_valid);
if (adjusted_endblock <= bp)
{
i++;
continue;
}
const GSVector4i adjusted_rect = GSVector4i(min_rect.x, min_rect.y, std::min(min_rect.z, static_cast<int>(t->m_TEX0.TBW) * 64), min_rect.w - 1);
// Also check the offset from the bp to the current request to see if it overlaps the begining of the selected target.
adjusted_endblock = GSLocalMemory::GetUnwrappedEndBlockAddress(TEX0.TBP0, TEX0.TBW, TEX0.PSM, adjusted_rect);
if (adjusted_endblock <= t->m_TEX0.TBP0)
{
i++;
continue;
}
const GSLocalMemory::psm_t& s_psm = GSLocalMemory::m_psm[TEX0.PSM];
const u32 widthpage_offset = (std::abs(static_cast<int>(bp - t->m_TEX0.TBP0)) >> 5) % std::max(t->m_TEX0.TBW, 1U);
const bool is_aligned_ok = widthpage_offset == 0 || ((min_rect.width() <= static_cast<int>((t->m_TEX0.TBW - widthpage_offset) * 64) && (t->m_TEX0.TBW == TEX0.TBW || TEX0.TBW == 1)) && bp >= t->m_TEX0.TBP0);
+2 -3
View File
@@ -83,9 +83,8 @@ static std::string hostRoot;
void Hle_SetHostRoot(const char* bootFilename)
{
std::string path = Path::RealPath(bootFilename);
hostRoot = Path::ToNativePath(Path::GetDirectory(path));
Console.WriteLn("HLE Host: Set 'host:' root path to: %s", hostRoot.c_str());
hostRoot = Path::ToNativePath(Path::GetDirectory(bootFilename));
Console.WriteLn("HLE Host: Set 'host:' root path to: %s\n", hostRoot.c_str());
}
void Hle_ClearHostRoot()
+1 -3
View File
@@ -3,7 +3,6 @@
#include "Common.h"
#include "common/Path.h"
#include "common/StringUtil.h"
#include "ps2/BiosTools.h"
#include "R5900.h"
@@ -672,8 +671,7 @@ void eeloadHook()
const std::string& elf_override = VMManager::Internal::GetELFOverride();
if (!elf_override.empty())
{
// The host: root should be directory containg the elf, so get only the filename part
elfname = fmt::format("host:{}", Path::GetFileName(elf_override));
elfname = fmt::format("host:{}", elf_override);
}
else
{