mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-07-20 22:14:14 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f7c8a77f6 | ||
|
|
1842fe6db8 | ||
|
|
1feb31498d | ||
|
|
f3632c44c8 | ||
|
|
32a6e62212 | ||
|
|
575ec07553 | ||
|
|
18308b6525 | ||
|
|
d52f29dcd7 | ||
|
|
288d8047ae | ||
|
|
26b232292c | ||
|
|
1fff69b0aa | ||
|
|
4d347305b5 | ||
|
|
2fd6f8e4ac |
Vendored
+2146
-885
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):
|
||||
|
||||
File diff suppressed because one or more lines are too long
+2142
-2064
File diff suppressed because it is too large
Load Diff
+2216
-2138
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2682
-2604
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2275
-2197
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2668
-2616
File diff suppressed because it is too large
Load Diff
+2213
-2135
File diff suppressed because it is too large
Load Diff
+2155
-2077
File diff suppressed because it is too large
Load Diff
+2157
-2079
File diff suppressed because it is too large
Load Diff
+2376
-2298
File diff suppressed because it is too large
Load Diff
+2176
-2098
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+2282
-2203
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2335
-2255
File diff suppressed because it is too large
Load Diff
+2244
-2166
File diff suppressed because it is too large
Load Diff
+2144
-2066
File diff suppressed because it is too large
Load Diff
+2185
-2107
File diff suppressed because it is too large
Load Diff
+2156
-2078
File diff suppressed because it is too large
Load Diff
+2195
-2117
File diff suppressed because it is too large
Load Diff
+2143
-2065
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2248
-2170
File diff suppressed because it is too large
Load Diff
+2143
-2065
File diff suppressed because it is too large
Load Diff
+2143
-2065
File diff suppressed because it is too large
Load Diff
+2149
-2071
File diff suppressed because it is too large
Load Diff
+2165
-2087
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2236
-2158
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+6617
-6538
File diff suppressed because it is too large
Load Diff
+2576
-2498
File diff suppressed because it is too large
Load Diff
+2205
-2127
File diff suppressed because it is too large
Load Diff
+2141
-2063
File diff suppressed because it is too large
Load Diff
+2142
-2064
File diff suppressed because it is too large
Load Diff
+2325
-2247
File diff suppressed because it is too large
Load Diff
+1
-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)
|
||||
|
||||
@@ -7059,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");
|
||||
|
||||
+7
-4
@@ -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