237 lines
14 KiB
Markdown
237 lines
14 KiB
Markdown
+++
|
||
date = "2018-05-30T19:30:00+05:30"
|
||
title = "Citra Progress Report 2018 Q1"
|
||
tags = [ "progress-report" ]
|
||
author = "CaptV0rt3x"
|
||
forum = 23597
|
||
+++
|
||
|
||
It's been a while folks - since the last report, we have had many new features come to Citra. Some
|
||
notable ones include multiplayer improvements, hardware shader improvements (post GLvtx), a logging
|
||
system rewrite, and the highly coveted camera support. Our continuous integration (CI) systems were
|
||
optimized as well. Apart from these, we have had many more minor features, improvements, and bug fixes.
|
||
So, without further ado let's get right into it:
|
||
|
||
## citra-qt: Multiplayer Improvements ([here](https://github.com/citra-emu/citra/pull/3444), [there](https://github.com/citra-emu/citra/pull/3481), [this](https://github.com/citra-emu/citra/pull/3489), and [that](https://github.com/citra-emu/citra/pull/3676)) by [jroweboy](https://github.com/jroweboy) and [B3n30](https://github.com/B3n30)
|
||
|
||
Citra has been able to run many games at playable speeds for a while now. However, it was always lacking
|
||
something which the 3DS has: the ability to play with friends. In order to make it a reality, our developers [jroweboy](https://github.com/jroweboy), [B3n30](https://github.com/B3N30), [Subv](https://github.com/subv),
|
||
and [JayFoxRox](https://github.com/jayfoxrox) worked tirelessly for months to reverse engineer workings
|
||
of the 3DS local wireless system. Thanks to their efforts, Citra now emulates _local wireless multiplayer_
|
||
over the internet. This allows you to play your favorite games with your virtual friends across the world.
|
||
Later [jroweboy](https://github.com/jroweboy), [B3n30](https://github.com/B3n30), and few others
|
||
worked on various feature improvements and bug fixes.
|
||
|
||
### Features
|
||
Currently, the multiplayer features include:
|
||
|
||
* We now have multiple servers, maintained by our very own [FlameSage](https://community.citra-emu.org/u/flamesage/summary)
|
||
and many other community members at various locations around the globe, so that you can meet others
|
||
online.
|
||
* You can now create rooms which can hold up to 16 players and even secure them with a password.
|
||
* You can now set a preferred game for your room.
|
||
* You can also filter the servers to suit your needs.
|
||
|
||
{{< figure src="server-list.png"
|
||
title="Sooo many servers to choose from!" >}}
|
||
|
||
Since its initial release in Canary, developers have listened to the community and have been trying
|
||
very hard to fix bugs causing games to be incompatible. They have also added other features to make
|
||
the multiplayer experience richer.
|
||
|
||
### Compatible Titles
|
||
We are proud to announce that multiplayer currently works in the following list of titles:
|
||
|
||
* Dragon Quest Monsters: Joker 3 Professional
|
||
* Luigi's Mansion: Dark Moon
|
||
* Mario Party: The Top 100
|
||
* Monster Hunter 3G & 3 Ultimate
|
||
* Monster Hunter 4, 4G & 4 Ultimate
|
||
* Monster Hunter X
|
||
* Monster Hunter XX
|
||
* New Super Mario Bros. 2
|
||
* Pokémon Omega Ruby / Alpha Sapphire
|
||
* Pokémon Sun / Moon
|
||
* Pokémon Ultra Sun / Ultra Moon
|
||
* Pokémon Virtual Console
|
||
* Super Smash Bros.
|
||
* The Legend of Zelda: Tri Force Heroes
|
||
* And many more.
|
||
|
||
### Incompatible Titles
|
||
For various reasons, the following games were tested and do not work:
|
||
|
||
* Asphalt Assault 3D
|
||
* Code of Princess (*a fix is in works*)
|
||
* Dragon Quest Monsters: Terry's Wonderland 3D
|
||
* F1 2011
|
||
* Kirby Fighters Deluxe
|
||
* Kirby Triple Deluxe
|
||
* Mario Party Island Tour
|
||
* Mario Party Star Rush
|
||
* Mario Kart 7
|
||
* Planet Crashers
|
||
* Resident Evil: The Mercenaries 3D
|
||
* Ridge Racer 3D
|
||
* Sonic Generations
|
||
* Street Fighter IV
|
||
* Tetris Ultimate
|
||
|
||
***Note that this list isn't absolute, and multiplayer may or may not work in games not listed here.
|
||
Also note that Download Play and Spotpass titles do not work as they are beyond the scope of current
|
||
local multiplayer***.
|
||
|
||
Although multiplayer is supported, some games might still experience issues with it. Since the servers
|
||
are located in various locations, latency will play a major role in your gameplay experience, so always
|
||
choose a server that is nearby (geographically). Please use our [support forums](https://community.citra-emu.org/),
|
||
[IRC](http://webchat.freenode.net/?channels=citra), or [Discord](https://citra-emu.org/discord/) for
|
||
help regarding issues with multiplayer.
|
||
|
||
Read more about the multiplayer feature update [here](https://citra-emu.org/entry/announcing-networking-support/).
|
||
|
||
## citra-qt: Hardware Shader Improvements (post GLvtx) by [wwylele](https://github.com/wwylele) and [degasus](https://github.com/degasus)
|
||
|
||
Citra has come a long way from just being able to render graphics in 2015, to being able to run games
|
||
at a playable state. Still, Citra was only fast for users who had better hardware. Users with slower
|
||
processors suffered from lag and stuttering during gameplay.
|
||
|
||
Now, thanks to the combined efforts of [phantom](https://github.com/phanto-m), [jroweboy](https://github.com/jroweboy), [wwylele](https://github.com/wwylele), [MerryMage](https://github.com/MerryMage), and many more, we
|
||
now have a near-complete hardware renderer with huge improvements. Citra now uses the host GPU to its
|
||
fullest to render graphics. [wwylele](https://github.com/wwylele) and [MerryMage](https://github.com/MerryMage)
|
||
took it upon themselves to simplify the humongous heap of code into smaller parts, fixing, and testing
|
||
them.
|
||
|
||
Thanks to [degasus](https://github.com/degasus) from the Dolphin community, who imparted his valuable
|
||
knowledge and understanding of GPUs and OpenGL, we were able to optimize the _streaming storage buffer_
|
||
support added by [phantom](https://github.com/phanto-m). This was done entirely by [degasus](https://github.com/degasus)
|
||
himself ([here](https://github.com/citra-emu/citra/pull/3504), [there](https://github.com/citra-emu/citra/pull/3666),
|
||
and [that](https://github.com/citra-emu/citra/pull/3711)). The old way to upload the data (both vertex
|
||
and constants) was a simple `glBufferData` call. Keep in mind, however, that the GPU has a huge execution
|
||
latency, so you can't just copy the new content over the existing buffer. The driver has to choose
|
||
between different ways to deal with this issue, with different drawbacks:
|
||
|
||
1. Wait for the GPU to finish and copy to the destination buffer. Usually this method is the fastest
|
||
for big uploads, fine on common gaming, but terrible for emulators.
|
||
2. Allocate a new buffer and tell the GPU which new buffer shall be used now. You also need to care
|
||
about freeing the old buffer once it isn't in use any more. This tends to have a huge CPU overhead and
|
||
isn't available on partial buffer updates such as lighting LUTs.
|
||
3. Copy the data to an internal staging buffer and ask the GPU to copy it again to the destination
|
||
when it is ready. This uses twice the memory bandwidth, and switching between rendering and copying also
|
||
takes a while for the GPU. This proves to be a significant bottleneck if done for every single draw call.
|
||
|
||
In the end, all of these are bad in terms of performance. It is a simple upload call, but it either
|
||
requires many copies and context switches, or the GPU is stalled (_More on that in [here](https://de.slideshare.net/CassEveritt/approaching-zero-driver-overhead)_). Instead, Citra
|
||
allocates a big staging buffer, copies the data to the current position within the buffer,
|
||
and tells the GPU to directly access the data from there. The driver has no scope of interpreting what
|
||
we ask it to do.
|
||
|
||
_This has a downside as well_. The GPU now accesses the main memory over PCIe. So if we're going to
|
||
reuse the same data in the next frame, it has to go through the PCIe bottleneck again. But, we never
|
||
use the same data again and hence gain a big performance boost.
|
||
|
||
[wwylele](https://github.com/wwylele) tweaked the configuration UI and renamed some parts of it.
|
||
However, this caused some confusion about the configuration window and GPU features.
|
||
|
||
### What's changed in the UI?
|
||
|
||
With the initial release of GLvtx, we added support for running shaders on the host GPU. So, we had
|
||
a dropdown menu called **Shader Emulation** to select either CPU or GPU, to run the shaders. The
|
||
option has now been renamed as **Enable Hardware Shader**. When enabled, it makes use of the host
|
||
GPU, and when disabled, it uses the CPU alone.
|
||
|
||
Due to many of the users having older hardware, we introduced an option called **Accurate Hardware
|
||
Shader**. It was later renamed to **Accurate Multiplication**, because technically that's what it was
|
||
doing. ***When enabled it would render games with more accuracy at the cost of slower performance***.
|
||
Same goes for **Accurate Geometry Shader**. Earlier this was configurable via the INI file, but now
|
||
it can be configured in the UI.
|
||
|
||
|
||
{{< sidebyside "image" ""
|
||
"renderer-settings.png=Old Graphics Tab"
|
||
"renderer-settings-new.png=New Graphics Tab" >}}
|
||
|
||
During it's time in Canary, a lot of testing was done by our contributors. They tested many games,
|
||
under varied hardware conditions and submitted valuable telemetry data, crash logs, etc., which helped
|
||
us in fixing issues with the hardware shader support.
|
||
|
||
**Note**:
|
||
Unfortunately, due to driver issues with AMD GPUs and inadequate OpenGL support on macOS, the hardware
|
||
shader might not perform better than the software renderer under these conditions. However, worry not,
|
||
as research is being done into possible fixes that might come around sooner than you think.
|
||
|
||
Read more about hardware renderer improvements in detail [here](https://citra-emu.org/entry/improvements-to-hardware-renderer/).
|
||
|
||
## Continuous Integration (CI) Improvements ([here](https://github.com/citra-emu/citra/pull/3647), [there](https://github.com/citra-emu/citra/pull/3649), [this](https://github.com/citra-emu/citra/pull/3706), and [that](https://github.com/citra-emu/citra/pull/3744)) by [liushuyu](https://github.com/liushuyu)
|
||
|
||
One of the more time and resource consuming parts of the project were our build generating environments.
|
||
We use Travis and Appveyor to release fully functional builds for download. However, the time it took
|
||
for the builds to be created was too long and if it was stopped abruptly, it took even more time to
|
||
create the builds again. Thanks to [liushuyu](https://github.com/liushuyu)'s contributions, we were
|
||
able to optimize this whole process and make it very efficient to build and release latest changes to
|
||
our site.
|
||
|
||
## Logging System Rewrite ([here](https://github.com/citra-emu/citra/pull/3449), [there](https://github.com/citra-emu/citra/pull/3533) and [that](https://github.com/citra-emu/citra/pull/3568)) by [jroweboy](https://github.com/jroweboy) and [daniellimws](https://github.com/daniellimws)
|
||
|
||
Our old logging system had several drawbacks and was due to be updated. So, a newer and efficient
|
||
logging system based on fmtlib was designed and implemented by [jroweboy](https://github.com/jroweboy)
|
||
and [daniellimws](https://github.com/daniellimws). This gets rid of the ugly console window and made
|
||
many under the hood improvements to the logging system. This will make identifying and fixing issues
|
||
a whole lot faster. After the implemetation was done, migrating our codebase to the new system was a
|
||
huge endeavour shared by [daniellimws](https://github.com/daniellimws), and many others.
|
||
|
||
## [citra-qt: Camera Support](https://github.com/citra-emu/citra/pull/3566) by [zhaowenlan1779](https://github.com/zhaowenlan1779)
|
||
|
||
One of the highly requested features of Citra has been the support for using the system camera to
|
||
scan QR codes and other kinds of images. [zhaowenlan1779](https://github.com/zhaowenlan1779) took it
|
||
upon himself to provide Citra with this feature. By making use of the available Qt libraries, he worked
|
||
on the implementation for weeks and was finally able to finish the feature. Citra now boasts the ability
|
||
to directly scan images and use the system camera in a manner similar to the 3DS camera.
|
||
|
||
{{< figure src="camera.jpg"
|
||
title="System Camera Support" >}}
|
||
|
||
## [citra-qt: Translations](https://github.com/citra-emu/citra/pull/3297) by [wwylele](https://github.com/wwylele) and [The Citra Community](https://community.citra-emu.org)
|
||
|
||
For a long while now, Citra’s UI had been in English and has had absolutely no support for other languages. [wwylele](https://github.com/wwylele) discussed this at length with other contributors and finally
|
||
brought UI translations to Citra. Citra can now be used in many other languages. Note that these
|
||
translations are maintained by our own community members and the translations are hosted on
|
||
[Transifex](https://www.transifex.com/citra/citra/). Now, you too can submit a translation for your
|
||
language (if it doesn’t exist already), or review existing translations to make them accurate.
|
||
|
||
{{< figure src="translation.jpeg"
|
||
title="Citra - Now available in your language" >}}
|
||
|
||
## [Sending Test Cases via Telemetry](https://github.com/citra-emu/citra/pull/3325) by [BreadFish64](https://github.com/BreadFish64)
|
||
|
||
Over the years, Citra has improved by leaps and bounds. However, there has always been a lack of consistent
|
||
information on game compatibility. We introduced the [game compatibility list](https://citra-emu.org/game/)
|
||
to fix that. Having a list was helpful, but maintaining it was proving to be a tedious task. After a
|
||
lot of brainstorming, [BreadFish64](https://github.com/BreadFish64) added the option in the UI to send
|
||
test cases via telemetry. These results are submitted by the users themselves, and are in turn used to
|
||
update the game compatibility list.
|
||
|
||
### Steps to submit test cases via Telemetry
|
||
{{< sidebyside "image" ""
|
||
"compat-1.png=Step 1"
|
||
"compat-2.png=Step 2" >}}
|
||
{{< sidebyside "image" ""
|
||
"compat-3.png=Step 3"
|
||
"compat-4.png=Step 4" >}}
|
||
**Note**: To be able to report compatibility, you have to first login to the Citra Web Service, using
|
||
your Username and Token.
|
||
(See Emulation -> Configure -> Web)
|
||
{{< figure src="web-verify.png"
|
||
title="Citra Web Service" >}}
|
||
|
||
## Miscellaneous
|
||
|
||
Various other contributions to the external dependencies have been made by [Lioncash](https://github.com/lioncash), [MerryMage](https://github.com/MerryMage), and many others. Several services were converted to the new
|
||
service framework ([here](https://github.com/citra-emu/citra/issues/2531)). Many minor bug fixes and
|
||
under-the-hood feature improvements were done by our [contributors](https://github.com/citra-emu/citra/graphs/contributors?from=2018-01-01&to=2018-05-19&type=c).
|
||
We believe ***even the smallest contribution is valuable*** and without these [contributors](https://github.com/citra-emu/citra/graphs/contributors?from=2018-01-01&to=2018-05-19&type=c),
|
||
these new features wouldn’t have been possible.
|
||
|
||
<h3 align="center">
|
||
<b><a href="https://github.com/citra-emu/citra/">Contributions are always welcome !</a></b>
|
||
</h3>
|