suyu-website/entry/yuzu-progress-report-sep-2020/index.html

489 lines
30 KiB
HTML
Raw Permalink Normal View History

<!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="Progress Report September 2020 &middot; yuzu" />
<meta property="og:site_name" content="yuzu" />
<meta property="og:url" content="https://yuzu-mirror.github.io/entry/yuzu-progress-report-sep-2020/" />
<meta property="og:description" content="Greetings yuz-ers! Welcome to September&rsquo;s progress report. This month we offer you the joy of motion, video playback, more input fixes and additions, small Vulkan improvements, and the initial groundwork needed to get Super Mario 3D All-Stars playable." />
<meta name="description" content="Greetings yuz-ers! Welcome to September&rsquo;s progress report. This month we offer you the joy of motion, video playback, more input fixes and additions, small Vulkan improvements, and the initial groundwork needed to get Super Mario 3D All-Stars playable." />
<meta property="og:type" content="article" />
<meta property="og:image" content="https://yuzu-mirror.github.io/entry/yuzu-progress-report-sep-2020/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-progress-report-sep-2020/">
<title>Progress Report September 2020 - 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-progress-report-sep-2020/banner_hu37034ae2408897bc81b7626f1317beae_4780526_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">Progress Report September 2020</span>
</div>
<div>
<p class="h3 px-md py-sm">
Written by <a href="https://community.citra-emu.org/u/Honghoa/summary">Honghoa</a>
and <a href="https://community.citra-emu.org/u/GoldenX86/summary">GoldenX86</a>
on September 30 2020
</p>
</div>
</div>
<div class="container">
<div class="columns is-centered">
<div class="column is-four-fifths">
<section class="section content pt-sm">
<br>
<p>Greetings yuz-ers! Welcome to September&rsquo;s progress report. This month we offer you the joy of motion, video playback, more input fixes and additions, small Vulkan improvements, and the initial groundwork needed to get Super Mario 3D All-Stars playable.</p>
<h2 id="ya-like-to-move-it">Ya like to (move it!)</h2>
<p>Many popular Nintendo Switch titles have mechanics designed with motion controls in mind, so naturally this was a long-awaited feature that a lot of people wanted to see implemented in yuzu. We are very happy to announce that, thanks to the efforts of the developer <a href="https://github.com/german77">german77</a>, it is now possible to <a href="https://github.com/yuzu-emu/yuzu/pull/4594">use any controller that supports motion sensing</a> and play these games the way they were meant to be played. Just be careful not to hit anything when you shake it!</p>
<div class="columns is-img-preview">
<div class="column has-text-centered">
<video preload="auto" autoplay="autoplay" muted="muted" loop="loop" webkit-playsinline="">
<source src="./motion1.mp4" type="video/mp4">
Your browser doesn't support mp4 video. :(
</video>
<p class="has-text-centered is-italic has-text-grey-light"> Functional Motion Input (&#39;A SixAxis tester by German77&#39;, a homebrew application).</p>
</div>
</div>
<p>This feature&rsquo;s development began back in July, when german77 was working on the implementation of a <a href="https://github.com/yuzu-emu/yuzu/pull/4411">native Joy-Con adapter for yuzu</a> (a task still in the works). While he was analyzing the data sent by the controllers, he realized he could read the values reported by the accelerometer and the gyroscope as well. Feeling curious about what could be done with this knowledge, he experimented with implementing new inputs and feeding them the output from these sensors. The result was quite satisfactory: not only did this work, but it became the main motivation to investigate and implement motion controls the same way they work on the Switch.</p>
<p>german77 was aware of a previously discontinued <a href="https://github.com/yuzu-emu/yuzu/pull/3882">PR for motion</a> by <a href="https://github.com/anirudhb">anirudhb</a> and decided the best course of action would be to take it from there, fix any incompatibilities, and sort out the subsequent bugs introduced. As he ironed out the implementation, he tested how it performed with the game <code>Captain Toad: Treasure Tracker</code>. The results this time, however, were far from satisfactory. Controls felt unnatural and responded quite differently compared to the Switch, indicating an error in how the values sent by the controllers were processed. To better understand the problem, german77 developed two homebrew applications to identify and fix these inaccuracies.</p>
<p>After a long period of extensive testing, and with the help of <a href="https://github.com/theboy181">theboy181</a> (who focused on testing the feature on different games), german77 finally realized the problem laid in the implementation&rsquo;s logic: there was an error transforming a <a href="https://en.wikipedia.org/wiki/Quaternion">quaternion</a> into a <a href="https://en.wikipedia.org/wiki/Rotation_matrix">rotation matrix</a>. For the people allergic to math, you can think of a quaternion as a system to describe orientations and rotations in a 3D space, and a rotation matrix as a &ldquo;translation&rdquo; from a quaternion to a familiar (x, y, z) Cartesian coordinate. Thankfully, once this error was fixed, almost all the games that showed problems started to work flawlessly!</p>
<div class="columns is-img-preview">
<div class="column has-text-centered">
<video preload="auto" autoplay="autoplay" muted="muted" loop="loop" webkit-playsinline="">
<source src="./motion2.mp4" type="video/mp4">
Your browser doesn't support mp4 video. :(
</video>
<p class="has-text-centered is-italic has-text-grey-light"> </p>
</div>
</div>
<div class="columns is-img-preview">
<div class="column has-text-centered">
<video preload="auto" autoplay="autoplay" muted="muted" loop="loop" webkit-playsinline="">
<source src="./motion3.mp4" type="video/mp4">
Your browser doesn't support mp4 video. :(
</video>
<p class="has-text-centered is-italic has-text-grey-light"> Motion in action. Top: &#39;Super Mario Odyssey&#39;, bottom: &#39;The Legend of Zelda: Breath of the Wild&#39;.</p>
</div>
</div>
<p>Motion controls currently work with Wiimotes, Joy-Cons, Pro Controllers, DualShock 4 Wireless Controllers, and even cellphones (provided they have an accelerometer and a gyroscope). To bridge these devices to yuzu, the implementation makes use of the DSU protocol (also known as &ldquo;CemuHook UDP&rdquo;), so users need to utilize <a href="https://github.com/Davidobot/BetterJoy">BetterJoy</a> (for Nintendo controllers), <a href="http://ds4windows.com/">ds4windows</a> (for Sony controllers), or any app that supports CemuHook for cellphones or other compatible devices. You can check <a href="https://wiki.cemu.info/wiki/Motion_Controls">this guide</a> for more information regarding how to set up your controller. Make sure to try it out!</p>
<p>Bear in mind that devices such as generic copies of official Nintendo or Sony controllers may work, although it&rsquo;s not guaranteed. Needless to say, no matter how hard you shake your keyboard and mouse, that&rsquo;s not going to work, so please don&rsquo;t do it!</p>
<h2 id="i-have-no-motion-and-i-must-shake">I have no motion, and I must shake</h2>
<p>If your favorite controller has no support for motion controls (such as Xbox controllers), don&rsquo;t worry, not everything is lost. After implementing functional motion controls, <a href="https://github.com/german77">german77</a> also made this follow-up PR to <a href="https://github.com/yuzu-emu/yuzu/pull/4677">implement a button to simulate a shake</a>. This will allow you to configure any key of your liking to work as if you were physically swinging your controller and activating the in-game motion mechanics.</p>
<p>While this should work with games such as <code>Super Mario Odyssey</code> and others, do note it won&rsquo;t be able to cover all cases or titles. Every game is different, and the required input is not always just a shake.</p>
<h2 id="remember-the-rumble-pak">Remember the Rumble Pak?</h2>
<p>Also thanks to <a href="https://github.com/german77">german77</a>, yuzu can now proudly boast <a href="https://github.com/yuzu-emu/yuzu/pull/4291">Rumble support</a>. Any SDL2 compatible device will vibrate when asked by your Switch games. This includes but is not limited to: DualShock, Xbox, and Nintendo controllers.</p>
<p>HD Rumble is not possible, yet. The SDL2 specification is incompatible, and not everyone will play with Nintendo peripherals. This means that a Pro Controller or a pair of Joy-Cons cannot reach the same level of precision as the Switch. Additionally, some games seem to use different ways to ask for rumble and are not supported yet. We are investigating this.</p>
<p>Soon, german77 has plans to add native Joy-Con pairing support. This will allow for real HD Rumble compatibility.</p>
<h2 id="video-decoding-or-how-to-suffer-for-so-long-with-a-single-codec">Video decoding, or how to suffer for so long with a single codec</h2>
<p>It&rsquo;s finally here! After such a long wait, and thanks to the work from <a href="https://github.com/ogniK5377">ogniK</a> and <a href="https://github.com/ameerj">epicboy</a>, <a href="https://github.com/yuzu-emu/yuzu/pull/4729">yuzu can now play videos in-game!</a> For now, only <code>H.264</code> and <code>VP9</code> videos are supported, which thankfully seems to cover all released games until now. Support for <code>H.265</code> and <code>VP8</code> will come later.</p>
<div class="columns is-img-preview">
<div class="column has-text-centered">
<video preload="auto" autoplay="autoplay" muted="muted" loop="loop" webkit-playsinline="">
<source src="./mk8.mp4" type="video/mp4">
Your browser doesn't support mp4 video. :(
</video>
<p class="has-text-centered is-italic has-text-grey-light"> Video Killed the Radio Star (Mario Kart 8 Deluxe)</p>
</div>
</div>
<p>This is possible by using <a href="https://ffmpeg.org/">FFmpeg.</a> For now, decoding happens in a single CPU thread, and support for multiple threads and GPU decoding is currently being worked on.</p>
<p>We have an entire article dedicated to showing how this feature came to be, how it works, its challenges, and current limitations in more detail <a href="https://yuzu-mirror.github.io/entry/yuzu-nvdec-emulation/">here.</a> Please take your time to read it: it also includes a list of games confirmed working and not-so-working yet.</p>
<h2 id="an-emulator-inside-an-emulator">An emulator inside an emulator</h2>
<p><code>Super Mario 3D All-Stars</code> is a special case in several aspects. For starters, the game is just a container for several other binary executables (known as <code>Program NCAs</code>), each one with their own Title ID. Step one to get this game to boot is <a href="https://github.com/yuzu-emu/yuzu/pull/4675">to correctly handle these multi-content games</a>, a job <a href="https://github.com/Morph1984">Morph</a> did.</p>
<p>Good, finished, right? Wrong. Turns out, handling several integrated programs with different title IDs will make XCI game dumps conflict, as they include games and even firmware updates to account for users without internet access. <a href="https://github.com/Morph1984">Morph</a> also <a href="https://github.com/yuzu-emu/yuzu/pull/4710">had to add checks for cases like this.</a></p>
<p>Next step, unimplemented functions. <a href="https://github.com/Morph1984">Morph</a> did a <a href="https://github.com/yuzu-emu/yuzu/pull/4678">partial implementation of <code>LoadOpenContext</code></a>, a function that several collections games use. Some examples are <code>Clubhouse Games: 51 Worldwide Classics</code>, <code>Grandia HD Collection</code>, <code>XCOM 2 Collection</code>, <code>Baldur's Gate I and II</code>, <code>Dr Kawashima's Brain Training</code>, and of course <code>Super Mario 3D All-Stars</code>.</p>
<p>Similarly, <a href="https://github.com/yuzu-emu/yuzu/pull/4676"><code>GetPreviousProgramIndex</code> needed to be stubbed</a>. The result is getting the game-selector/menu working.</p>
<div class="columns is-img-preview">
<div class="column has-text-centered">
<a href="./menu.png" title=" For now, just the menu and soundtrack sections! (Super Mario 3D All-Stars)">
<img src="https://yuzu-mirror.github.io/entry/yuzu-progress-report-sep-2020/menu_huc4ea349968606ca682e6c5579c4fa352_3649568_1024x0_resize_q90_bgffffff_box_3.jpg" alt=" For now, just the menu and soundtrack sections! (Super Mario 3D All-Stars)"></a>
<p class="has-text-centered is-italic has-text-grey-light"> For now, just the menu and soundtrack sections! (Super Mario 3D All-Stars)</p>
</div>
</div>
<h2 id="vulkan-changes">Vulkan changes</h2>
<p><code>VK_KHR_timeline_semaphore</code> is a relatively recent Vulkan extension only supported by <em>desktop or laptop</em> GPUs. In the past, resources were being assigned with <code>VkFence</code> and freed when arbitrarily asked, leading to a possible small pileup. With <code>VK_KHR_timeline_semaphore</code>, each resource is tied to a periodically checked &ldquo;GPU tick,&rdquo; and you only need to verify on which tick you are at the moment to know if that resource is now free.</p>
<div class="columns is-img-preview">
<div class="column has-text-centered">
<a href="./vk.png" title=" Our implementation is not that complex. This is just an example provided by Khronos">
<img src="https://yuzu-mirror.github.io/entry/yuzu-progress-report-sep-2020/vk_hu9b4ec87ce1d165ee0384e4e55e2af75c_68977_1006x0_resize_q90_bgffffff_box_3.jpg" alt=" Our implementation is not that complex. This is just an example provided by Khronos"></a>
<p class="has-text-centered is-italic has-text-grey-light"> Our implementation is not that complex. This is just an example provided by Khronos</p>
</div>
</div>
<p><a href="https://github.com/yuzu-emu/yuzu/pull/4674">Adding support for timeline semaphores in yuzu</a> helps simplify the code a lot, improves VRAM use a small amount, and paves the way for the finalization of the <code>Texture Cache rewrite</code>. Thank you, <a href="https://github.com/ReinUsesLisp">Rodrigo</a>, for its addition! The result should be transparent for the user with no perceptible change besides a bit of VRAM savings.</p>
<h2 id="bug-fixes-and-improvements">Bug fixes and improvements</h2>
<p>A missing feature in the input rewrite was the ability to merge two separate single left and right Joy-Cons into a single dual Joy-Con, a function <code>Super Mario Odyssey</code> needs. <a href="https://github.com/Morph1984">Morph</a> <a href="https://github.com/yuzu-emu/yuzu/pull/4629">implemented <code>MergeSingleJoyasDualJoy</code></a>, so this is no longer a problem for Mario. He can return to work once again for nothing. Thirty-nine years and no rewards for the best hero the Mushroom Kingdom ever saw.</p>
<p>A small PSA for our Linux users, the <a href="https://github.com/yuzu-emu/yuzu/pull/4638">required Qt version has been raised to <code>5.12.8</code></a> now. Thanks <a href="https://github.com/Morph1984">Morph</a> for the update! We need those new Plasma functions.</p>
<p>Users have been reporting input latency, so <a href="https://github.com/FearlessTobi">Tobi</a> decided to <a href="https://github.com/yuzu-emu/yuzu/pull/4643">test some changes</a> and see if the situation improves. To further mitigate this issue if you experience it, be sure to enable <code>Radeon Anti-Lag</code> or <code>Nvidia Ultra-Low Latency</code> in your respective driver control panel. Nothing makes you ragequit more than losing in Smash due to lag.</p>
<p><a href="https://github.com/yuzu-emu/yuzu/pull/4618">Gamecube controllers will now be autoconfigured!</a> Thanks to work done by <a href="https://github.com/german77">german77</a>, Gamecube Adapter controllers will show up as devices in the input window, and their buttons will be mapped automatically. Laziness is the best.</p>
<p><code>Clubhouse Games: 51 Worldwide Classics</code> now manages to boot and, with a save, load the board games. <a href="https://github.com/Morph1984">Morph</a> managed this by <a href="https://github.com/yuzu-emu/yuzu/pull/4683">implementing the <code>Get/SetNpadHandheldActivationMode</code> functions</a>. However, the game will still render almost everything in black, so don&rsquo;t consider it playable yet.</p>
<div class="columns is-img-preview is-bottom-marginless">
<div class="column is-bottom-paddingless">
<a href="./51a.png" title="">
<img src="https://yuzu-mirror.github.io/entry/yuzu-progress-report-sep-2020/51a_hu449afde6e02898c03be3f1f13c986bb8_122163_800x0_resize_q90_bgffffff_box_3.jpg" alt="Paint it all black (Clubhouse Games: 51 Worldwide Classics)"></a>
</div>
<div class="column is-bottom-paddingless">
<a href="./51b.png" title="">
<img src="https://yuzu-mirror.github.io/entry/yuzu-progress-report-sep-2020/51b_hua4a12870f859aa635356b119d08d1a10_158875_800x0_resize_q90_bgffffff_box_3.jpg" alt="Paint it all black (Clubhouse Games: 51 Worldwide Classics)"></a>
</div>
</div>
<p class="has-text-centered is-italic has-text-grey-light">Paint it all black (Clubhouse Games: 51 Worldwide Classics)</p>
<p>If you ran a game in fullscreen and a pop-up needed to display (for example, naming a character), it used to render behind the main yuzu window, forcing you to exit fullscreen, focus the pop-up, complete the action, and then continue with your game. Quite annoying indeed. <a href="https://github.com/Morph1984">Morph</a> is our savior for this one, by <a href="https://github.com/yuzu-emu/yuzu/pull/4728">using the <code>Qt::WindowStaysOnTopHint</code> flag</a>, the pop-ups will now display on top of your game. Thanks a lot, poyo.</p>
<h2 id="gpu-vendor-specific-fixes-and-changes">GPU vendor specific fixes and changes</h2>
<p>Recent Nvidia Geforce drivers (past the 446.14 version) introduced a performance regression mainly affecting <code>Paper Mario: The Origami King</code> and <code>Super Smash Bros. Ultimate's</code> menus, important enough that we had to recommend our users to stay on older driver versions until we could figure out what was going on. Turns out, the new drivers don&rsquo;t seem to like how Qt handles VSync, so <a href="https://github.com/ReinUsesLisp">Rodrigo</a> fixed it by <a href="https://github.com/yuzu-emu/yuzu/pull/4692">calling <code>SwapBuffers</code> from the emulation thread</a>. This change means that Nvidia users are free to use the latest driver version without fearing low framerates.</p>
<div class="columns is-img-preview is-bottom-marginless">
<div class="column is-bottom-paddingless">
<video preload="auto" autoplay="autoplay" muted="muted" loop="loop" webkit-playsinline="">
<source src="./SSBU-broken.mp4" type="video/mp4">
Your browser doesn't support mp4 video. :(
</video>
</div>
<div class="column is-bottom-paddingless">
<video preload="auto" autoplay="autoplay" muted="muted" loop="loop" webkit-playsinline="">
<source src="./SSBU-fixed.mp4" type="video/mp4">
Your browser doesn't support mp4 video. :(
</video>
</div>
</div>
<p class="has-text-centered is-italic has-text-grey-light">Just in time for Ampere, eh! Good luck getting one for now (Super Smash Bros. Ultimate)</p>
<p>As mentioned in <a href="https://yuzu-mirror.github.io/entry/yuzu-progress-report-jul-2020/">July&rsquo;s progress report</a>, <a href="https://github.com/lat9nq">toastUnlimited</a> continued to work on solving crashes only experienced with recent Nvidia Vulkan drivers in Linux. Thanks to work done by DXVK, <a href="https://github.com/yuzu-emu/yuzu/pull/4724">toast&rsquo;s current implementation aims to be global</a>, and so far we haven&rsquo;t got any report on getting the issue or any sort of regression. Please feel free to contact us if you are still affected by this issue.</p>
<p>Not a fix in yuzu&rsquo;s code, but in fact a fix AMD implemented in their drivers. As mentioned in the previous <a href="https://yuzu-mirror.github.io/entry/yuzu-progress-report-aug-2020/">August progress report</a>, <code>VK_EXT_extended_dynamic_state</code> was giving problems on the AMD Vulkan Windows driver. This has been fixed in the latest 20.9.2 driver version, allowing <a href="https://github.com/goldenx86">yours truly</a> to <a href="https://github.com/yuzu-emu/yuzu/pull/4735">remove the previously needed blacklisting.</a> No more nightmares when playing <code>Super Mario Odyssey</code>.</p>
<h2 id="future-projects">Future projects</h2>
<p>Not much information can be given right now, but you all should know that <a href="https://www.youtube.com/watch?v=zHalXjs0cDA">Raptor</a> is advancing at a very impressive speed. Our devs are so preoccupied with whether they can, they don&rsquo;t stop to think if they should.</p>
<p>That&rsquo;s all she wrote, folks! See you next time in the October progress report!</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/310318">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 &copy; 2024 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>