mirror of
https://github.com/yuzu-mirror/yuzu-mirror.github.io.git
synced 2025-12-06 07:12:21 +01:00
444 lines
21 KiB
HTML
444 lines
21 KiB
HTML
<!DOCTYPE html>
|
||
<html lang=" en-us "class="has-navbar-fixed-top">
|
||
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
|
||
<meta name="theme-color" content="#404040">
|
||
|
||
<meta property="og:title" content="New Feature Release - NVDEC emulation! · yuzu" />
|
||
<meta property="og:site_name" content="yuzu" />
|
||
<meta property="og:url" content="https://yuzu-mirror.github.io/entry/yuzu-nvdec-emulation/" />
|
||
<meta property="og:description" content="Hello, yuzu fans!
|
||
Tired of broken cutscenes and having to mash your controller buttons in hopes of skipping them? Well, look no further!
|
||
Thanks to the efforts of epicboy, yuzu can now play (most of) your favorite in-game cutscene videos.
|
||
Jump right in to find out more!" />
|
||
<meta name="description" content="Hello, yuzu fans!
|
||
Tired of broken cutscenes and having to mash your controller buttons in hopes of skipping them? Well, look no further!
|
||
Thanks to the efforts of epicboy, yuzu can now play (most of) your favorite in-game cutscene videos.
|
||
Jump right in to find out more!" />
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:image" content="https://yuzu-mirror.github.io/entry/yuzu-nvdec-emulation/banner.png" />
|
||
|
||
<link rel="icon" href="https://yuzu-mirror.github.io/favicon.ico" />
|
||
<link rel="shortcut icon" href="https://yuzu-mirror.github.io/favicon.ico" type="image/x-icon" />
|
||
<link rel="canonical" href="https://yuzu-mirror.github.io/entry/yuzu-nvdec-emulation/">
|
||
|
||
<title>New Feature Release - NVDEC emulation! - yuzu</title>
|
||
<link href="https://fonts.googleapis.com/css?family=Ubuntu|Dosis" rel="stylesheet">
|
||
<link href="https://use.fontawesome.com/releases/v6.4.0/css/all.css" rel="stylesheet">
|
||
|
||
<link rel="stylesheet" href="https://yuzu-mirror.github.io/scss/style.min.css" />
|
||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.11.1/baguetteBox.min.css" type="text/css" />
|
||
|
||
|
||
|
||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-112443698-1"></script>
|
||
|
||
|
||
<script type="text/javascript">
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag() { dataLayer.push(arguments); }
|
||
gtag('js', new Date());
|
||
gtag('config', 'UA-112443698-1');
|
||
</script>
|
||
|
||
|
||
</head>
|
||
|
||
<body>
|
||
<nav class="navbar is-dark is-size-6 is-fixed-top" role="navigation" aria-label="main navigation">
|
||
<div class="container">
|
||
<div class="navbar-brand">
|
||
<a class="navbar-item" href="https://yuzu-mirror.github.io">
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="navbar-logo" viewBox="0 0 515.83 163.11"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#ff3c28;}.cls-3{fill:#0ab9e6;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M515.83,23.23v73c0,14.5-2.24,25.24-6.84,32.82-5.92,10.15-16.2,15.32-30.53,15.32s-24.62-5.23-30.58-15.57c-4.56-7.64-6.79-18.42-6.79-32.92V23.23a4.51,4.51,0,0,1,4.51-4.51h2.28a4.51,4.51,0,0,1,4.51,4.51v72.5c0,33.53,14.88,37.4,26.07,37.4,12.14,0,26.08-4.17,26.08-36.71V23.23a4.51,4.51,0,0,1,4.51-4.51h2.27A4.51,4.51,0,0,1,515.83,23.23Z"/><path class="cls-1" d="M421.34,144.4H353.45c-2.35,0-4.72-1.88-4.72-6.08a8.32,8.32,0,0,1,1.33-4.49L410.39,29.36H360.8a4.51,4.51,0,0,1-4.51-4.5V23.28a4.51,4.51,0,0,1,4.48-4.51h.81c58.68-.11,59.11,0,59.66.07a5.19,5.19,0,0,1,4,5.8,8.74,8.74,0,0,1-1.32,3.75L363.33,133.17h58a4.51,4.51,0,0,1,4.51,4.51v2.21A4.51,4.51,0,0,1,421.34,144.4Z"/><path class="cls-1" d="M248.45,23.23v82.06c0,26-11.8,38.44-37.12,39.09h-.12a4.51,4.51,0,0,1-4.51-4.51V137.5a4.51,4.51,0,0,1,4.48-4.5c18.49-.15,26-8.23,26-27.9v-2.37a32.34,32.34,0,0,1-3.34,3.28c-6.39,5.5-14.5,8.29-24.07,8.29-22.86,0-35-12.41-35-35.89V23.23a4.52,4.52,0,0,1,4.51-4.51h2.22a4.52,4.52,0,0,1,4.5,4.51v55c0,7.6,1.82,14.22,5,18.18,3.57,4.56,9.17,6.49,18.75,6.49,10.13,0,17.32-3.76,22-11.5,3.61-5.92,5.43-13.66,5.43-23V23.23a4.52,4.52,0,0,1,4.51-4.51h2.22A4.52,4.52,0,0,1,248.45,23.23Z"/><path class="cls-1" d="M338.12,23.23v73c0,14.5-2.24,25.24-6.84,32.82-5.92,10.15-16.2,15.32-30.53,15.32s-24.62-5.23-30.58-15.57c-4.56-7.64-6.79-18.42-6.79-32.92V23.23a4.51,4.51,0,0,1,4.51-4.51h2.28a4.51,4.51,0,0,1,4.51,4.51v72.5c0,33.53,14.88,37.4,26.07,37.4,12.14,0,26.08-4.17,26.08-36.71V23.23a4.51,4.51,0,0,1,4.51-4.51h2.27A4.51,4.51,0,0,1,338.12,23.23Z"/><g id="g823"><g id="right"><g id="g827"><g id="g833"><path id="path835" class="cls-2" d="M81.56,32.62V163.11a65.25,65.25,0,0,0,0-130.49M94.3,46.91a52.54,52.54,0,0,1,0,101.91V46.91"/></g></g></g><g id="left"><g id="g839"><g id="g845"><path id="path847" class="cls-3" d="M65.24,0a65.25,65.25,0,0,0,0,130.49ZM52.5,14.29V116.2A52.52,52.52,0,0,1,28.12,28.12,52.16,52.16,0,0,1,52.5,14.29"/></g></g></g></g></g></g></svg>
|
||
</a>
|
||
|
||
<div class="burger navbar-burger is-dark" data-target="navMenu">
|
||
<span></span>
|
||
<span></span>
|
||
<span></span>
|
||
</div>
|
||
</div>
|
||
<div class="navbar-menu" id="navMenu">
|
||
<div class="navbar-start">
|
||
|
||
<a class="navbar-item px-lg" href="/entry">
|
||
Blog
|
||
</a>
|
||
|
||
<a class="navbar-item px-lg" href="/downloads">
|
||
Download
|
||
</a>
|
||
|
||
<a class="navbar-item px-lg" href="/wiki/faq">
|
||
FAQs
|
||
</a>
|
||
|
||
<a class="navbar-item px-lg" href="/game">
|
||
Compatibility
|
||
</a>
|
||
|
||
<a class="navbar-item px-lg" href="/screenshots">
|
||
Screenshots
|
||
</a>
|
||
|
||
<a class="navbar-item px-lg" href="https://www.patreon.com/yuzuteam">
|
||
Patreon
|
||
</a>
|
||
|
||
<a class="navbar-item px-lg" href="https://profile.yuzu-mirror.github.io">
|
||
Profile
|
||
</a>
|
||
|
||
|
||
<a class="navbar-item px-lg is-hidden-desktop" href="https://discord.gg/u77vRWY" target="_blank">
|
||
<i class="fab fa-discord mr-sm"></i> Discord
|
||
</a>
|
||
<a class="navbar-item px-lg is-hidden-desktop" href="https://twitter.com/yuzuemu" target="_blank">
|
||
<i class="fab fa-twitter mr-sm"></i> Twitter
|
||
</a>
|
||
<a class="navbar-item px-lg is-hidden-desktop" href="https://github.com/yuzu-mirror/yuzu" target="_blank">
|
||
<i class="fab fa-github mr-sm"></i> GitHub
|
||
</a>
|
||
</div>
|
||
|
||
<div class="navbar-end">
|
||
|
||
<a class="navbar-item px-lg is-hidden-touch" href="https://discord.gg/u77vRWY" target="_blank">
|
||
<span class="icon">
|
||
<i class="fab fa-2x fa-discord"></i>
|
||
</span>
|
||
</a>
|
||
<a class="navbar-item px-lg is-hidden-touch" href="https://twitter.com/yuzuemu" target="_blank">
|
||
<span class="icon">
|
||
<i class="fab fa-2x fa-twitter"></i>
|
||
</span>
|
||
</a>
|
||
<a class="navbar-item px-lg is-hidden-touch" href="https://github.com/yuzu-mirror/yuzu" target="_blank">
|
||
<span class="icon">
|
||
<i class="fab fa-2x fa-github"></i>
|
||
</span>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="mb-md blog-entry-header single" style="background-image: url('https://yuzu-mirror.github.io/entry/yuzu-nvdec-emulation/banner_hu60026cf240682e11b368f9e2f46cf794_1502585_1280x0_resize_q99_bgffffff_box_3.jpg');background-repeat:no-repeat;background-size:contain;background-position:center;"></div>
|
||
<div class="has-text-centered">
|
||
<div>
|
||
<span class="title px-md py-sm">New Feature Release - NVDEC emulation!</span>
|
||
</div>
|
||
|
||
|
||
<div>
|
||
<span class="h3 px-md py-sm">
|
||
Written by <a href="https://community.citra-emu.org/u/CaptV0rt3x/summary">CaptV0rt3x</a>
|
||
on September 29 2020
|
||
</span>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div class="container">
|
||
<div class="columns is-centered">
|
||
<div class="column is-four-fifths">
|
||
|
||
<section class="section content pt-sm">
|
||
<br>
|
||
<p>Hello, yuzu fans!
|
||
Tired of broken cutscenes and having to mash your controller buttons in hopes of skipping them? Well, look no further!
|
||
Thanks to the efforts of <a href="https://github.com/ameerj">epicboy</a>, yuzu can now play (most of) your favorite in-game cutscene videos.
|
||
Jump right in to find out more!</p>
|
||
<p>
|
||
|
||
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
|
||
<iframe src="https://www.youtube.com/embed/usvAZosD16o" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
|
||
</div>
|
||
</p>
|
||
<h1 id="nvdec---what-is-it">NVDEC - What is it?</h1>
|
||
<p>For a long time, one of the most noticeable missing features of yuzu was support for NVDEC. <br>
|
||
What is <a href="https://en.wikipedia.org/wiki/Nvidia_NVDEC">NVDEC</a>?
|
||
NVDEC stands for <strong>Nvidia Video Decoder</strong> and is a feature in Nvidia GPUs that performs video decoding.
|
||
And since the Switch has an Nvidia Tegra X1 SoC, it too makes use of its NVDEC module to offload all CPU intensive video decoding tasks to the GPU.</p>
|
||
<p>NVDEC supports video codecs like <code>MPEG-2</code>, <code>VC-1</code>, <code>H.264 (AVC)</code>, <code>H.265 (HEVC)</code>, <code>VP8</code>, and <code>VP9</code>, but Nintendo only exposes <code>H.264</code>, <code>H.265</code>, <code>VP8</code> and <code>VP9</code>.
|
||
Most games seem to use <code>H.264</code> because of its wide support and efficiency ratio.
|
||
But many first party games are known to use <code>VP9</code> too - eg. Super Smash Bros. Ultimate, Pokémon: Let’s Go, Pikachu/Eevee!</p>
|
||
<p>With NVDEC support, users no longer have to rely on old save files or crazy button mashing to bypass broken cutscenes.
|
||
Grab the latest yuzu Early Access build to try it out now!</p>
|
||
<p>
|
||
|
||
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
|
||
<iframe src="https://www.youtube.com/embed/XsXpxZE2rcc" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
|
||
</div>
|
||
|
||
</p>
|
||
<h1 id="development">Development</h1>
|
||
<p>The Switch uses NVDEC along with VIC (Video Image Composer) in the GPU for video decoding.
|
||
Games are exposed to higher level APIs by Nintendo which abstract the configuration of these modules.</p>
|
||
<p>NVDEC and VIC work together to decode incoming videos and the process usually goes like this:</p>
|
||
<pre><code>- Allocate memory
|
||
- Place encoded video frame data in known memory location
|
||
- Decode and place frame data into GPU memory
|
||
- Clear intermediary allocated memory
|
||
</code></pre>
|
||
<p>Although this seems fairly simple, implementing it was quite the task.
|
||
<a href="https://github.com/ameerj">epicboy</a> began working on this by implementing the service/command calls to NVDEC and VIC.
|
||
It was decided to use the <a href="https://github.com/FFmpeg/FFmpeg">FFmpeg</a> library to decode the frame data once we knew its codec (<code>H.264</code> or <code>VP9</code>).</p>
|
||
<p>
|
||
|
||
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
|
||
<iframe src="https://www.youtube.com/embed/EGDodmeKGWY" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
|
||
</div>
|
||
|
||
</p>
|
||
<h3 id="vp9">VP9</h3>
|
||
<p><code>VP9</code> was the biggest challenge as its decoding required knowledge on the different attributes of a specific frame.
|
||
Each frame carries two headers and raw frame data with it.
|
||
The headers contain the information as to which previous frame the current frame refers to or depends on.
|
||
Frames usually refer to previously decoded frames, along with transformations to be done on various parts of those, to compose new frames.
|
||
This is done in an effort to reduce the memory footprint of each frame.</p>
|
||
<p>Here is where things got complicated.
|
||
On the Switch, these headers are parsed by the Nvidia library in the games; therefore, NVDEC never receives this data.
|
||
But for us to decode the frames using FFmpeg, we need to provide it with the full frame - Two headers and raw frame data from NVDEC.
|
||
And since NVDEC hardware doesn’t expose all of the data of the two <code>VP9</code> headers, <a href="https://github.com/ameerj">epicboy</a> had to manually compose these headers from the provided information.</p>
|
||
<p><a href="https://github.com/ameerj">epicboy</a> took an interesting approach to this problem - he buffered two frames in advance.
|
||
As the frame data from NVDEC holds some data on previous frames, knowing two frames in advance was useful.
|
||
But this wasn’t sufficient as a few games resulted in issues with this approach.
|
||
We are currently researching these edge cases to properly fix it for all games.</p>
|
||
<p>
|
||
|
||
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
|
||
<iframe src="https://www.youtube.com/embed/xHYYntEB05o" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
|
||
</div>
|
||
|
||
</p>
|
||
<h3 id="h264">H.264</h3>
|
||
<p><code>H.264</code> was relatively easier compared to <code>VP9</code>.
|
||
Each <code>H.264</code> frame contains two headers and raw frame data with it.
|
||
Unlike <code>VP9</code>, <code>H.264</code> doesn’t have different headers for each frame but has same headers for entire video.</p>
|
||
<p><a href="https://github.com/ogniK5377">ogniK</a> had, long ago, already implemented <code>H.264</code> support in his experimental branch.
|
||
<a href="https://github.com/ameerj">epicboy</a> based his work off of <a href="https://github.com/ogniK5377">ogniK</a>’s and fixed a bug in it which caused distorted videos.
|
||
It turned out that <a href="https://github.com/ogniK5377">ogniK</a> was using incorrect dimensions when writing the pixel location.</p>
|
||
<p>Currently NVDEC operations are synchronous, but are asynchronous compatible.
|
||
This means that in the future, NVDEC operations can be made asynchronous thus yielding even better performance.
|
||
Also, thanks to the FFmpeg library, we have access to hardware acceleration for faster decoding.
|
||
And in the future, this will allow yuzu to offload video decoding to the host GPU (user’s GPU).</p>
|
||
<p>
|
||
|
||
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
|
||
<iframe src="https://www.youtube.com/embed/ImXim7BXl0E" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
|
||
</div>
|
||
|
||
</p>
|
||
<h3 id="vp8--h265">VP8 & H.265</h3>
|
||
<p>The Switch officially supports <code>VP8</code> and <code>H.265</code> too, along with <code>VP9</code> and <code>H.264</code>.
|
||
However, we are yet to see games make use of these codecs for in-game videos and hence support for these codecs remains unimplemented for now.</p>
|
||
<h1 id="testing">Testing</h1>
|
||
<p>As development work progressed, there were a lot of challenges and issues with games.
|
||
<strong>Link’s Awakening</strong>, for example, wasn’t providing the proper memory locations to write frame data to and
|
||
the NVDEC/VIC service/command calls were inaccurate as well.
|
||
This led to data corruption when we wrote frame data to wrong memory locations.</p>
|
||
<p>
|
||
|
||
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
|
||
<iframe src="https://www.youtube.com/embed/4Lz1NqZsYlA" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
|
||
</div>
|
||
|
||
</p>
|
||
<p><a href="https://github.com/ameerj">epicboy</a> and our testers spent tens of hours testing various games in yuzu to make sure any minor issues were ironed out.
|
||
This rigorous testing also brought to our attention more games that exhibit weird edge cases.
|
||
Over the next couple of weeks, we plan to fix these bugs and make our decoding even more accurate.</p>
|
||
<p>Huge shoutout to our testers for testing and compiling these lists.</p>
|
||
<article class="message">
|
||
<div class="message-header is-dropdown">
|
||
<p>Games that work</p>
|
||
|
||
<span class="icon">
|
||
<i class="fas fa-lg fa-arrow-circle-down"></i>
|
||
</span>
|
||
</div>
|
||
<div class="message-body is-dropdown-target">
|
||
<p>The following games were tested by our team and work well with minor occasional glitches:</p>
|
||
<ul>
|
||
<li>1-2-Switch</li>
|
||
<li>AI: The Somnium Files</li>
|
||
<li>Animal Crossing: New Horizons</li>
|
||
<li>Attack on Titan 2</li>
|
||
<li>Atelier Ryza: Ever Darkness & the Secret Hideout</li>
|
||
<li>Bloodstained: Ritual of the Night</li>
|
||
<li>Bulletstorm</li>
|
||
<li>Children of Morta</li>
|
||
<li>Dark Souls Remastered</li>
|
||
<li>Deadly Premonition Origins</li>
|
||
<li>Devil May Cry</li>
|
||
<li>Devil May Cry 2</li>
|
||
<li>Devil May Cry 3</li>
|
||
<li>Disgaea 5 Complete</li>
|
||
<li>Donkey Kong Country: Tropical Freeze</li>
|
||
<li>Dragon’s Dogma</li>
|
||
<li>Dragon Quest Builders</li>
|
||
<li>Dragon Quest XI:S</li>
|
||
<li>Dragons: Dawn Of New Riders</li>
|
||
<li>Fairy Tail</li>
|
||
<li>Final Fantasy IX</li>
|
||
<li>Fire Emblem: Three Houses</li>
|
||
<li>Fire Emblem Warriors</li>
|
||
<li>Go Vacation</li>
|
||
<li>Hollow Knight</li>
|
||
<li>Huntdown</li>
|
||
<li>Hyrule Warriors: Definitive Edition</li>
|
||
<li>Indivisible</li>
|
||
<li>Just Dance 2020</li>
|
||
<li>Kirby Star Allies</li>
|
||
<li>LEGO City Undercover</li>
|
||
<li>Mario Kart 8 Deluxe</li>
|
||
<li>Marvel Ultimate Alliance</li>
|
||
<li>Monster Boy and the Cursed Kingdom</li>
|
||
<li>ŌKAMI HD</li>
|
||
<li>Paper Mario: The Origami King</li>
|
||
<li>Pokkén Tournament DX</li>
|
||
<li>Psyvariar Delta</li>
|
||
<li>Resident Evil</li>
|
||
<li>Resident Evil 0</li>
|
||
<li>Resident Evil 4</li>
|
||
<li>Resident Evil 5</li>
|
||
<li>Resident Evil 6</li>
|
||
<li>Resident Evil Revelations</li>
|
||
<li>Resident Evil Revelations 2</li>
|
||
<li>Ring Fit Adventure</li>
|
||
<li>Rune Factory 4 Special</li>
|
||
<li>Shantae and the Seven Sirens</li>
|
||
<li>Star Ocean First Departure R</li>
|
||
<li>Steins;Gate Elite</li>
|
||
<li>Super Mario 3D All-Stars</li>
|
||
<li>Super Mario Odyssey</li>
|
||
<li>Super Smash Bros. Ultimate</li>
|
||
<li>TLOZ - Breath of the Wild</li>
|
||
<li>Tokyo Mirage Sessions #FE Encore</li>
|
||
<li>Trials of Mana</li>
|
||
<li>Xenoblade Chronicles Definitive Edition</li>
|
||
<li>Yu-Gi-Oh: Legacy of the Duelist</li>
|
||
</ul>
|
||
|
||
</div>
|
||
</article>
|
||
|
||
<article class="message">
|
||
<div class="message-header is-dropdown">
|
||
<p>Games with known issues</p>
|
||
|
||
<span class="icon">
|
||
<i class="fas fa-lg fa-arrow-circle-down"></i>
|
||
</span>
|
||
</div>
|
||
<div class="message-body is-dropdown-target">
|
||
<p>The following games are known to have issues, and we are actively working on fixing them:</p>
|
||
<ul>
|
||
<li>Alien: Isolation</li>
|
||
<li>Ni no Kuni: Wrath of the White Witch</li>
|
||
<li>Onimusha: Warlords</li>
|
||
<li>Persona 5 Scramble</li>
|
||
<li>Resident Evil 0</li>
|
||
<li>TLOZ: Link’s Awakening</li>
|
||
<li>The Legend of Heroes: Trails of Cold Steel III</li>
|
||
<li>Final Fantasy VIII Remastered</li>
|
||
<li>Pokémon Let’s Go</li>
|
||
<li>Pokémon Sword</li>
|
||
</ul>
|
||
|
||
</div>
|
||
</article>
|
||
|
||
<h1 id="fin">Fin</h1>
|
||
<p>As always, we would like to remind users that the features released on Early Access are still being worked on.
|
||
Hence not all games might behave in the way we want them to.
|
||
If you come across more games (other than the ones mentioned above) that encounter bugs or issues, feel free to
|
||
reach out to us on our <a href="https://discord.com/invite/u77vRWY">Discord server</a> and share your findings.</p>
|
||
<p>See you next time, <br>
|
||
- yuzu development team!</p>
|
||
<p>
|
||
<h4 style="text-align:center;">
|
||
<b>Please consider supporting us on <a href="https://www.patreon.com/yuzuteam">Patreon</a>!<br>
|
||
If you would like to contribute to this project, check out our <a href="https://github.com/yuzu-emu/yuzu">GitHub</a>!</b>
|
||
</h4>
|
||
</p>
|
||
</section>
|
||
|
||
|
||
<div class="has-text-centered">
|
||
<a class="pagination-next" href="https://community.citra-emu.org/t/309130">Continue the discussion on our forums.</a>
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
<div class="column">
|
||
|
||
|
||
<div class="px-md">
|
||
|
||
<ins class="adsbygoogle"
|
||
style="display:block; margin-left:25px;"
|
||
data-ad-client="ca-pub-4126545610079023"
|
||
data-ad-slot="6276099127"
|
||
data-ad-format="auto"></ins>
|
||
<br>
|
||
<p class="is-size-6 has-text-centered">Advertisement</p>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="column">
|
||
|
||
|
||
<div class="px-md has-text-centered">
|
||
<p class="is-size-6 has-text-centered">Advertisement</p>
|
||
<br>
|
||
<ins class="adsbygoogle" style="display:inline-block;width:728px;height:100px" data-ad-client="ca-pub-4126545610079023" data-ad-slot="1038554045"></ins>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="container">
|
||
<footer class="footer">
|
||
<div class="content has-text-centered">
|
||
copyright © 2025 yuzu emulator team
|
||
</div>
|
||
</footer>
|
||
</div>
|
||
|
||
|
||
<script src="https://yuzu-mirror.github.io/js/script.min.js"></script>
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.11.1/baguetteBox.min.js" type="text/javascript"></script>
|
||
|
||
<script type="text/javascript">
|
||
window.addEventListener("DOMContentLoaded", function() {
|
||
baguetteBox.run('.is-img-preview');
|
||
});
|
||
</script>
|
||
|
||
<script type="text/javascript">
|
||
for (var i = 0; i < document.getElementsByClassName('adsbygoogle').length; i++) {
|
||
(adsbygoogle = window.adsbygoogle || []).push({});
|
||
}
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|