mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-01-31 01:15:24 +01:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0afc9d6d10 | ||
|
|
2f4583f2e4 | ||
|
|
86af608bfc | ||
|
|
3a7489b2cc | ||
|
|
51947f8f93 | ||
|
|
e07f02d9bc | ||
|
|
6c07160503 | ||
|
|
a02e1b3487 | ||
|
|
86a7e97025 | ||
|
|
5d641e4a9d | ||
|
|
a5f7b4e8c6 | ||
|
|
9bb30dcb44 | ||
|
|
4eb0b097d6 | ||
|
|
38f61b9658 | ||
|
|
80ffb82a4a | ||
|
|
3cecd894a3 | ||
|
|
02f0921b2d |
@@ -17,7 +17,7 @@ jobs:
|
||||
run: ./.github/workflows/scripts/common/update_base_translation.sh
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@4320041ed380b20e97d388d56a7fb4f9b8c20e79
|
||||
uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676
|
||||
with:
|
||||
title: "Qt: Update Base Translation"
|
||||
commit-message: "[ci skip] Qt: Update Base Translation."
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
mv ./game_controller_db.txt ${{github.workspace}}/bin/resources/game_controller_db.txt
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@4320041ed380b20e97d388d56a7fb4f9b8c20e79
|
||||
uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676
|
||||
with:
|
||||
title: "PAD: Update to latest controller database"
|
||||
commit-message: "[ci skip] PAD: Update to latest controller database."
|
||||
|
||||
@@ -1603,9 +1603,11 @@ SCAJ-20052:
|
||||
- "SCAJ-20001"
|
||||
SCAJ-20055:
|
||||
name: "Battle Gear 3"
|
||||
region: "NTSC-Unk"
|
||||
region: "NTSC-J"
|
||||
clampModes:
|
||||
vuClampMode: 3 # Stops car from falling through track.
|
||||
gsHWFixes:
|
||||
textureInsideRT: 1 # Fixes broken splitscreen mode.
|
||||
SCAJ-20056:
|
||||
name: "Bujingai"
|
||||
region: "NTSC-Unk"
|
||||
@@ -21856,12 +21858,6 @@ SLES-52942:
|
||||
SLES-52943:
|
||||
name: "ESPN NFL 2K5"
|
||||
region: "PAL-E"
|
||||
patches:
|
||||
7D5403E1:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Fixes random hangs.
|
||||
patch=1,EE,0043c930,word,00000000
|
||||
SLES-52944:
|
||||
name: "Robotech - Invasion"
|
||||
region: "PAL-M5"
|
||||
@@ -21922,13 +21918,6 @@ SLES-52965:
|
||||
SLES-52966:
|
||||
name: "ESPN NHL 2K5"
|
||||
region: "PAL-E"
|
||||
patches:
|
||||
EC301155:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=Patched by Prafull
|
||||
// Avoid hanging at loading screen.
|
||||
patch=1,EE,003e4018,word,00000000
|
||||
SLES-52967:
|
||||
name: "Guilty Gear X2 Reloaded"
|
||||
region: "PAL-E"
|
||||
@@ -22148,12 +22137,6 @@ SLES-53022:
|
||||
region: "PAL-E"
|
||||
gameFixes:
|
||||
- SkipMPEGHack # Fixes videos.
|
||||
patches:
|
||||
CA37B42E:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,0034DA98,word,00000000
|
||||
SLES-53023:
|
||||
name: "RTL Ski Jump 2005"
|
||||
region: "PAL-E-G"
|
||||
@@ -24260,38 +24243,9 @@ SLES-53685:
|
||||
SLES-53686:
|
||||
name: "NHL 2K6"
|
||||
region: "PAL-M3"
|
||||
patches:
|
||||
98EC4D86:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=Patched by Prafull
|
||||
// Avoid hanging at loading screen.
|
||||
patch=1,EE,00433150,word,00000000
|
||||
SLES-53687:
|
||||
name: "NBA 2K6"
|
||||
region: "PAL-M5"
|
||||
patches:
|
||||
4047DB34: # English
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,00441ff8,word,00000000
|
||||
B91D81A3: # French
|
||||
content: |-
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,00441fa0,word,00000000
|
||||
C96E2007: # German
|
||||
content: |-
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,00441e48,word,00000000
|
||||
79A6C879: # Italian
|
||||
content: |-
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,00441de8,word,00000000
|
||||
08349AAF: # Spanish
|
||||
content: |-
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,00441ec8,word,00000000
|
||||
SLES-53689:
|
||||
name: "World Poker Tour"
|
||||
region: "PAL-M3"
|
||||
@@ -25867,22 +25821,9 @@ SLES-54209:
|
||||
SLES-54210:
|
||||
name: "NBA 2K7"
|
||||
region: "PAL-M5"
|
||||
patches:
|
||||
04808D11:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,0044f0f8,word,00000000
|
||||
SLES-54211:
|
||||
name: "NHL 2K7"
|
||||
region: "PAL-M5"
|
||||
patches:
|
||||
1AD6EFD1:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=Patched by Prafull
|
||||
// Avoid hanging at loading screen.
|
||||
patch=1,EE,004412a8,word,00000000
|
||||
SLES-54212:
|
||||
name: "Agent Hugo - RoboRumble"
|
||||
region: "PAL-M11"
|
||||
@@ -28073,13 +28014,6 @@ SLES-54880:
|
||||
SLES-54881:
|
||||
name: "NHL 2K8"
|
||||
region: "PAL-M5"
|
||||
patches:
|
||||
F2027778:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=Patched by Prafull
|
||||
// Avoid hanging at loading screen.
|
||||
patch=1,EE,004323b8,word,00000000
|
||||
SLES-54882:
|
||||
name: "Gecko Blaster"
|
||||
region: "PAL-M5"
|
||||
@@ -29178,7 +29112,7 @@ SLES-55191:
|
||||
nativeScaling: 1 # Fixes post-processing smoothness and position.
|
||||
getSkipCount: "GSC_GuitarHero"
|
||||
SLES-55192:
|
||||
name: "Steam Express"
|
||||
name: "Nitrobike"
|
||||
region: "PAL-M5"
|
||||
SLES-55193:
|
||||
name: "Disney/Pixar WALL-E"
|
||||
@@ -29456,13 +29390,6 @@ SLES-55251:
|
||||
SLES-55252:
|
||||
name: "NHL 2K9"
|
||||
region: "PAL-M5"
|
||||
patches:
|
||||
5D981DF2:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=Patched by Prafull
|
||||
// Avoid hanging at loading screen.
|
||||
patch=1,EE,00430d38,word,00000000
|
||||
SLES-55253:
|
||||
name: "NBA 2K9"
|
||||
region: "PAL-M5"
|
||||
@@ -43556,6 +43483,8 @@ SLPM-65434:
|
||||
region: "NTSC-J"
|
||||
clampModes:
|
||||
vuClampMode: 3 # Stops car from falling through track.
|
||||
gsHWFixes:
|
||||
textureInsideRT: 1 # Fixes broken splitscreen mode.
|
||||
SLPM-65435:
|
||||
name: "北へ。~Diamond Dust~"
|
||||
name-sort: "きたへ Diamond Dust"
|
||||
@@ -49723,12 +49652,6 @@ SLPM-66451:
|
||||
name-sort: "めじゃー りーぐ べーすぼーる 2K6"
|
||||
name-en: "Major League Baseball 2K6"
|
||||
region: "NTSC-J"
|
||||
patches:
|
||||
F0393708:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,0035d8b8,word,00000000
|
||||
SLPM-66452:
|
||||
name: "かまいたちの夜×3 三日月島事件の真相"
|
||||
name-sort: "かまいたちのよる3 みかづきじまじけんのしんそう"
|
||||
@@ -62661,12 +62584,6 @@ SLPS-25925:
|
||||
name-sort: "NHL 2K9"
|
||||
name-en: "NHL 2K9"
|
||||
region: "NTSC-J"
|
||||
patches:
|
||||
69C963FA:
|
||||
content: |-
|
||||
comment= patch by prafull , someother1ne
|
||||
// Fixes hang at start
|
||||
patch=1,EE,00430C70,word,00000000
|
||||
SLPS-25927:
|
||||
name: "トゥームレイダー アンダーワールド"
|
||||
name-sort: "とぅーむれいだー あんだーわーるど"
|
||||
@@ -62692,12 +62609,6 @@ SLPS-25930:
|
||||
name-sort: "MLB 2K9 [えいごばん]"
|
||||
name-en: "Major League Baseball 2K9"
|
||||
region: "NTSC-J"
|
||||
patches:
|
||||
69C963FA:
|
||||
content: |-
|
||||
comment= patch by prafull , someother1ne
|
||||
// Fixes hang at start
|
||||
patch=1,EE,003AFCA0,word,00000000
|
||||
SLPS-25931:
|
||||
name: "家庭教師ヒットマンREBORN! 狙え!? リング×ボンゴレトレーナーズ [Best Collection]"
|
||||
name-sort: "かてきょーひっとまんりぼーん! ねらえ!? りんぐ×ぼんごれとれーなーず [Best Collection]"
|
||||
@@ -67522,21 +67433,9 @@ SLUS-20725:
|
||||
SLUS-20726:
|
||||
name: "ESPN - NBA Basketball"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
A13E5DD5:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Avoids hang at start.
|
||||
patch=1,EE,003161c0,word,00000000
|
||||
SLUS-20727:
|
||||
name: "ESPN - NFL Football"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
56920AD1:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Fixes random hangs.
|
||||
patch=0,EE,003bb900,word,00000000
|
||||
SLUS-20728:
|
||||
name: "ESPN - NHL Hockey"
|
||||
region: "NTSC-U"
|
||||
@@ -68607,41 +68506,17 @@ SLUS-20919:
|
||||
name: "ESPN - NFL 2K5"
|
||||
region: "NTSC-U"
|
||||
compat: 5
|
||||
patches:
|
||||
42F9D5AF:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Fixes random hangs.
|
||||
patch=1,EE,0041c680,word,00000000
|
||||
SLUS-20920:
|
||||
name: "ESPN - NBA 2K5"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
903C7BC5:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Avoids hanging at loading screen.
|
||||
patch=1,EE,003bc800,word,00000000
|
||||
SLUS-20921:
|
||||
name: "ESPN - NHL 2K5"
|
||||
region: "NTSC-U"
|
||||
compat: 5
|
||||
patches:
|
||||
9B6E69EC:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Avoids hang at start.
|
||||
patch=1,EE,003ed218,word,00000000
|
||||
SLUS-20922:
|
||||
name: "ESPN - College Hoops 2K5"
|
||||
region: "NTSC-U"
|
||||
compat: 2
|
||||
patches:
|
||||
2B54D3E5:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Avoids hang at loading.
|
||||
patch=1,EE,003bcc08,word,00000000
|
||||
SLUS-20923:
|
||||
name: "KOF - Maximum Impact"
|
||||
region: "NTSC-U"
|
||||
@@ -69381,13 +69256,6 @@ SLUS-21035:
|
||||
eeClampMode: 2 # Fixes hang when the baseball hits the ground.
|
||||
gsHWFixes:
|
||||
texturePreloading: 1 # Performs much better and stops freezing and or stuttering.
|
||||
patches:
|
||||
2243CE1D:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=Patched by Prafull
|
||||
// Skip hang at start.
|
||||
patch=1,EE,00364080,word,00000000
|
||||
SLUS-21036:
|
||||
name: "Get On Da Mic"
|
||||
region: "NTSC-U"
|
||||
@@ -70562,41 +70430,17 @@ SLUS-21232:
|
||||
name: "College Hoops 2K6"
|
||||
region: "NTSC-U"
|
||||
compat: 5
|
||||
patches:
|
||||
A60E027C:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// This fixes random hangs and makes the game playable.
|
||||
patch=1,EE,0045f410,word,00000000
|
||||
SLUS-21233:
|
||||
name: "NBA 2K6"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
E5C65369:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Avoids hang at start.
|
||||
patch=1,EE,004413a8,word,00000000
|
||||
SLUS-21234:
|
||||
name: "NHL 2K6"
|
||||
region: "NTSC-U"
|
||||
compat: 2
|
||||
patches:
|
||||
87007AB7:
|
||||
content: |-
|
||||
author=Prafull
|
||||
// Avoid hang at start.
|
||||
patch=1,EE,003fd608,word,00000000
|
||||
SLUS-21235:
|
||||
name: "Major League Baseball 2K6"
|
||||
region: "NTSC-U"
|
||||
compat: 5
|
||||
patches:
|
||||
88BB9A5C:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Avoids hang at start.
|
||||
patch=1,EE,003c4280,word,00000000
|
||||
SLUS-21236:
|
||||
name: "Tokyo Xtreme Racer Drift"
|
||||
region: "NTSC-U"
|
||||
@@ -71268,12 +71112,6 @@ SLUS-21324:
|
||||
eeClampMode: 2 # Fixes hang when the baseball hits the ground.
|
||||
gsHWFixes:
|
||||
texturePreloading: 1 # Performs much better and stops freezing and or stuttering.
|
||||
patches:
|
||||
D592B291:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Skip hang at start.
|
||||
patch=1,EE,0036b220,word,00000000 //1040fffd
|
||||
SLUS-21325:
|
||||
name: "Harry Potter and the Goblet of Fire"
|
||||
region: "NTSC-U"
|
||||
@@ -71994,22 +71832,10 @@ SLUS-21423:
|
||||
SLUS-21424:
|
||||
name: "NBA 2K7"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
F5AEDCC3:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Avoids hang at start.
|
||||
patch=1,EE,0044ef60,word,00000000
|
||||
SLUS-21425:
|
||||
name: "NHL 2K7"
|
||||
region: "NTSC-U"
|
||||
compat: 5
|
||||
patches:
|
||||
478EFBDB:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Avoids hang at start.
|
||||
patch=1,EE,004409d8,word,00000000
|
||||
SLUS-21426:
|
||||
name: "Call of Duty 3"
|
||||
region: "NTSC-U"
|
||||
@@ -72653,12 +72479,6 @@ SLUS-21560:
|
||||
SLUS-21561:
|
||||
name: "Major League Baseball 2K7"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
73D6D171:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,003CDE10,word,00000000
|
||||
SLUS-21563:
|
||||
name: "Horsez"
|
||||
region: "NTSC-U"
|
||||
@@ -73112,12 +72932,6 @@ SLUS-21632:
|
||||
name: "NHL 2K8"
|
||||
region: "NTSC-U"
|
||||
compat: 5
|
||||
patches:
|
||||
77B49EF8:
|
||||
content: |-
|
||||
// Patched by Prafull-thanks to harsh.
|
||||
// Avoids hang at start.
|
||||
patch=1,EE,00432310,word,00000000
|
||||
SLUS-21633:
|
||||
name: "Aqua Teen Hunger Force - Zombie Ninja Pro-Am"
|
||||
region: "NTSC-U"
|
||||
@@ -73643,20 +73457,6 @@ SLUS-21728:
|
||||
SLUS-21729:
|
||||
name: "Major League Baseball 2K8"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
0BE24520:
|
||||
content: |-
|
||||
author=Prafull
|
||||
// Fixes hanging at start.
|
||||
// This hanging problem is common in every 2K
|
||||
// games sport titles.
|
||||
// They all hit the exact same piece of code when crashing.
|
||||
// The game can randomly goes a bit further but it's impossible
|
||||
// to progress in menus without this patch at least.
|
||||
// Note: This issue will only happen if the game
|
||||
// run on the inhouse Visual Concept engine.
|
||||
// My theory is on a deep timing issue.
|
||||
patch=1,EE,003cc1a0,word,00000000
|
||||
SLUS-21730:
|
||||
name: "Jumper - Griffin's Story"
|
||||
region: "NTSC-U"
|
||||
@@ -73858,12 +73658,6 @@ SLUS-21763:
|
||||
name: "NHL 2K9"
|
||||
region: "NTSC-U"
|
||||
compat: 2
|
||||
patches:
|
||||
29FDCBF7:
|
||||
content: |-
|
||||
author=Prafull
|
||||
// Avoid hang at start.
|
||||
patch=1,EE,00431848,word,00000000
|
||||
SLUS-21764:
|
||||
name: "Cake Mania - Baker's Challenge"
|
||||
region: "NTSC-U"
|
||||
@@ -74407,12 +74201,6 @@ SLUS-21870:
|
||||
SLUS-21871:
|
||||
name: "Major League Baseball 2K9"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
72905002:
|
||||
content: |-
|
||||
author=Prafull
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,003CC5D8,word,00000000
|
||||
SLUS-21872:
|
||||
name: "MTV Pimp My Ride - Street Racing"
|
||||
region: "NTSC-U"
|
||||
@@ -74635,12 +74423,6 @@ SLUS-21914:
|
||||
name: "NHL 2K10"
|
||||
region: "NTSC-U"
|
||||
compat: 5
|
||||
patches:
|
||||
82CA153C:
|
||||
content: |-
|
||||
comment=Patch by Prafull
|
||||
// Fixes hanging problem.
|
||||
patch=1,EE,00431b70,word,00000000
|
||||
SLUS-21915:
|
||||
name: "The Lord of the Rings - Aragorn's Quest"
|
||||
name-sort: "Lord of the Rings, The - Aragorn's Quest"
|
||||
@@ -74691,12 +74473,6 @@ SLUS-21928:
|
||||
SLUS-21929:
|
||||
name: "Major League Baseball 2K10"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
2283765A:
|
||||
content: |-
|
||||
author=Prafull
|
||||
// Avoid hanging at loading screen.
|
||||
patch=1,EE,003cd6d8,word,00000000
|
||||
SLUS-21930:
|
||||
name: "Sakura Wars - So Long, My Love [Japanese - Disc 2]"
|
||||
region: "NTSC-U"
|
||||
@@ -74765,12 +74541,6 @@ SLUS-21944:
|
||||
SLUS-21945:
|
||||
name: "Major League Baseball 2K11"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
3D621C56:
|
||||
content: |-
|
||||
author=By Prafull
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,003CFE58,word,00000000
|
||||
SLUS-21946:
|
||||
name: "Madden NFL 12"
|
||||
region: "NTSC-U"
|
||||
@@ -74797,12 +74567,6 @@ SLUS-21950:
|
||||
SLUS-21951:
|
||||
name: "Major League Baseball 2K12"
|
||||
region: "NTSC-U"
|
||||
patches:
|
||||
C26C70A9:
|
||||
content: |-
|
||||
author=By Prafull
|
||||
comment=fixes hang at start
|
||||
patch=1,EE,003D4098,word,00000000
|
||||
SLUS-21954:
|
||||
name: "FIFA 13"
|
||||
region: "NTSC-U" # Latin America with En,Fr,Es
|
||||
|
||||
@@ -221,15 +221,21 @@ void MainWindow::setupAdditionalUi()
|
||||
m_status_resolution_widget->hide();
|
||||
|
||||
m_status_fps_widget = new QLabel(m_ui.statusBar);
|
||||
m_status_fps_widget->setFixedSize(60, 16);
|
||||
m_status_fps_widget->setFixedHeight(16);
|
||||
m_status_fps_widget->setMinimumWidth(60);
|
||||
m_status_fps_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
m_status_fps_widget->hide();
|
||||
|
||||
m_status_vps_widget = new QLabel(m_ui.statusBar);
|
||||
m_status_vps_widget->setFixedSize(60, 16);
|
||||
m_status_vps_widget->setFixedHeight(16);
|
||||
m_status_vps_widget->setMinimumWidth(60);
|
||||
m_status_vps_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
m_status_vps_widget->hide();
|
||||
|
||||
m_status_speed_widget = new QLabel(m_ui.statusBar);
|
||||
m_status_speed_widget->setFixedSize(90, 16);
|
||||
m_status_speed_widget->setFixedHeight(16);
|
||||
m_status_speed_widget->setMinimumWidth(130);
|
||||
m_status_speed_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
m_status_speed_widget->hide();
|
||||
|
||||
m_settings_toolbar_menu = new QMenu(m_ui.toolBar);
|
||||
|
||||
@@ -770,7 +770,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* settings_dialog,
|
||||
dialog()->registerWidgetHelp(m_osd.showInputRec, tr("Show Input Recording Status"), tr("Checked"),
|
||||
tr("Shows the status of the currently active input recording in the top-right corner of the display.."));
|
||||
|
||||
dialog()->registerWidgetHelp(m_osd.showTextureReplacements, tr("Show Texture Replacement Status"), tr("Checked"),
|
||||
dialog()->registerWidgetHelp(m_osd.showTextureReplacements, tr("Show Texture Replacement Status"), tr("Unchecked"),
|
||||
tr("Shows the status of the number of dumped and loaded texture replacements in the top-right corner of the display."));
|
||||
|
||||
dialog()->registerWidgetHelp(m_osd.warnAboutUnsafeSettings, tr("Warn About Unsafe Settings"), tr("Checked"),
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <cstdlib>
|
||||
#include <functional>
|
||||
#include <limits>
|
||||
#include <map>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@@ -2499,7 +2500,7 @@ void Achievements::DrawAchievementsWindow()
|
||||
ImVec2(display_size.x, display_size.y - heading_height - LayoutScale(ImGuiFullscreen::LAYOUT_FOOTER_HEIGHT)),
|
||||
"achievements", background, 0.0f, ImVec2(ImGuiFullscreen::LAYOUT_MENU_WINDOW_X_PADDING, 0.0f), 0))
|
||||
{
|
||||
static bool buckets_collapsed[NUM_RC_CLIENT_ACHIEVEMENT_BUCKETS] = {};
|
||||
static std::map<std::pair<u32, u32>, bool> buckets_collapsed;
|
||||
static const char* bucket_names[NUM_RC_CLIENT_ACHIEVEMENT_BUCKETS] = {
|
||||
TRANSLATE_NOOP("Achievements", "Unknown"),
|
||||
TRANSLATE_NOOP("Achievements", "Locked"),
|
||||
@@ -2525,11 +2526,25 @@ void Achievements::DrawAchievementsWindow()
|
||||
|
||||
pxAssert(bucket.bucket_type < NUM_RC_CLIENT_ACHIEVEMENT_BUCKETS);
|
||||
|
||||
// TODO: Once subsets are supported, this will need to change.
|
||||
bool& bucket_collapsed = buckets_collapsed[bucket.bucket_type];
|
||||
bucket_collapsed ^=
|
||||
ImGuiFullscreen::MenuHeadingButton(Host::TranslateToCString("Achievements", bucket_names[bucket.bucket_type]),
|
||||
bucket_collapsed ? ICON_FA_CHEVRON_DOWN : ICON_FA_CHEVRON_UP);
|
||||
bool& bucket_collapsed = buckets_collapsed[std::make_pair(bucket.subset_id, bucket.bucket_type)];
|
||||
const char* translated_bucket_name = Host::TranslateToCString("Achievements", bucket_names[bucket.bucket_type]);
|
||||
|
||||
if (bucket.subset_id != 0)
|
||||
{
|
||||
const rc_client_subset_t* subset_info = rc_client_get_subset_info(s_client, bucket.subset_id);
|
||||
bucket_collapsed ^=
|
||||
ImGuiFullscreen::MenuHeadingButton(TinyString::from_format("{} - {}",
|
||||
subset_info != nullptr ? subset_info->title : TRANSLATE("Achievements", "Unknown Subset"),
|
||||
translated_bucket_name), bucket_collapsed ? ICON_FA_CHEVRON_DOWN : ICON_FA_CHEVRON_UP);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Game without subsets
|
||||
bucket_collapsed ^=
|
||||
ImGuiFullscreen::MenuHeadingButton(translated_bucket_name,
|
||||
bucket_collapsed ? ICON_FA_CHEVRON_DOWN : ICON_FA_CHEVRON_UP);
|
||||
}
|
||||
|
||||
if (!bucket_collapsed)
|
||||
{
|
||||
for (u32 i = 0; i < bucket.num_achievements; i++)
|
||||
|
||||
@@ -4003,7 +4003,6 @@ __forceinline bool GSState::EarlyDetectShuffle(u32 prim)
|
||||
|
||||
const GSVertex* RESTRICT vertex = &m_vertex.buff[0];
|
||||
const u16* RESTRICT index = &m_index.buff[0];
|
||||
const GSVector4i& o = m_xyof;
|
||||
|
||||
if (GSLocalMemory::m_psm[m_context->FRAME.PSM].bpp == 16 && GSLocalMemory::m_psm[m_context->TEX0.PSM].bpp == 16)
|
||||
{
|
||||
@@ -4023,6 +4022,7 @@ __forceinline bool GSState::EarlyDetectShuffle(u32 prim)
|
||||
{
|
||||
const float q0 = vertex[index[0]].RGBAQ.Q == 0.0f ? FLT_MIN : vertex[index[0]].RGBAQ.Q;
|
||||
u0 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[0]].ST.S / q0) * 16.0f);
|
||||
|
||||
const float qn = m_v.RGBAQ.Q == 0.0f ? FLT_MIN : m_v.RGBAQ.Q;
|
||||
un = static_cast<int>((1 << m_context->TEX0.TW) * (m_v.ST.S / qn) * 16.0f);
|
||||
}
|
||||
@@ -4044,6 +4044,7 @@ __forceinline bool GSState::EarlyDetectShuffle(u32 prim)
|
||||
|
||||
const int x0 = static_cast<int>(vertex[index[0]].XYZ.X) - static_cast<int>(m_context->XYOFFSET.OFX);
|
||||
const int y0 = static_cast<int>(vertex[index[0]].XYZ.Y) - static_cast<int>(m_context->XYOFFSET.OFY);
|
||||
|
||||
const int x1 = static_cast<int>(vertex[index[1]].XYZ.X) - static_cast<int>(m_context->XYOFFSET.OFX);
|
||||
const int y1 = static_cast<int>(vertex[index[1]].XYZ.Y) - static_cast<int>(m_context->XYOFFSET.OFY);
|
||||
|
||||
@@ -4053,17 +4054,20 @@ __forceinline bool GSState::EarlyDetectShuffle(u32 prim)
|
||||
{
|
||||
u0 = static_cast<int>(vertex[index[0]].U);
|
||||
v0 = static_cast<int>(vertex[index[0]].V);
|
||||
|
||||
u1 = static_cast<int>(vertex[index[1]].U);
|
||||
v1 = static_cast<int>(vertex[index[1]].V);
|
||||
}
|
||||
else
|
||||
{
|
||||
const float q0 = vertex[index[0]].RGBAQ.Q == 0.0f ? FLT_MIN : vertex[index[0]].RGBAQ.Q;
|
||||
u0 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[0]].ST.S / q0) * 16.0f);
|
||||
v0 = static_cast<int>((1 << m_context->TEX0.TH) * (vertex[index[0]].ST.T / q0) * 16.0f);
|
||||
// Sprites have constant Q so use the second.
|
||||
const float q1 = vertex[index[1]].RGBAQ.Q == 0.0f ? FLT_MIN : vertex[index[1]].RGBAQ.Q;
|
||||
u1 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[1]].ST.S / q0) * 16.0f);
|
||||
v1 = static_cast<int>((1 << m_context->TEX0.TH) * (vertex[index[1]].ST.T / q0) * 16.0f);
|
||||
|
||||
u0 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[0]].ST.S / q1) * 16.0f);
|
||||
v0 = static_cast<int>((1 << m_context->TEX0.TH) * (vertex[index[0]].ST.T / q1) * 16.0f);
|
||||
|
||||
u1 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[1]].ST.S / q1) * 16.0f);
|
||||
v1 = static_cast<int>((1 << m_context->TEX0.TH) * (vertex[index[1]].ST.T / q1) * 16.0f);
|
||||
}
|
||||
|
||||
// Check that the source and destination sprite are exactly 8 pixel squares.
|
||||
@@ -4093,6 +4097,7 @@ __forceinline bool GSState::EarlyDetectShuffle(u32 prim)
|
||||
|
||||
const int x0 = static_cast<int>(vertex[index[0]].XYZ.X) - static_cast<int>(m_context->XYOFFSET.OFX);
|
||||
const int y0 = static_cast<int>(vertex[index[0]].XYZ.Y) - static_cast<int>(m_context->XYOFFSET.OFY);
|
||||
|
||||
const int x1 = static_cast<int>(vertex[index[1]].XYZ.X) - static_cast<int>(m_context->XYOFFSET.OFX);
|
||||
const int y1 = static_cast<int>(vertex[index[1]].XYZ.Y) - static_cast<int>(m_context->XYOFFSET.OFY);
|
||||
|
||||
@@ -4102,17 +4107,20 @@ __forceinline bool GSState::EarlyDetectShuffle(u32 prim)
|
||||
{
|
||||
u0 = static_cast<int>(vertex[index[0]].U);
|
||||
v0 = static_cast<int>(vertex[index[0]].V);
|
||||
|
||||
u1 = static_cast<int>(vertex[index[1]].U);
|
||||
v1 = static_cast<int>(vertex[index[1]].V);
|
||||
}
|
||||
else
|
||||
{
|
||||
const float q0 = vertex[index[0]].RGBAQ.Q == 0.0f ? FLT_MIN : vertex[index[0]].RGBAQ.Q;
|
||||
u0 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[0]].ST.S / q0) * 16.0f);
|
||||
v0 = static_cast<int>((1 << m_context->TEX0.TH) * (vertex[index[0]].ST.T / q0) * 16.0f);
|
||||
// Sprites have constant Q so use the second.
|
||||
const float q1 = vertex[index[1]].RGBAQ.Q == 0.0f ? FLT_MIN : vertex[index[1]].RGBAQ.Q;
|
||||
u1 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[1]].ST.S / q0) * 16.0f);
|
||||
v1 = static_cast<int>((1 << m_context->TEX0.TH) * (vertex[index[1]].ST.T / q0) * 16.0f);
|
||||
|
||||
u0 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[0]].ST.S / q1) * 16.0f);
|
||||
v0 = static_cast<int>((1 << m_context->TEX0.TH) * (vertex[index[0]].ST.T / q1) * 16.0f);
|
||||
|
||||
u1 = static_cast<int>((1 << m_context->TEX0.TW) * (vertex[index[1]].ST.S / q1) * 16.0f);
|
||||
v1 = static_cast<int>((1 << m_context->TEX0.TH) * (vertex[index[1]].ST.T / q1) * 16.0f);
|
||||
}
|
||||
|
||||
// Check that the source and destination sprite are exactly 8 pixel squares.
|
||||
|
||||
@@ -432,7 +432,7 @@ struct alignas(16) GSHWDrawConfig
|
||||
{
|
||||
const u32 sw_blend_bits = blend_a | blend_b | blend_d;
|
||||
const bool sw_blend_needs_rt = (sw_blend_bits != 0 && ((sw_blend_bits | blend_c) & 1u)) || ((a_masked & blend_c) != 0);
|
||||
return channel_fb || tex_is_fb || fbmask || (date > 0 && date != 3) || sw_blend_needs_rt;
|
||||
return channel_fb || tex_is_fb || fbmask || (date >= 5) || sw_blend_needs_rt;
|
||||
}
|
||||
|
||||
/// Disables color output from the pixel shader, this is done when all channels are masked.
|
||||
|
||||
@@ -5876,9 +5876,9 @@ void GSRendererHW::EmulateBlending(int rt_alpha_min, int rt_alpha_max, const boo
|
||||
case AccBlendLevel::Basic:
|
||||
default:
|
||||
// Prefer sw blend if possible.
|
||||
color_dest_blend &= !prefer_sw_blend;
|
||||
color_dest_blend2 &= !prefer_sw_blend;
|
||||
blend_zero_to_one_range &= !prefer_sw_blend;
|
||||
color_dest_blend &= !(m_channel_shuffle || m_conf.ps.dither);
|
||||
color_dest_blend2 &= !(prefer_sw_blend || m_conf.ps.dither);
|
||||
blend_zero_to_one_range &= !(prefer_sw_blend || m_conf.ps.dither);
|
||||
accumulation_blend &= !prefer_sw_blend;
|
||||
// Enable sw blending for barriers.
|
||||
sw_blending |= blend_requires_barrier || prefer_sw_blend;
|
||||
@@ -7681,7 +7681,7 @@ __ri void GSRendererHW::DrawPrims(GSTextureCache::Target* rt, GSTextureCache::Ta
|
||||
}
|
||||
|
||||
// Similar to IsRTWritten(), check if the rt will change.
|
||||
const bool no_rt = !rt || !(DATE || m_conf.colormask.wrgba || m_channel_shuffle);
|
||||
const bool no_rt = !rt || !(m_conf.colormask.wrgba || m_channel_shuffle);
|
||||
const bool no_ds = !ds ||
|
||||
// Depth will be written through the RT.
|
||||
(!no_rt && m_cached_ctx.FRAME.FBP == m_cached_ctx.ZBUF.ZBP && !PRIM->TME && m_cached_ctx.ZBUF.ZMSK == 0 &&
|
||||
|
||||
@@ -36,6 +36,10 @@ namespace GLState
|
||||
|
||||
GSTextureOGL* rt = nullptr;
|
||||
GSTextureOGL* ds = nullptr;
|
||||
|
||||
bool rt_written;
|
||||
bool ds_written;
|
||||
|
||||
GLuint tex_unit[8];
|
||||
GLuint64 tex_handle[8];
|
||||
|
||||
@@ -67,6 +71,10 @@ namespace GLState
|
||||
|
||||
rt = nullptr;
|
||||
ds = nullptr;
|
||||
|
||||
rt_written = false;
|
||||
ds_written = false;
|
||||
|
||||
std::fill(std::begin(tex_unit), std::end(tex_unit), 0);
|
||||
std::fill(std::begin(tex_handle), std::end(tex_handle), 0);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,10 @@ namespace GLState
|
||||
|
||||
extern GSTextureOGL* rt; // render target
|
||||
extern GSTextureOGL* ds; // Depth-Stencil
|
||||
|
||||
extern bool rt_written; // Render Target written
|
||||
extern bool ds_written; // Depth Stencil written
|
||||
|
||||
extern GLuint tex_unit[8]; // shader input texture
|
||||
extern GLuint64 tex_handle[8]; // shader input texture
|
||||
|
||||
|
||||
@@ -2305,26 +2305,35 @@ void GSDeviceOGL::OMSetBlendState(bool enable, GLenum src_factor, GLenum dst_fac
|
||||
|
||||
void GSDeviceOGL::OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i* scissor)
|
||||
{
|
||||
g_perfmon.Put(GSPerfMon::RenderPasses, static_cast<double>(GLState::rt != rt || GLState::ds != ds));
|
||||
const bool rt_changed = (rt != GLState::rt);
|
||||
const bool ds_changed = (ds != GLState::ds);
|
||||
|
||||
g_perfmon.Put(GSPerfMon::RenderPasses, static_cast<double>(rt_changed || ds_changed));
|
||||
// Split up to avoid unbind/bind calls when clearing.
|
||||
|
||||
OMSetFBO(m_fbo);
|
||||
|
||||
GLState::rt_written = false;
|
||||
GLState::ds_written = false;
|
||||
|
||||
if (rt)
|
||||
{
|
||||
OMAttachRt(rt);
|
||||
CommitClear(rt, false);
|
||||
GLState::rt_written = rt_changed;
|
||||
}
|
||||
else
|
||||
OMAttachRt();
|
||||
|
||||
if (ds)
|
||||
{
|
||||
OMAttachDs(ds);
|
||||
CommitClear(ds, false);
|
||||
GLState::ds_written = ds_changed;
|
||||
}
|
||||
else
|
||||
OMAttachDs();
|
||||
|
||||
if (rt)
|
||||
CommitClear(rt, false);
|
||||
if (ds)
|
||||
CommitClear(ds, false);
|
||||
|
||||
if (rt || ds)
|
||||
{
|
||||
const GSVector2i size = rt ? rt->GetSize() : ds->GetSize();
|
||||
@@ -2578,14 +2587,6 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config)
|
||||
if (config.require_one_barrier || !m_features.texture_barrier)
|
||||
rt_hazard_barrier = false; // Already in place or not available
|
||||
|
||||
// Be careful of the rt already being bound and the blend using the RT without a barrier.
|
||||
if (rt_hazard_barrier)
|
||||
{
|
||||
// Ensure all depth writes are finished before sampling
|
||||
GL_INS("GL: Texture barrier to flush depth or rt before reading");
|
||||
g_perfmon.Put(GSPerfMon::Barriers, 1);
|
||||
glTextureBarrier();
|
||||
}
|
||||
// additional non-pipeline config stuff
|
||||
const bool point_size_enabled = config.vs.point_size;
|
||||
if (GLState::point_size != point_size_enabled)
|
||||
@@ -2644,15 +2645,27 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config)
|
||||
// avoid changing framebuffer just to switch from rt+depth to rt and vice versa
|
||||
GSTexture* draw_rt = colclip_rt ? colclip_rt : config.rt;
|
||||
GSTexture* draw_ds = config.ds;
|
||||
bool fb_optimization_needs_barrier = false;
|
||||
if (!draw_rt && GLState::rt && GLState::ds == draw_ds && config.tex != GLState::rt &&
|
||||
GLState::rt->GetSize() == draw_ds->GetSize())
|
||||
{
|
||||
draw_rt = GLState::rt;
|
||||
fb_optimization_needs_barrier = !GLState::rt_written;
|
||||
}
|
||||
else if (!draw_ds && GLState::ds && GLState::rt == draw_rt && config.tex != GLState::ds &&
|
||||
GLState::ds->GetSize() == draw_rt->GetSize())
|
||||
{
|
||||
draw_ds = GLState::ds;
|
||||
fb_optimization_needs_barrier = !GLState::ds_written;
|
||||
}
|
||||
|
||||
// Be careful of the rt already being bound and the blend using the RT without a barrier.
|
||||
if (fb_optimization_needs_barrier && rt_hazard_barrier)
|
||||
{
|
||||
// Ensure all depth writes are finished before sampling
|
||||
GL_INS("GL: Texture barrier to flush depth or rt before reading");
|
||||
g_perfmon.Put(GSPerfMon::Barriers, 1);
|
||||
glTextureBarrier();
|
||||
}
|
||||
|
||||
OMSetRenderTargets(draw_rt, draw_ds, &config.scissor);
|
||||
|
||||
@@ -1038,7 +1038,9 @@ void FullscreenUI::CheckForConfigChanges(const Pcsx2Config& old_config)
|
||||
|
||||
ImGuiFullscreen::SetTheme(Host::GetBaseStringSettingValue("UI", "FullscreenUITheme", "Dark"));
|
||||
|
||||
LoadCustomBackground();
|
||||
MTGS::RunOnGSThread([]() {
|
||||
LoadCustomBackground();
|
||||
});
|
||||
|
||||
// If achievements got disabled, we might have the menu open...
|
||||
// That means we're going to be reaching achievement state.
|
||||
@@ -4034,17 +4036,17 @@ void FullscreenUI::DrawInterfaceSettingsPage()
|
||||
[](const std::string& path) {
|
||||
if (!path.empty())
|
||||
{
|
||||
auto lock = Host::GetSettingsLock();
|
||||
SettingsInterface* bsi = GetEditingSettingsInterface(false);
|
||||
{
|
||||
auto lock = Host::GetSettingsLock();
|
||||
SettingsInterface* bsi = GetEditingSettingsInterface(false);
|
||||
|
||||
std::string relative_path = Path::MakeRelative(path, EmuFolders::DataRoot);
|
||||
bsi->SetStringValue("UI", "GameListBackgroundPath", relative_path.c_str());
|
||||
bsi->SetBoolValue("UI", "GameListBackgroundEnabled", true);
|
||||
SetSettingsChanged(bsi);
|
||||
}
|
||||
|
||||
std::string relative_path = Path::MakeRelative(path, EmuFolders::DataRoot);
|
||||
bsi->SetStringValue("UI", "GameListBackgroundPath", relative_path.c_str());
|
||||
bsi->SetBoolValue("UI", "GameListBackgroundEnabled", true);
|
||||
SetSettingsChanged(bsi);
|
||||
|
||||
Host::RunOnCPUThread([]() {
|
||||
LoadCustomBackground();
|
||||
});
|
||||
LoadCustomBackground();
|
||||
}
|
||||
CloseFileSelector();
|
||||
},
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "BuildVersion.h"
|
||||
#include "Config.h"
|
||||
#include "Counters.h"
|
||||
#include "GS.h"
|
||||
#include "GS/GS.h"
|
||||
#include "GS/GSCapture.h"
|
||||
#include "GS/GSVector.h"
|
||||
@@ -32,7 +31,6 @@
|
||||
#include "common/Error.h"
|
||||
#include "common/FileSystem.h"
|
||||
#include "common/Path.h"
|
||||
#include "common/StringUtil.h"
|
||||
#include "common/Timer.h"
|
||||
|
||||
#include "fmt/chrono.h"
|
||||
@@ -40,14 +38,10 @@
|
||||
#include "imgui.h"
|
||||
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <cmath>
|
||||
#include <deque>
|
||||
#include <limits>
|
||||
#include <mutex>
|
||||
#include <span>
|
||||
#include <tuple>
|
||||
#include <unordered_map>
|
||||
|
||||
InputRecordingUI::InputRecordingData g_InputRecordingData;
|
||||
|
||||
@@ -108,7 +102,7 @@ ImVec2 CalculateOSDPosition(OsdOverlayPos position, float margin, const ImVec2&
|
||||
ImVec2 CalculatePerformanceOverlayTextPosition(OsdOverlayPos position, float margin, const ImVec2& text_size, float window_width, float position_y)
|
||||
{
|
||||
const float abs_margin = std::abs(margin);
|
||||
|
||||
|
||||
// Get the X position based on horizontal alignment
|
||||
float x_pos;
|
||||
switch (position)
|
||||
@@ -118,13 +112,13 @@ ImVec2 CalculatePerformanceOverlayTextPosition(OsdOverlayPos position, float mar
|
||||
case OsdOverlayPos::BottomLeft:
|
||||
x_pos = abs_margin; // Left alignment
|
||||
break;
|
||||
|
||||
|
||||
case OsdOverlayPos::TopCenter:
|
||||
case OsdOverlayPos::Center:
|
||||
case OsdOverlayPos::BottomCenter:
|
||||
x_pos = (window_width - text_size.x) * 0.5f; // Center alignment
|
||||
break;
|
||||
|
||||
|
||||
case OsdOverlayPos::TopRight:
|
||||
case OsdOverlayPos::CenterRight:
|
||||
case OsdOverlayPos::BottomRight:
|
||||
@@ -132,7 +126,7 @@ ImVec2 CalculatePerformanceOverlayTextPosition(OsdOverlayPos position, float mar
|
||||
x_pos = window_width - text_size.x - abs_margin; // Right alignment
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return ImVec2(x_pos, position_y);
|
||||
}
|
||||
|
||||
@@ -150,6 +144,7 @@ namespace ImGuiManager
|
||||
static void DrawInputRecordingOverlay(float& position_y, float scale, float margin, float spacing);
|
||||
static void DrawVideoCaptureOverlay(float& position_y, float scale, float margin, float spacing);
|
||||
static void DrawTextureReplacementsOverlay(float& position_y, float scale, float margin, float spacing);
|
||||
static void DrawIndicatorsOverlay(float& position_y, float scale, float margin, float spacing);
|
||||
} // namespace ImGuiManager
|
||||
|
||||
static std::tuple<float, float> GetMinMax(std::span<const float> values)
|
||||
@@ -194,7 +189,6 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
|
||||
const float shadow_offset = std::ceil(scale);
|
||||
|
||||
ImFont* const fixed_font = ImGuiManager::GetFixedFont();
|
||||
ImFont* const standard_font = ImGuiManager::GetStandardFont();
|
||||
const float font_size = ImGuiManager::GetFontSizeStandard();
|
||||
|
||||
ImDrawList* dl = ImGui::GetBackgroundDrawList();
|
||||
@@ -209,14 +203,14 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
|
||||
|
||||
position_y = (GetWindowHeight() - (font_size * 8.0f)) * 0.5f;
|
||||
break;
|
||||
|
||||
|
||||
case OsdOverlayPos::BottomLeft:
|
||||
case OsdOverlayPos::BottomCenter:
|
||||
case OsdOverlayPos::BottomRight:
|
||||
|
||||
position_y = GetWindowHeight() - margin - (font_size * 15.0f + spacing * 14.0f);
|
||||
break;
|
||||
|
||||
|
||||
case OsdOverlayPos::TopLeft:
|
||||
case OsdOverlayPos::TopCenter:
|
||||
case OsdOverlayPos::TopRight:
|
||||
@@ -389,24 +383,6 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
|
||||
FormatProcessorStat(s_gpu_usage_line, PerformanceMetrics::GetGPUUsage(), PerformanceMetrics::GetGPUAverageTime());
|
||||
DRAW_LINE(fixed_font, font_size, s_gpu_usage_line.c_str(), white_color);
|
||||
}
|
||||
|
||||
if (GSConfig.OsdShowIndicators)
|
||||
{
|
||||
const float target_speed = VMManager::GetTargetSpeed();
|
||||
const bool is_normal_speed = (target_speed == EmuConfig.EmulationSpeed.NominalScalar ||
|
||||
VMManager::IsTargetSpeedAdjustedToHost());
|
||||
if (!is_normal_speed)
|
||||
{
|
||||
if (target_speed == EmuConfig.EmulationSpeed.SlomoScalar) // Slow-Motion
|
||||
s_speed_icon = ICON_PF_SLOW_MOTION;
|
||||
else if (target_speed == EmuConfig.EmulationSpeed.TurboScalar) // Turbo
|
||||
s_speed_icon = ICON_FA_FORWARD_FAST;
|
||||
else // Unlimited
|
||||
s_speed_icon = ICON_FA_FORWARD;
|
||||
|
||||
DRAW_LINE(standard_font, font_size, s_speed_icon, white_color);
|
||||
}
|
||||
}
|
||||
}
|
||||
// No refresh yet. Display cached lines.
|
||||
else
|
||||
@@ -451,14 +427,6 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
|
||||
|
||||
if (GSConfig.OsdShowGPU)
|
||||
DRAW_LINE(fixed_font, font_size, s_gpu_usage_line.c_str(), white_color);
|
||||
|
||||
if (GSConfig.OsdShowIndicators)
|
||||
{
|
||||
const bool is_normal_speed = (VMManager::GetTargetSpeed() == EmuConfig.EmulationSpeed.NominalScalar ||
|
||||
VMManager::IsTargetSpeedAdjustedToHost());
|
||||
if (!is_normal_speed)
|
||||
DRAW_LINE(standard_font, font_size, s_speed_icon, white_color);
|
||||
}
|
||||
}
|
||||
|
||||
// Check every OSD frame because this is an animation.
|
||||
@@ -466,7 +434,7 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
|
||||
{
|
||||
const ImVec2 history_size(200.0f * scale, 50.0f * scale);
|
||||
ImGui::SetNextWindowSize(ImVec2(history_size.x, history_size.y));
|
||||
|
||||
|
||||
const ImVec2 window_pos = CalculatePerformanceOverlayTextPosition(GSConfig.OsdPerformancePos, margin, history_size, GetWindowWidth(), position_y);
|
||||
ImGui::SetNextWindowPos(window_pos);
|
||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.0f, 0.0f, 0.0f, 0.25f));
|
||||
@@ -505,7 +473,7 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
|
||||
SmallString frame_times_text;
|
||||
frame_times_text.format("Max: {:.1f} ms", max);
|
||||
text_size = fixed_font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, frame_times_text.c_str(), frame_times_text.c_str() + frame_times_text.length());
|
||||
|
||||
|
||||
float text_x;
|
||||
switch (GSConfig.OsdPerformancePos)
|
||||
{
|
||||
@@ -533,7 +501,7 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
|
||||
|
||||
frame_times_text.format("Min: {:.1f} ms", min);
|
||||
text_size = fixed_font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, frame_times_text.c_str(), frame_times_text.c_str() + frame_times_text.length());
|
||||
|
||||
|
||||
float min_text_x;
|
||||
switch (GSConfig.OsdPerformancePos)
|
||||
{
|
||||
@@ -565,17 +533,6 @@ __ri void ImGuiManager::DrawPerformanceOverlay(float& position_y, float scale, f
|
||||
ImGui::PopStyleColor(3);
|
||||
}
|
||||
}
|
||||
else if (!FullscreenUI::HasActiveWindow())
|
||||
{
|
||||
if (GSConfig.OsdShowIndicators)
|
||||
{
|
||||
// We should put the Pause icon in the top right regardless of performance overlay position
|
||||
text_size = standard_font->CalcTextSizeA(font_size, std::numeric_limits<float>::max(), -1.0f, ICON_FA_PAUSE, nullptr, nullptr);
|
||||
const ImVec2 pause_pos(GetWindowWidth() - margin - text_size.x, margin);
|
||||
dl->AddText(standard_font, font_size, ImVec2(pause_pos.x + shadow_offset, pause_pos.y + shadow_offset), IM_COL32(0, 0, 0, 100), ICON_FA_PAUSE);
|
||||
dl->AddText(standard_font, font_size, pause_pos, white_color, ICON_FA_PAUSE);
|
||||
}
|
||||
}
|
||||
|
||||
#undef DRAW_LINE
|
||||
}
|
||||
@@ -596,10 +553,10 @@ __ri void ImGuiManager::DrawSettingsOverlay(float scale, float margin, float spa
|
||||
} while (0)
|
||||
|
||||
if (Patch::GetAllActivePatchesCount() > 0 && EmuConfig.GS.OsdshowPatches)
|
||||
APPEND("DB={} P={} C={} | ",
|
||||
Patch::GetActiveGameDBPatchesCount(),
|
||||
Patch::GetActivePatchesCount(),
|
||||
Patch::GetActiveCheatsCount());
|
||||
APPEND("DB={} P={} C={} | ",
|
||||
Patch::GetActiveGameDBPatchesCount(),
|
||||
Patch::GetActivePatchesCount(),
|
||||
Patch::GetActiveCheatsCount());
|
||||
|
||||
if (EmuConfig.Speedhacks.EECycleRate != 0)
|
||||
APPEND("CR={} ", EmuConfig.Speedhacks.EECycleRate);
|
||||
@@ -988,6 +945,60 @@ __ri void ImGuiManager::DrawTextureReplacementsOverlay(float& position_y, float
|
||||
position_y += text_size.y + spacing;
|
||||
}
|
||||
|
||||
__ri void ImGuiManager::DrawIndicatorsOverlay(float& position_y, float scale, float margin, float spacing)
|
||||
{
|
||||
if (!GSConfig.OsdShowIndicators ||
|
||||
FullscreenUI::HasActiveWindow())
|
||||
return;
|
||||
|
||||
const float shadow_offset = std::ceil(scale);
|
||||
|
||||
ImFont* const standard_font = ImGuiManager::GetStandardFont();
|
||||
const float font_size = ImGuiManager::GetFontSizeStandard();
|
||||
|
||||
ImDrawList* dl = ImGui::GetBackgroundDrawList();
|
||||
std::string text;
|
||||
ImVec2 text_size;
|
||||
|
||||
text.reserve(64);
|
||||
#define DRAW_LINE(font, size, text, color) \
|
||||
do \
|
||||
{ \
|
||||
text_size = font->CalcTextSizeA(size, std::numeric_limits<float>::max(), -1.0f, (text), nullptr, nullptr); \
|
||||
dl->AddText(font, size, \
|
||||
ImVec2(GetWindowWidth() - margin - text_size.x + shadow_offset, position_y + shadow_offset), \
|
||||
IM_COL32(0, 0, 0, 100), (text)); \
|
||||
dl->AddText(font, size, ImVec2(GetWindowWidth() - margin - text_size.x, position_y), color, (text)); \
|
||||
position_y += text_size.y + spacing; \
|
||||
} while (0)
|
||||
|
||||
if (VMManager::GetState() != VMState::Paused)
|
||||
{
|
||||
// Draw Speed indicator
|
||||
const float target_speed = VMManager::GetTargetSpeed();
|
||||
const bool is_normal_speed = (target_speed == EmuConfig.EmulationSpeed.NominalScalar ||
|
||||
VMManager::IsTargetSpeedAdjustedToHost());
|
||||
if (!is_normal_speed)
|
||||
{
|
||||
if (target_speed == EmuConfig.EmulationSpeed.SlomoScalar) // Slow-Motion
|
||||
s_speed_icon = ICON_PF_SLOW_MOTION;
|
||||
else if (target_speed == EmuConfig.EmulationSpeed.TurboScalar) // Turbo
|
||||
s_speed_icon = ICON_FA_FORWARD_FAST;
|
||||
else // Unlimited
|
||||
s_speed_icon = ICON_FA_FORWARD;
|
||||
|
||||
DRAW_LINE(standard_font, font_size, s_speed_icon, white_color);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw Pause indicator
|
||||
const TinyString pause_msg = TinyString::from_format(TRANSLATE_FS("ImGuiOverlays", "{} Paused"), ICON_FA_PAUSE);
|
||||
DRAW_LINE(standard_font, font_size, pause_msg, white_color);
|
||||
}
|
||||
#undef DRAW_LINE
|
||||
}
|
||||
|
||||
namespace SaveStateSelectorUI
|
||||
{
|
||||
namespace
|
||||
@@ -1068,7 +1079,8 @@ void SaveStateSelectorUI::Open(float open_time /* = DEFAULT_OPEN_TIME */)
|
||||
RefreshHotkeyLegend();
|
||||
}
|
||||
|
||||
bool SaveStateSelectorUI::IsOpen(){
|
||||
bool SaveStateSelectorUI::IsOpen()
|
||||
{
|
||||
return s_open;
|
||||
}
|
||||
|
||||
@@ -1418,9 +1430,10 @@ void ImGuiManager::RenderOverlays()
|
||||
{
|
||||
const float scale = ImGuiManager::GetGlobalScale();
|
||||
const float margin = std::ceil(10.0f * scale);
|
||||
const float spacing = std::ceil(5.0f * scale);
|
||||
const float spacing = std::ceil(5.0f * scale);
|
||||
float position_y = margin;
|
||||
|
||||
DrawIndicatorsOverlay(position_y, scale, margin, spacing);
|
||||
DrawVideoCaptureOverlay(position_y, scale, margin, spacing);
|
||||
DrawInputRecordingOverlay(position_y, scale, margin, spacing);
|
||||
DrawTextureReplacementsOverlay(position_y, scale, margin, spacing);
|
||||
|
||||
@@ -24,7 +24,7 @@ static bool intExitExecution = false;
|
||||
static fastjmp_buf intJmpBuf;
|
||||
static u32 intLastBranchTo;
|
||||
|
||||
static void intEventTest();
|
||||
void intEventTest();
|
||||
|
||||
void intUpdateCPUCycles()
|
||||
{
|
||||
@@ -548,7 +548,7 @@ static void intReset()
|
||||
branch2 = 0;
|
||||
}
|
||||
|
||||
static void intEventTest()
|
||||
void intEventTest()
|
||||
{
|
||||
// Perform counters, ints, and IOP updates:
|
||||
_cpuEventTest_Shared();
|
||||
|
||||
@@ -673,7 +673,7 @@ const char* Pcsx2Config::GSOptions::DEFAULT_CAPTURE_CONTAINER = "mp4";
|
||||
|
||||
const char* Pcsx2Config::AchievementsOptions::OverlayPositionNames[(size_t)AchievementOverlayPosition::MaxCount + 1] = {
|
||||
"TopLeft",
|
||||
"TopCenter",
|
||||
"TopCenter",
|
||||
"TopRight",
|
||||
"CenterLeft",
|
||||
"Center",
|
||||
@@ -741,7 +741,7 @@ Pcsx2Config::GSOptions::GSOptions()
|
||||
OsdShowInputs = false;
|
||||
OsdShowVideoCapture = true;
|
||||
OsdShowInputRec = true;
|
||||
OsdShowTextureReplacements = true;
|
||||
OsdShowTextureReplacements = false;
|
||||
|
||||
HWDownloadMode = GSHardwareDownloadMode::Enabled;
|
||||
HWSpinGPUForReadbacks = false;
|
||||
@@ -1906,7 +1906,7 @@ void Pcsx2Config::AchievementsOptions::LoadSave(SettingsWrapper& wrap)
|
||||
|
||||
bool Pcsx2Config::AchievementsOptions::operator==(const AchievementsOptions& right) const
|
||||
{
|
||||
return OpEqu(bitset) && OpEqu(NotificationsDuration) && OpEqu(LeaderboardsDuration) &&
|
||||
return OpEqu(bitset) && OpEqu(NotificationsDuration) && OpEqu(LeaderboardsDuration) &&
|
||||
OpEqu(OverlayPosition) && OpEqu(NotificationPosition);
|
||||
}
|
||||
|
||||
|
||||
@@ -283,6 +283,7 @@ static fpuRegisters& fpuRegs = _cpuRegistersPack.fpuRegs;
|
||||
extern bool eeEventTestIsActive;
|
||||
|
||||
void intUpdateCPUCycles();
|
||||
void intEventTest();
|
||||
void intSetBranch();
|
||||
|
||||
// This is a special form of the interpreter's doBranch that is run from various
|
||||
|
||||
@@ -524,6 +524,13 @@ void LB()
|
||||
|
||||
if (!_Rt_) return;
|
||||
cpuRegs.GPR.r[_Rt_].SD[0] = temp;
|
||||
|
||||
// Force event test on EE counter read to improve read + interrupt syncing. Namely ESPN Games.
|
||||
if ((addr & 0xFFFFE0000) == 0x10000000)
|
||||
{
|
||||
intUpdateCPUCycles();
|
||||
intEventTest();
|
||||
}
|
||||
}
|
||||
|
||||
void LBU()
|
||||
@@ -533,6 +540,13 @@ void LBU()
|
||||
|
||||
if (!_Rt_) return;
|
||||
cpuRegs.GPR.r[_Rt_].UD[0] = temp;
|
||||
|
||||
// Force event test on EE counter read to improve read + interrupt syncing. Namely ESPN Games.
|
||||
if ((addr & 0xFFFFE0000) == 0x10000000)
|
||||
{
|
||||
intUpdateCPUCycles();
|
||||
intEventTest();
|
||||
}
|
||||
}
|
||||
|
||||
void LH()
|
||||
@@ -546,6 +560,13 @@ void LH()
|
||||
|
||||
if (!_Rt_) return;
|
||||
cpuRegs.GPR.r[_Rt_].SD[0] = temp;
|
||||
|
||||
// Force event test on EE counter read to improve read + interrupt syncing. Namely ESPN Games.
|
||||
if ((addr & 0xFFFFE0000) == 0x10000000)
|
||||
{
|
||||
intUpdateCPUCycles();
|
||||
intEventTest();
|
||||
}
|
||||
}
|
||||
|
||||
void LHU()
|
||||
@@ -559,6 +580,13 @@ void LHU()
|
||||
|
||||
if (!_Rt_) return;
|
||||
cpuRegs.GPR.r[_Rt_].UD[0] = temp;
|
||||
|
||||
// Force event test on EE counter read to improve read + interrupt syncing. Namely ESPN Games.
|
||||
if ((addr & 0xFFFFE0000) == 0x10000000)
|
||||
{
|
||||
intUpdateCPUCycles();
|
||||
intEventTest();
|
||||
}
|
||||
}
|
||||
|
||||
void LW()
|
||||
@@ -572,6 +600,13 @@ void LW()
|
||||
|
||||
if (!_Rt_) return;
|
||||
cpuRegs.GPR.r[_Rt_].SD[0] = (s32)temp;
|
||||
|
||||
// Force event test on EE counter read to improve read + interrupt syncing. Namely ESPN Games.
|
||||
if ((addr & 0xFFFFE0000) == 0x10000000)
|
||||
{
|
||||
intUpdateCPUCycles();
|
||||
intEventTest();
|
||||
}
|
||||
}
|
||||
|
||||
void LWU()
|
||||
|
||||
@@ -107,9 +107,15 @@ static void recLoad(u32 bits, bool sign)
|
||||
alloc_cb = []() { return _allocX86reg(X86TYPE_GPR, _Rt_, MODE_WRITE); };
|
||||
|
||||
int x86reg;
|
||||
bool needs_flush = false;
|
||||
if (GPR_IS_CONST1(_Rs_))
|
||||
{
|
||||
const u32 srcadr = g_cpuConstRegs[_Rs_].UL[0] + _Imm_;
|
||||
|
||||
// Force event test on EE counter read to improve read + interrupt syncing. Namely ESPN Games.
|
||||
if (bits <= 32 && (srcadr & 0xFFFFE0000) == 0x10000000)
|
||||
needs_flush = true;
|
||||
|
||||
x86reg = vtlb_DynGenReadNonQuad_Const(bits, sign, false, srcadr, alloc_cb);
|
||||
}
|
||||
else
|
||||
@@ -127,6 +133,12 @@ static void recLoad(u32 bits, bool sign)
|
||||
pxAssert(!_Rt_ || !GPR_IS_CONST1(_Rt_));
|
||||
if (!_Rt_)
|
||||
_freeX86reg(x86reg);
|
||||
|
||||
if (bits <= 32 && needs_flush)
|
||||
{
|
||||
iFlushCall(FLUSH_INTERPRETER);
|
||||
g_branch = 2;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user