Support us on Patreon to keep GamingOnLinux alive. This ensures all of our main content remains free for everyone. Just good, fresh content! Alternatively, you can donate through PayPal. You can also buy games using our partner links for GOG and Humble Store.
We do often include affiliate links to earn us some pennies. See more here.

For those who love emulation, you might want to know about Citra [Official Site], a work in progress Nintendo 3DS emulator that we've never written about here before. It seems they've been hard at work too!

Unlike the Dolphin emulator for the GameCube and the Wii, Citra is not currently moving towards Vulkan. Instead, they've poured a lot of work into their current OpenGL renderer to improve performance and fix rendering issues and from what they've shown, it's getting quite impressive.

They've said that the new update is giving approximately 2x speed performance boost tested across various hardware configurations. Now, Citra will do the entire GPU emulation on the host GPU instead of the CPU.

On top of that, they've also rewritten texture forwarding support (to avoid a costly synchronization of textures between emulated 3DS memory and the host GPU memory) which not only increases the performance of many games, it also fixes some issue when upscaling the rendering to improve the actual look of the game like this example:

Then they showed off a few charts to show the improvement, like this one which shows just how much performance has improved.

Those are some huge gains and it sounds like it was quite a lot of effort, especially with OpenGL drivers varying across Linux, Mac and Windows in terms of performance and OS-specific issues. They've also been dealing with cases where the OpenGL documentation isn't great with ambiguous wording. That's a complaint I've heard a few times, which is why there's been such a big focus on good documentation for Vulkan.

You can read about the update on the official blog post here.

I'm now following their RSS feed, so I will hopefully be able to keep you up to date on their progress as it comes in.

Thanks for the tip, MaCroX95!

Article taken from GamingOnLinux.com.
12 Likes
About the author -
author picture
I am the owner of GamingOnLinux. After discovering Linux back in the days of Mandrake in 2003, I constantly came back to check on the progress of Linux until Ubuntu appeared on the scene and it helped me to really love it. You can reach me easily by emailing GamingOnLinux directly.
See more from me
The comments on this article are closed.
15 comments
Page: «2/2
  Go to:

frakswe Mar 21, 2018
Quoting: x_wingSo, maybe with "export CXXFLAGS=-std=c++1z" before running makefile is the final trick (in case there are others C++17 related issues).

Reverted fmt lib in externals dir, no change.

This is why i tried fmt lib from fmt libs homepage instead, atleast i can get past these errors then.

In file included from /citra/externals/fmt/include/fmt/posix.h:28:0,
                 from /citra/externals/fmt/include/fmt/posix.cc:13:
/citra/externals/fmt/include/fmt/format.h:650:35: error: ‘constexpr’ is not allowed in declaration of friend template specialization ‘const Char* pointer_from<Char>(fmt::internal::null_terminating_iterator<Char>)’
       null_terminating_iterator it);
                                   ^
/citra/externals/fmt/include/fmt/format.h: In instantiation of ‘constexpr const Char* fmt::internal::pointer_from(fmt::internal::null_terminating_iterator<Char>) [with Char = char]’:
/citra/externals/fmt/include/fmt/format.h:3126:54:   required from ‘void fmt::do_vformat_to(typename ArgFormatter::range, fmt::basic_string_view<Char>, fmt::basic_format_args<Context>)::handler::on_replacement_field(iterator) [with ArgFormatter = fmt::arg_formatter<fmt::back_insert_range<fmt::internal::basic_buffer<char> > >; Char = char; Context = fmt::basic_context<std::back_insert_iterator<fmt::internal::basic_buffer<char> >, char>; iterator = fmt::internal::null_terminating_iterator<char>]’

/citra/externals/fmt/include/fmt/format.h:3154:3:   required from ‘typename Context::iterator fmt::do_vformat_to(typename ArgFormatter::range, fmt::basic_string_view<Char>, fmt::basic_format_args<Context>) [with ArgFormatter = fmt::arg_formatter<fmt::back_insert_range<fmt::internal::basic_buffer<char> > >; Char = char; Context = fmt::basic_context<std::back_insert_iterator<fmt::internal::basic_buffer<char> >, char>; typename Context::iterator = std::back_insert_iterator<fmt::internal::basic_buffer<char> >; typename ArgFormatter::range = fmt::back_insert_range<fmt::internal::basic_buffer<char> >]’

/citra/externals/fmt/include/fmt/format.h:3279:60:   required from here
/citra/externals/fmt/include/fmt/format.h:653:15: error: ‘const char* fmt::internal::null_terminating_iterator<char>::ptr_’ is private
   const Char *ptr_;
               ^
/citra/externals/fmt/include/fmt/format.h:662:13: error: within this context
   return it.ptr_;
             ^
/citra/externals/fmt/include/fmt/format.h: In instantiation of ‘constexpr const Char* fmt::internal::pointer_from(fmt::internal::null_terminating_iterator<Char>) [with Char = wchar_t]’:
/citra/externals/fmt/include/fmt/format.h:3126:54:   required from ‘void fmt::do_vformat_to(typename ArgFormatter::range, fmt::basic_string_view<Char>, fmt::basic_format_args<Context>)::handler::on_replacement_field(iterator) [with ArgFormatter = fmt::arg_formatter<fmt::back_insert_range<fmt::internal::basic_buffer<wchar_t> > >; Char = wchar_t; Context = fmt::basic_context<std::back_insert_iterator<fmt::internal::basic_buffer<wchar_t> >, wchar_t>; iterator = fmt::internal::null_terminating_iterator<wchar_t>]’

/citra/externals/fmt/include/fmt/format.h:3154:3:   required from ‘typename Context::iterator fmt::do_vformat_to(typename ArgFormatter::range, fmt::basic_string_view<Char>, fmt::basic_format_args<Context>) [with ArgFormatter = fmt::arg_formatter<fmt::back_insert_range<fmt::internal::basic_buffer<wchar_t> > >; Char = wchar_t; Context = fmt::basic_context<std::back_insert_iterator<fmt::internal::basic_buffer<wchar_t> >, wchar_t>; typename Context::iterator = std::back_insert_iterator<fmt::internal::basic_buffer<wchar_t> >; typename ArgFormatter::range = fmt::back_insert_range<fmt::internal::basic_buffer<wchar_t> >]’

/citra/externals/fmt/include/fmt/format.h:3285:60:   required from here
/citra/externals/fmt/include/fmt/format.h:653:15: error: ‘const wchar_t* fmt::internal::null_terminating_iterator<wchar_t>::ptr_’ is private
   const Char *ptr_;
               ^
/citra/externals/fmt/include/fmt/format.h:662:13: error: within this context
   return it.ptr_;
yar4e Mar 21, 2018
Anyone can compile it for Ubuntu 16.04/Mint 18.3? Or launch precompiled version from the site?
frakswe Mar 22, 2018
Quoting: yar4eAnyone can compile it for Ubuntu 16.04/Mint 18.3? Or launch precompiled version from the site?

yeah i can compile it on Mint now , though i compiled gcc v8 for it to work.
yar4e Mar 22, 2018
Quoting: frakswe
Quoting: yar4eAnyone can compile it for Ubuntu 16.04/Mint 18.3? Or launch precompiled version from the site?

yeah i can compile it on Mint now , though i compiled gcc v8 for it to work.
Thanks for the info! Will try it this weekend.
mrdeathjr Mar 24, 2018
In canary 428 improvements are big compared with last test

GPU use are double or triple compared last test

Without forget mario kart 7 crash in dk stage (3rd cup)

Last test with xubuntu 16.04 x64 + nvidia drivers 390.12

View video on youtube.com

And now with xubuntu 18.04 x64 + nvidia driver 390.42

View video on youtube.com

^_^


Last edited by mrdeathjr on 24 March 2018 at 2:30 pm UTC
While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: PayPal.

This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
The comments on this article are closed.