mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-08-19 20:33:11 +02:00
Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
783d1722d8 | ||
|
|
2700e8102e | ||
|
|
c243b7cfd6 | ||
|
|
4fd1a4192a | ||
|
|
4ef1ff82e6 | ||
|
|
cde2448a6c | ||
|
|
ded263f98a | ||
|
|
ffa5690656 | ||
|
|
ca03806a4c | ||
|
|
2cf8dabe6b | ||
|
|
8c1bb5742e | ||
|
|
d88510e3a6 | ||
|
|
af48193ebb | ||
|
|
9945046a49 |
@@ -25662,6 +25662,7 @@ 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"
|
||||
@@ -26318,6 +26319,7 @@ 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"
|
||||
@@ -71845,6 +71847,7 @@ 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"
|
||||
@@ -75403,6 +75406,7 @@ 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"
|
||||
@@ -76189,6 +76193,7 @@ 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"
|
||||
|
||||
@@ -79,10 +79,10 @@
|
||||
03000000c82d00001230000000000000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001330000000000000,8BitDo Ultimate,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,misc1:b26,paddle1:b23,paddle2:b19,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001260000000000000,8BitDo Ultimate 2,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b17,paddle2:b16,paddle3:b2,paddle4:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00000a31000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001b30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001c30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b2,paddle2:b5,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001d30000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00000a31000000000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001530000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001630000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000c82d00001730000000000000,8BitDo Ultimate C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
@@ -244,7 +244,7 @@
|
||||
03000000ac0500001a06000000000000,GameSir T3 2.02,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000373500000410000000000000,GameSir T4 Kaleid,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Windows,
|
||||
03000000373500009410000000000000,GameSir Tegenaria Lite,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
03000000373500001611000000000000,GameSir X5 Lite,a:b0,b:b1,x:b3,y:b4,back:b10,guide:b12,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b8,righttrigger:b9,platform:Windows,
|
||||
03000000373500001611000000000000,GameSir X5 Lite,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,platform:Windows,
|
||||
030000004c0e00001035000000000000,Gamester,a:b0,b:b1,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b10,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b11,rightx:a3,righty:a4,start:b6,x:b2,y:b3,platform:Windows,
|
||||
030000000d0f00001110000000000000,GameStick Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Windows,
|
||||
0300000047530000616d000000000000,GameStop,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
|
||||
@@ -428,7 +428,6 @@
|
||||
03000000380700008084000000000000,Mad Catz TE2 PS4 Fightstick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Windows,
|
||||
030000002a0600001024000000000000,Matricom,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b2,y:b3,platform:Windows,
|
||||
030000009f000000adbb000000000000,MaxJoypad Virtual Controller,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b8,x:b3,y:b0,platform:Windows,
|
||||
030000008f0e00001330000000000000,Mayflash N64 Adapter,a:b1,b:b2,back:b8,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3~,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000250900000128000000000000,Mayflash Arcade Stick,a:b1,b:b2,back:b8,leftshoulder:b0,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b3,righttrigger:b7,start:b9,x:b5,y:b6,platform:Windows,
|
||||
03000000242f00003700000000000000,Mayflash F101,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
|
||||
03000000790000003018000000000000,Mayflash F300 Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Windows,
|
||||
@@ -441,6 +440,7 @@
|
||||
03000000242f0000f400000000000000,Mayflash N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows,
|
||||
03000000242f0000f500000000000000,Mayflash N64 Adapter,a:b2,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightx:a2,righty:a5,start:b9,platform:Windows,
|
||||
03000000790000007918000000000000,Mayflash N64 Adapter,a:b1,b:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,righttrigger:b7,rightx:a3,righty:a2,start:b8,platform:Windows,
|
||||
030000008f0e00001330000000000000,Mayflash N64 Adapter,a:b1,b:b2,back:b8,dpdown:h0.8,dpleft:h0.2,dpright:h0.1,dpup:h0.4,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightx:a3~,righty:a2,start:b9,x:b0,y:b3,platform:Windows,
|
||||
030000008f0e00001030000000000000,Mayflash Saturn Adapter,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b2,start:b9,x:b3,y:b4,platform:Windows,
|
||||
0300000025090000e803000000000000,Mayflash Wii Classic Adapter,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:a5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Windows,
|
||||
03000000790000000318000000000000,Mayflash Wii DolphinBar,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,platform:Windows,
|
||||
@@ -1473,6 +1473,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000006d0400001ec2000020200000,Logitech F510,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d04000019c2000011010000,Logitech F710,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d0400001fc2000005030000,Logitech F710,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000006d0400001ac2000010010000,Logitech Precision,a:b1,b:b2,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d04000019c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000006d0400000ac2000010010000,Logitech WingMan RumblePad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b7,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b2,rightx:a3,righty:a4,x:b3,y:b4,platform:Linux,
|
||||
|
||||
@@ -1202,6 +1202,21 @@ 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()
|
||||
@@ -1376,6 +1391,12 @@ 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();
|
||||
}
|
||||
|
||||
@@ -1394,7 +1415,12 @@ 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();
|
||||
}
|
||||
|
||||
@@ -2796,6 +2822,27 @@ 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;
|
||||
|
||||
@@ -2835,14 +2882,23 @@ 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());
|
||||
@@ -2858,7 +2914,11 @@ 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.
|
||||
@@ -2914,6 +2974,15 @@ 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();
|
||||
}
|
||||
@@ -3006,6 +3075,16 @@ 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");
|
||||
|
||||
@@ -898,7 +898,12 @@ 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);
|
||||
}
|
||||
|
||||
@@ -5826,116 +5826,116 @@ Do you want to overwrite?</source>
|
||||
<context>
|
||||
<name>EmuThread</name>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1057"/>
|
||||
<location filename="../QtHost.cpp" line="1062"/>
|
||||
<source>No Image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1079"/>
|
||||
<location filename="../QtHost.cpp" line="1084"/>
|
||||
<source>FPS: N/A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1079"/>
|
||||
<location filename="../QtHost.cpp" line="1084"/>
|
||||
<source>FPS: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="996"/>
|
||||
<location filename="../QtHost.cpp" line="1001"/>
|
||||
<source>Slot: %1 | %2 | EE: %3% | VU: %4% | GS: %5%</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1005"/>
|
||||
<location filename="../QtHost.cpp" line="1010"/>
|
||||
<source>Slot: %1 | %2 | EE: %3% | GS: %4%</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1033"/>
|
||||
<location filename="../QtHost.cpp" line="1038"/>
|
||||
<source>Volume: %1%</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1035"/>
|
||||
<location filename="../QtHost.cpp" line="1040"/>
|
||||
<source>Volume: Muted</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1046"/>
|
||||
<location filename="../QtHost.cpp" line="1051"/>
|
||||
<source>Auto (%1)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1059"/>
|
||||
<location filename="../QtHost.cpp" line="1064"/>
|
||||
<source>%1x%2 (%3x)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1072"/>
|
||||
<location filename="../QtHost.cpp" line="1077"/>
|
||||
<source>GPU: %1%</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1086"/>
|
||||
<location filename="../QtHost.cpp" line="1091"/>
|
||||
<source>VPS: N/A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1086"/>
|
||||
<location filename="../QtHost.cpp" line="1091"/>
|
||||
<source>VPS: %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1093"/>
|
||||
<location filename="../QtHost.cpp" line="1098"/>
|
||||
<source>Speed: %1%</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1157"/>
|
||||
<location filename="../QtHost.cpp" line="1162"/>
|
||||
<source>Game: %1 (%2)
|
||||
</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1165"/>
|
||||
<location filename="../QtHost.cpp" line="1170"/>
|
||||
<source>Rich presence inactive or unsupported.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1169"/>
|
||||
<location filename="../QtHost.cpp" line="1174"/>
|
||||
<source>Game not loaded or no RetroAchievements available.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1606"/>
|
||||
<location filename="../QtHost.cpp" line="1626"/>
|
||||
<location filename="../QtHost.cpp" line="1634"/>
|
||||
<location filename="../QtHost.cpp" line="1668"/>
|
||||
<location filename="../QtHost.cpp" line="1611"/>
|
||||
<location filename="../QtHost.cpp" line="1631"/>
|
||||
<location filename="../QtHost.cpp" line="1639"/>
|
||||
<location filename="../QtHost.cpp" line="1673"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1606"/>
|
||||
<location filename="../QtHost.cpp" line="1611"/>
|
||||
<source>Failed to create HTTPDownloader.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1614"/>
|
||||
<location filename="../QtHost.cpp" line="1619"/>
|
||||
<source>Downloading %1...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1627"/>
|
||||
<location filename="../QtHost.cpp" line="1632"/>
|
||||
<source>Download failed with HTTP status code %1.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1635"/>
|
||||
<location filename="../QtHost.cpp" line="1640"/>
|
||||
<source>Download failed: Data is empty.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1669"/>
|
||||
<location filename="../QtHost.cpp" line="1674"/>
|
||||
<source>Failed to write downloaded data to file '%1'.</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="1893"/>
|
||||
<location filename="../MainWindow.cpp" line="1954"/>
|
||||
<location filename="../MainWindow.cpp" line="1919"/>
|
||||
<location filename="../MainWindow.cpp" line="1980"/>
|
||||
<source>Change Disc</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3488"/>
|
||||
<location filename="../MainWindow.cpp" line="3567"/>
|
||||
<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="1997"/>
|
||||
<location filename="../MainWindow.cpp" line="2023"/>
|
||||
<source>Start Big Picture &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="1998"/>
|
||||
<location filename="../MainWindow.cpp" line="2024"/>
|
||||
<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="1557"/>
|
||||
<location filename="../MainWindow.cpp" line="1602"/>
|
||||
<location filename="../MainWindow.cpp" line="1583"/>
|
||||
<location filename="../MainWindow.cpp" line="1628"/>
|
||||
<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="1439"/>
|
||||
<location filename="../MainWindow.cpp" line="1465"/>
|
||||
<source>WARNING: Memory Card Busy</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1443"/>
|
||||
<location filename="../MainWindow.cpp" line="1469"/>
|
||||
<source>Your memory card is still saving data.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1444"/>
|
||||
<location filename="../MainWindow.cpp" line="1470"/>
|
||||
<source>WARNING: Shutting down now can <b>IRREVERSIBLY CORRUPT YOUR MEMORY CARD.</b><br><br>You are strongly advised to select 'No' and let the save finish.<br><br>Do you want to shutdown anyway and <b>IRREVERSIBLY CORRUPT YOUR MEMORY CARD</b>?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1546"/>
|
||||
<location filename="../MainWindow.cpp" line="1572"/>
|
||||
<source>Failed to Load State From Backup Slot %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1548"/>
|
||||
<location filename="../MainWindow.cpp" line="1574"/>
|
||||
<source>Failed to Load State From Slot %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1552"/>
|
||||
<location filename="../MainWindow.cpp" line="1578"/>
|
||||
<source>Failed to Load State</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1596"/>
|
||||
<location filename="../MainWindow.cpp" line="1622"/>
|
||||
<source>Failed to Save State To Slot %1</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1598"/>
|
||||
<location filename="../MainWindow.cpp" line="1624"/>
|
||||
<source>Failed to Save State</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1672"/>
|
||||
<location filename="../MainWindow.cpp" line="1698"/>
|
||||
<source>Confirm Shutdown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1675"/>
|
||||
<location filename="../MainWindow.cpp" line="1701"/>
|
||||
<source>Are you sure you want to shut down the virtual machine?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1677"/>
|
||||
<location filename="../MainWindow.cpp" line="1703"/>
|
||||
<source>Save State For Resume</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<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"/>
|
||||
<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"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1783"/>
|
||||
<location filename="../MainWindow.cpp" line="1809"/>
|
||||
<source>You must select a disc to change discs.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1814"/>
|
||||
<location filename="../MainWindow.cpp" line="1840"/>
|
||||
<source>Properties...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1830"/>
|
||||
<location filename="../MainWindow.cpp" line="1856"/>
|
||||
<source>Set Cover Image...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1834"/>
|
||||
<location filename="../MainWindow.cpp" line="1860"/>
|
||||
<source>Create Game Shortcut...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1837"/>
|
||||
<location filename="../MainWindow.cpp" line="1863"/>
|
||||
<source>Exclude From List</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1843"/>
|
||||
<location filename="../MainWindow.cpp" line="1869"/>
|
||||
<source>Reset Play Time</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1847"/>
|
||||
<location filename="../MainWindow.cpp" line="1873"/>
|
||||
<source>Check Wiki Page</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1850"/>
|
||||
<location filename="../MainWindow.cpp" line="1876"/>
|
||||
<source>Open Memory Card Folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1856"/>
|
||||
<location filename="../MainWindow.cpp" line="1882"/>
|
||||
<source>Open Texture Dump/Replacement Folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1859"/>
|
||||
<location filename="../MainWindow.cpp" line="1885"/>
|
||||
<source>Open Video Capture Folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1865"/>
|
||||
<location filename="../MainWindow.cpp" line="1891"/>
|
||||
<source>Default Boot</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1872"/>
|
||||
<location filename="../MainWindow.cpp" line="1898"/>
|
||||
<source>Fast Boot</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1875"/>
|
||||
<location filename="../MainWindow.cpp" line="1901"/>
|
||||
<source>Full Boot</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1880"/>
|
||||
<location filename="../MainWindow.cpp" line="1906"/>
|
||||
<source>Boot and Debug</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1904"/>
|
||||
<location filename="../MainWindow.cpp" line="1930"/>
|
||||
<source>Add Search Directory...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1913"/>
|
||||
<location filename="../MainWindow.cpp" line="1939"/>
|
||||
<source>Start File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1922"/>
|
||||
<location filename="../MainWindow.cpp" line="1948"/>
|
||||
<source>Start Disc</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1939"/>
|
||||
<location filename="../MainWindow.cpp" line="1965"/>
|
||||
<source>Select Disc Image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2083"/>
|
||||
<location filename="../MainWindow.cpp" line="2109"/>
|
||||
<source>Updater Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2089"/>
|
||||
<location filename="../MainWindow.cpp" line="2115"/>
|
||||
<source><p>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.</p><p>To obtain an official build, please download from the link below:</p><p><a href="https://pcsx2.net/downloads/">https://pcsx2.net/downloads/</a></p></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2094"/>
|
||||
<location filename="../MainWindow.cpp" line="2120"/>
|
||||
<source>Automatic updating is not supported on the current platform.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2174"/>
|
||||
<location filename="../MainWindow.cpp" line="2200"/>
|
||||
<source>Confirm File Creation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2175"/>
|
||||
<location filename="../MainWindow.cpp" line="2201"/>
|
||||
<source>The pnach file '%1' does not currently exist. Do you want to create it?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2184"/>
|
||||
<location filename="../MainWindow.cpp" line="2210"/>
|
||||
<source>Failed to create '%1'.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2280"/>
|
||||
<location filename="../MainWindow.cpp" line="2306"/>
|
||||
<source>Input Recording Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2281"/>
|
||||
<location filename="../MainWindow.cpp" line="2307"/>
|
||||
<source>Failed to create file: {}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2303"/>
|
||||
<location filename="../MainWindow.cpp" line="2329"/>
|
||||
<source>Select a File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2304"/>
|
||||
<location filename="../MainWindow.cpp" line="2330"/>
|
||||
<source>Input Recording Files (*.p2m2)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2339"/>
|
||||
<location filename="../MainWindow.cpp" line="2365"/>
|
||||
<source>Input Playback Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2340"/>
|
||||
<location filename="../MainWindow.cpp" line="2366"/>
|
||||
<source>Failed to open file: {}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2426"/>
|
||||
<location filename="../MainWindow.cpp" line="2452"/>
|
||||
<source>Paused</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2614"/>
|
||||
<location filename="../MainWindow.cpp" line="2640"/>
|
||||
<source>Load State Failed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2614"/>
|
||||
<location filename="../MainWindow.cpp" line="2640"/>
|
||||
<source>Cannot load a save state without a running VM.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2638"/>
|
||||
<location filename="../MainWindow.cpp" line="2664"/>
|
||||
<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="2650"/>
|
||||
<location filename="../MainWindow.cpp" line="2676"/>
|
||||
<source>Cannot change from game to GS dump without shutting down first.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2818"/>
|
||||
<location filename="../MainWindow.cpp" line="2865"/>
|
||||
<source>Failed to get window info from widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1997"/>
|
||||
<location filename="../MainWindow.cpp" line="2023"/>
|
||||
<source>Stop Big Picture Mode</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1998"/>
|
||||
<location filename="../MainWindow.cpp" line="2024"/>
|
||||
<source>Exit Big Picture</source>
|
||||
<comment>In Toolbar</comment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3215"/>
|
||||
<location filename="../MainWindow.cpp" line="3294"/>
|
||||
<source>Game Properties</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3215"/>
|
||||
<location filename="../MainWindow.cpp" line="3294"/>
|
||||
<source>Game properties is unavailable for the current game.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3267"/>
|
||||
<location filename="../MainWindow.cpp" line="3346"/>
|
||||
<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="3285"/>
|
||||
<location filename="../MainWindow.cpp" line="3364"/>
|
||||
<source>Select disc drive:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3309"/>
|
||||
<location filename="../MainWindow.cpp" line="3388"/>
|
||||
<source>This save state does not exist.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3322"/>
|
||||
<location filename="../MainWindow.cpp" line="3401"/>
|
||||
<source>Select Cover Image</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3339"/>
|
||||
<location filename="../MainWindow.cpp" line="3418"/>
|
||||
<source>Cover Already Exists</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3340"/>
|
||||
<location filename="../MainWindow.cpp" line="3419"/>
|
||||
<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="3335"/>
|
||||
<location filename="../MainWindow.cpp" line="3349"/>
|
||||
<location filename="../MainWindow.cpp" line="3355"/>
|
||||
<location filename="../MainWindow.cpp" line="3361"/>
|
||||
<location filename="../MainWindow.cpp" line="3414"/>
|
||||
<location filename="../MainWindow.cpp" line="3428"/>
|
||||
<location filename="../MainWindow.cpp" line="3434"/>
|
||||
<location filename="../MainWindow.cpp" line="3440"/>
|
||||
<source>Copy Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3349"/>
|
||||
<location filename="../MainWindow.cpp" line="3428"/>
|
||||
<source>Failed to remove existing cover '%1'</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3355"/>
|
||||
<location filename="../MainWindow.cpp" line="3434"/>
|
||||
<source>Failed to copy '%1' to '%2'</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3361"/>
|
||||
<location filename="../MainWindow.cpp" line="3440"/>
|
||||
<source>Failed to remove '%1'</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="2637"/>
|
||||
<location filename="../MainWindow.cpp" line="3370"/>
|
||||
<location filename="../MainWindow.cpp" line="2663"/>
|
||||
<location filename="../MainWindow.cpp" line="3449"/>
|
||||
<source>Confirm Reset</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="1853"/>
|
||||
<location filename="../MainWindow.cpp" line="1879"/>
|
||||
<source>Open Snapshots Folder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3322"/>
|
||||
<location filename="../MainWindow.cpp" line="3401"/>
|
||||
<source>All Cover Image Types (*.jpg *.jpeg *.png *.webp)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3335"/>
|
||||
<location filename="../MainWindow.cpp" line="3414"/>
|
||||
<source>You must select a different file to the current cover image.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3406"/>
|
||||
<location filename="../MainWindow.cpp" line="3485"/>
|
||||
<source>Failed to create snapshots directory '%1'
|
||||
|
||||
Opening default directory.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3482"/>
|
||||
<location filename="../MainWindow.cpp" line="3561"/>
|
||||
<source>Load Resume State</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3485"/>
|
||||
<location filename="../MainWindow.cpp" line="3564"/>
|
||||
<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="3489"/>
|
||||
<location filename="../MainWindow.cpp" line="3568"/>
|
||||
<source>Fresh Boot</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3490"/>
|
||||
<location filename="../MainWindow.cpp" line="3569"/>
|
||||
<source>Delete And Boot</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3507"/>
|
||||
<location filename="../MainWindow.cpp" line="3586"/>
|
||||
<source>Failed to delete save state file '%1'.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3565"/>
|
||||
<location filename="../MainWindow.cpp" line="3644"/>
|
||||
<source>Load State File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3565"/>
|
||||
<location filename="../MainWindow.cpp" line="3644"/>
|
||||
<source>Load From File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3568"/>
|
||||
<location filename="../MainWindow.cpp" line="3642"/>
|
||||
<location filename="../MainWindow.cpp" line="3647"/>
|
||||
<location filename="../MainWindow.cpp" line="3721"/>
|
||||
<source>Select Save State File</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3613"/>
|
||||
<location filename="../MainWindow.cpp" line="3692"/>
|
||||
<source>Load Backup Slot %1 (%2)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<location filename="../MainWindow.cpp" line="3630"/>
|
||||
<location filename="../MainWindow.cpp" line="3709"/>
|
||||
<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="3642"/>
|
||||
<location filename="../MainWindow.cpp" line="3721"/>
|
||||
<source>Save States (*.p2s)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3575"/>
|
||||
<location filename="../MainWindow.cpp" line="3654"/>
|
||||
<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="3371"/>
|
||||
<location filename="../MainWindow.cpp" line="3450"/>
|
||||
<source>Are you sure you want to reset the play time for '%1' (%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="3372"/>
|
||||
<location filename="../MainWindow.cpp" line="3451"/>
|
||||
<source>empty title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3373"/>
|
||||
<location filename="../MainWindow.cpp" line="3452"/>
|
||||
<source>no serial</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3425"/>
|
||||
<location filename="../MainWindow.cpp" line="3504"/>
|
||||
<source>Failed to create game texture directory '%1'
|
||||
|
||||
Opening default directory.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3442"/>
|
||||
<location filename="../MainWindow.cpp" line="3521"/>
|
||||
<source>Failed to open memory card directory.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3464"/>
|
||||
<location filename="../MainWindow.cpp" line="3543"/>
|
||||
<source>Failed to create game video capture directory '%1'
|
||||
|
||||
Opening default directory.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3568"/>
|
||||
<location filename="../MainWindow.cpp" line="3647"/>
|
||||
<source>Save States (*.p2s *.p2s.backup)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3585"/>
|
||||
<location filename="../MainWindow.cpp" line="3664"/>
|
||||
<source>Resume (%2)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3601"/>
|
||||
<location filename="../MainWindow.cpp" line="3680"/>
|
||||
<source>Load Slot %1 (%2)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3622"/>
|
||||
<location filename="../MainWindow.cpp" line="3630"/>
|
||||
<location filename="../MainWindow.cpp" line="3701"/>
|
||||
<location filename="../MainWindow.cpp" line="3709"/>
|
||||
<source>Delete Save States</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3623"/>
|
||||
<location filename="../MainWindow.cpp" line="3702"/>
|
||||
<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="3640"/>
|
||||
<location filename="../MainWindow.cpp" line="3719"/>
|
||||
<source>Save To File...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3660"/>
|
||||
<location filename="../MainWindow.cpp" line="3739"/>
|
||||
<source>Empty</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3662"/>
|
||||
<location filename="../MainWindow.cpp" line="3741"/>
|
||||
<source>Save Slot %1 (%2)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3722"/>
|
||||
<location filename="../MainWindow.cpp" line="3801"/>
|
||||
<source>Confirm Disc Change</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3723"/>
|
||||
<location filename="../MainWindow.cpp" line="3802"/>
|
||||
<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="3724"/>
|
||||
<location filename="../MainWindow.cpp" line="3803"/>
|
||||
<source>Swap Disc</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../MainWindow.cpp" line="3725"/>
|
||||
<location filename="../MainWindow.cpp" line="3804"/>
|
||||
<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="1137"/>
|
||||
<location filename="../QtHost.cpp" line="1142"/>
|
||||
<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="1576"/>
|
||||
<location filename="../QtHost.cpp" line="1591"/>
|
||||
<location filename="../QtHost.cpp" line="1581"/>
|
||||
<location filename="../QtHost.cpp" line="1596"/>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1577"/>
|
||||
<location filename="../QtHost.cpp" line="1582"/>
|
||||
<source>An error occurred while deleting empty game settings:
|
||||
{}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1592"/>
|
||||
<location filename="../QtHost.cpp" line="1597"/>
|
||||
<source>An error occurred while saving game settings:
|
||||
{}</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1751"/>
|
||||
<location filename="../QtHost.cpp" line="1756"/>
|
||||
<source>Controller {} connected.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1764"/>
|
||||
<location filename="../QtHost.cpp" line="1769"/>
|
||||
<source>System paused because controller {} was disconnected.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="1777"/>
|
||||
<location filename="../QtHost.cpp" line="1782"/>
|
||||
<source>Controller {} disconnected.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../QtHost.cpp" line="2020"/>
|
||||
<location filename="../QtHost.cpp" line="2025"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
||||
+7
-4
@@ -468,7 +468,7 @@ u32 cdvdGetElfCRC(const std::string& path)
|
||||
return elfo.GetCRC();
|
||||
}
|
||||
|
||||
static CDVDDiscType GetPS2ElfName(IsoReader& isor, std::string* name, std::string* version, Error* error)
|
||||
static CDVDDiscType GetPS2ElfName(IsoReader& isor, std::string* name, std::string* version, std::string* vmode, Error* error)
|
||||
{
|
||||
CDVDDiscType retype = CDVDDiscType::Other;
|
||||
name->clear();
|
||||
@@ -510,6 +510,7 @@ static CDVDDiscType GetPS2ElfName(IsoReader& isor, std::string* name, std::strin
|
||||
else if (key == "VMODE")
|
||||
{
|
||||
DevCon.WriteLn(Color_Blue, fmt::format("(SYSTEM.CNF) Disc region type = {}", value));
|
||||
*vmode = value;
|
||||
}
|
||||
else if (key == "VER")
|
||||
{
|
||||
@@ -574,15 +575,15 @@ static std::string ExecutablePathToSerial(const std::string& path)
|
||||
return serial;
|
||||
}
|
||||
|
||||
void cdvdGetDiscInfo(std::string* out_serial, std::string* out_elf_path, std::string* out_version, u32* out_crc,
|
||||
void cdvdGetDiscInfo(std::string* out_serial, std::string* out_elf_path, std::string* out_version, std::string* out_region, u32* out_crc,
|
||||
CDVDDiscType* out_disc_type)
|
||||
{
|
||||
Error error;
|
||||
IsoReader isor;
|
||||
|
||||
std::string elfpath, version;
|
||||
std::string elfpath, version, vmode;
|
||||
CDVDDiscType disc_type = CDVDDiscType::Other;
|
||||
if (!isor.Open(&error) || (disc_type = GetPS2ElfName(isor, &elfpath, &version, &error)) == CDVDDiscType::Other)
|
||||
if (!isor.Open(&error) || (disc_type = GetPS2ElfName(isor, &elfpath, &version, &vmode, &error)) == CDVDDiscType::Other)
|
||||
Console.Error(fmt::format("Failed to get ELF name: {}", error.GetDescription()));
|
||||
|
||||
// Don't bother parsing it if we don't need the CRC.
|
||||
@@ -616,6 +617,8 @@ void cdvdGetDiscInfo(std::string* out_serial, std::string* out_elf_path, std::st
|
||||
*out_version = std::move(version);
|
||||
if (out_disc_type)
|
||||
*out_disc_type = disc_type;
|
||||
if (out_region)
|
||||
*out_region = vmode;
|
||||
}
|
||||
|
||||
void cdvdReadKey(u8, u16, u32 arg2, u8* key)
|
||||
|
||||
+1
-1
@@ -179,7 +179,7 @@ extern void cdvdNewDiskCB();
|
||||
extern u8 cdvdRead(u8 key);
|
||||
extern void cdvdWrite(u8 key, u8 rt);
|
||||
|
||||
extern void cdvdGetDiscInfo(std::string* out_serial, std::string* out_elf_path, std::string* out_version, u32* out_crc,
|
||||
extern void cdvdGetDiscInfo(std::string* out_serial, std::string* out_elf_path, std::string* out_version, std::string* out_region, u32* out_crc,
|
||||
CDVDDiscType* out_disc_type);
|
||||
extern u32 cdvdGetElfCRC(const std::string& path);
|
||||
extern bool cdvdLoadElf(ElfObject* elfo, const std::string_view elfpath, bool isPSXElf, Error* error);
|
||||
|
||||
+6
-4
@@ -215,7 +215,7 @@ static void vSyncInfoCalc(vSyncTimingInfo* info, double framesPerSecond, u32 sca
|
||||
// Dynasty Warriors 3 Xtreme Legends - fake save corruption when loading save
|
||||
// Jak II - random speedups
|
||||
// Shadow of Rome - FMV audio issues
|
||||
const bool ntsc_hblank = gsVideoMode != GS_VideoMode::PAL && gsVideoMode != GS_VideoMode::DVD_PAL;
|
||||
const bool ntsc_hblank = gsVideoMode != GS_VideoMode::PAL && gsVideoMode != GS_VideoMode::DVD_PAL && (gsVideoMode != GS_VideoMode::Uninitialized || framesPerSecond != (Pcsx2Config::GSOptions::DEFAULT_FRAME_RATE_PAL / 2));
|
||||
const u64 HalfFrame = Frame / 2;
|
||||
const float extra_scanlines = static_cast<float>(IsProgressiveVideoMode()) * (ntsc_hblank ? 0.5f : 1.5f);
|
||||
const u64 Blank = Scanline * ((ntsc_hblank ? 22.5f : 24.5f) + extra_scanlines);
|
||||
@@ -307,10 +307,12 @@ double GetVerticalFrequency()
|
||||
// https://web.archive.org/web/20120629231826fw_/http://ntsc-tv.com/index.html
|
||||
// https://web.archive.org/web/20200831051302/https://www.hdretrovision.com/240p/
|
||||
|
||||
std::string cur_region = VMManager::Internal::GetCurrentRegion();
|
||||
|
||||
switch (gsVideoMode)
|
||||
{
|
||||
case GS_VideoMode::Uninitialized: // SetGsCrt hasn't executed yet, give some temporary values.
|
||||
return 60.00;
|
||||
return (cur_region == "PAL") ? Pcsx2Config::GSOptions::DEFAULT_FRAME_RATE_PAL : Pcsx2Config::GSOptions::DEFAULT_FRAME_RATE_NTSC;
|
||||
case GS_VideoMode::PAL:
|
||||
case GS_VideoMode::DVD_PAL:
|
||||
return (IsProgressiveVideoMode() == false) ? EmuConfig.GS.FrameratePAL : EmuConfig.GS.FrameratePAL - 0.24f;
|
||||
@@ -352,9 +354,9 @@ void UpdateVSyncRate(bool force)
|
||||
{
|
||||
case GS_VideoMode::Uninitialized: // SYSCALL instruction hasn't executed yet, give some temporary values.
|
||||
if (gsIsInterlaced)
|
||||
total_scanlines = SCANLINES_TOTAL_NTSC_I;
|
||||
total_scanlines = (vertical_frequency == Pcsx2Config::GSOptions::DEFAULT_FRAME_RATE_PAL) ? SCANLINES_TOTAL_PAL_I : SCANLINES_TOTAL_NTSC_I;
|
||||
else
|
||||
total_scanlines = SCANLINES_TOTAL_NTSC_NI;
|
||||
total_scanlines = (vertical_frequency == Pcsx2Config::GSOptions::DEFAULT_FRAME_RATE_PAL) ? SCANLINES_TOTAL_PAL_NI : SCANLINES_TOTAL_NTSC_NI;
|
||||
break;
|
||||
case GS_VideoMode::PAL:
|
||||
case GS_VideoMode::DVD_PAL:
|
||||
|
||||
+61
-60
@@ -373,6 +373,7 @@ void GSState::ResetDrawBufferIdx()
|
||||
void GSState::ResetDrawBuffers()
|
||||
{
|
||||
m_used_buffers_idx = 1;
|
||||
m_max_vertex_count = 0;
|
||||
|
||||
for (int i = 0; i < MAX_DRAW_BUFFERS; i++)
|
||||
{
|
||||
@@ -383,9 +384,9 @@ void GSState::ResetDrawBuffers()
|
||||
m_index = &m_index_buffers[i];
|
||||
m_vertex = &m_vertex_buffers[i];
|
||||
m_vertex_buffers[i].head = m_vertex_buffers[i].tail = m_vertex_buffers[i].next = 0;
|
||||
GrowVertexBuffer();
|
||||
}
|
||||
|
||||
GrowVertexBuffer();
|
||||
ResetDrawBufferIdx();
|
||||
}
|
||||
|
||||
@@ -473,15 +474,16 @@ void GSState::PushBuffer()
|
||||
m_index = &m_index_buffers[m_used_buffers_idx];
|
||||
m_vertex = &m_vertex_buffers[m_used_buffers_idx];
|
||||
GSVertexBuff& vtx_buff = *m_vertex;
|
||||
GSIndexBuff& idx_buff = *m_index;
|
||||
|
||||
const u32 base = m_vertex_buffers[m_current_buffer_idx].head;
|
||||
const u32 copy_amt = m_vertex_buffers[m_current_buffer_idx].tail - base;
|
||||
u32 copy_amt = m_vertex_buffers[m_current_buffer_idx].tail - base;
|
||||
|
||||
m_vertex->tail = 0;
|
||||
|
||||
if (copy_amt)
|
||||
if (copy_amt && m_env.PRIM.PRIM == m_env_buffers[m_current_buffer_idx].m_env.PRIM.PRIM)
|
||||
memcpy(vtx_buff.buff, &m_vertex_buffers[m_current_buffer_idx].buff[base], sizeof(GSVertex) * copy_amt);
|
||||
else
|
||||
copy_amt = 0;
|
||||
|
||||
vtx_buff.head = 0;
|
||||
vtx_buff.next = 0;
|
||||
@@ -638,20 +640,27 @@ bool GSState::CanBufferNewDraw()
|
||||
GSVertexBuff& vtx_buff = *m_vertex;
|
||||
GSIndexBuff& idx_buff = *m_index;
|
||||
|
||||
const u32 copy_amt = m_vertex_buffers[m_current_buffer_idx].tail - m_vertex_buffers[m_current_buffer_idx].head;
|
||||
|
||||
m_recent_buffer_switch = vtx_buff.tail == vtx_buff.head;
|
||||
if (idx_buff.tail)
|
||||
vtx_buff.tail = idx_buff.buff[idx_buff.tail - 1] + 1;
|
||||
vtx_buff.tail = std::max(idx_buff.buff[idx_buff.tail - 1], idx_buff.buff[std::max(static_cast<int>(idx_buff.tail) - 2, 0)]) + 1;
|
||||
else
|
||||
vtx_buff.tail = 0;
|
||||
|
||||
if (copy_amt)
|
||||
memcpy(&vtx_buff.buff[vtx_buff.tail], &m_vertex_buffers[m_current_buffer_idx].buff[m_vertex_buffers[m_current_buffer_idx].head], sizeof(GSVertex) * copy_amt);
|
||||
|
||||
vtx_buff.head = vtx_buff.tail;
|
||||
vtx_buff.next = vtx_buff.head;
|
||||
vtx_buff.tail += copy_amt;
|
||||
|
||||
u32 copy_amt = m_vertex_buffers[m_current_buffer_idx].tail - m_vertex_buffers[m_current_buffer_idx].head;
|
||||
|
||||
if (copy_amt && m_env_buffers[i].m_env.PRIM.PRIM == m_env_buffers[m_current_buffer_idx].m_env.PRIM.PRIM)
|
||||
{
|
||||
memcpy(&vtx_buff.buff[vtx_buff.tail], &m_vertex_buffers[m_current_buffer_idx].buff[m_vertex_buffers[m_current_buffer_idx].head], sizeof(GSVertex) * copy_amt);
|
||||
|
||||
vtx_buff.tail += copy_amt;
|
||||
}
|
||||
else
|
||||
copy_amt = 0;
|
||||
|
||||
m_recent_buffer_switch = vtx_buff.tail == vtx_buff.head;
|
||||
|
||||
m_backed_up_ctx = m_env_buffers[i].m_backed_up_ctx;
|
||||
temp_draw_rect = m_env_buffers[i].draw_rect;
|
||||
m_env_buffers[i].m_dirty_regs = 0;
|
||||
@@ -678,7 +687,6 @@ bool GSState::CanBufferNewDraw()
|
||||
vtx_buff.xy_tail = 0;
|
||||
|
||||
m_current_buffer_idx = i;
|
||||
|
||||
}
|
||||
|
||||
m_dirty_gs_regs = 0;
|
||||
@@ -3818,56 +3826,49 @@ void GSState::UpdateVertexKick()
|
||||
m_fpGIFPackedRegHandlersC[GIF_REG_STQRGBAXYZ2] = m_fpGIFPackedRegHandlerSTQRGBAXYZ2[prim];
|
||||
}
|
||||
|
||||
static void GrowBuffer(void** pbuff, size_t old_size, size_t new_size, bool vertices)
|
||||
{
|
||||
void* new_buff = _aligned_malloc(new_size, 32);
|
||||
if (!new_buff)
|
||||
{
|
||||
Console.Error("GS: failed to allocate %zu bytes for %s.", new_size, vertices ? "vertices" : "indices");
|
||||
pxFailRel("Memory allocation failed");
|
||||
}
|
||||
if (*pbuff)
|
||||
{
|
||||
if (old_size)
|
||||
{
|
||||
std::memcpy(new_buff, *pbuff, old_size);
|
||||
}
|
||||
_aligned_free(*pbuff);
|
||||
}
|
||||
*pbuff = new_buff;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void GrowBuffer(T** pbuff, size_t old_count, size_t new_count)
|
||||
{
|
||||
static_assert(std::is_same_v<T, GSVertex> || std::is_same_v<T, u16>, "For use with indices or vertices");
|
||||
GrowBuffer(reinterpret_cast<void**>(pbuff), old_count * sizeof(T), new_count * sizeof(T), std::is_same_v<T, GSVertex>);
|
||||
}
|
||||
|
||||
void GSState::GrowVertexBuffer()
|
||||
{
|
||||
const u32 maxcount = std::max<u32>(m_vertex->maxcount * 3 / 2, 10000);
|
||||
const u32 old_vertex_size = sizeof(GSVertex) * m_vertex->tail;
|
||||
const u32 new_vertex_size = sizeof(GSVertex) * maxcount;
|
||||
const u32 old_index_size = sizeof(u16) * m_index->tail;
|
||||
const u32 new_index_size = sizeof(u16) * maxcount * 6; // Worst case index list is a list of points with vs expansion, 6 indices per point
|
||||
const u32 maxcount = std::max<u32>(m_max_vertex_count * 3 / 2, 10000);
|
||||
const u32 new_vertex_count = maxcount;
|
||||
const u32 new_index_count = maxcount * 6; // Worst case index list is a list of points with vs expansion, 6 indices per point
|
||||
|
||||
// Structure describing buffers to reallocate
|
||||
struct AllocDesc
|
||||
for (GSVertexBuff& buf : m_vertex_buffers)
|
||||
{
|
||||
void** pbuff;
|
||||
u32 old_size;
|
||||
u32 new_size;
|
||||
};
|
||||
const std::array<AllocDesc, 5> alloc_desc = {{
|
||||
{reinterpret_cast<void**>(&m_vertex->buff), old_vertex_size, new_vertex_size},
|
||||
// discard contents of buff_copy by setting old_size = 0
|
||||
{reinterpret_cast<void**>(&m_vertex->buff_copy), 0, new_vertex_size},
|
||||
{reinterpret_cast<void**>(&m_draw_vertex.buff), old_vertex_size, new_vertex_size},
|
||||
{reinterpret_cast<void**>(&m_index->buff), old_index_size, new_index_size},
|
||||
{reinterpret_cast<void**>(&m_draw_index.buff), old_index_size, new_index_size}
|
||||
}};
|
||||
|
||||
// For logging
|
||||
u32 total_size = 0;
|
||||
for (const auto& desc : alloc_desc)
|
||||
total_size += desc.new_size;
|
||||
|
||||
// Reallocate each of the needed buffers
|
||||
for (const auto [pbuff, old_size, new_size] : alloc_desc)
|
||||
{
|
||||
void* new_buff = _aligned_malloc(new_size, 32);
|
||||
if (!new_buff)
|
||||
{
|
||||
Console.Error("GS: failed to allocate %zu bytes for vertices and indices.", total_size);
|
||||
pxFailRel("Memory allocation failed");
|
||||
}
|
||||
if (*pbuff)
|
||||
{
|
||||
if (old_size)
|
||||
{
|
||||
std::memcpy(new_buff, *pbuff, old_size);
|
||||
}
|
||||
_aligned_free(*pbuff);
|
||||
}
|
||||
*pbuff = new_buff;
|
||||
GrowBuffer(&buf.buff, buf.tail, new_vertex_count);
|
||||
GrowBuffer(&buf.buff_copy, 0, new_vertex_count);
|
||||
}
|
||||
for (GSIndexBuff& buf : m_index_buffers)
|
||||
GrowBuffer(&buf.buff, buf.tail, new_index_count);
|
||||
GrowBuffer(&m_draw_vertex.buff, m_vertex->tail, new_vertex_count);
|
||||
GrowBuffer(&m_draw_index.buff, m_index->tail, new_index_count);
|
||||
|
||||
m_vertex->maxcount = maxcount - 3; // -3 to have some space at the end of the buffer before DrawingKick can grow it
|
||||
m_max_vertex_count = maxcount - 3; // -3 to have some space at the end of the buffer before DrawingKick can grow it
|
||||
}
|
||||
|
||||
// For returning order of vertices to form a right triangle
|
||||
@@ -5836,7 +5837,7 @@ __forceinline void GSState::VertexKick(u32 skip)
|
||||
GSVertexBuff& vtx_buff = *m_vertex;
|
||||
GSIndexBuff& idx_buff = *m_index;
|
||||
static_assert(n > 0);
|
||||
pxAssert(vtx_buff.tail < vtx_buff. maxcount + 3);
|
||||
pxAssert(vtx_buff.tail < m_max_vertex_count + 3);
|
||||
|
||||
if constexpr (prim == GS_INVALID)
|
||||
{
|
||||
@@ -5973,7 +5974,7 @@ __forceinline void GSState::VertexKick(u32 skip)
|
||||
vtx_buff.head = head + 1;
|
||||
[[fallthrough]];
|
||||
case GS_TRIANGLEFAN:
|
||||
if (tail >= vtx_buff.maxcount)
|
||||
if (tail >= m_max_vertex_count)
|
||||
GrowVertexBuffer(); // in case too many vertices were skipped
|
||||
break;
|
||||
default:
|
||||
@@ -5997,7 +5998,7 @@ __forceinline void GSState::VertexKick(u32 skip)
|
||||
SetDrawBufferEnv();
|
||||
}
|
||||
|
||||
if (tail >= vtx_buff.maxcount)
|
||||
if (tail >= m_max_vertex_count)
|
||||
GrowVertexBuffer();
|
||||
|
||||
u16* RESTRICT buff = &idx_buff.buff[idx_buff.tail];
|
||||
|
||||
+2
-1
@@ -135,12 +135,13 @@ protected:
|
||||
int m_used_buffers_idx = 0;
|
||||
int m_current_buffer_idx = 0;
|
||||
bool m_recent_buffer_switch = false;
|
||||
u32 m_max_vertex_count;
|
||||
|
||||
struct GSVertexBuff
|
||||
{
|
||||
GSVertex* buff;
|
||||
GSVertex* buff_copy; // same size buffer to copy/modify the original buffer
|
||||
u32 head, tail, next, maxcount; // head: first vertex, tail: last vertex + 1, next: last indexed + 1
|
||||
u32 head, tail, next; // head: first vertex, tail: last vertex + 1, next: last indexed + 1
|
||||
u32 xy_tail;
|
||||
GSVector4i xy[4];
|
||||
GSVector4i xyhead;
|
||||
|
||||
@@ -222,9 +222,7 @@ void GSRendererHW::Lines2Sprites()
|
||||
|
||||
// each sprite converted to quad needs twice the space
|
||||
|
||||
const int tail = m_vertex->tail * 2;
|
||||
const int max_count = m_vertex->maxcount;
|
||||
while (tail > max_count)
|
||||
while (m_vertex->tail * 2 > m_max_vertex_count)
|
||||
{
|
||||
GrowVertexBuffer();
|
||||
}
|
||||
@@ -3941,7 +3939,8 @@ 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;
|
||||
else if (next_ctx.TEX0.TBP0 == FRAME_TEX0.TBP0 && next_ctx.TEX0.PSM != FRAME_TEX0.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)
|
||||
FRAME_TEX0.PSM = next_ctx.TEX0.PSM;
|
||||
else
|
||||
FRAME_TEX0.PSM = PSMCT32; // Guess full color if no upcoming hint, it'll fix itself later.
|
||||
@@ -5384,7 +5383,7 @@ void GSRendererHW::HandleFlatShadedVertices()
|
||||
return;
|
||||
|
||||
// De-index the vertices using the copy buffer
|
||||
while (vtx_buff.maxcount < idx_buff.tail)
|
||||
while (m_max_vertex_count < idx_buff.tail)
|
||||
GrowVertexBuffer();
|
||||
|
||||
for (int i = static_cast<int>(idx_buff.tail) - 1; i >= 0; i--)
|
||||
|
||||
@@ -2580,12 +2580,21 @@ 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);
|
||||
const u32 adjusted_endblock = GSLocalMemory::GetEndBlockAddress(t->m_TEX0.TBP0, t->m_TEX0.TBW, t->m_TEX0.PSM, adjusted_valid);
|
||||
u32 adjusted_endblock = GSLocalMemory::GetUnwrappedEndBlockAddress(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);
|
||||
|
||||
@@ -320,7 +320,7 @@ void GSRendererSW::RewriteVerticesIfSTOverflow()
|
||||
constexpr int n = GSUtil::GetClassVertexCount(primclass);
|
||||
|
||||
// Make sure the copy buffer is large enough.
|
||||
while (m_vertex->maxcount < m_index->tail)
|
||||
while (m_max_vertex_count < m_index->tail)
|
||||
GrowVertexBuffer();
|
||||
|
||||
GSVertex* RESTRICT vertex = m_vertex->buff;
|
||||
|
||||
+1
-1
@@ -267,7 +267,7 @@ bool GameList::GetIsoSerialAndCRC(const std::string& path, s32* disc_type, std::
|
||||
|
||||
// TODO: we could include the version in the game list?
|
||||
*disc_type = DoCDVDdetectDiskType();
|
||||
cdvdGetDiscInfo(serial, nullptr, nullptr, crc, nullptr);
|
||||
cdvdGetDiscInfo(serial, nullptr, nullptr, nullptr, crc, nullptr);
|
||||
DoCDVDclose();
|
||||
return true;
|
||||
}
|
||||
|
||||
+3
-2
@@ -83,8 +83,9 @@ static std::string hostRoot;
|
||||
|
||||
void Hle_SetHostRoot(const char* bootFilename)
|
||||
{
|
||||
hostRoot = Path::ToNativePath(Path::GetDirectory(bootFilename));
|
||||
Console.WriteLn("HLE Host: Set 'host:' root path to: %s\n", hostRoot.c_str());
|
||||
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());
|
||||
}
|
||||
|
||||
void Hle_ClearHostRoot()
|
||||
|
||||
+4
-2
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "Common.h"
|
||||
|
||||
#include "common/Path.h"
|
||||
#include "common/StringUtil.h"
|
||||
#include "ps2/BiosTools.h"
|
||||
#include "R5900.h"
|
||||
@@ -671,13 +672,14 @@ void eeloadHook()
|
||||
const std::string& elf_override = VMManager::Internal::GetELFOverride();
|
||||
if (!elf_override.empty())
|
||||
{
|
||||
elfname = fmt::format("host:{}", elf_override);
|
||||
// The host: root should be directory containg the elf, so get only the filename part
|
||||
elfname = fmt::format("host:{}", Path::GetFileName(elf_override));
|
||||
}
|
||||
else
|
||||
{
|
||||
CDVDDiscType disc_type;
|
||||
std::string disc_elf;
|
||||
cdvdGetDiscInfo(nullptr, &disc_elf, nullptr, nullptr, &disc_type);
|
||||
cdvdGetDiscInfo(nullptr, &disc_elf, nullptr, nullptr, nullptr, &disc_type);
|
||||
if (disc_type == CDVDDiscType::PS2Disc)
|
||||
{
|
||||
// only allow fast boot for PS2 games
|
||||
|
||||
+10
-1
@@ -171,6 +171,7 @@ static std::string s_disc_version;
|
||||
static std::string s_title;
|
||||
static std::string s_title_en_search;
|
||||
static std::string s_title_en_replace;
|
||||
static std::string s_cur_region;
|
||||
static u32 s_disc_crc;
|
||||
static u32 s_current_crc;
|
||||
static u32 s_elf_entry_point = 0xFFFFFFFFu;
|
||||
@@ -1051,11 +1052,12 @@ void VMManager::UpdateDiscDetails(bool booting)
|
||||
s_disc_crc = GSDumpReplayer::GetDumpCRC();
|
||||
s_disc_elf = {};
|
||||
s_disc_version = {};
|
||||
s_cur_region = "NTSC";
|
||||
serial_is_valid = !s_disc_serial.empty();
|
||||
}
|
||||
else if (CDVDsys_GetSourceType() != CDVD_SourceType::NoDisc)
|
||||
{
|
||||
cdvdGetDiscInfo(&s_disc_serial, &s_disc_elf, &s_disc_version, &s_disc_crc, nullptr);
|
||||
cdvdGetDiscInfo(&s_disc_serial, &s_disc_elf, &s_disc_version, &s_cur_region, &s_disc_crc, nullptr);
|
||||
serial_is_valid = !s_disc_serial.empty();
|
||||
}
|
||||
else if (!s_elf_override.empty())
|
||||
@@ -1063,12 +1065,14 @@ void VMManager::UpdateDiscDetails(bool booting)
|
||||
s_disc_serial = Path::GetFileTitle(s_elf_override);
|
||||
s_disc_version = {};
|
||||
s_disc_crc = 0; // set below
|
||||
s_cur_region = "NTSC";
|
||||
}
|
||||
else
|
||||
{
|
||||
s_disc_serial = BiosSerial;
|
||||
s_disc_version = {};
|
||||
s_disc_crc = 0;
|
||||
s_cur_region = (BiosZone == "Europe") ? "PAL" : "NTSC";
|
||||
title = fmt::format(TRANSLATE_FS("VMManager", "PS2 BIOS ({})"), BiosZone);
|
||||
}
|
||||
|
||||
@@ -2818,6 +2822,11 @@ bool VMManager::Internal::IsFastBootInProgress()
|
||||
return s_fast_boot_requested && !HasBootedELF();
|
||||
}
|
||||
|
||||
std::string VMManager::Internal::GetCurrentRegion()
|
||||
{
|
||||
return s_cur_region;
|
||||
}
|
||||
|
||||
void VMManager::Internal::DisableFastBoot()
|
||||
{
|
||||
if (!s_fast_boot_requested)
|
||||
|
||||
@@ -306,6 +306,9 @@ namespace VMManager
|
||||
/// Returns true if fast booting is active (requested but ELF not started).
|
||||
bool IsFastBootInProgress();
|
||||
|
||||
// Returns the current disc/BIOS region, if set.
|
||||
std::string GetCurrentRegion();
|
||||
|
||||
/// Disables fast boot if it was requested, and found to be incompatible.
|
||||
void DisableFastBoot();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user