Compare commits

...

29 Commits

Author SHA1 Message Date
lightningterror
d915a0b945 GS/Shaders: Try to fix Warning X4000: FxaaPixelShader potentially uninitialized variable. 2025-04-26 21:39:53 +02:00
Mrlinkwii
ac9c5eaae9 issues/Github : remove unused links
[skip-ci]
2025-04-26 21:36:16 +02:00
lightningterror
0891da303c GS/HW: Unlink source texture from old target before deletion.
DT Racer hits this path and causes a crash when RT in RT is disabled, so let's make sure source and target texture isn't linked/shared before deleting the target.
2025-04-26 09:37:36 +02:00
refractionpcsx2
55e9b51faa GS/HW: Only reuse dirty targets that were recently accessed 2025-04-26 09:36:57 +02:00
PCSX2 Bot
55dc0ade47 [ci skip] Qt: Update Base Translation. 2025-04-25 20:24:43 -04:00
Sean
2cf7083718 Debugger: Add breakpoint description label (#12534) 2025-04-25 18:08:09 -04:00
refractionpcsx2
15df532d68 GS: Improve TrianglesAreQuads check to make sure 2 edges match a previous triangle 2025-04-25 14:26:03 +02:00
refractionpcsx2
884d2302a9 GS/HW: Fix up some regressions from RT in RT 2025-04-25 14:26:03 +02:00
KamFretoZ
bacdfd6018 FSUI/BPM: Fix icon 2025-04-25 11:29:59 +02:00
PCSX2 Bot
dc7a3bbbd3 [ci skip] Qt: Update Base Translation. 2025-04-25 11:29:41 +02:00
chaoticgd
ff0d791783 Debugger: Use a consistent context string when translating layout names 2025-04-24 19:45:46 -04:00
chaoticgd
a3d8a0dde0 Debugger: Add dummy actions to the Tools and Windows menus 2025-04-24 19:44:45 -04:00
PCSX2 Bot
a8c908d113 [ci skip] Qt: Update Base Translation. 2025-04-24 02:07:06 +02:00
Filoppi
01849d5305 GS: Allow for widescreen and ultrawide patches to specify their target aspect ratio.
This allows users with monitors of any aspect ratios to use patches made for any other aspect ratio.
For example, if on 32:9 one uses a 21:9 patch, pcsx2 will automatically size the presentation to 21:9 within 32:9.
This also removes some ugly or hardcoded stuff from the code :).
It also opens the door to add a "Custom" user aspect ratio, without the patch needing to specify the aspect ratio, so users could stretch the image to any AR they'd like, but for now there's no need to add that.

(cherry picked from commit 3ae2520aa19efe32d8d0c12b2b174dcd3d3bc745)
2025-04-22 21:36:50 -04:00
PCSX2 Bot
23968d3e2b [ci skip] Qt: Update Base Translation. 2025-04-22 20:02:33 -04:00
lightningterror
7246a64ae5 VMManager: Also add GB for the ram info. 2025-04-22 10:00:11 +02:00
lightningterror
729e050adb common-mac: Add some comments to GetAvailablePhysicalMemory. 2025-04-22 10:00:11 +02:00
lightningterror
003452fbbb common-linux: Try to read cached/buffered memory using MemAvailable.
Add two fallbacks if MemAvailable isn't available:
1. Add manual approximation/Linux-like heuristic fallback.
2. Add sysinfo if manual approximation fails.
2025-04-22 10:00:11 +02:00
lightningterror
419b6bd0a3 CDVD: Adjust precache osd to display decimal value for required ram. 2025-04-22 10:00:11 +02:00
PCSX2 Bot
668c3d9a08 [ci skip] PAD: Update to latest controller database. 2025-04-21 18:51:11 +02:00
Ty
9a6f878051 CI: Use the upstream Flatpak action
https://github.com/flathub-infra/flatpak-github-actions/issues/17
2025-04-21 11:21:10 -04:00
PCSX2 Bot
50fc750154 [ci skip] Qt: Update Base Translation. 2025-04-20 09:37:04 -04:00
Mrlinkwii
9fe8235eda tool : update generate_redump_yaml.py 2025-04-19 17:37:54 +02:00
Mrlinkwii
f7b9c48998 Deps: update redump database 2025-04-19 17:37:54 +02:00
lightningterror
17bf27c018 GS/DX12: Copy/bind rt when tex is fb on slot 0. 2025-04-19 17:05:22 +02:00
lightningterror
80ca5ea5fd GS/HW: Rename GSC_Tekken5 to GSC_NamcoGames.
Multiple games use it.
2025-04-19 16:52:26 +02:00
lightningterror
3afa9ca403 VMManager: Add available ram info in log. 2025-04-19 13:41:41 +02:00
lightningterror
842190e15e CDVD: Adjust ram requirements when precaching on linux/Mac. 2025-04-19 13:41:41 +02:00
PCSX2 Bot
717775d9ab [ci skip] Qt: Update Base Translation. 2025-04-19 05:39:57 +02:00
75 changed files with 934 additions and 400 deletions

View File

@@ -66,10 +66,6 @@ body:
Performance issues as a result of not meeting our hardware requirements are not valid.
Please read our known issues pages for AMD and Intel drivers.
- [Intel Drivers](https://github.com/PCSX2/pcsx2/wiki/OpenGL-and-Intel-GPUs-All-you-need-to-know).
- [AMD Drivers](https://github.com/PCSX2/pcsx2/wiki/OpenGL-and-AMD-GPUs---All-you-need-to-know).
We are **not** accepting issues related to the **libretro** core. The libretro core is being maintained separately at this time
- type: input
id: rev

View File

@@ -96,7 +96,7 @@ jobs:
- name: Build Flatpak (beta)
if: ${{ inputs.stableBuild == false || inputs.stableBuild == 'false' }}
uses: flathub-infra/flatpak-github-actions/flatpak-builder@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c
with:
bundle: ${{ steps.artifact-metadata.outputs.artifact-name }}.flatpak
upload-artifact: false
@@ -112,7 +112,7 @@ jobs:
- name: Build Flatpak (stable)
if: ${{ inputs.stableBuild == true || inputs.stableBuild == 'true' }}
uses: flathub-infra/flatpak-github-actions/flatpak-builder@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c
with:
bundle: ${{ steps.artifact-metadata.outputs.artifact-name }}.flatpak
upload-artifact: false
@@ -132,7 +132,7 @@ jobs:
- name: Push to Flathub (beta)
if: ${{ inputs.publish == true && (inputs.stableBuild == false || inputs.stableBuild == 'false') }}
uses: flathub-infra/flatpak-github-actions/flat-manager@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c
with:
flat-manager-url: https://hub.flathub.org/
repository: beta
@@ -141,7 +141,7 @@ jobs:
- name: Push to Flathub (stable)
if: ${{ inputs.publish == true && (inputs.stableBuild == true || inputs.stableBuild == 'true') }}
uses: flathub-infra/flatpak-github-actions/flat-manager@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c
with:
flat-manager-url: https://hub.flathub.org/
repository: stable

View File

@@ -1274,7 +1274,7 @@ SCAJ-10015:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes post effects.
getSkipCount: "GSC_Tekken5" # Fixes upscaling grid, same engine.
getSkipCount: "GSC_NamcoGames" # Fixes upscaling grid, same engine.
SCAJ-20001:
name: "Ratchet & Clank"
region: "NTSC-Unk"
@@ -1987,7 +1987,7 @@ SCAJ-20125:
alignSprite: 1
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SCAJ-20126:
name: "Tekken 5"
region: "NTSC-Unk"
@@ -1998,7 +1998,7 @@ SCAJ-20126:
alignSprite: 1
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SCAJ-20127:
name: "EyeToy - Play 2 [with Camera]"
region: "NTSC-Unk"
@@ -2248,7 +2248,7 @@ SCAJ-20163:
gsHWFixes:
halfPixelOffset: 2 # Fixes ghosting.
autoFlush: 2 # Fixes post lighting.
getSkipCount: "GSC_Tekken5" # Fixes upscaling grid, same engine.
getSkipCount: "GSC_NamcoGames" # Fixes upscaling grid, same engine.
SCAJ-20164:
name: "Kingdom Hearts II"
region: "NTSC-Unk"
@@ -2477,7 +2477,7 @@ SCAJ-20199:
alignSprite: 1
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SCAJ-25002:
name: "Shinobi"
region: "NTSC-Unk"
@@ -4188,7 +4188,7 @@ SCED-53538:
alignSprite: 1
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SCED-53611:
name: "Official PlayStation 2 Magazine - German Kids Special"
region: "PAL-G"
@@ -5827,7 +5827,7 @@ SCES-53202:
alignSprite: 1
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SCES-53247:
name: "WRC Rally Evolved"
region: "PAL-M8"
@@ -7285,7 +7285,7 @@ SCKA-20049:
alignSprite: 1
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SCKA-20050:
name: "Tales of Legendia"
region: "NTSC-K"
@@ -7512,7 +7512,7 @@ SCKA-20081:
alignSprite: 1
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SCKA-20082:
name: "Ace Combat 5 - The Unsung War [PlayStation 2 Big Hit Series]"
region: "NTSC-K"
@@ -54888,7 +54888,7 @@ SLPS-20485:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes post effects.
getSkipCount: "GSC_Tekken5" # Fixes upscaling grid, same engine.
getSkipCount: "GSC_NamcoGames" # Fixes upscaling grid, same engine.
SLPS-20486:
name: "太鼓の達人 ドカッ!と大盛り七代目 [ソフト単体]"
name-sort: "たいこのたつじん どかっ!とおおもりななだいめ [そふとたんたい]"
@@ -54897,7 +54897,7 @@ SLPS-20486:
gsHWFixes:
alignSprite: 1 # Fixes vertical lines.
textureInsideRT: 1 # Fixes post effects.
getSkipCount: "GSC_Tekken5" # Fixes upscaling grid, same engine.
getSkipCount: "GSC_NamcoGames" # Fixes upscaling grid, same engine.
SLPS-20487:
name: "パチスロキング! 科学忍者隊ガッチャマン"
name-sort: "ぱちすろきんぐ! かがくにんじゃたいがっちゃまん"
@@ -58043,7 +58043,7 @@ SLPS-25510:
alignSprite: 1 # Fixes vertical lines.
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SLPS-25511:
name: "羅刹 -Alternative-"
name-sort: "らせつ -Alternative-"
@@ -58484,7 +58484,7 @@ SLPS-25586:
halfPixelOffset: 4 # Fixes post positioning.
nativeScaling: 1 # Fixes post effects.
autoFlush: 2 # Fixes post lighting.
getSkipCount: "GSC_Tekken5" # Fixes upscaling grid, same engine.
getSkipCount: "GSC_NamcoGames" # Fixes upscaling grid, same engine.
SLPS-25587:
name: "シュガシュガルーン 恋もおしゃれもピックアップ!"
name-sort: "しゅがしゅがるーん こいもおしゃれもぴっくあっぷ!"
@@ -61222,7 +61222,7 @@ SLPS-73223:
alignSprite: 1 # Fixes vertical lines.
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SLPS-73224:
name: "ゼノサーガ エピソードⅡ [善悪の彼岸] [PlayStation2 the Best] [ディスク1/2]"
name-sort: "ぜのさーが えぴそーど2 ぜんあくのひがん [PlayStation2 the Best] [でぃすく1/2]"
@@ -61522,7 +61522,7 @@ SLPS-73252:
halfPixelOffset: 4 # Fixes post positioning.
nativeScaling: 1 # Fixes post effects.
autoFlush: 2 # Fixes post lighting.
getSkipCount: "GSC_Tekken5" # Fixes upscaling grid, same engine.
getSkipCount: "GSC_NamcoGames" # Fixes upscaling grid, same engine.
SLPS-73253:
name: "るろうに剣心-明治剣客浪漫譚- 炎上!京都輪廻 [PlayStation2 the Best]"
name-sort: "るろうにけんしん めいじけんかくろまんたん えんじょう きょうとりんね [PlayStation2 the Best]"
@@ -67249,7 +67249,7 @@ SLUS-21059:
alignSprite: 1 # Fixes vertical lines.
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SLUS-21060:
name: "WWE SmackDown! vs. RAW"
region: "NTSC-U"
@@ -67801,7 +67801,7 @@ SLUS-21160:
alignSprite: 1 # Fixes vertical lines.
halfPixelOffset: 4 # Align post.
nativeScaling: 1 # Fixes depth of field effect.
getSkipCount: "GSC_Tekken5"
getSkipCount: "GSC_NamcoGames"
SLUS-21161:
name: "Fight Night Round 2"
region: "NTSC-U"
@@ -69387,7 +69387,7 @@ SLUS-21386:
halfPixelOffset: 4 # Fixes post positioning.
nativeScaling: 1 # Fixes post effects.
autoFlush: 2 # Fixes post lighting.
getSkipCount: "GSC_Tekken5" # Fixes upscaling grid, same engine.
getSkipCount: "GSC_NamcoGames" # Fixes upscaling grid, same engine.
SLUS-21387:
name: "Warship Gunner 2"
region: "NTSC-U"

View File

@@ -1749,7 +1749,7 @@
- hashes:
- md5: f95ea9eb021181b888229df60ba8effd
size: 2159050752
name: Shadow the Hedgehog (Europe, Australia) (En,Fr,De,Es,It)
name: Shadow the Hedgehog (Europe, Australia) (En,Ja,Fr,De,Es,It)
serial: SLES-53542
version: '1.01'
- hashes:
@@ -8524,7 +8524,7 @@
- hashes:
- md5: ce030f48dcb588682902b5a569baa24e
size: 4677795840
name: 007 - Quantum of Solace (USA)
name: 007 - Quantum of Solace (USA) (En,Fr)
serial: SLUS-21813
version: '1.00'
- hashes:
@@ -8620,7 +8620,7 @@
- hashes:
- md5: c15a1707d1c89728e0c596b97ba91b27
size: 4313153536
name: Official PlayStation 2 Magazine Sonderausgabe 2004-3 (Germany) (En,Fr,De,Es,It)
name: Official PlayStation 2 Magazine - Special Edition 2004-03 (Germany) (En,Fr,De,Es,It)
serial: SCED-52997
version: '1.00'
- hashes:
@@ -8854,7 +8854,7 @@
- hashes:
- md5: fab56e6f617b0a64ad35221341bd167c
size: 3529965568
name: Rock Band - Metal Track Pack (USA)
name: Rock Band - Metal Track Pack (USA, Canada)
serial: SLUS-21889
version: '1.00'
- hashes:
@@ -9753,7 +9753,7 @@
- hashes:
- md5: 63d3e8e5da0305650160bc50f46df87b
size: 4033478656
name: Fight Night Round 3 (Europe) (En,Fr)
name: Fight Night Round 3 (Europe, Australia) (En,Fr)
serial: SLES-53982
version: '1.00'
- hashes:
@@ -13331,7 +13331,7 @@
- hashes:
- md5: aac303724ce688c8f242245ea0f4b9e4
size: 877953024
name: Tokyo Bus Guide - Kyou kara Kimi mo Untenshu (Japan)
name: SuperLite 2000 Vol. 5 - Tokyo Bus Guide - Kyou kara Kimi mo Untenshu (Japan)
serial: SLPM-65032
version: '1.04'
- hashes:
@@ -15880,7 +15880,7 @@
- hashes:
- md5: 29e5cf458549ca5321dd0c12619a002b
size: 3846504448
name: Bakugan - Battle Brawlers (USA)
name: Bakugan - Battle Brawlers (USA) (En,Fr)
serial: SLUS-21902
version: '1.00'
- hashes:
@@ -20525,7 +20525,7 @@
- hashes:
- md5: 2e7fcee5a1333b72eef8a18c7a673e9f
size: 8539766784
name: Guitar Hero - Metallica (USA)
name: Guitar Hero - Metallica (USA) (En,Fr)
serial: SLUS-21843
version: '1.00'
- hashes:
@@ -20868,7 +20868,7 @@
- hashes:
- md5: 35d939b30458790cf58ddd16ef11e159
size: 697149264
name: Online Start-Up Disc 4.0 - Broadband Only (USA)
name: Online Start-Up Disc 4.0 - Broadband Only (USA) (v1.02)
serial: PBPX-95248
version: '1.02'
- hashes:
@@ -21320,8 +21320,7 @@
- hashes:
- md5: 4f18266ee64804fc1ba858c5d5bee759
size: 3782836224
name: Official PlayStation 2 Magazine Germany Special Edition 01-2004 (Germany)
(En,Fr,De,Es,It)
name: Official PlayStation 2 Magazine - Special Edition 2004-01 (Germany) (En,Fr,De,Es,It)
serial: SCED-52119
version: '1.01'
- hashes:
@@ -21764,7 +21763,7 @@
- hashes:
- md5: e6159c29d23cd03252e94823045b4ff8
size: 4071424000
name: DJ Hero (USA)
name: DJ Hero (USA) (En,Fr)
serial: SLUS-21909
version: '1.00'
- hashes:
@@ -22190,7 +22189,7 @@
- hashes:
- md5: 007f0ccc933f59b65f28c72ad227843d
size: 4580573184
name: Score International Baja 1000 - World Championship Off Road Racing (Europe)
name: SCORE International Baja 1000 - World Championship Off Road Racing (Europe)
serial: SLES-55295
version: '1.00'
- hashes:
@@ -22862,7 +22861,7 @@
- hashes:
- md5: cadce0add00903396577b5d53cff1929
size: 4679565312
name: Marvel Super Hero Squad (USA)
name: Marvel Super Hero Squad (USA) (En,Fr,Es)
serial: SLUS-21910
version: '1.00'
- hashes:
@@ -22946,7 +22945,7 @@
- hashes:
- md5: 77ae418d710142291b5d6eb5d5d904d1
size: 3007021056
name: Buzz! The Schools Quiz (Europe)
name: Buzz! The Schools Quiz (UK) (v2.00)
serial: SCES-54941
version: '2.00'
- hashes:
@@ -30411,7 +30410,7 @@
- hashes:
- md5: 01abdbe56de95af5b5379cf7fea1bec0
size: 3683680256
name: Ratchet & Clank 2 - Gagaga! Ginga no Commando-ssu (Japan, Asia)
name: Ratchet & Clank 2 - Gagaga! Ginga no Commando ssu (Japan, Asia)
serial: SCAJ-20052
version: '1.00'
- hashes:
@@ -32035,7 +32034,7 @@
- hashes:
- md5: 47e03c7b246239330d5e41efb5160fda
size: 1328939008
name: Nickelodeon Bob L'eponge - Silence on Tourne! (France)
name: Nickelodeon Bob L'eponge - Silence on Tourne ! (France)
serial: SLES-53495
version: '1.00'
- hashes:
@@ -33603,19 +33602,19 @@
- hashes:
- md5: ac71dddc4a60475a689fcb6f1836e607
size: 4307582976
name: Buzz! The Big Quiz (Europe) (En,Fr,Nl)
name: Buzz! The Big Quiz (Belgium, Netherlands) (En,Fr,Nl)
serial: SCES-53925
version: '1.00'
- hashes:
- md5: 0f457023f2a436d38a0cd53599115846
size: 4611080192
name: Buzz! The Mega Quiz (Europe) (En,Fr,Nl)
name: Buzz! The Mega Quiz (Belgium, Netherlands) (En,Fr,Nl)
serial: SCES-54505
version: '1.00'
- hashes:
- md5: 409302dffc2512d1ccd2227d17ff6bf2
size: 4688314368
name: Buzz! The Pop Quiz (Europe) (En,Fr,Nl)
name: Buzz! The Pop Quiz (Belgium, Netherlands) (En,Fr,Nl)
serial: SCES-55098
version: '1.00'
- hashes:
@@ -34577,7 +34576,7 @@
- hashes:
- md5: 4703eb006c9921927145c878acd7324c
size: 3536748544
name: Buzz! The Sports Quiz (Europe) (En,Fr,Nl)
name: Buzz! The Sports Quiz (Belgium, Netherlands) (En,Fr,Nl)
serial: SCES-54265
version: '1.00'
- hashes:
@@ -36547,7 +36546,7 @@
- hashes:
- md5: fa7523e49dc9825589504430857c5c25
size: 564202464
name: LEGO Island Xtreme Stunts (USA)
name: Island Xtreme Stunts (USA)
serial: SLUS-20575
version: '1.01'
- hashes:
@@ -38437,7 +38436,7 @@
- hashes:
- md5: 06553f511a16b8cc0396bab31cc910a6
size: 2924576768
name: DreamWorks Madagascar - Escape 2 Africa (USA)
name: DreamWorks Madagascar - Escape 2 Africa (USA) (En,Fr)
serial: SLUS-21840
version: '1.01'
- hashes:
@@ -39061,7 +39060,7 @@
- hashes:
- md5: cc5e862a633532654176096888dfacba
size: 2679865344
name: PES 2011 - Pro Evolution Soccer (USA)
name: PES 2011 - Pro Evolution Soccer (USA) (En,Fr,Es,Pt)
serial: SLUS-21942
version: '1.00'
- hashes:
@@ -39355,7 +39354,7 @@
- hashes:
- md5: 298ad8520c82f4edbaacb3194bc46d5c
size: 3530391552
name: PES 2010 - Pro Evolution Soccer (USA)
name: PES 2010 - Pro Evolution Soccer (USA) (En,Fr,Es,Pt)
serial: SLUS-21918
version: '1.02'
- hashes:
@@ -39421,7 +39420,7 @@
- hashes:
- md5: 491a3f6a39ce290de2f6dbb9ba98575f
size: 2129297408
name: PES 2013 - Pro Evolution Soccer (USA)
name: PES 2013 - Pro Evolution Soccer (USA) (En,Fr,Es,Pt)
serial: SLUS-21955
version: '1.00'
- hashes:
@@ -39433,7 +39432,7 @@
- hashes:
- md5: b2d139590f169442a46d21ed2f8558ab
size: 2437316608
name: PES 2012 - Pro Evolution Soccer (USA)
name: PES 2012 - Pro Evolution Soccer (USA) (En,Fr,Es,Pt)
serial: SLUS-21948
version: '1.00'
- hashes:
@@ -39511,7 +39510,7 @@
- hashes:
- md5: 6821bded97877694e8cf4ccf9ca64ad4
size: 4659347456
name: Vitamin Z - Welcome Our New Supplement Boys (Japan) (Genteiban)
name: VitaminZ - Welcome Our New Supplement Boys (Japan) (Genteiban)
serial: SLPS-25922
version: '1.02'
- hashes:
@@ -39770,7 +39769,7 @@
- hashes:
- md5: 6f2533c2ae433f1beac4f1aa3a88f4c6
size: 4588797952
name: AND 1 Streetball (USA) (v1.03)
name: AND 1 Streetball (USA) (En,Fr,Es) (v1.03)
serial: SLUS-21237
version: '1.03'
- hashes:
@@ -39902,7 +39901,7 @@
- hashes:
- md5: 2d3dd4cd0d8c16e97a1a887b70349658
size: 4636672000
name: Score International Baja 1000 - The Official Game (USA)
name: SCORE International Baja 1000 - The Official Game (USA)
serial: SLUS-21850
version: '1.00'
- hashes:
@@ -40463,7 +40462,7 @@
- md5: 08a63db4f248acdc24cdaa0b9507b854
size: 2205908992
name: Umishou (Japan)
serial: SLPM-66864
serial: FVGK-0001
version: '1.01'
- hashes:
- md5: d3b19450aea4a9688e876fa71830aa77
@@ -40745,7 +40744,7 @@
- hashes:
- md5: 9be1477e6c0bd67bb6aff3a02601b4a6
size: 1534427136
name: Freaky Flyers (USA) (Demo)
name: Freaky Flyers (USA) (Demo) (Rev 1)
serial: SLUS-29061
version: '0.30'
- hashes:
@@ -41497,7 +41496,7 @@
- hashes:
- md5: 6dc613680039ba59d20f8baa61e56fc5
size: 739706352
name: Momotarou Dentetsu 11 - Black Bombee Shutsugen! no Maki (Japan)
name: Momotarou Dentetsu 11 - Black Bonby Shutsugen! no Maki (Japan)
serial: SLPM-62475
version: '1.01'
- hashes:
@@ -44241,7 +44240,7 @@
- md5: 34d981b3883eaeb95c82fbed14dcad26
size: 3115188224
name: Harukanaru Toki no Naka de 3 (Japan) (History Box)
serial: SLPM-66005
serial: SLPM-65849
version: '1.02'
- hashes:
- md5: d8ecac6d03a601d4a81f1389bfe25962
@@ -45207,13 +45206,13 @@
- hashes:
- md5: 29a454ebd230549939654022af5db917
size: 4107206656
name: Vitamin X - We are Super Supriment Boys (Japan)
name: VitaminX - We are Super Supriment Boys (Japan)
serial: SLPS-25761
version: '1.01'
- hashes:
- md5: 19cc959d502b7eebae156ee760731454
size: 4659347456
name: Vitamin Z - Welcome Our New Supplement Boys (Japan)
name: VitaminZ - Welcome Our New Supplement Boys (Japan)
serial: SLPS-25923
version: '1.02'
- hashes:
@@ -46244,7 +46243,7 @@
- hashes:
- md5: ecb21ce06339ab6b628e077f3c03690b
size: 3962535936
name: Suigetsu - Mayoi Gokoro (Japan)
name: Suigetsu - Mayoigokoro (Japan)
serial: SLPM-65751
version: '1.01'
- hashes:
@@ -47270,7 +47269,7 @@
- hashes:
- md5: 68634f9b74fe47e4a039ada615970ca1
size: 541969008
name: Momotarou Dentetsu 15 - Godai Bombee Toujou! no Maki (Japan) (v2.00)
name: Momotarou Dentetsu 15 - Godai Bonby Toujou! no Maki (Japan) (v2.00)
serial: SLPM-74104
version: '2.00'
- hashes:
@@ -49343,8 +49342,7 @@
- hashes:
- md5: 72e49d4201496dea3e0851abf58098cf
size: 4677992448
name: Official PlayStation 2 Magazine Germany Special Edition 2003-01 (Germany)
(En,De)
name: Official PlayStation 2 Magazine - Special Edition 2003-01 (Germany) (En,De)
serial: SCED-51512
version: '1.00'
- hashes:
@@ -49422,7 +49420,7 @@
- hashes:
- md5: aa26f473fc9ecf2df7fad3a9acc30351
size: 3115188224
name: Harukanaru Toki no Naka de 3 (Japan) (Triple Pack)
name: Harukanaru Toki no Naka de 3 (Japan) (Premium Box)
serial: SLPM-65850
version: '1.02'
- hashes:
@@ -51309,12 +51307,6 @@
name: Magazine Ufficiale PlayStation 2 Demo Italia 05-2006 (Italy) (En,Fr,De,Es,It)
serial: SCED-54180
version: '1.00'
- hashes:
- md5: 0b14951eb38e4f5f4730bcf48bf64898
size: 4569923584
name: Magazine Ufficiale PlayStation 2 Italia 05-04 (Italy) (En,Fr,De,Es,It)
serial: SCED-52443
version: '1.00'
- hashes:
- md5: 771bfe48ce1a10c8a638da8bedc9acf6
size: 4175429632
@@ -51698,13 +51690,13 @@
- hashes:
- md5: cf45002cd37168e4a2b3a8f96c560941
size: 3983638528
name: Official PlayStation 2 Magazine Germany Special 2-2005 (Germany)
name: Official PlayStation 2 Magazine - Special Edition 2005-02 (Germany)
serial: SCED-53662
version: '1.00'
- hashes:
- md5: 8191fa8441cd8c947ab80b9db6de0ce3
size: 4583129088
name: Official PlayStation 2 Magazine Germany Special 3-2005 (Germany)
name: Official PlayStation 2 Magazine - Special Edition 2005-03 (Germany)
serial: SCED-53938
version: '1.00'
- hashes:
@@ -51818,7 +51810,7 @@
- hashes:
- md5: 8e18b5399008416a7d012f2ea1bf9353
size: 663976656
name: Pro Evolution Soccer 3 (Europe) (Demo 1)
name: Pro Evolution Soccer 3 (UK) (Demo)
serial: SLED-51992
version: '1.00'
- hashes:
@@ -51950,7 +51942,7 @@
- hashes:
- md5: 209c4247ffb84795b23ce2cec0f090a4
size: 3793453056
name: Official PlayStation 2 Magazine Germany Special Edition 2003-03 (Germany)
name: Official PlayStation 2 Magazine - Special Edition 2003-03 (Germany)
serial: SCED-51551
version: '1.00'
- hashes:
@@ -52038,7 +52030,7 @@
- hashes:
- md5: e8e5b428c642c78d510cbd854c17b9cc
size: 1616740352
name: Primal + The Mark of Kri + War of the Monsters (Europe) (En,Fr,De,Es,It)
name: Primal & The Mark of Kri & War of the Monsters (Europe) (En,Fr,De,Es,It)
serial: SCED-51506
version: '1.00'
- hashes:
@@ -52350,7 +52342,7 @@
- hashes:
- md5: d42eed1d14cdaf8add8295116776a447
size: 3765108736
name: Best PS2 Games Ever 10 (Europe)
name: Official PlayStation 2 Magazine-UK Special Edition - Yearbook 2002 (Europe)
serial: SCED-51389
version: '1.00'
- hashes:
@@ -52637,7 +52629,7 @@
- hashes:
- md5: cded45ee044b5a7614644fa444a59989
size: 4334157824
name: Official PlayStation 2 Magazine Germany Special Edition 2003-02 (Germany)
name: Official PlayStation 2 Magazine - Special Edition 2003-02 (Germany)
serial: SCED-51549
version: '1.01'
- hashes:
@@ -53111,7 +53103,7 @@
- hashes:
- md5: f309b4b48dc775dbbde635a1ef3b662b
size: 4522639360
name: Germany Special Issue 3 (Germany)
name: Official PlayStation 2 Magazine - Special Edition 3 (Germany)
serial: SCED-51375
version: '1.00'
- hashes:
@@ -54054,7 +54046,7 @@
- hashes:
- md5: ac5b76bd39b0cabd1acfe4dcb08df502
size: 1649803264
name: Primal + The Mark of Kri (Europe)
name: Primal & The Mark of Kri (Europe)
serial: SCED-51491
version: '1.00'
- hashes:
@@ -54085,7 +54077,7 @@
- hashes:
- md5: 2475b61666f06dc2aa9ca032f15a4cde
size: 4241293312
name: Official PlayStation 2 Magazine Germany Special Edition 2007-1 (Germany)
name: Official PlayStation 2 Magazine - Special Edition 2007-01 (Germany)
serial: SCED-54693
version: '1.02'
- hashes:
@@ -54462,7 +54454,7 @@
- hashes:
- md5: 97a9156abd199f588d4f46e9af7ab5a7
size: 4107206656
name: Vitamin X - We are Super Supriment Boys (Japan) (Genteiban)
name: VitaminX - We are Super Supriment Boys (Japan) (Genteiban)
serial: SLPS-25760
version: '1.01'
- hashes:
@@ -54767,7 +54759,7 @@
- hashes:
- md5: a4b5b1d6c13c15bc1bac6fc63622c9ee
size: 2925920256
name: Ever 17 - The Out of Infinity Premium Edition (Japan)
name: Ever 17 - The Out of Infinity - Premium Edition (Japan)
serial: SLPM-65421
version: '1.01'
- hashes:
@@ -55910,7 +55902,7 @@
- hashes:
- md5: 05b210d50d92a418ac1e37a1fff0df8a
size: 243996480
name: Giant Robo - The Animation - Chikyuu ga Seishi suru Hi (Japan)
name: Giant Robo - The Animation - Chikyuu ga Seishi Suru Hi (Japan)
serial: SLPM-62526
version: '1.02'
- hashes:
@@ -56111,7 +56103,7 @@
- hashes:
- md5: 45d62f1cf862b8e6c47d373a5c55d2f2
size: 708511776
name: Pro Evolution Soccer 4 (Europe) (Demo)
name: Pro Evolution Soccer 4 (UK) (Demo)
serial: SLED-52873
version: '1.02'
- hashes:
@@ -56171,7 +56163,7 @@
- hashes:
- md5: 139585af1bf276d5f2e17a32def4f66d
size: 4528504832
name: Official PlayStation 2 Magazine Germany Special Edition 1 (Germany)
name: Official PlayStation 2 Magazine - Special Edition 1 (Germany)
serial: SCED-50780
version: '1.10'
- hashes:
@@ -57668,7 +57660,7 @@
- hashes:
- md5: 1ce4a9368f7c6c73dcd983ad5f86f3eb
size: 718702992
name: MaxPlay (Europe) (Unl)
name: Max Play (Europe) (Unl)
version: 1.00 (European)
- hashes:
- md5: 8182f27cc5a0cac14da217e45861e49e
@@ -57841,8 +57833,7 @@
- hashes:
- md5: 4fb718d2059a1843882a70b17922b483
size: 4613996544
name: Official PlayStation 2 Magazine Germany Special Edition 2005-01 (Germany)
(En,De)
name: Official PlayStation 2 Magazine - Special Edition 2005-01 (Germany) (En,De)
serial: SCED-53298
version: '1.02'
- hashes:
@@ -57854,7 +57845,7 @@
- hashes:
- md5: 739a2f519751c64f7291d036105c2c0d
size: 1670316032
name: Buzz! Junior - Robojam (Europe) (Beta) (2007-01-12)
name: Buzz! Junior - RoboJam (Europe) (Beta) (2007-01-12)
serial: SCES-54676
version: '1.00'
- hashes:
@@ -58392,7 +58383,7 @@
- hashes:
- md5: 6969a8f3623387131e2e1d49fff4c3f5
size: 4492853248
name: Magical Tale - Chiicha na Mahoutsukai (Japan)
name: Magical Tale - Chitcha na Mahoutsukai (Japan)
serial: SLPM-65965
version: '1.01'
- hashes:
@@ -59340,7 +59331,7 @@
- hashes:
- md5: 8d61b97a6dd45165b012b338d42e53a8
size: 2358018048
name: Harry Potter and the Prisoner of Azkaban (Korea)
name: Harry Potter-wa Azkaban-ui Joesu (Korea)
serial: SLKA-25172
version: '1.01'
- hashes:
@@ -59646,7 +59637,7 @@
- hashes:
- md5: 1162e6411d9e16fbefc9fd8a9e886d70
size: 4412145664
name: Official PlayStation 2 Magazine Germany Winter 2006 (Germany) (En,De)
name: Official PlayStation 2 Magazine - Winter 2006 (Germany) (En,De)
serial: SCED-54558
version: '1.00'
- hashes:
@@ -60504,7 +60495,7 @@
- hashes:
- md5: 78f327cd6c0f2bd6f99a299e982b9a93
size: 1253867520
name: TOCA Race Driver 3 + V8 Supercars Australia 3 (Australia) (Demo)
name: TOCA Race Driver 3 (Australia) (Demo)
serial: SLED-53888
version: '1.00'
- hashes:
@@ -60764,7 +60755,7 @@
- hashes:
- md5: 7e964b27119adc590228452d42c634b0
size: 4614062080
name: Buzz! Hollywood Quiz (Europe) (En,Fr,Nl)
name: Buzz! Hollywood Quiz (Belgium, Netherlands) (En,Fr,Nl)
serial: SCES-54854
version: '1.00'
- hashes:
@@ -62041,7 +62032,7 @@
- hashes:
- md5: dd5ccdc3e325716d7f7ed08a9836f3f0
size: 3938189312
name: PlayStation 2 Revista Oficial - Portugal 9 (Portugal)
name: Official PlayStation 2 Magazine Demo 32 (Portugal)
serial: SCED-51657
version: '1.00'
- hashes:
@@ -62487,7 +62478,7 @@
- hashes:
- md5: fe79ea717184a278802679ef78f6df7b
size: 7774928896
name: Zhen San Guo Wu Shuang 5 Special (Taiwan)
name: Zhen Sanguo Wushuang 5 Special (Taiwan)
serial: SLAJ-35007
version: '1.00'
- hashes:
@@ -63024,7 +63015,7 @@
- hashes:
- md5: 18e6281d238ccb19e8975d45e8c157f0
size: 3816554496
name: Offizielle PlayStation 2 Magazin 02-2004, Das - Uncut Edition (Germany)
name: Official PlayStation 2 Magazine 02-2004 - Uncut Edition (Germany)
serial: SCED-52082
version: '1.01'
- hashes:
@@ -63141,7 +63132,7 @@
- hashes:
- md5: d38ab694e14843f16af11a15d1883023
size: 4677795840
name: Koi suru Otome to Shugo no Tate - The Shield of AIGIS (Japan)
name: Koi Suru Otome to Shugo no Tate - The Shield of AIGIS (Japan)
serial: SLPM-55098
version: '1.02'
- hashes:
@@ -63554,7 +63545,7 @@
- hashes:
- md5: 3acdf0ae8cc67fe9e0db9f4707cb3905
size: 2638381056
name: I Love Baseball - Pro Yakyuu o Koyonaku Ai suru Hitotachi e (Japan)
name: I Love Baseball - Pro Yakyuu o Koyonaku Ai Suru Hitotachi e (Japan)
serial: SLPM-65633
version: '1.04'
- hashes:
@@ -63941,13 +63932,13 @@
- hashes:
- md5: 7ea2da0f39ae55794fd9fd5006b417cc
size: 4446388224
name: Offizielle PlayStation 2 Magazin 09-2004, Das (Germany)
name: Official PlayStation 2 Magazine 09-2004 (Germany)
serial: SCED-52089
version: '1.02'
- hashes:
- md5: 11b80bd02a0a874212b014c56e44a4c5
size: 4033347584
name: Offizielle PlayStation 2 Magazin 12-2003, Das (Germany)
name: Official PlayStation Magazine 12-2003 (Germany)
serial: SCED-51936
version: '1.00'
- hashes:
@@ -64181,7 +64172,7 @@
- hashes:
- md5: 8990d1c3b88b04b1bbc7a78ee3e9df2f
size: 33821760
name: Karat PS2-you Pro Action Replay 2 Taikenban (Japan) (Unl)
name: Karat PS2-you Pro Action Replay 2 Taikenban (Japan) (Unl) (Rev 1)
version: '1.7'
- hashes:
- md5: 4a2754811946ef9badbbd872f541a03f
@@ -64254,7 +64245,7 @@
- hashes:
- md5: 0e35e8fd22fe57f8727b9764685bbc29
size: 3871703040
name: Offizielle PlayStation 2 Magazin, Das - Special Edition 2 (Germany)
name: Official PlayStation 2 Magazine - Special Edition 2 (Germany)
serial: SCED-51161
version: '1.00'
- hashes:
@@ -64563,7 +64554,7 @@
- hashes:
- md5: 477eb508b08f59386478908e481eb8a1
size: 4519690240
name: Official PlayStation 2 Magazine - German Kids Special (Germany) (En,De)
name: Official PlayStation 2 Magazine - Kids Special (Germany) (En,De)
serial: SCED-53611
version: '1.00'
- hashes:
@@ -64580,7 +64571,7 @@
- hashes:
- md5: ac9cb481855792415314e06e5c12b291
size: 664183632
name: Pro Evolution Soccer 3 (Europe) (Demo 2)
name: Pro Evolution Soccer 3 (Europe) (Demo)
serial: SLED-51994
version: '1.00'
- hashes:
@@ -65185,7 +65176,7 @@
- hashes:
- md5: 86af0c99c8a8566e5f9307110f339e20
size: 364475328
name: Monopoly - Mezase!! Daifugou Jinsei!! (Japan)
name: Monopoly - Mezase!! Daifugou Jinsei!! (Japan) (v2.00)
serial: SLPS-20281
version: '2.00'
- hashes:
@@ -66352,7 +66343,7 @@
- hashes:
- md5: ff59d561b843dbbb940c631d53294d63
size: 1552318464
name: Monsterspass (Austria, Switzerland) (En,Fr,De,Es,It,Nl,Pt)
name: Monsterspass (Austria) (En,Fr,De,Es,It,Nl,Pt)
serial: SCES-54704
version: '1.00'
- hashes:
@@ -66436,7 +66427,7 @@
- hashes:
- md5: 79fc6bc53ff748088a36d2f6778d0a0b
size: 1943797760
name: Big! Sports Quiz, The (Austria, Switzerland)
name: Big! Sports Quiz, The (Austria)
serial: SCES-54526
version: '1.00'
- hashes:
@@ -66803,7 +66794,7 @@
- hashes:
- md5: 91450691bed8af904b291c4d86c0c338
size: 1645182976
name: Jungle Party (Austria, Switzerland)
name: Jungle Party (Austria)
serial: SCES-54524
version: '1.01'
- hashes:
@@ -66934,7 +66925,7 @@
- hashes:
- md5: 777cd430a73b95945cee679a27446eed
size: 2297200640
name: Disney-Pixar Finding Nemo (Korea)
name: Disney-Pixar Nemo-reul Chajaseo (Korea)
serial: SLKA-25056
version: '1.00'
- hashes:
@@ -68550,7 +68541,7 @@
- hashes:
- md5: 5b315096f6bfc1897e52fec9c877b81d
size: 4250206208
name: Offizielle PlayStation 2 Magazin 13-2003, Das - Uncut Edition (Germany)
name: Official PlayStation 2 Magazine 13-2003 - Uncut Edition (Germany)
serial: SCED-51937
version: '1.00'
- hashes:
@@ -69278,7 +69269,7 @@
- hashes:
- md5: 6905874bbb6167417bac324464d70d28
size: 541969008
name: Momotarou Dentetsu 15 - Godai Bombee Toujou! no Maki (Japan) (v1.01)
name: Momotarou Dentetsu 15 - Godai Bonby Toujou! no Maki (Japan) (v1.01)
serial: SLPM-62702
version: '1.01'
- hashes:
@@ -69326,7 +69317,7 @@
- hashes:
- md5: 950783ce0723d41ff7aa46659a6eafbc
size: 4492853248
name: Magical Tale - Chiicha na Mahoutsukai (Japan) (Shokai Genteiban)
name: Magical Tale - Chitcha na Mahoutsukai (Japan) (Shokai Genteiban)
serial: SLPM-65964
version: '1.01'
- hashes:
@@ -69341,3 +69332,240 @@
name: Quilt - Anata to Tsumugu Yume to Koi no Dress (Japan)
serial: SLPM-66735
version: '1.02'
- hashes:
- md5: ad64473c57824cf607cf40a7d85cf36c
size: 2300313600
name: Guitar Hero (USA) (Demo)
serial: SLUS-29177
version: '1.00'
- hashes:
- md5: 667607deb941380aa4d13db387b93077
size: 93254448
name: Codes Exclusifs (France) (Unl)
version: '1.00'
- hashes:
- md5: 589e37362d073b8ad52670cdd5664415
size: 1822326784
name: DearS (Japan) (Genteiban)
serial: SLPS-25371
version: '1.04'
- hashes:
- md5: 4afb874dc19e35051e79f7a881a584b4
size: 1524793344
name: Winning Post 6 - 2005-nendoban (Japan) (Premium Pack)
serial: SLPM-65893
version: '1.01'
- hashes:
- md5: 132ce8a9e16ca7ef5a356aa111bce318
size: 4354473984
name: Jak 3 (Europe) (En,Fr,De,Es,It,Pt,Ko,Ru) (Beta) (2004-09-14)
serial: SCES-52460
version: '1.00'
- hashes:
- md5: 6432d610b89d00eb1eea2ee71cf27147
size: 3007119360
name: Buzz! The Schools Quiz (UK) (v1.00)
serial: SCES-54941
version: '1.00'
- hashes:
- md5: 3c47093b42a1e1a39692b220e7659ad9
size: 4601774080
name: Big! Pop Quiz, The (Austria)
serial: SCES-55099
version: '1.00'
- hashes:
- md5: 859073451dbb344df7cee32703245ed5
size: 306380800
name: Freaky Flyers (USA) (Demo)
serial: SLUS-29051
version: '1.00'
- hashes:
- md5: 8d987ddccb1e2ec4c068896a4182bc4c
size: 1542029312
name: Tennis no Oujisama - Smash Hit! 2 (Japan) (Shokai SP Genteiban C-Type)
serial: SLPM-65453
version: '1.01'
- hashes:
- md5: b0a2a871249538d80b92e7ef837f20dd
size: 761692848
name: CD avec les Codes Action Replay Exclusivement pour le Jeu Enter the Matrix
(France)
version: 1.01 (European)
- hashes:
- md5: db0c13bd5bddb659d563b4e2c0fcd5e8
size: 226549344
name: Action Replay Ultimate Cheats for Use with Grand Theft Auto - Vice City (UK)
(Unl)
version: '1.30'
- hashes:
- md5: 7866eaffddb52bbf7375ab4deca20dd6
size: 33821760
name: Karat PS2-you Pro Action Replay 2 Taikenban (Japan) (Unl)
version: '1.7'
- hashes:
- md5: 76b15475cac6977f2510ea07d9b87043
size: 4348444672
name: Official PlayStation 2 Magazine - Special Edition 2006-01 (Germany)
serial: SCED-54034
version: '1.00'
- hashes:
- md5: c9f8be1699b50935c1e1989cd76bdbe1
size: 697118688
name: Online Start-Up Disc 4.0 - Broadband Only (USA) (v1.01)
serial: PBPX-95248
version: '1.01'
- hashes:
- md5: d7cfe2da9a3598cb10bc61abd2657acd
size: 3497885696
name: Big! Movie Quiz, The (Austria)
serial: SCES-54857
version: '1.00'
- hashes:
- md5: 875894a624cc3d7bc81311985b5eeff7
size: 549201408
name: Argus-ui Jeonsa (Korea) (Cheheompan)
serial: SCKA-90005
version: '1.00'
- hashes:
- md5: 7f3b5e111ca4c77039a1641fe2785423
size: 3271229440
name: Mai-Otome HiME - Otome Butoushi!! (Japan) (Limited Edition)
serial: SLPS-25680
version: '1.01'
- hashes:
- md5: 5626f8c491117a0924380c786ab7e458
size: 3049783296
name: Fire It Up Kids (Europe)
serial: SCED-53678
version: '1.00'
- hashes:
- md5: 7d6503407ba1ea104753be2bfe1283e3
size: 2560065536
name: Nickelodeon SpongeBob SquarePants - Movin' with Friends (Europe) (En,Fr,De,Es)
(Beta) (2004-10-29)
- hashes:
- md5: baf280135d74603e097a813d52e25afa
size: 707949648
name: Pro Evolution Soccer 4 (Europe) (Demo)
serial: SLED-52878
version: '1.03'
- hashes:
- md5: 1fa77218061839d6ac9b39159fa46680
size: 1249804288
name: SingStar Rocks! (Europe) (Demo)
serial: SCED-54086
version: '1.00'
- hashes:
- md5: 2d91ab06f6fc0f918c9389990df71a63
size: 1378156544
name: This Is Football 2004 (Belgium) (Demo)
serial: SCED-52321
version: '1.01'
- hashes:
- md5: 6917a832cf75177a18c4ef4499966ba4
size: 3448471552
name: Official PlayStation 2 Magazine Demo 10 (Spain)
serial: SCED-50406
- hashes:
- md5: e1615a414d9b561e70b395155edb7e39
size: 4697686016
name: Chaos Legion (Europe) (Demo)
serial: SLED-51808
version: '1.00'
- hashes:
- md5: 670fabe932a7ad8b81f6356d162cdac6
size: 4569923584
name: Magazine Ufficiale PlayStation 2 Italia 05-04 (Italy) (En,Fr,De,Es,It)
serial: SCED-52443
version: '1.00'
- hashes:
- md5: dd4dd82c735f0189b5cd91c0c5e4b327
size: 364472976
name: Monopoly - Mezase!! Daifugou Jinsei!! (Japan) (v1.04)
serial: SLPS-20281
version: '1.04'
- hashes:
- md5: 2be7a399436665d532383e9e6d21f7fb
size: 1632665600
name: Musashiden II - Blademaster (Japan) (Taikenban)
serial: SLPM-61117
version: '1.00'
- hashes:
- md5: 85f8dd4c84ac2fd97f4b154280c01910
size: 1239580672
name: Bratz - Rock Angelz (Denmark)
serial: SLES-53578
version: '1.00'
- hashes:
- md5: 36c27c981bfdd9f311ecc36da4ad7071
size: 598507520
name: Metal Gear Solid 2 - Sons of Liberty (Europe) (En,Fr,De) (Demo)
serial: SLED-50782
version: '1.00'
- hashes:
- md5: 626b946f71116a9ec455b41c0fb8aa3a
size: 2710274048
name: Bonus Demo 7 (15-16) (Europe)
serial: SCED-52437
version: '1.02'
- hashes:
- md5: 2696c838c64d0f7f0c86adc5bbc1f54a
size: 4292870144
name: Buzz! The Big Quiz (Switzerland) (Fr,De,It)
serial: SCES-54071
version: '1.00'
- hashes:
- md5: 865cb20ccc3b938879eb3cae955ab70c
size: 4598398976
name: Buzz! The Mega Quiz (Switzerland) (Fr,De,It)
serial: SCES-54506
version: '1.00'
- hashes:
- md5: f543c17d10aa576cc4ea74622a7050ee
size: 750130416
name: Code Breaker (USA) (Unl) (v4.0)
version: '4.0'
- hashes:
- md5: bae22925feb7587573b663cc83bc1eb3
size: 2719285248
name: Kaido Battle 2 - Chain Reaction (Korea)
serial: SLKA-25146
version: '1.02'
- hashes:
- md5: 92c7a59eb4650bbc8a429970640b871b
size: 748700400
name: Time Crisis II (Europe) (Demo)
serial: SCED-50473
version: '1.01'
- hashes:
- md5: fd46dd639a28f9f8ec7475f999d8b653
size: 2786852864
name: Call of Duty - World at War - Final Fronts (Korea)
serial: SLKA-25449
version: '1.00'
- hashes:
- md5: 41ccada9d75b88b20adf6db41349df52
size: 4511367168
name: Shijag-ui Ilbo All Stars (Korea)
serial: SLKA-25152
version: '1.01'
- hashes:
- md5: d46987283a22024d4b8e3e36c597035f
size: 4116643840
name: Fight Night Round 2 (Europe, Australia) (Demo)
serial: SLED-53126
version: '1.00'
- hashes:
- md5: 22a1b12df6fae4ecd8da5bed8cd91dd6
size: 4192600064
name: SOCOM 3 - U.S. Navy SEALs (USA) (Beta) (2005-09-08)
- hashes:
- md5: 3a04c1e3548d8169271336a73ae67e93
size: 566942544
name: Taz - Wanted (Europe) (2002-01-29)
version: Beta
- hashes:
- md5: ecb58db2de607ed68a215d052381a83b
size: 245814576
name: Taz - Wanted (Europe) (2001-05-31)
version: Beta

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

View File

@@ -1478,13 +1478,14 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
050000007e0500000720000001800000,Nintendo Switch Right Joy-Con,a:b1,b:b2,back:b9,leftshoulder:b4,leftstick:b10,leftx:a1~,lefty:a0,rightshoulder:b6,start:b8,x:b0,y:b3,platform:Linux,
05000000010000000100000003000000,Nintendo Wii Remote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
050000007e0500003003000001000000,Nintendo Wii U Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,platform:Linux,
050000005a1d00000218000003000000,Nokia GC 5000,a:b9,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,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
030000000d0500000308000010010000,Nostromo n45 Dual Analog,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b4,leftstick:b12,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b2,y:b3,platform:Linux,
030000007e0500001920000011810000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux,
030000007e0500001920000011810000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux,
050000007e0500001920000001000000,NSO N64 Controller,+rightx:b8,+righty:b7,-rightx:b3,-righty:b2,a:b1,b:b0,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,righttrigger:b10,start:b9,platform:Linux,
050000007e0500001920000001800000,NSO N64 Controller,+rightx:b10,+righty:b8,-rightx:b9,-righty:b7,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b3,lefttrigger:b2,leftx:a0,lefty:a1,misc1:b12,rightshoulder:b4,righttrigger:b5,start:b6,platform:Linux,
030000007e0500001720000011810000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
050000007e0500001920000001800000,NSO N64 Controller,+rightx:b2,+righty:b3,-rightx:b4,-righty:b10,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,misc1:b5,rightshoulder:b7,righttrigger:b9,start:b11,platform:Linux,
030000007e0500001720000011810000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
050000007e0500001720000001000000,NSO SNES Controller,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:b7,rightshoulder:b6,righttrigger:b8,start:b10,x:b3,y:b2,platform:Linux,
050000007e0500001720000001800000,NSO SNES Controller,a:b1,b:b0,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
050000007e0500001720000001800000,NSO SNES Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b3,y:b2,platform:Linux,
03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,platform:Linux,
03000000550900001472000011010000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,
05000000550900001472000001000000,NVIDIA Controller,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,misc1:b8,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,platform:Linux,

View File

@@ -160,10 +160,7 @@ float FxaaLuma(float4 rgba)
float4 FxaaPixelShader(float2 pos, FxaaTex tex, float2 fxaaRcpFrame, float fxaaSubpix, float fxaaEdgeThreshold, float fxaaEdgeThresholdMin)
{
float2 posM;
posM.x = pos.x;
posM.y = pos.y;
float2 posM = pos;
float4 rgbyM = FxaaTexTop(tex, posM);
rgbyM.w = RGBLuminance(rgbyM.xyz);
#define lumaM rgbyM.w
@@ -186,9 +183,10 @@ float4 FxaaPixelShader(float2 pos, FxaaTex tex, float2 fxaaRcpFrame, float fxaaS
float rangeMaxScaled = rangeMax * fxaaEdgeThreshold;
float rangeMaxClamped = max(fxaaEdgeThresholdMin, rangeMaxScaled);
bool earlyExit = range < rangeMaxClamped;
#if (FxaaEarlyExit == 1)
if(earlyExit) { return rgbyM; }
// Potential optimization, early exit.
if (range < rangeMaxClamped)
return rgbyM;
#endif
float lumaNW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1,-1), fxaaRcpFrame.xy));

View File

@@ -50,6 +50,32 @@ u64 GetPhysicalMemory()
return getmem;
}
u64 GetAvailablePhysicalMemory()
{
const mach_port_t host_port = mach_host_self();
vm_size_t page_size;
// Get the system's page size.
if (host_page_size(host_port, &page_size) != KERN_SUCCESS)
return 0;
vm_statistics64_data_t vm_stat;
mach_msg_type_number_t host_size = sizeof(vm_statistics64_data_t) / sizeof(integer_t);
// Get system memory statistics.
if (host_statistics64(host_port, HOST_VM_INFO, reinterpret_cast<host_info64_t>(&vm_stat), &host_size) != KERN_SUCCESS)
return 0;
// Get the number of free and inactive pages.
const u64 free_pages = static_cast<u64>(vm_stat.free_count);
const u64 inactive_pages = static_cast<u64>(vm_stat.inactive_count);
// Calculate available memory.
const u64 get_available_mem = (free_pages + inactive_pages) * page_size;
return get_available_mem;
}
static mach_timebase_info_data_t s_timebase_info;
static const u64 tickfreq = []() {
if (mach_timebase_info(&s_timebase_info) != KERN_SUCCESS)

View File

@@ -181,10 +181,7 @@ private:
extern u64 GetTickFrequency();
extern u64 GetCPUTicks();
extern u64 GetPhysicalMemory();
#ifdef _WIN32
// TODO: Someone do linux/mac.
extern u64 GetAvailablePhysicalMemory();
#endif
/// Spin for a short period of time (call while spinning waiting for a lock)
/// Returns the approximate number of ns that passed
extern u32 ShortSpin();

View File

@@ -15,6 +15,7 @@
#include <dbus/dbus.h>
#include <spawn.h>
#include <sys/sysinfo.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <unistd.h>
@@ -40,6 +41,49 @@ u64 GetPhysicalMemory()
return pages * getpagesize();
}
u64 GetAvailablePhysicalMemory()
{
// Try to read MemAvailable from /proc/meminfo.
FILE* file = fopen("/proc/meminfo", "r");
if (file)
{
u64 mem_available = 0;
u64 mem_free = 0, buffers = 0, cached = 0, sreclaimable = 0, shmem = 0;
char line[256];
while (fgets(line, sizeof(line), file))
{
// Modern kernels provide MemAvailable directly - preferred and most accurate.
if (sscanf(line, "MemAvailable: %llu kB", &mem_available) == 1)
{
fclose(file);
return mem_available * _1kb;
}
// Fallback values for manual approximation.
sscanf(line, "MemFree: %llu kB", &mem_free);
sscanf(line, "Buffers: %llu kB", &buffers);
sscanf(line, "Cached: %llu kB", &cached);
sscanf(line, "SReclaimable: %llu kB", &sreclaimable);
sscanf(line, "Shmem: %llu kB", &shmem);
}
fclose(file);
// Fallback approximation: Linux-like heuristic.
// available = MemFree + Buffers + Cached + SReclaimable - Shmem.
const u64 available_kb = mem_free + buffers + cached + sreclaimable - shmem;
return available_kb * _1kb;
}
// Fallback to sysinfo if /proc/meminfo couldn't be read.
struct sysinfo info = {};
if (sysinfo(&info) != 0)
return 0;
// Note: This does NOT include cached memory - only free + buffer.
return (static_cast<u64>(info.freeram) + static_cast<u64>(info.bufferram)) * static_cast<u64>(info.mem_unit);
}
u64 GetTickFrequency()
{
return 1000000000; // unix measures in nanoseconds

View File

@@ -42,6 +42,7 @@ BreakpointDialog::BreakpointDialog(QWidget* parent, DebugInterface* cpu, Breakpo
m_ui.rdoExecute->setChecked(true);
m_ui.chkEnable->setChecked(bp->enabled);
m_ui.txtAddress->setText(QtUtils::FilledQStringFromValue(bp->addr, 16));
m_ui.txtDescription->setText(QString::fromStdString(bp->description));
if (bp->hasCond)
m_ui.txtCondition->setText(QString::fromStdString(bp->cond.expressionString));
@@ -53,6 +54,8 @@ BreakpointDialog::BreakpointDialog(QWidget* parent, DebugInterface* cpu, Breakpo
m_ui.txtAddress->setText(QtUtils::FilledQStringFromValue(mc->start, 16));
m_ui.txtSize->setText(QtUtils::FilledQStringFromValue(mc->end - mc->start, 16));
m_ui.txtDescription->setText(QString::fromStdString(mc->description));
m_ui.chkRead->setChecked(mc->memCond & MEMCHECK_READ);
m_ui.chkWrite->setChecked(mc->memCond & MEMCHECK_WRITE);
m_ui.chkChange->setChecked(mc->memCond & MEMCHECK_WRITE_ONCHANGE);
@@ -102,6 +105,7 @@ void BreakpointDialog::accept()
}
bp->addr = address;
bp->description = m_ui.txtDescription->text().toStdString();
bp->enabled = m_ui.chkEnable->isChecked();
@@ -138,6 +142,7 @@ void BreakpointDialog::accept()
mc->start = startAddress;
mc->end = startAddress + size;
mc->description = m_ui.txtDescription->text().toStdString();
if (!m_ui.txtCondition->text().isEmpty())
{

View File

@@ -10,7 +10,7 @@
<x>0</x>
<y>0</y>
<width>375</width>
<height>250</height>
<height>300</height>
</rect>
</property>
<property name="sizePolicy">
@@ -22,19 +22,19 @@
<property name="minimumSize">
<size>
<width>375</width>
<height>250</height>
<height>300</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>375</width>
<height>250</height>
<height>300</height>
</size>
</property>
<property name="baseSize">
<size>
<width>375</width>
<height>250</height>
<height>300</height>
</size>
</property>
<property name="windowTitle">
@@ -44,7 +44,7 @@
<property name="geometry">
<rect>
<x>20</x>
<y>210</y>
<y>260</y>
<width>341</width>
<height>32</height>
</rect>
@@ -102,14 +102,17 @@
<rect>
<x>110</x>
<y>10</y>
<width>251</width>
<height>41</height>
<width>250</width>
<height>79</height>
</rect>
</property>
<property name="title">
<string/>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="formAlignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
@@ -139,6 +142,29 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Description</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="txtDescription">
<property name="minimumSize">
<size>
<width>0</width>
<height>19</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>19</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QGroupBox" name="grpMemory">
@@ -148,7 +174,7 @@
<property name="geometry">
<rect>
<x>110</x>
<y>50</y>
<y>100</y>
<width>251</width>
<height>91</height>
</rect>
@@ -224,13 +250,13 @@
<property name="geometry">
<rect>
<x>110</x>
<y>140</y>
<y>190</y>
<width>251</width>
<height>61</height>
</rect>
</property>
<property name="title">
<string></string>
<string/>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">

View File

@@ -72,11 +72,13 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
switch (index.column())
{
case BreakpointColumns::ENABLED:
return "";
return (bp->enabled) ? tr("Enabled") : tr("Disabled");
case BreakpointColumns::TYPE:
return tr("Execute");
case BreakpointColumns::OFFSET:
return QtUtils::FilledQStringFromValue(bp->addr, 16);
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(bp->description);
case BreakpointColumns::SIZE_LABEL:
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
case BreakpointColumns::OPCODE:
@@ -105,6 +107,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
}
case BreakpointColumns::OFFSET:
return QtUtils::FilledQStringFromValue(mc->start, 16);
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(mc->description);
case BreakpointColumns::SIZE_LABEL:
return QString::number(mc->end - mc->start, 16);
case BreakpointColumns::OPCODE:
@@ -116,6 +120,29 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
}
}
}
else if (role == Qt::EditRole)
{
if (const auto* bp = std::get_if<BreakPoint>(&bp_mc))
{
switch (index.column())
{
case BreakpointColumns::CONDITION:
return bp->hasCond ? QString::fromStdString(bp->cond.expressionString) : "";
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(bp->description);
}
}
else if (const auto* mc = std::get_if<MemCheck>(&bp_mc))
{
switch (index.column())
{
case BreakpointColumns::CONDITION:
return mc->hasCond ? QString::fromStdString(mc->cond.expressionString) : "";
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(mc->description);
}
}
}
else if (role == BreakpointModel::DataRole)
{
if (const auto* bp = std::get_if<BreakPoint>(&bp_mc))
@@ -128,6 +155,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
return MEMCHECK_INVALID;
case BreakpointColumns::OFFSET:
return bp->addr;
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(bp->description);
case BreakpointColumns::SIZE_LABEL:
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
case BreakpointColumns::OPCODE:
@@ -149,6 +178,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
return mc->memCond;
case BreakpointColumns::OFFSET:
return mc->start;
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(mc->description);
case BreakpointColumns::SIZE_LABEL:
return mc->end - mc->start;
case BreakpointColumns::OPCODE:
@@ -172,6 +203,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
return MEMCHECK_INVALID;
case BreakpointColumns::OFFSET:
return QtUtils::FilledQStringFromValue(bp->addr, 16);
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(bp->description);
case BreakpointColumns::SIZE_LABEL:
return QString::fromStdString(m_cpu.GetSymbolGuardian().FunctionStartingAtAddress(bp->addr).name);
case BreakpointColumns::OPCODE:
@@ -191,6 +224,8 @@ QVariant BreakpointModel::data(const QModelIndex& index, int role) const
return mc->memCond;
case BreakpointColumns::OFFSET:
return QtUtils::FilledQStringFromValue(mc->start, 16);
case BreakpointColumns::DESCRIPTION:
return QString::fromStdString(mc->description);
case BreakpointColumns::SIZE_LABEL:
return mc->end - mc->start;
case BreakpointColumns::OPCODE:
@@ -233,6 +268,8 @@ QVariant BreakpointModel::headerData(int section, Qt::Orientation orientation, i
case BreakpointColumns::OFFSET:
//: Warning: limited space available. Abbreviate if needed.
return tr("OFFSET");
case BreakpointColumns::DESCRIPTION:
return "DESCRIPTION";
case BreakpointColumns::SIZE_LABEL:
//: Warning: limited space available. Abbreviate if needed.
return tr("SIZE / LABEL");
@@ -260,6 +297,8 @@ QVariant BreakpointModel::headerData(int section, Qt::Orientation orientation, i
return "TYPE";
case BreakpointColumns::OFFSET:
return "OFFSET";
case BreakpointColumns::DESCRIPTION:
return "DESCRIPTION";
case BreakpointColumns::SIZE_LABEL:
return "SIZE / LABEL";
case BreakpointColumns::OPCODE:
@@ -282,6 +321,7 @@ Qt::ItemFlags BreakpointModel::flags(const QModelIndex& index) const
switch (index.column())
{
case BreakpointColumns::CONDITION:
case BreakpointColumns::DESCRIPTION:
return Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsSelectable | Qt::ItemFlag::ItemIsEditable;
case BreakpointColumns::TYPE:
case BreakpointColumns::OPCODE:
@@ -395,6 +435,27 @@ bool BreakpointModel::setData(const QModelIndex& index, const QVariant& value, i
emit dataChanged(index, index);
return true;
}
else if (role == Qt::EditRole && index.column() == BreakpointColumns::DESCRIPTION)
{
// Update BreakPoint description
if (auto* bp = std::get_if<BreakPoint>(&bp_mc))
{
const QString descValue = value.toString();
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), bp, descValue] {
CBreakPoints::ChangeBreakPointDescription(cpu, bp->addr, descValue.toStdString());
});
}
// Update MemCheck description
else if (auto* mc = std::get_if<MemCheck>(&bp_mc))
{
const QString descValue = value.toString();
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), mc, descValue] {
CBreakPoints::ChangeMemCheckDescription(cpu, mc->start, mc->end, descValue.toStdString());
});
}
emit dataChanged(index, index);
return true;
}
return false;
}
@@ -451,7 +512,7 @@ bool BreakpointModel::insertBreakpointRows(int row, int count, std::vector<Break
{
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), bp = *bp] {
CBreakPoints::AddBreakPoint(cpu, bp.addr, false, bp.enabled);
CBreakPoints::ChangeBreakPointDescription(cpu, bp.addr, bp.description);
if (bp.hasCond)
{
CBreakPoints::ChangeBreakPointAddCond(cpu, bp.addr, bp.cond);
@@ -462,6 +523,7 @@ bool BreakpointModel::insertBreakpointRows(int row, int count, std::vector<Break
{
Host::RunOnCPUThread([cpu = m_cpu.getCpuType(), mc = *mc] {
CBreakPoints::AddMemCheck(cpu, mc.start, mc.end, mc.memCond, mc.result);
CBreakPoints::ChangeMemCheckDescription(cpu, mc.start, mc.end, mc.description);
if (mc.hasCond)
{
CBreakPoints::ChangeMemCheckAddCond(cpu, mc.start, mc.end, mc.cond);
@@ -548,6 +610,12 @@ void BreakpointModel::loadBreakpointFromFieldList(QStringList fields)
return;
}
// Description
if (!fields[BreakpointColumns::DESCRIPTION].isEmpty())
{
bp.description = fields[BreakpointColumns::DESCRIPTION].toStdString();
}
insertBreakpointRows(0, 1, {bp});
}
else
@@ -608,6 +676,12 @@ void BreakpointModel::loadBreakpointFromFieldList(QStringList fields)
}
mc.result = static_cast<MemCheckResult>(result);
// Description
if (!fields[BreakpointColumns::DESCRIPTION].isEmpty())
{
mc.description = fields[BreakpointColumns::DESCRIPTION].toStdString();
}
insertBreakpointRows(0, 1, {mc});
}
}

View File

@@ -21,6 +21,7 @@ public:
ENABLED = 0,
TYPE,
OFFSET,
DESCRIPTION,
SIZE_LABEL,
OPCODE,
CONDITION,
@@ -38,6 +39,7 @@ public:
QHeaderView::ResizeMode::ResizeToContents,
QHeaderView::ResizeMode::ResizeToContents,
QHeaderView::ResizeMode::ResizeToContents,
QHeaderView::ResizeMode::ResizeToContents,
QHeaderView::ResizeMode::Stretch,
QHeaderView::ResizeMode::Stretch,
QHeaderView::ResizeMode::ResizeToContents,

View File

@@ -21,11 +21,7 @@ BreakpointView::BreakpointView(const DebuggerViewParameters& parameters)
connect(m_ui.breakpointList, &QTableView::doubleClicked, this, &BreakpointView::onDoubleClicked);
m_ui.breakpointList->setModel(m_model);
for (std::size_t i = 0; auto mode : BreakpointModel::HeaderResizeModes)
{
m_ui.breakpointList->horizontalHeader()->setSectionResizeMode(i, mode);
i++;
}
this->resizeColumns();
}
void BreakpointView::onDoubleClicked(const QModelIndex& index)
@@ -124,6 +120,7 @@ void BreakpointView::contextDelete()
void BreakpointView::contextNew()
{
BreakpointDialog* bpDialog = new BreakpointDialog(this, &cpu(), *m_model);
connect(bpDialog, &QDialog::accepted, this, &BreakpointView::resizeColumns);
bpDialog->setAttribute(Qt::WA_DeleteOnClose);
bpDialog->show();
}
@@ -140,6 +137,7 @@ void BreakpointView::contextEdit()
auto bpObject = m_model->at(selectedRow);
BreakpointDialog* bpDialog = new BreakpointDialog(this, &cpu(), *m_model, bpObject, selectedRow);
connect(bpDialog, &QDialog::accepted, this, &BreakpointView::resizeColumns);
bpDialog->setAttribute(Qt::WA_DeleteOnClose);
bpDialog->show();
}
@@ -172,3 +170,12 @@ void BreakpointView::saveBreakpointsToDebuggerSettings()
{
DebuggerSettingsManager::saveGameSettings(m_model);
}
void BreakpointView::resizeColumns()
{
for (std::size_t i = 0; auto mode : BreakpointModel::HeaderResizeModes)
{
m_ui.breakpointList->horizontalHeader()->setSectionResizeMode(i, mode);
i++;
}
}

View File

@@ -32,6 +32,8 @@ public:
void contextEdit();
void contextPasteCSV();
void resizeColumns();
void saveBreakpointsToDebuggerSettings();
private:

View File

@@ -12,7 +12,7 @@
#include "VMManager.h"
std::mutex DebuggerSettingsManager::writeLock;
const QString DebuggerSettingsManager::settingsFileVersion = "0.00";
const QString DebuggerSettingsManager::settingsFileVersion = "0.01";
QJsonObject DebuggerSettingsManager::loadGameSettingsJSON()
{
@@ -62,6 +62,17 @@ void DebuggerSettingsManager::loadGameSettings(BreakpointModel* bpModel)
return;
}
// Breakpoint descriptions were added at debugger settings file version 0.01. If loading
// saved breakpoints from a previous version (only 0.00 existed prior), the breakpoints will be
// missing a description. This code will add in an empty description so that the previous
// version, 0.00, is compatible with 0.01.
bool isMissingDescription = false;
const QJsonValue savedVersionValue = loadGameSettingsJSON().value("Version");
if (!savedVersionValue.isUndefined())
{
isMissingDescription = savedVersionValue.toString().toStdString() == "0.00";
}
const QJsonArray breakpointsArray = breakpointsValue.toArray();
for (u32 row = 0; row < breakpointsArray.size(); row++)
{
@@ -71,7 +82,13 @@ void DebuggerSettingsManager::loadGameSettings(BreakpointModel* bpModel)
Console.WriteLn("Debugger Settings Manager: Failed to load invalid Breakpoint object.");
continue;
}
const QJsonObject rowObject = rowValue.toObject();
QJsonObject rowObject = rowValue.toObject();
// Add empty description for saved breakpoints from debugger settings versions prior to 0.01
if (isMissingDescription)
{
rowObject.insert(QString("DESCRIPTION"), QJsonValue(""));
}
QStringList fields;
u32 col = 0;

View File

@@ -24,7 +24,7 @@
<x>0</x>
<y>0</y>
<width>1000</width>
<height>20</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@@ -50,6 +50,7 @@
<property name="title">
<string>Windows</string>
</property>
<addaction name="actionWindowsDummy"/>
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
@@ -72,6 +73,7 @@
<property name="title">
<string>Tools</string>
</property>
<addaction name="actionToolsDummy"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuView"/>
@@ -318,6 +320,16 @@
<enum>QAction::NoRole</enum>
</property>
</action>
<action name="actionToolsDummy">
<property name="text">
<string/>
</property>
</action>
<action name="actionWindowsDummy">
<property name="text">
<string/>
</property>
</action>
</widget>
<resources/>
<connections/>

View File

@@ -298,7 +298,10 @@ void DockManager::resetAllLayouts()
m_layouts.clear();
for (const DockTables::DefaultDockLayout& layout : DockTables::DEFAULT_DOCK_LAYOUTS)
createLayout(tr(layout.name.c_str()), layout.cpu, true, layout.name);
{
QString name = QCoreApplication::translate("DebuggerLayout", layout.name.c_str());
createLayout(name, layout.cpu, true, layout.name);
}
switchToLayout(0);
updateLayoutSwitcher();
@@ -313,7 +316,10 @@ void DockManager::resetDefaultLayouts()
m_layouts = std::vector<DockLayout>();
for (const DockTables::DefaultDockLayout& layout : DockTables::DEFAULT_DOCK_LAYOUTS)
createLayout(tr(layout.name.c_str()), layout.cpu, true, layout.name);
{
QString name = QCoreApplication::translate("DebuggerLayout", layout.name.c_str());
createLayout(name, layout.cpu, true, layout.name);
}
for (DockLayout& layout : old_layouts)
if (!layout.isDefault())

View File

@@ -502,7 +502,7 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
dialog->registerWidgetHelp(m_ui.aspectRatio, tr("Aspect Ratio"), tr("Auto Standard (4:3/3:2 Progressive)"),
tr("Changes the aspect ratio used to display the console's output to the screen. The default is Auto Standard (4:3/3:2 "
"Progressive) which automatically adjusts the aspect ratio to match how a game would be shown on a typical TV of the era."));
"Progressive) which automatically adjusts the aspect ratio to match how a game would be shown on a typical TV of the era, and adapts to widescreen/ultrawide game patches."));
dialog->registerWidgetHelp(m_ui.interlacing, tr("Deinterlacing"), tr("Automatic (Default)"), tr("Determines the deinterlacing method to be used on the interlaced screen of the emulated console. Automatic should be able to correctly deinterlace most games, but if you see visibly shaky graphics, try one of the available options."));

View File

@@ -106,7 +106,7 @@
</item>
<item>
<property name="text">
<string>Native (10:7)</string>
<string>Native/Full (10:7)</string>
</property>
</item>
</widget>
@@ -142,7 +142,7 @@
</item>
<item>
<property name="text">
<string>Native (10:7)</string>
<string>Native/Full (10:7)</string>
</property>
</item>
</widget>

File diff suppressed because it is too large Load Diff

View File

@@ -266,34 +266,19 @@ bool ThreadedFileReader::Precache2(ProgressCallback* progress, Error* error)
bool ThreadedFileReader::CheckAvailableMemoryForPrecaching(u64 required_size, Error* error)
{
#ifdef _WIN32
// We want to check available physical memory instead of total.
const u64 memory_available = GetAvailablePhysicalMemory();
// Reserve 2GB of available memory for headroom.
constexpr u64 memory_reserve = 2147483648;
const u64 max_precache_size = std::max(0LL, static_cast<s64>(memory_available - memory_reserve));
const u64 max_precache_size = std::max(s64{0}, static_cast<s64>(memory_available - memory_reserve));
if (required_size > max_precache_size)
{
Error::SetStringFmt(error,
TRANSLATE_FS("CDVD", "Not enough free memory available for precaching, ({}GB) required."),
(required_size + memory_reserve) / _1gb);
TRANSLATE_FS("CDVD", "Not enough memory available for precaching ({:.2f} GB required)."),
static_cast<double>(required_size + memory_reserve) / static_cast<double>(_1gb));
return false;
}
#else
// Don't allow precaching to use more than 50% of system memory.
// Hopefully nobody's running 2-4GB potatoes anymore....
const u64 memory_size = GetPhysicalMemory();
const u64 max_precache_size = memory_size / 2;
if (required_size > max_precache_size)
{
Error::SetStringFmt(error,
TRANSLATE_FS("CDVD", "Required memory ({}GB) is the above the maximum allowed ({}GB)."),
required_size / _1gb, max_precache_size / _1gb);
return false;
}
#endif
return true;
}

View File

@@ -223,8 +223,8 @@ enum class DebugFunctionScanMode
enum class AspectRatioType : u8
{
Stretch,
RAuto4_3_3_2,
Stretch, // Stretches to the whole window/display size
RAuto4_3_3_2, // Automatically scales to the target aspect ratio if there's a widescreen patch
R4_3,
R16_9,
R10_7,
@@ -233,7 +233,7 @@ enum class AspectRatioType : u8
enum class FMVAspectRatioSwitchType : u8
{
Off,
Off, // Falls back on the selected generic aspect ratio type
RAuto4_3_3_2,
R4_3,
R16_9,
@@ -1324,6 +1324,8 @@ struct Pcsx2Config
std::string CurrentIRX;
std::string CurrentGameArgs;
AspectRatioType CurrentAspectRatio = AspectRatioType::RAuto4_3_3_2;
// Fall back aspect ratio for games that have patches (when AspectRatioType::RAuto4_3_3_2) is active.
float CurrentCustomAspectRatio = 0.f;
bool IsPortableMode = false;
Pcsx2Config();

View File

@@ -285,6 +285,16 @@ BreakPointCond* CBreakPoints::GetBreakPointCondition(BreakPointCpu cpu, u32 addr
return NULL;
}
void CBreakPoints::ChangeBreakPointDescription(BreakPointCpu cpu, u32 addr, const std::string& description)
{
const size_t bp = FindBreakpoint(cpu, addr, true, false);
if (bp != INVALID_BREAKPOINT)
{
breakPoints_[bp].description = description;
Update();
}
}
void CBreakPoints::AddMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result)
{
// This will ruin any pending memchecks.
@@ -356,6 +366,16 @@ void CBreakPoints::ChangeMemCheckAddCond(BreakPointCpu cpu, u32 start, u32 end,
}
}
void CBreakPoints::ChangeMemCheckDescription(BreakPointCpu cpu, u32 start, u32 end, const std::string& description)
{
const size_t mc = FindMemCheck(cpu, start, end);
if (mc != INVALID_MEMCHECK)
{
memChecks_[mc].description = description;
Update(cpu);
}
}
void CBreakPoints::ClearAllMemChecks()
{
// This will ruin any pending memchecks.

View File

@@ -37,6 +37,8 @@ struct BreakPoint
BreakPointCond cond;
BreakPointCpu cpu;
std::string description;
bool operator==(const BreakPoint& other) const
{
return addr == other.addr;
@@ -78,6 +80,8 @@ struct MemCheck
MemCheckResult result;
BreakPointCpu cpu;
std::string description;
u32 numHits;
u32 lastPC;
@@ -119,12 +123,14 @@ public:
static void ChangeBreakPointAddCond(BreakPointCpu cpu, u32 addr, const BreakPointCond& cond);
static void ChangeBreakPointRemoveCond(BreakPointCpu cpu, u32 addr);
static BreakPointCond* GetBreakPointCondition(BreakPointCpu cpu, u32 addr);
static void ChangeBreakPointDescription(BreakPointCpu cpu, u32 addr, const std::string& description);
static void AddMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result);
static void RemoveMemCheck(BreakPointCpu cpu, u32 start, u32 end);
static void ChangeMemCheck(BreakPointCpu cpu, u32 start, u32 end, MemCheckCondition cond, MemCheckResult result);
static void ChangeMemCheckRemoveCond(BreakPointCpu cpu, u32 start, u32 end);
static void ChangeMemCheckAddCond(BreakPointCpu cpu, u32 start, u32 end, const BreakPointCond& cond);
static void ChangeMemCheckDescription(BreakPointCpu cpu, u32 start, u32 end, const std::string& description);
static void ClearAllMemChecks();
static void SetSkipFirst(BreakPointCpu cpu, u32 pc);

View File

@@ -2899,17 +2899,24 @@ bool GSState::TrianglesAreQuads(bool shuffle_check)
if (idx > 0)
{
const u16* const prev_tri= m_index.buff + (idx - 3);
GIFRegXYZ vert = v[i[0]].XYZ;
GIFRegXYZ last_vert = v[i[2]].XYZ;
GIFRegXYZ new_verts[3] = {v[i[0]].XYZ, v[i[1]].XYZ, v[i[2]].XYZ};
if (shuffle_check)
{
vert.X -= 8 << 4;
last_vert.X -= 8 << 4;
new_verts[0].X -= 8 << 4;
new_verts[1].X -= 8 << 4;
new_verts[2].X -= 8 << 4;
}
u32 match_vert_count = 0;
if (vert != m_vertex.buff[prev_tri[0]].XYZ && vert != m_vertex.buff[prev_tri[1]].XYZ && vert != m_vertex.buff[prev_tri[2]].XYZ &&
last_vert != m_vertex.buff[prev_tri[0]].XYZ && last_vert != m_vertex.buff[prev_tri[1]].XYZ && last_vert != m_vertex.buff[prev_tri[2]].XYZ)
if (!(new_verts[0] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[0] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[0] != m_vertex.buff[prev_tri[2]].XYZ))
match_vert_count++;
if (!(new_verts[1] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[1] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[1] != m_vertex.buff[prev_tri[2]].XYZ))
match_vert_count++;
if (!(new_verts[2] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[2] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[2] != m_vertex.buff[prev_tri[2]].XYZ))
match_vert_count++;
if (match_vert_count != 2)
return false;
}
// Degenerate triangles should've been culled already, so we can check indices.

View File

@@ -268,8 +268,25 @@ float GSRenderer::GetModXYOffset()
static float GetCurrentAspectRatioFloat(bool is_progressive)
{
static constexpr std::array<float, static_cast<size_t>(AspectRatioType::MaxCount) + 1> ars = {{4.0f / 3.0f, 4.0f / 3.0f, 4.0f / 3.0f, 16.0f / 9.0f, 10.0f / 7.0f, 3.0f / 2.0f}};
return ars[static_cast<u32>(GSConfig.AspectRatio) + (3u * (is_progressive && GSConfig.AspectRatio == AspectRatioType::RAuto4_3_3_2))];
switch (GSConfig.AspectRatio)
{
default:
// We don't know the AR of the display here, nor we care about it
case AspectRatioType::Stretch:
case AspectRatioType::RAuto4_3_3_2:
if (EmuConfig.CurrentCustomAspectRatio > 0.f)
return EmuConfig.CurrentCustomAspectRatio;
else if (is_progressive)
return 3.0f / 2.0f;
else
return 4.0f / 3.0f;
case AspectRatioType::R4_3:
return 4.0f / 3.0f;
case AspectRatioType::R16_9:
return 16.0f / 9.0f;
case AspectRatioType::R10_7:
return 10.0f / 7.0f;
}
}
static GSVector4 CalculateDrawDstRect(s32 window_width, s32 window_height, const GSVector4i& src_rect, const GSVector2i& src_size, GSDisplayAlignment alignment, bool flip_y, bool is_progressive)
@@ -285,6 +302,9 @@ static GSVector4 CalculateDrawDstRect(s32 window_width, s32 window_height, const
targetAr = 3.0f / 2.0f;
else
targetAr = 4.0f / 3.0f;
// Fall back on the custom aspect ratio set by patches (e.g. 16:9, 21:9)
if (EmuConfig.CurrentCustomAspectRatio > 0.f)
targetAr = EmuConfig.CurrentCustomAspectRatio;
}
else if (EmuConfig.CurrentAspectRatio == AspectRatioType::R4_3)
{

View File

@@ -2631,7 +2631,7 @@ void GSDevice11::RenderHW(GSHWDrawConfig& config)
}
GSTexture* rt_copy = nullptr;
if (config.require_one_barrier || (config.tex && config.tex == config.rt)) // Used as "bind rt" flag when texture barrier is unsupported
if (config.require_one_barrier || (config.tex && config.tex == config.rt)) // Used as "bind rt" flag when texture barrier is unsupported.
{
// Bind the RT.This way special effect can use it.
// Do not always bind the rt when it's not needed,

View File

@@ -3900,7 +3900,7 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
}
}
if (config.require_one_barrier)
if (config.require_one_barrier || (config.tex && config.tex == config.rt)) // Used as "bind rt" flag when texture barrier is unsupported.
{
// requires a copy of the RT
draw_rt_clone = static_cast<GSTexture12*>(CreateTexture(rtsize.x, rtsize.y, 1, colclip_rt ? GSTexture::Format::ColorClip : GSTexture::Format::Color, true));
@@ -3913,7 +3913,10 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
draw_rt_clone->SetState(GSTexture::State::Invalidated);
CopyRect(draw_rt, draw_rt_clone, config.drawarea, config.drawarea.left, config.drawarea.top);
PSSetShaderResource(2, draw_rt_clone, true);
if (config.require_one_barrier)
PSSetShaderResource(2, draw_rt_clone, true);
if (config.tex && config.tex == config.rt)
PSSetShaderResource(0, draw_rt_clone, true);
}
}

View File

@@ -178,7 +178,7 @@ bool GSHwHack::GSC_DTGames(GSRendererHW& r, int& skip)
return true;
}
bool GSHwHack::GSC_Tekken5(GSRendererHW& r, int& skip)
bool GSHwHack::GSC_NamcoGames(GSRendererHW& r, int& skip)
{
if (skip == 0)
{
@@ -195,7 +195,7 @@ bool GSHwHack::GSC_Tekken5(GSRendererHW& r, int& skip)
if (!rt)
return false;
GL_INS("GSC_Tekken5(): HLE channel shuffle");
GL_INS("GSC_NamcoGames(): HLE channel shuffle");
// have to set up the palette ourselves too, since GSC executes before it does
r.m_mem.m_clut.Read32(RTEX0, r.m_draw_env->TEXA);
@@ -1502,14 +1502,12 @@ const GSHwHack::Entry<GSRendererHW::GSC_Ptr> GSHwHack::s_get_skip_count_function
CRC_F(GSC_Battlefield2),
// Channel Effect
CRC_F(GSC_NamcoGames),
CRC_F(GSC_SteambotChronicles),
// Depth Issue
CRC_F(GSC_BurnoutGames),
// Half Screen bottom issue
CRC_F(GSC_Tekken5),
// Upscaling hacks
CRC_F(GSC_UltramanFightingEvolution),
};

View File

@@ -11,7 +11,7 @@ public:
static bool GSC_GuitarHero(GSRendererHW& r, int& skip);
static bool GSC_SFEX3(GSRendererHW& r, int& skip);
static bool GSC_DTGames(GSRendererHW& r, int& skip);
static bool GSC_Tekken5(GSRendererHW& r, int& skip);
static bool GSC_NamcoGames(GSRendererHW& r, int& skip);
static bool GSC_BurnoutGames(GSRendererHW& r, int& skip);
static bool GSC_BlackAndBurnoutSky(GSRendererHW& r, int& skip);
static bool GSC_MidnightClub3(GSRendererHW& r, int& skip);

View File

@@ -2482,7 +2482,7 @@ void GSRendererHW::Draw()
// | 0.5,2.25 | 1-1 | 1 |
// | 0.5,2.5 | 1-2 | 2 |
// --------------------------------------
m_r = GSVector4i(m_vt.m_min.p.upld(m_vt.m_max.p) + GSVector4::cxpr(0.5f));
m_r = GSVector4i((m_vt.m_min.p.upld(m_vt.m_max.p) + GSVector4::cxpr(0.4f)).round<Round_NearestInt>());
m_r = m_r.blend8(m_r + GSVector4i::cxpr(0, 0, 1, 1), (m_r.xyxy() == m_r.zwzw()));
m_r_no_scissor = m_r;
m_r = m_r.rintersect(context->scissor.in);
@@ -6492,8 +6492,9 @@ __ri void GSRendererHW::HandleTextureHazards(const GSTextureCache::Target* rt, c
// Can't use box filtering on depth (yet), or fractional scales.
if (src_target->m_texture->IsDepthStencil() || std::floor(src_target->GetScale()) != src_target->GetScale())
{
const GSVector4 dst_rect = GSVector4(GSVector4i::loadh(src_unscaled_size));
g_gs_device->StretchRect(src_target->m_texture, GSVector4::cxpr(0.0f, 0.0f, 1.0f, 1.0f), src_copy.get(), dst_rect,
GSVector4 src_rect = GSVector4(tmm.coverage) / GSVector4(GSVector4i::loadh(src_unscaled_size).zwzw());
const GSVector4 dst_rect = GSVector4(tmm.coverage);
g_gs_device->StretchRect(src_target->m_texture, src_rect, src_copy.get(), dst_rect,
src_target->m_texture->IsDepthStencil() ? ShaderConvert::DEPTH_COPY : ShaderConvert::COPY, false);
}
else

View File

@@ -1530,7 +1530,8 @@ GSTextureCache::Source* GSTextureCache::LookupSource(const bool is_color, const
GL_CACHE("TC: Attempt to repopulate RGB for target [%x] on source lookup", t->m_TEX0.TBP0);
for (Target* dst_match : m_dst[DepthStencil])
{
if (dst_match->m_TEX0.TBP0 != t->m_TEX0.TBP0 || !dst_match->m_valid_rgb)
// Be careful of dirty overlap on the targets, we don't really want dirty data.
if (dst_match->m_TEX0.TBP0 != t->m_TEX0.TBP0 || !dst_match->m_valid_rgb ||(!dst_match->m_dirty.empty() && !dst_match->m_dirty.GetTotalRect(dst_match->m_TEX0, dst_match->m_unscaled_size).rintersect(block_boundary_rect).rempty()))
continue;
if (!CopyRGBFromDepthToColor(t, dst_match))
@@ -2147,7 +2148,23 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(GIFRegTEX0 TEX0, const GSVe
// 2. Preserved data will be in the correct place (in most cases)
// 3. Less deleting sources/targets
// 4. We can basically do clears in hardware, if they aren't insane ones
if (can_use && ((!is_shuffle && t->m_dirty.size() >= 1) || (is_shuffle && src && GSLocalMemory::m_psm[src->m_TEX0.PSM].bpp == 8 && GSLocalMemory::m_psm[t->m_TEX0.PSM].bpp == 16)) && ((preserve_alpha && preserve_rgb) || (draw_rect.w > GSLocalMemory::m_psm[t->m_TEX0.PSM].pgs.y && !possible_clear)) && TEX0.TBW != t->m_TEX0.TBW)
bool dirtied_area = t->m_dirty.size() >= 1;
// Check it covers the whole area of the new draw
if (!is_shuffle && dirtied_area)
{
const u32 draw_start = GSLocalMemory::GetStartBlockAddress(TEX0.TBP0, TEX0.TBW, TEX0.PSM, draw_rect);
const u32 draw_end = GSLocalMemory::GetEndBlockAddress(TEX0.TBP0, TEX0.TBW, TEX0.PSM, draw_rect);
const GSVector4i dirty_rect = t->m_dirty.GetTotalRect(t->m_TEX0, t->m_unscaled_size);
const u32 dirty_start = GSLocalMemory::GetStartBlockAddress(t->m_TEX0.TBP0, t->m_TEX0.TBW, t->m_TEX0.PSM, dirty_rect);
const u32 dirty_end = GSLocalMemory::GetEndBlockAddress(t->m_TEX0.TBP0, t->m_TEX0.TBW, t->m_TEX0.PSM, dirty_rect);
if (dirty_end < draw_end || dirty_start > draw_start)
dirtied_area = false;
}
if (can_use && ((!is_shuffle && dirtied_area) || (is_shuffle && src && GSLocalMemory::m_psm[src->m_TEX0.PSM].bpp == 8 && GSLocalMemory::m_psm[t->m_TEX0.PSM].bpp == 16)) && ((preserve_alpha && preserve_rgb) || (draw_rect.w > GSLocalMemory::m_psm[t->m_TEX0.PSM].pgs.y && !possible_clear)) && TEX0.TBW != t->m_TEX0.TBW)
{
can_use = false;
}
@@ -2206,7 +2223,8 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(GIFRegTEX0 TEX0, const GSVe
continue;
}
else if (t->m_dirty.empty() || (t->m_TEX0.TBP0 <= bp && t->m_dirty.GetTotalRect(t->m_TEX0, t->m_unscaled_size).rintersect(GSVector4i(0, 0, 0, 0) .max_i32(TranslateAlignedRectByPage(t, TEX0.TBP0, TEX0.PSM, TEX0.TBW, min_rect))).rempty()))
else if (t->m_dirty.empty() || (t->m_TEX0.TBP0 <= bp && t->m_last_draw >= (GSState::s_n - 1) &&
t->m_dirty.GetTotalRect(t->m_TEX0, t->m_unscaled_size).rintersect(GSVector4i(0, 0, 0, 0).max_i32(TranslateAlignedRectByPage(t, TEX0.TBP0, TEX0.PSM, TEX0.TBW, min_rect))).rempty()))
{
if (TEX0.TBW == t->m_TEX0.TBW && !is_shuffle && widthpage_offset == 0 && ((min_rect.w + 63)/ 64) > 1)
{
@@ -2677,6 +2695,15 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(GIFRegTEX0 TEX0, const GSVe
// Probably an old target, get rid of it.
if (remove_target)
{
// DT Racer hits this path and causes a crash when RT in RT is disabled,
// so let's make sure source and target texture isn't linked/shared before deleting the target.
if (src && src->m_target && src->m_from_target == t && src->m_target_direct)
{
src->m_target_direct = false;
src->m_shared_texture = false;
t->m_texture = nullptr;
}
InvalidateSourcesFromTarget(t);
i = rev_list.erase(i);
delete t;

View File

@@ -1054,7 +1054,7 @@ bool FullscreenUI::LoadResources()
for (u32 i = static_cast<u32>(GameDatabaseSchema::Compatibility::Nothing);
i <= static_cast<u32>(GameDatabaseSchema::Compatibility::Perfect); i++)
{
s_game_compatibility_textures[i - 1] = LoadTexture(fmt::format("icons/star-{}.png", i - 1).c_str());
s_game_compatibility_textures[i - 1] = LoadTexture(fmt::format("fullscreenui/star-{}.png", i - 1).c_str());
}
return true;
@@ -6499,7 +6499,7 @@ void FullscreenUI::DrawGameList(const ImVec2& heading_size)
// region
{
std::string flag_texture(fmt::format("icons/flags/{}.png", GameList::RegionToString(selected_entry->region)));
std::string flag_texture(fmt::format("fullscreenui/flags/{}.png", GameList::RegionToString(selected_entry->region)));
ImGui::TextUnformatted(FSUI_CSTR("Region: "));
ImGui::SameLine();
ImGui::Image(reinterpret_cast<ImTextureID>(GetCachedTextureAsync(flag_texture.c_str())->GetNativeHandle()), LayoutScale(23.0f, 16.0f));

View File

@@ -111,7 +111,7 @@ namespace Patch
struct PatchGroup
{
std::string name;
std::optional<AspectRatioType> override_aspect_ratio;
std::optional<float> override_aspect_ratio;
std::optional<GSInterlaceMode> override_interlace_mode;
std::vector<PatchCommand> patches;
std::vector<DynamicPatch> dpatches;
@@ -186,7 +186,7 @@ namespace Patch
static EnablePatchList s_just_enabled_cheats;
static EnablePatchList s_just_enabled_patches;
static u32 s_patches_crc;
static std::optional<AspectRatioType> s_override_aspect_ratio;
static std::optional<float> s_override_aspect_ratio;
static std::optional<GSInterlaceMode> s_override_interlace_mode;
static const PatchTextTable s_patch_commands[] = {
@@ -797,17 +797,13 @@ void Patch::UpdateActivePatches(bool reload_enabled_list, bool verbose, bool ver
void Patch::ApplyPatchSettingOverrides()
{
// Switch to 16:9 if widescreen patches are enabled, and AR is auto.
// Switch to 16:9 (or any custom aspect ratio) if widescreen patches are enabled, and AR is auto.
if (s_override_aspect_ratio.has_value() && EmuConfig.GS.AspectRatio == AspectRatioType::RAuto4_3_3_2)
{
// Don't change when reloading settings in the middle of a FMV with switch.
if (EmuConfig.CurrentAspectRatio == EmuConfig.GS.AspectRatio)
EmuConfig.CurrentAspectRatio = s_override_aspect_ratio.value();
EmuConfig.CurrentCustomAspectRatio = s_override_aspect_ratio.value();
Console.WriteLn(Color_Gray,
fmt::format("Patch: Setting aspect ratio to {} by patch request.",
Pcsx2Config::GSOptions::AspectRatioNames[static_cast<int>(s_override_aspect_ratio.value())]));
EmuConfig.GS.AspectRatio = s_override_aspect_ratio.value();
fmt::format("Patch: Setting aspect ratio to {} by patch request.", s_override_aspect_ratio.value()));
}
// Disable interlacing in GS if active.
@@ -821,9 +817,13 @@ void Patch::ApplyPatchSettingOverrides()
bool Patch::ReloadPatchAffectingOptions()
{
// Restore the aspect ratio + interlacing setting the user had set before reloading the patch,
// as the custom patch settings only apply if the "Auto" settings are selected.
const AspectRatioType current_ar = EmuConfig.GS.AspectRatio;
const GSInterlaceMode current_interlace = EmuConfig.GS.InterlaceMode;
const float custom_aspect_ratio = EmuConfig.CurrentCustomAspectRatio;
// This is pretty gross, but we're not using a config layer, so...
AspectRatioType new_ar = Pcsx2Config::GSOptions::DEFAULT_ASPECT_RATIO;
const std::string ar_value = Host::GetStringSettingValue("EmuCore/GS", "AspectRatio",
@@ -836,15 +836,14 @@ bool Patch::ReloadPatchAffectingOptions()
break;
}
}
if (EmuConfig.CurrentAspectRatio == EmuConfig.GS.AspectRatio)
EmuConfig.CurrentAspectRatio = new_ar;
EmuConfig.GS.AspectRatio = new_ar;
EmuConfig.GS.InterlaceMode = static_cast<GSInterlaceMode>(Host::GetIntSettingValue(
"EmuCore/GS", "deinterlace_mode", static_cast<int>(Pcsx2Config::GSOptions::DEFAULT_INTERLACE_MODE)));
ApplyPatchSettingOverrides();
return (current_ar != EmuConfig.GS.AspectRatio || current_interlace != EmuConfig.GS.InterlaceMode);
// Return true if any config setting changed
return current_ar != EmuConfig.GS.AspectRatio || custom_aspect_ratio != EmuConfig.CurrentCustomAspectRatio || current_interlace != EmuConfig.GS.InterlaceMode;
}
void Patch::UnloadPatches()
@@ -941,13 +940,22 @@ void Patch::PatchFunc::patch(PatchGroup* group, const std::string_view cmd, cons
void Patch::PatchFunc::gsaspectratio(PatchGroup* group, const std::string_view cmd, const std::string_view param)
{
for (u32 i = 0; i < static_cast<u32>(AspectRatioType::MaxCount); i++)
std::string str(param);
std::istringstream ss(str);
uint dividend, divisor;
char delimiter;
float aspect_ratio = 0.f;
ss >> dividend >> delimiter >> divisor;
if (!ss.fail() && delimiter == ':' && divisor != 0)
{
if (param == Pcsx2Config::GSOptions::AspectRatioNames[i])
{
group->override_aspect_ratio = static_cast<AspectRatioType>(i);
return;
}
aspect_ratio = static_cast<float>(dividend) / static_cast<float>(divisor);
}
if (aspect_ratio > 0.f)
{
group->override_aspect_ratio = aspect_ratio;
return;
}
Console.Error(fmt::format("Patch error: {} is an unknown aspect ratio.", param));

View File

@@ -636,7 +636,7 @@ void Pcsx2Config::CpuOptions::LoadSave(SettingsWrapper& wrap)
Recompiler.LoadSave(wrap);
}
const char* Pcsx2Config::GSOptions::AspectRatioNames[] = {
const char* Pcsx2Config::GSOptions::AspectRatioNames[(size_t)AspectRatioType::MaxCount + 1] = {
"Stretch",
"Auto 4:3/3:2",
"4:3",
@@ -644,7 +644,7 @@ const char* Pcsx2Config::GSOptions::AspectRatioNames[] = {
"10:7",
nullptr};
const char* Pcsx2Config::GSOptions::FMVAspectRatioSwitchNames[] = {
const char* Pcsx2Config::GSOptions::FMVAspectRatioSwitchNames[(size_t)FMVAspectRatioSwitchType::MaxCount + 1] = {
"Off",
"Auto 4:3/3:2",
"4:3",
@@ -1983,7 +1983,12 @@ void Pcsx2Config::LoadSaveCore(SettingsWrapper& wrap)
if (wrap.IsLoading())
{
// Patches will get re-applied after loading the state so this doesn't matter too much
CurrentAspectRatio = GS.AspectRatio;
if (CurrentAspectRatio == AspectRatioType::RAuto4_3_3_2)
{
CurrentCustomAspectRatio = 0.f;
}
}
}
@@ -2035,6 +2040,7 @@ void Pcsx2Config::CopyRuntimeConfig(Pcsx2Config& cfg)
CurrentIRX = std::move(cfg.CurrentIRX);
CurrentGameArgs = std::move(cfg.CurrentGameArgs);
CurrentAspectRatio = cfg.CurrentAspectRatio;
CurrentCustomAspectRatio = cfg.CurrentCustomAspectRatio;
IsPortableMode = cfg.IsPortableMode;
for (u32 i = 0; i < sizeof(Mcd) / sizeof(Mcd[0]); i++)

View File

@@ -3,4 +3,4 @@
/// Version number for GS and other shaders. Increment whenever any of the contents of the
/// shaders change, to invalidate the cache.
static constexpr u32 SHADER_CACHE_VERSION = 63;
static constexpr u32 SHADER_CACHE_VERSION = 64;

View File

@@ -876,7 +876,9 @@ void VMManager::RequestDisplaySize(float scale /*= 0.0f*/)
switch (GSConfig.AspectRatio)
{
case AspectRatioType::RAuto4_3_3_2:
if (GSgetDisplayMode() == GSVideoMode::SDTV_480P)
if (EmuConfig.CurrentCustomAspectRatio > 0.f)
x_scale = EmuConfig.CurrentCustomAspectRatio / (static_cast<float>(iwidth) / static_cast<float>(iheight));
else if (GSgetDisplayMode() == GSVideoMode::SDTV_480P)
x_scale = (3.0f / 2.0f) / (static_cast<float>(iwidth) / static_cast<float>(iheight));
else
x_scale = (4.0f / 3.0f) / (static_cast<float>(iwidth) / static_cast<float>(iheight));
@@ -2504,9 +2506,13 @@ void VMManager::LogCPUCapabilities()
Console.WriteLnFmt(
" Operating System = {}\n"
" Physical RAM = {} MB",
" Available RAM = {} MB ({:.2f} GB)\n"
" Physical RAM = {} MB ({:.2f} GB)\n",
GetOSVersionString(),
GetPhysicalMemory() / _1mb);
GetAvailablePhysicalMemory() / _1mb,
static_cast<double>(GetAvailablePhysicalMemory()) / static_cast<double>(_1gb),
GetPhysicalMemory() / _1mb,
static_cast<double>(GetPhysicalMemory()) / static_cast<double>(_1gb));
Console.WriteLnFmt(" Processor = {}", cpuinfo_get_package(0)->name);
Console.WriteLnFmt(" Core Count = {} cores", cpuinfo_get_cores_count());

View File

@@ -1,3 +1,5 @@
#!/usr/bin/env python3
import sys
import xml.etree.ElementTree as ET
import re