Skip to content
This repository has been archived by the owner on Mar 4, 2024. It is now read-only.

jul23 draft #368

Merged
merged 15 commits into from
Aug 13, 2023
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
201 changes: 201 additions & 0 deletions site/content/entry/yuzu-progress-report-jul-2023/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
+++
date = "2023-08-06T06:45:00+05:30"
title = "Progress Report July 2023"
author = "CaptV0rt3x"
coauthor = "GoldenX86"
forum = 0
+++

Hey there yuz-ers!
Welcome back to our monthly report on all the improved features, performance gains, and bug fixes we made.
Let's jump right in!
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

<!--more-->

## Aliens and ghosts are real! And they run on Unreal Engine
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

The wait was long but worth it, another game in the charming Pikmin franchise is finally arriving on Earth, just in time to join the wave of UFO declarations!
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

{{< imgs
"./pk1.png| Imagine a cross-over with Toy Story, it would explain The Claw! (Pikmin 4)"
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
>}}

This time, `Pikmin 4` decided to use Unreal Engine 4, which guarantees good performance and quality on the Switch.
This engine also guarantees headaches implementing its particular interest in sparse textures and the stability problems it introduces to NVIDIA GPU users running Vulkan, as previous Unreal Engine 4 games have demonstrated.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

As you can expect, there’s a lot of work to do to improve compatibility on games running this particular popular engine.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

[byte[]](https://github.com/liamwhite) took the first blow, by finding which part of the texture cache code caused a regression {{< gh-hovercard "11093" "affecting stability" >}} strong enough to cause device losses (the driver cutting off the GPU from rendering, resulting in an emulator crash) on NVIDIA GPUs.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

{{< imgs
"./pk2.png| Moss seems tired (Pikmin 4)"
>}}

[emufan](https://github.com/GPUCode) followed up, he identified that hardcoding the total number of texture buffers to `16` was causing crashes in some Unreal Engine 4 games and {{< gh-hovercard "11098" "bumped up the count" >}} to `32`.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

{{< single-title-imgs
"Good thing this game didn't cross paths with Pikmin (Master Detective Archives: RAIN CODE)"
"./rain1.png"
"./rain2.png"
>}}

This not only has helped `Pikmin 4 but also `Master Detective Archives: RAIN CODE`, another recent release using this same engine.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

{{< imgs
"./rain3.png| Yeah, good name for a train, I'll board it in Dracula Station (Master Detective Archives: RAIN CODE)"
>}}
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

# Per-game configurations - Reimagined!

If you're not a new yuz-er, it is very likely that you've seen and used per-game configurations.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
But incase you haven't yet, per-game configurations are a way to set game specific settings without having to redo your settings for every game you start.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
Imagine if few games require GPU accuracy to be "HIGH" instead of "NORMAL" or if some games work best with "OpenGL" over "Vulkan", with per-game configurations you can easily override these specific settings for just those games.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

So, what's new, you ask?
The brains behind this feature's implementation and our trusty slice of toast, [toastUnlimited](https://github.com/lat9nq/), started working towards a future where yuzu could essentially download a game-specific configuration file, that was curated by the community, and then instantly apply those settings.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
Thus users obtaining the optimal settings for any game without having to tinker with the several configuration options we have today.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

Sounds exciting, right? Heck yeah!
While toast was finalizing his designs, he quickly ran into a road-block of his own design that is our current per-game configuration system.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
The existing system's design made it difficult to programmatically define and override each setting in multiple places across yuzu's backend and frontend systems.

toast decided to take the challenge head-on and {{< gh-hovercard "10839" "rewrote the entire settings backend" >}} to improve it while making it programmatically easier to define and implement any setting.
Thanks to these changes, developers now only need to write out the UI text for a setting and the system will do the rest (reading, writing, representing in the UI, resetting global state).
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

This also had the benefit of providing the perfect timeframe to rework several parts of the global settings UI!
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
For example, System settings now includes `Multicore CPU Emulation` support, all three possible values for `Memory Layout`, and `Limit Speed Percent`.

{{< single-title-imgs-compare
"Important changes to System settings"
"./systembug.png"
"./systemfix.png"
>}}
&nbsp;

The Graphics section also got its fair share of changes.
Besides reorganizing the different options, the new `ASTC Decoding Method` option now lists our 3 different alternatives for handling that pesky ASTC format, CPU, GPU, and asynchronous CPU decoding.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

{{< single-title-imgs-compare
"Graphics settings also got some love"
"./gpubug.png"
"./gpufix.png"
>}}

And more!
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

But enough of the global settings, toast also changed how per-game configurations are also updated, they will now show an X button on the right of each setting if they were modified over the global value, allowing to quickly revert them if needed.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

{{< single-title-imgs-compare
"Graphics settings also got some love"
"./custombug.png"
"./customfix.png"
>}}

Keep your eyes open for follow-up changes that will build on top of this foundation!
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

# Graphics Changes
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

[Maide](https://github.com/Kelebek1) continued his efforts on improving performance through optimizations and {{< gh-hovercard "10996" "his latest changes further optimize" >}} one of his {{< gh-hovercard "10457" "earlier optimizations." >}}
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
While the original changes aimed to reduce memory allocations while copying data from guest to host (User's PC), the latest changes remove data copying entirely, resulting in nearly 10% performance boost in parts of `Super Mario Odyssey` like the Metro Kingdom area, and `Xenoblade Chronicles: Definitive Edition` reporting similar gains.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

[byte[]'s](https://github.com/liamwhite) {{< gh-hovercard "11136" "latest fix" >}} significantly improves the slowest shader compilation in `Splatoon 3` with time taken reduced from `30 seconds` to about `4 seconds`.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
A {{< gh-hovercard "10583" "recent change to our texture cache's `AccelerateDMA` logic" >}} was identified to have been causing device losses and {{< gh-hovercard "10993" "has been since been reverted." >}}

{{< imgs
"./sp3.png| She calls it Sasha (Splatoon 3)"
>}}

# Input Changes

[German77](https://github.com/german77) continued his reverse engineering of the Switch NFC service and {{< gh-hovercard "11096" "improved yuzu's code accuracy" >}}.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
He also fixed a bug which caused users' mouse to stop working after some time, by avoiding an accidental division by zero.

Newcomer [SuperSamus's](https://github.com/SuperSamus) first contribution to yuzu was to {{< gh-hovercard "11050" "fix how button mapping was being handled within yuzu." >}}
With these changes, it's now possible to share the same mappings between Nintendo and non-Nintendo controllers. Thank you!

Note: This change **BREAKS** controller configurations for those using Nintendo controllers without the direct driver.

# Android Changes
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

[bunnei](https://github.com/bunnei/) implemented changes to {{< gh-hovercard "11017" "fix an issue where Turnip drivers would fail" >}} on certain Snapdragon devices, and added checks for broken Qualcomm 7xx drivers.
This means any Snapdragon user should be able to run Turnip drivers now, links will be provided in the Hardware section later in this article.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

[t895](https://github.com/t895) {{< gh-hovercard "11067" "disabled yuzu from asking to save user data on uninstall," >}} which could cause issues when users attempted to use different APK versions.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

t895 also {{< gh-hovercard "11070" "added some help text messages" >}} to inform users why certain buttons were disabled on some devices but not others.
The most common case is Mali or Xclipse users trying to install custom drivers, a feature that is only available and possible to Adreno users, at least for now.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

CaptV0rt3x marked this conversation as resolved.
Show resolved Hide resolved
{{< imgs
"./mali.png| Abstract art generator (Hyrule Warriors: Age of Calamity)"
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
>}}

# Miscellaneous changes

Apart from the ones highlighted above, there have also been several smaller changes:
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

[FearlessTobi](https://github.com/FearlessTobi) added {{< gh-hovercard "11047" "detection for compressed and sparse NCAs within yuzu's filesystem." >}} Instead of failing silently, yuzu will now log this info and abort the parsing.

toast added a {{< gh-hovercard "11042" "new Linux build script which added the libraries required to enable `Wayland` support" >}} on our official AppImage releases.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

Not ending there, toast {{< gh-hovercard "11186" "fixed a memory leak with the new timezone data generator," >}} which happened when games tried to ask for timezone information too many times.
This was resolved by keeping track of the generated timezone binary instead of recreating it repeatedly.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

And toast also {{< gh-hovercard "11030" "bypassed a MSVC build crash on `Windows version 10 1809 LTSC` with the new timezone binary changes," >}} by temporarily disabling this for MSVC until there is a solution from Microsoft.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
The reason, for those interested, is [documented here](https://github.com/microsoft/STL/issues/3853#issuecomment-1627630752).

byte[] {{< gh-hovercard "11113" "fixed a bug that caused `Quake` to fail to launch," >}} and {{< gh-hovercard "11135" "also fixed a bug that resulted `Splatoon 3` having an endless loading screen when LAN was enabled," >}} by implementing the missing service functions.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

byte[] also {{< gh-hovercard "11016" "fixed an issue within yuzu's filesystem" >}} which resulted in either corrupt save data or failing to save data.

A previous merge caused games with non-ASCII titles to crash on Linux, due to `DBus` expecting a `UTF8` string. This has now been {{< gh-hovercard "11007" "fixed." >}}
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
Thanks [zeltermann](https://github.com/zeltermann)!

[Morph](https://github.com/Morph1984) {{< gh-hovercard "10999" "fixed a bug that broke the game installation progress bar" >}} after the recent buffer size increase, by refactoring the progress bar calculation code.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

Morph also {{< gh-hovercard "11173" "fixed a bug where yuzu would crash on systems with weak CPUs running very low clock speeds" >}}, due to yuzu's strict requirements on CPU clock precision.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

German77 reduced almost 2GB of memory usage, by {{< gh-hovercard "11128" "fixing a memory leak within yuzu's discord game presence" >}} presumed to be caused by `cpp-httplib`.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

German77 also {{< gh-hovercard "11142" "fixed a crash in yuzu's gamelist" >}} which happened when you loaded yuzu without keys.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

yuzu newcomer and Citra expert [Steveice10](https://github.com/Steveice10) made {{< gh-hovercard "10974" "a few improvements to Vulkan surface creation on macOS," >}} and [comex](https://github.com/comex) made {{< gh-hovercard "10990" "few fixes and workarounds for macOS to resolve few undefined behaviour errors." >}} Thanks to you two!
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
This doesn't mean full MoltenVK support yet, but the gap is now smaller.

## Hardware section

### NVIDIA

The currently latest driver released at the time of writing, 536.99, is stable and also seems to have improved Vulkan performance a small but measurable notch, between 3% and 7%.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
Free performance is free performance.

### AMD

It's July and we have another new AMD GPU driver with yet another extension causing issues.
If you recall from our [June progress report](https://yuzu-emu.org/entry/yuzu-progress-report-jun-2023/#amd), we reported that latest AMD drivers had broken a Vulkan feature - `extendedDynamicState3ColorBlendEquation`, and we had to temporarily disable usage of it on AMD driver version `23.5.2` and above.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

Fast-forward to July, and it's still broken, for some.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
Giving credit where due, AMD ***did*** fix this issue with driver version `23.7.2` but only for `RDNA2` GPUs (RX 6000 series), with `GCN4`, also known as `Polaris` (RX 400 and 500 series), confirmed to still be broken.
In light of this, and the fact that the fixed driver still reports the same Vulkan version, we {{< gh-hovercard "11182" "reverted" >}} {{< gh-hovercard "11163" "our revert" >}} of {{< gh-hovercard "10946" "our original change from June" >}} and have {{<gh-hovercard "11204" "currently disabled usage of this extension on all AMD official drivers," >}} until this is fixed and has a new version number.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

### Turnip

Mesa never slows down its progress, and [K11MCH1's](https://github.com/K11MCH1) AdrenoTools releases are a true blessing from the fairies.

For A600 users (Snapdragon ### series), [progress is steady](https://github.com/K11MCH1/AdrenoToolsDrivers/releases/tag/vk.1.3.261-A6XX).
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
But the [best news](https://github.com/K11MCH1/AdrenoToolsDrivers/releases/tag/v23.3.0-dev) are for A700 users (Snapdragon # Gen # series), which now see much improved rendering and performance on the Mesa Turnip drivers.

Some games still require the proprietary Adreno driver to be more stable or faster, but at this rate of progress, we’ll most likely see this change soon!
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

## Future projects

Behind the counter, there has been great progress in some key projects.
The last missing piece of `Project Y.F.C.` the `Query Cache Rewrite` was released, but we'll talk about it next time. We're sure Xenoblade and Luigi's Mansion fans will love it
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved
byte[] continues to improve the current file system emulation--maybe some particular games will start working soon?
And Maide has some interesting ideas to implement in the shader cache code.
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

CaptV0rt3x marked this conversation as resolved.
Show resolved Hide resolved
That's all folks! Thank you for staying with us until the end. See ya next time!
goldenx86 marked this conversation as resolved.
Show resolved Hide resolved

&nbsp;
{{< article-end >}}
{{< imgs-compare-include-end >}}
{{< gh-hovercard-include-end >}}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.