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!
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_;
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.
Quoting: fraksweThanks for the info! Will try it this weekend.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.
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
See more from me