mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-08-25 19:55:50 +00:00
merge
This commit is contained in:
commit
404f362bd5
13 changed files with 5290 additions and 45 deletions
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Release",
|
||||
|
@ -85,7 +85,7 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"name": "x64-Release",
|
||||
"name": "RelWDbgInfo",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "RelWithDebInfo",
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
|
|
4024
Data/Sys/GameSettings/Netplay/GALJ01r2.ini
Normal file
4024
Data/Sys/GameSettings/Netplay/GALJ01r2.ini
Normal file
File diff suppressed because it is too large
Load diff
885
Data/Sys/GameSettings/Playback/GALJ01r2.ini
Normal file
885
Data/Sys/GameSettings/Playback/GALJ01r2.ini
Normal file
|
@ -0,0 +1,885 @@
|
|||
# GALJ01 - Super Smash Bros. Melee NTSC-J 1.02
|
||||
|
||||
[Core]
|
||||
CPUThread = False
|
||||
GPUDeterminismMode = fake-completion
|
||||
PollingMethod = OnSIRead
|
||||
FastDiscSpeed = True
|
||||
|
||||
[Gecko_Enabled]
|
||||
$Required: General Codes
|
||||
$Required: Slippi Playback
|
||||
$Recommended: Normal Lag Reduction
|
||||
|
||||
[Gecko]
|
||||
$Required: General Codes [Achilles, Dan Salvato, UnclePunch, tauKhan, Ptomerty, Cilan, Datel, Most]
|
||||
0445BF28 FFFFFFFF #Unlock All Characters and Stages [Datel]
|
||||
0445BF2C FFFFFFFF
|
||||
0415D94C 4E800020 #Disable Special Messages [Most]
|
||||
0415D984 4E800020 #Disable Trophy Messages [Achilles]
|
||||
C22FCCE8 00000013 #External/Extended Nametag Box/Extended Nametag Box.asm
|
||||
3C608003 6063556C
|
||||
7C6803A6 887F0000
|
||||
4E800021 5460063E
|
||||
28000078 41820070
|
||||
3C608045 6063D84F
|
||||
1C0001A4 7C630214
|
||||
38800000 8C030001
|
||||
2C000000 41820018
|
||||
38840001 2C000080
|
||||
41A0FFEC 8C030001
|
||||
4BFFFFE4 2C040005
|
||||
41800034 3C604080
|
||||
9061FFF0 C221FFF0
|
||||
3E404330 CA028C58
|
||||
9241FFEC 9081FFF0
|
||||
C9E1FFEC EDEF8028
|
||||
EDEF8824 807E0010
|
||||
D1E3002C 807E0010
|
||||
60000000 00000000
|
||||
|
||||
$Required: Slippi Playback [Fizzi, UnclePunch, Achilles, tauKhan]
|
||||
*Used to play back a .slp file
|
||||
*Will play replay configured in playback.txt
|
||||
C216E9E4 00000010 #Playback/Core/CleanDynamicGeckos.asm
|
||||
3BC30000 7C0802A6
|
||||
90010004 9421FF50
|
||||
BE810008 83CDB64C
|
||||
83BE0010 807D0000
|
||||
2C030000 41820044
|
||||
389D0008 80BD0004
|
||||
3D808000 618C31F4
|
||||
7D8903A6 4E800421
|
||||
807D0000 809D0004
|
||||
3D808032 618C8F50
|
||||
7D8903A6 4E800421
|
||||
807D0004 7FBD1A14
|
||||
3BBD0008 4BFFFFB8
|
||||
BA810008 800100B4
|
||||
382100B0 7C0803A6
|
||||
60000000 00000000
|
||||
C216D298 00000016 #Playback/Core/FetchGameFrame.asm
|
||||
881F0008 2C000000
|
||||
408200A0 7C0802A6
|
||||
90010004 9421FF50
|
||||
BE810008 806DB64C
|
||||
83630000 38600076
|
||||
987B0000 806DB654
|
||||
907B0001 7F63DB78
|
||||
38800005 38A00001
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
7F63DB78 3880018F
|
||||
38A00000 3D808000
|
||||
618C55F0 7D8903A6
|
||||
4E800421 887B0000
|
||||
2C030000 40820024
|
||||
3D808034 618CF314
|
||||
7D8903A6 4E800421
|
||||
3C60804C 38000000
|
||||
98031F7B 4BFFFF90
|
||||
BA810008 800100B4
|
||||
382100B0 7C0803A6
|
||||
881F0008 00000000
|
||||
C206B0DC 00000046 #Playback/Core/RestoreGameFrame.asm
|
||||
7C0802A6 90010004
|
||||
9421FF50 BE810008
|
||||
8BBF000C 7FA3EB78
|
||||
3D808003 618C1724
|
||||
7D8903A6 4E800421
|
||||
7C7C1B78 832DB64C
|
||||
83790000 7FE3FB78
|
||||
3D808000 618C55F8
|
||||
7D8903A6 4E800421
|
||||
7C741B78 389B0007
|
||||
88BF000C 1CA50062
|
||||
7C842A14 1CB40031
|
||||
7F442A14 3C80804D
|
||||
807A0000 90645F90
|
||||
807A0004 907F0620
|
||||
807A0008 907F0624
|
||||
807A000C 907F0638
|
||||
807A0010 907F063C
|
||||
807A0014 907F0650
|
||||
807A0018 907F065C
|
||||
8879056F 2C030000
|
||||
41820024 807A001C
|
||||
907F00B0 807A0020
|
||||
907F00B4 807A0024
|
||||
907F002C 807A0028
|
||||
907F0010 3C608046
|
||||
6063B108 3C80804C
|
||||
60841F78 88840001
|
||||
3884FFFF 2C040000
|
||||
40A00008 38840005
|
||||
1C840030 7C632214
|
||||
889F0618 1C84000C
|
||||
7E832214 887A002C
|
||||
98740002 8879056F
|
||||
2C030000 4182004C
|
||||
807A002D 2C03FFFF
|
||||
41820040 90610040
|
||||
C0210040 C05F1830
|
||||
EC211028 C0429500
|
||||
FC011040 41820024
|
||||
7FE3FB78 C0210040
|
||||
C05F1830 EC211028
|
||||
3D808006 618CCC7C
|
||||
7D8903A6 4E800421
|
||||
806DB654 2C03FF85
|
||||
408200AC 7FE3FB78
|
||||
38800000 C0228874
|
||||
3D808007 618C592C
|
||||
7D8903A6 4E800421
|
||||
807F00B0 907F06F4
|
||||
907F070C 807F00B4
|
||||
907F06F8 907F0710
|
||||
807F00B8 907F06FC
|
||||
907F0714 C03F00B4
|
||||
D03F2344 806DAE0C
|
||||
907F0728 887F000C
|
||||
889F221F 5484EFFE
|
||||
38BF00B0 3D808003
|
||||
618C2828 7D8903A6
|
||||
4E800421 7FC3F378
|
||||
3D808007 618C61C8
|
||||
7D8903A6 4E800421
|
||||
807F0890 C0230040
|
||||
D023002C C0230044
|
||||
D0230030 3D808002
|
||||
618CF3AC 7D8903A6
|
||||
4E800421 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 881F2219
|
||||
60000000 00000000
|
||||
C216E74C 0000009A #Playback/Core/RestoreGameInfo.asm
|
||||
7C0802A6 90010004
|
||||
9421FF50 BE810008
|
||||
38600570 3D808037
|
||||
618CF1E4 7D8903A6
|
||||
4E800421 7C7C1B78
|
||||
938DB64C 38800570
|
||||
3D808000 618CC160
|
||||
7D8903A6 4E800421
|
||||
386001A5 3D808037
|
||||
618CF1E4 7D8903A6
|
||||
4E800421 7C7E1B78
|
||||
93DC0000 38600040
|
||||
3D808037 618CF1E4
|
||||
7D8903A6 4E800421
|
||||
907C0004 38600075
|
||||
987E0000 387C001C
|
||||
907E0001 38600553
|
||||
907E0005 38600000
|
||||
907E0009 7FC3F378
|
||||
3880000D 38A00001
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
7FC3F378 388001A5
|
||||
38A00000 3D808000
|
||||
618C55F0 7D8903A6
|
||||
4E800421 887E0000
|
||||
2C030001 41820018
|
||||
3D808034 618CF314
|
||||
7D8903A6 4E800421
|
||||
4BFFFF8C 807E0001
|
||||
3C80804D 90645F90
|
||||
7FE3FB78 389E0005
|
||||
38A00138 3D808000
|
||||
618C31F4 7D8903A6
|
||||
4E800421 387F0040
|
||||
3880001C 3D808000
|
||||
618CC160 7D8903A6
|
||||
4E800421 3AE2F22C
|
||||
3A82F230 3ABE013D
|
||||
3AC00000 1C960008
|
||||
7C64A82E 7C76B9AE
|
||||
38840004 7C64A82E
|
||||
7C76A1AE 3AD60001
|
||||
2C160004 4180FFE0
|
||||
3A800000 3ABF0060
|
||||
1ED40024 7ED6AA14
|
||||
88760001 2C030000
|
||||
40820078 8876000A
|
||||
2C030078 4182006C
|
||||
7C771B78 3D808023
|
||||
618C7A04 7D8903A6
|
||||
4E800421 7EE3BB78
|
||||
3D808015 618CCC9C
|
||||
7D8903A6 4E800421
|
||||
38630198 389E015D
|
||||
1CB40010 7C842A14
|
||||
88A40000 2C050000
|
||||
40820010 38600078
|
||||
9876000A 4800001C
|
||||
38A00010 3D808000
|
||||
618C31F4 7D8903A6
|
||||
4E800421 48000004
|
||||
3A940001 2C140004
|
||||
4180FF70 887E019D
|
||||
9862F234 887E019E
|
||||
9862F238 887E019F
|
||||
9862F23C 887E01A0
|
||||
987C056F 807E01A1
|
||||
3D808037 618CF1E4
|
||||
7D8903A6 4E800421
|
||||
7C7D1B78 93BC0008
|
||||
3860008A 987D0000
|
||||
7FA3EB78 38800001
|
||||
38A00001 3D808000
|
||||
618C55F0 7D8903A6
|
||||
4E800421 7FA3EB78
|
||||
809E01A1 38A00000
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
38800004 909C000C
|
||||
7FA3EB78 48000055
|
||||
7C8802A6 3D808000
|
||||
618C55FC 7D8903A6
|
||||
4E800421 807C000C
|
||||
3D808037 618CF1E4
|
||||
7D8903A6 4E800421
|
||||
907C0010 907C0014
|
||||
7FA3EB78 48000041
|
||||
7C8802A6 3D808000
|
||||
618C55FC 7D8903A6
|
||||
4E800421 4800013C
|
||||
4E800021 2C050000
|
||||
41820018 80CDB64C
|
||||
8066000C 38630008
|
||||
7C632A14 9066000C
|
||||
4E800020 4E800021
|
||||
2C050000 41820108
|
||||
7C0802A6 90010004
|
||||
9421FF50 BE810008
|
||||
7C9E2378 7CBB2B78
|
||||
80BE0000 54A501FE
|
||||
64BD8000 834DB64C
|
||||
833A0014 2C030004
|
||||
41820014 2C030006
|
||||
41820014 2C0300C2
|
||||
41820014 3B9E0004
|
||||
48000048 3B9E0008
|
||||
48000040 389E0008
|
||||
7C7D2050 546301BA
|
||||
64634800 907A0018
|
||||
3B9A0018 807E0004
|
||||
1C630008 7C83F214
|
||||
387D0004 7C641850
|
||||
546301BA 64634800
|
||||
3863FFFC 90640004
|
||||
93B90000 93790004
|
||||
38790008 7FA4EB78
|
||||
7F65DB78 3D808000
|
||||
618C31F4 7D8903A6
|
||||
4E800421 3B390008
|
||||
7F39DA14 933A0014
|
||||
7FA3EB78 7F84E378
|
||||
7F65DB78 3D808000
|
||||
618C31F4 7D8903A6
|
||||
4E800421 7FA3EB78
|
||||
7F64DB78 3D808032
|
||||
618C8F50 7D8903A6
|
||||
4E800421 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 4E800020
|
||||
38600000 809C0014
|
||||
90640000 7FA3EB78
|
||||
809E01A1 3D808032
|
||||
618C8F50 7D8903A6
|
||||
4E800421 38600004
|
||||
38800007 38A00000
|
||||
3D808039 618C01F0
|
||||
7D8903A6 4E800421
|
||||
48000021 7C8802A6
|
||||
38A00000 3D808038
|
||||
618CFD54 7D8903A6
|
||||
4E800421 4800004C
|
||||
4E800021 7C0802A6
|
||||
90010004 9421FF50
|
||||
BE810008 806DB64C
|
||||
83A30000 887D0002
|
||||
2C030000 41820010
|
||||
807D0003 3C80804D
|
||||
90645F90 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 4E800020
|
||||
BA810008 800100B4
|
||||
382100B0 7C0803A6
|
||||
3C608017 00000000
|
||||
C216D304 00000009 #Playback/Core/RestoreLRAStart.asm
|
||||
806DB64C 80630000
|
||||
88630000 2C030002
|
||||
4082002C 3860FFFF
|
||||
38800007 3D808016
|
||||
618CCF4C 7D8903A6
|
||||
4E800421 3D808016
|
||||
618CD30C 7D8903A6
|
||||
4E800420 7FE3FB78
|
||||
60000000 00000000
|
||||
C216B9C0 00000012 #Playback/Core/RestoreStockSteal.asm
|
||||
80ADB64C 80A50004
|
||||
38800089 98850000
|
||||
808DB654 90850001
|
||||
98650005 7CA32B78
|
||||
38800006 38A00001
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
806DB64C 80630004
|
||||
38800001 38A00000
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
806DB64C 80630004
|
||||
88630000 2C030000
|
||||
41820014 3D808016
|
||||
618CBA1C 7D8903A6
|
||||
4E800420 3D808016
|
||||
618CBAC8 7D8903A6
|
||||
4E800420 00000000
|
||||
C21A501C 0000002A #Playback/Core/FastForward/FastForward.asm
|
||||
3C808048 88649D30
|
||||
2C03000E 40820040
|
||||
88649D33 2C030001
|
||||
40820034 38600001
|
||||
3D80801A 618C45E8
|
||||
7D8903A6 4E800421
|
||||
2C030002 41820018
|
||||
806DB64C 80630000
|
||||
88630000 2C030003
|
||||
41820024 38600001
|
||||
38800002 3D808002
|
||||
618C5064 7D8903A6
|
||||
4E800421 7C1AD800
|
||||
480000E0 806DB64C
|
||||
80630000 88630001
|
||||
2C030001 4182001C
|
||||
38600000 38800000
|
||||
3D808002 618C5064
|
||||
7D8903A6 4E800421
|
||||
4800000D 2C0300FF
|
||||
480000A8 7C0802A6
|
||||
90010004 9421FF50
|
||||
BE810008 3D808003
|
||||
618C0A50 7D8903A6
|
||||
4E800421 3D808002
|
||||
618CA4AC 7D8903A6
|
||||
4E800421 3D808003
|
||||
618C0A50 7D8903A6
|
||||
4E800421 80630028
|
||||
3D808036 618C8458
|
||||
7D8903A6 4E800421
|
||||
806DC18C 82830020
|
||||
4800002C 82B4002C
|
||||
8875221F 546006F7
|
||||
40820018 7E83A378
|
||||
3D808008 618C6A8C
|
||||
7D8903A6 4E800421
|
||||
82940008 2C140000
|
||||
4082FFD4 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 4E800020
|
||||
60000000 00000000
|
||||
C2377544 00000002 #Playback/Core/FastForward/IncrementPadIndex.asm
|
||||
40A2000C 38000001
|
||||
981E0003 00000000
|
||||
04376A88 881F0001 #Playback/Core/FastForward/PadAlwaysUseMasterIndex.asm
|
||||
C21A45A0 00000007 #Playback/Core/Scene/Boot to Playback Scene.asm
|
||||
48000019 7C6802A6
|
||||
3C80803D 6084ADA8
|
||||
90640004 4800001C
|
||||
4E800021 38600003
|
||||
3C808047 60849D30
|
||||
98640003 4E800020
|
||||
3800000E 00000000
|
||||
C21A6348 00000070 #Playback/Core/Scene/SceneThink_Playback.asm
|
||||
3C608047 60639D30
|
||||
88630000 2C03000E
|
||||
40820364 3860000D
|
||||
3880000E 38A00000
|
||||
3D808039 618C01F0
|
||||
7D8903A6 4E800421
|
||||
48000021 7C8802A6
|
||||
38A00000 3D808038
|
||||
618CFD54 7D8903A6
|
||||
4E800421 48000318
|
||||
4E800021 7C0802A6
|
||||
90010004 9421FF50
|
||||
BE810008 48000289
|
||||
7FC802A6 38600000
|
||||
3880FFFF 3D80803A
|
||||
618C6754 7D8903A6
|
||||
4E800421 7C7C1B78
|
||||
38800001 989C0049
|
||||
38800000 989C004A
|
||||
C03E0008 D03C0008
|
||||
C03E0010 D03C0024
|
||||
D03C0028 C03E0000
|
||||
C05E0004 7F83E378
|
||||
4800025D 7C8802A6
|
||||
4800026D 7CA802A6
|
||||
3D80803A 618C6B98
|
||||
7D8903A6 4E800421
|
||||
7C641B78 7F83E378
|
||||
C03E000C C05E000C
|
||||
3D80803A 618C7548
|
||||
7D8903A6 4E800421
|
||||
C03E0014 C05E0018
|
||||
7F83E378 4800023D
|
||||
7C8802A6 3D80803A
|
||||
618C6B98 7D8903A6
|
||||
4E800421 7C641B78
|
||||
7F83E378 C03E000C
|
||||
C05E000C 3D80803A
|
||||
618C7548 7D8903A6
|
||||
4E800421 3C602ECC
|
||||
606340FF 90610040
|
||||
7F83E378 38800001
|
||||
38A10040 3D80803A
|
||||
618C74F0 7D8903A6
|
||||
4E800421 38600020
|
||||
3D808037 618CF1E4
|
||||
7D8903A6 4E800421
|
||||
7C7D1B78 3B600000
|
||||
3D808033 618CC898
|
||||
7D8903A6 4E800421
|
||||
3D808033 618CF270
|
||||
7D8903A6 4E800421
|
||||
38600000 3D808037
|
||||
618C5538 7D8903A6
|
||||
4E800421 8062F240
|
||||
2C030000 4082001C
|
||||
38600000 7F84E378
|
||||
3D80803A 618C84BC
|
||||
7D8903A6 4E800421
|
||||
38600000 3D808037
|
||||
618C61C0 7D8903A6
|
||||
4E800421 3D808034
|
||||
618CF314 7D8903A6
|
||||
4E800421 3B7B0001
|
||||
2C1B00F0 41800008
|
||||
3B600000 3860003C
|
||||
7C7B1B96 48000119
|
||||
7C8802A6 1C630004
|
||||
7CC32214 7F83E378
|
||||
38800000 480000E9
|
||||
7CA802A6 4CC63182
|
||||
3D80803A 618C70A0
|
||||
7D8903A6 4E800421
|
||||
38600088 987D0000
|
||||
7FA3EB78 38800001
|
||||
38A00001 3D808000
|
||||
618C55F0 7D8903A6
|
||||
4E800421 7FA3EB78
|
||||
38800001 38A00000
|
||||
3D808000 618C55F0
|
||||
7D8903A6 4E800421
|
||||
887D0000 2C030001
|
||||
4082FEF0 7F83E378
|
||||
3D80803A 618C5CC4
|
||||
7D8903A6 4E800421
|
||||
3D808002 618C4F6C
|
||||
7D8903A6 4E800421
|
||||
8062F240 2C030000
|
||||
40820018 38600001
|
||||
3D808002 618C4030
|
||||
7D8903A6 4E800421
|
||||
3D80801A 618C4B60
|
||||
7D8903A6 4E800421
|
||||
48000068 4E800021
|
||||
C33E0000 00000000
|
||||
00000000 3F800000
|
||||
3F19999A 43B70000
|
||||
43AF0000 432A0000
|
||||
00000000 4E800021
|
||||
57616974 696E6720
|
||||
666F7220 67616D65
|
||||
25730000 4E800021
|
||||
00000000 2E000000
|
||||
2E2E0000 2E2E2E00
|
||||
4E800021 736C6970
|
||||
70692E67 67000000
|
||||
BA810008 800100B4
|
||||
382100B0 7C0803A6
|
||||
4E800020 3D80801A
|
||||
618C6368 7D8903A6
|
||||
4E800420 807F0000
|
||||
60000000 00000000
|
||||
041B16A8 801B09C0 #Playback/Core/Scene/Change Debug Result Screen MinorType to Debug Menu/ScenePrep_DebugResult = ScenePrep_DebugMenu.asm
|
||||
043DDA9C 07000000 #Playback/Core/Scene/Change Debug Result Screen MinorType to Debug Menu/Swap MinorType.asm
|
||||
C238D224 00000015 #Playback/Core/Sounds/AssignSoundInstanceId.asm
|
||||
900DC0E8 3C608048
|
||||
80639D30 5463443E
|
||||
2C03010E 40820090
|
||||
7C0802A6 90010004
|
||||
9421FF50 BE810008
|
||||
83EDB64C 3BDF001C
|
||||
8B9E0000 3C608048
|
||||
80639D60 809F056B
|
||||
7C032000 41810028
|
||||
3C608048 80639D60
|
||||
809F056B 7C632050
|
||||
38630001 8B9E0000
|
||||
7F83E051 40800008
|
||||
3B9C0007 1C7C00C2
|
||||
38DE0001 7CC61A14
|
||||
88660000 3863FFFF
|
||||
1C630006 38A60001
|
||||
7CA51A14 807D000C
|
||||
90650002 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 00000000
|
||||
C21A5014 00000032 #Playback/Core/Sounds/HandleFrameSoundLog.asm
|
||||
41A20014 3D80801A
|
||||
618C5024 7D8903A6
|
||||
4E800420 3C608048
|
||||
80639D30 5463443E
|
||||
2C03010E 40820168
|
||||
7C0802A6 90010004
|
||||
9421FF50 BE810008
|
||||
3D808034 618C7364
|
||||
7D8903A6 4E800421
|
||||
7C7D1B78 83EDB64C
|
||||
3BDF001C 8B9E0000
|
||||
3F008048 83189D60
|
||||
3B18FFFF 82FF056B
|
||||
7C18B800 4181009C
|
||||
7C78B850 38630001
|
||||
8B9E0000 7F83E051
|
||||
40800008 3B9C0007
|
||||
387E0001 1C9C00C2
|
||||
7F432214 3B200000
|
||||
48000060 38DA0000
|
||||
38E00000 48000028
|
||||
1C790006 7C651A14
|
||||
A0630001 1C870006
|
||||
7C862214 A0840001
|
||||
7C032000 41820030
|
||||
38E70001 88660000
|
||||
2C070003 4180FFD4
|
||||
1C790006 7C651A14
|
||||
80630003 3D808002
|
||||
618C36B8 7D8903A6
|
||||
4E800421 3B390001
|
||||
38BA0061 88650000
|
||||
7C191800 4180FF98
|
||||
387E0001 1C9C00C2
|
||||
7F432214 387A0061
|
||||
389A0000 38A00061
|
||||
3D808000 618C31F4
|
||||
7D8903A6 4E800421
|
||||
387A0000 38800061
|
||||
3D808000 618CC160
|
||||
7D8903A6 4E800421
|
||||
7C18B800 4081001C
|
||||
931F056B 3B9C0001
|
||||
2C1C0007 41800008
|
||||
3B9CFFF9 9B9E0000
|
||||
7FA3EB78 3D808034
|
||||
618C738C 7D8903A6
|
||||
4E800421 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 00000000
|
||||
C2088224 0000001D #Playback/Core/Sounds/NoDestroyVoice.asm
|
||||
3C608048 80639D30
|
||||
5463443E 2C03010E
|
||||
408200CC 7C0802A6
|
||||
90010004 9421FF50
|
||||
BE810008 83EDB64C
|
||||
3BBF001C 57DE043E
|
||||
8B9D0000 3C608048
|
||||
80639D60 809F056B
|
||||
7C032000 41810088
|
||||
3C608048 80639D60
|
||||
809F056B 7C632050
|
||||
38630001 8B9D0000
|
||||
7F83E051 40800008
|
||||
3B9C0007 1C7C00C2
|
||||
38DD0062 7CC61A14
|
||||
39000000 48000020
|
||||
1C680006 38A60001
|
||||
7CA51A14 A0650000
|
||||
7C1E1800 41820018
|
||||
39080001 88660000
|
||||
7C081800 4180FFDC
|
||||
48000024 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 3D808008
|
||||
618C8244 7D8903A6
|
||||
4E800420 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 387F0000
|
||||
60000000 00000000
|
||||
C20882B0 0000001D #Playback/Core/Sounds/NoDestroyVoice2.asm
|
||||
3C608048 80639D30
|
||||
5463443E 2C03010E
|
||||
408200CC 7C0802A6
|
||||
90010004 9421FF50
|
||||
BE810008 83EDB64C
|
||||
3BBF001C 57DE043E
|
||||
8B9D0000 3C608048
|
||||
80639D60 809F056B
|
||||
7C032000 41810088
|
||||
3C608048 80639D60
|
||||
809F056B 7C632050
|
||||
38630001 8B9D0000
|
||||
7F83E051 40800008
|
||||
3B9C0007 1C7C00C2
|
||||
38DD0062 7CC61A14
|
||||
39000000 48000020
|
||||
1C680006 38A60001
|
||||
7CA51A14 A0650000
|
||||
7C1E1800 41820018
|
||||
39080001 88660000
|
||||
7C081800 4180FFDC
|
||||
48000024 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 3D808008
|
||||
618C82D0 7D8903A6
|
||||
4E800420 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 387F0000
|
||||
60000000 00000000
|
||||
C238D0B0 00000027 #Playback/Core/Sounds/PreventDuplicateSounds.asm
|
||||
3C608048 80639D30
|
||||
5463443E 2C03010E
|
||||
40820120 7C0802A6
|
||||
90010004 9421FF50
|
||||
BE810008 83EDB64C
|
||||
3BDF001C 3BA00000
|
||||
3B400000 56FB043E
|
||||
8B9E0000 3C608048
|
||||
80639D60 809F056B
|
||||
7C032000 41810070
|
||||
3C608048 80639D60
|
||||
809F056B 7C632050
|
||||
38630001 8B9E0000
|
||||
7F83E051 40800008
|
||||
3B9C0007 1C7C00C2
|
||||
38DE0062 7CC61A14
|
||||
39000000 48000020
|
||||
1C680006 38A60001
|
||||
7CA51A14 A0650000
|
||||
7C1B1800 41820018
|
||||
39080001 88660000
|
||||
7C081800 4180FFDC
|
||||
4800000C 83450002
|
||||
3BA00001 1C7C00C2
|
||||
38DE0001 7CC61A14
|
||||
88660000 2C030010
|
||||
40800024 1C630006
|
||||
38A60001 7CA51A14
|
||||
B3650000 93450002
|
||||
88660000 38630001
|
||||
98660000 2C1D0000
|
||||
41820028 7F43D378
|
||||
BA810008 800100B4
|
||||
382100B0 7C0803A6
|
||||
3D808038 618CD2A0
|
||||
7D8903A6 4E800420
|
||||
BA810008 800100B4
|
||||
382100B0 7C0803A6
|
||||
2C1A0000 00000000
|
||||
C20055F0 0000002C #Common/EXITransferBuffer.asm
|
||||
7C0802A6 90010004
|
||||
9421FF50 BE810008
|
||||
7C7E1B78 7C9D2378
|
||||
7CBF2B78 3D808034
|
||||
618C7364 7D8903A6
|
||||
4E800421 7C7C1B78
|
||||
7FC3F378 7C9EEA14
|
||||
2C1F0000 4182001C
|
||||
7C0018AC 38630020
|
||||
7C032000 4180FFF4
|
||||
7C0004AC 4C00012C
|
||||
38600001 38800000
|
||||
3D808034 618C64C0
|
||||
7D8903A6 4E800421
|
||||
38600001 3D808034
|
||||
618C6D80 7D8903A6
|
||||
4E800421 38600001
|
||||
38800000 38A00005
|
||||
3D808034 618C6688
|
||||
7D8903A6 4E800421
|
||||
38600001 7FC4F378
|
||||
7FA5EB78 7FE6FB78
|
||||
38E00000 3D808034
|
||||
618C5E60 7D8903A6
|
||||
4E800421 38600001
|
||||
3D808034 618C5F4C
|
||||
7D8903A6 4E800421
|
||||
38600001 3D808034
|
||||
618C67B4 7D8903A6
|
||||
4E800421 38600001
|
||||
3D808034 618C6E74
|
||||
7D8903A6 4E800421
|
||||
38600001 3D808034
|
||||
618C65CC 7D8903A6
|
||||
4E800421 2C1F0000
|
||||
4082001C 7C001BAC
|
||||
38630020 7C032000
|
||||
4180FFEC 7C0004AC
|
||||
4C00012C 7F83E378
|
||||
3D808034 618C738C
|
||||
7D8903A6 4E800421
|
||||
BA810008 800100B4
|
||||
382100B0 7C0803A6
|
||||
4E800020 00000000
|
||||
C20055F8 0000000F #Common/GetIsFollower.asm
|
||||
7C0802A6 90010004
|
||||
9421FF50 BE810008
|
||||
7C7E1B78 3BE00000
|
||||
887E221F 5460EFFF
|
||||
41820038 887E000C
|
||||
3D808003 618C2330
|
||||
7D8903A6 4E800421
|
||||
3C80803B 6084CDE0
|
||||
1C030003 7C640214
|
||||
88030002 2C000000
|
||||
40820008 3BE00001
|
||||
7FE3FB78 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 4E800020
|
||||
60000000 00000000
|
||||
C216D294 00000006 #Common/IncrementFrameIndex.asm
|
||||
987F0008 3C608048
|
||||
80639D58 2C030000
|
||||
40820010 3860FF85
|
||||
906DB654 48000010
|
||||
806DB654 38630001
|
||||
906DB654 00000000
|
||||
C21C154C 00000004 #Common/Initialize Stage Data/Init Stage Data.asm
|
||||
38800204 3D808000
|
||||
618CC160 7D8903A6
|
||||
4E800421 281A0000
|
||||
60000000 00000000
|
||||
C2068EEC 00000006 #Common/Initialize Player Data/Init Player Data.asm
|
||||
3BC30000 3C808045
|
||||
60848FD0 80840020
|
||||
3D808000 618CC160
|
||||
7D8903A6 4E800421
|
||||
7FC3F378 3C808046
|
||||
60000000 00000000
|
||||
C20055FC 00000022 #Common/Gecko/ProcessCodeList.asm
|
||||
7C0802A6 90010004
|
||||
9421FF50 BE810008
|
||||
7C7D1B78 7C9E2378
|
||||
3B800000 807D0000
|
||||
5463463C 3B600008
|
||||
3B200000 2C0300C0
|
||||
41820044 2C0300C2
|
||||
4182004C 2C030004
|
||||
41820058 2C030006
|
||||
41820058 2C030008
|
||||
41820068 807D0000
|
||||
5463213E 2C03000F
|
||||
40820010 807D0004
|
||||
2C030000 4182007C
|
||||
4800004C 807D0004
|
||||
1C630008 3B630008
|
||||
4800003C 807D0004
|
||||
1C630008 3B630008
|
||||
3B200004 48000028
|
||||
3B200004 48000020
|
||||
807D0004 38630007
|
||||
54630038 3B630008
|
||||
833D0004 48000008
|
||||
3B600010 3B9C0001
|
||||
2C1E0000 4182001C
|
||||
807D0000 5463463C
|
||||
7FA4EB78 7F25CB78
|
||||
7FC903A6 4E800421
|
||||
7FBDDA14 4BFFFF38
|
||||
3C608019 606310E8
|
||||
7C63E850 BA810008
|
||||
800100B4 382100B0
|
||||
7C0803A6 4E800020
|
||||
60000000 00000000
|
||||
C209E090 00000011 #Common/FastForward/DynamicsFix.asm
|
||||
807B0028 48000009
|
||||
48000074 7C0802A6
|
||||
90010004 9421FFE8
|
||||
93E10014 7C7F1B78
|
||||
807F0014 54600211
|
||||
40820020 54600673
|
||||
41820018 7FE3FB78
|
||||
3D808037 618C3078
|
||||
7D8903A6 4E800421
|
||||
807F0010 2C030000
|
||||
41820008 4BFFFFB9
|
||||
807F0008 2C030000
|
||||
41820008 4BFFFFA9
|
||||
83E10014 8001001C
|
||||
38210018 7C0803A6
|
||||
4E800020 BB010028
|
||||
60000000 00000000
|
||||
|
||||
$Recommended: Normal Lag Reduction [Hannes Mann]
|
||||
043761EC 4800001C
|
||||
04376238 48000018
|
||||
|
||||
$Optional: Game Music OFF [UnclePunch]
|
||||
*Keep checked if you want music OFF. Uncheck "Game Music ON".
|
||||
04023FFC 38800000
|
||||
|
||||
$Optional: Widescreen 16:9 [Dan Salvato, mirrorbender, Achilles1515, UnclePunch]
|
||||
*Set Aspect Ratio to "Force 16:9" in Graphics for 16:9 monitors -----------------
|
||||
*Requires all players to have enabled for netplay.
|
||||
043BB05C 3EB00000 #External/Widescreen/Fix Screen Flash.asm
|
||||
C236A4A8 00000006 #External/Widescreen/Overwrite CObj Values.asm
|
||||
C03F0034 4800001D
|
||||
7C6802A6 C0430000
|
||||
C0630004 EC2100B2
|
||||
EC211824 48000010
|
||||
4E800021 43A00000
|
||||
435B0000 00000000
|
||||
044DDB58 3E4CCCCD #External/Widescreen/Adjust Offscreen Scissor/Adjust Bubble Zoom.asm
|
||||
04086B24 60000000 #External/Widescreen/Adjust Offscreen Scissor/Draw High Poly Models.asm
|
||||
04030C7C 38000064 #External/Widescreen/Adjust Offscreen Scissor/Left Camera Bound.asm
|
||||
04030C88 3800021C #External/Widescreen/Adjust Offscreen Scissor/Right Camera Bound.asm
|
||||
044DDB30 3F666666 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 1.asm
|
||||
044DDB34 BF666666 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Adjust Corner Value 2.asm
|
||||
044DDB2C C3660000 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Negative Vertical Bound.asm
|
||||
044DDB28 43660000 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Extend Positive Vertical Bound.asm
|
||||
044DDB4C 3D916873 #External/Widescreen/Adjust Offscreen Scissor/Fix Bubble Positions/Widen Bubble Region.asm
|
||||
C22FCFC4 00000004 #External/Widescreen/Nametag Fixes/Adjust Nametag Background X Scale.asm
|
||||
48000011 7C6802A6
|
||||
C0030000 4800000C
|
||||
4E800021 40DC7AE1
|
||||
60000000 00000000
|
||||
044DDB84 3E89FEFA #External/Widescreen/Nametag Fixes/Adjust Nametag Text X Scale.asm
|
||||
|
||||
$Optional: Disable Screen Shake [Achilles1515]
|
||||
*Disables all screen shaking
|
||||
04030E44 4E800020 #External/Disable Screen Shake/Disable Screen Shake.asm
|
||||
|
||||
$Optional: Hide HUD [UnclePunch]
|
||||
*Hides the timer and player percent HUD elements
|
||||
0416E9A4 60000000 #External/Hide Timer and Player HUD/Hide Timer HUD.asm
|
||||
0416BA80 48000014 #External/Hide Timer and Player HUD/Hide Percents/Skip Percent Anim During Stock Steal.asm
|
||||
0416E9B0 60000000 #External/Hide Timer and Player HUD/Hide Percents/Skip Player HUD Creation.asm
|
||||
|
||||
$Optional: Hide Waiting For Game [Nikki, UnclePunch]
|
||||
*Hides the waiting for game text and slippi.gg text and disables the SFX played before a replay starts
|
||||
*With this enabled, there will be no indication between matches that Melee is still running
|
||||
044DEC20 00000001 #Playback/Hide Waiting For Game/Hide Waiting For Game.asm
|
||||
|
||||
$Optional: Enable Develop Mode [UnclePunch]
|
||||
*Turns develop (debug) mode on. Allows access to frame advance, hit/hurtbox display, and alternate camera angles
|
||||
0415FDBC 480000AC #External/Enable Develop Mode/Enable Develop Mode.asm
|
||||
04089250 48000008 #External/Enable Develop Mode/Enable Stale Moves.asm
|
||||
|
||||
$Optional: Lagless FoD [Achilles, Myougi, Dan Salvato]
|
||||
*Disables particles and reflection on FoD to improve performance
|
||||
C21CBB90 00000005 #Lagless FoD
|
||||
9421FFF8 3CC0804A
|
||||
80C6ED78 3CA00002
|
||||
60A5AE44 7CA53050
|
||||
88C50000 60C60004
|
||||
98C50000 00000000
|
||||
041CC8AC FC000028
|
||||
041CBE9C 60000000
|
||||
041CBEF0 60000000
|
||||
041CBF54 60000000
|
||||
04390838 60000000
|
||||
041CD250 60000000
|
||||
041CCDCC 480000B4
|
|
@ -18,7 +18,7 @@ namespace Common
|
|||
#define BUILD_TYPE_STR ""
|
||||
#endif
|
||||
|
||||
#define SLIPPI_REV_STR "2.2.3"
|
||||
#define SLIPPI_REV_STR "2.3.0"
|
||||
|
||||
const std::string scm_slippi_semver_str = SLIPPI_REV_STR;
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ struct SConfig
|
|||
bool bFPRF = false;
|
||||
bool bAccurateNaNs = false;
|
||||
|
||||
int iTimingVariance = 40; // in milli secounds
|
||||
int iTimingVariance = 12; // in milli secounds
|
||||
bool bCPUThread = true;
|
||||
bool bDSPThread = false;
|
||||
bool bDSPHLE = true;
|
||||
|
|
|
@ -2022,6 +2022,8 @@ void CEXISlippi::handleLogInRequest()
|
|||
bool logInRes = user->AttemptLogin();
|
||||
if (!logInRes)
|
||||
{
|
||||
if (Host_RendererIsFullscreen())
|
||||
Host_Fullscreen();
|
||||
Host_LowerWindow();
|
||||
user->OpenLogInPage();
|
||||
user->ListenForLogIn();
|
||||
|
|
|
@ -649,10 +649,6 @@ void UpdateDevices()
|
|||
}
|
||||
}
|
||||
|
||||
// Hinting NetPlay that all controllers will be polled in
|
||||
// succession, in order to optimize networking
|
||||
NetPlay::SetSIPollBatching(true);
|
||||
|
||||
// Update inputs at the rate of SI
|
||||
// Typically 120hz but is variable
|
||||
g_controller_interface.UpdateInput();
|
||||
|
@ -668,9 +664,6 @@ void UpdateDevices()
|
|||
!!s_channel[3].device->GetData(s_channel[3].in_hi.hex, s_channel[3].in_lo.hex);
|
||||
|
||||
UpdateInterrupts();
|
||||
|
||||
// Polling finished
|
||||
NetPlay::SetSIPollBatching(false);
|
||||
}
|
||||
|
||||
SIDevices GetDeviceType(int channel)
|
||||
|
|
|
@ -830,6 +830,10 @@ static void EndField()
|
|||
// Run when: When a frame is scanned (progressive/interlace)
|
||||
void Update(u64 ticks)
|
||||
{
|
||||
// Try calling SI Poll every time update is called
|
||||
Core::UpdateInputGate(!SConfig::GetInstance().m_BackgroundInput);
|
||||
SerialInterface::UpdateDevices();
|
||||
|
||||
// Movie's frame counter should be updated before actually rendering the frame,
|
||||
// in case frame counter display is enabled
|
||||
|
||||
|
@ -863,27 +867,6 @@ void Update(u64 ticks)
|
|||
if (s_half_line_count == 0 || s_half_line_count == GetHalfLinesPerEvenField())
|
||||
Core::Callback_NewField();
|
||||
|
||||
// If an SI poll is scheduled to happen on this half-line, do it!
|
||||
|
||||
if (s_half_line_of_next_si_poll == s_half_line_count)
|
||||
{
|
||||
Core::UpdateInputGate(!SConfig::GetInstance().m_BackgroundInput);
|
||||
SerialInterface::UpdateDevices();
|
||||
s_half_line_of_next_si_poll += 2 * SerialInterface::GetPollXLines();
|
||||
}
|
||||
|
||||
// If this half-line is at the actual boundary of either field, schedule an SI poll to happen
|
||||
// some number of half-lines in the future
|
||||
|
||||
if (s_half_line_count == 0)
|
||||
{
|
||||
s_half_line_of_next_si_poll = num_half_lines_for_si_poll; // first results start at vsync
|
||||
}
|
||||
if (s_half_line_count == GetHalfLinesPerEvenField())
|
||||
{
|
||||
s_half_line_of_next_si_poll = GetHalfLinesPerEvenField() + num_half_lines_for_si_poll;
|
||||
}
|
||||
|
||||
// Move to the next half-line and potentially roll-over the count to zero. If we've reached
|
||||
// the beginning of a new full-line, update the timer
|
||||
|
||||
|
|
|
@ -276,7 +276,9 @@ static void BPWritten(const BPCmd& bp)
|
|||
}
|
||||
else
|
||||
{
|
||||
// Temp hack to get lag reduction code working
|
||||
if (destAddr == 0x0) { destAddr = 0x4f0c00; }
|
||||
|
||||
// We should be able to get away with deactivating the current bbox tracking
|
||||
// here. Not sure if there's a better spot to put this.
|
||||
// the number of lines copied is determined by the y scale * source efb height
|
||||
|
@ -298,19 +300,22 @@ static void BPWritten(const BPCmd& bp)
|
|||
destAddr, srcRect.left, srcRect.top, srcRect.right, srcRect.bottom,
|
||||
bpmem.copyTexSrcWH.x + 1, destStride, height, yScale);
|
||||
|
||||
bool is_depth_copy = bpmem.zcontrol.pixel_format == PEControl::Z24;
|
||||
g_texture_cache->CopyRenderTargetToTexture(
|
||||
destAddr, EFBCopyFormat::XFB, copy_width, height, destStride, is_depth_copy, srcRect,
|
||||
false, false, yScale, s_gammaLUT[PE_copy.gamma], bpmem.triggerEFBCopy.clamp_top,
|
||||
bpmem.triggerEFBCopy.clamp_bottom, bpmem.copyfilter.GetCoefficients());
|
||||
//bool is_depth_copy = bpmem.zcontrol.pixel_format == PEControl::Z24;
|
||||
//auto one = std::chrono::high_resolution_clock::now();
|
||||
//g_texture_cache->CopyRenderTargetToTexture(
|
||||
// destAddr, EFBCopyFormat::XFB, copy_width, height, destStride, is_depth_copy, srcRect,
|
||||
// false, false, yScale, s_gammaLUT[PE_copy.gamma], bpmem.triggerEFBCopy.clamp_top,
|
||||
// bpmem.triggerEFBCopy.clamp_bottom, bpmem.copyfilter.GetCoefficients());
|
||||
//auto two = std::chrono::high_resolution_clock::now();
|
||||
//WARN_LOG(SLIPPI, "timer: %d", (two - one).count());
|
||||
|
||||
// This stays in to signal end of a "frame"
|
||||
g_renderer->RenderToXFB(destAddr, srcRect, destStride, height, s_gammaLUT[PE_copy.gamma]);
|
||||
|
||||
|
||||
if (g_ActiveConfig.bImmediateXFB)
|
||||
{
|
||||
// below div two to convert from bytes to pixels - it expects width, not stride
|
||||
g_renderer->Swap(destAddr, destStride / 2, destStride, height, CoreTiming::GetTicks());
|
||||
g_renderer->Swap(destAddr, destStride / 2, destStride, height, CoreTiming::GetTicks(), s_gammaLUT[PE_copy.gamma], srcRect, bpmem.copyfilter.GetCoefficients(), yScale, bpmem.triggerEFBCopy.clamp_top, bpmem.triggerEFBCopy.clamp_bottom);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1219,6 +1219,147 @@ void Renderer::UpdateWidescreenHeuristic()
|
|||
m_was_orthographically_anamorphic = ortho_looks_anamorphic;
|
||||
}
|
||||
|
||||
void Renderer::Swap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, u64 ticks, float gamma, const MathUtil::Rectangle<int>& srcRect, const CopyFilterCoefficients::Values& filter_coefficients, float y_scale, bool clamp_top, bool clamp_bottom)
|
||||
{
|
||||
if (SConfig::GetInstance().bWii)
|
||||
m_is_game_widescreen = Config::Get(Config::SYSCONF_WIDESCREEN);
|
||||
|
||||
// suggested_aspect_mode overrides SYSCONF_WIDESCREEN
|
||||
if (g_ActiveConfig.suggested_aspect_mode == AspectMode::Analog)
|
||||
m_is_game_widescreen = false;
|
||||
else if (g_ActiveConfig.suggested_aspect_mode == AspectMode::AnalogWide)
|
||||
m_is_game_widescreen = true;
|
||||
|
||||
// If widescreen hack is disabled override game's AR if UI is set to 4:3 or 16:9.
|
||||
if (!g_ActiveConfig.bWidescreenHack)
|
||||
{
|
||||
const auto aspect_mode = g_ActiveConfig.aspect_mode;
|
||||
if (aspect_mode == AspectMode::Analog)
|
||||
m_is_game_widescreen = false;
|
||||
else if (aspect_mode == AspectMode::AnalogWide)
|
||||
m_is_game_widescreen = true;
|
||||
}
|
||||
|
||||
if (xfb_addr && fb_width && fb_stride && fb_height)
|
||||
{
|
||||
// Get the current XFB from texture cache
|
||||
MathUtil::Rectangle<int> xfb_rect;
|
||||
const auto* xfb_entry =
|
||||
g_texture_cache->GetXFBTexture(xfb_addr, fb_width, fb_height, fb_stride, &xfb_rect, gamma, srcRect, filter_coefficients, y_scale, clamp_top, clamp_bottom);
|
||||
if (xfb_entry &&
|
||||
(!g_ActiveConfig.bSkipPresentingDuplicateXFBs || xfb_entry->id != m_last_xfb_id))
|
||||
{
|
||||
const bool is_duplicate_frame = xfb_entry->id == m_last_xfb_id;
|
||||
m_last_xfb_id = xfb_entry->id;
|
||||
|
||||
// Since we use the common pipelines here and draw vertices if a batch is currently being
|
||||
// built by the vertex loader, we end up trampling over its pointer, as we share the buffer
|
||||
// with the loader, and it has not been unmapped yet. Force a pipeline flush to avoid this.
|
||||
//g_vertex_manager->Flush();
|
||||
|
||||
// Render any UI elements to the draw list.
|
||||
{
|
||||
auto lock = GetImGuiLock();
|
||||
|
||||
#ifdef IS_PLAYBACK
|
||||
if (SConfig::GetInstance().m_slippiEnableSeek && g_replayComm->getSettings().rollbackDisplayMethod == "off" && g_playbackStatus->inSlippiPlayback)
|
||||
OSD::DrawSlippiPlaybackControls();
|
||||
#endif
|
||||
|
||||
DrawDebugText();
|
||||
OSD::DrawMessages();
|
||||
|
||||
ImGui::Render();
|
||||
}
|
||||
|
||||
// Render the XFB to the screen.
|
||||
BeginUtilityDrawing();
|
||||
if (!IsHeadless())
|
||||
{
|
||||
BindBackbuffer({ {0.0f, 0.0f, 0.0f, 1.0f} });
|
||||
|
||||
if (!is_duplicate_frame)
|
||||
UpdateWidescreenHeuristic();
|
||||
|
||||
UpdateDrawRectangle();
|
||||
|
||||
// Adjust the source rectangle instead of using an oversized viewport to render the XFB.
|
||||
auto render_target_rc = GetTargetRectangle();
|
||||
auto render_source_rc = xfb_rect;
|
||||
AdjustRectanglesToFitBounds(&render_target_rc, &render_source_rc, m_backbuffer_width,
|
||||
m_backbuffer_height);
|
||||
RenderXFBToScreen(render_target_rc, xfb_entry->texture.get(), render_source_rc);
|
||||
|
||||
DrawImGui();
|
||||
|
||||
// Present to the window system.
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(m_swap_mutex);
|
||||
PresentBackbuffer();
|
||||
}
|
||||
|
||||
// Update the window size based on the frame that was just rendered.
|
||||
// Due to depending on guest state, we need to call this every frame.
|
||||
SetWindowSize(xfb_rect.GetWidth(), xfb_rect.GetHeight());
|
||||
}
|
||||
|
||||
if (!is_duplicate_frame)
|
||||
{
|
||||
m_fps_counter.Update();
|
||||
|
||||
if (IsFrameDumping())
|
||||
DumpCurrentFrame(xfb_entry->texture.get(), xfb_rect, ticks);
|
||||
|
||||
// Begin new frame
|
||||
m_frame_count++;
|
||||
g_stats.ResetFrame();
|
||||
}
|
||||
|
||||
g_shader_cache->RetrieveAsyncShaders();
|
||||
g_vertex_manager->OnEndFrame();
|
||||
BeginImGuiFrame();
|
||||
|
||||
// We invalidate the pipeline object at the start of the frame.
|
||||
// This is for the rare case where only a single pipeline configuration is used,
|
||||
// and hybrid ubershaders have compiled the specialized shader, but without any
|
||||
// state changes the specialized shader will not take over.
|
||||
g_vertex_manager->InvalidatePipelineObject();
|
||||
|
||||
// Flush any outstanding EFB copies to RAM, in case the game is running at an uncapped frame
|
||||
// rate and not waiting for vblank. Otherwise, we'd end up with a huge list of pending copies.
|
||||
g_texture_cache->FlushEFBCopies();
|
||||
|
||||
if (!is_duplicate_frame)
|
||||
{
|
||||
// Remove stale EFB/XFB copies.
|
||||
g_texture_cache->Cleanup(m_frame_count);
|
||||
Core::Callback_FramePresented();
|
||||
}
|
||||
|
||||
// Handle any config changes, this gets propogated to the backend.
|
||||
CheckForConfigChanges();
|
||||
g_Config.iSaveTargetId = 0;
|
||||
|
||||
EndUtilityDrawing();
|
||||
}
|
||||
else
|
||||
{
|
||||
Flush();
|
||||
}
|
||||
|
||||
// Update our last xfb values
|
||||
m_last_xfb_addr = xfb_addr;
|
||||
m_last_xfb_ticks = ticks;
|
||||
m_last_xfb_width = fb_width;
|
||||
m_last_xfb_stride = fb_stride;
|
||||
m_last_xfb_height = fb_height;
|
||||
}
|
||||
else
|
||||
{
|
||||
Flush();
|
||||
}
|
||||
}
|
||||
|
||||
void Renderer::Swap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, u64 ticks)
|
||||
{
|
||||
if (SConfig::GetInstance().bWii)
|
||||
|
|
|
@ -220,6 +220,7 @@ public:
|
|||
|
||||
// Finish up the current frame, print some stats
|
||||
void Swap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, u64 ticks);
|
||||
void Swap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, u64 ticks, float gamma, const MathUtil::Rectangle<int>& srcRect, const CopyFilterCoefficients::Values& filter_coefficients, float y_scale, bool clamp_top, bool clamp_bottom);
|
||||
|
||||
void UpdateWidescreenHeuristic();
|
||||
|
||||
|
|
|
@ -1713,7 +1713,7 @@ static void GetDisplayRectForXFBEntry(TextureCacheBase::TCacheEntry* entry, u32
|
|||
|
||||
TextureCacheBase::TCacheEntry*
|
||||
TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height, u32 stride,
|
||||
MathUtil::Rectangle<int>* display_rect)
|
||||
MathUtil::Rectangle<int>* display_rect)
|
||||
{
|
||||
const u8* src_data = Memory::GetPointer(address);
|
||||
if (!src_data)
|
||||
|
@ -1742,9 +1742,9 @@ TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height, u32 stride,
|
|||
|
||||
// Create a new VRAM texture, and fill it with the data from guest RAM.
|
||||
entry = AllocateCacheEntry(TextureConfig(width, height, 1, 1, 1, AbstractTextureFormat::RGBA8,
|
||||
AbstractTextureFlag_RenderTarget));
|
||||
AbstractTextureFlag_RenderTarget));
|
||||
entry->SetGeneralParameters(address, total_size,
|
||||
TextureAndTLUTFormat(TextureFormat::XFB, TLUTFormat::IA8), true);
|
||||
TextureAndTLUTFormat(TextureFormat::XFB, TLUTFormat::IA8), true);
|
||||
entry->SetDimensions(width, height, 1);
|
||||
entry->SetHashes(hash, hash);
|
||||
entry->SetXfbCopy(stride);
|
||||
|
@ -1753,8 +1753,8 @@ TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height, u32 stride,
|
|||
entry->may_have_overlapping_textures = false;
|
||||
entry->frameCount = FRAMECOUNT_INVALID;
|
||||
if (!g_ActiveConfig.UseGPUTextureDecoding() ||
|
||||
!DecodeTextureOnGPU(entry, 0, src_data, total_size, entry->format.texfmt, width, height,
|
||||
width, height, stride, texMem, entry->format.tlutfmt))
|
||||
!DecodeTextureOnGPU(entry, 0, src_data, total_size, entry->format.texfmt, width, height,
|
||||
width, height, stride, texMem, entry->format.tlutfmt))
|
||||
{
|
||||
const u32 decoded_size = width * height * sizeof(u32);
|
||||
CheckTempSize(decoded_size);
|
||||
|
@ -1776,7 +1776,216 @@ TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height, u32 stride,
|
|||
// While this isn't really an xfb copy, we can treat it as such for dumping purposes
|
||||
static int xfb_count = 0;
|
||||
entry->texture->Save(
|
||||
fmt::format("{}xfb_loaded_{}.png", File::GetUserPath(D_DUMPTEXTURES_IDX), xfb_count++), 0);
|
||||
fmt::format("{}xfb_loaded_{}.png", File::GetUserPath(D_DUMPTEXTURES_IDX), xfb_count++), 0);
|
||||
}
|
||||
|
||||
GetDisplayRectForXFBEntry(entry, width, height, display_rect);
|
||||
return entry;
|
||||
}
|
||||
|
||||
TextureCacheBase::TCacheEntry*
|
||||
TextureCacheBase::GetXFBTexture(u32 address, u32 width, u32 height, u32 stride,
|
||||
MathUtil::Rectangle<int>* display_rect, float gamma, const MathUtil::Rectangle<int>& src_rect, const CopyFilterCoefficients::Values& copy_filter_coefficients, float y_scale, bool clamp_top, bool clamp_bottom)
|
||||
{
|
||||
auto filter_coefficients = GetVRAMCopyFilterCoefficients(copy_filter_coefficients);
|
||||
const u8* src_data = Memory::GetPointer(address);
|
||||
if (!src_data)
|
||||
{
|
||||
ERROR_LOG(VIDEO, "Trying to load XFB texture from invalid address 0x%8x", address);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
u32 scaled_tex_w = g_renderer->EFBToScaledX(width);
|
||||
u32 scaled_tex_h = g_renderer->EFBToScaledY(height);
|
||||
|
||||
// Compute total texture size. XFB textures aren't tiled, so this is simple.
|
||||
const u32 total_size = height * stride;
|
||||
const u64 hash = Common::GetHash64(src_data, total_size, 0);
|
||||
|
||||
TCacheEntry* entry = nullptr;
|
||||
const TextureConfig config(scaled_tex_w, scaled_tex_h, 1, g_framebuffer_manager->GetEFBLayers(),
|
||||
1, AbstractTextureFormat::RGBA8, AbstractTextureFlag_RenderTarget);
|
||||
entry = AllocateCacheEntry(config);
|
||||
|
||||
auto baseFormat = TexDecoder_GetEFBCopyBaseFormat(EFBCopyFormat::XFB);
|
||||
u32 blockH = TexDecoder_GetBlockHeightInTexels(baseFormat);
|
||||
const u32 blockW = TexDecoder_GetBlockWidthInTexels(baseFormat);
|
||||
|
||||
// Round up source height to multiple of block size
|
||||
u32 actualHeight = Common::AlignUp(height, blockH);
|
||||
const u32 actualWidth = Common::AlignUp(width, blockW);
|
||||
|
||||
u32 num_blocks_y = actualHeight / blockH;
|
||||
const u32 num_blocks_x = actualWidth / blockW;
|
||||
|
||||
// RGBA takes two cache lines per block; all others take one
|
||||
const u32 bytes_per_block = baseFormat == TextureFormat::RGBA8 ? 64 : 32;
|
||||
|
||||
const u32 bytes_per_row = num_blocks_x * bytes_per_block;
|
||||
const u32 covered_range = num_blocks_y * stride;
|
||||
|
||||
if (entry)
|
||||
{
|
||||
entry->SetGeneralParameters(address, 0, TexDecoder_GetEFBCopyBaseFormat(EFBCopyFormat::XFB), true);
|
||||
entry->SetDimensions(width, height, 1);
|
||||
entry->frameCount = FRAMECOUNT_INVALID;
|
||||
entry->should_force_safe_hashing = true;
|
||||
entry->SetXfbCopy(stride);
|
||||
entry->may_have_overlapping_textures = false;
|
||||
entry->is_custom_tex = false;
|
||||
|
||||
|
||||
///////////////////////
|
||||
// Flush EFB pokes first, as they're expected to be included.
|
||||
g_framebuffer_manager->FlushEFBPokes();
|
||||
|
||||
// Get the pipeline which we will be using. If the compilation failed, this will be null.
|
||||
const AbstractPipeline* copy_pipeline =
|
||||
g_shader_cache->GetEFBCopyToVRAMPipeline(TextureConversionShaderGen::GetShaderUid(
|
||||
EFBCopyFormat::XFB, false, false, false,
|
||||
NeedsCopyFilterInShader(filter_coefficients)));
|
||||
if (!copy_pipeline)
|
||||
{
|
||||
WARN_LOG(VIDEO, "Skipping EFB copy to VRAM due to missing pipeline.");
|
||||
return entry;
|
||||
}
|
||||
|
||||
const auto scaled_src_rect = g_renderer->ConvertEFBRectangle(src_rect);
|
||||
const auto framebuffer_rect = g_renderer->ConvertFramebufferRectangle(
|
||||
scaled_src_rect, g_framebuffer_manager->GetEFBFramebuffer());
|
||||
AbstractTexture* src_texture = g_framebuffer_manager->ResolveEFBColorTexture(framebuffer_rect);
|
||||
|
||||
src_texture->FinishedRendering();
|
||||
g_renderer->BeginUtilityDrawing();
|
||||
|
||||
const bool linear_filter = g_renderer->GetEFBScale() != 1 || y_scale > 1.0f;
|
||||
|
||||
// Fill uniform buffer.
|
||||
struct Uniforms
|
||||
{
|
||||
float src_left, src_top, src_width, src_height;
|
||||
float filter_coefficients[3];
|
||||
float gamma_rcp;
|
||||
float clamp_top;
|
||||
float clamp_bottom;
|
||||
float pixel_height;
|
||||
u32 padding;
|
||||
};
|
||||
Uniforms uniforms;
|
||||
const float rcp_efb_width = 1.0f / static_cast<float>(g_framebuffer_manager->GetEFBWidth());
|
||||
const float rcp_efb_height = 1.0f / static_cast<float>(g_framebuffer_manager->GetEFBHeight());
|
||||
uniforms.src_left = framebuffer_rect.left * rcp_efb_width;
|
||||
uniforms.src_top = framebuffer_rect.top * rcp_efb_height;
|
||||
uniforms.src_width = framebuffer_rect.GetWidth() * rcp_efb_width;
|
||||
uniforms.src_height = framebuffer_rect.GetHeight() * rcp_efb_height;
|
||||
uniforms.filter_coefficients[0] = filter_coefficients.upper;
|
||||
uniforms.filter_coefficients[1] = filter_coefficients.middle;
|
||||
uniforms.filter_coefficients[2] = filter_coefficients.lower;
|
||||
uniforms.gamma_rcp = 1.0f / gamma;
|
||||
uniforms.clamp_top = clamp_top ? framebuffer_rect.top * rcp_efb_height : 0.0f;
|
||||
uniforms.clamp_bottom = clamp_bottom ? framebuffer_rect.bottom * rcp_efb_height : 1.0f;
|
||||
uniforms.pixel_height = g_ActiveConfig.bCopyEFBScaled ? rcp_efb_height : 1.0f / EFB_HEIGHT;
|
||||
uniforms.padding = 0;
|
||||
g_vertex_manager->UploadUtilityUniforms(&uniforms, sizeof(uniforms));
|
||||
|
||||
// Use the copy pipeline to render the VRAM copy.
|
||||
g_renderer->SetAndDiscardFramebuffer(entry->framebuffer.get());
|
||||
g_renderer->SetViewportAndScissor(entry->framebuffer->GetRect());
|
||||
g_renderer->SetPipeline(copy_pipeline);
|
||||
g_renderer->SetTexture(0, src_texture);
|
||||
g_renderer->SetSamplerState(0, linear_filter ? RenderState::GetLinearSamplerState() :
|
||||
RenderState::GetPointSamplerState());
|
||||
g_renderer->Draw(0, 3);
|
||||
g_renderer->EndUtilityDrawing();
|
||||
entry->texture->FinishedRendering();
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if (g_ActiveConfig.bDumpXFBTarget)
|
||||
{
|
||||
static int xfb_count = 0;
|
||||
entry->texture->Save(
|
||||
fmt::format("{}xfb_copy_{}.png", File::GetUserPath(D_DUMPTEXTURES_IDX), xfb_count++),
|
||||
0);
|
||||
}
|
||||
u8* dst = Memory::GetPointer(address);
|
||||
UninitializeXFBMemory(dst, stride, bytes_per_row, num_blocks_y);
|
||||
|
||||
// Invalidate all textures, if they are either fully overwritten by our efb copy, or if they
|
||||
// have a different stride than our efb copy. Partly overwritten textures with the same stride
|
||||
// as our efb copy are marked to check them for partial texture updates.
|
||||
// TODO: The logic to detect overlapping strided efb copies is not 100% accurate.
|
||||
bool strided_efb_copy = stride != bytes_per_row;
|
||||
auto iter = FindOverlappingTextures(address, covered_range);
|
||||
while (iter.first != iter.second)
|
||||
{
|
||||
TCacheEntry* overlapping_entry = iter.first->second;
|
||||
|
||||
if (overlapping_entry->addr == address && overlapping_entry->is_xfb_copy)
|
||||
{
|
||||
for (auto& reference : overlapping_entry->references)
|
||||
{
|
||||
reference->reference_changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (overlapping_entry->OverlapsMemoryRange(address, covered_range))
|
||||
{
|
||||
u32 overlap_range = std::min(overlapping_entry->addr + overlapping_entry->size_in_bytes,
|
||||
address + covered_range) -
|
||||
std::max(overlapping_entry->addr, address);
|
||||
if (overlapping_entry->memory_stride != stride ||
|
||||
(!strided_efb_copy && overlapping_entry->size_in_bytes == overlap_range) ||
|
||||
(strided_efb_copy && overlapping_entry->size_in_bytes == overlap_range &&
|
||||
overlapping_entry->addr == address))
|
||||
{
|
||||
// Pending EFB copies which are completely covered by this new copy can simply be tossed,
|
||||
// instead of having to flush them later on, since this copy will write over everything.
|
||||
iter.first = InvalidateTexture(iter.first, true);
|
||||
continue;
|
||||
}
|
||||
|
||||
// We don't want to change the may_have_overlapping_textures flag on XFB container entries
|
||||
// because otherwise they can't be re-used/updated, leaking textures for several frames.
|
||||
if (!overlapping_entry->is_xfb_container)
|
||||
overlapping_entry->may_have_overlapping_textures = true;
|
||||
|
||||
// Do not load textures by hash, if they were at least partly overwritten by an efb copy.
|
||||
// In this case, comparing the hash is not enough to check, if two textures are identical.
|
||||
if (overlapping_entry->textures_by_hash_iter != textures_by_hash.end())
|
||||
{
|
||||
textures_by_hash.erase(overlapping_entry->textures_by_hash_iter);
|
||||
overlapping_entry->textures_by_hash_iter = textures_by_hash.end();
|
||||
}
|
||||
}
|
||||
++iter.first;
|
||||
}
|
||||
|
||||
if (OpcodeDecoder::g_record_fifo_data)
|
||||
{
|
||||
// Mark the memory behind this efb copy as dynamicly generated for the Fifo log
|
||||
for (u32 i = 0; i < num_blocks_y; i++)
|
||||
{
|
||||
FifoRecorder::GetInstance().UseMemory(address, bytes_per_row, MemoryUpdate::TEXTURE_MAP,
|
||||
true);
|
||||
address += stride;
|
||||
}
|
||||
}
|
||||
|
||||
// Even if the copy is deferred, still compute the hash. This way if the copy is used as a texture
|
||||
// in a subsequent draw before it is flushed, it will have the same hash.
|
||||
if (entry)
|
||||
{
|
||||
const u64 entry_hash = entry->CalculateHash();
|
||||
entry->SetHashes(entry_hash, entry_hash);
|
||||
textures_by_address.emplace(address, entry);
|
||||
}
|
||||
}
|
||||
|
||||
if (entry && entry->is_xfb_container)
|
||||
{
|
||||
StitchXFBCopy(entry);
|
||||
entry->texture->FinishedRendering();
|
||||
}
|
||||
|
||||
GetDisplayRectForXFBEntry(entry, width, height, display_rect);
|
||||
|
|
|
@ -223,6 +223,8 @@ public:
|
|||
u32 tmem_address_odd = 0);
|
||||
TCacheEntry* GetXFBTexture(u32 address, u32 width, u32 height, u32 stride,
|
||||
MathUtil::Rectangle<int>* display_rect);
|
||||
TCacheEntry* GetXFBTexture(u32 address, u32 width, u32 height, u32 stride,
|
||||
MathUtil::Rectangle<int>* display_rect, float gamma, const MathUtil::Rectangle<int>& src_rect, const CopyFilterCoefficients::Values& copy_filter_coefficients, float y_scale, bool clamp_top, bool clamp_bottom);
|
||||
|
||||
virtual void BindTextures();
|
||||
void CopyRenderTargetToTexture(u32 dstAddr, EFBCopyFormat dstFormat, u32 width, u32 height,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue