Compare commits

...

7 Commits

Author SHA1 Message Date
JordanTheToaster
bde55a6fe2 GameDB: Various fixes 2025-01-21 17:30:00 -05:00
JimScript
83c1bed868 GameDB: Add Nicktoons Cross-Save Feature
re-added current GameDB
2025-01-21 11:57:25 -05:00
JimScript
6845f026bc GameDB: Add Nicktoons Cross-Save Feature
Revised commit name
2025-01-21 11:57:25 -05:00
PCSX2 Bot
f2c796bcc5 [ci skip] Qt: Update Base Translation. 2025-01-20 19:10:40 -05:00
chaoticgd
a930daf575 Debugger: Wait for the entry point to run before scanning from memory 2025-01-20 15:18:33 -05:00
TheTechnician27
36d8e5f295 ImGui: Avoid frame count display race condition for input recording and display correct value 2025-01-20 15:17:06 -05:00
Ty
71100679a3 R5900: Implement ARM NEON intrinsics for the EE cache 2025-01-20 15:14:25 -05:00
12 changed files with 317 additions and 114 deletions

View File

@@ -2222,7 +2222,7 @@ SCAJ-20162:
roundSprite: 1 # Fix mini-map and field menu.
preloadFrameData: 1 # Fixes corrupt textures especially on water.
disablePartialInvalidation: 1 # Prevents UI and subtitles from disappearing.
halfPixelOffset: 4 # Aligns post bloom.
halfPixelOffset: 2 # Aligns post bloom.
nativeScaling: 2 # Fixes doubled post and DOF effects.
SCAJ-20163:
name: "Tales of the Abyss"
@@ -6311,7 +6311,7 @@ SCES-54552:
roundSprite: 1 # Fix mini-map and field menu.
preloadFrameData: 1 # Fixes corrupt textures especially on water.
disablePartialInvalidation: 1 # Prevents UI and subtitles from disappearing.
halfPixelOffset: 4 # Aligns post bloom.
halfPixelOffset: 2 # Aligns post bloom.
nativeScaling: 2 # Fixes doubled post and DOF effects.
patches:
CBB4B383:
@@ -8953,7 +8953,7 @@ SCPS-15102:
roundSprite: 1 # Fix mini-map and field menu.
preloadFrameData: 1 # Fixes corrupt textures especially on water.
disablePartialInvalidation: 1 # Prevents UI and subtitles from disappearing.
halfPixelOffset: 4 # Aligns post bloom.
halfPixelOffset: 2 # Aligns post bloom.
nativeScaling: 2 # Fixes doubled post and DOF effects.
SCPS-15103:
name: "ガンパレード・オーケストラ 白の章 ~青森ペンギン伝説~(限定版)"
@@ -9210,7 +9210,7 @@ SCPS-17013:
roundSprite: 1 # Fix mini-map and field menu.
preloadFrameData: 1 # Fixes corrupt textures especially on water.
disablePartialInvalidation: 1 # Prevents UI and subtitles from disappearing.
halfPixelOffset: 4 # Aligns post bloom.
halfPixelOffset: 2 # Aligns post bloom.
nativeScaling: 2 # Fixes doubled post and DOF effects.
patches:
CDEE4B19:
@@ -9459,7 +9459,7 @@ SCPS-19254:
roundSprite: 1 # Fix mini-map and field menu.
preloadFrameData: 1 # Fixes corrupt textures especially on water.
disablePartialInvalidation: 1 # Prevents UI and subtitles from disappearing.
halfPixelOffset: 4 # Aligns post bloom.
halfPixelOffset: 2 # Aligns post bloom.
nativeScaling: 2 # Fixes doubled post and DOF effects.
SCPS-19301:
name: "みんなのGOLF 4 [PlayStation2 the Best]"
@@ -11990,7 +11990,7 @@ SCUS-97490:
roundSprite: 1 # Fix mini-map and field menu.
preloadFrameData: 1 # Fixes corrupt textures especially on water.
disablePartialInvalidation: 1 # Prevents UI and subtitles from disappearing.
halfPixelOffset: 4 # Aligns post bloom.
halfPixelOffset: 2 # Aligns post bloom.
nativeScaling: 2 # Fixes doubled post and DOF effects.
patches:
0643F90C:
@@ -12314,7 +12314,7 @@ SCUS-97572:
roundSprite: 1 # Fix mini-map and field menu.
preloadFrameData: 1 # Fixes corrupt textures especially on water.
disablePartialInvalidation: 1 # Prevents UI and subtitles from disappearing.
halfPixelOffset: 4 # Aligns post bloom.
halfPixelOffset: 2 # Aligns post bloom.
nativeScaling: 2 # Fixes doubled post and DOF effects.
SCUS-97574:
name: "Jak X - Combat Racing [Greatest Hits]"
@@ -13381,6 +13381,7 @@ SLED-53330:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes reflections.
mipmap: 0 # Currently causes texture flickering.
gameFixes:
- SoftwareRendererFMVHack # Fixes upscale lines in FMVs.
SLED-53359:
@@ -17386,9 +17387,9 @@ SLES-51553:
clampModes:
vuClampMode: 2 # Fixes SPS in item menu.
gsHWFixes:
textureInsideRT: 1 # Fixes rainbow shadow of legions.
alignSprite: 1 # Fixes green vertical lines.
roundSprite: 2 # Fixes vertical lines and some font artifacts but not completely fixed.
textureInsideRT: 1 # Fixes rainbow shadow of legions.
SLES-51554:
name: "Cell Damage Overdrive"
region: "PAL-M5"
@@ -18443,6 +18444,8 @@ SLES-51981:
vuClampMode: 0 # Resolves I Reg Clamping / performance impact and yellow graphics in certain areas.
gsHWFixes:
roundSprite: 1 # Fixes slight blur.
halfPixelOffset: 2 # Aligns sun post processing.
nativeScaling: 2 # Fixes sun lines.
SLES-51982:
name: "ShellShock - Nam '67"
region: "PAL-M3"
@@ -18450,6 +18453,8 @@ SLES-51982:
vuClampMode: 0 # Resolves I Reg Clamping / performance impact and yellow graphics in certain areas.
gsHWFixes:
roundSprite: 1 # Fixes slight blur.
halfPixelOffset: 2 # Aligns sun post processing.
nativeScaling: 2 # Fixes sun lines.
SLES-51986:
name: "Backyard Wrestling - Don't Try This At Home"
region: "PAL-M5"
@@ -21588,6 +21593,7 @@ SLES-53125:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes reflections.
mipmap: 0 # Currently causes texture flickering.
gameFixes:
- SoftwareRendererFMVHack # Fixes upscale lines in FMVs.
SLES-53127:
@@ -29547,9 +29553,9 @@ SLKA-25026:
clampModes:
vuClampMode: 2 # Fixes SPS in item menu.
gsHWFixes:
textureInsideRT: 1 # Fixes rainbow shadow of legions.
alignSprite: 1 # Fixes green vertical lines.
roundSprite: 2 # Fixes vertical lines and some font artifacts but not completely fixed.
textureInsideRT: 1 # Fixes rainbow shadow of legions.
SLKA-25027:
name: "NBA Street Vol. 2"
region: "NTSC-K"
@@ -34323,6 +34329,7 @@ SLPM-61110:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes reflections.
mipmap: 0 # Currently causes texture flickering.
gameFixes:
- SoftwareRendererFMVHack # Fixes upscale lines in FMVs.
SLPM-61111:
@@ -40174,9 +40181,9 @@ SLPM-65249:
clampModes:
vuClampMode: 2 # Fixes SPS in item menu.
gsHWFixes:
textureInsideRT: 1 # Fixes rainbow shadow of legions.
alignSprite: 1 # Fixes green vertical lines.
roundSprite: 2 # Fixes vertical lines and some font artifacts but not completely fixed.
textureInsideRT: 1 # Fixes rainbow shadow of legions.
SLPM-65250:
name: "カットビ!! ゴルフ"
name-sort: "かっとび!! ごるふ"
@@ -44126,6 +44133,7 @@ SLPM-65948:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes reflections.
mipmap: 0 # Currently causes texture flickering.
gameFixes:
- SoftwareRendererFMVHack # Fixes upscale lines in FMVs.
SLPM-65949:
@@ -46097,6 +46105,7 @@ SLPM-66257:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes reflections.
mipmap: 0 # Currently causes texture flickering.
gameFixes:
- SoftwareRendererFMVHack # Fixes upscale lines in FMVs.
SLPM-66258:
@@ -51024,6 +51033,7 @@ SLPM-68519:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes reflections.
mipmap: 0 # Currently causes texture flickering.
gameFixes:
- SoftwareRendererFMVHack # Fixes upscale lines in FMVs.
SLPM-68520:
@@ -64420,9 +64430,9 @@ SLUS-20695:
clampModes:
vuClampMode: 2 # Fixes SPS in item menu.
gsHWFixes:
textureInsideRT: 1 # Fixes rainbow shadow of legions.
alignSprite: 1 # Fixes green vertical lines.
roundSprite: 2 # Fixes vertical lines and some font artifacts but not completely fixed.
textureInsideRT: 1 # Fixes rainbow shadow of legions.
SLUS-20696:
name: "Nickelodeon Jimmy Neutron Boy Genius - Jet Fusion"
region: "NTSC-U"
@@ -65114,6 +65124,8 @@ SLUS-20828:
vuClampMode: 0 # Resolves I Reg Clamping / performance impact and yellow graphics in certain areas.
gsHWFixes:
roundSprite: 1 # Fixes slight blur.
halfPixelOffset: 2 # Aligns sun post processing.
nativeScaling: 2 # Fixes sun lines.
SLUS-20830:
name: "Intellivision Lives!"
region: "NTSC-U"
@@ -65943,6 +65955,7 @@ SLUS-20967:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes reflections.
mipmap: 0 # Currently causes texture flickering.
gameFixes:
- SoftwareRendererFMVHack # Fixes upscale lines in FMVs.
SLUS-20968:
@@ -67429,6 +67442,11 @@ SLUS-21218:
name: "Tak - The Great Juju Challenge"
region: "NTSC-U"
compat: 5
memcardFilters:
- "SLUS-21218"
- "SLUS-21252"
- "SLUS-21277"
- "SLUS-21284"
SLUS-21219:
name: "Pac-Man World 3"
region: "NTSC-U"
@@ -67672,6 +67690,11 @@ SLUS-21252:
recommendedBlendingLevel: 3 # Fixes missing lights.
halfPixelOffset: 4 # Aligns post processing.
nativeScaling: 2 # Fixes post effects.
memcardFilters:
- "SLUS-21218"
- "SLUS-21252"
- "SLUS-21277"
- "SLUS-21284"
SLUS-21253:
name: "TY the Tasmanian Tiger 3 - Night of the Quinkan"
region: "NTSC-U"
@@ -67863,6 +67886,11 @@ SLUS-21277:
autoFlush: 2 # Needed for recursive mipmap rendering.
nativeScaling: 1 # Fixes post effects.
getSkipCount: "GSC_BlueTongueGames" # Render mipmaps on the CPU.
memcardFilters:
- "SLUS-21218"
- "SLUS-21252"
- "SLUS-21277"
- "SLUS-21284"
SLUS-21278:
name: "SSX On Tour"
region: "NTSC-U"
@@ -67933,6 +67961,11 @@ SLUS-21284:
autoFlush: 2 # Fixes glows. Also needed for recursive mipmap rendering.
textureInsideRT: 1 # Fixes rainbow lighting for some areas.
getSkipCount: "GSC_BlueTongueGames" # Mipmap rendering on CPU.
memcardFilters:
- "SLUS-21218"
- "SLUS-21252"
- "SLUS-21277"
- "SLUS-21284"
SLUS-21285:
name: "Ultimate Spider-Man [Limited Edition]"
region: "NTSC-U"

View File

@@ -14582,7 +14582,7 @@ Swap chain: see Microsoft&apos;s Terminology Portal.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="1130"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="1132"/>
<source>Save slot {0} selected ({1}).</source>
<translation type="unfinished"></translation>
</message>
@@ -14590,78 +14590,63 @@ Swap chain: see Microsoft&apos;s Terminology Portal.</extracomment>
<context>
<name>ImGuiOverlays</name>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="685"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="687"/>
<source>{} Recording Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="689"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="691"/>
<source>{} Replaying</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="693"/>
<source>Input Recording Active: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="694"/>
<source>Frame: {}/{} ({})</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="695"/>
<source>Undo Count: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="757"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="759"/>
<source>Saved at {0:%H:%M} on {0:%a} {0:%Y/%m/%d}.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="784"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="786"/>
<source>Save state selector is unavailable without a valid game serial.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="871"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="873"/>
<source>Load</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="873"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="875"/>
<source>Save</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="875"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="877"/>
<source>Select Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="877"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="879"/>
<source>Select Next</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="879"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="881"/>
<source>Close Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="932"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="954"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="934"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="956"/>
<source>Save Slot {0}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="955"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="957"/>
<source>No save present in this slot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="1127"/>
<location filename="../../pcsx2/ImGui/ImGuiOverlays.cpp" line="1129"/>
<source>no save yet</source>
<translation type="unfinished"></translation>
</message>
@@ -14771,40 +14756,55 @@ Right click to clear binding</source>
<context>
<name>InputRecording</name>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="75"/>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="77"/>
<source>Started new input recording</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="94"/>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="96"/>
<source>Savestate load failed for input recording</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="104"/>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="106"/>
<source>Savestate load failed for input recording, unsupported version?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="121"/>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="123"/>
<source>Replaying input recording</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="139"/>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="141"/>
<source>Input recording stopped</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="144"/>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="146"/>
<source>Unable to stop input recording</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="232"/>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="234"/>
<source>Congratulations, you&apos;ve been playing for far too long and thus have reached the limit of input recording! Stopping recording now...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="394"/>
<source>Input Recording Active: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="395"/>
<source>Frame: {}/{} ({})</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/Recording/InputRecording.cpp" line="396"/>
<source>Undo Count: {}</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>InputRecordingControls</name>
@@ -18504,7 +18504,7 @@ Ejecting {3} and replacing it with {2}.</source>
<context>
<name>SaveState</name>
<message>
<location filename="../../pcsx2/SaveState.cpp" line="1100"/>
<location filename="../../pcsx2/SaveState.cpp" line="1104"/>
<source>This save state is outdated and is no longer compatible with the current version of PCSX2.
If you have any unsaved progress on this save state, you can download the compatible version (PCSX2 {}) from pcsx2.net, load the save state, and save your progress to the memory card.</source>
@@ -21834,177 +21834,177 @@ Error was: {}</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3065"/>
<location filename="../../pcsx2/VMManager.cpp" line="3067"/>
<source>Cheats have been disabled due to achievements hardcore mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3118"/>
<location filename="../../pcsx2/VMManager.cpp" line="3120"/>
<source>Fast CDVD is enabled, this may break games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3122"/>
<location filename="../../pcsx2/VMManager.cpp" line="3124"/>
<source>Cycle rate/skip is not at default, this may crash or make games run too slow.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3132"/>
<location filename="../../pcsx2/VMManager.cpp" line="3134"/>
<source>Upscale multiplier is below native, this will break rendering.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3172"/>
<location filename="../../pcsx2/VMManager.cpp" line="3174"/>
<source>Mipmapping is disabled. This may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3181"/>
<location filename="../../pcsx2/VMManager.cpp" line="3183"/>
<source>Renderer is not set to Automatic. This may cause performance problems and graphical issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3187"/>
<location filename="../../pcsx2/VMManager.cpp" line="3189"/>
<source>Texture filtering is not set to Bilinear (PS2). This will break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3650"/>
<location filename="../../pcsx2/VMManager.cpp" line="3652"/>
<source>No Game Running</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3137"/>
<location filename="../../pcsx2/VMManager.cpp" line="3139"/>
<source>Trilinear filtering is not set to automatic. This may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3142"/>
<location filename="../../pcsx2/VMManager.cpp" line="3144"/>
<source>Blending Accuracy is below Basic, this may break effects in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3147"/>
<location filename="../../pcsx2/VMManager.cpp" line="3149"/>
<source>Hardware Download Mode is not set to Accurate, this may break rendering in some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3193"/>
<location filename="../../pcsx2/VMManager.cpp" line="3195"/>
<source>EE FPU Round Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3199"/>
<location filename="../../pcsx2/VMManager.cpp" line="3201"/>
<source>EE FPU Clamp Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3204"/>
<location filename="../../pcsx2/VMManager.cpp" line="3206"/>
<source>VU0 Round Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3209"/>
<location filename="../../pcsx2/VMManager.cpp" line="3211"/>
<source>VU1 Round Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3216"/>
<location filename="../../pcsx2/VMManager.cpp" line="3218"/>
<source>VU Clamp Mode is not set to default, this may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3221"/>
<location filename="../../pcsx2/VMManager.cpp" line="3223"/>
<source>128MB RAM is enabled. Compatibility with some games may be affected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3226"/>
<location filename="../../pcsx2/VMManager.cpp" line="3228"/>
<source>Game Fixes are not enabled. Compatibility with some games may be affected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3231"/>
<location filename="../../pcsx2/VMManager.cpp" line="3233"/>
<source>Compatibility Patches are not enabled. Compatibility with some games may be affected.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3235"/>
<location filename="../../pcsx2/VMManager.cpp" line="3237"/>
<source>Frame rate for NTSC is not default. This may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3237"/>
<location filename="../../pcsx2/VMManager.cpp" line="3239"/>
<source>Frame rate for PAL is not default. This may break some games.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3256"/>
<location filename="../../pcsx2/VMManager.cpp" line="3258"/>
<source>EE Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3261"/>
<location filename="../../pcsx2/VMManager.cpp" line="3263"/>
<source>VU0 Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3266"/>
<location filename="../../pcsx2/VMManager.cpp" line="3268"/>
<source>VU1 Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3271"/>
<location filename="../../pcsx2/VMManager.cpp" line="3273"/>
<source>IOP Recompiler is not enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3276"/>
<location filename="../../pcsx2/VMManager.cpp" line="3278"/>
<source>EE Cache is enabled, this will significantly reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3281"/>
<location filename="../../pcsx2/VMManager.cpp" line="3283"/>
<source>EE Wait Loop Detection is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3286"/>
<location filename="../../pcsx2/VMManager.cpp" line="3288"/>
<source>INTC Spin Detection is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3289"/>
<location filename="../../pcsx2/VMManager.cpp" line="3291"/>
<source>Fastmem is not enabled, this will reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3293"/>
<location filename="../../pcsx2/VMManager.cpp" line="3295"/>
<source>Instant VU1 is disabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3298"/>
<location filename="../../pcsx2/VMManager.cpp" line="3300"/>
<source>mVU Flag Hack is not enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3152"/>
<location filename="../../pcsx2/VMManager.cpp" line="3154"/>
<source>GPU Palette Conversion is enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3157"/>
<location filename="../../pcsx2/VMManager.cpp" line="3159"/>
<source>Texture Preloading is not Full, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3162"/>
<location filename="../../pcsx2/VMManager.cpp" line="3164"/>
<source>Estimate texture region is enabled, this may reduce performance.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../pcsx2/VMManager.cpp" line="3167"/>
<location filename="../../pcsx2/VMManager.cpp" line="3169"/>
<source>Texture dumping is enabled, this will continually dump textures to disk.</source>
<translation type="unfinished"></translation>
</message>

View File

@@ -97,11 +97,20 @@ void SymbolImporter::OnElfChanged(std::vector<u8> elf, const std::string& elf_fi
return;
}
AnalyseElf(std::move(elf), elf_file_name, EmuConfig.DebuggerAnalysis);
AnalyseElf(std::move(elf), elf_file_name, EmuConfig.DebuggerAnalysis, true);
m_symbol_table_loaded_on_boot = true;
}
void SymbolImporter::OnElfLoadedInMemory()
{
{
std::lock_guard lock(m_elf_loaded_in_memory_mutex);
m_elf_loaded_in_memory = true;
}
m_elf_loaded_in_memory_condition_variable.notify_one();
}
void SymbolImporter::OnDebuggerOpened()
{
m_debugger_open = true;
@@ -165,11 +174,23 @@ void SymbolImporter::LoadAndAnalyseElf(Pcsx2Config::DebugAnalysisOptions options
return;
}
AnalyseElf(elfo.ReleaseData(), elf_path, options);
AnalyseElf(elfo.ReleaseData(), elf_path, options, false);
}
struct SymbolImporterThreadParameters
{
std::vector<u8> elf;
std::string elf_file_name;
std::string nocash_path;
Pcsx2Config::DebugAnalysisOptions options;
bool wait_until_elf_is_loaded;
};
void SymbolImporter::AnalyseElf(
std::vector<u8> elf, const std::string& elf_file_name, Pcsx2Config::DebugAnalysisOptions options)
std::vector<u8> elf,
const std::string& elf_file_name,
Pcsx2Config::DebugAnalysisOptions options,
bool wait_until_elf_is_loaded)
{
// Search for a .sym file to load symbols from.
std::string nocash_path;
@@ -185,38 +206,63 @@ void SymbolImporter::AnalyseElf(
nocash_path = iso_file_path.substr(0, n) + ".sym";
}
ccc::Result<ccc::ElfFile> parsed_elf = ccc::ElfFile::parse(std::move(elf));
if (!parsed_elf.success())
{
ccc::report_error(parsed_elf.error());
return;
}
ccc::ElfSymbolFile symbol_file(std::move(*parsed_elf), std::move(elf_file_name));
SymbolImporterThreadParameters parameters;
parameters.elf = std::move(elf);
parameters.elf_file_name = elf_file_name;
parameters.nocash_path = std::move(nocash_path);
parameters.options = std::move(options);
parameters.wait_until_elf_is_loaded = wait_until_elf_is_loaded;
ShutdownWorkerThread();
m_import_thread = std::thread([this, nocash_path, options, worker_symbol_file = std::move(symbol_file), builtins = m_builtin_types]() {
m_import_thread = std::thread([this, params = std::move(parameters)]() {
Threading::SetNameOfCurrentThread("Symbol Worker");
ccc::Result<ccc::ElfFile> parsed_elf = ccc::ElfFile::parse(std::move(params.elf));
if (!parsed_elf.success())
{
ccc::report_error(parsed_elf.error());
return;
}
ccc::ElfSymbolFile symbol_file(std::move(*parsed_elf), std::move(params.elf_file_name));
ccc::SymbolDatabase temp_database;
ImportSymbols(temp_database, worker_symbol_file, nocash_path, options, builtins, &m_interrupt_import_thread);
ImportSymbols(
temp_database,
symbol_file,
params.nocash_path,
params.options,
m_builtin_types,
&m_interrupt_import_thread);
if (m_interrupt_import_thread)
return;
if (options.GenerateFunctionHashes)
if (params.options.GenerateFunctionHashes)
{
ElfMemoryReader reader(worker_symbol_file.elf());
ElfMemoryReader reader(symbol_file.elf());
SymbolGuardian::GenerateFunctionHashes(temp_database, reader);
}
if (m_interrupt_import_thread)
return;
if (params.wait_until_elf_is_loaded && params.options.FunctionScanMode == DebugFunctionScanMode::SCAN_MEMORY)
{
// Wait for the entry point to start compiling on the CPU thread so
// we know the functions we want to scan are loaded in memory.
std::unique_lock lock(m_elf_loaded_in_memory_mutex);
m_elf_loaded_in_memory_condition_variable.wait(lock,
[this]() { return m_elf_loaded_in_memory; });
if (m_interrupt_import_thread)
return;
}
m_guardian.ReadWrite([&](ccc::SymbolDatabase& database) {
ClearExistingSymbols(database, options);
ClearExistingSymbols(database, params.options);
if (m_interrupt_import_thread)
return;
@@ -229,7 +275,7 @@ void SymbolImporter::AnalyseElf(
// The function scanner has to be run on the main database so that
// functions created before the importer was run are still
// considered. Otherwise, duplicate functions will be created.
ScanForFunctions(database, worker_symbol_file, options);
ScanForFunctions(database, symbol_file, params.options);
});
});
}
@@ -239,9 +285,23 @@ void SymbolImporter::ShutdownWorkerThread()
if (m_import_thread.joinable())
{
m_interrupt_import_thread = true;
// Make sure the import thread is woken up so we can shut it down.
{
std::lock_guard lock(m_elf_loaded_in_memory_mutex);
m_elf_loaded_in_memory = true;
}
m_elf_loaded_in_memory_condition_variable.notify_one();
m_import_thread.join();
m_interrupt_import_thread = false;
}
{
std::lock_guard lock(m_elf_loaded_in_memory_mutex);
m_elf_loaded_in_memory = false;
}
}
void SymbolImporter::ClearExistingSymbols(ccc::SymbolDatabase& database, const Pcsx2Config::DebugAnalysisOptions& options)

View File

@@ -6,6 +6,8 @@
#include "Config.h"
#include "SymbolGuardian.h"
#include <condition_variable>
class DebugInterface;
class SymbolImporter
@@ -17,6 +19,7 @@ public:
// that are used to determine when symbol tables should be loaded, and
// should be called from the CPU thread.
void OnElfChanged(std::vector<u8> elf, const std::string& elf_file_name);
void OnElfLoadedInMemory();
void OnDebuggerOpened();
void OnDebuggerClosed();
@@ -30,7 +33,11 @@ public:
// Import symbols from the ELF file, nocash symbols, and scan for functions.
// Should be called from the CPU thread.
void AnalyseElf(std::vector<u8> elf, const std::string& elf_file_name, Pcsx2Config::DebugAnalysisOptions options);
void AnalyseElf(
std::vector<u8> elf,
const std::string& elf_file_name,
Pcsx2Config::DebugAnalysisOptions options,
bool wait_until_elf_is_loaded);
// Interrupt the import thread. Should be called from the CPU thread.
void ShutdownWorkerThread();
@@ -77,6 +84,10 @@ protected:
std::thread m_import_thread;
std::atomic_bool m_interrupt_import_thread = false;
std::mutex m_elf_loaded_in_memory_mutex;
std::condition_variable m_elf_loaded_in_memory_condition_variable;
bool m_elf_loaded_in_memory = false;
std::map<std::string, ccc::DataTypeHandle> m_builtin_types;
};

View File

@@ -47,6 +47,8 @@
#include <tuple>
#include <unordered_map>
InputRecordingUI::InputRecordingData g_InputRecordingData;
namespace ImGuiManager
{
static void FormatProcessorStat(SmallStringBase& text, double usage, double time);
@@ -680,7 +682,7 @@ __ri void ImGuiManager::DrawInputRecordingOverlay(float& position_y, float scale
} while (0)
// Status Indicators
if (g_InputRecording.getControls().isRecording())
if (g_InputRecordingData.is_recording)
{
DRAW_LINE(standard_font, TinyString::from_format(TRANSLATE_FS("ImGuiOverlays", "{} Recording Input"), ICON_PF_CIRCLE).c_str(), IM_COL32(255, 0, 0, 255));
}
@@ -690,9 +692,9 @@ __ri void ImGuiManager::DrawInputRecordingOverlay(float& position_y, float scale
}
// Input Recording Metadata
DRAW_LINE(fixed_font, TinyString::from_format(TRANSLATE_FS("ImGuiOverlays", "Input Recording Active: {}"), g_InputRecording.getData().getFilename()).c_str(), IM_COL32(117, 255, 241, 255));
DRAW_LINE(fixed_font, TinyString::from_format(TRANSLATE_FS("ImGuiOverlays", "Frame: {}/{} ({})"), g_InputRecording.getFrameCounter() + 1, g_InputRecording.getData().getTotalFrames(), g_FrameCount).c_str(), IM_COL32(117, 255, 241, 255));
DRAW_LINE(fixed_font, TinyString::from_format(TRANSLATE_FS("ImGuiOverlays", "Undo Count: {}"), g_InputRecording.getData().getUndoCount()).c_str(), IM_COL32(117, 255, 241, 255));
DRAW_LINE(fixed_font, g_InputRecordingData.recording_active_message.c_str(), IM_COL32(117, 255, 241, 255));
DRAW_LINE(fixed_font, g_InputRecordingData.frame_data_message.c_str(), IM_COL32(117, 255, 241, 255));
DRAW_LINE(fixed_font, g_InputRecordingData.undo_count_message.c_str(), IM_COL32(117, 255, 241, 255));
#undef DRAW_LINE
}

View File

@@ -28,3 +28,16 @@ namespace SaveStateSelectorUI
void LoadCurrentSlot();
void SaveCurrentSlot();
} // namespace SaveStateSelectorUI
namespace InputRecordingUI
{
struct InputRecordingData
{
bool is_recording = false;
TinyString recording_active_message = "";
TinyString frame_data_message = "";
TinyString undo_count_message = "";
};
}
extern InputRecordingUI::InputRecordingData g_InputRecordingData;

View File

@@ -26,6 +26,8 @@ bool SaveStateBase::InputRecordingFreeze()
#include "Counters.h"
#include "SaveState.h"
#include "VMManager.h"
#include "Host.h"
#include "ImGui/ImGuiOverlays.h"
#include "DebugTools/Debug.h"
#include "GameDatabase.h"
#include "fmt/format.h"
@@ -237,8 +239,9 @@ void InputRecording::incFrameCounter()
if (m_controls.isReplaying())
{
InformGSThread();
// If we've reached the end of the recording while replaying, pause
if (m_frame_counter == m_file.getTotalFrames() - 1)
if (m_frame_counter == m_file.getTotalFrames())
{
VMManager::SetPaused(true);
// Can also stop watching for re-records, they've watched to the end of the recording
@@ -247,6 +250,7 @@ void InputRecording::incFrameCounter()
}
if (m_controls.isRecording())
{
m_frame_counter_stateless++;
m_file.setTotalFrames(m_frame_counter);
// If we've been in record mode and moved to the next frame, we've overrote something
// if this was following a save-state loading, this is considered a re-record, a.k.a an undo
@@ -255,14 +259,20 @@ void InputRecording::incFrameCounter()
m_file.incrementUndoCount();
m_watching_for_rerecords = false;
}
InformGSThread();
}
}
u64 InputRecording::getFrameCounter() const
u32 InputRecording::getFrameCounter() const
{
return m_frame_counter;
}
u32 InputRecording::getFrameCounterStateless() const
{
return m_frame_counter_stateless;
}
bool InputRecording::isActive() const
{
return m_is_active;
@@ -320,6 +330,12 @@ void InputRecording::setStartingFrame(u32 startingFrame)
}
InputRec::consoleLog(fmt::format("Internal Starting Frame: {}", startingFrame));
m_starting_frame = startingFrame;
InformGSThread();
}
u32 InputRecording::getStartingFrame()
{
return m_starting_frame;
}
void InputRecording::adjustFrameCounterOnReRecord(u32 newFrameCounter)
@@ -351,6 +367,9 @@ void InputRecording::adjustFrameCounterOnReRecord(u32 newFrameCounter)
getControls().setReplayMode();
}
m_frame_counter = newFrameCounter - m_starting_frame;
m_frame_counter_stateless--;
m_file.setTotalFrames(m_frame_counter);
InformGSThread();
}
InputRecordingControls& InputRecording::getControls()
@@ -367,4 +386,20 @@ void InputRecording::initializeState()
{
m_frame_counter = 0;
m_watching_for_rerecords = false;
InformGSThread();
}
void InputRecording::InformGSThread()
{
TinyString recording_active_message = TinyString::from_format(TRANSLATE_FS("InputRecording", "Input Recording Active: {}"), g_InputRecording.getData().getFilename());
TinyString frame_data_message = TinyString::from_format(TRANSLATE_FS("InputRecording", "Frame: {}/{} ({})"), g_InputRecording.getFrameCounter(), g_InputRecording.getData().getTotalFrames(), g_InputRecording.getFrameCounterStateless());
TinyString undo_count_message = TinyString::from_format(TRANSLATE_FS("InputRecording", "Undo Count: {}"), g_InputRecording.getData().getUndoCount());
MTGS::RunOnGSThread([recording_active_message, frame_data_message, undo_count_message](bool is_recording = g_InputRecording.getControls().isRecording())
{
g_InputRecordingData.is_recording = is_recording;
g_InputRecordingData.recording_active_message = recording_active_message;
g_InputRecordingData.frame_data_message = frame_data_message;
g_InputRecordingData.undo_count_message = undo_count_message;
});
}

View File

@@ -22,14 +22,19 @@ public:
bool play(const std::string& path);
void stop();
static void InformGSThread();
void handleControllerDataUpdate();
void saveControllerData(const PadData& data, const int port, const int slot);
std::optional<PadData> updateControllerData(const int port, const int slot);
void incFrameCounter();
u64 getFrameCounter() const;
u32 getFrameCounter() const;
u32 getFrameCounterStateless() const;
bool isActive() const;
void processRecordQueue();
void setStartingFrame(u32 startingFrame);
u32 getStartingFrame();
void handleExceededFrameCounter();
void handleReset();
void handleLoadingSavestate();
@@ -53,11 +58,11 @@ private:
std::queue<std::function<void()>> m_recordingQueue;
u32 m_frame_counter = 0;
u32 m_frame_counter_stateless = 0;
// Either 0 for a power-on movie, or the g_FrameCount that is stored on the starting frame
u32 m_starting_frame = 0;
void initializeState();
void setStartingFrame(u32 startingFrame);
void closeActiveFile();
};

View File

@@ -2,6 +2,7 @@
// SPDX-License-Identifier: GPL-3.0+
#include "InputRecordingFile.h"
#include "InputRecording.h"
#include "BuildVersion.h"
#include "Utilities/InputRecordingLogger.h"
@@ -89,6 +90,7 @@ void InputRecordingFile::incrementUndoCount()
}
fseek(m_recordingFile, s_seekpointUndoCount, SEEK_SET);
fwrite(&m_undoCount, 4, 1, m_recordingFile);
InputRecording::InformGSThread();
}
bool InputRecordingFile::openNew(const std::string& path, bool fromSavestate)
@@ -104,6 +106,7 @@ bool InputRecordingFile::openNew(const std::string& path, bool fromSavestate)
m_undoCount = 0;
m_header.init();
m_savestate = fromSavestate;
InputRecording::InformGSThread();
return true;
}
@@ -123,6 +126,7 @@ bool InputRecordingFile::openExisting(const std::string& path)
}
m_filename = path;
InputRecording::InformGSThread();
return true;
}
@@ -147,13 +151,14 @@ std::optional<PadData> InputRecordingFile::readPadData(const uint frame, const u
void InputRecordingFile::setTotalFrames(u32 frame)
{
if (m_recordingFile == nullptr || m_totalFrames >= frame)
if (m_recordingFile == nullptr)
{
return;
}
m_totalFrames = frame;
fseek(m_recordingFile, s_seekpointTotalFrames, SEEK_SET);
fwrite(&m_totalFrames, 4, 1, m_recordingFile);
InputRecording::InformGSThread();
}
bool InputRecordingFile::writeHeader() const

View File

@@ -9,6 +9,7 @@
#include "Config.h"
#include "Counters.h"
#include "DebugTools/Breakpoints.h"
#include "DebugTools/SymbolImporter.h"
#include "Elfheader.h"
#include "GS.h"
#include "GS/GS.h"
@@ -80,6 +81,9 @@ static void PostLoadPrep()
CBreakPoints::SetSkipFirst(BREAKPOINT_IOP, 0);
UpdateVSyncRate(true);
if (VMManager::Internal::HasBootedELF())
R5900SymbolImporter.OnElfLoadedInMemory();
}
// --------------------------------------------------------------------------------------

View File

@@ -2789,6 +2789,8 @@ void VMManager::Internal::EntryPointCompilingOnCPUThread()
// Toss all the recs, we're going to be executing new code.
mmap_ResetBlockTracking();
ClearCPUExecutionCaches();
R5900SymbolImporter.OnElfLoadedInMemory();
}
void VMManager::Internal::VSyncOnCPUThread()

View File

@@ -30,9 +30,6 @@
#include "fmt/format.h"
#include <bit>
#ifdef _M_X86
#include <immintrin.h>
#endif
#include <map>
#include <unordered_set>
#include <unordered_map>
@@ -112,6 +109,16 @@ vtlb_private::VTLBVirtual::VTLBVirtual(VTLBPhysical phys, u32 paddr, u32 vaddr)
}
}
#if defined(_M_X86)
#include <immintrin.h>
#elif defined(_M_ARM64)
#if defined(_MSC_VER) && !defined(__clang__)
#include <arm64_neon.h>
#else
#include <arm_neon.h>
#endif
#endif
__inline int CheckCache(u32 addr)
{
// Check if the cache is enabled
@@ -123,7 +130,7 @@ __inline int CheckCache(u32 addr)
size_t i = 0;
const size_t size = cachedTlbs.count;
#ifdef _M_X86
#if defined(_M_X86)
const int stride = 4;
const __m128i addr_vec = _mm_set1_epi32(addr);
@@ -173,6 +180,32 @@ __inline int CheckCache(u32 addr)
return true;
}
}
#elif defined(_M_ARM64)
const int stride = 4;
const uint32x4_t addr_vec = vld1q_dup_u32(&addr);
for (; i + stride <= size; i += stride)
{
const uint32x4_t pfn1_vec = vld1q_u32(&cachedTlbs.PFN1s[i]);
const uint32x4_t pfn0_vec = vld1q_u32(&cachedTlbs.PFN0s[i]);
const uint32x4_t mask_vec = vld1q_u32(&cachedTlbs.PageMasks[i]);
const uint32x4_t cached1_vec = vld1q_u32(&cachedTlbs.CacheEnabled1[i]);
const uint32x4_t cached0_vec = vld1q_u32(&cachedTlbs.CacheEnabled0[i]);
const uint32x4_t pfn1_end_vec = vaddq_u32(pfn1_vec, mask_vec);
const uint32x4_t pfn0_end_vec = vaddq_u32(pfn0_vec, mask_vec);
const uint32x4_t cmp1 = vandq_u32(vcgeq_u32(addr_vec, pfn1_vec), vcleq_u32(addr_vec, pfn1_end_vec));
const uint32x4_t cmp0 = vandq_u32(vcgeq_u32(addr_vec, pfn0_vec), vcleq_u32(addr_vec, pfn0_end_vec));
const uint32x4_t lanes_enabled = vorrq_u32(vandq_u32(cached1_vec, cmp1), vandq_u32(cached0_vec, cmp0));
const uint32x2_t tmp = vorr_u32(vget_low_u32(lanes_enabled), vget_high_u32(lanes_enabled));
if (vget_lane_u32(vpmax_u32(tmp, tmp), 0))
return true;
}
#endif
for (; i < size; i++)
{