mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-01-31 01:15:24 +01:00
Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1d4101490 | ||
|
|
a714582c1c | ||
|
|
0e7da0f1a8 | ||
|
|
4f7c8a77f6 | ||
|
|
1842fe6db8 | ||
|
|
1feb31498d | ||
|
|
f3632c44c8 | ||
|
|
32a6e62212 | ||
|
|
575ec07553 | ||
|
|
18308b6525 | ||
|
|
d52f29dcd7 | ||
|
|
288d8047ae | ||
|
|
26b232292c | ||
|
|
1fff69b0aa | ||
|
|
4d347305b5 | ||
|
|
2fd6f8e4ac | ||
|
|
97f316eca7 | ||
|
|
f7ba355697 | ||
|
|
c334040a96 |
@@ -19,7 +19,7 @@ LIBJPEG=9f
|
||||
LIBPNG=1.6.44
|
||||
LIBWEBP=1.4.0
|
||||
LZ4=b8fd2d15309dd4e605070bd4486e26b6ef814e29
|
||||
SDL=SDL2-2.30.10
|
||||
SDL=SDL2-2.30.11
|
||||
QT=6.8.1
|
||||
ZSTD=1.5.6
|
||||
|
||||
@@ -37,7 +37,7 @@ fd6f417fe9e3a071cf1424a5152d926a34c4a3c5070745470be6cf12a404ed79 $LIBBACKTRACE.
|
||||
60c4da1d5b7f0aa8d158da48e8f8afa9773c1c8baa5d21974df61f1886b8ce8e libpng-$LIBPNG.tar.xz
|
||||
61f873ec69e3be1b99535634340d5bde750b2e4447caa1db9f61be3fd49ab1e5 libwebp-$LIBWEBP.tar.gz
|
||||
0728800155f3ed0a0c87e03addbd30ecbe374f7b080678bbca1506051d50dec3 $LZ4.tar.gz
|
||||
f59adf36a0fcf4c94198e7d3d776c1b3824211ab7aeebeb31fe19836661196aa $SDL.tar.gz
|
||||
8b8d4aef2038533da814965220f88f77d60dfa0f32685f80ead65e501337da7f $SDL.tar.gz
|
||||
8c29e06cf42aacc1eafc4077ae2ec6c6fcb96a626157e0593d5e82a34fd403c1 zstd-$ZSTD.tar.gz
|
||||
40b14562ef3bd779bc0e0418ea2ae08fa28235f8ea6e8c0cb3bce1d6ad58dcaf qtbase-everywhere-src-$QT.tar.xz
|
||||
138cc2909aa98f5ff7283e36eb3936eb5e625d3ca3b4febae2ca21d8903dd237 qtimageformats-everywhere-src-$QT.tar.xz
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
"sources": [
|
||||
{
|
||||
"type": "archive",
|
||||
"url": "https://libsdl.org/release/SDL2-2.30.10.tar.gz",
|
||||
"sha256": "f59adf36a0fcf4c94198e7d3d776c1b3824211ab7aeebeb31fe19836661196aa"
|
||||
"url": "https://libsdl.org/release/SDL2-2.30.11.tar.gz",
|
||||
"sha256": "8b8d4aef2038533da814965220f88f77d60dfa0f32685f80ead65e501337da7f"
|
||||
}
|
||||
],
|
||||
"cleanup": [
|
||||
|
||||
@@ -40,7 +40,7 @@ fi
|
||||
|
||||
FREETYPE=2.13.3
|
||||
HARFBUZZ=10.0.1
|
||||
SDL=SDL2-2.30.10
|
||||
SDL=SDL2-2.30.11
|
||||
ZSTD=1.5.6
|
||||
LZ4=b8fd2d15309dd4e605070bd4486e26b6ef814e29
|
||||
LIBPNG=1.6.44
|
||||
@@ -76,7 +76,7 @@ CMAKE_ARCH_UNIVERSAL=-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
|
||||
cat > SHASUMS <<EOF
|
||||
0550350666d427c74daeb85d5ac7bb353acba5f76956395995311a9c6f063289 freetype-$FREETYPE.tar.xz
|
||||
e7358ea86fe10fb9261931af6f010d4358dac64f7074420ca9bc94aae2bdd542 harfbuzz-$HARFBUZZ.tar.gz
|
||||
f59adf36a0fcf4c94198e7d3d776c1b3824211ab7aeebeb31fe19836661196aa $SDL.tar.gz
|
||||
8b8d4aef2038533da814965220f88f77d60dfa0f32685f80ead65e501337da7f $SDL.tar.gz
|
||||
8c29e06cf42aacc1eafc4077ae2ec6c6fcb96a626157e0593d5e82a34fd403c1 zstd-$ZSTD.tar.gz
|
||||
0728800155f3ed0a0c87e03addbd30ecbe374f7b080678bbca1506051d50dec3 $LZ4.tar.gz
|
||||
60c4da1d5b7f0aa8d158da48e8f8afa9773c1c8baa5d21974df61f1886b8ce8e libpng-$LIBPNG.tar.xz
|
||||
|
||||
@@ -22,7 +22,7 @@ fi
|
||||
|
||||
FREETYPE=2.13.3
|
||||
HARFBUZZ=10.0.1
|
||||
SDL=SDL2-2.30.10
|
||||
SDL=SDL2-2.30.11
|
||||
ZSTD=1.5.6
|
||||
LZ4=b8fd2d15309dd4e605070bd4486e26b6ef814e29
|
||||
LIBPNG=1.6.44
|
||||
@@ -56,7 +56,7 @@ CMAKE_COMMON=(
|
||||
cat > SHASUMS <<EOF
|
||||
0550350666d427c74daeb85d5ac7bb353acba5f76956395995311a9c6f063289 freetype-$FREETYPE.tar.xz
|
||||
e7358ea86fe10fb9261931af6f010d4358dac64f7074420ca9bc94aae2bdd542 harfbuzz-$HARFBUZZ.tar.gz
|
||||
f59adf36a0fcf4c94198e7d3d776c1b3824211ab7aeebeb31fe19836661196aa $SDL.tar.gz
|
||||
8b8d4aef2038533da814965220f88f77d60dfa0f32685f80ead65e501337da7f $SDL.tar.gz
|
||||
8c29e06cf42aacc1eafc4077ae2ec6c6fcb96a626157e0593d5e82a34fd403c1 zstd-$ZSTD.tar.gz
|
||||
0728800155f3ed0a0c87e03addbd30ecbe374f7b080678bbca1506051d50dec3 $LZ4.tar.gz
|
||||
60c4da1d5b7f0aa8d158da48e8f8afa9773c1c8baa5d21974df61f1886b8ce8e libpng-$LIBPNG.tar.xz
|
||||
|
||||
@@ -49,7 +49,7 @@ set LIBPNG=1643
|
||||
set LZ4=b8fd2d15309dd4e605070bd4486e26b6ef814e29
|
||||
set QT=6.8.1
|
||||
set QTMINOR=6.8
|
||||
set SDL=SDL2-2.30.10
|
||||
set SDL=SDL2-2.30.11
|
||||
set WEBP=1.4.0
|
||||
set ZLIB=1.3.1
|
||||
set ZLIBSHORT=131
|
||||
@@ -66,7 +66,7 @@ call :downloadfile "lpng%LIBPNG%.zip" https://download.sourceforge.net/libpng/lp
|
||||
call :downloadfile "jpegsr%LIBJPEG%.zip" https://ijg.org/files/jpegsr%LIBJPEG%.zip 6255da8c89e09d694e6800688c76145eb6870a76ac0d36c74fccd61b3940aafa || goto error
|
||||
call :downloadfile "libwebp-%WEBP%.tar.gz" "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-%WEBP%.tar.gz" 61f873ec69e3be1b99535634340d5bde750b2e4447caa1db9f61be3fd49ab1e5 || goto error
|
||||
call :downloadfile "lz4-%LZ4%.zip" "https://github.com/lz4/lz4/archive/%LZ4%.zip" 0c33119688d6b180c7e760b0acd70059222389cfd581632623784bee27e51a31 || goto error
|
||||
call :downloadfile "%SDL%.zip" "https://libsdl.org/release/%SDL%.zip" 14b06b30d3400953875e73b0c4771cad1483488a1ef816803610f22b32300ce8 || goto error
|
||||
call :downloadfile "%SDL%.zip" "https://libsdl.org/release/%SDL%.zip" a0b3e7ac5f708042683ff0f22e069bdf75563540c615f9854ecc9bc8913e2488 || goto error
|
||||
call :downloadfile "qtbase-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtbase-everywhere-src-%QT%.zip" e22d997bd15b795a176c8da62c8c1da0a674eb534e02f7c01ca507bf11bce0c3 || goto error
|
||||
call :downloadfile "qtimageformats-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtimageformats-everywhere-src-%QT%.zip" 247a0a58039275a5a4fb499a600a90f66dc6e00321bb6f86a9b8d8020344d853 || goto error
|
||||
call :downloadfile "qtsvg-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtsvg-everywhere-src-%QT%.zip" 57bd332e5550ff70a852560c591b786b6ba587c5e41cb5ef91038d82db137ab9 || goto error
|
||||
|
||||
@@ -47,7 +47,7 @@ set LIBPNG=1643
|
||||
set LZ4=b8fd2d15309dd4e605070bd4486e26b6ef814e29
|
||||
set QT=6.8.1
|
||||
set QTMINOR=6.8
|
||||
set SDL=SDL2-2.30.10
|
||||
set SDL=SDL2-2.30.11
|
||||
set WEBP=1.4.0
|
||||
set ZLIB=1.3.1
|
||||
set ZLIBSHORT=131
|
||||
@@ -64,7 +64,7 @@ call :downloadfile "lpng%LIBPNG%.zip" https://download.sourceforge.net/libpng/lp
|
||||
call :downloadfile "jpegsr%LIBJPEG%.zip" https://ijg.org/files/jpegsr%LIBJPEG%.zip 6255da8c89e09d694e6800688c76145eb6870a76ac0d36c74fccd61b3940aafa || goto error
|
||||
call :downloadfile "libwebp-%WEBP%.tar.gz" "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-%WEBP%.tar.gz" 61f873ec69e3be1b99535634340d5bde750b2e4447caa1db9f61be3fd49ab1e5 || goto error
|
||||
call :downloadfile "lz4-%LZ4%.zip" "https://github.com/lz4/lz4/archive/%LZ4%.zip" 0c33119688d6b180c7e760b0acd70059222389cfd581632623784bee27e51a31 || goto error
|
||||
call :downloadfile "%SDL%.zip" "https://libsdl.org/release/%SDL%.zip" 14b06b30d3400953875e73b0c4771cad1483488a1ef816803610f22b32300ce8 || goto error
|
||||
call :downloadfile "%SDL%.zip" "https://libsdl.org/release/%SDL%.zip" a0b3e7ac5f708042683ff0f22e069bdf75563540c615f9854ecc9bc8913e2488 || goto error
|
||||
call :downloadfile "qtbase-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtbase-everywhere-src-%QT%.zip" e22d997bd15b795a176c8da62c8c1da0a674eb534e02f7c01ca507bf11bce0c3 || goto error
|
||||
call :downloadfile "qtimageformats-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtimageformats-everywhere-src-%QT%.zip" 247a0a58039275a5a4fb499a600a90f66dc6e00321bb6f86a9b8d8020344d853 || goto error
|
||||
call :downloadfile "qtsvg-everywhere-src-%QT%.zip" "https://download.qt.io/official_releases/qt/%QTMINOR%/%QT%/submodules/qtsvg-everywhere-src-%QT%.zip" 57bd332e5550ff70a852560c591b786b6ba587c5e41cb5ef91038d82db137ab9 || goto error
|
||||
|
||||
3031
3rdparty/include/xxhash.h
vendored
3031
3rdparty/include/xxhash.h
vendored
File diff suppressed because it is too large
Load Diff
@@ -8742,7 +8742,7 @@ SCPS-15079:
|
||||
SCPS-15080:
|
||||
name: "我が竜を見よ"
|
||||
name-sort: "わがりゅうをみよ"
|
||||
name-en: "Waga Ryuomiyo - Pride of the Dragon Peace"
|
||||
name-en: "Waga Ryuu wo miyo - Pride of the Dragon Peace"
|
||||
region: "NTSC-J"
|
||||
SCPS-15081:
|
||||
name: "どこでもいっしょ トロといっぱい"
|
||||
@@ -17545,10 +17545,12 @@ SLES-51654:
|
||||
gsHWFixes:
|
||||
recommendedBlendingLevel: 3 # Improves lighting.
|
||||
SLES-51658:
|
||||
name: "Piglet's Big Game"
|
||||
name: "Disney's ferkels grosses abenteuer-spiel"
|
||||
name-en: "Piglet's Big Game"
|
||||
region: "PAL-G"
|
||||
SLES-51659:
|
||||
name: "Piglet's Big Game"
|
||||
name: "Disney's les aventures de porcinet"
|
||||
name-en: "Piglet's Big Game"
|
||||
region: "PAL-F"
|
||||
SLES-51660:
|
||||
name: "Risk - Global Domination"
|
||||
@@ -17570,12 +17572,15 @@ SLES-51665:
|
||||
region: "PAL-S"
|
||||
SLES-51666:
|
||||
name: "Piglet - El Gran Juego de Disney"
|
||||
name-en: "Piglet's Big Game"
|
||||
region: "PAL-S"
|
||||
SLES-51667:
|
||||
name: "Piglet's Big Game"
|
||||
name: "Disney's Pimpi Piccolo Grande Eroe"
|
||||
name-en: "Piglet's Big Game"
|
||||
region: "PAL-I"
|
||||
SLES-51668:
|
||||
name: "Piglet's Big Game"
|
||||
name: "Disney's Knorretje Kleine Grote Held"
|
||||
name-en: "Piglet's Big Game"
|
||||
region: "PAL-NL"
|
||||
SLES-51670:
|
||||
name: "Alter Echo"
|
||||
@@ -32001,8 +32006,8 @@ SLPM-55095:
|
||||
name-en: "Shinkyoku Soukai Polyphonica - The Black - Episode 1 & 2 Box Edition"
|
||||
region: "NTSC-J"
|
||||
SLPM-55096:
|
||||
name: "THUNDERFORCE Ⅳ"
|
||||
name-sort: "さんだーふぉーす4"
|
||||
name: "THUNDERFORCE Ⅵ"
|
||||
name-sort: "さんだーふぉーす6"
|
||||
name-en: "ThunderForce VI"
|
||||
region: "NTSC-J"
|
||||
compat: 5
|
||||
@@ -35305,7 +35310,7 @@ SLPM-62132:
|
||||
region: "NTSC-J"
|
||||
SLPM-62133:
|
||||
name: "ブラッディロア 3 [HUDSON THE BEST]"
|
||||
name-sort: "ぶらっでぃろあ 3 [はどそん ざ べすと]"
|
||||
name-sort: "ぶらっでぃろあ 3 [HUDSON THE BEST]"
|
||||
name-en: "Bloody Roar 3 [HUDSON THE BEST]"
|
||||
region: "NTSC-J"
|
||||
SLPM-62134:
|
||||
@@ -36229,7 +36234,7 @@ SLPM-62324:
|
||||
SLPM-62325:
|
||||
name: "ハイヒートメジャーリーグベースボール 2003 [THE BEST タカラモノ]"
|
||||
name-sort: "はいひーとめじゃーりーぐべーすぼーる 2003 [THE BEST たからもの]"
|
||||
name-en: "High Heat Major League Baseball 2003 [KONAMI The BEST]"
|
||||
name-en: "High Heat Major League Baseball 2003 [Takara THE BEST]"
|
||||
region: "NTSC-J"
|
||||
SLPM-62326:
|
||||
name: "G-taste麻雀 [フィギュア同梱スペシャル版]"
|
||||
@@ -36382,7 +36387,7 @@ SLPM-62354:
|
||||
SLPM-62355:
|
||||
name: "チョロQ HG2 [THE BEST タカラモノ]"
|
||||
name-sort: "ちょろQ HG2 [THE BEST たからもの]"
|
||||
name-en: "Choro Q HG 2"
|
||||
name-en: "Choro Q HG 2 [Takara THE BEST]"
|
||||
region: "NTSC-J"
|
||||
gsHWFixes:
|
||||
roundSprite: 2 # Fixes sprite ghosting.
|
||||
@@ -37516,12 +37521,12 @@ SLPM-62568:
|
||||
region: "NTSC-J"
|
||||
SLPM-62569:
|
||||
name: "PC原人 [HUDSON THE BEST]"
|
||||
name-sort: "PCげんじん はどそん・ざ・べすと"
|
||||
name-sort: "PCげんじん [HUDSON THE BEST]"
|
||||
name-en: "PC Genjin [Hudson The Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-62570:
|
||||
name: "高橋名人の冒険島 [HUDSON THE BEST]"
|
||||
name-sort: "たかはしめいじんのぼうけんじま はどそん・ざ・べすと"
|
||||
name-sort: "たかはしめいじんのぼうけんじま [HUDSON THE BEST]"
|
||||
name-en: "Takahashi Meijin no Adventure Island [Hudson The Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-62571:
|
||||
@@ -37592,17 +37597,17 @@ SLPM-62582:
|
||||
region: "NTSC-J"
|
||||
SLPM-62583:
|
||||
name: "キュービックロードランナー [HUDSON THE BEST]"
|
||||
name-sort: "きゅーびっくろーどらんなー はどそん・ざ・べすと"
|
||||
name-sort: "きゅーびっくろーどらんなー [HUDSON THE BEST]"
|
||||
name-en: "Hudson Selection Vol.1 - Cubic Lode Runner [Hudson The Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-62584:
|
||||
name: "スターソルジャー [HUDSON THE BEST]"
|
||||
name-sort: "すたーそるじゃー はどそん・ざ・べすと"
|
||||
name-sort: "すたーそるじゃー [HUDSON THE BEST]"
|
||||
name-en: "Hudson Selection Vol.2 - Star Soldier [Hudson The Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-62585:
|
||||
name: "魁!クロマティ高校 [HUDSON THE BEST]"
|
||||
name-sort: "さきがけ!くろまてぃこうこう はどそん・ざ・べすと"
|
||||
name-sort: "さきがけ!くろまてぃこうこう [HUDSON THE BEST]"
|
||||
name-en: "Sakigake! Cromartie High School [Hudson The Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-62586:
|
||||
@@ -37663,7 +37668,7 @@ SLPM-62598:
|
||||
region: "NTSC-J"
|
||||
SLPM-62599:
|
||||
name: "ボンバーマンカートDX [HUDSON THE BEST]"
|
||||
name-sort: "ぼんばーまんかーとDX はどそん ざ べすと"
|
||||
name-sort: "ぼんばーまんかーとDX [HUDSON THE BEST]"
|
||||
name-en: "Bomberman Kart DX"
|
||||
region: "NTSC-J"
|
||||
SLPM-62600:
|
||||
@@ -38472,7 +38477,7 @@ SLPM-62762:
|
||||
region: "NTSC-J"
|
||||
SLPM-62763:
|
||||
name: "ボンバーマンランド3 [HUDSON THE BEST]"
|
||||
name-sort: "ぼんばーまんらんど3 はどそん・ざ・べすと"
|
||||
name-sort: "ぼんばーまんらんど3 [HUDSON THE BEST]"
|
||||
name-en: "Bomberman Land 3 [Hudson Best Version]"
|
||||
region: "NTSC-J"
|
||||
SLPM-62764:
|
||||
@@ -39391,7 +39396,7 @@ SLPM-65116:
|
||||
region: "NTSC-J"
|
||||
SLPM-65117:
|
||||
name: "機甲兵団 J-PHOENIX [THE BEST タカラモノ]"
|
||||
name-sort: "きこうへいだん じぇいふぇにっくす [ざ・べすと・たからもの]"
|
||||
name-sort: "きこうへいだん じぇいふぇにっくす [THE BEST たからもの]"
|
||||
name-en: "Kikou Heidan J-Phoenix [Takara The Best]"
|
||||
region: "NTSC-J"
|
||||
memcardFilters:
|
||||
@@ -39552,7 +39557,7 @@ SLPM-65148:
|
||||
SLPM-65149:
|
||||
name: "チョロQ HG [THE BEST タカラモノ]"
|
||||
name-sort: "ちょろQ HG [THE BEST タカラモノ]"
|
||||
name-en: "Choro Q HG [THE BEST TAKARAMONO]"
|
||||
name-en: "Choro Q HG [Takara THE BEST]"
|
||||
region: "NTSC-J"
|
||||
SLPM-65150:
|
||||
name: "エアロダンシング 4 ニュージェネレーション"
|
||||
@@ -40595,9 +40600,9 @@ SLPM-65324:
|
||||
name-en: "Gregory Horror Show - Soul Collector"
|
||||
region: "NTSC-J"
|
||||
SLPM-65325:
|
||||
name: "レスキューヘリ エアレンジャー2 低価格版"
|
||||
name-sort: "れすきゅーへり えあれんじゃー2 ていかかくばん"
|
||||
name-en: "Air Ranger 2 - Rescue Helicopter [Best]"
|
||||
name: "レスキューヘリ エアレンジャー2 [わくわくプライス]"
|
||||
name-sort: "れすきゅーへり えあれんじゃー2 [わくわくプライス]"
|
||||
name-en: "Air Ranger 2 - Rescue Helicopter [WakWak Price]"
|
||||
region: "NTSC-J"
|
||||
SLPM-65326:
|
||||
name: "チョロQ HG4"
|
||||
@@ -42871,7 +42876,7 @@ SLPM-65732:
|
||||
compat: 5
|
||||
SLPM-65734:
|
||||
name: "北へ。Diamond Dust [HUDSON THE BEST]"
|
||||
name-sort: "きたへ Diamond Dust はどそん・ざ・べすと"
|
||||
name-sort: "きたへ Diamond Dust [HUDSON THE BEST]"
|
||||
name-en: "Kita he - Diamond Dust [Hudson The Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-65735:
|
||||
@@ -43909,7 +43914,7 @@ SLPM-65911:
|
||||
region: "NTSC-J"
|
||||
SLPM-65912:
|
||||
name: "ボボボーボ・ボーボボ ハジけ祭 [HUDSON THE BEST]"
|
||||
name-sort: "ぼぼぼーぼ ぼーぼぼ はじけまつり [はどそん・ざ・べすと]"
|
||||
name-sort: "ぼぼぼーぼ ぼーぼぼ はじけまつり [HUDSON THE BEST]"
|
||||
name-en: "Boboboubo Boubobo [Hudson the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-65913:
|
||||
@@ -43946,7 +43951,7 @@ SLPM-65916:
|
||||
SLPM-65917:
|
||||
name: "トランスフォーマー [THE BEST タカラモノ]"
|
||||
name-sort: "とらんすふぉーまー [THE BEST たからもの]"
|
||||
name-en: "Transformers Tatakai [The Best]"
|
||||
name-en: "Transformers Tatakai [Takara THE BEST]"
|
||||
region: "NTSC-J"
|
||||
SLPM-65918:
|
||||
name: "Dear My Friend ~Love like powdery snow~"
|
||||
@@ -44305,7 +44310,7 @@ SLPM-65978:
|
||||
region: "NTSC-J"
|
||||
SLPM-65980:
|
||||
name: "ドリームミックスTV ワールドファイターズ [HUDSON THE BEST]"
|
||||
name-sort: "どりーむみっくすTV わーるどふぁいたーず はどそん・ざ・べすと"
|
||||
name-sort: "どりーむみっくすTV わーるどふぁいたーず [HUDSON THE BEST]"
|
||||
name-en: "Dream Mix TV World Fighters [Hudson the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-65981:
|
||||
@@ -46117,7 +46122,7 @@ SLPM-66261:
|
||||
SLPM-66262:
|
||||
name: "トム・クランシーシリーズ レインボーシックス3 [UBISOFT BEST]"
|
||||
name-sort: "とむくらんしーしりーず れいんぼーしっくす3 [UBISOFT BEST]"
|
||||
name-en: "Tom Clancy's Rainbow Six 3 [Ubisoft The Best]"
|
||||
name-en: "Tom Clancy's Rainbow Six 3 [Ubisoft Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-66263:
|
||||
name: "フル スペクトラム ウォリアー"
|
||||
@@ -47575,9 +47580,9 @@ SLPM-66495:
|
||||
// This patch skips over the stack code, allowing the game to boot.
|
||||
patch=1,EE,00149F18,word,10000003
|
||||
SLPM-66496:
|
||||
name: "ユービーアイソフト ベスト トム・クランシーシリーズ スプリンターセル カオスセオリー"
|
||||
name-sort: "とむくらんしーしりーず すぷりんたーせる かおすせおりー [ゆーびーあいそふと べすと]"
|
||||
name-en: "Tom Clancy's Splinter Cell - Chaos Theory"
|
||||
name: "トム・クランシーシリーズ スプリンターセル カオスセオリー [UBISOFT BEST]"
|
||||
name-sort: "とむくらんしーしりーず すぷりんたーせる かおすせおりー [UBISOFT BEST]"
|
||||
name-en: "Tom Clancy's Splinter Cell - Chaos Theory [Ubisoft Best]"
|
||||
region: "NTSC-J"
|
||||
gsHWFixes:
|
||||
minimumBlendingLevel: 4 # Fixes missing lights especially in NVGs.
|
||||
@@ -47746,8 +47751,8 @@ SLPM-66520:
|
||||
name-en: "BioHazard - Code Veronica [Premium Box]"
|
||||
region: "NTSC-J"
|
||||
SLPM-66521:
|
||||
name: "タイトーメモリーズ 下巻 TAITO BEST"
|
||||
name-sort: "たいとーめもりーず げかん TAITO BEST"
|
||||
name: "タイトーメモリーズ 下巻 [TAITO BEST]"
|
||||
name-sort: "たいとーめもりーず げかん [TAITO BEST]"
|
||||
name-en: "Taito Memories Vol.2 [TAITO BEST]"
|
||||
region: "NTSC-J"
|
||||
compat: 5
|
||||
@@ -48003,8 +48008,8 @@ SLPM-66567:
|
||||
roundSprite: 1 # Reduces misaligned bloom.
|
||||
mergeSprite: 1 # Removes bloom explosion around electrical lights and other light sources such as moon/sun.
|
||||
SLPM-66568:
|
||||
name: "ユービーアイソフト ベスト ブラザー イン アームズ ロード トゥ ヒル サーティ"
|
||||
name-sort: "ぶらざー いん あーむず ろーど とぅ ひる さーてぃ [ゆーびーあいそふと べすと]"
|
||||
name: "ブラザー イン アームズ ロード トゥ ヒル サーティ [UBISOFT BEST]"
|
||||
name-sort: "ぶらざー いん あーむず ろーど とぅ ひる さーてぃ [UBISOFT BEST]"
|
||||
name-en: "Brothers in Arms - Road to Hill 30 [Ubisoft Best]"
|
||||
region: "NTSC-J"
|
||||
gsHWFixes:
|
||||
@@ -48647,7 +48652,7 @@ SLPM-66672:
|
||||
SLPM-66673:
|
||||
name: "プリンス・オブ・ペルシャ ケンシ ノ ココロ [UBISOFT BEST]"
|
||||
name-sort: "ぷりんす おぶ ぺるしゃ けんし の こころ [UBISOFT BEST]"
|
||||
name-en: "Prince of Persia - Warrior Within [Ubisoft the Best]"
|
||||
name-en: "Prince of Persia - Warrior Within [Ubisoft Best]"
|
||||
region: "NTSC-J"
|
||||
gsHWFixes:
|
||||
autoFlush: 2 # Reduces post-processing misalignment.
|
||||
@@ -49287,14 +49292,14 @@ SLPM-66774:
|
||||
region: "NTSC-J"
|
||||
SLPM-66775:
|
||||
name: "タイトーメモリーズ 上巻 [Eternal Hits]"
|
||||
name-sort: "たいとーめもりーず じょうかん [Eternal Hits]"
|
||||
name-sort: "たいとーめもりーず 01 じょうかん [Eternal Hits]"
|
||||
name-en: "Taito Memories - Joukan [Eternal Hits]"
|
||||
region: "NTSC-J"
|
||||
gsHWFixes:
|
||||
roundSprite: 1 # Fixes vertical and horizontal lines.
|
||||
SLPM-66776:
|
||||
name: "タイトーメモリーズ 下巻 [Eternal Hits]"
|
||||
name-sort: "たいとーめもりーず げかん [Eternal Hits]"
|
||||
name-sort: "たいとーめもりーず 02 げかん [Eternal Hits]"
|
||||
name-en: "Taito Memories Gekan [Eternal Hits]"
|
||||
region: "NTSC-J"
|
||||
gsHWFixes:
|
||||
@@ -49508,7 +49513,7 @@ SLPM-66807:
|
||||
SLPM-66808:
|
||||
name: "ゴーストリコン アドバンスウォーファイター [UBISOFT BEST]"
|
||||
name-sort: "ごーすとりこん あどばんすうぉーふぁいたー [UBISOFT BEST]"
|
||||
name-en: "Tom Clancy's Ghost Recon - Advanced Warfighter [Ubisoft the Best]"
|
||||
name-en: "Tom Clancy's Ghost Recon - Advanced Warfighter [Ubisoft Best]"
|
||||
region: "NTSC-J"
|
||||
gsHWFixes:
|
||||
recommendedBlendingLevel: 4 # Fixes building and ground colours.
|
||||
@@ -49818,7 +49823,7 @@ SLPM-66867:
|
||||
SLPM-66868:
|
||||
name: "スプリンターセル 二重スパイ [UBISOFT BEST]"
|
||||
name-sort: "すぷりんたーせる にじゅうすぱい [UBISOFT BEST]"
|
||||
name-en: "Tom Clancy's Splinter Cell - Double Agent [Ubisoft the Best]"
|
||||
name-en: "Tom Clancy's Splinter Cell - Double Agent [Ubisoft Best]"
|
||||
region: "NTSC-J"
|
||||
gsHWFixes:
|
||||
halfPixelOffset: 4 # Aligns post effects.
|
||||
@@ -51101,7 +51106,9 @@ SLPM-74007:
|
||||
name-en: "Busin - Wizardry Alternative [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74044:
|
||||
name: "Space Channel 5 - Part 2 [PlayStation2 the Best]"
|
||||
name: "スペースチャンネル5 パート2 [PlayStation2 the Best]"
|
||||
name-sort: "すぺーすちゃんねる5 ぱーと2 [PlayStation2 the Best]"
|
||||
name-en: "Space Channel 5 - Part 2 [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74101:
|
||||
name: "ボンバーマンランド2 [PlayStation2 the Best]"
|
||||
@@ -51193,24 +51200,29 @@ SLPM-74212:
|
||||
name-en: "Sengoku Musou Moushouden [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74213:
|
||||
name: "幻想水滸伝Ⅳ"
|
||||
name-sort: "げんそうすいこでん4"
|
||||
name-en: "Gensou Suikoden IV"
|
||||
name: "幻想水滸伝Ⅳ [PlayStation2 the Best]"
|
||||
name-sort: "げんそうすいこでん4 [PlayStation2 the Best]"
|
||||
name-en: "Gensou Suikoden IV [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74214:
|
||||
name: "電車でGO!FINAL"
|
||||
name-sort: "でんしゃでごーFINAL"
|
||||
name-en: "Densha de Go! Final"
|
||||
name: "電車でGO!FINAL [PlayStation2 the Best]"
|
||||
name-sort: "でんしゃでごーFINAL [PlayStation2 the Best]"
|
||||
name-en: "Densha de Go! Final [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74215:
|
||||
name: "真・三國無双3 [PlayStation2 the Best]"
|
||||
name-sort: "しんさんごくむそう3 [PlayStation2 the Best]"
|
||||
name-en: "Shin Sangoku Musou 3 [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74216:
|
||||
name: "真・三國無双3 猛将伝 [PlayStation2 the Best]"
|
||||
name-sort: "しんさんごくむそう3 もうしょうでん [PlayStation2 the Best]"
|
||||
name-en: "Shin Sangoku Musou 3 - Moushouden [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74217:
|
||||
name: "真・三國無双3"
|
||||
name-sort: "しんさんごくむそう3"
|
||||
name-en: "Shin Sangoku Musou 3"
|
||||
name: "真・三國無双3 [PlayStation2 the Best] [メガパック]"
|
||||
name-sort: "しんさんごくむそう3 [PlayStation2 the Best] [めがぱっく]"
|
||||
name-en: "Shin Sangoku Musou 3 [PlayStation2 the Best] [Mega Pack]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74218:
|
||||
name: "シャイニング・ティアーズ [PlayStation2 the Best]"
|
||||
@@ -51331,7 +51343,7 @@ SLPM-74234:
|
||||
gsHWFixes:
|
||||
alignSprite: 1 # Helps align bloom.
|
||||
SLPM-74235:
|
||||
name: "戦国無双 [PlayStation2 the Best][価格改定版]"
|
||||
name: "戦国無双 [PlayStation2 the Best]"
|
||||
name-sort: "せんごくむそう [PlayStation2 the Best]"
|
||||
name-en: "Sengoku Musou [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
@@ -51405,7 +51417,7 @@ SLPM-74244:
|
||||
roundModes:
|
||||
eeRoundMode: 0 # Fixes enemies not moving (especially Chapter 7 boss).
|
||||
SLPM-74245:
|
||||
name: "モンスターハンター2(dos) [PlayStation2 the Best]"
|
||||
name: "モンスターハンター2 [PlayStation2 the Best]"
|
||||
name-sort: "もんすたーはんたー2 [PlayStation2 the Best]"
|
||||
name-en: "Monster Hunter 2 [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
@@ -51617,9 +51629,9 @@ SLPM-74274:
|
||||
name-en: "EX Jinsei Game II [PlayStation 2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74275:
|
||||
name: "戦国BASARA 2 英雄外伝"
|
||||
name-sort: "せんごくばさら 2 ひーろーず"
|
||||
name-en: "Sengoku Basara 2 Heroes"
|
||||
name: "戦国BASARA 2 英雄外伝 [PlayStation2 the Best]"
|
||||
name-sort: "せんごくばさら 2 ひーろーず [PlayStation2 the Best]"
|
||||
name-en: "Sengoku Basara 2 Heroes [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74276:
|
||||
name: "ガンダム無双2 [PlayStation2 the Best]"
|
||||
@@ -51638,29 +51650,29 @@ SLPM-74278:
|
||||
name-en: "Persona 4 [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74279:
|
||||
name: "真・三國無双4 猛将伝"
|
||||
name-sort: "しんさんごくむそう4 もうしょうでん"
|
||||
name-en: "Shin Sangoku Musou 4 - Moushouden"
|
||||
name: "真・三國無双4 猛将伝 [PlayStation2 the Best]"
|
||||
name-sort: "しんさんごくむそう4 もうしょうでん [PlayStation2 the Best]"
|
||||
name-en: "Shin Sangoku Musou 4 - Moushouden [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74281:
|
||||
name: "信長の野望・革新"
|
||||
name-sort: "のぶながのやぼう かくしん"
|
||||
name-en: "Nobunaga no Yabou - Kakushin"
|
||||
name: "信長の野望・革新 [PlayStation2 the Best]"
|
||||
name-sort: "のぶながのやぼう かくしん [PlayStation2 the Best]"
|
||||
name-en: "Nobunaga no Yabou - Kakushin [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74282:
|
||||
name: "無双OROCHI 魔王再臨"
|
||||
name-sort: "むそうOROCHI まおうさいりん"
|
||||
name-en: "Musou Orochi - Maou Sairin"
|
||||
name: "無双OROCHI 魔王再臨 [PlayStation2 the Best]"
|
||||
name-sort: "むそうOROCHI まおうさいりん [PlayStation2 the Best]"
|
||||
name-en: "Musou Orochi - Maou Sairin [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74283:
|
||||
name: "真・三國無双4 Empires"
|
||||
name-sort: "しんさんごくむそう4 えんぱいあーず"
|
||||
name-en: "Shin Sangoku Musou 4 - Empires"
|
||||
name: "真・三國無双4 Empires [PlayStation2 the Best]"
|
||||
name-sort: "しんさんごくむそう4 えんぱいあーず [PlayStation2 the Best]"
|
||||
name-en: "Shin Sangoku Musou 4 - Empires [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74284:
|
||||
name: "戦国無双2 Empires"
|
||||
name-sort: "せんごくむそう2 Empires"
|
||||
name-en: "Sengoku Musou 2 - Empires"
|
||||
name: "戦国無双2 Empires [PlayStation2 the Best]"
|
||||
name-sort: "せんごくむそう2 Empires [PlayStation2 the Best]"
|
||||
name-en: "Sengoku Musou 2 - Empires [PlayStation2 the Best]"
|
||||
region: "NTSC-J"
|
||||
SLPM-74286:
|
||||
name: "真・三國無双5 Special [PlayStation2 the Best] [ディスク 1]"
|
||||
@@ -52305,7 +52317,7 @@ SLPS-20087:
|
||||
region: "NTSC-J"
|
||||
SLPS-20089:
|
||||
name: "ガンハーツ [未発売]"
|
||||
name-sort: "がんはーつ"
|
||||
name-sort: "がんはーつ [みはつばい]"
|
||||
name-en: "Gun-Heats [Cancelled]"
|
||||
region: "NTSC-J"
|
||||
SLPS-20090:
|
||||
@@ -56827,7 +56839,7 @@ SLPS-25419:
|
||||
SLPS-25420:
|
||||
name: "シンドバットアドベンチャーは榎本加奈子でどうですか"
|
||||
name-sort: "しんどばっどあどべんちゃーはえのもとかなこでどうですか"
|
||||
name-en: "Golden Voyage - Sindbad Adventure"
|
||||
name-en: "Sindbad Adventure wa Enomoto Kanako de Doudesuka"
|
||||
region: "NTSC-J"
|
||||
SLPS-25421:
|
||||
name: "牧場物語 Oh! ワンダフルライフ [初回版]"
|
||||
|
||||
@@ -1117,6 +1117,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000172700004431000029010000,XiaoMi Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,platform:Mac OS X,
|
||||
03000000120c0000100e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000120c0000101e000000010000,Zeroplus P4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
|
||||
03000000bc2000000155000000010000,SNK NEOGEO Arcade Stick Pro,a:b1,b:b4,x:b0,y:b3,back:b10,guide:b9,start:b11,leftshoulder:b2,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
|
||||
|
||||
# Linux
|
||||
03000000c82d00000031000011010000,8BitDo Adapter,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,
|
||||
@@ -1324,7 +1325,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
030000000d0f00008501000015010000,Hori Switch Split Pad Pro,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
030000000d0f00006e00000011010000,Horipad 4 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000000d0f00006600000011010000,Horipad 4 PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,touchpad:b13,x:b0,y:b3,platform:Linux,
|
||||
030000000d0f0000ee00000011010000,Horipad Mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000000d0f0000ee00000011010000,Horipad Mini 4,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b13,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
|
||||
030000000d0f0000c100000011010000,Horipad Nintendo Switch Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,misc1:b13,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
|
||||
030000000d0f00006700000001010000,Horipad One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
|
||||
050000000d0f0000f600000001000000,Horipad Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
|
||||
@@ -1609,6 +1610,7 @@ xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,
|
||||
03000000a30600001005000000010000,Saitek P150,a:b0,b:b1,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b7,lefttrigger:b6,rightshoulder:b2,righttrigger:b5,x:b3,y:b4,platform:Linux,
|
||||
03000000a30600000701000000010000,Saitek P220,a:b2,b:b3,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,lefttrigger:b7,rightshoulder:b4,righttrigger:b5,x:b0,y:b1,platform:Linux,
|
||||
03000000a30600000cff000010010000,Saitek P2500 Force Rumble,a:b2,b:b3,back:b11,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a3,righty:a2,start:b10,x:b0,y:b1,platform:Linux,
|
||||
03000000a30600000d5f000010010000,Saitek P2600,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b11,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b8,x:b0,y:b3,platform:Linux,
|
||||
03000000a30600000c04000011010000,Saitek P2900,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b9,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b12,x:b0,y:b3,platform:Linux,
|
||||
03000000a306000018f5000010010000,Saitek P3200 Rumble,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,platform:Linux,
|
||||
03000000300f00001201000010010000,Saitek P380,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,platform:Linux,
|
||||
|
||||
@@ -169,7 +169,9 @@ def checkDuplicates(source_files, target_extensions, crash_protection_type=0):
|
||||
print("║")
|
||||
print("║ You may choose to OVERWRITE or SKIP all of these.")
|
||||
if (crash_protection_type == 2):
|
||||
print("║ NOTE: chdman cannot overwrite .cso files. These will be skipped regardless.")
|
||||
# chdman CLI just crashes trying to overwrite a .iso file
|
||||
print("║ NOTE: chdman cannot overwrite .iso files, which are used as an intermediate format.")
|
||||
print("║ These will be skipped regardless.")
|
||||
choice = input("║ Press 'O' to overwrite or 'S' to skip and press ENTER: ").lower()
|
||||
|
||||
if (choice in dupe_options):
|
||||
|
||||
@@ -460,8 +460,8 @@ std::vector<std::unique_ptr<SymbolTreeNode>> SymbolTreeModel::populateChildren(
|
||||
|
||||
for (const ccc::ast::StructOrUnion::FlatField& field : fields)
|
||||
{
|
||||
if (symbol)
|
||||
parent_handle = ccc::NodeHandle(*symbol, nullptr);
|
||||
if (field.symbol)
|
||||
parent_handle = ccc::NodeHandle(*field.symbol, nullptr);
|
||||
|
||||
SymbolTreeLocation field_location = location.addOffset(field.base_offset + field.node->offset_bytes);
|
||||
if (field_location.type == SymbolTreeLocation::NONE)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <algorithm>
|
||||
|
||||
GamePatchDetailsWidget::GamePatchDetailsWidget(std::string name, const std::string& author,
|
||||
const std::string& description, bool enabled, SettingsWindow* dialog, QWidget* parent)
|
||||
const std::string& description, bool tristate, Qt::CheckState checkState, SettingsWindow* dialog, QWidget* parent)
|
||||
: QWidget(parent)
|
||||
, m_dialog(dialog)
|
||||
, m_name(name)
|
||||
@@ -30,7 +30,8 @@ GamePatchDetailsWidget::GamePatchDetailsWidget(std::string name, const std::stri
|
||||
.arg(description.empty() ? tr("No description provided.") : QString::fromStdString(description)));
|
||||
|
||||
pxAssert(dialog->getSettingsInterface());
|
||||
m_ui.enabled->setChecked(enabled);
|
||||
m_ui.enabled->setTristate(tristate);
|
||||
m_ui.enabled->setCheckState(checkState);
|
||||
connect(m_ui.enabled, &QCheckBox::checkStateChanged, this, &GamePatchDetailsWidget::onEnabledStateChanged);
|
||||
}
|
||||
|
||||
@@ -40,9 +41,25 @@ void GamePatchDetailsWidget::onEnabledStateChanged(int state)
|
||||
{
|
||||
SettingsInterface* si = m_dialog->getSettingsInterface();
|
||||
if (state == Qt::Checked)
|
||||
si->AddToStringList("Patches", "Enable", m_name.c_str());
|
||||
{
|
||||
si->AddToStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_ENABLE_CONFIG_KEY, m_name.c_str());
|
||||
si->RemoveFromStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_DISABLE_CONFIG_KEY, m_name.c_str());
|
||||
}
|
||||
else
|
||||
si->RemoveFromStringList("Patches", "Enable", m_name.c_str());
|
||||
{
|
||||
si->RemoveFromStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_ENABLE_CONFIG_KEY, m_name.c_str());
|
||||
if (m_ui.enabled->isTristate())
|
||||
{
|
||||
if (state == Qt::Unchecked)
|
||||
{
|
||||
si->AddToStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_DISABLE_CONFIG_KEY, m_name.c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
si->RemoveFromStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_DISABLE_CONFIG_KEY, m_name.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
si->Save();
|
||||
g_emu_thread->reloadGameSettings();
|
||||
@@ -56,6 +73,8 @@ GamePatchSettingsWidget::GamePatchSettingsWidget(SettingsWindow* dialog, QWidget
|
||||
m_ui.scrollArea->setFrameShadow(QFrame::Sunken);
|
||||
|
||||
setUnlabeledPatchesWarningVisibility(false);
|
||||
setGlobalWsPatchNoteVisibility(false);
|
||||
setGlobalNiPatchNoteVisibility(false);
|
||||
|
||||
SettingsInterface* sif = m_dialog->getSettingsInterface();
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.allCRCsCheckbox, "EmuCore", "ShowPatchesForAllCRCs", false);
|
||||
@@ -88,14 +107,22 @@ void GamePatchSettingsWidget::disableAllPatches()
|
||||
|
||||
void GamePatchSettingsWidget::reloadList()
|
||||
{
|
||||
const SettingsInterface* si = m_dialog->getSettingsInterface();
|
||||
// Patches shouldn't have any unlabelled patch groups, because they're new.
|
||||
u32 number_of_unlabeled_patches = 0;
|
||||
bool showAllCRCS = m_ui.allCRCsCheckbox->isChecked();
|
||||
std::vector<Patch::PatchInfo> patches = Patch::GetPatchInfo(m_dialog->getSerial(), m_dialog->getDiscCRC(), false, showAllCRCS, &number_of_unlabeled_patches);
|
||||
std::vector<std::string> enabled_list =
|
||||
m_dialog->getSettingsInterface()->GetStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_ENABLE_CONFIG_KEY);
|
||||
si->GetStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_ENABLE_CONFIG_KEY);
|
||||
std::vector<std::string> disabled_list =
|
||||
si->GetStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_DISABLE_CONFIG_KEY);
|
||||
|
||||
const bool ws_patches_enabled_globally = m_dialog->getEffectiveBoolValue("EmuCore", "EnableWideScreenPatches", false);
|
||||
const bool ni_patches_enabled_globally = m_dialog->getEffectiveBoolValue("EmuCore", "EnableNoInterlacingPatches", false);
|
||||
|
||||
setUnlabeledPatchesWarningVisibility(number_of_unlabeled_patches > 0);
|
||||
setGlobalWsPatchNoteVisibility(ws_patches_enabled_globally);
|
||||
setGlobalNiPatchNoteVisibility(ni_patches_enabled_globally);
|
||||
delete m_ui.scrollArea->takeWidget();
|
||||
|
||||
QWidget* container = new QWidget(m_ui.scrollArea);
|
||||
@@ -106,7 +133,7 @@ void GamePatchSettingsWidget::reloadList()
|
||||
{
|
||||
bool first = true;
|
||||
|
||||
for (Patch::PatchInfo& pi : patches)
|
||||
for (const Patch::PatchInfo& pi : patches)
|
||||
{
|
||||
if (!first)
|
||||
{
|
||||
@@ -120,9 +147,35 @@ void GamePatchSettingsWidget::reloadList()
|
||||
first = false;
|
||||
}
|
||||
|
||||
const bool enabled = (std::find(enabled_list.begin(), enabled_list.end(), pi.name) != enabled_list.end());
|
||||
const bool is_on_enable_list = std::find(enabled_list.begin(), enabled_list.end(), pi.name) != enabled_list.end();
|
||||
const bool is_on_disable_list = std::find(disabled_list.begin(), disabled_list.end(), pi.name) != disabled_list.end();
|
||||
const bool globally_toggleable_option = Patch::IsGloballyToggleablePatch(pi);
|
||||
|
||||
Qt::CheckState check_state;
|
||||
if (!globally_toggleable_option)
|
||||
{
|
||||
// Normal patches
|
||||
check_state = is_on_enable_list && !is_on_disable_list ? Qt::CheckState::Checked : Qt::CheckState::Unchecked;
|
||||
}
|
||||
else
|
||||
{
|
||||
// WS/NI patches
|
||||
if (is_on_disable_list)
|
||||
{
|
||||
check_state = Qt::CheckState::Unchecked;
|
||||
}
|
||||
else if (is_on_enable_list)
|
||||
{
|
||||
check_state = Qt::CheckState::Checked;
|
||||
}
|
||||
else
|
||||
{
|
||||
check_state = Qt::CheckState::PartiallyChecked;
|
||||
}
|
||||
}
|
||||
|
||||
GamePatchDetailsWidget* it =
|
||||
new GamePatchDetailsWidget(std::move(pi.name), pi.author, pi.description, enabled, m_dialog, container);
|
||||
new GamePatchDetailsWidget(std::move(pi.name), pi.author, pi.description, globally_toggleable_option, check_state, m_dialog, container);
|
||||
layout->addWidget(it);
|
||||
}
|
||||
}
|
||||
@@ -141,3 +194,13 @@ void GamePatchSettingsWidget::setUnlabeledPatchesWarningVisibility(bool visible)
|
||||
{
|
||||
m_ui.unlabeledPatchWarning->setVisible(visible);
|
||||
}
|
||||
|
||||
void GamePatchSettingsWidget::setGlobalWsPatchNoteVisibility(bool visible)
|
||||
{
|
||||
m_ui.globalWsPatchState->setVisible(visible);
|
||||
}
|
||||
|
||||
void GamePatchSettingsWidget::setGlobalNiPatchNoteVisibility(bool visible)
|
||||
{
|
||||
m_ui.globalNiPatchState->setVisible(visible);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ class GamePatchDetailsWidget : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
GamePatchDetailsWidget(std::string name, const std::string& author, const std::string& description, bool enabled,
|
||||
GamePatchDetailsWidget(std::string name, const std::string& author, const std::string& description, bool tristate, Qt::CheckState checkState,
|
||||
SettingsWindow* dialog, QWidget* parent);
|
||||
~GamePatchDetailsWidget();
|
||||
|
||||
@@ -50,6 +50,8 @@ private Q_SLOTS:
|
||||
private:
|
||||
void reloadList();
|
||||
void setUnlabeledPatchesWarningVisibility(bool visible);
|
||||
void setGlobalWsPatchNoteVisibility(bool visible);
|
||||
void setGlobalNiPatchNoteVisibility(bool visible);
|
||||
|
||||
Ui::GamePatchSettingsWidget m_ui;
|
||||
SettingsWindow* m_dialog;
|
||||
|
||||
@@ -38,6 +38,29 @@
|
||||
<property name="text">
|
||||
<string>Any patches bundled with PCSX2 for this game will be disabled since you have unlabeled patches loaded.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="globalWsPatchState">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>Widescreen patches are currently <span style=" font-weight:600;">ENABLED</span> globally.</p></body></html></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="globalNiPatchState">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>No-Interlacing patches are currently <span style=" font-weight:600;">ENABLED</span> globally.</p></body></html></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <QtWidgets/QMessageBox>
|
||||
|
||||
#include "pcsx2/Host.h"
|
||||
#include "pcsx2/Patch.h"
|
||||
#include "pcsx2/GS/GS.h"
|
||||
#include "pcsx2/GS/GSCapture.h"
|
||||
#include "pcsx2/GS/GSUtil.h"
|
||||
@@ -88,6 +89,8 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(sif, m_ui.interlacing, "EmuCore/GS", "deinterlace_mode", DEFAULT_INTERLACE_MODE);
|
||||
SettingWidgetBinder::BindWidgetToIntSetting(
|
||||
sif, m_ui.bilinearFiltering, "EmuCore/GS", "linear_present_mode", static_cast<int>(GSPostBilinearMode::BilinearSmooth));
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.widescreenPatches, "EmuCore", "EnableWideScreenPatches", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.noInterlacingPatches, "EmuCore", "EnableNoInterlacingPatches", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.integerScaling, "EmuCore/GS", "IntegerScaling", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.PCRTCOffsets, "EmuCore/GS", "pcrtc_offsets", false);
|
||||
SettingWidgetBinder::BindWidgetToBoolSetting(sif, m_ui.PCRTCOverscan, "EmuCore/GS", "pcrtc_overscan", false);
|
||||
@@ -319,22 +322,61 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
|
||||
}
|
||||
#endif
|
||||
|
||||
// Prompt user to get rid of widescreen/no-interlace config from the ini if the user has enabled them before.
|
||||
if ((m_dialog->getBoolValue("EmuCore", "EnableWideScreenPatches", false) == true ||
|
||||
m_dialog->getBoolValue("EmuCore", "EnableWideScreenPatches", false) == true) &&
|
||||
!m_dialog->containsSettingValue("UI", "UserHasDeniedWSPatchWarning"))
|
||||
// Get rid of widescreen/no-interlace checkboxes from per-game settings, and migrate them to Patches if necessary.
|
||||
if (m_dialog->isPerGameSettings())
|
||||
{
|
||||
if (QMessageBox::question(QtUtils::GetRootWidget(this), tr("Remove Unsupported Settings"),
|
||||
tr("You previously had the <strong>Enable Widescreen Patches</strong> or <strong>Enable No-Interlacing Patches</strong> options enabled.<br><br>"
|
||||
"We no longer provide these options, instead <strong>you should go to the \"Patches\" section on the per-game settings, and explicitly enable the patches that you want.</strong><br><br>"
|
||||
"Do you want to remove these options from your configuration now?"),
|
||||
QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
|
||||
SettingsInterface* si = m_dialog->getSettingsInterface();
|
||||
bool needs_save = false;
|
||||
|
||||
if (si->ContainsValue("EmuCore", "EnableWideScreenPatches"))
|
||||
{
|
||||
m_dialog->removeSettingValue("EmuCore", "EnableWideScreenPatches");
|
||||
m_dialog->removeSettingValue("EmuCore", "EnableNoInterlacingPatches");
|
||||
const bool ws_enabled = si->GetBoolValue("EmuCore", "EnableWideScreenPatches");
|
||||
si->DeleteValue("EmuCore", "EnableWideScreenPatches");
|
||||
|
||||
const char* WS_PATCH_NAME = "Widescreen 16:9";
|
||||
if (ws_enabled)
|
||||
{
|
||||
si->AddToStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_ENABLE_CONFIG_KEY, WS_PATCH_NAME);
|
||||
si->RemoveFromStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_DISABLE_CONFIG_KEY, WS_PATCH_NAME);
|
||||
}
|
||||
else
|
||||
{
|
||||
si->AddToStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_DISABLE_CONFIG_KEY, WS_PATCH_NAME);
|
||||
si->RemoveFromStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_ENABLE_CONFIG_KEY, WS_PATCH_NAME);
|
||||
}
|
||||
needs_save = true;
|
||||
}
|
||||
else
|
||||
m_dialog->setBoolSettingValue("UI", "UserHasDeniedWSPatchWarning", true);
|
||||
|
||||
if (si->ContainsValue("EmuCore", "EnableNoInterlacingPatches"))
|
||||
{
|
||||
const bool ni_enabled = si->GetBoolValue("EmuCore", "EnableNoInterlacingPatches");
|
||||
si->DeleteValue("EmuCore", "EnableNoInterlacingPatches");
|
||||
|
||||
const char* NI_PATCH_NAME = "No-Interlacing";
|
||||
if (ni_enabled)
|
||||
{
|
||||
si->AddToStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_ENABLE_CONFIG_KEY, NI_PATCH_NAME);
|
||||
si->RemoveFromStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_DISABLE_CONFIG_KEY, NI_PATCH_NAME);
|
||||
}
|
||||
else
|
||||
{
|
||||
si->AddToStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_DISABLE_CONFIG_KEY, NI_PATCH_NAME);
|
||||
si->RemoveFromStringList(Patch::PATCHES_CONFIG_SECTION, Patch::PATCH_ENABLE_CONFIG_KEY, NI_PATCH_NAME);
|
||||
}
|
||||
needs_save = true;
|
||||
}
|
||||
|
||||
if (needs_save)
|
||||
{
|
||||
m_dialog->saveAndReloadGameSettings();
|
||||
}
|
||||
|
||||
m_ui.displayGridLayout->removeWidget(m_ui.widescreenPatches);
|
||||
m_ui.displayGridLayout->removeWidget(m_ui.noInterlacingPatches);
|
||||
m_ui.widescreenPatches->deleteLater();
|
||||
m_ui.noInterlacingPatches->deleteLater();
|
||||
m_ui.widescreenPatches = nullptr;
|
||||
m_ui.noInterlacingPatches = nullptr;
|
||||
}
|
||||
|
||||
// Hide advanced options by default.
|
||||
@@ -427,6 +469,12 @@ GraphicsSettingsWidget::GraphicsSettingsWidget(SettingsWindow* dialog, QWidget*
|
||||
|
||||
// Display tab
|
||||
{
|
||||
dialog->registerWidgetHelp(m_ui.widescreenPatches, tr("Enable Widescreen Patches"), tr("Unchecked"),
|
||||
tr("Automatically loads and applies widescreen patches on game start. Can cause issues."));
|
||||
|
||||
dialog->registerWidgetHelp(m_ui.noInterlacingPatches, tr("Enable No-Interlacing Patches"), tr("Unchecked"),
|
||||
tr("Automatically loads and applies no-interlacing patches on game start. Can cause issues."));
|
||||
|
||||
dialog->registerWidgetHelp(m_ui.DisableInterlaceOffset, tr("Disable Interlace Offset"), tr("Unchecked"),
|
||||
tr("Disables interlacing offset which may reduce blurring in some situations."));
|
||||
|
||||
|
||||
@@ -404,28 +404,28 @@
|
||||
</item>
|
||||
<item row="8" column="0" colspan="2">
|
||||
<layout class="QGridLayout" name="displayGridLayout">
|
||||
<item row="0" column="1">
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="integerScaling">
|
||||
<property name="text">
|
||||
<string>Integer Scaling</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="PCRTCOverscan">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="widescreenPatches">
|
||||
<property name="text">
|
||||
<string>Show Overscan</string>
|
||||
<string>Apply Widescreen Patches</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="noInterlacingPatches">
|
||||
<property name="text">
|
||||
<string>Apply No-Interlacing Patches</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="PCRTCOffsets">
|
||||
<property name="text">
|
||||
<string>Screen Offsets</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="PCRTCAntiBlur">
|
||||
<property name="text">
|
||||
<string>Anti-Blur</string>
|
||||
@@ -435,13 +435,27 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="DisableInterlaceOffset">
|
||||
<property name="text">
|
||||
<string>Disable Interlace Offset</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="PCRTCOffsets">
|
||||
<property name="text">
|
||||
<string>Screen Offsets</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="PCRTCOverscan">
|
||||
<property name="text">
|
||||
<string>Show Overscan</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -2111,7 +2125,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0" colspan="2">
|
||||
<layout class="QGridLayout" name="advancedOptionsGrid">
|
||||
<layout class="QGridLayout" name="gridLayout_9">
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="disableMailboxPresentation">
|
||||
<property name="text">
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
22125
pcsx2-qt/Translations/pcsx2-qt_gn-PY.ts
Normal file
22125
pcsx2-qt/Translations/pcsx2-qt_gn-PY.ts
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
22132
pcsx2-qt/Translations/pcsx2-qt_qu-PE.ts
Normal file
22132
pcsx2-qt/Translations/pcsx2-qt_qu-PE.ts
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1268,6 +1268,8 @@ struct Pcsx2Config
|
||||
EnablePatches : 1, // enables patch detection and application
|
||||
EnableCheats : 1, // enables cheat detection and application
|
||||
EnablePINE : 1, // enables inter-process communication
|
||||
EnableWideScreenPatches : 1,
|
||||
EnableNoInterlacingPatches : 1,
|
||||
EnableFastBoot : 1,
|
||||
EnableFastBootFastForward : 1,
|
||||
EnableThreadPinning : 1,
|
||||
|
||||
@@ -22,7 +22,7 @@ MULTI_ISA_UNSHARED_IMPL;
|
||||
u64 __noinline CURRENT_ISA::GSXXH3_64_Long(const void* data, size_t len)
|
||||
{
|
||||
// XXH marks its function that calls this noinline, and it would be silly to stack noinline functions, so call the internal function directly
|
||||
return XXH3_hashLong_64b_internal(data, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, XXH3_scrambleAcc);
|
||||
return XXH3_hashLong_64b_internal(data, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate, XXH3_scrambleAcc);
|
||||
}
|
||||
|
||||
u32 CURRENT_ISA::GSXXH3_64_Update(void* state, const void* data, size_t len)
|
||||
|
||||
@@ -112,7 +112,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
{
|
||||
Host::ReportErrorAsync("GS",
|
||||
fmt::format(
|
||||
TRANSLATE_FS("GS", "Failed to create D3D device: 0x{:08X}. A GPU which supports Direct3D Feature Level 10.0 is required."),
|
||||
TRANSLATE_FS("GS", "Failed to create D3D11 device: 0x{:08X}. A GPU which supports Direct3D Feature Level 10.0 is required."),
|
||||
hr));
|
||||
return false;
|
||||
}
|
||||
@@ -149,10 +149,10 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
if (m_dev.try_query_to(&dxgi_device) && SUCCEEDED(dxgi_device->GetParent(IID_PPV_ARGS(dxgi_adapter.put()))))
|
||||
{
|
||||
m_name = D3D::GetAdapterName(dxgi_adapter.get());
|
||||
Console.WriteLn(fmt::format("D3D Adapter: {}", m_name));
|
||||
Console.WriteLn(fmt::format("D3D11: Adapter: {}", m_name));
|
||||
}
|
||||
else
|
||||
Console.Error("Failed to obtain D3D adapter name.");
|
||||
Console.Error("D3D11: Failed to obtain adapter name.");
|
||||
|
||||
BOOL allow_tearing_supported = false;
|
||||
hr = m_dxgi_factory->CheckFeatureSupport(
|
||||
@@ -172,7 +172,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
m_annotation = m_ctx.try_query<ID3DUserDefinedAnnotation>();
|
||||
|
||||
if (!m_shader_cache.Open(m_feature_level, GSConfig.UseDebugDevice))
|
||||
Console.Warning("Shader cache failed to open.");
|
||||
Console.Warning("D3D11: Shader cache failed to open.");
|
||||
|
||||
{
|
||||
// HACK: check AMD
|
||||
@@ -341,7 +341,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
if (FAILED(m_dev->CreateBuffer(&bd, nullptr, m_vb.put())))
|
||||
{
|
||||
Console.Error("Failed to create vertex buffer.");
|
||||
Console.Error("D3D11: Failed to create vertex buffer.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -349,7 +349,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
bd.BindFlags = D3D11_BIND_INDEX_BUFFER;
|
||||
if (FAILED(m_dev->CreateBuffer(&bd, nullptr, m_ib.put())))
|
||||
{
|
||||
Console.Error("Failed to create index buffer.");
|
||||
Console.Error("D3D11: Failed to create index buffer.");
|
||||
return false;
|
||||
}
|
||||
IASetIndexBuffer(m_ib.get());
|
||||
@@ -363,7 +363,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
|
||||
if (FAILED(m_dev->CreateBuffer(&bd, nullptr, m_expand_vb.put())))
|
||||
{
|
||||
Console.Error("Failed to create expand vertex buffer.");
|
||||
Console.Error("D3D11: Failed to create expand vertex buffer.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -371,7 +371,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
D3D11_SRV_DIMENSION_BUFFER, DXGI_FORMAT_UNKNOWN, 0, VERTEX_BUFFER_SIZE / sizeof(GSVertex));
|
||||
if (FAILED(m_dev->CreateShaderResourceView(m_expand_vb.get(), &vb_srv_desc, m_expand_vb_srv.put())))
|
||||
{
|
||||
Console.Error("Failed to create expand vertex buffer SRV.");
|
||||
Console.Error("D3D11: Failed to create expand vertex buffer SRV.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -388,7 +388,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
const D3D11_SUBRESOURCE_DATA srd = {expand_data.get()};
|
||||
if (FAILED(m_dev->CreateBuffer(&bd, &srd, m_expand_ib.put())))
|
||||
{
|
||||
Console.Error("Failed to create expand index buffer.");
|
||||
Console.Error("D3D11: Failed to create expand index buffer.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -440,7 +440,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
|
||||
if (FAILED(m_dev->CreateBuffer(&bd, nullptr, m_vs_cb.put())))
|
||||
{
|
||||
Console.Error("Failed to create vertex shader constant buffer.");
|
||||
Console.Error("D3D11: Failed to create vertex shader constant buffer.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -452,7 +452,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
|
||||
if (FAILED(m_dev->CreateBuffer(&bd, nullptr, m_ps_cb.put())))
|
||||
{
|
||||
Console.Error("Failed to create pixel shader constant buffer.");
|
||||
Console.Error("D3D11: Failed to create pixel shader constant buffer.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -511,7 +511,7 @@ bool GSDevice11::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
if (m_feature_level < D3D_FEATURE_LEVEL_11_0)
|
||||
{
|
||||
Host::AddIconOSDMessage("d3d11_feature_level_warning", ICON_FA_EXCLAMATION_TRIANGLE,
|
||||
TRANSLATE_SV("GS", "The Direct3D renderer is running at feature level 10.0. This is an UNSUPPORTED configuration.\n"
|
||||
TRANSLATE_SV("GS", "The Direct3D11 renderer is running at feature level 10.0. This is an UNSUPPORTED configuration.\n"
|
||||
"Do not request support, please upgrade your hardware/drivers first."),
|
||||
Host::OSD_WARNING_DURATION);
|
||||
}
|
||||
@@ -594,7 +594,7 @@ void GSDevice11::SetFeatures(IDXGIAdapter1* adapter)
|
||||
if (SUCCEEDED(m_dev->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS2, &options, sizeof(options))) &&
|
||||
!options.TypedUAVLoadAdditionalFormats)
|
||||
{
|
||||
Console.Warning("Disabling VS expand due to potentially buggy NVIDIA driver.");
|
||||
Console.Warning("D3D11: Disabling VS expand due to potentially buggy NVIDIA driver.");
|
||||
m_features.vs_expand = false;
|
||||
}
|
||||
}
|
||||
@@ -616,7 +616,7 @@ void GSDevice11::SetVSyncMode(GSVSyncMode mode, bool allow_present_throttle)
|
||||
// Using mailbox-style no-allow-tearing causes tearing in exclusive fullscreen.
|
||||
if (mode == GSVSyncMode::Mailbox && m_is_exclusive_fullscreen)
|
||||
{
|
||||
WARNING_LOG("Using FIFO instead of Mailbox vsync due to exclusive fullscreen.");
|
||||
WARNING_LOG("D3D11: Using FIFO instead of Mailbox vsync due to exclusive fullscreen.");
|
||||
mode = GSVSyncMode::FIFO;
|
||||
}
|
||||
|
||||
@@ -632,7 +632,7 @@ void GSDevice11::SetVSyncMode(GSVSyncMode mode, bool allow_present_throttle)
|
||||
{
|
||||
DestroySwapChain();
|
||||
if (!CreateSwapChain())
|
||||
pxFailRel("Failed to recreate swap chain after vsync change.");
|
||||
pxFailRel("D3D11: Failed to recreate swap chain after vsync change.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -669,7 +669,7 @@ bool GSDevice11::CreateSwapChain()
|
||||
// Using mailbox-style no-allow-tearing causes tearing in exclusive fullscreen.
|
||||
if (m_vsync_mode == GSVSyncMode::Mailbox && m_is_exclusive_fullscreen)
|
||||
{
|
||||
WARNING_LOG("Using FIFO instead of Mailbox vsync due to exclusive fullscreen.");
|
||||
WARNING_LOG("D3D11: Using FIFO instead of Mailbox vsync due to exclusive fullscreen.");
|
||||
m_vsync_mode = GSVSyncMode::FIFO;
|
||||
}
|
||||
}
|
||||
@@ -709,12 +709,12 @@ bool GSDevice11::CreateSwapChain()
|
||||
fs_desc.Scaling = fullscreen_mode.Scaling;
|
||||
fs_desc.Windowed = FALSE;
|
||||
|
||||
Console.WriteLn("Creating a %dx%d exclusive fullscreen swap chain", fs_sd_desc.Width, fs_sd_desc.Height);
|
||||
Console.WriteLn("D3D11: Creating a %dx%d exclusive fullscreen swap chain", fs_sd_desc.Width, fs_sd_desc.Height);
|
||||
hr = m_dxgi_factory->CreateSwapChainForHwnd(
|
||||
m_dev.get(), window_hwnd, &fs_sd_desc, &fs_desc, fullscreen_output.get(), m_swap_chain.put());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Warning("Failed to create fullscreen swap chain, trying windowed.");
|
||||
Console.Warning("D3D11: Failed to create fullscreen swap chain, trying windowed.");
|
||||
m_is_exclusive_fullscreen = false;
|
||||
m_using_allow_tearing = m_allow_tearing_supported && m_using_flip_model_swap_chain;
|
||||
}
|
||||
@@ -722,7 +722,7 @@ bool GSDevice11::CreateSwapChain()
|
||||
|
||||
if (!m_is_exclusive_fullscreen)
|
||||
{
|
||||
Console.WriteLn("Creating a %dx%d %s windowed swap chain", swap_chain_desc.Width, swap_chain_desc.Height,
|
||||
Console.WriteLn("D3D11: Creating a %dx%d %s windowed swap chain", swap_chain_desc.Width, swap_chain_desc.Height,
|
||||
m_using_flip_model_swap_chain ? "flip-discard" : "discard");
|
||||
hr = m_dxgi_factory->CreateSwapChainForHwnd(
|
||||
m_dev.get(), window_hwnd, &swap_chain_desc, nullptr, nullptr, m_swap_chain.put());
|
||||
@@ -730,7 +730,7 @@ bool GSDevice11::CreateSwapChain()
|
||||
|
||||
if (FAILED(hr) && m_using_flip_model_swap_chain)
|
||||
{
|
||||
Console.Warning("Failed to create a flip-discard swap chain, trying discard.");
|
||||
Console.Warning("D3D11: Failed to create a flip-discard swap chain, trying discard.");
|
||||
swap_chain_desc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
|
||||
swap_chain_desc.Flags = 0;
|
||||
m_using_flip_model_swap_chain = false;
|
||||
@@ -740,7 +740,7 @@ bool GSDevice11::CreateSwapChain()
|
||||
m_dev.get(), window_hwnd, &swap_chain_desc, nullptr, nullptr, m_swap_chain.put());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("CreateSwapChainForHwnd failed: 0x%08X", hr);
|
||||
Console.Error("D3D11: CreateSwapChainForHwnd failed: 0x%08X", hr);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -752,11 +752,11 @@ bool GSDevice11::CreateSwapChain()
|
||||
{
|
||||
hr = swap_chain_factory->MakeWindowAssociation(window_hwnd, DXGI_MWA_NO_WINDOW_CHANGES);
|
||||
if (FAILED(hr))
|
||||
Console.ErrorFmt("MakeWindowAssociation() to disable ALT+ENTER failed: {}", Error::CreateHResult(hr).GetDescription());
|
||||
Console.ErrorFmt("D3D11: MakeWindowAssociation() to disable ALT+ENTER failed: {}", Error::CreateHResult(hr).GetDescription());
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.ErrorFmt("GetParent() on swap chain to get factory failed: {}", Error::CreateHResult(hr).GetDescription());
|
||||
Console.ErrorFmt("D3D11: GetParent() on swap chain to get factory failed: {}", Error::CreateHResult(hr).GetDescription());
|
||||
}
|
||||
|
||||
if (!CreateSwapChainRTV())
|
||||
@@ -777,7 +777,7 @@ bool GSDevice11::CreateSwapChainRTV()
|
||||
HRESULT hr = m_swap_chain->GetBuffer(0, IID_PPV_ARGS(backbuffer.put()));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("GetBuffer for RTV failed: 0x%08X", hr);
|
||||
Console.Error("D3D11: GetBuffer for RTV failed: 0x%08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -789,14 +789,14 @@ bool GSDevice11::CreateSwapChainRTV()
|
||||
hr = m_dev->CreateRenderTargetView(backbuffer.get(), &rtv_desc, m_swap_chain_rtv.put());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("CreateRenderTargetView for swap chain failed: 0x%08X", hr);
|
||||
Console.Error("D3D11: CreateRenderTargetView for swap chain failed: 0x%08X", hr);
|
||||
m_swap_chain_rtv.reset();
|
||||
return false;
|
||||
}
|
||||
|
||||
m_window_info.surface_width = backbuffer_desc.Width;
|
||||
m_window_info.surface_height = backbuffer_desc.Height;
|
||||
DevCon.WriteLn("Swap chain buffer size: %ux%u", m_window_info.surface_width, m_window_info.surface_height);
|
||||
DevCon.WriteLn("D3D11: Swap chain buffer size: %ux%u", m_window_info.surface_width, m_window_info.surface_height);
|
||||
|
||||
if (m_window_info.type == WindowInfo::Type::Win32)
|
||||
{
|
||||
@@ -838,7 +838,7 @@ bool GSDevice11::UpdateWindow()
|
||||
|
||||
if (m_window_info.type != WindowInfo::Type::Surfaceless && !CreateSwapChain())
|
||||
{
|
||||
Console.WriteLn("Failed to create swap chain on updated window");
|
||||
Console.WriteLn("D3D11: Failed to create swap chain on updated window");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -911,7 +911,7 @@ void GSDevice11::ResizeWindow(s32 new_window_width, s32 new_window_height, float
|
||||
HRESULT hr = m_swap_chain->ResizeBuffers(
|
||||
0, 0, 0, DXGI_FORMAT_UNKNOWN, m_using_allow_tearing ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0);
|
||||
if (FAILED(hr))
|
||||
Console.Error("ResizeBuffers() failed: 0x%08X", hr);
|
||||
Console.Error("D3D11: ResizeBuffers() failed: 0x%08X", hr);
|
||||
|
||||
if (!CreateSwapChainRTV())
|
||||
pxFailRel("Failed to recreate swap chain RTV after resize");
|
||||
@@ -1031,7 +1031,7 @@ void GSDevice11::PopTimestampQuery()
|
||||
|
||||
if (disjoint.Disjoint)
|
||||
{
|
||||
DevCon.WriteLn("GPU timing disjoint, resetting.");
|
||||
DevCon.WriteLn("D3D11: GPU timing disjoint, resetting.");
|
||||
m_read_timestamp_query = 0;
|
||||
m_write_timestamp_query = 0;
|
||||
m_waiting_timestamp_queries = 0;
|
||||
@@ -1217,7 +1217,7 @@ GSTexture* GSDevice11::CreateSurface(GSTexture::Type type, int width, int height
|
||||
HRESULT hr = m_dev->CreateTexture2D(&desc, nullptr, texture.put());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("DX11: Failed to allocate %dx%d surface", width, height);
|
||||
Console.Error("D3D11: Failed to allocate %dx%d surface", width, height);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -1630,7 +1630,7 @@ void GSDevice11::DoFXAA(GSTexture* sTex, GSTexture* dTex)
|
||||
const std::optional<std::string> shader = ReadShaderSource("shaders/common/fxaa.fx");
|
||||
if (!shader.has_value())
|
||||
{
|
||||
Console.Error("FXAA shader is missing");
|
||||
Console.Error("D3D11: FXAA shader is missing");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1957,7 +1957,7 @@ bool GSDevice11::CreateCASShaders()
|
||||
m_cas.cs_upscale = m_shader_cache.GetComputeShader(m_dev.get(), cas_source.value(), nullptr, "main");
|
||||
if (!m_cas.cs_sharpen || !m_cas.cs_upscale)
|
||||
{
|
||||
Console.Error("Failed to create CAS compute shaders.");
|
||||
Console.Error("D3D11: Failed to create CAS compute shaders.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1996,7 +1996,7 @@ bool GSDevice11::CreateImGuiResources()
|
||||
const std::optional<std::string> hlsl = ReadShaderSource("shaders/dx11/imgui.fx");
|
||||
if (!hlsl.has_value())
|
||||
{
|
||||
Console.Error("Failed to read imgui.fx");
|
||||
Console.Error("D3D11: Failed to read imgui.fx");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2013,7 +2013,7 @@ bool GSDevice11::CreateImGuiResources()
|
||||
std::size(layout), hlsl.value(), nullptr, "vs_main") ||
|
||||
!(m_imgui.ps = m_shader_cache.GetPixelShader(m_dev.get(), hlsl.value(), nullptr, "ps_main")))
|
||||
{
|
||||
Console.Error("Failed to compile ImGui shaders");
|
||||
Console.Error("D3D11: Failed to compile ImGui shaders");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2029,7 +2029,7 @@ bool GSDevice11::CreateImGuiResources()
|
||||
hr = m_dev->CreateBlendState(&blend_desc, m_imgui.bs.put());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("CreateImGuiResources(): CreateBlendState() failed: %08X", hr);
|
||||
Console.Error("D3D11: CreateImGuiResources(): CreateBlendState() failed: %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2040,7 +2040,7 @@ bool GSDevice11::CreateImGuiResources()
|
||||
hr = m_dev->CreateBuffer(&buffer_desc, nullptr, m_imgui.vs_cb.put());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("CreateImGuiResources(): CreateBlendState() failed: %08X", hr);
|
||||
Console.Error("D3D11: CreateImGuiResources(): CreateBlendState() failed: %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2566,7 +2566,7 @@ void GSDevice11::RenderHW(GSHWDrawConfig& config)
|
||||
{
|
||||
if (!IASetExpandVertexBuffer(config.verts, sizeof(*config.verts), config.nverts))
|
||||
{
|
||||
Console.Error("Failed to upload structured vertices (%u)", config.nverts);
|
||||
Console.Error("D3D11: Failed to upload structured vertices (%u)", config.nverts);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2576,7 +2576,7 @@ void GSDevice11::RenderHW(GSHWDrawConfig& config)
|
||||
{
|
||||
if (!IASetVertexBuffer(config.verts, sizeof(*config.verts), config.nverts))
|
||||
{
|
||||
Console.Error("Failed to upload vertices (%u)", config.nverts);
|
||||
Console.Error("D3D11: Failed to upload vertices (%u)", config.nverts);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2591,7 +2591,7 @@ void GSDevice11::RenderHW(GSHWDrawConfig& config)
|
||||
{
|
||||
if (!IASetIndexBuffer(config.indices, config.nindices))
|
||||
{
|
||||
Console.Error("Failed to upload indices (%u)", config.nindices);
|
||||
Console.Error("D3D11: Failed to upload indices (%u)", config.nindices);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ GSDevice12::ComPtr<ID3D12RootSignature> GSDevice12::CreateRootSignature(const D3
|
||||
m_device->CreateRootSignature(0, blob->GetBufferPointer(), blob->GetBufferSize(), IID_PPV_ARGS(rs.put()));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("CreateRootSignature() failed: %08X", hr);
|
||||
Console.Error("D3D12: CreateRootSignature() failed: %08X", hr);
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -173,7 +173,7 @@ bool GSDevice12::CreateDevice(u32& vendor_id)
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Error("Debug layer requested but not available.");
|
||||
Console.Error("D3D12: Debug layer requested but not available.");
|
||||
enable_debug_layer = false;
|
||||
}
|
||||
}
|
||||
@@ -185,7 +185,7 @@ bool GSDevice12::CreateDevice(u32& vendor_id)
|
||||
hr = D3D12CreateDevice(m_adapter.get(), isIntel ? D3D_FEATURE_LEVEL_12_0 : D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&m_device));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("Failed to create D3D12 device: %08X", hr);
|
||||
Console.Error("D3D12: Failed to create device: %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ bool GSDevice12::CreateDevice(u32& vendor_id)
|
||||
{
|
||||
const LUID luid(m_device->GetAdapterLuid());
|
||||
if (FAILED(m_dxgi_factory->EnumAdapterByLuid(luid, IID_PPV_ARGS(m_adapter.put()))))
|
||||
Console.Error("Failed to get lookup adapter by device LUID");
|
||||
Console.Error("D3D12: Failed to get lookup adapter by device LUID");
|
||||
}
|
||||
|
||||
if (enable_debug_layer)
|
||||
@@ -226,7 +226,7 @@ bool GSDevice12::CreateDevice(u32& vendor_id)
|
||||
hr = m_device->CreateCommandQueue(&queue_desc, IID_PPV_ARGS(&m_command_queue));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("Failed to create command queue: %08X", hr);
|
||||
Console.Error("D3D12: Failed to create command queue: %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -240,21 +240,21 @@ bool GSDevice12::CreateDevice(u32& vendor_id)
|
||||
hr = D3D12MA::CreateAllocator(&allocatorDesc, m_allocator.put());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("D3D12MA::CreateAllocator() failed with HRESULT %08X", hr);
|
||||
Console.Error("D3D12: CreateAllocator() failed with HRESULT %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
hr = m_device->CreateFence(m_completed_fence_value, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&m_fence));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("Failed to create fence: %08X", hr);
|
||||
Console.Error("D3D12: Failed to create fence: %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
m_fence_event = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
||||
if (m_fence_event == NULL)
|
||||
{
|
||||
Console.Error("Failed to create fence event: %08X", GetLastError());
|
||||
Console.Error("D3D12: Failed to create fence event: %08X", GetLastError());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -312,7 +312,7 @@ bool GSDevice12::CreateCommandLists()
|
||||
nullptr, IID_PPV_ARGS(res.command_lists[i].put()));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("Failed to create command list: %08X", hr);
|
||||
Console.Error("D3D12: Failed to create command list: %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -325,13 +325,13 @@ bool GSDevice12::CreateCommandLists()
|
||||
|
||||
if (!res.descriptor_allocator.Create(m_device.get(), D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, MAX_GPU_SRVS))
|
||||
{
|
||||
Console.Error("Failed to create per frame descriptor allocator");
|
||||
Console.Error("D3D12: Failed to create per frame descriptor allocator");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!res.sampler_allocator.Create(m_device.get(), MAX_GPU_SAMPLERS))
|
||||
{
|
||||
Console.Error("Failed to create per frame sampler allocator");
|
||||
Console.Error("D3D12: Failed to create per frame sampler allocator");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -378,7 +378,7 @@ void GSDevice12::MoveToNextCommandList()
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Warning("Map() for timestamp query failed: %08X", hr);
|
||||
Console.Warning("D3D12: Map() for timestamp query failed: %08X", hr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -432,7 +432,7 @@ bool GSDevice12::ExecuteCommandList(WaitType wait_for_completion)
|
||||
hr = res.command_lists[0]->Close();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("Closing init command list failed with HRESULT %08X", hr);
|
||||
Console.Error("D3D12: Closing init command list failed with HRESULT %08X", hr);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -441,7 +441,7 @@ bool GSDevice12::ExecuteCommandList(WaitType wait_for_completion)
|
||||
hr = res.command_lists[1]->Close();
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("Closing main command list failed with HRESULT %08X", hr);
|
||||
Console.Error("D3D12: Closing main command list failed with HRESULT %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -581,7 +581,7 @@ bool GSDevice12::CreateTimestampQuery()
|
||||
HRESULT hr = m_device->CreateQueryHeap(&desc, IID_PPV_ARGS(m_timestamp_query_heap.put()));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("CreateQueryHeap() for timestamp failed with %08X", hr);
|
||||
Console.Error("D3D12: CreateQueryHeap() for timestamp failed with %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -592,7 +592,7 @@ bool GSDevice12::CreateTimestampQuery()
|
||||
m_timestamp_query_allocation.put(), IID_PPV_ARGS(m_timestamp_query_buffer.put()));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("CreateResource() for timestamp failed with %08X", hr);
|
||||
Console.Error("D3D12: CreateResource() for timestamp failed with %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -600,7 +600,7 @@ bool GSDevice12::CreateTimestampQuery()
|
||||
hr = m_command_queue->GetTimestampFrequency(&frequency);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("GetTimestampFrequency() failed: %08X", hr);
|
||||
Console.Error("D3D12: GetTimestampFrequency() failed: %08X", hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -691,7 +691,7 @@ bool GSDevice12::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
|
||||
if (!CheckFeatures(vendor_id))
|
||||
{
|
||||
Console.Error("Your GPU does not support the required D3D12 features.");
|
||||
Console.Error("D3D12: Your GPU does not support the required D3D12 features.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -715,7 +715,7 @@ bool GSDevice12::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
}
|
||||
|
||||
if (!m_shader_cache.Open(m_feature_level, GSConfig.UseDebugDevice))
|
||||
Console.Warning("Shader cache failed to open.");
|
||||
Console.Warning("D3D12: Shader cache failed to open.");
|
||||
|
||||
if (!CreateNullTexture())
|
||||
{
|
||||
@@ -769,7 +769,7 @@ void GSDevice12::SetVSyncMode(GSVSyncMode mode, bool allow_present_throttle)
|
||||
// Using mailbox-style no-allow-tearing causes tearing in exclusive fullscreen.
|
||||
if (mode == GSVSyncMode::Mailbox && m_is_exclusive_fullscreen)
|
||||
{
|
||||
WARNING_LOG("Using FIFO instead of Mailbox vsync due to exclusive fullscreen.");
|
||||
WARNING_LOG("D3D12: Using FIFO instead of Mailbox vsync due to exclusive fullscreen.");
|
||||
mode = GSVSyncMode::FIFO;
|
||||
}
|
||||
|
||||
@@ -822,7 +822,7 @@ bool GSDevice12::CreateSwapChain()
|
||||
// Using mailbox-style no-allow-tearing causes tearing in exclusive fullscreen.
|
||||
if (m_vsync_mode == GSVSyncMode::Mailbox && m_is_exclusive_fullscreen)
|
||||
{
|
||||
WARNING_LOG("Using FIFO instead of Mailbox vsync due to exclusive fullscreen.");
|
||||
WARNING_LOG("D3D12: Using FIFO instead of Mailbox vsync due to exclusive fullscreen.");
|
||||
m_vsync_mode = GSVSyncMode::FIFO;
|
||||
}
|
||||
}
|
||||
@@ -859,12 +859,12 @@ bool GSDevice12::CreateSwapChain()
|
||||
fs_desc.Scaling = fullscreen_mode.Scaling;
|
||||
fs_desc.Windowed = FALSE;
|
||||
|
||||
Console.WriteLn("Creating a %dx%d exclusive fullscreen swap chain", fs_sd_desc.Width, fs_sd_desc.Height);
|
||||
Console.WriteLn("D3D12: Creating a %dx%d exclusive fullscreen swap chain", fs_sd_desc.Width, fs_sd_desc.Height);
|
||||
hr = m_dxgi_factory->CreateSwapChainForHwnd(m_command_queue.get(), window_hwnd, &fs_sd_desc,
|
||||
&fs_desc, fullscreen_output.get(), m_swap_chain.put());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Warning("Failed to create fullscreen swap chain, trying windowed.");
|
||||
Console.Warning("D3D12: Failed to create fullscreen swap chain, trying windowed.");
|
||||
m_is_exclusive_fullscreen = false;
|
||||
m_using_allow_tearing = m_allow_tearing_supported;
|
||||
}
|
||||
@@ -872,12 +872,12 @@ bool GSDevice12::CreateSwapChain()
|
||||
|
||||
if (!m_is_exclusive_fullscreen)
|
||||
{
|
||||
Console.WriteLn("Creating a %dx%d windowed swap chain", swap_chain_desc.Width, swap_chain_desc.Height);
|
||||
Console.WriteLn("D3D12: Creating a %dx%d windowed swap chain", swap_chain_desc.Width, swap_chain_desc.Height);
|
||||
hr = m_dxgi_factory->CreateSwapChainForHwnd(
|
||||
m_command_queue.get(), window_hwnd, &swap_chain_desc, nullptr, nullptr, m_swap_chain.put());
|
||||
|
||||
if (FAILED(hr))
|
||||
Console.Warning("Failed to create windowed swap chain.");
|
||||
Console.Warning("D3D12: Failed to create windowed swap chain.");
|
||||
}
|
||||
|
||||
// MWA needs to be called on the correct factory.
|
||||
@@ -887,11 +887,11 @@ bool GSDevice12::CreateSwapChain()
|
||||
{
|
||||
hr = swap_chain_factory->MakeWindowAssociation(window_hwnd, DXGI_MWA_NO_WINDOW_CHANGES);
|
||||
if (FAILED(hr))
|
||||
Console.ErrorFmt("MakeWindowAssociation() to disable ALT+ENTER failed: {}", Error::CreateHResult(hr).GetDescription());
|
||||
Console.ErrorFmt("D3D12: MakeWindowAssociation() to disable ALT+ENTER failed: {}", Error::CreateHResult(hr).GetDescription());
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.ErrorFmt("GetParent() on swap chain to get factory failed: {}", Error::CreateHResult(hr).GetDescription());
|
||||
Console.ErrorFmt("D3D12: GetParent() on swap chain to get factory failed: {}", Error::CreateHResult(hr).GetDescription());
|
||||
}
|
||||
|
||||
if (!CreateSwapChainRTV())
|
||||
@@ -926,7 +926,7 @@ bool GSDevice12::CreateSwapChainRTV()
|
||||
hr = m_swap_chain->GetBuffer(i, IID_PPV_ARGS(backbuffer.put()));
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Console.Error("GetBuffer for RTV failed: 0x%08X", hr);
|
||||
Console.Error("D3D12: GetBuffer for RTV failed: 0x%08X", hr);
|
||||
m_swap_chain_buffers.clear();
|
||||
return false;
|
||||
}
|
||||
@@ -946,7 +946,7 @@ bool GSDevice12::CreateSwapChainRTV()
|
||||
|
||||
m_window_info.surface_width = swap_chain_desc.BufferDesc.Width;
|
||||
m_window_info.surface_height = swap_chain_desc.BufferDesc.Height;
|
||||
DevCon.WriteLn("Swap chain buffer size: %ux%u", m_window_info.surface_width, m_window_info.surface_height);
|
||||
DevCon.WriteLn("D3D12: Swap chain buffer size: %ux%u", m_window_info.surface_width, m_window_info.surface_height);
|
||||
|
||||
if (m_window_info.type == WindowInfo::Type::Win32)
|
||||
{
|
||||
@@ -998,7 +998,7 @@ bool GSDevice12::UpdateWindow()
|
||||
|
||||
if (m_window_info.type != WindowInfo::Type::Surfaceless && !CreateSwapChain())
|
||||
{
|
||||
Console.WriteLn("Failed to create swap chain on updated window");
|
||||
Console.WriteLn("D3D12: Failed to create swap chain on updated window");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1066,7 +1066,7 @@ void GSDevice12::ResizeWindow(s32 new_window_width, s32 new_window_height, float
|
||||
HRESULT hr = m_swap_chain->ResizeBuffers(
|
||||
0, 0, 0, DXGI_FORMAT_UNKNOWN, m_using_allow_tearing ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0);
|
||||
if (FAILED(hr))
|
||||
Console.Error("ResizeBuffers() failed: 0x%08X", hr);
|
||||
Console.Error("D3D12: ResizeBuffers() failed: 0x%08X", hr);
|
||||
|
||||
if (!CreateSwapChainRTV())
|
||||
pxFailRel("Failed to recreate swap chain RTV after resize");
|
||||
@@ -1931,7 +1931,7 @@ bool GSDevice12::CompileCASPipelines()
|
||||
m_cas_sharpen_pipeline = cpb.Create(m_device.get(), m_shader_cache, false);
|
||||
if (!m_cas_upscale_pipeline || !m_cas_sharpen_pipeline)
|
||||
{
|
||||
Console.Error("Failed to create CAS pipelines");
|
||||
Console.Error("D3D12: Failed to create CAS pipelines");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1943,7 +1943,7 @@ bool GSDevice12::CompileImGuiPipeline()
|
||||
const std::optional<std::string> hlsl = ReadShaderSource("shaders/dx11/imgui.fx");
|
||||
if (!hlsl.has_value())
|
||||
{
|
||||
Console.Error("Failed to read imgui.fx");
|
||||
Console.Error("D3D12: Failed to read imgui.fx");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1951,7 +1951,7 @@ bool GSDevice12::CompileImGuiPipeline()
|
||||
const ComPtr<ID3DBlob> ps = m_shader_cache.GetPixelShader(hlsl.value(), nullptr, "ps_main");
|
||||
if (!vs || !ps)
|
||||
{
|
||||
Console.Error("Failed to compile ImGui shaders");
|
||||
Console.Error("D3D12: Failed to compile ImGui shaders");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1972,7 +1972,7 @@ bool GSDevice12::CompileImGuiPipeline()
|
||||
m_imgui_pipeline = gpb.Create(m_device.get(), m_shader_cache, false);
|
||||
if (!m_imgui_pipeline)
|
||||
{
|
||||
Console.Error("Failed to compile ImGui pipeline");
|
||||
Console.Error("D3D12: Failed to compile ImGui pipeline");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2015,7 +2015,7 @@ void GSDevice12::RenderImGui()
|
||||
// just skip if we run out.. we can't resume the present render pass :/
|
||||
if (!GetSamplerAllocator().LookupSingle(&m_utility_sampler_gpu, m_linear_sampler_cpu))
|
||||
{
|
||||
Console.Warning("Skipping ImGui draw because of no descriptors");
|
||||
Console.Warning("D3D12: Skipping ImGui draw because of no descriptors");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2032,7 +2032,7 @@ void GSDevice12::RenderImGui()
|
||||
const u32 size = sizeof(ImDrawVert) * static_cast<u32>(cmd_list->VtxBuffer.Size);
|
||||
if (!m_vertex_stream_buffer.ReserveMemory(size, sizeof(ImDrawVert)))
|
||||
{
|
||||
Console.Warning("Skipping ImGui draw because of no vertex buffer space");
|
||||
Console.Warning("D3D12: Skipping ImGui draw because of no vertex buffer space");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2072,7 +2072,7 @@ void GSDevice12::RenderImGui()
|
||||
|
||||
if (!GetTextureGroupDescriptors(&m_utility_texture_gpu, &handle, 1))
|
||||
{
|
||||
Console.Warning("Skipping ImGui draw because of no descriptors");
|
||||
Console.Warning("D3D12: Skipping ImGui draw because of no descriptors");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2103,7 +2103,7 @@ bool GSDevice12::DoCAS(
|
||||
if (!GetTextureGroupDescriptors(&sTexDH, &sTex12->GetSRVDescriptor(), 1) ||
|
||||
!GetTextureGroupDescriptors(&dTexDH, &dTex12->GetUAVDescriptor(), 1))
|
||||
{
|
||||
Console.Error("Failed to allocate CAS descriptors.");
|
||||
Console.Error("D3D12: Failed to allocate CAS descriptors.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -3567,7 +3567,7 @@ bool GSDevice12::ApplyTFXState(bool already_execed)
|
||||
{
|
||||
if (already_execed)
|
||||
{
|
||||
Console.Error("Failed to reserve vertex uniform space");
|
||||
Console.Error("D3D12: Failed to reserve vertex uniform space");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -3588,7 +3588,7 @@ bool GSDevice12::ApplyTFXState(bool already_execed)
|
||||
{
|
||||
if (already_execed)
|
||||
{
|
||||
Console.Error("Failed to reserve pixel uniform space");
|
||||
Console.Error("D3D12: Failed to reserve pixel uniform space");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -3846,7 +3846,7 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
|
||||
date_image = SetupPrimitiveTrackingDATE(config, pipe);
|
||||
if (!date_image)
|
||||
{
|
||||
Console.WriteLn("Failed to allocate DATE image, aborting draw.");
|
||||
Console.WriteLn("D3D12: Failed to allocate DATE image, aborting draw.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -3874,7 +3874,7 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
|
||||
hdr_rt = static_cast<GSTexture12*>(CreateRenderTarget(rtsize.x, rtsize.y, GSTexture::Format::HDRColor, false));
|
||||
if (!hdr_rt)
|
||||
{
|
||||
Console.WriteLn("Failed to allocate HDR render target, aborting draw.");
|
||||
Console.WriteLn("D3D12: Failed to allocate HDR render target, aborting draw.");
|
||||
if (date_image)
|
||||
Recycle(date_image);
|
||||
return;
|
||||
|
||||
@@ -170,13 +170,13 @@ bool GSDeviceOGL::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
m_gl_context = GLContext::Create(m_window_info, &error);
|
||||
if (!m_gl_context)
|
||||
{
|
||||
Console.ErrorFmt("Failed to create any GL context: {}", error.GetDescription());
|
||||
Console.ErrorFmt("GL: Failed to create any context: {}", error.GetDescription());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_gl_context->MakeCurrent())
|
||||
{
|
||||
Console.Error("Failed to make GL context current");
|
||||
Console.Error("GL: Failed to make context current");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -196,11 +196,11 @@ bool GSDeviceOGL::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
if (!GSConfig.DisableShaderCache)
|
||||
{
|
||||
if (!m_shader_cache.Open())
|
||||
Console.Warning("Shader cache failed to open.");
|
||||
Console.Warning("GL: Shader cache failed to open.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLn("Not using shader cache.");
|
||||
Console.WriteLn("GL: Not using shader cache.");
|
||||
}
|
||||
|
||||
// because of fbo bindings below...
|
||||
@@ -544,7 +544,7 @@ bool GSDeviceOGL::Create(GSVSyncMode vsync_mode, bool allow_present_throttle)
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.Error("Failed to create texture upload buffer. Using slow path.");
|
||||
Console.Error("GL: Failed to create texture upload buffer. Using slow path.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -617,17 +617,17 @@ bool GSDeviceOGL::CheckFeatures(bool& buggy_pbo)
|
||||
if (std::strstr(vendor, "Advanced Micro Devices") || std::strstr(vendor, "ATI Technologies Inc.") ||
|
||||
std::strstr(vendor, "ATI"))
|
||||
{
|
||||
Console.WriteLn(Color_StrongRed, "OGL: AMD GPU detected.");
|
||||
Console.WriteLn(Color_StrongRed, "GL: AMD GPU detected.");
|
||||
//vendor_id_amd = true;
|
||||
}
|
||||
else if (std::strstr(vendor, "NVIDIA Corporation"))
|
||||
{
|
||||
Console.WriteLn(Color_StrongGreen, "OGL: NVIDIA GPU detected.");
|
||||
Console.WriteLn(Color_StrongGreen, "GL: NVIDIA GPU detected.");
|
||||
vendor_id_nvidia = true;
|
||||
}
|
||||
else if (std::strstr(vendor, "Intel"))
|
||||
{
|
||||
Console.WriteLn(Color_StrongBlue, "OGL: Intel GPU detected.");
|
||||
Console.WriteLn(Color_StrongBlue, "GL: Intel GPU detected.");
|
||||
//vendor_id_intel = true;
|
||||
}
|
||||
|
||||
@@ -706,13 +706,13 @@ bool GSDeviceOGL::CheckFeatures(bool& buggy_pbo)
|
||||
// using the normal texture update routines and letting the driver take care of it.
|
||||
buggy_pbo = !GLAD_GL_VERSION_4_4 && !GLAD_GL_ARB_buffer_storage && !GLAD_GL_EXT_buffer_storage;
|
||||
if (buggy_pbo)
|
||||
Console.Warning("Not using PBOs for texture uploads because buffer_storage is unavailable.");
|
||||
Console.Warning("GL: Not using PBOs for texture uploads because buffer_storage is unavailable.");
|
||||
|
||||
// Give the user the option to disable PBO usage for downloads.
|
||||
// Most drivers seem to be faster with PBO.
|
||||
m_disable_download_pbo = Host::GetBoolSettingValue("EmuCore/GS", "DisableGLDownloadPBO", false);
|
||||
if (m_disable_download_pbo)
|
||||
Console.Warning("Not using PBOs for texture downloads, this may reduce performance.");
|
||||
Console.Warning("GL: Not using PBOs for texture downloads, this may reduce performance.");
|
||||
|
||||
// optional features based on context
|
||||
m_features.broken_point_sampler = false;
|
||||
@@ -751,7 +751,7 @@ bool GSDeviceOGL::CheckFeatures(bool& buggy_pbo)
|
||||
const bool buggy_vs_expand =
|
||||
vendor_id_nvidia && (!GLAD_GL_ARB_bindless_texture && !GLAD_GL_NV_bindless_texture);
|
||||
if (buggy_vs_expand)
|
||||
Console.Warning("Disabling vertex shader expand due to broken NVIDIA driver.");
|
||||
Console.Warning("GL: Disabling vertex shader expand due to broken NVIDIA driver.");
|
||||
|
||||
if (GLAD_GL_ARB_shader_storage_buffer_object)
|
||||
{
|
||||
@@ -762,7 +762,7 @@ bool GSDeviceOGL::CheckFeatures(bool& buggy_pbo)
|
||||
GLAD_GL_ARB_gpu_shader5);
|
||||
}
|
||||
if (!m_features.vs_expand)
|
||||
Console.Warning("Vertex expansion is not supported. This will reduce performance.");
|
||||
Console.Warning("GL: Vertex expansion is not supported. This will reduce performance.");
|
||||
|
||||
GLint point_range[2] = {};
|
||||
glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_range);
|
||||
@@ -774,7 +774,7 @@ bool GSDeviceOGL::CheckFeatures(bool& buggy_pbo)
|
||||
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size);
|
||||
m_max_texture_size = std::max(1024u, static_cast<u32>(max_texture_size));
|
||||
|
||||
Console.WriteLn("Using %s for point expansion, %s for line expansion and %s for sprite expansion.",
|
||||
Console.WriteLn("GL: Using %s for point expansion, %s for line expansion and %s for sprite expansion.",
|
||||
m_features.point_expand ? "hardware" : (m_features.vs_expand ? "vertex expanding" : "UNSUPPORTED"),
|
||||
m_features.line_expand ? "hardware" : (m_features.vs_expand ? "vertex expanding" : "UNSUPPORTED"),
|
||||
m_features.vs_expand ? "vertex expanding" : "CPU");
|
||||
@@ -798,7 +798,7 @@ void GSDeviceOGL::SetSwapInterval()
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||
|
||||
if (!m_gl_context->SetSwapInterval(interval))
|
||||
WARNING_LOG("Failed to set swap interval to {}", interval);
|
||||
WARNING_LOG("GL: Failed to set swap interval to {}", interval);
|
||||
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current_fbo);
|
||||
}
|
||||
@@ -881,7 +881,7 @@ bool GSDeviceOGL::UpdateWindow()
|
||||
|
||||
if (!m_gl_context->ChangeSurface(m_window_info))
|
||||
{
|
||||
Console.Error("Failed to change surface");
|
||||
Console.Error("GL: Failed to change surface");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -920,7 +920,7 @@ void GSDeviceOGL::DestroySurface()
|
||||
{
|
||||
m_window_info = {};
|
||||
if (!m_gl_context->ChangeSurface(m_window_info))
|
||||
Console.Error("Failed to switch to surfaceless");
|
||||
Console.Error("GL: Failed to switch to surfaceless");
|
||||
}
|
||||
|
||||
std::string GSDeviceOGL::GetDriverInfo() const
|
||||
@@ -1336,7 +1336,7 @@ std::string GSDeviceOGL::GenGlslHeader(const std::string_view entry, GLenum type
|
||||
|
||||
std::string GSDeviceOGL::GetVSSource(VSSelector sel)
|
||||
{
|
||||
DevCon.WriteLn("Compiling new vertex shader with selector 0x%" PRIX64, sel.key);
|
||||
DevCon.WriteLn("GL: Compiling new vertex shader with selector 0x%" PRIX64, sel.key);
|
||||
|
||||
std::string macro = fmt::format("#define VS_FST {}\n", static_cast<u32>(sel.fst))
|
||||
+ fmt::format("#define VS_IIP {}\n", static_cast<u32>(sel.iip))
|
||||
@@ -1350,7 +1350,7 @@ std::string GSDeviceOGL::GetVSSource(VSSelector sel)
|
||||
|
||||
std::string GSDeviceOGL::GetPSSource(const PSSelector& sel)
|
||||
{
|
||||
DevCon.WriteLn("Compiling new pixel shader with selector 0x%" PRIX64 "%08X", sel.key_hi, sel.key_lo);
|
||||
DevCon.WriteLn("GL: Compiling new pixel shader with selector 0x%" PRIX64 "%08X", sel.key_hi, sel.key_lo);
|
||||
|
||||
std::string macro = fmt::format("#define PS_FST {}\n", sel.fst)
|
||||
+ fmt::format("#define PS_WMS {}\n", sel.wms)
|
||||
@@ -1834,7 +1834,7 @@ bool GSDeviceOGL::CompileFXAAProgram()
|
||||
const std::optional<std::string> shader = ReadShaderSource("shaders/common/fxaa.fx");
|
||||
if (!shader.has_value())
|
||||
{
|
||||
Console.Error("Failed to read fxaa.fs");
|
||||
Console.Error("GL: Failed to read fxaa.fs");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1842,7 +1842,7 @@ bool GSDeviceOGL::CompileFXAAProgram()
|
||||
std::optional<GLProgram> prog = m_shader_cache.GetProgram(m_convert.vs, ps);
|
||||
if (!prog.has_value())
|
||||
{
|
||||
Console.Error("Failed to compile FXAA fragment shader");
|
||||
Console.Error("GL: Failed to compile FXAA fragment shader");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2065,7 +2065,7 @@ bool GSDeviceOGL::CreateImGuiProgram()
|
||||
const std::optional<std::string> glsl = ReadShaderSource("shaders/opengl/imgui.glsl");
|
||||
if (!glsl.has_value())
|
||||
{
|
||||
Console.Error("Failed to read imgui.glsl");
|
||||
Console.Error("GL: Failed to read imgui.glsl");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2074,7 +2074,7 @@ bool GSDeviceOGL::CreateImGuiProgram()
|
||||
GetShaderSource("ps_main", GL_FRAGMENT_SHADER, glsl.value()));
|
||||
if (!prog.has_value())
|
||||
{
|
||||
Console.Error("Failed to compile imgui shaders");
|
||||
Console.Error("GL: Failed to compile imgui shaders");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ bool GSDeviceVK::SelectInstanceExtensions(ExtensionList* extension_list, const W
|
||||
|
||||
if (extension_count == 0)
|
||||
{
|
||||
Console.Error("Vulkan: No extensions supported by instance.");
|
||||
Console.Error("VK: No extensions supported by instance.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -170,13 +170,13 @@ bool GSDeviceVK::SelectInstanceExtensions(ExtensionList* extension_list, const W
|
||||
[name](const VkExtensionProperties& properties) { return !strcmp(name, properties.extensionName); }) !=
|
||||
available_extension_list.end())
|
||||
{
|
||||
DevCon.WriteLn("Enabling extension: %s", name);
|
||||
DevCon.WriteLn("VK: Enabling extension: %s", name);
|
||||
extension_list->push_back(name);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (required)
|
||||
Console.Error("Vulkan: Missing required extension %s.", name);
|
||||
Console.Error("VK: Missing required extension %s.", name);
|
||||
|
||||
return false;
|
||||
};
|
||||
@@ -204,7 +204,7 @@ bool GSDeviceVK::SelectInstanceExtensions(ExtensionList* extension_list, const W
|
||||
|
||||
// VK_EXT_debug_utils
|
||||
if (enable_debug_utils && !SupportsExtension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, false))
|
||||
Console.Warning("Vulkan: Debug report requested, but extension is not available.");
|
||||
Console.Warning("VK: Debug report requested, but extension is not available.");
|
||||
|
||||
oe->vk_ext_swapchain_maintenance1 = (wi.type != WindowInfo::Type::Surfaceless &&
|
||||
SupportsExtension(VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME, false));
|
||||
@@ -231,7 +231,7 @@ GSDeviceVK::GPUList GSDeviceVK::EnumerateGPUs(VkInstance instance)
|
||||
res = vkEnumeratePhysicalDevices(instance, &gpu_count, physical_devices.data());
|
||||
if (res == VK_INCOMPLETE)
|
||||
{
|
||||
Console.Warning("First vkEnumeratePhysicalDevices() call returned %zu devices, but second returned %u",
|
||||
Console.Warning("VK: First vkEnumeratePhysicalDevices() call returned %zu devices, but second returned %u",
|
||||
physical_devices.size(), gpu_count);
|
||||
}
|
||||
else if (res != VK_SUCCESS)
|
||||
@@ -254,7 +254,7 @@ GSDeviceVK::GPUList GSDeviceVK::EnumerateGPUs(VkInstance instance)
|
||||
if (VK_API_VERSION_VARIANT(props.apiVersion) == 0 && VK_API_VERSION_MAJOR(props.apiVersion) <= 1 &&
|
||||
VK_API_VERSION_MINOR(props.apiVersion) < 1)
|
||||
{
|
||||
Console.Warning(fmt::format("Ignoring Vulkan GPU '{}' because it only claims support for Vulkan {}.{}.{}",
|
||||
Console.Warning(fmt::format("VK: Ignoring GPU '{}' because it only claims support for Vulkan {}.{}.{}",
|
||||
props.deviceName, VK_API_VERSION_MAJOR(props.apiVersion), VK_API_VERSION_MINOR(props.apiVersion),
|
||||
VK_API_VERSION_PATCH(props.apiVersion)));
|
||||
continue;
|
||||
@@ -265,7 +265,7 @@ GSDeviceVK::GPUList GSDeviceVK::EnumerateGPUs(VkInstance instance)
|
||||
res = vkEnumerateDeviceExtensionProperties(device, nullptr, &extension_count, nullptr);
|
||||
if (res != VK_SUCCESS)
|
||||
{
|
||||
Console.Warning(fmt::format("Ignoring Vulkan GPU '{}' because vkEnumerateInstanceExtensionProperties() failed: ",
|
||||
Console.Warning(fmt::format("VK: Ignoring GPU '{}' because vkEnumerateInstanceExtensionProperties() failed: ",
|
||||
props.deviceName, Vulkan::VkResultToString(res)));
|
||||
continue;
|
||||
}
|
||||
@@ -283,7 +283,7 @@ GSDeviceVK::GPUList GSDeviceVK::EnumerateGPUs(VkInstance instance)
|
||||
return (std::strcmp(required_extension_name, ext.extensionName) == 0);
|
||||
}) == available_extension_list.end())
|
||||
{
|
||||
Console.Warning(fmt::format("Ignoring Vulkan GPU '{}' because is is missing required extension {}",
|
||||
Console.Warning(fmt::format("VK: Ignoring GPU '{}' because is is missing required extension {}",
|
||||
props.deviceName, required_extension_name));
|
||||
has_missing_extension = true;
|
||||
}
|
||||
@@ -360,7 +360,7 @@ bool GSDeviceVK::SelectDeviceExtensions(ExtensionList* extension_list, bool enab
|
||||
|
||||
if (extension_count == 0)
|
||||
{
|
||||
Console.Error("Vulkan: No extensions supported by device.");
|
||||
Console.Error("VK: No extensions supported by device.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -377,7 +377,7 @@ bool GSDeviceVK::SelectDeviceExtensions(ExtensionList* extension_list, bool enab
|
||||
if (std::none_of(extension_list->begin(), extension_list->end(),
|
||||
[name](const char* existing_name) { return (std::strcmp(existing_name, name) == 0); }))
|
||||
{
|
||||
DevCon.WriteLn("Enabling extension: %s", name);
|
||||
DevCon.WriteLn("VK: Enabling extension: %s", name);
|
||||
extension_list->push_back(name);
|
||||
}
|
||||
|
||||
@@ -385,7 +385,7 @@ bool GSDeviceVK::SelectDeviceExtensions(ExtensionList* extension_list, bool enab
|
||||
}
|
||||
|
||||
if (required)
|
||||
Console.Error("Vulkan: Missing required extension %s.", name);
|
||||
Console.Error("VK: Missing required extension %s.", name);
|
||||
|
||||
return false;
|
||||
};
|
||||
@@ -531,12 +531,12 @@ bool GSDeviceVK::CreateDevice(VkSurfaceKHR surface, bool enable_validation_layer
|
||||
}
|
||||
if (m_graphics_queue_family_index == queue_family_count)
|
||||
{
|
||||
Console.Error("Vulkan: Failed to find an acceptable graphics queue.");
|
||||
Console.Error("VK: Failed to find an acceptable graphics queue.");
|
||||
return false;
|
||||
}
|
||||
if (surface != VK_NULL_HANDLE && m_present_queue_family_index == queue_family_count)
|
||||
{
|
||||
Console.Error("Vulkan: Failed to find an acceptable present queue.");
|
||||
Console.Error("VK: Failed to find an acceptable present queue.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -758,7 +758,7 @@ bool GSDeviceVK::ProcessDeviceExtensions()
|
||||
// confirm we actually support it
|
||||
if (push_descriptor_properties.maxPushDescriptors < NUM_TFX_TEXTURES)
|
||||
{
|
||||
Console.Error("maxPushDescriptors (%u) is below required (%u)", push_descriptor_properties.maxPushDescriptors,
|
||||
Console.Error("VK: maxPushDescriptors (%u) is below required (%u)", push_descriptor_properties.maxPushDescriptors,
|
||||
NUM_TFX_TEXTURES);
|
||||
return false;
|
||||
}
|
||||
@@ -766,7 +766,7 @@ bool GSDeviceVK::ProcessDeviceExtensions()
|
||||
if (!line_rasterization_feature.bresenhamLines)
|
||||
{
|
||||
// See note in SelectDeviceExtensions().
|
||||
Console.Error("bresenhamLines is not supported.");
|
||||
Console.Error("VK: bresenhamLines is not supported.");
|
||||
#ifndef __APPLE__
|
||||
return false;
|
||||
#else
|
||||
@@ -870,7 +870,7 @@ bool GSDeviceVK::CreateAllocator()
|
||||
|
||||
if (heap_size_limits[type.heapIndex] == VK_WHOLE_SIZE)
|
||||
{
|
||||
Console.Warning("Disabling allocation from upload heap #%u (%.2f MB) due to debug device.",
|
||||
Console.Warning("VK: Disabling allocation from upload heap #%u (%.2f MB) due to debug device.",
|
||||
type.heapIndex, static_cast<float>(heap.size) / 1048576.0f);
|
||||
heap_size_limits[type.heapIndex] = 0;
|
||||
has_upload_heap = true;
|
||||
@@ -1447,22 +1447,22 @@ VKAPI_ATTR VkBool32 VKAPI_CALL DebugMessengerCallback(VkDebugUtilsMessageSeverit
|
||||
{
|
||||
if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT)
|
||||
{
|
||||
Console.Error("Vulkan debug report: (%s) %s",
|
||||
Console.Error("VK: debug report: (%s) %s",
|
||||
pCallbackData->pMessageIdName ? pCallbackData->pMessageIdName : "", pCallbackData->pMessage);
|
||||
}
|
||||
else if (severity & (VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT))
|
||||
{
|
||||
Console.Warning("Vulkan debug report: (%s) %s",
|
||||
Console.Warning("VK: debug report: (%s) %s",
|
||||
pCallbackData->pMessageIdName ? pCallbackData->pMessageIdName : "", pCallbackData->pMessage);
|
||||
}
|
||||
else if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT)
|
||||
{
|
||||
Console.WriteLn("Vulkan debug report: (%s) %s",
|
||||
Console.WriteLn("VK: debug report: (%s) %s",
|
||||
pCallbackData->pMessageIdName ? pCallbackData->pMessageIdName : "", pCallbackData->pMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
DevCon.WriteLn("Vulkan debug report: (%s) %s",
|
||||
DevCon.WriteLn("VK: debug report: (%s) %s",
|
||||
pCallbackData->pMessageIdName ? pCallbackData->pMessageIdName : "", pCallbackData->pMessage);
|
||||
}
|
||||
|
||||
@@ -2173,7 +2173,7 @@ bool GSDeviceVK::UpdateWindow()
|
||||
VkSurfaceKHR surface = VKSwapChain::CreateVulkanSurface(m_instance, m_physical_device, &m_window_info);
|
||||
if (surface == VK_NULL_HANDLE)
|
||||
{
|
||||
Console.Error("Failed to create new surface for swap chain");
|
||||
Console.Error("VK: Failed to create new surface for swap chain");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2182,7 +2182,7 @@ bool GSDeviceVK::UpdateWindow()
|
||||
!(m_swap_chain = VKSwapChain::Create(m_window_info, surface, present_mode,
|
||||
Pcsx2Config::GSOptions::TriStateToOptionalBoolean(GSConfig.ExclusiveFullscreenControl))))
|
||||
{
|
||||
Console.Error("Failed to create swap chain");
|
||||
Console.Error("VK: Failed to create swap chain");
|
||||
VKSwapChain::DestroyVulkanSurface(m_instance, &m_window_info, surface);
|
||||
return false;
|
||||
}
|
||||
@@ -2210,7 +2210,7 @@ void GSDeviceVK::ResizeWindow(s32 new_window_width, s32 new_window_height, float
|
||||
if (!m_swap_chain->ResizeSwapChain(new_window_width, new_window_height, new_window_scale))
|
||||
{
|
||||
// AcquireNextImage() will fail, and we'll recreate the surface.
|
||||
Console.Error("Failed to resize swap chain. Next present will fail.");
|
||||
Console.Error("VK: Failed to resize swap chain. Next present will fail.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2316,10 +2316,10 @@ GSDevice::PresentResult GSDeviceVK::BeginPresent(bool frame_skip)
|
||||
}
|
||||
else if (res == VK_ERROR_SURFACE_LOST_KHR)
|
||||
{
|
||||
Console.Warning("Surface lost, attempting to recreate");
|
||||
Console.Warning("VK: Surface lost, attempting to recreate");
|
||||
if (!m_swap_chain->RecreateSurface(m_window_info))
|
||||
{
|
||||
Console.Error("Failed to recreate surface after loss");
|
||||
Console.Error("VK: Failed to recreate surface after loss");
|
||||
ExecuteCommandBuffer(false);
|
||||
return PresentResult::FrameSkipped;
|
||||
}
|
||||
@@ -2494,7 +2494,7 @@ bool GSDeviceVK::CreateDeviceAndSwapChain()
|
||||
return false;
|
||||
}
|
||||
|
||||
ERROR_LOG("Vulkan validation/debug layers requested but are unavailable. Creating non-debug device.");
|
||||
ERROR_LOG("VK: validation/debug layers requested but are unavailable. Creating non-debug device.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2624,7 +2624,7 @@ bool GSDeviceVK::CheckFeatures()
|
||||
m_features.vs_expand = !GSConfig.DisableVertexShaderExpand;
|
||||
|
||||
if (!m_features.texture_barrier)
|
||||
Console.Warning("Texture buffers are disabled. This may break some graphical effects.");
|
||||
Console.Warning("VK: Texture buffers are disabled. This may break some graphical effects.");
|
||||
|
||||
// Test for D32S8 support.
|
||||
{
|
||||
@@ -2670,7 +2670,7 @@ bool GSDeviceVK::CheckFeatures()
|
||||
vkGetPhysicalDeviceFormatProperties(m_physical_device, vkfmt, &props);
|
||||
if ((props.optimalTilingFeatures & bits) != bits)
|
||||
{
|
||||
Host::ReportFormattedErrorAsync("Vulkan Renderer Unavailable",
|
||||
Host::ReportFormattedErrorAsync("VK: Renderer Unavailable",
|
||||
"Required format %u is missing bits, you may need to update your driver. (vk:%u, has:0x%x, needs:0x%x)",
|
||||
fmt, static_cast<unsigned>(vkfmt), props.optimalTilingFeatures, bits);
|
||||
return false;
|
||||
@@ -4387,14 +4387,14 @@ bool GSDeviceVK::CompileImGuiPipeline()
|
||||
const std::optional<std::string> glsl = ReadShaderSource("shaders/vulkan/imgui.glsl");
|
||||
if (!glsl.has_value())
|
||||
{
|
||||
Console.Error("Failed to read imgui.glsl");
|
||||
Console.Error("VK: Failed to read imgui.glsl");
|
||||
return false;
|
||||
}
|
||||
|
||||
VkShaderModule vs = GetUtilityVertexShader(glsl.value(), "vs_main");
|
||||
if (vs == VK_NULL_HANDLE)
|
||||
{
|
||||
Console.Error("Failed to compile ImGui vertex shader");
|
||||
Console.Error("VK: Failed to compile ImGui vertex shader");
|
||||
return false;
|
||||
}
|
||||
ScopedGuard vs_guard([this, &vs]() { vkDestroyShaderModule(m_device, vs, nullptr); });
|
||||
@@ -4402,7 +4402,7 @@ bool GSDeviceVK::CompileImGuiPipeline()
|
||||
VkShaderModule ps = GetUtilityFragmentShader(glsl.value(), "ps_main");
|
||||
if (ps == VK_NULL_HANDLE)
|
||||
{
|
||||
Console.Error("Failed to compile ImGui pixel shader");
|
||||
Console.Error("VK: Failed to compile ImGui pixel shader");
|
||||
return false;
|
||||
}
|
||||
ScopedGuard ps_guard([this, &ps]() { vkDestroyShaderModule(m_device, ps, nullptr); });
|
||||
@@ -4429,7 +4429,7 @@ bool GSDeviceVK::CompileImGuiPipeline()
|
||||
m_imgui_pipeline = gpb.Create(m_device, g_vulkan_shader_cache->GetPipelineCache(), false);
|
||||
if (!m_imgui_pipeline)
|
||||
{
|
||||
Console.Error("Failed to compile ImGui pipeline");
|
||||
Console.Error("VK: Failed to compile ImGui pipeline");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -4474,7 +4474,7 @@ void GSDeviceVK::RenderImGui()
|
||||
const u32 size = sizeof(ImDrawVert) * static_cast<u32>(cmd_list->VtxBuffer.Size);
|
||||
if (!m_vertex_stream_buffer.ReserveMemory(size, sizeof(ImDrawVert)))
|
||||
{
|
||||
Console.Warning("Skipping ImGui draw because of no vertex buffer space");
|
||||
Console.Warning("VK: Skipping ImGui draw because of no vertex buffer space");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4518,7 +4518,7 @@ void GSDeviceVK::RenderBlankFrame()
|
||||
VkResult res = m_swap_chain->AcquireNextImage();
|
||||
if (res != VK_SUCCESS)
|
||||
{
|
||||
Console.Error("Failed to acquire image for blank frame present");
|
||||
Console.Error("VK: Failed to acquire image for blank frame present");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5021,13 +5021,13 @@ void GSDeviceVK::ExecuteCommandBuffer(bool wait_for_completion, const char* reas
|
||||
const std::string reason_str(StringUtil::StdStringFromFormatV(reason, ap));
|
||||
va_end(ap);
|
||||
|
||||
Console.Warning("Vulkan: Executing command buffer due to '%s'", reason_str.c_str());
|
||||
Console.Warning("VK: Executing command buffer due to '%s'", reason_str.c_str());
|
||||
ExecuteCommandBuffer(wait_for_completion);
|
||||
}
|
||||
|
||||
void GSDeviceVK::ExecuteCommandBufferAndRestartRenderPass(bool wait_for_completion, const char* reason)
|
||||
{
|
||||
Console.Warning("Vulkan: Executing command buffer due to '%s'", reason);
|
||||
Console.Warning("VK: Executing command buffer due to '%s'", reason);
|
||||
|
||||
const VkRenderPass render_pass = m_current_render_pass;
|
||||
const GSVector4i render_pass_area = m_current_render_pass_area;
|
||||
@@ -5344,7 +5344,7 @@ bool GSDeviceVK::ApplyTFXState(bool already_execed)
|
||||
{
|
||||
if (already_execed)
|
||||
{
|
||||
Console.Error("Failed to reserve vertex uniform space");
|
||||
Console.Error("VK: Failed to reserve vertex uniform space");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -5365,7 +5365,7 @@ bool GSDeviceVK::ApplyTFXState(bool already_execed)
|
||||
{
|
||||
if (already_execed)
|
||||
{
|
||||
Console.Error("Failed to reserve pixel uniform space");
|
||||
Console.Error("VK: Failed to reserve pixel uniform space");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -5991,7 +5991,7 @@ void GSDeviceVK::SendHWDraw(const GSHWDrawConfig& config, GSTextureVK* draw_rt,
|
||||
|
||||
#ifdef PCSX2_DEVBUILD
|
||||
if ((one_barrier || full_barrier) && !m_pipeline_selector.ps.IsFeedbackLoop()) [[unlikely]]
|
||||
Console.Warning("GS: Possible unnecessary barrier detected.");
|
||||
Console.Warning("VK: Possible unnecessary barrier detected.");
|
||||
#endif
|
||||
const VkDependencyFlags barrier_flags = GetColorBufferBarrierFlags();
|
||||
if (full_barrier)
|
||||
|
||||
@@ -3705,6 +3705,15 @@ void FullscreenUI::DrawGraphicsSettingsPage(SettingsInterface* bsi, bool show_ad
|
||||
"EmuCore/GS", "StretchY", 100, 10, 300, FSUI_CSTR("%d%%"));
|
||||
DrawIntRectSetting(bsi, FSUI_CSTR("Crop"), FSUI_CSTR("Crops the image, while respecting aspect ratio."), "EmuCore/GS", "CropLeft", 0,
|
||||
"CropTop", 0, "CropRight", 0, "CropBottom", 0, 0, 720, 1, FSUI_CSTR("%dpx"));
|
||||
|
||||
if (!IsEditingGameSettings(bsi))
|
||||
{
|
||||
DrawToggleSetting(bsi, FSUI_CSTR("Enable Widescreen Patches"), FSUI_CSTR("Enables loading widescreen patches from pnach files."),
|
||||
"EmuCore", "EnableWideScreenPatches", false);
|
||||
DrawToggleSetting(bsi, FSUI_CSTR("Enable No-Interlacing Patches"),
|
||||
FSUI_CSTR("Enables loading no-interlacing patches from pnach files."), "EmuCore", "EnableNoInterlacingPatches", false);
|
||||
}
|
||||
|
||||
DrawIntListSetting(bsi, FSUI_CSTR("Bilinear Upscaling"), FSUI_CSTR("Smooths out the image when upscaling the console to the screen."),
|
||||
"EmuCore/GS", "linear_present_mode", static_cast<int>(GSPostBilinearMode::BilinearSharp), s_bilinear_present_options,
|
||||
std::size(s_bilinear_present_options), true);
|
||||
@@ -7050,6 +7059,10 @@ TRANSLATE_NOOP("FullscreenUI", "Increases or decreases the virtual picture size
|
||||
TRANSLATE_NOOP("FullscreenUI", "Crop");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Crops the image, while respecting aspect ratio.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "%dpx");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enable Widescreen Patches");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enables loading widescreen patches from pnach files.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enable No-Interlacing Patches");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Enables loading no-interlacing patches from pnach files.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Bilinear Upscaling");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Smooths out the image when upscaling the console to the screen.");
|
||||
TRANSLATE_NOOP("FullscreenUI", "Integer Upscaling");
|
||||
|
||||
@@ -397,9 +397,10 @@ __ri void ImGuiManager::DrawSettingsOverlay(float scale, float margin, float spa
|
||||
EmuConfig.Cpu.Recompiler.GetEEClampMode(), static_cast<unsigned>(EmuConfig.Cpu.VU0FPCR.GetRoundMode()),
|
||||
EmuConfig.Cpu.Recompiler.GetVUClampMode(), EmuConfig.GS.VsyncQueueSize);
|
||||
|
||||
if (EmuConfig.EnableCheats)
|
||||
if (EmuConfig.EnableCheats || EmuConfig.EnableWideScreenPatches || EmuConfig.EnableNoInterlacingPatches)
|
||||
{
|
||||
APPEND("CHT ");
|
||||
APPEND("C={}{}{} ", EmuConfig.EnableCheats ? "C" : "", EmuConfig.EnableWideScreenPatches ? "W" : "",
|
||||
EmuConfig.EnableNoInterlacingPatches ? "N" : "");
|
||||
}
|
||||
|
||||
if (GSIsHardwareRenderer())
|
||||
|
||||
@@ -163,11 +163,15 @@ namespace Patch
|
||||
static void writeCheat();
|
||||
static void handle_extended_t(const PatchCommand* p);
|
||||
|
||||
// Name of patches which will be auto-enabled based on global options.
|
||||
static constexpr std::string_view WS_PATCH_NAME = "Widescreen 16:9";
|
||||
static constexpr std::string_view NI_PATCH_NAME = "No-Interlacing";
|
||||
static constexpr std::string_view PATCHES_ZIP_NAME = "patches.zip";
|
||||
|
||||
const char* PATCHES_CONFIG_SECTION = "Patches";
|
||||
const char* CHEATS_CONFIG_SECTION = "Cheats";
|
||||
const char* PATCH_ENABLE_CONFIG_KEY = "Enable";
|
||||
const char* PATCH_DISABLE_CONFIG_KEY = "Disable";
|
||||
|
||||
static zip_t* s_patches_zip;
|
||||
static PatchList s_gamedb_patches;
|
||||
@@ -585,6 +589,38 @@ void Patch::ReloadEnabledLists()
|
||||
s_enabled_cheats = {};
|
||||
|
||||
s_enabled_patches = Host::GetStringListSetting(PATCHES_CONFIG_SECTION, PATCH_ENABLE_CONFIG_KEY);
|
||||
|
||||
const EnablePatchList disabled_patches = Host::GetStringListSetting(PATCHES_CONFIG_SECTION, PATCH_DISABLE_CONFIG_KEY);
|
||||
|
||||
// Name based matching for widescreen/NI settings.
|
||||
if (EmuConfig.EnableWideScreenPatches)
|
||||
{
|
||||
if (std::none_of(s_enabled_patches.begin(), s_enabled_patches.end(),
|
||||
[](const std::string& it) { return (it == WS_PATCH_NAME); }))
|
||||
{
|
||||
s_enabled_patches.emplace_back(WS_PATCH_NAME);
|
||||
}
|
||||
}
|
||||
if (EmuConfig.EnableNoInterlacingPatches)
|
||||
{
|
||||
if (std::none_of(s_enabled_patches.begin(), s_enabled_patches.end(),
|
||||
[](const std::string& it) { return (it == NI_PATCH_NAME); }))
|
||||
{
|
||||
s_enabled_patches.emplace_back(NI_PATCH_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto it = s_enabled_patches.begin(); it != s_enabled_patches.end();)
|
||||
{
|
||||
if (std::find(disabled_patches.begin(), disabled_patches.end(), *it) != disabled_patches.end())
|
||||
{
|
||||
it = s_enabled_patches.erase(it);
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u32 Patch::EnablePatches(const PatchList& patches, const EnablePatchList& enable_list)
|
||||
@@ -1006,6 +1042,11 @@ void Patch::ApplyLoadedPatches(patch_place_type place)
|
||||
}
|
||||
}
|
||||
|
||||
bool Patch::IsGloballyToggleablePatch(const PatchInfo& patch_info)
|
||||
{
|
||||
return patch_info.name == WS_PATCH_NAME || patch_info.name == NI_PATCH_NAME;
|
||||
}
|
||||
|
||||
void Patch::ApplyDynamicPatches(u32 pc)
|
||||
{
|
||||
for (const auto& dynpatch : s_active_pnach_dynamic_patches)
|
||||
|
||||
@@ -78,6 +78,7 @@ namespace Patch
|
||||
extern const char* PATCHES_CONFIG_SECTION;
|
||||
extern const char* CHEATS_CONFIG_SECTION;
|
||||
extern const char* PATCH_ENABLE_CONFIG_KEY;
|
||||
extern const char* PATCH_DISABLE_CONFIG_KEY;
|
||||
|
||||
extern PatchInfoList GetPatchInfo(const std::string_view serial, u32 crc, bool cheats, bool showAllCRCS, u32* num_unlabelled_patches);
|
||||
|
||||
@@ -103,4 +104,6 @@ namespace Patch
|
||||
// and then it loads only the ones which are enabled according to the current config
|
||||
// (this happens at AppCoreThread::ApplySettings(...) )
|
||||
extern void ApplyLoadedPatches(patch_place_type place);
|
||||
|
||||
extern bool IsGloballyToggleablePatch(const PatchInfo& patch_info);
|
||||
} // namespace Patch
|
||||
@@ -1922,6 +1922,8 @@ void Pcsx2Config::LoadSaveCore(SettingsWrapper& wrap)
|
||||
SettingsWrapBitBool(EnablePatches);
|
||||
SettingsWrapBitBool(EnableCheats);
|
||||
SettingsWrapBitBool(EnablePINE);
|
||||
SettingsWrapBitBool(EnableWideScreenPatches);
|
||||
SettingsWrapBitBool(EnableNoInterlacingPatches);
|
||||
SettingsWrapBitBool(EnableFastBoot);
|
||||
SettingsWrapBitBool(EnableFastBootFastForward);
|
||||
SettingsWrapBitBool(EnableThreadPinning);
|
||||
|
||||
@@ -285,7 +285,7 @@ void FileMemoryCard::Open()
|
||||
}
|
||||
}
|
||||
|
||||
if (fname.ends_with(".bin"))
|
||||
if (fname.ends_with(".bin") || fname.ends_with(".mc2"))
|
||||
{
|
||||
std::string newname(fname + "x");
|
||||
if (!ConvertNoECCtoRAW(fname.c_str(), newname.c_str()))
|
||||
@@ -346,7 +346,7 @@ void FileMemoryCard::Close()
|
||||
std::fclose(m_file[slot]);
|
||||
m_file[slot] = nullptr;
|
||||
|
||||
if (m_filenames[slot].ends_with(".bin"))
|
||||
if (m_filenames[slot].ends_with(".bin") || m_filenames[slot].ends_with(".mc2"))
|
||||
{
|
||||
const std::string name_in(m_filenames[slot] + 'x');
|
||||
if (ConvertRAWtoNoECC(name_in.c_str(), m_filenames[slot].c_str()))
|
||||
@@ -786,13 +786,14 @@ int FileMcd_ReIndex(uint port, uint slot, const std::string& filter)
|
||||
|
||||
static MemoryCardFileType GetMemoryCardFileTypeFromSize(s64 size)
|
||||
{
|
||||
if (size == (8 * MC2_MBSIZE))
|
||||
// Handle both ecc and non ecc versions
|
||||
if (size == (8 * MC2_MBSIZE) || size == _8mb)
|
||||
return MemoryCardFileType::PS2_8MB;
|
||||
else if (size == (16 * MC2_MBSIZE))
|
||||
else if (size == (16 * MC2_MBSIZE) || size == _16mb)
|
||||
return MemoryCardFileType::PS2_16MB;
|
||||
else if (size == (32 * MC2_MBSIZE))
|
||||
else if (size == (32 * MC2_MBSIZE) || size == _32mb)
|
||||
return MemoryCardFileType::PS2_32MB;
|
||||
else if (size == (64 * MC2_MBSIZE))
|
||||
else if (size == (64 * MC2_MBSIZE) || size == _64mb)
|
||||
return MemoryCardFileType::PS2_64MB;
|
||||
else if (size == MCD_SIZE)
|
||||
return MemoryCardFileType::PS1;
|
||||
@@ -862,7 +863,8 @@ std::vector<AvailableMcdInfo> FileMcd_GetAvailableCards(bool include_in_use_card
|
||||
|
||||
// We only want relevant file types.
|
||||
if (!(fd.FileName.ends_with(".ps2") || fd.FileName.ends_with(".mcr") ||
|
||||
fd.FileName.ends_with(".mcd") || fd.FileName.ends_with(".bin")))
|
||||
fd.FileName.ends_with(".mcd") || fd.FileName.ends_with(".bin") ||
|
||||
fd.FileName.ends_with(".mc2")))
|
||||
continue;
|
||||
|
||||
if (fd.Attributes & FILESYSTEM_FILE_ATTRIBUTE_DIRECTORY)
|
||||
|
||||
@@ -2891,6 +2891,8 @@ void VMManager::CheckForEmulationSpeedConfigChanges(const Pcsx2Config& old_confi
|
||||
void VMManager::CheckForPatchConfigChanges(const Pcsx2Config& old_config)
|
||||
{
|
||||
if (EmuConfig.EnableCheats == old_config.EnableCheats &&
|
||||
EmuConfig.EnableWideScreenPatches == old_config.EnableWideScreenPatches &&
|
||||
EmuConfig.EnableNoInterlacingPatches == old_config.EnableNoInterlacingPatches &&
|
||||
EmuConfig.EnablePatches == old_config.EnablePatches)
|
||||
{
|
||||
return;
|
||||
|
||||
@@ -30,7 +30,9 @@
|
||||
#include "fmt/core.h"
|
||||
|
||||
#include <bit>
|
||||
#ifdef _M_X86
|
||||
#include <immintrin.h>
|
||||
#endif
|
||||
#include <map>
|
||||
#include <unordered_set>
|
||||
#include <unordered_map>
|
||||
@@ -118,12 +120,13 @@ __inline int CheckCache(u32 addr)
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t i = 0;
|
||||
const size_t size = cachedTlbs.count;
|
||||
|
||||
#ifdef _M_X86
|
||||
const int stride = 4;
|
||||
|
||||
__m128i addr_vec = _mm_set1_epi32(addr);
|
||||
|
||||
size_t i = 0;
|
||||
const __m128i addr_vec = _mm_set1_epi32(addr);
|
||||
|
||||
for (; i + stride <= size; i += stride)
|
||||
{
|
||||
@@ -170,7 +173,7 @@ __inline int CheckCache(u32 addr)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
for (; i < size; i++)
|
||||
{
|
||||
const u32 mask = cachedTlbs.PageMasks[i];
|
||||
|
||||
Reference in New Issue
Block a user