Questions on Citra

I have been using Citra for more than one year, and thanks to your efforts I have been enjoying 3DS games on PC. However I do have some questions (or suggestions in some way? ).

First, emulators like Dolphin usually have several video backends for users to choose from. For example, Dolphin has OpenGL, D3D 11, D3D 12 and Vulkan. On my PC, (using Dolphin with) D3D12 is more than 10% faster (compared to OpenGL). So maybe you should try it too? As far as I know, Citra currently supports OpenGL only. It may not be easy to implement other video backends, but I think it’s worthwhile because it do improve emulation speed.

Secondly, are you planning to implement an Android version? (I do did read the faq but I still want to ask) I think 3DS is a “portable” game console and it won’t make much sense if you can only play it on PC. Network connection (multiplayer support) will also become easier with Bluetooth or Local Wifi. As both the 3DS and many Android devices are based on ARM processors, I think less work is required to be done before executing the code (for example interpreters or recompilers may not be needed). For x86_64 devices implementing Android versions should be as easy as a piece of cake for your strong development team, or at least in my opinion it is.

Thirdly, I know Cemu has a “shader cache” feature. It makes games boot slower (and take up much more memory space), but do improve the speed of emulation quite a lot. Will Citra have similar features in the future?

Fourthly, currently Citra doesn’t seem to benefit from multicore processors. Some emulators use a separate CPU core (or Thread?) for rendering (or the screen process) and another for other work. Will that help with Citra emulation?

Fifthly, Citra can only read decrypted game ROMs. However, NDS emulators usually read both decrypted and encrypted ROMs, and some even read encrypted ones only. I think you can try to implement the feature to read encrypted ROMs too. I saw articles on the Internet saying that all 3DS encryption keys have been revealed and ROM decryption can be done on PC(I don’t remember the details). So, I think it’d be possible to decrypt encrypted ROMs before booting. That would make things much easier for many users who don’t know how to decrypt ROMs or who don’t have a 3DS.

Sixthly(this is a very minor problem), Citra Installers are very nice and help much, but in China it doesn’t work well as the speed is too low, so I have to download it manually from Github (though it is still slow). So will you please use some service like CDN to help? You may put the file on your own server (instead of Github). I don’t think that will cost much but it will make experience much better. Thank you!

Finally, I’d like to express my thanks to you Citra development team. It is because of you I can have so much fun. I will never forget the excitement I feel felt when I first saw Citra boot Pokemon (Omega Ruby &) Alpha Sapphire and later other titles. I am not good at programming, and I can hardly understand most of your code even though I put quite much effort into it. And I’m just a student and can’t help you much with the things about money. However, I will still support you in the future. I hope you can consider the 6 suggestions above. Thank you very much.

P.S. I’m Chinese and my English isn’t that good. Sorry.

1 Like

It’s not that we haven’t considered most of the above options, it’s just a matter of having people available and willing to work on such things.

Hmm… Thank you for your reply.

It is really a pity. I wish I could help as I will be quite free during my winter vacation but I don’t have much skill and (especially) know little about stuff like OpenGL…

Anyway, thank you for your efforts in this area, and I will still support you in the future.

By the way, what are you working on currently? Citra hasn’t released any progress reports for a long time.

I think these questions deserve some more detailed answers.

Video Backends: Citra is very rarely GPU limited, so a fancier graphics backend wouldn’t do much for speed right now, this may change in the near future once the entire GPU pipeline can be run on the host GPU, at that point if someone with skill in Vulkan wants to take it on, that would be great.

Android: In order to make a viable Android version we’d need a new shader JIT, which has a slight amount of progress by one dev. We’d need an ARMv8 host mode for dynarmic, the CPU JIT written by merrymage. Currently that is listed as “long term goal” on it’s readme, probably behind finishing the implementation of the ARMv8 guest mode for yuzu. We’d most likely need a new video-backend (like Vulkan, ironically) since most mobile GPUs don’t support Citra’s OpenGL 3.3 requirement. And we’d need a mobile UI.
Shader Cache: I’d defer to a more experienced dev on this one, but I don’t think a shader cache would have the effect you think it would.

Multi-core: Well currently there’s the emulation thread, and other threads for things like UI and web services are created as necessary. The most likely candidates for multi-threading in actual emulation are separating the GPU work into its own thread (which has been done, with very poor results) and sound emulation, which might be possible with wwylele’s upcoming DSP LLE implementation, but I wouldn’t count on it. 3DS games really only run on one of it’s cores, so you can’t really multi-thread CPU emulation

Encrypted Games: It has come up in discussion before, but we expect our users to support game developers by buying games, and if they can get 3DS encryption keys legally (we can’t include them with Citra), they can dump decrypted games. Because of this, this is not a priority AFAIK.

Slow Installer: I’d have to defer to @Selby for installer related issues.

Thank you for your well written questions. :smiley:

Thank you very much for your well written answer. I hope Citra can become better and better in the near future.

One last question. Are you planning to implement features like “save state” or “quicksave” or “emulator save”? I don’t think it very important but most emulators have it, and it is useful in some ways. And I don’t think it so difficult because you only need to dump CPU states and memory and so on. (In fact I tried to implement it several months ago but failed because of my poor skill in programming :sweat_smile:. I just dumped the memory, and forgot about the CPU states… Well when I tried to load it, only the battling Pokemon’s name is changed…)

By the way, what are you working on currently? Citra hasn’t released a progress report for a long time. :slight_smile: Thank you.

1 Like

We’ve set the foundation for implementing save states, but we still have a lot of work to do on that front.

We’re always looking for writers to be able to help write articles for us. The issue is no one is willing to step up and do it :slight_smile:

Save states is something we absolutely want. Right now b3n30 has opened a PR for a save state framework, but every part of emulation needs to be added to it before it can be useful.

Our progress reports have fallen behind due to our main writer having trouble in hurricane season, but our Q4 2017 progress report is in review right now. Until then, you can look at our list of merged PRs to get a general idea: https://github.com/citra-emu/citra

OK I see now. Thank you very much. :smile:

I think I said “One last question” but I just come up with more and more… Sorry.

I know Citra has a “dummy camera” feature and someone also wrote a nice camera interface. However why is the camera feature still not finished after such a long time? It won’t be difficult to implement a camera with “still images”…

I wish I could use Island Scan or something similar…

Thank you!

Much like some other missing features, just because there’s been no interest/time to work on it. The author who had a branch working on a camera integration has spent their time working on other things that were more interesting to them. It’s similar to why we can’t split the 2 screens to seperate windows, or have an emulated ‘sleep mode’ by closing the 3ds lid. These features haven’t interested someone enough to make them work properly yet.

OK, It’s really a pity…

But in fact many small features require only a few minutes or hours’ work… :cold_sweat:

Well I will try to do it myself…

wwylele puts his incomplete work on display in hopes that others will pick it up and finish it. you can see his still camera here: https://github.com/wwylele/citra/pull/30 It could use a little work still such as adding a config option to store the location of the file to use (and should it be written to settings?) and add a filepicker to the config as well