Updated roadmap

Ivan 2017-01-23 18:02:54 +03:00
parent 6836fbf016
commit 471c5c2113

@ -1,54 +1,34 @@
List of features that RPCS3 will support in the future and their corresponding status. It's not required for developers to write down here the tasks they are working on. It's just recommended, and if you do so, remember to delete those entries once you finish them, or move them to another category if you couldn't do it. The current categories are:
* **Short term goals:** Tasks that developers are currently doing.
* **Medium term goals:** Stuff that developers could do.
* **Long term goals:** Tasks that are not a priority right now.
Thank you for supporting RPCS3!
***
## Short term goals
* Rewriting OpenGL renderer, VP/FP recompiler. _[DH]_
* Implement Priority-Based Scheduler for PPU Threads. _Nekotekina_
* Implement/rewrite HLE modules:
* cellJpgDec: Use a better library, bugfixes, other improvements
* cellFont: Use libtiff to properly decode and support font files
* Correctly handle exceptions in `Emulator::Load()` and `Emulator::Stop()` functions. Not important.
* Add basic types `s128` (signed 128-bit number), `v64` (vector 64-bit union), `v32` (vector 32-bit union). Not important.
* Improve `be_t` and `le_t` types, make them perfect and literally shine. Any flaws are intolerable.
* Filesystem: Process WinAPI/errno error codes if an error occured in system calls called through `fs::` functions. Set correct TLS error code. Throw an exception on unknown error. Reuse error codes when necessary, for example, in `sys_fs_open` implementation.
* Cease to use `assert` in most places whenever an error may occur. Use exceptions.
* Eliminate `delete`/`delete[]` operator usage. Eliminate `malloc`/`free` usage. Use `std::unique_ptr` instead.
* Implement correct SPU segment loading in order to provide correct `sys_spu_image_import`, `sys_raw_spu_load`, `sys_spu_elf_get_information`, `sys_spu_elf_get_segments`, etc. implementations.
* Examine PPU/SPU/ARMv7 stack structure. Restore the "callstack" in the debugger using the information from the real thread's stack, using SP register. Catching it from branch instructions was: 1) wrong 2) slow.
* Improve `vm::reservation_op`: use TSX intrinsics if supported (by CPUID).
* Eliminate `std::this_thread` `sleep_for()` and `yield()` usage in most places, because it's ineffective or even wrong.
* Eliminate wx dependencies from emucore.
* Implement PS3 firmware installer. Users only need to provide correct PS3UPDAT.PUP file and it will be automatically unpacked into /dev_flash.
* Implement decryption on the fly. No more temporary files and additional steps. This affects, for example, EBOOT, SELF, SPRX, EDAT, and MSELF embedded files.
* Implement SDAT decryption. No need to decrypt them manually. Currently some games may silently fail to boot.
* New "Automatic LLE configuration" option (enabled by default). This will pick the most appropriate system modules (SPRX files) for a particular PS3 executable. It may be hard to pick them manually.
* Cache compiled LLVM modules. You shouldn't recompile the same executable twice.
* Configure Travis to automatically upload Linux binaries on GitHub.
* Implement priority-based scheduler for PPU threads. This is an important core change, it will fix various crashes and freezes.
* Investigate early crashes on Linux.
* Start to improve compatibility by fixing bugs and missing functionality.
## Medium term goals
* Improve solution structure.
* Correctly load EXPORT table of main PPU executable.
* Implement variable import/export support (VNIDs) for PPU.
* Improve all PRX-related things. Fix booting process in order to be compatible with liblv2. This includes TLS, correct module loading/unloading and various unimplemented syscalls.
* Improve debugger, fix bugs.
* Implement static AOT PPU recompiler.
* Implement AOT SPU recompiler.
* Implement block-based ARMv7 disassembler.
* Implement static AOT ARMv7 recompiler.
* Implement variable import support (VNIDs) for ARMv7.
* Implement SDATA loader, that is, read the contents of the SDATA file on the fly.
* Improve RSX and add unimplemented GCM commands.
* Implement loading SPU code from encrypted file.
* Improve RSX Debugger: Add frame stepping (pause the emulator and advance just one frame).
* Implement LV2 SysCalls. Specifically (ordered from more to less important):
* 631 used by games like _Prince of Persia Classic [NPUB30031]_
* sys_fs_chmod (834)
* Find bugs, wrong [autotests](https://github.com/DHrpcs3/ps3autotests/) or read the current [issues](https://github.com/DHrpcs3/rpcs3/issues) and fix them.
* Implement core dumps.
* Implement Priority-Based Scheduler for SPU Thread Groups.
* Write tests.
* Enable hardware acceleration for decryption (AES-NI).
* Improve audio and video decoders for better speed and compatibility.
* Implement MSELF support without intermediate files. Currently it doesn't work at all. Depends on "decryption on the fly" task.
* Improve controller support. This includes emulated controllers (with mouse or keyboard) and real controllers as well.
* Enable Vulkan graphic renderer for Linux.
* Add low-latency ASIO audio backend for Windows. With ASIO4ALL, it will work great on most modern hardware.
* Add core audio backend for Linux.
* Implement LLVM recompiler backend for SPU. This is actually a tremendous amount of work to make it useful, but it will also give the very important speed improvement (unless the SPU is not used at all).
* Improve LLVM flexibility. For example, it could scan game folder for all executables and SPRX modules and recompile them ahead of time.
* Implement PPU executable chain-loading.
* Improve solution structure, move and rename some files.
* Improve SPRX loading and unloading. This increases compatibility a lot.
* Improve embedded debugger.
* Implement missing syscalls. Allow to LLE more system modules.
* Write automatic tests to minimize bugs.
* Implement savedata manager. Currently it doesn't have user interface.
## Long term goals
* Add a User Manager to manage folders like: `dev_hdd0/home/00000001`.
* Implement a driver to use HPET (High Precision Event Timer) hardware in emulator if possible.
* Implement user manager.
* Implement network functionality.
* Implement every system module in the emulator. This will allow the emulator to work without the PS3 firmware.
* Continue to improve speed, accuracy, and compatibility. This is a never-ending goal.