You can sign up to get a daily email of our articles, see the Mailing List page!
Support us on Patreon to keep GamingOnLinux alive. This ensures we have no timed articles and no paywalls. Just good, fresh content! Alternatively, you can donate through Paypal, Flattr and Liberapay.!

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!

13 Likes, Who?
We do often include affiliate links to earn us some pennies. We are currently affiliated with GOG and Humble Store. See more information here.
16 comments
Page: 1/2»
  Go to:

Swiftpaw 14 March 2018 at 3:11 pm UTC
Very nice!
freerunnerlive 14 March 2018 at 4:07 pm UTC
./citra: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./citra)
./citra: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by ./citra)


BAD Problems in Debian
tuubi 14 March 2018 at 4:16 pm UTC
View PC info
  • Supporter
freerunnerlive./citra: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./citra)
./citra: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by ./citra)


BAD Problems in Debian
Ubuntu users will have the same problem I think, unless they're running the latest beta of 18.04. You'll have to build from source unless you find someone else who already did.
chris.echoz 14 March 2018 at 6:44 pm UTC
freerunnerlive./citra: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./citra)
./citra: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.11' not found (required by ./citra)


BAD Problems in Debian
Experienced the same thing. Also tried to build it but it seems it requires GCC 7. Current in stable is 6.3.
Compiling got to about 30-40% and then threw some errors about invalid conversions from const void* to void*. Likely caused by the older GCC not supporting whatever feature it was trying to use.
ageres 15 March 2018 at 11:57 am UTC
It doesn't work in Ubuntu 17.10 too:
./citra-qt: /usr/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_4' not found (required by ./citra-qt) ./citra-qt: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27' not found (required by ./citra-qt)
They should release it as AppImage, like rpcs3.

But I could successfully build and launch it with
git clone --recursive https://github.com/citra-emu/citra cd citra mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DUSE_SYSTEM_CURL=1 make


Last edited by ageres at 15 March 2018 at 2:03 pm UTC
frakswe 15 March 2018 at 9:50 pm UTC
thought i had it going for awhile but had to throw in the towel in the end.

In file included from /source/citra/src/core/hle/service/ac/ac.cpp:9:0: /source/citra/src/./core/hle/ipc_helpers.h: In member function ‘Kernel::SharedPtr<Kernel::Object> IPC::RequestParser::PopGenericObject()’: /source/citra/src/./core/hle/ipc_helpers.h:401:10: error: expected unqualified-id before ‘[’ token auto [handle] = PopHLEHandles<1>(); ^ /citra/src/./core/hle/ipc_helpers.h:402:39: error: ‘handle’ was not declared in this scope return context->GetIncomingHandle(handle);

edit: should add that i replaced the fmt library in the "externals" directory with the one on the fmt library homepage, most likely that has something to do why "handle" isn't declared.seems they have altered fmt lib with their own functions,which doesn't work with my system.


Last edited by frakswe at 15 March 2018 at 10:31 pm UTC
Scorpiove 16 March 2018 at 2:37 am UTC
I had the same problem here on Arch, so I just downloaded the libc2.7 source and built it on my machine (make sure to not do the "make install" part). I then took the libm.so library that was built and placed it in the ~/.citra/canary/ folder, and from there I then ran the emulator with "LD_PRELOAD=~/.citra/canary/libm.so ./citra-qt". Everything worked fine afterwards. Also the new build is awesome!
x_wing 19 March 2018 at 7:08 pm UTC
frakswethought i had it going for awhile but had to throw in the towel in the end.

In file included from /source/citra/src/core/hle/service/ac/ac.cpp:9:0: /source/citra/src/./core/hle/ipc_helpers.h: In member function ‘Kernel::SharedPtr<Kernel::Object> IPC::RequestParser::PopGenericObject()’: /source/citra/src/./core/hle/ipc_helpers.h:401:10: error: expected unqualified-id before ‘[’ token auto [handle] = PopHLEHandles<1>(); ^ /citra/src/./core/hle/ipc_helpers.h:402:39: error: ‘handle’ was not declared in this scope return context->GetIncomingHandle(handle);

edit: should add that i replaced the fmt library in the "externals" directory with the one on the fmt library homepage, most likely that has something to do why "handle" isn't declared.seems they have altered fmt lib with their own functions,which doesn't work with my system.

By the error you get, seems like they're using C++17 and your compiler doesn't support it yet (if you're using gcc, check the man).

I believe that the problematic code is just a syntax sugar for: u32 handle = PopHLEHandles<1>()[0];

Try replacing that line and hope for the best
frakswe 19 March 2018 at 7:58 pm UTC
i will try it out,thanks x_wing
frakswe 20 March 2018 at 6:09 am UTC
your solution worked, but there's more errors later regarding fmt functions that isn't there. suspected as much,replacing fmt lib wasn't a good idea but i had to give it a shot.
  Go to:
While you're here, please consider supporting GamingOnLinux on Patreon or Liberapay. We have no adverts, no paywalls, no timed exclusive articles. Just good, fresh content. Without your continued support, we simply could not continue!

We also accept Paypal donations and subscriptions! If you already are, thank you!

Due to spam you need to Register and Login to comment.


Or login with...

Livestreams & Videos
Official Livestreams
Community Livestreams
See more!
Popular this week
View by Category
Contact
Latest Comments
Latest Forum Posts