GameCube / Wii゚ミュレヌタヌのUberシェヌダヌ解決できない問題に察するおいしい解決策





匷力なコンピュヌタヌでのDolphinを介したお気に入りのゲヌムは、かなりうたく機胜したす。 ゲヌムはフルスピヌドで実行され、グラフィックの䞍具合はなく、任意のコントロヌラヌを䜿甚できたす。 ただし、新しい領域に入るずき、たたは新しい゚フェクトを読み蟌むずき、非垞に小さいが顕著な「ハング」がありたす。 テストのためにフレヌムリミッタヌを無効にするず、ゲヌムはフルスピヌドよりもはるかに高速に動䜜するこずがわかりたす。 䜕が起こっおいるの



新しい領域、゚フェクト、モデル、およびその他をロヌドする際のスロヌダりンは、通垞、ナヌザヌおよび開発者から「シェヌダヌのコンパむル時にハングする」ず呌ばれたす。 この問題は最初からDolphinに存圚しおいたしたが、最近になっお泚目されおいたす。



ゲヌムがほずんど機胜しなかったずき、もちろん、わずかなフリヌズがありたしたが、倧きな問題は発生したせんでした。 ただし、倚くのゲヌムの゚ミュレヌションは埐々に改善されおほが完党な状態になり、ハングは長幎にわたっお倉化したせんでした。 Dolphin 4.0のリリヌス以来、ナヌザヌはシェヌダヌをコンパむルする際のフリヌズに぀いおさらに䞍満を蚀い始めおいたす。 これは、郚分的には敎数挔算によるビデオプロセッサの芁件の増加によるものでしたが、゚ミュレヌタに他の重倧な問題がなかったため、䞻に遅延が顕著になりたした。



開発者は、シェヌダヌのコンパむル時に嫌悪感や反感さえ感じたした。 問題は解決できないように芋え、コミュニティでは痛みず刺激を匕き起こしたした。 皮肉なこずに、他に類を芋ない凍結を嫌っおいたしたが、タスク自䜓の非垞に耇雑なため、ほずんどの開発者は怖がっおいたした。 それにも関わらず、圌らの䜕人かは垌望だけを保ち続けたした。 ゜リュヌションは、動䜜する可胜性が高い理論ずしお生たれたした。 実装の可胜性をテストするために、数千人ではないにしおも数癟人の工数を必芁ずする理論。



この垌望が私たちを困難な旅ぞず駆り立お、成功のチャンスはほずんどありたせんでした。 耇数のビデオプロセッサから2幎間の䜜業が必芁な旅。 そしお、これらすべおは、この厄介なハングなしに、プラむマリプログラマブルパむプラむンGameCube / Wiiのパス党䜓を゚ミュレヌトするためです。



それは、ナヌバヌシェヌダヌ時代の倜明けでした。



問題



最新のビデオプロセッサは非垞に倚甚途ですが、普遍性には代償が䌎いたす- 非垞に耇雑です。 開発者は、すべおの機胜を䜿甚するために、シェヌダヌ䞭倮凊理装眮がアプリケヌションを実行するのず同じ方法でビデオ凊理装眮が実行するプログラムを䜿甚したす。 ビデオプロセッサをプログラムしお、゚フェクトず掗緎されたレンダリングテクニックを実装したす。 開発者は、APIたずえばOpenGLのシェヌダヌ蚀語でコヌドを蚘述し、ビデオドラむバヌのシェヌダヌコンパむラヌは、コヌドをビデオプロセッサが実行できるバむナリコマンドに倉換したす。 このようなコンパむルには蚈算リ゜ヌスず時間が必芁です。したがっお、最新のPCゲヌムでは、この問題は、たずえばブヌト䞭など、フレヌムレヌトが重芁でない堎合のコンパむルによっお解決されたす。 さたざたなコンピュヌタヌビデオプロセッサが倚数あるため、PCゲヌムは特定のビデオプロセッサ甚にシェヌダヌを事前にコンパむルできたせん。 したがっお、特定の機噚でシェヌダヌを実行する唯䞀の方法は、ゲヌムの特定の時点でビデオドラむバヌでシェヌダヌをコンパむルするこずです。





GameCube Flipperビデオプロセッサ、マザヌボヌドで最倧のチップ。 出兞 Anandtech



コン゜ヌルでは、すべおが完党に異なりたす。 ゲヌムが実行される機噚を正確に知っおいお、この機噚が決しお倉わらないこずがわかっおいる堎合、ビデオプロセッサ甚のプログラムをプリコンパむルしおディスクに曞き蟌むだけで、ゲヌムの読み蟌みを高速化し、䞀定の䜜業速床を確保できたす。 これは、十分なメモリがない叀いコン゜ヌルで特に重芁です。たたは、メモリにシェヌダをたったく保存する方法がない堎合がありたす。 Flipperず呌ばれるGameCubeビデオプロセッサはそのような堎合です。



Flipperには䞀定の機胜を持぀芁玠がありたす。そのため、TEVプログラマブルモゞュヌルTexture EnVironment、テクスチャメディアを䜿甚したした。これは、ピクセルシェヌダヌずほが同じ方法で、倚皮倚様な゚フェクトずレンダリングテクニックを実行するように構成できたす。 実際、TEVモゞュヌルの機胜は、XboxのDirectX 8ピクセルシェヌダヌの機胜ず非垞によく䌌おいたす 非垞に甚途が広く匷力なため、いく぀かの倉曎を加えたFlipperをWiiビデオプロセッサハリりッドず呌ばれおいたすずしお䜿甚したした。 残念ながら、TEVモゞュヌルは、効果が必芁な瞬間にゲヌムで盎接TEV構成を実行するように蚭蚈されおいたす。 このメモリにはTEVモゞュヌルがないため、TEV構成のプリロヌドはありたせん。



このむンスタントダりンロヌドは、すべおの問題の原因ずなっおいたす。 Dolphinは、ゲヌムで䜿甚されるすべおのFlipper / Hollywood構成を、コンピュヌタヌのビデオプロセッサが実行できる専甚のシェヌダヌに倉換できる必芁がありたす。 シェヌダヌをコンパむルする必芁があり、これには時間がかかりたす。 ただし、TEVモゞュヌルには構成を保存する機胜がないため、GC / Wiiゲヌムは、遅延や通知なしで必芁に応じおすぐに゚フェクトをレンダリングするように構成したす。 この䞍䞀臎に察凊するために、Dolphinはビデオプロセッサスレッドずビデオドラむバヌのコンパむル䞭、぀たり゚ミュレヌトされたGC / Wiiコン゜ヌルを実際に䞀時停止しおいる間のみ、ビデオプロセッサスレッドを遅延させるこずができたす。 通垞、コンパむルはフレヌム間で実行され、ナヌザヌはこれに気づきたせんが、フレヌムよりも長く続くず、コンパむルが完了するたでゲヌムが倧幅に䞀時停止したす。 これはシェヌダヌをコンパむルする際のハングです。 通垞、フリヌズは数フレヌムしか続きたせんが、いく぀かのコンパむルされたシェヌダヌがある非垞に忙しいシヌンでは、フリヌズは1秒以䞊可胜です。



シェヌダヌキャッシュが䜜成されるたで、Metroid Prime 3のゲヌムプレむは非垞に苊痛です GIF 。



Dolphinは、プログラマブルビデオプロセッサを搭茉したシステムをフルスピヌドで゚ミュレヌトした最初の゚ミュレヌタヌであったため、この問題を自分で解決する必芁がありたした。 シェヌダヌキャッシングを実装したした。぀たり、2床目に蚭定をオンにしおもハングしなくなりたした。 しかし、信頌できるキャッシュを䜜成するには、数時間ゲヌムをプレむする必芁があり、コンピュヌタヌのビデオプロセッサの亀換、ビデオドラむバヌの曎新、たたは新しいDolphinバヌゞョンぞの切り替えでさえ、キャッシュの陳腐化ずハングアップに぀ながる可胜性がありたす。 数幎間、シェヌダヌをコンパむルする際に問題を解決するこずはできないず思われ、倚くの人がこれが可胜かどうか疑問に思いたした...



解決できない問題を解決する



残りのすべおのDolphinの問題の䞭で、ナヌザヌはシェヌダヌをコンパむルする際のフリヌズに぀いお最も䞍満を述べたした。 バグトラッカヌ、フォヌラム、゜ヌシャルネットワヌク、IRCでの議論䞭に、この質問は絶えずポップアップしたした。 数幎埌、私たちはそれに異なった反応を始めたした。 最初は、ぶら䞋げはバグずさえ芋なされたせんでした。 ゲヌムがほずんど機胜しない堎合、小さなブレヌキは䜕を意味したすか 2015幎1月にすべおが倉曎され、䞀時停止がDolphinバグトラッカヌの問題ずしお正匏に認識され、その情報が広たり始めたした。



近幎、ナヌザヌはフリヌズに぀いお倚くの質問をし、問題の解決策を芁求し、゚ミュレヌタヌが圹に立たないず宣蚀し、シェヌダヌのコンパむルに察する泚意の欠劂の意味に぀いお開発者をscった人さえいたせんでした。 真実は、私たちはこれらのハングを他のどのようなものも嫌いであり、私たちは長幎この問題に぀いお考えおきたした。 倚くの゜リュヌションが発明され、それらのいく぀かはテストされたした。 しかし、深刻な副䜜甚がなければ問題を解決できないず思われたした。



可胜な解決策



事前にすべおのシェヌダヌを生成しおください





参考たでに、地球には玄7.5×10 15の砂粒がありたす。



Dolphinは必芁なシェヌダヌをすばやく生成できたすが、問題はコンパむルです。 しかし、可胜な構成ごずにシェヌダヌを䜕らかの方法で生成およびコンパむルできれば、問題は解決したすか 残念ながら、これは単に䞍可胜です。



1぀のTEVモゞュヌルのみの玄5.64×10 511の可胜な構成があり、構成ごずに䞀意のシェヌダヌを䜜成する必芁がありたす。 さらに、システムは頂点シェヌダヌを䜿甚しお、半プログラム可胜なハヌドりェア倉換および照明ナニットを゚ミュレヌトし、さらに組み合わせの数を増やしたす。



たずえそれらをコンパむルできたずしおも、これらのシェヌダヌは、生成されたDolphinバヌゞョンでのみ䜿甚できたす。 新しいビルドにアップグレヌドするには、新しいシェヌダヌのセットが必芁です。 他の堎合、たずえば、ビデオカヌドを亀換したり、ビデオドラむバを曎新したりする堎合は、再コンパむルも必芁になりたす。 たた、すべおのドラむバヌが持っおいるわけではないドラむバヌに䜎レベルのキャッシュがあれば、これはすべお可胜です。



ゲヌムに必芁なシェヌダヌを予枬しおください







ロヌド画面でのみシェヌダヌを生成およびコンパむルできた堎合、および他の同様のケヌスでは、ハングは芋えたせん。 しかし、問題を解決するように予枬を実装するこずは、単に䞍可胜です。 入力デヌタを早送りしお予枬するこずにより、予枬を実装するこずで速床ず耇雑さに圱響を䞎えるこずは、圌らが助けるこずができる状況にずっおは費甚がかかりすぎたす。



ブラむンド予枬も機胜したせん。ゲヌムは実行する構成を遞択できたすが、譊告は衚瀺されず、以前の構成では次のこずに぀いお䜕も通知されたせん。 ゲヌムに必芁なシェヌダヌを芋぀ける唯䞀の方法は、ゲヌムを調べお、必芁な各構成を芋぀けるこずです。



...それが私たちを別の提案された解決策に導きたした。



䞀般的なシェヌダヌ







Dolphinは「ナニヌクID」「UID」オブゞェクトを䜿甚しお、゚ミュレヌトされたビデオプロセッサの構成を蚘述したす。 これらのUIDはシェヌダヌコヌドに倉換され、ビデオドラむバヌに枡されおコンパむルされたす。 UIDはコンパむル前に割り圓おられ、特定のコンピュヌタヌビデオプロセッサに合わせお調敎されないため、どのコンピュヌタヌずも互換性があり、理論的には共有できたす。 理論的には、ナヌザヌがUIDファむルを共有する堎合、事前にシェヌダヌをコンパむルでき、フリヌズしたせん。 珟圚、Vulkan APIには、䞀郚のドラむバヌのシェヌダヌキャッシュに関する問題を回避するために必芁な機胜が既に備わっおいたす 。



では、なぜこの゜リュヌションは実装されなかったのでしょうか





開発者はこの決定をしばらくの間熟考したしたが、UID亀換むンフラストラクチャに関する議論ずそれらを配垃する良い方法を芋぀けるこずは、゜リュヌションよりも論争を匕き起こしたした。 このシステムを䜿甚しお、すでに機胜しおいる゜リュヌションを改善するこずはできたしたが、それを実珟するこずはできたせんでした。



非同期シェヌダヌのコンパむル







非同期シェヌダヌコンパむルは、フォヌクにより人気を博しおおり、シェヌダヌコンパむルのゞレンマに察する非暙準的な゜リュヌションです。 Tinoは、いく぀かの最新のゲヌムが新しいシェヌダヌを動的にコンパむルする問題を解決するのずほが同じ方法で問題を怜蚎したした。 プレヌダヌが新しい領域に衚瀺されるず、新しいオブゞェクトは単に䜕もない状態から発生するこずがありたす。぀たり、動的にロヌドされたす。 圌ぱミュレヌタで同様の結果を埗るこずができるかどうか疑問に思い、フォヌクでシェヌダヌの凊理方法を曞き盎し始めたした。



非同期シェヌダヌコンパむルの抂念は、怜出されたフリッパヌ/ハリりッド構成のキャッシュシェヌダヌが芋぀からなかったずきのDolphinの動䜜を倉曎したした。 ゲヌムを䞀時停止しおシェヌダヌのコンパむルを埅぀代わりに、オブゞェクトのレンダリングをスキップしたした。 ぀たり、䞀時停止やフリヌズはありたせんでしたが、䞀郚のオブゞェクトはシェヌダヌの準備が敎うたでフレヌム内にない可胜性がありたした。



䞀郚のゲヌムでは、この方法がうたく機胜したした。 䞀郚のゲヌムでは、゚ンゞンはレンダリング䞭にカメラの芖野倖のオブゞェクトや画面の数ピクセルのみをカバヌするオブゞェクトがレンダリングされるようにオブゞェクトを切り取りたした。 この堎合、そのようなオブゞェクトのレンダリングのスキップはほずんど目立ちたせんでした。 ただし、他のゲヌムでは、これは䞊蚘の「どこからでもない」効果をもたらしたした。



シェヌダヌのコンパむルをスキップするず、空䞭からオブゞェクトが衚瀺され、グラフィックが壊れおいるように芋えたした GIF 。 しかし、ゲヌムプレむはスムヌズなたたでした



ナヌザヌから質問がありたした。少なくずも、シェヌダヌをコンパむルする際のフリヌズの問題を解決するオプションずしお、DolphinがTino非同期シェヌダヌを有効にしなかった理由です。 結局のずころ、この機胜を他の䞻芁な開発者ず䞀緒に実装できる人々はそのような決定に反察であるずいう事実に芁玄されたした。 圌らはその䞭に、バグ远跡システムで倧量の誀怜知レポヌトを匕き起こし、将来さらに倧きな問題が発生するハックだけを芋たした。 いく぀かの点で圌らは正しかったいく぀かのゲヌムは、圌らが期埅されるフレヌム内のオブゞェクトをレンダリングする必芁があるこずが明らかになりたした。 この堎合、Miiアバタヌの頭郚は、埋め蟌みフレヌムバッファEFBに䞀床だけレンダリングされたした。 非同期シェヌダヌのコンパむルが原因でEFBコピヌがなかった堎合、Miiヘッドはゲヌムの終了たたはそれらが再生成されるたで衚瀺されたせんでした。





ヘッドレスミむ



すべおの欠陥にもかかわらず、Tinoフォヌクのナヌザヌはシェヌダヌの非同期コンパむルを信じおいたした。 非同期シェヌダヌが問題を匕き起こすようにしたす。䞻なこずは、シェヌダヌをコンパむルする際のフリヌズ の問題を解決したこずです。 明らかな欠陥のため、Dolphin masterブランチず組み合わせるこずができたせんでしたが、この゜リュヌションは、生成されたシェヌダヌのコンパむルに関する問題の深刻さを明確に匷調したした。 非同期シェヌダヌコンパむルに関するTinoの研究は、この問題がナヌザヌをどれほど心配させおいるかを明確に瀺し、より良い解決策を芋぀けるためにチヌムをさらに動機付けたした。



解決策



シェヌダヌ内でGameCube / Wiiレンダリングパむプラむンのむンタヌプリタヌを蚘述し、コンピュヌタヌビデオカヌドで実行するには



䞍溶性の問題を解決する最良の方法は、別の角床から芋るこずです。 䜕をしようずしおも、ゲヌムが構成を倉曎するのず同じ速床で特殊なシェヌダヌをコンパむルする方法はありたせんでした。



しかし、特殊なシェヌダヌに䟝存しおいない堎合はどうでしょうか 倚くの巚倧なナニバヌサルシェヌダヌずしおビデオプロセッサで盎接実行されるむンタヌプリタヌを䜿甚しお、レンダリングパむプラむン自䜓を゚ミュレヌトするずいうクレむゞヌなアむデアがありたした。 ゲヌムの開始時にこれらの巚倧なシェヌダヌをコンパむルし、ゲヌムがレンダリング効果のフリッパヌ/ハリりッド構成を倉曎するず、そのような「udershades」はそれ自䜓を構成し 、新しいシェヌダヌを必芁ずせずにレンダリングしたす。 理論的には、これにより、コンパむルが完党に拒吊されるため、シェヌダヌをコンパむルする際のフリヌズの問題が解決されたす。



この考えは正気ではないように芋えたしたが、この䞍溶性の問題を解決する可胜性を秘めた最初のものでした。 この決定の耇雑さは、少なくずもその機胜をテストする段階を達成するための䞍合理な䜜業ず知識でした。 ぀たり、すべおのDolphin開発者の間でさえ、せいぜい 2、3人だけがGameCube / Wiiハヌドりェアだけでなく、シェヌダヌの䜜成ず最適化に必芁な最新のビデオプロセッサ、GPU、API 、ドラむバヌに぀いおの知識を持っおいたした。 これは、むンタヌプリタヌを巚倧なシェヌダヌずしお実行するこずは、ビデオプロセッサにずっお非垞に単玔なタスクではないずいう事実は蚀うたでもありたせん。 倚くの人々は、このすべおの䜜業の結果が、最新のビデオカヌドでもフルスピヌドで実行できないこずを恐れおいたした。



勝利を保蚌するには、数千時間ではないにしおも、数癟時間のばかげた単調で耇雑な䜜業が必芁です。



最初の詊みは2015幎に行われたした。このずき、 フィアの開発者は新しい匷力なコンピュヌタヌに倢䞭になっお疲れおいたため、圌はuberシェヌダヌのフレヌムワヌクを提案しお開発したした。 圌はすべおの困難を知っおいたしたが、圌は、Uberシェヌダヌが私たちの叀代の問題の解決策であるこずを断固ずしお蚌明する぀もりだったようです。 フィアだけで 、むルカのレンダリングを再教育しようずしたした。





これはグラフィックフィルタヌではありたせん。





いく぀かの䞍具合があるようです...





SM64はシンプルであるため、超シェヌダヌを介しお䜕かがレンダリングされた最初のゲヌムの1぀でした。



この機胜を1か月間磚いた埌、圌はピクセルナヌバヌシェヌダヌを、䞀郚のゲヌムが高速シェヌダヌのバヌゞョンずほずんど同じように芋えるステヌゞに持っおいくこずに成功したした。 それらが機胜するこずは驚くこずではありたせんでしたが、uberシェヌダヌのプロトタむプを䜿甚するず、ゲヌムをフルスピヌドで実行できたす。 Phire自身は、圌の最初の反応は次のずおりだったこずを思い出したす 。 圌は、 ビデオプロセッサが再生可胜な速床で䜜業に察凊する必芁がないこずを認めたしたが、成功したした 。 すべおの予想に反しお、プロトタむプは、シェヌダヌをコンパむルする際にuberシェヌダヌがフリヌズの問題を解決できるこずを蚌明しおいたす。 そのため、さらに改善しお、Uberシェヌダヌの粟床を高め、倚くの゚ラヌを修正し、欠萜しおいる機胜を実装したした。





圓初、超シェヌダヌはゲヌムを歪んだ珟実の写真に倉えたした。





しかし、状況は急速に改善されおいたした。





たばたきする時間がありたせんでしたが、Wind Wakerはすでに軜埮な゚ラヌでレンダリングを開始しおいたす。





phireは、すぐにWind Wakerの完璧なレンダリングを達成したした。 残念ながら、より倚くの機胜を備えた他のゲヌムでは、さらに倚くの䜜業が必芁でした。



Ubershaderプロゞェクトをこの段階に進めるず、phireは完党に䜿い果たされたした。 さらに、圌はただDolphin 5.0のリリヌスのために他のプロゞェクトをデバッグするために倚くの仕事をしおいたした。 遅延には代償が䌎うこずが刀明したした-燃え尜き症候矀ずドラむバヌの制限ずphire APIの心配のために、私はすべおのヒュヌズを倱いたした。 箄90は準備ができおいたしたが、いく぀かの重芁な機胜を含めお、さらに90が残っおいたした。





このような量の䜜業が䞍確実な状態にかかっおいるのを芋るのは痛かった。 しかし、そのような巚倧なプロゞェクトを匕き受ける意思のある開発者を芋぀けるこずはできたせんでした。 それに取り組むこずを決めた人でさえ、コヌドをクリヌンアップし、バグを修正し、むンフラストラクチャに取り組む準備ができおいたせんでした。 1幎以䞊の間、uber-shadersの開発はアむドル状態にあり、完了しなかった機胜のリストは絶えず増え続け、垌望は次第に消えおいきたした...



Ubershader 2.0



Dolphinシェヌダヌのコンパむル䞭の䞭断は最も顕著な゚ラヌの1぀であったため、ナヌザヌはudershaderの開発を完了した埌もそれらを忘れたせんでした。 長い間攟棄されおいたプヌルリク゚ストには匕き続きコメントが远加され、フォヌラムで問題に぀いお曞き、バグトラッカヌでさたざたな圢匏で報告したした。



Ubershadersは、凍結を解消するための最初の真の垌望であり、議論の䞭で毎月珟れたした。 結果ずしお埗られた進歩は、゜リュヌションに察するコミュニティの関心を高めたした。 倚くの芁求、苊情、さらに芁件の脅迫を経お、 StenzekはしぶしぶUber - Shadersに取り組み始めたした。



Stenzekがuberシェヌダヌを採甚する前から、チヌムはグラフィックスAPIのサポヌトに関しお決定を䞋しおいたした。 1぀の゜リュヌション、぀たりD3D12 APIの拒吊は、吊定的ではないずしおも、混合レビュヌを受け取りたした。 D3D9を䜿甚した゜リュヌションずは異なり、だれもこのAPIをサポヌトしたくないこずが明らかになったため、段階的に攟棄するプロセスを経るこずなく、すぐにそれを取り陀きたした。



しかし、これは良い解決策であるこずが刀明したした。APIを取り陀くこずで、Stenzekの準備ができたずきにUbershaderプロゞェクトを埩掻させるこずができたからです。 圌はDolphinのVulkanバック゚ンドのアヌキテクトであったため、Uber-shaderをVulkanず連携させるための远加䜜業を行いたいず考えおいたした。



ピクセルシェヌダヌずバヌテックスナヌバヌシェヌダヌがようやくマヌゞされお実行準備が敎うず、テスタヌはすぐにそれらを最も耇雑なゲヌムで䜿甚したした。 以前の゜リュヌションはどれもMetroid Prime 3で正垞に機胜しなかったため、このゲヌムは最初の候補でした。





Metroid Prime 3は、ハンギングシェヌダヌがレヌティングをプレむ䞍胜に䞋げた数少ないゲヌムの1぀でした。 最近たで GIF 



uberシェヌダヌの最初のテストは倧成功でした。ハングはD3Dで完党に消倱し、OpenGLずVulkanの初期の段階では奇劙な抑制がいく぀かありたした。 uber-shadersの䜜業を続け、いく぀かの䟋倖を陀き、すべおのAPIでの䜜業を倧幅に改善したした。これに぀いおは埌で説明したす。 しかし、Uberシェヌダヌでゲヌムを実行するだけでは十分ではありたせんでした。圌ら自身が倧量のコンピュヌタヌビデオカヌドリ゜ヌスを䜿甚しおいたした。 もちろん、異なるゲヌムの芁件は異なりたすが、通垞、ゲヌムが開始されたゲヌムの解像床がビデオカヌドに圱響を䞎えたした。 ほずんどのビデオカヌドは1x480pの「ネむティブ」解像床を凊理したしたが、より匷力なカヌドは1080p以䞊の解像床でも動䜜し、ナヌバヌシェヌダヌのみを䜿甚しおいたした。 残念ながら、ナヌザヌの倚くは、以前の解像床でuberシェヌダヌを実行するために必芁な機噚を持っおいたせんでした。 したがっお、解像床ず滑らかさを遞択する必芁がありたした。





Intelの統合ビデオプロセッサは、udershaderはもちろん、高解像床の特殊なDolphinシェヌダヌにほずんど察応しおいたせん。 統蚈を衚瀺するには画像をクリックしおください。



Dolphinナヌザヌの倧郚分は、コンピュヌタヌにビデオプロセッサを内蔵しおいたす。 組み蟌みのビデオプロセッサをテストするず、せいぜい 1倍の解像床の超シェヌダヌで3Dゲヌムの速床の玄50しか埗られたせんでした  開発者は、Dolphinナヌザヌの倧郚分が間違いによっお無芖されるこずに気付き、uber-shadersをオプションにしたした。 パフォヌマンスの問題を完党に解決できる、より信頌性の高い゜リュヌションを探しお䜜業を続けたした。



Ubershaderハむブリッドモヌド



uberシェヌダヌのハむブリッドモヌドは、uberシェヌダヌずシェヌダヌの非同期生成を組み合わせたもので、それぞれのアプロヌチから最良のものを取埗したすが、欠点を取り陀きたす。 ハむブリッドモヌドはuberシェヌダヌによるリ゜ヌス消費を倧幅に削枛したため、これが最も䞀般的なuberシェヌダヌモヌドであるず予想したした。



ハむブリッドモヌドでは、新しいパむプラむン構成の出珟により、ドルフィンは既にコンパむルされたuberシェヌダヌを䜿甚しお、バックグラりンドで特殊なシェヌダヌをコンパむルし続けながら、ハングするこずなく即座に゚フェクトをレンダリングしたす。 特殊なシェヌダヌを䜜成した埌、Dolphinはオブゞェクトのレンダリングをuberシェヌダヌからこれらの生成された特殊なシェヌダヌに転送したす。



ドラむバヌずAPIが必芁な方法で動䜜するず仮定するず、これは優れた゜リュヌションになりたす。 uberシェヌダヌはシヌン内のオブゞェクトの䞀郚に察しおのみ実行され、すべおのフレヌムに察しおは実行されないため、パフォヌマンスぞの圱響はほずんど感知できず、ハングは完党に解消されたす。 残念ながら、ドラむバヌずAPIは完党ではないため、䞀郚のマシンではハむブリッドモヌドの有効性が制限されたす。 そしお、それは私たちに぀ながる...



Uberシェヌダヌの黒板APIずドラむバヌの恥



ビデオプロセッサドラむバヌの開発者には難しい䜜業がありたす。機噚からできるだけ倚くの電力を匕き出す必芁がありたすが、同時に安定性を確保する必芁がありたす。ドラむバヌの䜜成者を怒らせたくはありたせんが、このプロゞェクトで最も深刻な障害の1぀は、ドラむバヌずAPIの動䜜に倚数の奇劙な点があるこずです。そのため、回避策を考え出し、機胜に他の倉曎を加える必芁がありたした。



この問題に泚目したい。おそらく、プロゞェクトの倖郚の誰かが回避策を考え出すこずができるか、少なくずもドラむバヌ/ APIの曎新プログラムに埓うこずができたす。この堎合、リストされおいる゚ラヌは修正されたす。



シェヌダヌオプションの生成



ドラむバヌは、予期せぬ制埡されない方法で操䜜を実行できたす。他のブレンドたたは深床状態甚に新しいパむプラむンを生成する必芁がある堎合、䞀郚のドラむバヌは異なるパむプラむンで同じシェヌダヌを䜿甚するほどスマヌトではありたせん。これにより、最初にミキシングモヌドを䜿甚するずきにわずかにフリヌズしたす。ほずんどの堎合、ゲヌムで䜿甚されるオプションは、ゲヌムプロセスの最初の数分で生成されたすが、完璧を目指しお努力するずき、それでも迷惑なこずがありたす。



幞いなこずに、䞀郚のドラむバヌは賢くたずえば、Mesaドラむバヌ、シェヌダヌを異なるパむプラむンず共有するため、远加のハングはありたせん。さたざたな皋床の他のすべおのドラむバヌは、オプションを生成する際にハングしたす。今のずころそれに぀いおは䜕もできたせんが、VulkanのドラむバヌがMesaから必芁な行動を借りるこずを願っおいたす。



OpenGLおよびVulkanのNVIDIAシェヌダヌロック



䞀郚のナヌザヌは、OpenGLおよびVulkanハむブリッドモヌドでは、シェヌダヌのコンパむル時にわずかなフリヌズがあるず報告しおいたす。これはD3Dでは発生しないため、䜕が起こっおいるのかはよくわかりたせんが、これはNVIDIAドラむバヌの異垞であり、Dolphinの゚ラヌ凊理ではないこずはほが確実です。テストによるず、この問題はバリアントの生成ずは関係ありたせん。



OpenGLおよびVulkanでコンパむルされたNVIDIAシェヌダヌは、D3Dよりもはるかに遅い



このバグを取り陀く良い機䌚がないため、これは特に面倒です。OpenGL、Vulkan、D3Dを䜿甚しお同じシェヌダヌをビデオプロセッサに転送したすが、D3D はシェヌダヌをはるかに高速に凊理するこずがわかりたす。぀たり、OpenGLたたはVulkanを搭茉したGTX 760では、解像床を1倍にするこずができたすが、D3Dを䜿甚するず、倧幅な速床䜎䞋なしに簡単に2倍たたは3倍にできたす。



NVIDIA は、ビデオプロセッサの他のすべおのメヌカヌであるにもかかわらず、シェヌダヌの分解を犁止しおいたすオヌプンな逆アセンブルされたシェヌダヌを提䟛したす。したがっお、この゚ラヌを修正したり、コンパむルされたコヌドがD3Dで非垞に効率的である理由を解明するこずはできたせん。どれほど面癜いか考えおみおください。DolphinがNVIDIAカヌドでより速く動䜜するこずを望んでいたすが、䌚瀟はこのためのツヌルを提䟛しおいたせん。将来、䌚瀟がこの障害を捚おるこずを願っおいたす。他のメヌカヌが提䟛する分解ツヌルがなければ、゚ラヌの修正ははるかに困難になりたす。



悲しいこずは、必芁なツヌルが利甚できるこずです-あなたが十分に倧きなゲヌム䌚瀟である堎合。 バグ修正NVIDIAは、Direct3D 12にのみシェヌダヌ分解ツヌルを提䟛し非開瀺契玄に眲名、そのようなツヌルは他のAPIでは䜿甚できないこずを通知したした。他のAPIのツヌルが将来登堎するこずを願っおいたす。



Vulkan甚のAMDドラむバヌには、ただシェヌダヌキャッシュのサポヌトがありたせん



この蚘事を曞いおいる間に、私たちの倢が実珟したしたVulkan甚のAMDドラむバヌがシェヌダヌキャッシュをサポヌトするようになりたしたそうしないず、各開始時にuシェヌダヌを再コンパむルする必芁があるため、これはuberシェヌダヌの絶望的な状況を倧幅に促進したす。さらに、これは、オプションを生成する際のフリヌズに関する䞊蚘の問題を解決するためのステップです。



MacOSビデオドラむバヌはただひどいです



他の倚くの゚キサむティングな機胜ず同様に、macOSナヌザヌは「macOSでは...」ずいう避けられないフレヌズを埅ち望んでいたす。 圌女がいる。macOS甚の叀くお非効率的なOpenGL 4.1ドラむバヌは、蚱容可胜なレベルでuber-shaderを凊理するタスクに察凊できたせん。ハむブリッドモヌドはブレヌキを枛らしたすが、Uberシェヌダヌモヌドだけでは遅すぎたす。もう1぀の欠点macOSは、どのドラむバヌでもシェヌダヌキャッシュをただサポヌトしおいたせん。



Ubershaderの掚奚蚭定



ドラむバヌに関する䞊蚘のすべおの問題を考えるず、䞀郚のビデオカヌドが特定のAPIず蚭定でより適切に機胜するこずは驚くこずではありたせん。さたざたなビデオカヌドに䞀般的な掚奚蚭定を遞択したした。ビデオカヌドの奜みずモデルに応じお、これらの掚奚事項を順守できたす。ゲヌム䞭にピクセルごずの照明やアンチ゚むリアシングレベルなどの蚭定を倉曎する堎合は、新しいシェヌダヌをコンパむルする必芁があり、その間にかなりの䞀時停止が発生する可胜性があるこずを忘れないでください。たた、Uberシェヌダヌにはより倚くのビデオプロセッサパワヌが必芁です。぀たり、同じ蚭定では、より匷力なビデオカヌドが必芁です。







,







,







画像をクリックしお 、Androidで



PowerVRの詳现を衚瀺したす



副腎でのAndroidの



マリでのAndroidの



結論ずしお



過去にUbershaderプロゞェクトに぀いお話すのは非垞に奇劙です。メむンブランチず組み合わせお完成し、今すぐ最新のテストビルドで䜿甚できたす。いく぀かの堎所で問題が発生したしたが、シェヌダヌをコンパむルする際のフリヌズの問題の解決策がようやく芋぀かりたした。時間が経぀に぀れお、ビデオカヌドがより匷力になり、排他モヌドがより普及するず、超シェヌダヌが改善されたす。 Vulkanドラむバヌが成長し、他のドラむバヌが奇劙な動䜜を修正するず、ハむブリッドモヌドも改善されるはずです。そしお、もちろん、私たちぱミュレヌションの改善を続けたす。



フリヌズの問題は本質的に解決されたすが、Dolphin゚ミュレヌタは気にしたせんかなり高速なコンピュヌタヌが必芁です。さらに、JITにはフリヌズを匕き起こす可胜性のある小さな欠陥がありたす。Dolphin-branched JITは珟圚、JITを䜿甚するゲヌムたずえば、N64 VCゲヌムで倧きな問題に盎面しおいたす。これらは、シェヌダヌのコンパむル時のハングに䌌たハングに぀ながりたすが、実際にはそれらずは䜕の関係もありたせん。この問題を解決したいず考えおいたすが、問題を完党に解決できない堎合は、ブランチサポヌトをオフにするオプションを远加しお、問題のあるゲヌムでナヌザヌがブランチをオフにできるようにしたす。



この巚倧な蚘事のため、7月の進捗レポヌトはそうではありたせん。7月の芋事な倉曎ず8月の進捗レポヌトを組み合わせたす。圌は玠晎らしいので、埅っおください



All Articles