Copy disabled (too large)
Download .txt
Showing preview only (18,644K chars total). Download the full file to get everything.
Repository: shadps4-emu/shadPS4
Branch: main
Commit: a858f9c96cc7
Files: 853
Total size: 33.1 MB
Directory structure:
gitextract_k8dejx2r/
├── .ci/
│ └── clang-format.sh
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── app-bug-report.yaml
│ │ ├── config.yml
│ │ ├── feature-request.yaml
│ │ ├── game-bug-report.yaml
│ │ └── rfc.yaml
│ ├── linux-appimage-sdl.sh
│ └── workflows/
│ └── build.yml
├── .gitignore
├── .gitmodules
├── CMakeDarwinPresets.json
├── CMakeLinuxPresets.json
├── CMakeLists.txt
├── CMakePresets.json
├── CMakeSettings.json
├── CMakeWindowsPresets.json
├── CONTRIBUTING.md
├── LICENSE
├── LICENSES/
│ ├── BSD-3-Clause.txt
│ ├── BSL-1.0.txt
│ ├── CC0-1.0.txt
│ ├── GPL-2.0-or-later.txt
│ ├── MIT.txt
│ └── OFL-1.1.txt
├── README.md
├── REUSE.toml
├── cmake/
│ ├── CMakeRC.cmake
│ ├── FindFFmpeg.cmake
│ ├── FindRenderDoc.cmake
│ ├── Findhalf.cmake
│ ├── Findlibusb.cmake
│ ├── Findstb.cmake
│ └── FindxxHash.cmake
├── dist/
│ ├── MacOSBundleInfo.plist.in
│ ├── net.shadps4.shadPS4.desktop
│ ├── net.shadps4.shadPS4.metainfo.xml
│ └── net.shadps4.shadPS4_metadata.pot
├── documents/
│ ├── Debugging/
│ │ └── Debugging.md
│ ├── Docker Builder/
│ │ ├── .devcontainer/
│ │ │ └── devcontainer.json
│ │ ├── .docker/
│ │ │ └── Dockerfile
│ │ └── docker-compose.yml
│ ├── building-docker.md
│ ├── building-linux.md
│ ├── building-macos.md
│ ├── building-windows.md
│ ├── changelog.md
│ └── patching-shader.md
├── externals/
│ ├── CMakeLists.txt
│ ├── aacdec/
│ │ └── CMakeLists.txt
│ ├── cmake-modules/
│ │ ├── GetGitRevisionDescription.cmake
│ │ └── GetGitRevisionDescription.cmake.in
│ ├── gcn/
│ │ ├── CMakeLists.txt
│ │ └── include/
│ │ └── gcn/
│ │ ├── si_ci_vi_merged_offset.h
│ │ └── si_ci_vi_merged_pm4_it_opcodes.h
│ ├── renderdoc/
│ │ └── renderdoc_app.h
│ └── stb/
│ └── stb_image.h
├── scripts/
│ ├── aerolib.inl
│ ├── file_formats/
│ │ └── sfo.hexpat
│ ├── ps4_names.txt
│ └── ps4_names2stubs.py
├── shell.nix
└── src/
├── .clang-format
├── common/
│ ├── adaptive_mutex.h
│ ├── aes.h
│ ├── alignment.h
│ ├── arch.h
│ ├── assert.cpp
│ ├── assert.h
│ ├── bit_array.h
│ ├── bit_field.h
│ ├── bounded_threadsafe_queue.h
│ ├── concepts.h
│ ├── config.cpp
│ ├── config.h
│ ├── cstring.h
│ ├── debug.h
│ ├── decoder.cpp
│ ├── decoder.h
│ ├── discord_rpc_handler.cpp
│ ├── discord_rpc_handler.h
│ ├── div_ceil.h
│ ├── elf_info.h
│ ├── endian.h
│ ├── enum.h
│ ├── error.cpp
│ ├── error.h
│ ├── fixed_value.h
│ ├── func_traits.h
│ ├── hash.h
│ ├── io_file.cpp
│ ├── io_file.h
│ ├── key_manager.cpp
│ ├── key_manager.h
│ ├── logging/
│ │ ├── backend.cpp
│ │ ├── backend.h
│ │ ├── filter.cpp
│ │ ├── filter.h
│ │ ├── formatter.h
│ │ ├── log.h
│ │ ├── log_entry.h
│ │ ├── text_formatter.cpp
│ │ ├── text_formatter.h
│ │ └── types.h
│ ├── lru_cache.h
│ ├── memory_patcher.cpp
│ ├── memory_patcher.h
│ ├── native_clock.cpp
│ ├── native_clock.h
│ ├── ntapi.cpp
│ ├── ntapi.h
│ ├── number_utils.cpp
│ ├── number_utils.h
│ ├── object_pool.h
│ ├── path_util.cpp
│ ├── path_util.h
│ ├── polyfill_thread.h
│ ├── range_lock.h
│ ├── rdtsc.cpp
│ ├── rdtsc.h
│ ├── recursive_lock.cpp
│ ├── recursive_lock.h
│ ├── scm_rev.cpp.in
│ ├── scm_rev.h
│ ├── scope_exit.h
│ ├── serdes.h
│ ├── sha1.h
│ ├── shared_first_mutex.h
│ ├── signal_context.cpp
│ ├── signal_context.h
│ ├── singleton.h
│ ├── slab_heap.h
│ ├── slot_array.h
│ ├── slot_vector.h
│ ├── spin_lock.cpp
│ ├── spin_lock.h
│ ├── stb.cpp
│ ├── stb.h
│ ├── string_literal.h
│ ├── string_util.cpp
│ ├── string_util.h
│ ├── support/
│ │ └── avdec.h
│ ├── thread.cpp
│ ├── thread.h
│ ├── types.h
│ ├── uint128.h
│ ├── unique_function.h
│ └── va_ctx.h
├── core/
│ ├── address_space.cpp
│ ├── address_space.h
│ ├── aerolib/
│ │ ├── aerolib.cpp
│ │ ├── aerolib.h
│ │ ├── aerolib.inl
│ │ ├── stubs.cpp
│ │ └── stubs.h
│ ├── cpu_patches.cpp
│ ├── cpu_patches.h
│ ├── debug_state.cpp
│ ├── debug_state.h
│ ├── debugger.cpp
│ ├── debugger.h
│ ├── devtools/
│ │ ├── gcn/
│ │ │ ├── gcn_context_regs.cpp
│ │ │ ├── gcn_op_names.cpp
│ │ │ └── gcn_shader_regs.cpp
│ │ ├── help.txt
│ │ ├── layer.cpp
│ │ ├── layer.h
│ │ ├── layer_extra.cpp
│ │ ├── options.cpp
│ │ ├── options.h
│ │ └── widget/
│ │ ├── cmd_list.cpp
│ │ ├── cmd_list.h
│ │ ├── common.h
│ │ ├── frame_dump.cpp
│ │ ├── frame_dump.h
│ │ ├── frame_graph.cpp
│ │ ├── frame_graph.h
│ │ ├── imgui_memory_editor.h
│ │ ├── memory_map.cpp
│ │ ├── memory_map.h
│ │ ├── module_list.cpp
│ │ ├── module_list.h
│ │ ├── reg_popup.cpp
│ │ ├── reg_popup.h
│ │ ├── reg_view.cpp
│ │ ├── reg_view.h
│ │ ├── shader_list.cpp
│ │ ├── shader_list.h
│ │ ├── text_editor.cpp
│ │ └── text_editor.h
│ ├── emulator_state.cpp
│ ├── emulator_state.h
│ ├── file_format/
│ │ ├── npbind.cpp
│ │ ├── npbind.h
│ │ ├── pfs.h
│ │ ├── playgo_chunk.cpp
│ │ ├── playgo_chunk.h
│ │ ├── psf.cpp
│ │ ├── psf.h
│ │ ├── trp.cpp
│ │ └── trp.h
│ ├── file_sys/
│ │ ├── devices/
│ │ │ ├── base_device.cpp
│ │ │ ├── base_device.h
│ │ │ ├── console_device.cpp
│ │ │ ├── console_device.h
│ │ │ ├── deci_tty6_device.cpp
│ │ │ ├── deci_tty6_device.h
│ │ │ ├── ioccom.h
│ │ │ ├── logger.cpp
│ │ │ ├── logger.h
│ │ │ ├── nop_device.h
│ │ │ ├── random_device.cpp
│ │ │ ├── random_device.h
│ │ │ ├── rng_device.cpp
│ │ │ ├── rng_device.h
│ │ │ ├── srandom_device.cpp
│ │ │ ├── srandom_device.h
│ │ │ ├── urandom_device.cpp
│ │ │ └── urandom_device.h
│ │ ├── directories/
│ │ │ ├── base_directory.cpp
│ │ │ ├── base_directory.h
│ │ │ ├── normal_directory.cpp
│ │ │ ├── normal_directory.h
│ │ │ ├── pfs_directory.cpp
│ │ │ └── pfs_directory.h
│ │ ├── file.cpp
│ │ ├── fs.cpp
│ │ └── fs.h
│ ├── ipc/
│ │ ├── ipc.cpp
│ │ └── ipc.h
│ ├── libraries/
│ │ ├── ajm/
│ │ │ ├── ajm.cpp
│ │ │ ├── ajm.h
│ │ │ ├── ajm_aac.cpp
│ │ │ ├── ajm_aac.h
│ │ │ ├── ajm_at9.cpp
│ │ │ ├── ajm_at9.h
│ │ │ ├── ajm_batch.cpp
│ │ │ ├── ajm_batch.h
│ │ │ ├── ajm_context.cpp
│ │ │ ├── ajm_context.h
│ │ │ ├── ajm_error.h
│ │ │ ├── ajm_instance.cpp
│ │ │ ├── ajm_instance.h
│ │ │ ├── ajm_instance_statistics.cpp
│ │ │ ├── ajm_instance_statistics.h
│ │ │ ├── ajm_mp3.cpp
│ │ │ ├── ajm_mp3.h
│ │ │ └── ajm_result.h
│ │ ├── app_content/
│ │ │ ├── app_content.cpp
│ │ │ ├── app_content.h
│ │ │ └── app_content_error.h
│ │ ├── audio/
│ │ │ ├── audioin.cpp
│ │ │ ├── audioin.h
│ │ │ ├── audioin_backend.h
│ │ │ ├── audioin_error.h
│ │ │ ├── audioout.cpp
│ │ │ ├── audioout.h
│ │ │ ├── audioout_backend.h
│ │ │ ├── audioout_error.h
│ │ │ ├── sdl_audio_in.cpp
│ │ │ └── sdl_audio_out.cpp
│ │ ├── audio3d/
│ │ │ ├── audio3d.cpp
│ │ │ ├── audio3d.h
│ │ │ └── audio3d_error.h
│ │ ├── avplayer/
│ │ │ ├── avplayer.cpp
│ │ │ ├── avplayer.h
│ │ │ ├── avplayer_common.cpp
│ │ │ ├── avplayer_common.h
│ │ │ ├── avplayer_data_streamer.h
│ │ │ ├── avplayer_error.h
│ │ │ ├── avplayer_file_streamer.cpp
│ │ │ ├── avplayer_file_streamer.h
│ │ │ ├── avplayer_impl.cpp
│ │ │ ├── avplayer_impl.h
│ │ │ ├── avplayer_source.cpp
│ │ │ ├── avplayer_source.h
│ │ │ ├── avplayer_state.cpp
│ │ │ └── avplayer_state.h
│ │ ├── camera/
│ │ │ ├── camera.cpp
│ │ │ ├── camera.h
│ │ │ └── camera_error.h
│ │ ├── companion/
│ │ │ ├── companion_error.h
│ │ │ ├── companion_httpd.cpp
│ │ │ ├── companion_httpd.h
│ │ │ ├── companion_util.cpp
│ │ │ └── companion_util.h
│ │ ├── disc_map/
│ │ │ ├── disc_map.cpp
│ │ │ ├── disc_map.h
│ │ │ └── disc_map_codes.h
│ │ ├── error_codes.h
│ │ ├── fiber/
│ │ │ ├── fiber.cpp
│ │ │ ├── fiber.h
│ │ │ ├── fiber_context.s
│ │ │ └── fiber_error.h
│ │ ├── font/
│ │ │ ├── font.cpp
│ │ │ ├── font.h
│ │ │ ├── font_error.h
│ │ │ ├── fontft.cpp
│ │ │ └── fontft.h
│ │ ├── game_live_streaming/
│ │ │ ├── gamelivestreaming.cpp
│ │ │ └── gamelivestreaming.h
│ │ ├── gnmdriver/
│ │ │ ├── gnm_error.h
│ │ │ ├── gnmdriver.cpp
│ │ │ ├── gnmdriver.h
│ │ │ └── gnmdriver_init.h
│ │ ├── hmd/
│ │ │ ├── hmd.cpp
│ │ │ ├── hmd.h
│ │ │ ├── hmd_distortion.cpp
│ │ │ ├── hmd_error.h
│ │ │ ├── hmd_reprojection.cpp
│ │ │ ├── hmd_setup_dialog.cpp
│ │ │ └── hmd_setup_dialog.h
│ │ ├── ime/
│ │ │ ├── error_dialog.cpp
│ │ │ ├── error_dialog.h
│ │ │ ├── ime.cpp
│ │ │ ├── ime.h
│ │ │ ├── ime_common.h
│ │ │ ├── ime_dialog.cpp
│ │ │ ├── ime_dialog.h
│ │ │ ├── ime_dialog_ui.cpp
│ │ │ ├── ime_dialog_ui.h
│ │ │ ├── ime_error.h
│ │ │ ├── ime_ui.cpp
│ │ │ └── ime_ui.h
│ │ ├── jpeg/
│ │ │ ├── jpeg_error.h
│ │ │ ├── jpegenc.cpp
│ │ │ └── jpegenc.h
│ │ ├── kernel/
│ │ │ ├── aio.cpp
│ │ │ ├── aio.h
│ │ │ ├── debug.cpp
│ │ │ ├── debug.h
│ │ │ ├── equeue.cpp
│ │ │ ├── equeue.h
│ │ │ ├── file_system.cpp
│ │ │ ├── file_system.h
│ │ │ ├── kernel.cpp
│ │ │ ├── kernel.h
│ │ │ ├── memory.cpp
│ │ │ ├── memory.h
│ │ │ ├── orbis_error.h
│ │ │ ├── posix_error.h
│ │ │ ├── process.cpp
│ │ │ ├── process.h
│ │ │ ├── sync/
│ │ │ │ ├── mutex.cpp
│ │ │ │ ├── mutex.h
│ │ │ │ └── semaphore.h
│ │ │ ├── threads/
│ │ │ │ ├── condvar.cpp
│ │ │ │ ├── event_flag.cpp
│ │ │ │ ├── exception.cpp
│ │ │ │ ├── exception.h
│ │ │ │ ├── mutex.cpp
│ │ │ │ ├── pthread.cpp
│ │ │ │ ├── pthread.h
│ │ │ │ ├── pthread_attr.cpp
│ │ │ │ ├── pthread_clean.cpp
│ │ │ │ ├── pthread_spec.cpp
│ │ │ │ ├── rwlock.cpp
│ │ │ │ ├── semaphore.cpp
│ │ │ │ ├── sleepq.cpp
│ │ │ │ ├── sleepq.h
│ │ │ │ ├── stack.cpp
│ │ │ │ ├── tcb.cpp
│ │ │ │ ├── thread_state.cpp
│ │ │ │ └── thread_state.h
│ │ │ ├── threads.cpp
│ │ │ ├── threads.h
│ │ │ ├── time.cpp
│ │ │ └── time.h
│ │ ├── libc_internal/
│ │ │ ├── libc_internal.cpp
│ │ │ ├── libc_internal.h
│ │ │ ├── libc_internal_io.cpp
│ │ │ ├── libc_internal_io.h
│ │ │ ├── libc_internal_math.cpp
│ │ │ ├── libc_internal_math.h
│ │ │ ├── libc_internal_memory.cpp
│ │ │ ├── libc_internal_memory.h
│ │ │ ├── libc_internal_str.cpp
│ │ │ ├── libc_internal_str.h
│ │ │ ├── libc_internal_threads.cpp
│ │ │ ├── libc_internal_threads.h
│ │ │ └── printf.h
│ │ ├── libpng/
│ │ │ ├── pngdec.cpp
│ │ │ ├── pngdec.h
│ │ │ ├── pngdec_error.h
│ │ │ ├── pngenc.cpp
│ │ │ ├── pngenc.h
│ │ │ └── pngenc_error.h
│ │ ├── libs.cpp
│ │ ├── libs.h
│ │ ├── mouse/
│ │ │ ├── mouse.cpp
│ │ │ └── mouse.h
│ │ ├── move/
│ │ │ ├── move.cpp
│ │ │ ├── move.h
│ │ │ └── move_error.h
│ │ ├── network/
│ │ │ ├── http.cpp
│ │ │ ├── http.h
│ │ │ ├── http2.cpp
│ │ │ ├── http2.h
│ │ │ ├── http_error.h
│ │ │ ├── net.cpp
│ │ │ ├── net.h
│ │ │ ├── net_ctl_codes.h
│ │ │ ├── net_ctl_obj.cpp
│ │ │ ├── net_ctl_obj.h
│ │ │ ├── net_epoll.cpp
│ │ │ ├── net_epoll.h
│ │ │ ├── net_error.h
│ │ │ ├── net_obj.cpp
│ │ │ ├── net_obj.h
│ │ │ ├── net_resolver.cpp
│ │ │ ├── net_resolver.h
│ │ │ ├── net_util.cpp
│ │ │ ├── net_util.h
│ │ │ ├── netctl.cpp
│ │ │ ├── netctl.h
│ │ │ ├── p2p_sockets.cpp
│ │ │ ├── posix_sockets.cpp
│ │ │ ├── sockets.h
│ │ │ ├── ssl.cpp
│ │ │ ├── ssl.h
│ │ │ ├── ssl2.cpp
│ │ │ ├── ssl2.h
│ │ │ ├── ssl2_error.h
│ │ │ ├── sys_net.cpp
│ │ │ ├── sys_net.h
│ │ │ └── unix_sockets.cpp
│ │ ├── ngs2/
│ │ │ ├── ngs2.cpp
│ │ │ ├── ngs2.h
│ │ │ ├── ngs2_custom.cpp
│ │ │ ├── ngs2_custom.h
│ │ │ ├── ngs2_eq.cpp
│ │ │ ├── ngs2_eq.h
│ │ │ ├── ngs2_error.h
│ │ │ ├── ngs2_geom.cpp
│ │ │ ├── ngs2_geom.h
│ │ │ ├── ngs2_impl.cpp
│ │ │ ├── ngs2_impl.h
│ │ │ ├── ngs2_mastering.cpp
│ │ │ ├── ngs2_mastering.h
│ │ │ ├── ngs2_pan.cpp
│ │ │ ├── ngs2_pan.h
│ │ │ ├── ngs2_report.cpp
│ │ │ ├── ngs2_report.h
│ │ │ ├── ngs2_reverb.cpp
│ │ │ ├── ngs2_reverb.h
│ │ │ ├── ngs2_sampler.cpp
│ │ │ ├── ngs2_sampler.h
│ │ │ ├── ngs2_submixer.cpp
│ │ │ └── ngs2_submixer.h
│ │ ├── np/
│ │ │ ├── np_auth.cpp
│ │ │ ├── np_auth.h
│ │ │ ├── np_auth_error.h
│ │ │ ├── np_commerce.cpp
│ │ │ ├── np_commerce.h
│ │ │ ├── np_common.cpp
│ │ │ ├── np_common.h
│ │ │ ├── np_common_error.h
│ │ │ ├── np_error.h
│ │ │ ├── np_manager.cpp
│ │ │ ├── np_manager.h
│ │ │ ├── np_matching2.cpp
│ │ │ ├── np_matching2.h
│ │ │ ├── np_partner.cpp
│ │ │ ├── np_partner.h
│ │ │ ├── np_partner_error.h
│ │ │ ├── np_party.cpp
│ │ │ ├── np_party.h
│ │ │ ├── np_party_error.h
│ │ │ ├── np_profile_dialog.cpp
│ │ │ ├── np_profile_dialog.h
│ │ │ ├── np_score.cpp
│ │ │ ├── np_score.h
│ │ │ ├── np_sns_facebook_dialog.cpp
│ │ │ ├── np_sns_facebook_dialog.h
│ │ │ ├── np_trophy.cpp
│ │ │ ├── np_trophy.h
│ │ │ ├── np_trophy_error.h
│ │ │ ├── np_tus.cpp
│ │ │ ├── np_tus.h
│ │ │ ├── np_types.h
│ │ │ ├── np_web_api.cpp
│ │ │ ├── np_web_api.h
│ │ │ ├── np_web_api2.cpp
│ │ │ ├── np_web_api2.h
│ │ │ ├── np_web_api2_error.h
│ │ │ ├── np_web_api_error.h
│ │ │ ├── np_web_api_internal.cpp
│ │ │ ├── np_web_api_internal.h
│ │ │ ├── object_manager.h
│ │ │ ├── trophy_ui.cpp
│ │ │ └── trophy_ui.h
│ │ ├── pad/
│ │ │ ├── pad.cpp
│ │ │ ├── pad.h
│ │ │ └── pad_errors.h
│ │ ├── playgo/
│ │ │ ├── playgo.cpp
│ │ │ ├── playgo.h
│ │ │ ├── playgo_dialog.cpp
│ │ │ ├── playgo_dialog.h
│ │ │ └── playgo_types.h
│ │ ├── random/
│ │ │ ├── random.cpp
│ │ │ ├── random.h
│ │ │ └── random_error.h
│ │ ├── razor_cpu/
│ │ │ ├── razor_cpu.cpp
│ │ │ └── razor_cpu.h
│ │ ├── remote_play/
│ │ │ ├── remoteplay.cpp
│ │ │ └── remoteplay.h
│ │ ├── rtc/
│ │ │ ├── rtc.cpp
│ │ │ ├── rtc.h
│ │ │ └── rtc_error.h
│ │ ├── rudp/
│ │ │ ├── rudp.cpp
│ │ │ └── rudp.h
│ │ ├── save_data/
│ │ │ ├── dialog/
│ │ │ │ ├── savedatadialog.cpp
│ │ │ │ ├── savedatadialog.h
│ │ │ │ ├── savedatadialog_ui.cpp
│ │ │ │ └── savedatadialog_ui.h
│ │ │ ├── save_backup.cpp
│ │ │ ├── save_backup.h
│ │ │ ├── save_instance.cpp
│ │ │ ├── save_instance.h
│ │ │ ├── save_memory.cpp
│ │ │ ├── save_memory.h
│ │ │ ├── savedata.cpp
│ │ │ ├── savedata.h
│ │ │ └── savedata_error.h
│ │ ├── screenshot/
│ │ │ ├── screenshot.cpp
│ │ │ └── screenshot.h
│ │ ├── share_play/
│ │ │ ├── shareplay.cpp
│ │ │ └── shareplay.h
│ │ ├── signin_dialog/
│ │ │ ├── signindialog.cpp
│ │ │ └── signindialog.h
│ │ ├── sysmodule/
│ │ │ ├── sysmodule.cpp
│ │ │ ├── sysmodule.h
│ │ │ ├── sysmodule_error.h
│ │ │ ├── sysmodule_internal.cpp
│ │ │ ├── sysmodule_internal.h
│ │ │ └── sysmodule_table.h
│ │ ├── system/
│ │ │ ├── commondialog.cpp
│ │ │ ├── commondialog.h
│ │ │ ├── msgdialog.cpp
│ │ │ ├── msgdialog.h
│ │ │ ├── msgdialog_ui.cpp
│ │ │ ├── msgdialog_ui.h
│ │ │ ├── posix.cpp
│ │ │ ├── posix.h
│ │ │ ├── systemservice.cpp
│ │ │ ├── systemservice.h
│ │ │ ├── systemservice_error.h
│ │ │ ├── userservice.cpp
│ │ │ ├── userservice.h
│ │ │ └── userservice_error.h
│ │ ├── system_gesture/
│ │ │ ├── system_gesture.cpp
│ │ │ └── system_gesture.h
│ │ ├── ulobjmgr/
│ │ │ ├── ulobjmgr.cpp
│ │ │ └── ulobjmgr.h
│ │ ├── usbd/
│ │ │ ├── emulated/
│ │ │ │ ├── dimensions.cpp
│ │ │ │ ├── dimensions.h
│ │ │ │ ├── infinity.cpp
│ │ │ │ ├── infinity.h
│ │ │ │ ├── skylander.cpp
│ │ │ │ └── skylander.h
│ │ │ ├── usb_backend.h
│ │ │ ├── usbd.cpp
│ │ │ └── usbd.h
│ │ ├── videodec/
│ │ │ ├── videodec.cpp
│ │ │ ├── videodec.h
│ │ │ ├── videodec2.cpp
│ │ │ ├── videodec2.h
│ │ │ ├── videodec2_avc.h
│ │ │ ├── videodec2_impl.cpp
│ │ │ ├── videodec2_impl.h
│ │ │ ├── videodec_error.h
│ │ │ ├── videodec_impl.cpp
│ │ │ └── videodec_impl.h
│ │ ├── videoout/
│ │ │ ├── buffer.h
│ │ │ ├── driver.cpp
│ │ │ ├── driver.h
│ │ │ ├── video_out.cpp
│ │ │ ├── video_out.h
│ │ │ └── videoout_error.h
│ │ ├── voice/
│ │ │ ├── voice.cpp
│ │ │ └── voice.h
│ │ ├── vr_tracker/
│ │ │ ├── vr_tracker.cpp
│ │ │ ├── vr_tracker.h
│ │ │ └── vr_tracker_error.h
│ │ ├── web_browser_dialog/
│ │ │ ├── webbrowserdialog.cpp
│ │ │ └── webbrowserdialog.h
│ │ └── zlib/
│ │ ├── zlib.cpp
│ │ ├── zlib_error.h
│ │ └── zlib_sce.h
│ ├── linker.cpp
│ ├── linker.h
│ ├── loader/
│ │ ├── dwarf.cpp
│ │ ├── dwarf.h
│ │ ├── elf.cpp
│ │ ├── elf.h
│ │ ├── symbols_resolver.cpp
│ │ └── symbols_resolver.h
│ ├── memory.cpp
│ ├── memory.h
│ ├── module.cpp
│ ├── module.h
│ ├── platform.h
│ ├── signals.cpp
│ ├── signals.h
│ ├── thread.cpp
│ ├── thread.h
│ ├── tls.cpp
│ └── tls.h
├── emulator.cpp
├── emulator.h
├── images/
│ └── shadPS4.icns
├── imgui/
│ ├── imgui_config.h
│ ├── imgui_layer.h
│ ├── imgui_std.h
│ ├── imgui_texture.h
│ └── renderer/
│ ├── CMakeLists.txt
│ ├── imgui_core.cpp
│ ├── imgui_core.h
│ ├── imgui_impl_sdl3.cpp
│ ├── imgui_impl_sdl3.h
│ ├── imgui_impl_vulkan.cpp
│ ├── imgui_impl_vulkan.h
│ ├── texture_manager.cpp
│ └── texture_manager.h
├── input/
│ ├── controller.cpp
│ ├── controller.h
│ ├── input_handler.cpp
│ ├── input_handler.h
│ ├── input_mouse.cpp
│ └── input_mouse.h
├── main.cpp
├── sdl_window.cpp
├── sdl_window.h
├── shader_recompiler/
│ ├── backend/
│ │ ├── bindings.h
│ │ └── spirv/
│ │ ├── emit_spirv.cpp
│ │ ├── emit_spirv.h
│ │ ├── emit_spirv_atomic.cpp
│ │ ├── emit_spirv_barriers.cpp
│ │ ├── emit_spirv_bitwise_conversion.cpp
│ │ ├── emit_spirv_bounds.h
│ │ ├── emit_spirv_composite.cpp
│ │ ├── emit_spirv_context_get_set.cpp
│ │ ├── emit_spirv_convert.cpp
│ │ ├── emit_spirv_floating_point.cpp
│ │ ├── emit_spirv_image.cpp
│ │ ├── emit_spirv_instructions.h
│ │ ├── emit_spirv_integer.cpp
│ │ ├── emit_spirv_logical.cpp
│ │ ├── emit_spirv_quad_rect.cpp
│ │ ├── emit_spirv_quad_rect.h
│ │ ├── emit_spirv_select.cpp
│ │ ├── emit_spirv_shared_memory.cpp
│ │ ├── emit_spirv_special.cpp
│ │ ├── emit_spirv_undefined.cpp
│ │ ├── emit_spirv_warp.cpp
│ │ ├── spirv_emit_context.cpp
│ │ └── spirv_emit_context.h
│ ├── frontend/
│ │ ├── control_flow_graph.cpp
│ │ ├── control_flow_graph.h
│ │ ├── copy_shader.cpp
│ │ ├── copy_shader.h
│ │ ├── decode.cpp
│ │ ├── decode.h
│ │ ├── fetch_shader.cpp
│ │ ├── fetch_shader.h
│ │ ├── format.cpp
│ │ ├── instruction.cpp
│ │ ├── instruction.h
│ │ ├── opcodes.h
│ │ ├── structured_control_flow.cpp
│ │ ├── structured_control_flow.h
│ │ ├── tessellation.h
│ │ └── translate/
│ │ ├── data_share.cpp
│ │ ├── export.cpp
│ │ ├── scalar_alu.cpp
│ │ ├── scalar_flow.cpp
│ │ ├── scalar_memory.cpp
│ │ ├── translate.cpp
│ │ ├── translate.h
│ │ ├── vector_alu.cpp
│ │ ├── vector_interpolation.cpp
│ │ └── vector_memory.cpp
│ ├── info.h
│ ├── ir/
│ │ ├── abstract_syntax_list.cpp
│ │ ├── abstract_syntax_list.h
│ │ ├── attribute.cpp
│ │ ├── attribute.h
│ │ ├── basic_block.cpp
│ │ ├── basic_block.h
│ │ ├── breadth_first_search.h
│ │ ├── condition.h
│ │ ├── debug_print.h
│ │ ├── ir_emitter.cpp
│ │ ├── ir_emitter.h
│ │ ├── microinstruction.cpp
│ │ ├── opcodes.cpp
│ │ ├── opcodes.h
│ │ ├── opcodes.inc
│ │ ├── operand_helper.h
│ │ ├── passes/
│ │ │ ├── constant_propagation_pass.cpp
│ │ │ ├── constant_propogation.h
│ │ │ ├── dead_code_elimination_pass.cpp
│ │ │ ├── flatten_extended_userdata_pass.cpp
│ │ │ ├── hull_shader_transform.cpp
│ │ │ ├── identity_removal_pass.cpp
│ │ │ ├── inject_clip_distance_attributes.cpp
│ │ │ ├── ir_passes.h
│ │ │ ├── lower_buffer_format_to_raw.cpp
│ │ │ ├── lower_fp64_to_fp32.cpp
│ │ │ ├── readlane_elimination_pass.cpp
│ │ │ ├── resource_tracking_pass.cpp
│ │ │ ├── ring_access_elimination.cpp
│ │ │ ├── shader_info_collection_pass.cpp
│ │ │ ├── shared_memory_barrier_pass.cpp
│ │ │ ├── shared_memory_simplify_pass.cpp
│ │ │ ├── shared_memory_to_storage_pass.cpp
│ │ │ ├── srt.h
│ │ │ └── ssa_rewrite_pass.cpp
│ │ ├── patch.cpp
│ │ ├── patch.h
│ │ ├── pattern_matching.h
│ │ ├── position.h
│ │ ├── post_order.cpp
│ │ ├── post_order.h
│ │ ├── program.cpp
│ │ ├── program.h
│ │ ├── reg.h
│ │ ├── reinterpret.h
│ │ ├── srt_gvn_table.h
│ │ ├── type.cpp
│ │ ├── type.h
│ │ ├── value.cpp
│ │ └── value.h
│ ├── params.h
│ ├── profile.h
│ ├── recompiler.cpp
│ ├── recompiler.h
│ ├── resource.h
│ ├── runtime_info.h
│ └── specialization.h
├── shadps4.rc
└── video_core/
├── amdgpu/
│ ├── cb_db_extent.h
│ ├── liverpool.cpp
│ ├── liverpool.h
│ ├── pixel_format.cpp
│ ├── pixel_format.h
│ ├── pm4_cmds.h
│ ├── pm4_opcodes.h
│ ├── regs.cpp
│ ├── regs.h
│ ├── regs_color.h
│ ├── regs_depth.h
│ ├── regs_primitive.h
│ ├── regs_shader.h
│ ├── regs_texture.h
│ ├── regs_vertex.h
│ ├── resource.h
│ ├── tiling.cpp
│ └── tiling.h
├── buffer_cache/
│ ├── buffer.cpp
│ ├── buffer.h
│ ├── buffer_cache.cpp
│ ├── buffer_cache.h
│ ├── fault_manager.cpp
│ ├── fault_manager.h
│ ├── memory_tracker.h
│ ├── range_set.h
│ ├── region_definitions.h
│ └── region_manager.h
├── cache_storage.cpp
├── cache_storage.h
├── host_shaders/
│ ├── CMakeLists.txt
│ ├── StringShaderHeader.cmake
│ ├── color_to_ms_depth.frag
│ ├── detilers/
│ │ ├── display_micro_64bpp.comp
│ │ ├── macro_32bpp.comp
│ │ ├── macro_64bpp.comp
│ │ ├── macro_8bpp.comp
│ │ ├── micro_128bpp.comp
│ │ ├── micro_16bpp.comp
│ │ ├── micro_32bpp.comp
│ │ ├── micro_64bpp.comp
│ │ └── micro_8bpp.comp
│ ├── fault_buffer_process.comp
│ ├── fs_tri.vert
│ ├── fsr/
│ │ ├── ffx_a.h
│ │ └── ffx_fsr1.h
│ ├── fsr.comp
│ ├── ms_image_blit.frag
│ ├── post_process.frag
│ ├── source_shader.h.in
│ └── tiling.comp
├── multi_level_page_table.h
├── page_manager.cpp
├── page_manager.h
├── renderdoc.cpp
├── renderdoc.h
├── renderer_vulkan/
│ ├── host_passes/
│ │ ├── fsr_pass.cpp
│ │ ├── fsr_pass.h
│ │ ├── pp_pass.cpp
│ │ └── pp_pass.h
│ ├── liverpool_to_vk.cpp
│ ├── liverpool_to_vk.h
│ ├── vk_common.cpp
│ ├── vk_common.h
│ ├── vk_compute_pipeline.cpp
│ ├── vk_compute_pipeline.h
│ ├── vk_graphics_pipeline.cpp
│ ├── vk_graphics_pipeline.h
│ ├── vk_instance.cpp
│ ├── vk_instance.h
│ ├── vk_master_semaphore.cpp
│ ├── vk_master_semaphore.h
│ ├── vk_pipeline_cache.cpp
│ ├── vk_pipeline_cache.h
│ ├── vk_pipeline_common.cpp
│ ├── vk_pipeline_common.h
│ ├── vk_pipeline_serialization.cpp
│ ├── vk_pipeline_serialization.h
│ ├── vk_platform.cpp
│ ├── vk_platform.h
│ ├── vk_presenter.cpp
│ ├── vk_presenter.h
│ ├── vk_rasterizer.cpp
│ ├── vk_rasterizer.h
│ ├── vk_resource_pool.cpp
│ ├── vk_resource_pool.h
│ ├── vk_scheduler.cpp
│ ├── vk_scheduler.h
│ ├── vk_shader_hle.cpp
│ ├── vk_shader_hle.h
│ ├── vk_shader_util.cpp
│ ├── vk_shader_util.h
│ ├── vk_swapchain.cpp
│ └── vk_swapchain.h
└── texture_cache/
├── blit_helper.cpp
├── blit_helper.h
├── host_compatibility.cpp
├── host_compatibility.h
├── image.cpp
├── image.h
├── image_info.cpp
├── image_info.h
├── image_view.cpp
├── image_view.h
├── sampler.cpp
├── sampler.h
├── texture_cache.cpp
├── texture_cache.h
├── tile.h
├── tile_manager.cpp
├── tile_manager.h
└── types.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .ci/clang-format.sh
================================================
#!/bin/bash -ex
# SPDX-FileCopyrightText: 2023 Citra Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
if grep -nrI '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .ci* dist/*.desktop \
dist/*.svg dist/*.xml; then
echo Trailing whitespace found, aborting
exit 1
fi
# Default clang-format points to default 3.5 version one
CLANG_FORMAT=clang-format-19
$CLANG_FORMAT --version
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
# Get list of every file modified in this pull request
files_to_lint="$(git diff --name-only --diff-filter=ACMRTUXB $COMMIT_RANGE | grep '^src/[^.]*[.]\(cpp\|h\)$' || true)"
else
# Check everything for branch pushes
files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')"
fi
# Turn off tracing for this because it's too verbose
set +x
for f in $files_to_lint; do
d=$(diff -u "$f" <($CLANG_FORMAT "$f") || true)
if ! [ -z "$d" ]; then
echo "!!! $f not compliant to coding style, here is the fix:"
echo "$d"
fail=1
fi
done
set -x
if [ "$fail" = 1 ]; then
exit 1
fi
================================================
FILE: .github/FUNDING.yml
================================================
ko_fi: shadps4
================================================
FILE: .github/ISSUE_TEMPLATE/app-bug-report.yaml
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
name: Application Bug Report
description: Problem with the application itself (ie. bad file path handling, UX issue)
title: "[APP BUG]: "
body:
- type: markdown
attributes:
value: |
## Important: Read First
**Please do not make support requests on GitHub. Our issue tracker is for tracking bugs and feature requests only.
If you have a support request or are unsure about the nature of your issue please contact us on [discord](https://discord.gg/bFJxfftGW6).**
Please make an effort to make sure your issue isn't already reported.
Do not create issues involving software piracy, our rules specifically prohibit this. Otherwise your issue will be closed and you will be banned in this repository.
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have searched for a similar issue in this repository and did not find one.
required: true
- label: I am using an official build obtained from [releases](https://github.com/shadps4-emu/shadPS4/releases) or updated one of those builds using its in-app updater.
required: true
- type: textarea
id: desc
attributes:
label: Describe the Bug
description: "A clear and concise description of what the bug is"
validations:
required: true
- type: textarea
id: repro
attributes:
label: Reproduction Steps
description: "Detailed steps to reproduce the behavior"
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: "A clear and concise description of what you expected to happen"
validations:
required: false
- type: input
id: os
attributes:
label: Specify OS Version
placeholder: "Example: Windows 11, Arch Linux, MacOS 15"
validations:
required: true
- type: input
id: cpu
attributes:
label: CPU
placeholder: "Example: Intel Core i7-8700"
validations:
required: true
- type: input
id: gpu
attributes:
label: GPU
placeholder: "Example: nVidia GTX 1650"
validations:
required: true
- type: input
id: ram
attributes:
label: Amount of RAM in GB
placeholder: "Example: 16 GB"
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
blank_issues_enabled: false
contact_links:
- name: Discord
url: https://discord.gg/bFJxfftGW6
about: Get direct support and hang out with us
- name: Wiki
url: https://github.com/shadps4-emu/shadPS4/wiki
about: Information, guides, etc.
================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yaml
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
name: Feature Request
description: Suggest a new feature or improve an existing one
title: "[Feature Request]: "
body:
- type: markdown
attributes:
value: |
## Important: Read First
Please make an effort to make sure your issue isn't already reported.
Do not create issues involving software piracy, our rules specifically prohibit this. Otherwise your issue will be closed and you will be banned in this repository.
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have searched for a similar issue in this repository and did not find one.
required: true
- type: textarea
id: desc
attributes:
label: Description
description: |
A concise description of the feature you want
Include step by step examples of how the feature should work under various circumstances
validations:
required: true
- type: textarea
id: reason
attributes:
label: Reason
description: |
Give a reason why you want this feature
- How will it make things easier for you?
- How does this feature help your enjoyment of the emulator?
- What does it provide that isn't being provided currently?
validations:
required: true
- type: textarea
id: examples
attributes:
label: Examples
description: |
Provide examples of the feature as implemented by other software
Include screenshots or video if you like to help demonstrate how you'd like this feature to work
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/game-bug-report.yaml
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
name: Game Emulation Bug Report
description: Problem in a game (ie. graphical artifacts, crashes, etc.)
title: "[GAME BUG]: "
body:
- type: markdown
attributes:
value: |
## Important: Read First
**Please do not make support requests on GitHub. Our issue tracker is for tracking bugs and feature requests only.
If you have a support request or are unsure about the nature of your issue please contact us on [discord](https://discord.gg/bFJxfftGW6).**
This repository does not provide support for modded games. You should perform and test a clean game installation before submitting an issue.
This repository does not provide support for game patches. If you are having issues with patches please refer to [Cheats and Patches Repository](https://github.com/shadps4-emu/ps4_cheats).
Before submitting an issue please check [Game Compatibility Repository](https://github.com/shadps4-compatibility/shadps4-game-compatibility) for the information about the status of the game.
Please make an effort to make sure your issue isn't already reported.
Do not create issues involving software piracy, our rules specifically prohibit this. Otherwise your issue will be closed and you will be banned in this repository.
- type: checkboxes
id: checklist
attributes:
label: Checklist (we expect you to perform these steps before opening the issue)
options:
- label: I have searched for a similar issue in this repository and did not find one.
required: true
- label: I am using an official build obtained from [releases](https://github.com/shadps4-emu/shadPS4/releases) or updated one of those builds using its in-app updater.
required: true
- label: I have re-dumped the game and performed a clean install without mods and the issue is still present.
required: true
- label: I have disabled all patches and cheats and the issue is still present.
required: true
- label: I have all the required [system modules](https://github.com/shadps4-emu/shadPS4/wiki/I.-Quick-start-%5BUsers%5D#4-dumping-firmware-modules) installed.
required: true
- type: textarea
id: desc
attributes:
label: Describe the Bug
description: "A clear and concise description of what the bug is"
validations:
required: true
- type: textarea
id: repro
attributes:
label: Reproduction Steps
description: "Detailed steps to reproduce the behavior"
validations:
required: true
- type: input
id: os
attributes:
label: Specify OS Version
placeholder: "Example: Windows 11, Arch Linux, MacOS 15"
validations:
required: true
- type: input
id: cpu
attributes:
label: CPU
placeholder: "Example: Intel Core i7-8700"
validations:
required: true
- type: input
id: gpu
attributes:
label: GPU
placeholder: "Example: nVidia GTX 1650"
validations:
required: true
- type: input
id: ram
attributes:
label: Amount of RAM in GB
placeholder: "Example: 16 GB"
validations:
required: true
- type: input
id: vram
attributes:
label: Amount of VRAM in GB
placeholder: "Example: 8 GB"
validations:
required: true
- type: textarea
id: logs
attributes:
label: "Log File"
description: Drag and drop the log file here. It can be found by right clicking on a game name -> Open Folder... -> Open Log Folder. Make sure that the log type is set to `sync`.
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/rfc.yaml
================================================
# SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# Docs - https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema
name: Request For Comments (RFC)
description: Ask for feedback on major architectural changes or design choices
title: "[RFC]: "
labels: ["RFC"]
body:
- type: markdown
attributes:
value: |
## Important: Read First
RFCs are for major architectural changes, design direction, or changes that benefit from structured discussion before merge.
Please make an effort to search for an existing RFC or issue before opening a new one.
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have searched for a similar RFC or issue in this repository and did not find one.
required: true
- type: textarea
id: motivation
attributes:
label: Motivation
description: |
Explain the problem this RFC is trying to solve.
Describe why the current design is insufficient and why this change is worth discussing now.
validations:
required: true
- type: textarea
id: proposed_change
attributes:
label: Proposed Change
description: |
Describe the proposed change in enough detail for maintainers and contributors to evaluate it.
Include the high-level design, affected areas, and any important constraints.
validations:
required: true
- type: textarea
id: feedback_period
attributes:
label: Feedback Period
description: |
State the intended review window for this RFC.
Example: one week, two weeks, or until specific maintainers have reviewed it.
placeholder: "Example: 1 week"
validations:
required: false
- type: textarea
id: cc_list
attributes:
label: CC List
description: |
List any maintainers or contributors you want to explicitly notify for feedback.
validations:
required: false
- type: textarea
id: additional_context
attributes:
label: Any Other Things
description: |
Add any other relevant context, tradeoffs, diagrams, migration notes, or links to related work.
validations:
required: false
================================================
FILE: .github/linux-appimage-sdl.sh
================================================
# SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
#!/bin/bash
if [[ -z $GITHUB_WORKSPACE ]]; then
GITHUB_WORKSPACE="${PWD%/*}"
fi
# Prepare Tools for building the AppImage
wget --waitretry=3 --read-timeout=20 --timeout=15 --tries=5 -q https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
wget --waitretry=3 --read-timeout=20 --timeout=15 --tries=5 -q https://github.com/linuxdeploy/linuxdeploy-plugin-checkrt/releases/download/continuous/linuxdeploy-plugin-checkrt-x86_64.sh
chmod a+x linuxdeploy-x86_64.AppImage
chmod a+x linuxdeploy-plugin-checkrt-x86_64.sh
# Build AppImage
./linuxdeploy-x86_64.AppImage --appdir AppDir
./linuxdeploy-plugin-checkrt-x86_64.sh --appdir AppDir
./linuxdeploy-x86_64.AppImage --appdir AppDir -d "$GITHUB_WORKSPACE"/dist/net.shadps4.shadPS4.desktop -e "$GITHUB_WORKSPACE"/build/shadps4 -i "$GITHUB_WORKSPACE"/src/images/net.shadps4.shadPS4.svg --output appimage
mv shadPS4-x86_64.AppImage Shadps4-sdl.AppImage
================================================
FILE: .github/workflows/build.yml
================================================
# SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
name: Build and Release
on:
push:
paths-ignore:
- "documents/**"
- "**/*.md"
pull_request:
paths-ignore:
- "documents/**"
- "**/*.md"
concurrency:
group: ci-${{ github.event_name }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'push' }}
env:
BUILD_TYPE: Release
jobs:
reuse:
runs-on: ubuntu-24.04
continue-on-error: true
steps:
- uses: actions/checkout@v6
- uses: fsfe/reuse-action@v6
clang-format:
runs-on: ubuntu-24.04
continue-on-error: true
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install
run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository 'deb http://apt.llvm.org/noble/ llvm-toolchain-noble-19 main'
sudo apt update
sudo apt install clang-format-19
- name: Build
env:
COMMIT_RANGE: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
run: ./.ci/clang-format.sh
get-info:
runs-on: ubuntu-24.04
outputs:
date: ${{ steps.vars.outputs.date }}
shorthash: ${{ steps.vars.outputs.shorthash }}
fullhash: ${{ steps.vars.outputs.fullhash }}
steps:
- uses: actions/checkout@v6
- name: Get date and git hash
id: vars
run: |
echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
echo "shorthash=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
echo "fullhash=$(git rev-parse HEAD)" >> $GITHUB_ENV
echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
echo "shorthash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "fullhash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
windows-sdl:
runs-on: windows-2025
needs: get-info
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Cache CMake Configuration
uses: actions/cache@v5
env:
cache-name: ${{ runner.os }}-sdl-ninja-cache-cmake-configuration
with:
path: |
${{github.workspace}}/build
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
restore-keys: |
${{ env.cache-name }}-
- name: Cache CMake Build
uses: hendrikmuhs/ccache-action@v1.2.21
env:
cache-name: ${{ runner.os }}-sdl-cache-cmake-build
with:
append-timestamp: false
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
- name: Configure CMake
run: cmake --fresh -G Ninja -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE=ON -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel $env:NUMBER_OF_PROCESSORS
- name: Upload Windows SDL artifact
uses: actions/upload-artifact@v7
with:
name: shadps4-win64-sdl-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}
path: ${{github.workspace}}/build/shadPS4.exe
macos-sdl:
runs-on: macos-15
needs: get-info
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Setup latest Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest
- name: Cache CMake Configuration
uses: actions/cache@v5
env:
cache-name: ${{ runner.os }}-sdl-cache-cmake-configuration
with:
path: |
${{github.workspace}}/build
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
restore-keys: |
${{ env.cache-name }}-
- name: Cache CMake Build
uses: hendrikmuhs/ccache-action@v1.2.21
env:
cache-name: ${{runner.os}}-sdl-cache-cmake-build
with:
append-timestamp: false
create-symlink: true
key: ${{env.cache-name}}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
variant: sccache
- name: Configure CMake
run: cmake --fresh -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE=ON -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel $(sysctl -n hw.ncpu)
- name: Package and Upload macOS SDL artifact
run: |
mkdir upload
mv ${{github.workspace}}/build/shadps4 upload
mv ${{github.workspace}}/build/MoltenVK_icd.json upload
mv ${{github.workspace}}/build/libMoltenVK.dylib upload
- uses: actions/upload-artifact@v7
with:
name: shadps4-macos-sdl-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}
path: upload/
linux-sdl:
runs-on: ubuntu-24.04
needs: get-info
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Add LLVM repository
run: |
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository 'deb http://apt.llvm.org/noble/ llvm-toolchain-noble-19 main'
- name: Install dependencies
run: sudo apt-get update && sudo apt install -y libx11-dev libxext-dev libwayland-dev libdecor-0-dev libxkbcommon-dev libglfw3-dev libgles2-mesa-dev libfuse2 clang-19 mold build-essential libasound2-dev libpulse-dev libopenal-dev libudev-dev libxcursor-dev libxi-dev libxss-dev libxtst-dev
- name: Cache CMake Configuration
uses: actions/cache@v5
env:
cache-name: ${{ runner.os }}-sdl-cache-cmake-configuration
with:
path: |
${{github.workspace}}/build
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
restore-keys: |
${{ env.cache-name }}-
- name: Cache CMake Build
uses: hendrikmuhs/ccache-action@v1.2.21
env:
cache-name: ${{ runner.os }}-sdl-cache-cmake-build
with:
append-timestamp: false
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
- name: Configure CMake
run: cmake --fresh -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE=ON -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=mold" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel $(nproc)
- name: Package and Upload Linux(ubuntu64) SDL artifact
run: |
ls -la ${{ github.workspace }}/build/shadps4
- uses: actions/upload-artifact@v7
with:
name: shadps4-ubuntu64-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}
path: ${{ github.workspace }}/build/shadps4
- name: Run AppImage packaging script
run: ./.github/linux-appimage-sdl.sh
- name: Package and Upload Linux SDL artifact
run: |
tar cf shadps4-linux-sdl.tar.gz -C ${{github.workspace}}/build shadps4
- uses: actions/upload-artifact@v7
with:
name: shadps4-linux-sdl-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}
path: Shadps4-sdl.AppImage
linux-sdl-gcc:
runs-on: ubuntu-24.04
needs: get-info
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install dependencies
run: sudo apt-get update && sudo apt install -y libx11-dev libxext-dev libwayland-dev libdecor-0-dev libxkbcommon-dev libglfw3-dev libgles2-mesa-dev libfuse2 gcc-14 mold build-essential libasound2-dev libpulse-dev libopenal-dev libudev-dev libxcursor-dev libxi-dev libxss-dev libxtst-dev
- name: Cache CMake Configuration
uses: actions/cache@v5
env:
cache-name: ${{ runner.os }}-sdl-gcc-cache-cmake-configuration
with:
path: |
${{github.workspace}}/build
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
restore-keys: |
${{ env.cache-name }}-
- name: Cache CMake Build
uses: hendrikmuhs/ccache-action@v1.2.21
env:
cache-name: ${{ runner.os }}-sdl-gcc-cache-cmake-build
with:
append-timestamp: false
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
- name: Configure CMake
run: cmake --fresh -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE=ON -DCMAKE_C_COMPILER=gcc-14 -DCMAKE_CXX_COMPILER=g++-14 -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold" -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=mold" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel $(nproc)
pre-release:
if: github.ref == 'refs/heads/main' && github.repository == 'shadps4-emu/shadPS4' && github.event_name == 'push'
needs: [get-info, windows-sdl, macos-sdl, linux-sdl]
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v8
with:
path: ./artifacts
- name: Make SDL artifacts executable
run: |
chmod -R a+x ./artifacts/shadps4-linux-sdl-*
chmod -R a+x ./artifacts/shadps4-macos-sdl-*
- name: Compress individual directories (without parent directory)
run: |
cd ./artifacts
for dir in */; do
if [ -d "$dir" ]; then
dir_name=${dir%/}
echo "Creating zip for $dir_name"
(cd "$dir_name" && zip -r "../${dir_name}.zip" .)
fi
done
- name: Get latest release information
id: get_latest_release
env:
GITHUB_TOKEN: ${{ secrets.SHADPS4_TOKEN_REPO }}
run: |
api_url="https://api.github.com/repos/${{ github.repository }}"
latest_release_info=$(curl -H "Authorization: token $GITHUB_TOKEN" "$api_url/releases/latest")
echo "last_release_tag=$(echo "$latest_release_info" | jq -r '.tag_name')" >> $GITHUB_ENV
- name: Create Pre-Release on GitHub
id: create_release
uses: ncipollo/release-action@v1
with:
token: ${{ secrets.SHADPS4_TOKEN_REPO }}
name: "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}"
tag: "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.fullhash }}"
draft: false
prerelease: true
body: "Full Changelog: [${{ env.last_release_tag }}...${{ needs.get-info.outputs.shorthash }}](https://github.com/shadps4-emu/shadPS4/compare/${{ env.last_release_tag }}...${{ needs.get-info.outputs.fullhash }})"
artifacts: ./artifacts/*.zip
- name: Publish to Release Repository
env:
GITHUB_TOKEN: ${{ secrets.SHADPS4_TOKEN_REPO }}
run: |
ARTIFACTS_DIR=./artifacts
REPO_WINDOWS="shadps4-emu/shadps4-binaries-Windows"
REPO_LINUX="shadps4-emu/shadps4-binaries-Linux"
REPO_MAC="shadps4-emu/shadps4-binaries-Mac"
for file in "$ARTIFACTS_DIR"/*.zip; do
filename=$(basename "$file")
REPO=""
# Determine repository based on file name
if [[ "$filename" == *"win64"* ]]; then
REPO=$REPO_WINDOWS
elif [[ "$filename" == *"linux"* ]] || [[ "$filename" == *"ubuntu64"* ]]; then
REPO=$REPO_LINUX
elif [[ "$filename" == *"macos"* ]]; then
REPO=$REPO_MAC
fi
# If REPO is empty, skip file
if [[ -z "$REPO" ]]; then
echo "No matching repository for $filename"
continue
fi
# Check if release already exists and get ID
release_id=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/$REPO/releases/tags/Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.fullhash }}" | jq -r '.id')
if [[ "$release_id" == "null" ]]; then
echo "Creating release in $REPO for $filename"
release_id=$(curl -s -X POST -H "Authorization: token $GITHUB_TOKEN" \
-H "Accept: application/vnd.github.v3+json" \
-d '{
"tag_name": "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.fullhash }}",
"name": "Pre-release-shadPS4-${{ needs.get-info.outputs.date }}-${{ needs.get-info.outputs.shorthash }}",
"draft": false,
"prerelease": true,
"body": "Commit: [${{ needs.get-info.outputs.fullhash }}](https://github.com/shadps4-emu/shadPS4/commit/${{ needs.get-info.outputs.fullhash }})"
}' "https://api.github.com/repos/$REPO/releases" | jq -r '.id')
else
echo "Release already exists in $REPO with ID $release_id"
fi
# Artifact upload
echo "Uploading $filename to release $release_id in $REPO"
upload_url="https://uploads.github.com/repos/$REPO/releases/$release_id/assets?name=$filename"
curl -X POST -H "Authorization: token $GITHUB_TOKEN" -H "Content-Type: application/octet-stream" --data-binary @"$file" "$upload_url"
done
- name: Get current pre-release information
env:
GITHUB_TOKEN: ${{ secrets.SHADPS4_TOKEN_REPO }}
run: |
api_url="https://api.github.com/repos/${{ github.repository }}/releases"
# Get all releases (sorted by date)
releases=$(curl -H "Authorization: token $GITHUB_TOKEN" "$api_url")
# Capture the most recent pre-release (assuming the first one is the latest)
current_release=$(echo "$releases" | jq -c '.[] | select(.prerelease == true) | .published_at' | sort -r | head -n 1)
# Remove extra quotes from captured date
current_release=$(echo $current_release | tr -d '"')
# Export the current published_at to be available for the next step
echo "CURRENT_PUBLISHED_AT=$current_release" >> $GITHUB_ENV
- name: Delete old pre-releases and tags
env:
GITHUB_TOKEN: ${{ secrets.SHADPS4_TOKEN_REPO }}
run: |
api_url="https://api.github.com/repos/${{ github.repository }}/releases"
# Get current pre-releases
releases=$(curl -H "Authorization: token $GITHUB_TOKEN" "$api_url")
# Remove extra quotes from captured date
CURRENT_PUBLISHED_AT=$(echo $CURRENT_PUBLISHED_AT | tr -d '"')
# Convert CURRENT_PUBLISHED_AT para timestamp Unix
current_published_ts=$(date -d "$CURRENT_PUBLISHED_AT" +%s)
# Identify pre-releases
echo "$releases" | jq -c '.[] | select(.prerelease == true)' | while read -r release; do
release_date=$(echo "$release" | jq -r '.published_at')
release_id=$(echo "$release" | jq -r '.id')
release_tag=$(echo "$release" | jq -r '.tag_name')
# Remove extra quotes from captured date
release_date=$(echo $release_date | tr -d '"')
# Convert release_date para timestamp Unix
release_date_ts=$(date -d "$release_date" +%s)
# Compare timestamps and delete old pre-releases
if [[ "$release_date_ts" -lt "$current_published_ts" ]]; then
echo "Deleting old pre-release: $release_id from $release_date with tag: $release_tag"
# Delete the pre-release
curl -X DELETE -H "Authorization: token $GITHUB_TOKEN" "$api_url/$release_id"
# Delete the tag
curl -X DELETE -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${{ github.repository }}/git/refs/tags/$release_tag"
else
echo "Skipping pre-release: $release_id (newer or same date)"
fi
done
================================================
FILE: .gitignore
================================================
# SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
[Bb]uild/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
.vscode/settings.json
.vscode/tasks.json
.vscode/launch.json
.vscode/extensions.json
*.code-workspace
/CMakeUserPresets.json
/compile_commands.json
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
/shadPS4/game/*
/shadPS4/psf.txt
/tools/pkg extractor/game/*
/tools/pkg extractor/*.pkg
/shadPS4/shadps4.ini
/emulator/eboot.bin
/out/*
/third-party/out/*
/src/common/scm_rev.cpp
# for macOS
**/.DS_Store
# JetBrains
.idea
cmake-build-*
================================================
FILE: .gitmodules
================================================
[submodule "externals/zlib-ng"]
path = externals/zlib-ng
url = https://github.com/shadps4-emu/ext-zlib-ng.git
shallow = true
[submodule "externals/fmt"]
path = externals/fmt
url = https://github.com/shadps4-emu/ext-fmt.git
shallow = true
[submodule "externals/vulkan-headers"]
path = externals/vulkan-headers
url = https://github.com/KhronosGroup/Vulkan-Headers.git
shallow = true
[submodule "externals/vma"]
path = externals/vma
url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
shallow = true
[submodule "externals/glslang"]
path = externals/glslang
url = https://github.com/KhronosGroup/glslang.git
shallow = true
[submodule "externals/robin-map"]
path = externals/robin-map
url = https://github.com/Tessil/robin-map.git
shallow = true
[submodule "externals/xbyak"]
path = externals/xbyak
url = https://github.com/herumi/xbyak.git
shallow = true
[submodule "externals/magic_enum"]
path = externals/magic_enum
url = https://github.com/Neargye/magic_enum.git
shallow = true
[submodule "externals/toml11"]
path = externals/toml11
url = https://github.com/ToruNiina/toml11.git
shallow = true
[submodule "externals/zydis"]
path = externals/zydis
url = https://github.com/zyantific/zydis.git
shallow = true
[submodule "externals/sirit"]
path = externals/sirit
url = https://github.com/shadps4-emu/sirit.git
shallow = true
[submodule "externals/xxhash"]
path = externals/xxhash
url = https://github.com/Cyan4973/xxHash.git
shallow = true
[submodule "externals/tracy"]
path = externals/tracy
url = https://github.com/shadps4-emu/tracy.git
shallow = true
[submodule "externals/ext-boost"]
path = externals/ext-boost
url = https://github.com/shadps4-emu/ext-boost.git
shallow = true
[submodule "externals/date"]
path = externals/date
url = https://github.com/HowardHinnant/date.git
shallow = true
[submodule "externals/ffmpeg-core"]
path = externals/ffmpeg-core
url = https://github.com/shadps4-emu/ext-ffmpeg-core.git
shallow = true
[submodule "externals/half"]
path = externals/half
url = https://github.com/ROCm/half.git
shallow = true
[submodule "externals/dear_imgui"]
path = externals/dear_imgui
url = https://github.com/shadps4-emu/ext-imgui.git
shallow = true
branch = docking
[submodule "externals/pugixml"]
path = externals/pugixml
url = https://github.com/zeux/pugixml.git
shallow = true
[submodule "externals/discord-rpc"]
path = externals/discord-rpc
url = https://github.com/shadps4-emu/ext-discord-rpc.git
shallow = true
[submodule "externals/LibAtrac9"]
path = externals/LibAtrac9
url = https://github.com/shadps4-emu/ext-LibAtrac9.git
shallow = true
[submodule "externals/libpng"]
path = externals/libpng
url = https://github.com/pnggroup/libpng
shallow = true
[submodule "externals/ext-libusb"]
path = externals/ext-libusb
url = https://github.com/shadps4-emu/ext-libusb.git
[submodule "externals/epoll-shim"]
path = externals/epoll-shim
url = https://github.com/jiixyj/epoll-shim.git
[submodule "externals/hwinfo"]
path = externals/hwinfo
url = https://github.com/shadps4-emu/ext-hwinfo
shallow = true
[submodule "externals/ext-wepoll"]
path = externals/ext-wepoll
url = https://github.com/shadps4-emu/ext-wepoll.git
shallow = true
branch = dist
[submodule "externals/MoltenVK"]
path = externals/MoltenVK
url = https://github.com/shadPS4-emu/ext-MoltenVK.git
shallow = true
[submodule "externals/json"]
path = externals/json
url = https://github.com/nlohmann/json.git
[submodule "externals/sdl3_mixer"]
path = externals/sdl3_mixer
url = https://github.com/libsdl-org/SDL_mixer
shallow = true
[submodule "externals/miniz"]
path = externals/miniz
url = https://github.com/richgel999/miniz
[submodule "externals/aacdec/fdk-aac"]
path = externals/aacdec/fdk-aac
url = https://android.googlesource.com/platform/external/aac
[submodule "externals/CLI11"]
path = externals/CLI11
url = https://github.com/shadexternals/CLI11.git
[submodule "externals/sdl3"]
path = externals/sdl3
url = https://github.com/shadexternals/sdl3.git
branch = main
[submodule "externals/cpp-httplib"]
path = externals/cpp-httplib
url = https://github.com/shadexternals/cpp-httplib.git
[submodule "externals/openal-soft"]
path = externals/openal-soft
url = https://github.com/shadexternals/openal-soft.git
================================================
FILE: CMakeDarwinPresets.json
================================================
{
"version": 9,
"cmakeMinimumRequired": {
"major": 3,
"minor": 30,
"patch": 0
},
"configurePresets": [
{
"name": "x64-Clang-Base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/Build/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/Build/${presetName}",
"CMAKE_OSX_ARCHITECTURES": "x86_64"
}
}
]
}
================================================
FILE: CMakeLinuxPresets.json
================================================
{
"version": 9,
"cmakeMinimumRequired": {
"major": 3,
"minor": 30,
"patch": 0
},
"configurePresets": [
{
"name": "x64-Clang-Base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/Build/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/Build/${presetName}"
}
}
]
}
================================================
FILE: CMakeLists.txt
================================================
# SPDX-FileCopyrightText: Copyright 2024-2026 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# Version 3.24 needed for FetchContent OVERRIDE_FIND_PACKAGE
cmake_minimum_required(VERSION 3.24)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED True)
if(APPLE)
list(APPEND ADDITIONAL_LANGUAGES OBJC)
# Starting with 15.4, Rosetta 2 has support for all the necessary instruction sets.
set(CMAKE_OSX_DEPLOYMENT_TARGET 15.4 CACHE STRING "")
endif()
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
project(shadPS4 CXX C ASM ${ADDITIONAL_LANGUAGES})
# Forcing PIE makes sure that the base address is high enough so that it doesn't clash with the PS4 memory.
if(UNIX AND NOT APPLE)
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
# check PIE support at link time
include(CheckPIESupported)
check_pie_supported(OUTPUT_VARIABLE pie_check LANGUAGES C CXX)
if(NOT CMAKE_C_LINK_PIE_SUPPORTED OR NOT CMAKE_CXX_LINK_PIE_SUPPORTED)
message(WARNING "PIE is not supported at link time: ${pie_check}")
endif()
endif()
option(ENABLE_DISCORD_RPC "Enable the Discord RPC integration" ON)
option(ENABLE_UPDATER "Enables the options to updater" ON)
# First, determine whether to use CMAKE_OSX_ARCHITECTURES or CMAKE_SYSTEM_PROCESSOR.
if (APPLE AND CMAKE_OSX_ARCHITECTURES)
set(BASE_ARCHITECTURE "${CMAKE_OSX_ARCHITECTURES}")
elseif (CMAKE_SYSTEM_PROCESSOR)
set(BASE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}")
else()
set(BASE_ARCHITECTURE "${CMAKE_HOST_SYSTEM_PROCESSOR}")
endif()
# Next, match common architecture strings down to a known common value.
if (BASE_ARCHITECTURE MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
set(ARCHITECTURE "x86_64")
elseif (BASE_ARCHITECTURE MATCHES "(aarch64)|(AARCH64)|(arm64)|(ARM64)")
set(ARCHITECTURE "arm64")
else()
message(FATAL_ERROR "Unsupported CPU architecture: ${BASE_ARCHITECTURE}")
endif()
if (ARCHITECTURE STREQUAL "x86_64")
# Target x86-64-v3 CPU architecture as this is a good balance between supporting performance critical
# instructions like AVX2 and maintaining support for older CPUs.
add_compile_options(-march=x86-64-v3)
endif()
if (APPLE AND ARCHITECTURE STREQUAL "x86_64" AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")
# Exclude ARM homebrew path to avoid conflicts when cross compiling.
list(APPEND CMAKE_IGNORE_PREFIX_PATH "/opt/homebrew")
# Need to reconfigure pkg-config to use the right architecture library paths.
# It's not ideal to override these but otherwise the build breaks just by having pkg-config installed.
set(ENV{PKG_CONFIG_DIR} "")
set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig:${CMAKE_SYSROOT}/usr/local/lib/pkgconfig:${CMAKE_SYSROOT}/usr/local/share/pkgconfig")
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
endif()
# This function should be passed a list of all files in a target. It will automatically generate file groups
# following the directory hierarchy, so that the layout of the files in IDEs matches the one in the filesystem.
function(create_target_directory_groups target_name)
# Place any files that aren't in the source list in a separate group so that they don't get in the way.
source_group("Other Files" REGULAR_EXPRESSION ".")
get_target_property(target_sources "${target_name}" SOURCES)
foreach(file_name IN LISTS target_sources)
get_filename_component(dir_name "${file_name}" PATH)
# Group names use '\' as a separator even though the entire rest of CMake uses '/'...
string(REPLACE "/" "\\" group_name "${dir_name}")
source_group("${group_name}" FILES "${file_name}")
endforeach()
endfunction()
# Setup a custom clang-format target (if clang-format can be found) that will run
# against all the src files. This should be used before making a pull request.
if (CLANG_FORMAT)
set(SRCS ${PROJECT_SOURCE_DIR}/src)
set(CCOMMENT "Running clang format against all the .h and .cpp files in src/")
if (WIN32)
add_custom_target(clang-format
COMMAND powershell.exe -Command "Get-ChildItem '${SRCS}/*' -Include *.cpp,*.h,*.mm -Recurse | Foreach {&'${CLANG_FORMAT}' -i $_.fullname}"
COMMENT ${CCOMMENT})
else()
add_custom_target(clang-format
COMMAND find ${SRCS} -iname *.h -o -iname *.cpp -o -iname *.mm | xargs ${CLANG_FORMAT} -i
COMMENT ${CCOMMENT})
endif()
unset(SRCS)
unset(CCOMMENT)
endif()
# generate git revision information
include("${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules/GetGitRevisionDescription.cmake")
get_git_head_revision(GIT_REF_SPEC GIT_REV)
git_describe(GIT_DESC --always --long --dirty)
git_branch_name(GIT_BRANCH)
string(TIMESTAMP BUILD_DATE "%Y-%m-%d %H:%M:%S")
message("start git things")
# Try to get the upstream remote and branch
message("check for remote and branch")
execute_process(
COMMAND git rev-parse --abbrev-ref --symbolic-full-name @{u}
OUTPUT_VARIABLE GIT_REMOTE_NAME
RESULT_VARIABLE GIT_REMOTE_RESULT
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# If there's no upstream set or the command failed, check remote.pushDefault
if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "")
message(STATUS "check default push")
execute_process(
COMMAND git config --get remote.pushDefault
OUTPUT_VARIABLE GIT_REMOTE_NAME
RESULT_VARIABLE GIT_REMOTE_RESULT
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message(STATUS "got remote: ${GIT_REMOTE_NAME}")
endif()
# If running in GitHub Actions and the above fails
if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "")
message(STATUS "check github")
set(GIT_REMOTE_NAME "origin")
# Retrieve environment variables
if (DEFINED ENV{GITHUB_HEAD_REF} AND NOT "$ENV{GITHUB_HEAD_REF}" STREQUAL "")
message(STATUS "github head ref: $ENV{GITHUB_HEAD_REF}")
set(GITHUB_HEAD_REF "$ENV{GITHUB_HEAD_REF}")
else()
set(GITHUB_HEAD_REF "")
endif()
if (DEFINED ENV{GITHUB_REF} AND NOT "$ENV{GITHUB_REF}" STREQUAL "")
message(STATUS "github ref: $ENV{GITHUB_REF}")
string(REGEX REPLACE "^refs/[^/]*/" "" GITHUB_BRANCH "$ENV{GITHUB_REF}")
string(REGEX MATCH "refs/pull/([0-9]+)/merge" MATCHED_REF "$ENV{GITHUB_REF}")
if (MATCHED_REF)
set(PR_NUMBER "${CMAKE_MATCH_1}")
set(GITHUB_BRANCH "")
message(STATUS "PR number: ${PR_NUMBER}")
else()
set(PR_NUMBER "")
endif()
else()
set(GITHUB_BRANCH "")
set(PR_NUMBER "")
endif()
if (NOT "${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_HEAD_REF}" STREQUAL "")
set(GIT_BRANCH "pr-${PR_NUMBER}-${GITHUB_HEAD_REF}")
elseif (NOT "${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_BRANCH}" STREQUAL "")
set(GIT_BRANCH "pr-${PR_NUMBER}-${GITHUB_BRANCH}")
elseif (NOT "${PR_NUMBER}" STREQUAL "")
set(GIT_BRANCH "pr-${PR_NUMBER}")
elseif ("${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_HEAD_REF}" STREQUAL "")
set(GIT_BRANCH "${GITHUB_HEAD_REF}")
elseif ("${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_BRANCH}" STREQUAL "")
set(GIT_BRANCH "${GITHUB_BRANCH}")
elseif ("${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_REF}" STREQUAL "")
set(GIT_BRANCH "${GITHUB_REF}")
elseif("${GIT_BRANCH}" STREQUAL "")
message(STATUS "couldn't find branch")
set(GIT_BRANCH "detached-head")
endif()
else()
# Extract remote name if the output contains a remote/branch format
string(FIND "${GIT_REMOTE_NAME}" "/" INDEX)
if (INDEX GREATER -1)
string(SUBSTRING "${GIT_REMOTE_NAME}" 0 "${INDEX}" GIT_REMOTE_NAME)
elseif("${GIT_REMOTE_NAME}" STREQUAL "")
message(STATUS "reset to origin")
set(GIT_REMOTE_NAME "origin")
endif()
endif()
# Get remote link
message(STATUS "getting remote link")
execute_process(
COMMAND git config --get remote.${GIT_REMOTE_NAME}.url
OUTPUT_VARIABLE GIT_REMOTE_URL
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Set Version
set(EMULATOR_VERSION_MAJOR "0")
set(EMULATOR_VERSION_MINOR "15")
set(EMULATOR_VERSION_PATCH "1")
set_source_files_properties(src/shadps4.rc PROPERTIES COMPILE_DEFINITIONS "EMULATOR_VERSION_MAJOR=${EMULATOR_VERSION_MAJOR};EMULATOR_VERSION_MINOR=${EMULATOR_VERSION_MINOR};EMULATOR_VERSION_PATCH=${EMULATOR_VERSION_PATCH}")
set(APP_VERSION "${EMULATOR_VERSION_MAJOR}.${EMULATOR_VERSION_MINOR}.${EMULATOR_VERSION_PATCH} WIP")
set(APP_IS_RELEASE false)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/common/scm_rev.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/src/common/scm_rev.cpp" @ONLY)
message("-- end git things, remote: ${GIT_REMOTE_NAME}, branch: ${GIT_BRANCH}, link: ${GIT_REMOTE_URL}")
string(TOLOWER "${GIT_REMOTE_URL}" GIT_REMOTE_URL_LOWER)
if(NOT (GIT_REMOTE_URL_LOWER MATCHES "shadps4-emu/shadps4" AND (GIT_BRANCH STREQUAL "main" OR "$ENV{GITHUB_REF}" MATCHES "refs/tags/")))
message(STATUS "not main, disabling auto update")
set(ENABLE_UPDATER OFF)
endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package(Boost 1.84.0 CONFIG)
find_package(CLI11 2.6.1 CONFIG)
find_package(FFmpeg 5.1.2 MODULE)
find_package(fmt 10.2.0 CONFIG)
find_package(glslang 15 CONFIG)
find_package(half 1.12.0 MODULE)
find_package(magic_enum 0.9.7 CONFIG)
find_package(miniz 3.1 CONFIG)
find_package(nlohmann_json 3.12 CONFIG)
find_package(PNG 1.6 MODULE)
find_package(OpenAL CONFIG)
find_package(RenderDoc 1.6.0 MODULE)
find_package(SDL3_mixer 2.8.1 CONFIG)
if (SDL3_mixer_FOUND)
find_package(SDL3 3.1.2 CONFIG)
endif()
find_package(stb MODULE)
find_package(toml11 4.2.0 CONFIG)
find_package(tsl-robin-map 1.3.0 CONFIG)
find_package(VulkanHeaders 1.4.329 CONFIG)
find_package(VulkanMemoryAllocator 3.1.0 CONFIG)
find_package(xbyak 7.07 CONFIG)
find_package(xxHash 0.8.2 MODULE)
find_package(ZLIB 1.3 MODULE)
find_package(Zydis 5.0.0 CONFIG)
find_package(pugixml 1.14 CONFIG)
if (APPLE)
find_package(date 3.0.1 CONFIG)
find_package(epoll-shim 3.14 CONFIG)
endif()
list(POP_BACK CMAKE_MODULE_PATH)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
# libc++ requires -fexperimental-library to enable std::jthread and std::stop_token support.
include(CheckCXXSymbolExists)
check_cxx_symbol_exists(_LIBCPP_VERSION version LIBCPP)
if(LIBCPP)
add_compile_options(-fexperimental-library)
endif()
endif()
add_subdirectory(externals)
include_directories(src)
set(AJM_LIB src/core/libraries/ajm/ajm.cpp
src/core/libraries/ajm/ajm.h
src/core/libraries/ajm/ajm_aac.cpp
src/core/libraries/ajm/ajm_aac.h
src/core/libraries/ajm/ajm_at9.cpp
src/core/libraries/ajm/ajm_at9.h
src/core/libraries/ajm/ajm_batch.cpp
src/core/libraries/ajm/ajm_batch.h
src/core/libraries/ajm/ajm_context.cpp
src/core/libraries/ajm/ajm_context.h
src/core/libraries/ajm/ajm_error.h
src/core/libraries/ajm/ajm_instance_statistics.cpp
src/core/libraries/ajm/ajm_instance_statistics.h
src/core/libraries/ajm/ajm_instance.cpp
src/core/libraries/ajm/ajm_instance.h
src/core/libraries/ajm/ajm_mp3.cpp
src/core/libraries/ajm/ajm_mp3.h
)
set(AUDIO_LIB src/core/libraries/audio/audioin.cpp
src/core/libraries/audio/audioin.h
src/core/libraries/audio/audioin_backend.h
src/core/libraries/audio/audioin_error.h
src/core/libraries/audio/sdl_audio_in.cpp
src/core/libraries/voice/voice.cpp
src/core/libraries/voice/voice.h
src/core/libraries/audio/audioout.cpp
src/core/libraries/audio/audioout.h
src/core/libraries/audio/audioout_backend.h
src/core/libraries/audio/audioout_error.h
src/core/libraries/audio/sdl_audio_out.cpp
src/core/libraries/ngs2/ngs2.cpp
src/core/libraries/ngs2/ngs2.h
)
set(GNM_LIB src/core/libraries/gnmdriver/gnmdriver.cpp
src/core/libraries/gnmdriver/gnmdriver.h
src/core/libraries/gnmdriver/gnmdriver_init.h
src/core/libraries/gnmdriver/gnm_error.h
)
set(KERNEL_LIB src/core/libraries/kernel/sync/mutex.cpp
src/core/libraries/kernel/sync/mutex.h
src/core/libraries/kernel/sync/semaphore.h
src/core/libraries/kernel/threads/condvar.cpp
src/core/libraries/kernel/threads/event_flag.cpp
src/core/libraries/kernel/threads/exception.cpp
src/core/libraries/kernel/threads/exception.h
src/core/libraries/kernel/threads/mutex.cpp
src/core/libraries/kernel/threads/pthread_attr.cpp
src/core/libraries/kernel/threads/pthread_clean.cpp
src/core/libraries/kernel/threads/pthread.cpp
src/core/libraries/kernel/threads/pthread_spec.cpp
src/core/libraries/kernel/threads/rwlock.cpp
src/core/libraries/kernel/threads/semaphore.cpp
src/core/libraries/kernel/threads/sleepq.cpp
src/core/libraries/kernel/threads/sleepq.h
src/core/libraries/kernel/threads/stack.cpp
src/core/libraries/kernel/threads/tcb.cpp
src/core/libraries/kernel/threads/pthread.h
src/core/libraries/kernel/threads/thread_state.cpp
src/core/libraries/kernel/threads/thread_state.h
src/core/libraries/kernel/process.cpp
src/core/libraries/kernel/process.h
src/core/libraries/kernel/debug.cpp
src/core/libraries/kernel/debug.h
src/core/libraries/kernel/equeue.cpp
src/core/libraries/kernel/equeue.h
src/core/libraries/kernel/file_system.cpp
src/core/libraries/kernel/file_system.h
src/core/libraries/kernel/kernel.cpp
src/core/libraries/kernel/kernel.h
src/core/libraries/kernel/memory.cpp
src/core/libraries/kernel/memory.h
src/core/libraries/kernel/threads.cpp
src/core/libraries/kernel/threads.h
src/core/libraries/kernel/time.cpp
src/core/libraries/kernel/time.h
src/core/libraries/kernel/orbis_error.h
src/core/libraries/kernel/posix_error.h
src/core/libraries/kernel/aio.cpp
src/core/libraries/kernel/aio.h
)
set(NETWORK_LIBS src/core/libraries/network/http.cpp
src/core/libraries/network/http.h
src/core/libraries/network/http_error.h
src/core/libraries/network/http2.cpp
src/core/libraries/network/http2.h
src/core/libraries/network/net.cpp
src/core/libraries/network/netctl.cpp
src/core/libraries/network/netctl.h
src/core/libraries/network/net_ctl_obj.cpp
src/core/libraries/network/net_ctl_obj.h
src/core/libraries/network/net_ctl_codes.h
src/core/libraries/network/net_util.cpp
src/core/libraries/network/net_util.h
src/core/libraries/network/net_epoll.cpp
src/core/libraries/network/net_epoll.h
src/core/libraries/network/net_resolver.cpp
src/core/libraries/network/net_resolver.h
src/core/libraries/network/net_error.h
src/core/libraries/network/net.h
src/core/libraries/network/ssl.cpp
src/core/libraries/network/ssl.h
src/core/libraries/network/ssl2.cpp
src/core/libraries/network/ssl2.h
src/core/libraries/network/sys_net.cpp
src/core/libraries/network/sys_net.h
src/core/libraries/network/posix_sockets.cpp
src/core/libraries/network/p2p_sockets.cpp
src/core/libraries/network/unix_sockets.cpp
src/core/libraries/network/sockets.h
)
set(AVPLAYER_LIB src/core/libraries/avplayer/avplayer_common.cpp
src/core/libraries/avplayer/avplayer_common.h
src/core/libraries/avplayer/avplayer_file_streamer.cpp
src/core/libraries/avplayer/avplayer_file_streamer.h
src/core/libraries/avplayer/avplayer_impl.cpp
src/core/libraries/avplayer/avplayer_impl.h
src/core/libraries/avplayer/avplayer_source.cpp
src/core/libraries/avplayer/avplayer_source.h
src/core/libraries/avplayer/avplayer_state.cpp
src/core/libraries/avplayer/avplayer_state.h
src/core/libraries/avplayer/avplayer.cpp
src/core/libraries/avplayer/avplayer.h
src/core/libraries/avplayer/avplayer_error.h
)
set(SYSTEM_LIBS src/core/libraries/system/commondialog.cpp
src/core/libraries/system/commondialog.h
src/core/libraries/system/msgdialog.cpp
src/core/libraries/system/msgdialog.h
src/core/libraries/system/msgdialog_ui.cpp
src/core/libraries/system/posix.cpp
src/core/libraries/system/posix.h
src/core/libraries/save_data/save_backup.cpp
src/core/libraries/save_data/save_backup.h
src/core/libraries/save_data/save_instance.cpp
src/core/libraries/save_data/save_instance.h
src/core/libraries/save_data/save_memory.cpp
src/core/libraries/save_data/save_memory.h
src/core/libraries/save_data/savedata.cpp
src/core/libraries/save_data/savedata.h
src/core/libraries/save_data/savedata_error.h
src/core/libraries/save_data/dialog/savedatadialog.cpp
src/core/libraries/save_data/dialog/savedatadialog.h
src/core/libraries/save_data/dialog/savedatadialog_ui.cpp
src/core/libraries/save_data/dialog/savedatadialog_ui.h
src/core/libraries/sysmodule/sysmodule.cpp
src/core/libraries/sysmodule/sysmodule.h
src/core/libraries/sysmodule/sysmodule_internal.cpp
src/core/libraries/sysmodule/sysmodule_internal.h
src/core/libraries/sysmodule/sysmodule_error.h
src/core/libraries/sysmodule/sysmodule_table.h
src/core/libraries/system/systemservice.cpp
src/core/libraries/system/systemservice.h
src/core/libraries/system/systemservice_error.h
src/core/libraries/system/userservice.cpp
src/core/libraries/system/userservice.h
src/core/libraries/system/userservice_error.h
src/core/libraries/app_content/app_content.cpp
src/core/libraries/app_content/app_content.h
src/core/libraries/app_content/app_content_error.h
src/core/libraries/rtc/rtc.cpp
src/core/libraries/rtc/rtc.h
src/core/libraries/rtc/rtc_error.h
src/core/libraries/rudp/rudp.cpp
src/core/libraries/rudp/rudp.h
src/core/libraries/disc_map/disc_map.cpp
src/core/libraries/disc_map/disc_map.h
src/core/libraries/disc_map/disc_map_codes.h
src/core/libraries/ngs2/ngs2.cpp
src/core/libraries/ngs2/ngs2.h
src/core/libraries/ngs2/ngs2_error.h
src/core/libraries/ngs2/ngs2_impl.cpp
src/core/libraries/ngs2/ngs2_impl.h
src/core/libraries/ngs2/ngs2_custom.cpp
src/core/libraries/ngs2/ngs2_custom.h
src/core/libraries/ngs2/ngs2_reverb.cpp
src/core/libraries/ngs2/ngs2_reverb.h
src/core/libraries/ngs2/ngs2_geom.cpp
src/core/libraries/ngs2/ngs2_geom.h
src/core/libraries/ngs2/ngs2_pan.cpp
src/core/libraries/ngs2/ngs2_pan.h
src/core/libraries/ngs2/ngs2_report.cpp
src/core/libraries/ngs2/ngs2_report.h
src/core/libraries/ngs2/ngs2_eq.cpp
src/core/libraries/ngs2/ngs2_eq.h
src/core/libraries/ngs2/ngs2_mastering.cpp
src/core/libraries/ngs2/ngs2_mastering.h
src/core/libraries/ngs2/ngs2_sampler.cpp
src/core/libraries/ngs2/ngs2_sampler.h
src/core/libraries/ngs2/ngs2_submixer.cpp
src/core/libraries/ngs2/ngs2_submixer.h
src/core/libraries/ajm/ajm_error.h
src/core/libraries/audio3d/audio3d.cpp
src/core/libraries/audio3d/audio3d.h
src/core/libraries/audio3d/audio3d_error.h
src/core/libraries/game_live_streaming/gamelivestreaming.cpp
src/core/libraries/game_live_streaming/gamelivestreaming.h
src/core/libraries/remote_play/remoteplay.cpp
src/core/libraries/remote_play/remoteplay.h
src/core/libraries/share_play/shareplay.cpp
src/core/libraries/share_play/shareplay.h
src/core/libraries/razor_cpu/razor_cpu.cpp
src/core/libraries/razor_cpu/razor_cpu.h
src/core/libraries/mouse/mouse.cpp
src/core/libraries/mouse/mouse.h
src/core/libraries/web_browser_dialog/webbrowserdialog.cpp
src/core/libraries/web_browser_dialog/webbrowserdialog.h
src/core/libraries/font/font.cpp
src/core/libraries/font/font.h
src/core/libraries/font/fontft.cpp
src/core/libraries/font/fontft.h
src/core/libraries/font/font_error.h
)
set(VIDEOOUT_LIB src/core/libraries/videoout/buffer.h
src/core/libraries/videoout/driver.cpp
src/core/libraries/videoout/driver.h
src/core/libraries/videoout/video_out.cpp
src/core/libraries/videoout/video_out.h
src/core/libraries/videoout/videoout_error.h
)
set(HLE_LIBC_INTERNAL_LIB src/core/libraries/libc_internal/libc_internal.cpp
src/core/libraries/libc_internal/libc_internal.h
src/core/libraries/libc_internal/libc_internal_io.cpp
src/core/libraries/libc_internal/libc_internal_io.h
src/core/libraries/libc_internal/libc_internal_memory.cpp
src/core/libraries/libc_internal/libc_internal_memory.h
src/core/libraries/libc_internal/libc_internal_str.cpp
src/core/libraries/libc_internal/libc_internal_str.h
src/core/libraries/libc_internal/libc_internal_math.cpp
src/core/libraries/libc_internal/libc_internal_math.h
src/core/libraries/libc_internal/libc_internal_threads.cpp
src/core/libraries/libc_internal/libc_internal_threads.h
src/core/libraries/libc_internal/printf.h
)
set(IME_LIB src/core/libraries/ime/error_dialog.cpp
src/core/libraries/ime/error_dialog.h
src/core/libraries/ime/ime_common.h
src/core/libraries/ime/ime_dialog_ui.cpp
src/core/libraries/ime/ime_dialog_ui.h
src/core/libraries/ime/ime_dialog.cpp
src/core/libraries/ime/ime_dialog.h
src/core/libraries/ime/ime_ui.cpp
src/core/libraries/ime/ime_ui.h
src/core/libraries/ime/ime.cpp
src/core/libraries/ime/ime.h
src/core/libraries/ime/ime_error.h
)
set(PAD_LIB src/core/libraries/pad/pad.cpp
src/core/libraries/pad/pad.h
src/core/libraries/pad/pad_errors.h
)
set(SYSTEM_GESTURE_LIB
src/core/libraries/system_gesture/system_gesture.cpp
src/core/libraries/system_gesture/system_gesture.h
)
set(PNG_LIB src/core/libraries/libpng/pngdec.cpp
src/core/libraries/libpng/pngdec.h
src/core/libraries/libpng/pngdec_error.h
src/core/libraries/libpng/pngenc.cpp
src/core/libraries/libpng/pngenc.h
src/core/libraries/libpng/pngenc_error.h
)
set(JPEG_LIB src/core/libraries/jpeg/jpeg_error.h
src/core/libraries/jpeg/jpegenc.cpp
src/core/libraries/jpeg/jpegenc.h
)
set(PLAYGO_LIB src/core/libraries/playgo/playgo.cpp
src/core/libraries/playgo/playgo.h
src/core/libraries/playgo/playgo_dialog.cpp
src/core/libraries/playgo/playgo_dialog.h
src/core/libraries/playgo/playgo_types.h
)
set(RANDOM_LIB src/core/libraries/random/random.cpp
src/core/libraries/random/random.h
src/core/libraries/random/random_error.h
)
set(USBD_LIB src/core/libraries/usbd/usbd.cpp
src/core/libraries/usbd/usbd.h
src/core/libraries/usbd/usb_backend.h
src/core/libraries/usbd/emulated/dimensions.cpp
src/core/libraries/usbd/emulated/dimensions.h
src/core/libraries/usbd/emulated/infinity.cpp
src/core/libraries/usbd/emulated/infinity.h
src/core/libraries/usbd/emulated/skylander.cpp
src/core/libraries/usbd/emulated/skylander.h
)
set(FIBER_LIB src/core/libraries/fiber/fiber_context.s
src/core/libraries/fiber/fiber.cpp
src/core/libraries/fiber/fiber.h
src/core/libraries/fiber/fiber_error.h
)
set_source_files_properties(src/core/libraries/fiber/fiber_context.s PROPERTIES COMPILE_OPTIONS -Wno-unused-command-line-argument)
set(VDEC_LIB src/core/libraries/videodec/videodec2_impl.cpp
src/core/libraries/videodec/videodec2_impl.h
src/core/libraries/videodec/videodec2.cpp
src/core/libraries/videodec/videodec2.h
src/core/libraries/videodec/videodec2_avc.h
src/core/libraries/videodec/videodec.cpp
src/core/libraries/videodec/videodec.h
src/core/libraries/videodec/videodec_error.h
src/core/libraries/videodec/videodec_impl.cpp
src/core/libraries/videodec/videodec_impl.h
)
set(NP_LIBS src/core/libraries/np/np_error.h
src/core/libraries/np/np_common.cpp
src/core/libraries/np/np_common.h
src/core/libraries/np/np_commerce.cpp
src/core/libraries/np/np_commerce.h
src/core/libraries/np/np_manager.cpp
src/core/libraries/np/np_manager.h
src/core/libraries/np/np_matching2.cpp
src/core/libraries/np/np_matching2.h
src/core/libraries/np/np_score.cpp
src/core/libraries/np/np_score.h
src/core/libraries/np/np_trophy.cpp
src/core/libraries/np/np_trophy.h
src/core/libraries/np/np_tus.cpp
src/core/libraries/np/np_tus.h
src/core/libraries/np/trophy_ui.cpp
src/core/libraries/np/trophy_ui.h
src/core/libraries/np/np_web_api.cpp
src/core/libraries/np/np_web_api.h
src/core/libraries/np/np_web_api_error.h
src/core/libraries/np/np_web_api_internal.cpp
src/core/libraries/np/np_web_api_internal.h
src/core/libraries/np/np_web_api2.cpp
src/core/libraries/np/np_web_api2.h
src/core/libraries/np/np_party.cpp
src/core/libraries/np/np_party.h
src/core/libraries/np/np_auth.cpp
src/core/libraries/np/np_auth.h
src/core/libraries/np/np_profile_dialog.cpp
src/core/libraries/np/np_profile_dialog.h
src/core/libraries/np/np_sns_facebook_dialog.cpp
src/core/libraries/np/np_sns_facebook_dialog.h
src/core/libraries/np/np_partner.cpp
src/core/libraries/np/np_partner.h
src/core/libraries/np/object_manager.h
)
set(ZLIB_LIB src/core/libraries/zlib/zlib.cpp
src/core/libraries/zlib/zlib_sce.h
src/core/libraries/zlib/zlib_error.h
)
set(VR_LIBS src/core/libraries/hmd/hmd.cpp
src/core/libraries/hmd/hmd_reprojection.cpp
src/core/libraries/hmd/hmd_distortion.cpp
src/core/libraries/hmd/hmd.h
src/core/libraries/hmd/hmd_setup_dialog.cpp
src/core/libraries/hmd/hmd_setup_dialog.h
src/core/libraries/vr_tracker/vr_tracker.cpp
src/core/libraries/vr_tracker/vr_tracker.h
)
set(MISC_LIBS src/core/libraries/screenshot/screenshot.cpp
src/core/libraries/screenshot/screenshot.h
src/core/libraries/move/move.cpp
src/core/libraries/move/move.h
src/core/libraries/move/move_error.h
src/core/libraries/ulobjmgr/ulobjmgr.cpp
src/core/libraries/ulobjmgr/ulobjmgr.h
src/core/libraries/signin_dialog/signindialog.cpp
src/core/libraries/signin_dialog/signindialog.h
)
set(CAMERA_LIBS src/core/libraries/camera/camera.cpp
src/core/libraries/camera/camera.h
src/core/libraries/camera/camera_error.h
)
set(COMPANION_LIBS src/core/libraries/companion/companion_httpd.cpp
src/core/libraries/companion/companion_httpd.h
src/core/libraries/companion/companion_util.cpp
src/core/libraries/companion/companion_util.h
src/core/libraries/companion/companion_error.h
)
set(DEV_TOOLS src/core/devtools/layer.cpp
src/core/devtools/layer.h
src/core/devtools/layer_extra.cpp
src/core/devtools/options.cpp
src/core/devtools/options.h
src/core/devtools/gcn/gcn_context_regs.cpp
src/core/devtools/gcn/gcn_op_names.cpp
src/core/devtools/gcn/gcn_shader_regs.cpp
src/core/devtools/widget/cmd_list.cpp
src/core/devtools/widget/cmd_list.h
src/core/devtools/widget/common.h
src/core/devtools/widget/frame_dump.cpp
src/core/devtools/widget/frame_dump.h
src/core/devtools/widget/frame_graph.cpp
src/core/devtools/widget/frame_graph.h
src/core/devtools/widget/imgui_memory_editor.h
src/core/devtools/widget/memory_map.cpp
src/core/devtools/widget/memory_map.h
src/core/devtools/widget/module_list.cpp
src/core/devtools/widget/module_list.h
src/core/devtools/widget/reg_popup.cpp
src/core/devtools/widget/reg_popup.h
src/core/devtools/widget/reg_view.cpp
src/core/devtools/widget/reg_view.h
src/core/devtools/widget/shader_list.cpp
src/core/devtools/widget/shader_list.h
src/core/devtools/widget/text_editor.cpp
src/core/devtools/widget/text_editor.h
)
set(COMMON src/common/logging/backend.cpp
src/common/logging/backend.h
src/common/logging/filter.cpp
src/common/logging/filter.h
src/common/logging/formatter.h
src/common/logging/log_entry.h
src/common/logging/log.h
src/common/logging/text_formatter.cpp
src/common/logging/text_formatter.h
src/common/logging/types.h
src/common/aes.h
src/common/alignment.h
src/common/arch.h
src/common/assert.cpp
src/common/assert.h
src/common/bit_array.h
src/common/bit_field.h
src/common/bounded_threadsafe_queue.h
src/common/concepts.h
src/common/config.cpp
src/common/config.h
src/common/cstring.h
src/common/debug.h
src/common/decoder.cpp
src/common/decoder.h
src/common/elf_info.h
src/common/endian.h
src/common/enum.h
src/common/io_file.cpp
src/common/io_file.h
src/common/lru_cache.h
src/common/error.cpp
src/common/error.h
src/common/fixed_value.h
src/common/func_traits.h
src/common/native_clock.cpp
src/common/native_clock.h
src/common/path_util.cpp
src/common/path_util.h
src/common/object_pool.h
src/common/polyfill_thread.h
src/common/range_lock.h
src/common/rdtsc.cpp
src/common/rdtsc.h
src/common/recursive_lock.cpp
src/common/recursive_lock.h
src/common/scope_exit.h
src/common/serdes.h
src/common/sha1.h
src/common/shared_first_mutex.h
src/common/signal_context.h
src/common/signal_context.cpp
src/common/singleton.h
src/common/slab_heap.h
src/common/slot_vector.h
src/common/spin_lock.cpp
src/common/spin_lock.h
src/common/stb.cpp
src/common/stb.h
src/common/string_literal.h
src/common/string_util.cpp
src/common/string_util.h
src/common/thread.cpp
src/common/thread.h
src/common/types.h
src/common/uint128.h
src/common/unique_function.h
src/common/va_ctx.h
src/common/ntapi.h
src/common/ntapi.cpp
src/common/number_utils.h
src/common/number_utils.cpp
src/common/memory_patcher.h
src/common/memory_patcher.cpp
${CMAKE_CURRENT_BINARY_DIR}/src/common/scm_rev.cpp
src/common/scm_rev.h
src/common/key_manager.cpp
src/common/key_manager.h
)
if (ENABLE_DISCORD_RPC)
list(APPEND COMMON src/common/discord_rpc_handler.cpp src/common/discord_rpc_handler.h)
endif()
set(CORE src/core/aerolib/stubs.cpp
src/core/aerolib/stubs.h
src/core/aerolib/aerolib.cpp
src/core/aerolib/aerolib.h
src/core/address_space.cpp
src/core/address_space.h
src/core/file_sys/devices/base_device.cpp
src/core/file_sys/devices/base_device.h
src/core/file_sys/devices/ioccom.h
src/core/file_sys/devices/logger.cpp
src/core/file_sys/devices/logger.h
src/core/file_sys/devices/nop_device.h
src/core/file_sys/devices/console_device.cpp
src/core/file_sys/devices/console_device.h
src/core/file_sys/devices/deci_tty6_device.cpp
src/core/file_sys/devices/deci_tty6_device.h
src/core/file_sys/devices/random_device.cpp
src/core/file_sys/devices/random_device.h
src/core/file_sys/devices/rng_device.cpp
src/core/file_sys/devices/rng_device.h
src/core/file_sys/devices/urandom_device.cpp
src/core/file_sys/devices/urandom_device.h
src/core/file_sys/devices/srandom_device.cpp
src/core/file_sys/devices/srandom_device.h
src/core/file_sys/directories/base_directory.cpp
src/core/file_sys/directories/base_directory.h
src/core/file_sys/directories/normal_directory.cpp
src/core/file_sys/directories/normal_directory.h
src/core/file_sys/directories/pfs_directory.cpp
src/core/file_sys/directories/pfs_directory.h
src/core/file_format/pfs.h
src/core/file_format/psf.cpp
src/core/file_format/psf.h
src/core/file_format/playgo_chunk.cpp
src/core/file_format/playgo_chunk.h
src/core/file_format/trp.cpp
src/core/file_format/trp.h
src/core/file_format/npbind.cpp
src/core/file_format/npbind.h
src/core/file_sys/fs.cpp
src/core/file_sys/fs.h
src/core/ipc/ipc.cpp
src/core/ipc/ipc.h
src/core/loader/dwarf.cpp
src/core/loader/dwarf.h
src/core/loader/elf.cpp
src/core/loader/elf.h
src/core/loader/symbols_resolver.h
src/core/loader/symbols_resolver.cpp
src/core/libraries/libs.h
src/core/libraries/libs.cpp
${AJM_LIB}
${AVPLAYER_LIB}
${AUDIO_LIB}
${GNM_LIB}
${KERNEL_LIB}
${NETWORK_LIBS}
${SYSTEM_LIBS}
${HLE_LIBC_INTERNAL_LIB}
${PAD_LIB}
${SYSTEM_GESTURE_LIB}
${VIDEOOUT_LIB}
${NP_LIBS}
${PNG_LIB}
${JPEG_LIB}
${PLAYGO_LIB}
${RANDOM_LIB}
${USBD_LIB}
${ZLIB_LIB}
${MISC_LIBS}
${IME_LIB}
${FIBER_LIB}
${VDEC_LIB}
${VR_LIBS}
${CAMERA_LIBS}
${COMPANION_LIBS}
${DEV_TOOLS}
src/core/debug_state.cpp
src/core/debug_state.h
src/core/debugger.cpp
src/core/debugger.h
src/core/linker.cpp
src/core/linker.h
src/core/memory.cpp
src/core/memory.h
src/core/module.cpp
src/core/module.h
src/core/platform.h
src/core/signals.cpp
src/core/signals.h
src/core/thread.cpp
src/core/thread.h
src/core/tls.cpp
src/core/tls.h
src/core/emulator_state.cpp
src/core/emulator_state.h
)
if (ARCHITECTURE STREQUAL "x86_64")
set(CORE ${CORE}
src/core/cpu_patches.cpp
src/core/cpu_patches.h)
endif()
set(SHADER_RECOMPILER src/shader_recompiler/profile.h
src/shader_recompiler/recompiler.cpp
src/shader_recompiler/recompiler.h
src/shader_recompiler/resource.h
src/shader_recompiler/info.h
src/shader_recompiler/params.h
src/shader_recompiler/runtime_info.h
src/shader_recompiler/specialization.h
src/shader_recompiler/backend/bindings.h
src/shader_recompiler/backend/spirv/emit_spirv.cpp
src/shader_recompiler/backend/spirv/emit_spirv.h
src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp
src/shader_recompiler/backend/spirv/emit_spirv_barriers.cpp
src/shader_recompiler/backend/spirv/emit_spirv_bitwise_conversion.cpp
src/shader_recompiler/backend/spirv/emit_spirv_composite.cpp
src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
src/shader_recompiler/backend/spirv/emit_spirv_convert.cpp
src/shader_recompiler/backend/spirv/emit_spirv_floating_point.cpp
src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
src/shader_recompiler/backend/spirv/emit_spirv_instructions.h
src/shader_recompiler/backend/spirv/emit_spirv_integer.cpp
src/shader_recompiler/backend/spirv/emit_spirv_logical.cpp
src/shader_recompiler/backend/spirv/emit_spirv_quad_rect.cpp
src/shader_recompiler/backend/spirv/emit_spirv_quad_rect.h
src/shader_recompiler/backend/spirv/emit_spirv_select.cpp
src/shader_recompiler/backend/spirv/emit_spirv_shared_memory.cpp
src/shader_recompiler/backend/spirv/emit_spirv_special.cpp
src/shader_recompiler/backend/spirv/emit_spirv_undefined.cpp
src/shader_recompiler/backend/spirv/emit_spirv_warp.cpp
src/shader_recompiler/backend/spirv/spirv_emit_context.cpp
src/shader_recompiler/backend/spirv/spirv_emit_context.h
src/shader_recompiler/frontend/translate/data_share.cpp
src/shader_recompiler/frontend/translate/export.cpp
src/shader_recompiler/frontend/translate/scalar_alu.cpp
src/shader_recompiler/frontend/translate/scalar_flow.cpp
src/shader_recompiler/frontend/translate/scalar_memory.cpp
src/shader_recompiler/frontend/translate/translate.cpp
src/shader_recompiler/frontend/translate/translate.h
src/shader_recompiler/frontend/translate/vector_alu.cpp
src/shader_recompiler/frontend/translate/vector_interpolation.cpp
src/shader_recompiler/frontend/translate/vector_memory.cpp
src/shader_recompiler/frontend/control_flow_graph.cpp
src/shader_recompiler/frontend/control_flow_graph.h
src/shader_recompiler/frontend/copy_shader.cpp
src/shader_recompiler/frontend/copy_shader.h
src/shader_recompiler/frontend/decode.cpp
src/shader_recompiler/frontend/decode.h
src/shader_recompiler/frontend/fetch_shader.cpp
src/shader_recompiler/frontend/fetch_shader.h
src/shader_recompiler/frontend/format.cpp
src/shader_recompiler/frontend/instruction.cpp
src/shader_recompiler/frontend/instruction.h
src/shader_recompiler/frontend/opcodes.h
src/shader_recompiler/frontend/structured_control_flow.cpp
src/shader_recompiler/frontend/structured_control_flow.h
src/shader_recompiler/ir/passes/constant_propagation_pass.cpp
src/shader_recompiler/ir/passes/dead_code_elimination_pass.cpp
src/shader_recompiler/ir/passes/flatten_extended_userdata_pass.cpp
src/shader_recompiler/ir/passes/hull_shader_transform.cpp
src/shader_recompiler/ir/passes/identity_removal_pass.cpp
src/shader_recompiler/ir/passes/inject_clip_distance_attributes.cpp
src/shader_recompiler/ir/passes/ir_passes.h
src/shader_recompiler/ir/passes/lower_buffer_format_to_raw.cpp
src/shader_recompiler/ir/passes/lower_fp64_to_fp32.cpp
src/shader_recompiler/ir/passes/readlane_elimination_pass.cpp
src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
src/shader_recompiler/ir/passes/ring_access_elimination.cpp
src/shader_recompiler/ir/passes/shader_info_collection_pass.cpp
src/shader_recompiler/ir/passes/shared_memory_barrier_pass.cpp
src/shader_recompiler/ir/passes/shared_memory_simplify_pass.cpp
src/shader_recompiler/ir/passes/shared_memory_to_storage_pass.cpp
src/shader_recompiler/ir/passes/ssa_rewrite_pass.cpp
src/shader_recompiler/ir/abstract_syntax_list.cpp
src/shader_recompiler/ir/abstract_syntax_list.h
src/shader_recompiler/ir/attribute.cpp
src/shader_recompiler/ir/attribute.h
src/shader_recompiler/ir/basic_block.cpp
src/shader_recompiler/ir/basic_block.h
src/shader_recompiler/ir/breadth_first_search.h
src/shader_recompiler/ir/condition.h
src/shader_recompiler/ir/ir_emitter.cpp
src/shader_recompiler/ir/ir_emitter.h
src/shader_recompiler/ir/microinstruction.cpp
src/shader_recompiler/ir/opcodes.cpp
src/shader_recompiler/ir/opcodes.h
src/shader_recompiler/ir/opcodes.inc
src/shader_recompiler/ir/operand_helper.h
src/shader_recompiler/ir/patch.cpp
src/shader_recompiler/ir/patch.h
src/shader_recompiler/ir/position.h
src/shader_recompiler/ir/post_order.cpp
src/shader_recompiler/ir/post_order.h
src/shader_recompiler/ir/program.cpp
src/shader_recompiler/ir/program.h
src/shader_recompiler/ir/reinterpret.h
src/shader_recompiler/ir/reg.h
src/shader_recompiler/ir/type.cpp
src/shader_recompiler/ir/type.h
src/shader_recompiler/ir/value.cpp
src/shader_recompiler/ir/value.h
)
set(VIDEO_CORE src/video_core/amdgpu/cb_db_extent.h
src/video_core/amdgpu/liverpool.cpp
src/video_core/amdgpu/liverpool.h
src/video_core/amdgpu/pixel_format.cpp
src/video_core/amdgpu/pixel_format.h
src/video_core/amdgpu/pm4_cmds.h
src/video_core/amdgpu/pm4_opcodes.h
src/video_core/amdgpu/regs_color.h
src/video_core/amdgpu/regs_depth.h
src/video_core/amdgpu/regs.cpp
src/video_core/amdgpu/regs.h
src/video_core/amdgpu/regs_primitive.h
src/video_core/amdgpu/regs_shader.h
src/video_core/amdgpu/regs_texture.h
src/video_core/amdgpu/regs_vertex.h
src/video_core/amdgpu/resource.h
src/video_core/amdgpu/tiling.cpp
src/video_core/amdgpu/tiling.h
src/video_core/buffer_cache/buffer.cpp
src/video_core/buffer_cache/buffer.h
src/video_core/buffer_cache/buffer_cache.cpp
src/video_core/buffer_cache/buffer_cache.h
src/video_core/buffer_cache/fault_manager.cpp
src/video_core/buffer_cache/fault_manager.h
src/video_core/buffer_cache/memory_tracker.h
src/video_core/buffer_cache/range_set.h
src/video_core/buffer_cache/region_definitions.h
src/video_core/buffer_cache/region_manager.h
src/video_core/renderer_vulkan/liverpool_to_vk.cpp
src/video_core/renderer_vulkan/liverpool_to_vk.h
src/video_core/renderer_vulkan/vk_common.cpp
src/video_core/renderer_vulkan/vk_common.h
src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
src/video_core/renderer_vulkan/vk_compute_pipeline.h
src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
src/video_core/renderer_vulkan/vk_graphics_pipeline.h
src/video_core/renderer_vulkan/vk_instance.cpp
src/video_core/renderer_vulkan/vk_instance.h
src/video_core/renderer_vulkan/vk_master_semaphore.cpp
src/video_core/renderer_vulkan/vk_master_semaphore.h
src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
src/video_core/renderer_vulkan/vk_pipeline_cache.h
src/video_core/renderer_vulkan/vk_pipeline_common.cpp
src/video_core/renderer_vulkan/vk_pipeline_common.h
src/video_core/renderer_vulkan/vk_pipeline_serialization.cpp
src/video_core/renderer_vulkan/vk_pipeline_serialization.h
src/video_core/renderer_vulkan/vk_platform.cpp
src/video_core/renderer_vulkan/vk_platform.h
src/video_core/renderer_vulkan/vk_presenter.cpp
src/video_core/renderer_vulkan/vk_presenter.h
src/video_core/renderer_vulkan/vk_rasterizer.cpp
src/video_core/renderer_vulkan/vk_rasterizer.h
src/video_core/renderer_vulkan/vk_resource_pool.cpp
src/video_core/renderer_vulkan/vk_resource_pool.h
src/video_core/renderer_vulkan/vk_scheduler.cpp
src/video_core/renderer_vulkan/vk_scheduler.h
src/video_core/renderer_vulkan/vk_shader_hle.cpp
src/video_core/renderer_vulkan/vk_shader_hle.h
src/video_core/renderer_vulkan/vk_shader_util.cpp
src/video_core/renderer_vulkan/vk_shader_util.h
src/video_core/renderer_vulkan/vk_swapchain.cpp
src/video_core/renderer_vulkan/vk_swapchain.h
src/video_core/renderer_vulkan/host_passes/fsr_pass.cpp
src/video_core/renderer_vulkan/host_passes/fsr_pass.h
src/video_core/renderer_vulkan/host_passes/pp_pass.cpp
src/video_core/renderer_vulkan/host_passes/pp_pass.h
src/video_core/texture_cache/blit_helper.cpp
src/video_core/texture_cache/blit_helper.h
src/video_core/texture_cache/host_compatibility.cpp
src/video_core/texture_cache/host_compatibility.h
src/video_core/texture_cache/image.cpp
src/video_core/texture_cache/image.h
src/video_core/texture_cache/image_info.cpp
src/video_core/texture_cache/image_info.h
src/video_core/texture_cache/image_view.cpp
src/video_core/texture_cache/image_view.h
src/video_core/texture_cache/sampler.cpp
src/video_core/texture_cache/sampler.h
src/video_core/texture_cache/texture_cache.cpp
src/video_core/texture_cache/texture_cache.h
src/video_core/texture_cache/tile_manager.cpp
src/video_core/texture_cache/tile_manager.h
src/video_core/texture_cache/types.h
src/video_core/cache_storage.cpp
src/video_core/cache_storage.h
src/video_core/page_manager.cpp
src/video_core/page_manager.h
src/video_core/multi_level_page_table.h
src/video_core/renderdoc.cpp
src/video_core/renderdoc.h
)
set(IMGUI src/imgui/imgui_config.h
src/imgui/imgui_layer.h
src/imgui/imgui_std.h
src/imgui/imgui_texture.h
src/imgui/renderer/imgui_core.cpp
src/imgui/renderer/imgui_core.h
src/imgui/renderer/imgui_impl_sdl3.cpp
src/imgui/renderer/imgui_impl_sdl3.h
src/imgui/renderer/imgui_impl_vulkan.cpp
src/imgui/renderer/imgui_impl_vulkan.h
src/imgui/renderer/texture_manager.cpp
src/imgui/renderer/texture_manager.h
)
set(INPUT src/input/controller.cpp
src/input/controller.h
src/input/input_handler.cpp
src/input/input_handler.h
src/input/input_mouse.cpp
src/input/input_mouse.h
)
set(EMULATOR src/emulator.cpp
src/emulator.h
src/sdl_window.h
src/sdl_window.cpp
)
add_executable(shadps4
${AUDIO_CORE}
${IMGUI}
${INPUT}
${COMMON}
${CORE}
${SHADER_RECOMPILER}
${VIDEO_CORE}
${EMULATOR}
src/main.cpp
src/emulator.cpp
src/emulator.h
src/sdl_window.h
src/sdl_window.cpp
)
create_target_directory_groups(shadps4)
target_link_libraries(shadps4 PRIVATE magic_enum::magic_enum fmt::fmt toml11::toml11 tsl::robin_map xbyak::xbyak Tracy::TracyClient RenderDoc::API FFmpeg::ffmpeg Dear_ImGui gcn half::half ZLIB::ZLIB PNG::PNG)
target_link_libraries(shadps4 PRIVATE Boost::headers GPUOpen::VulkanMemoryAllocator LibAtrac9 sirit Vulkan::Headers xxHash::xxhash Zydis::Zydis glslang::glslang SDL3::SDL3 SDL3_mixer::SDL3_mixer pugixml::pugixml)
target_link_libraries(shadps4 PRIVATE stb::headers libusb::usb lfreist-hwinfo::hwinfo nlohmann_json::nlohmann_json miniz::miniz fdk-aac CLI11::CLI11 OpenAL::OpenAL Cpp_Httplib)
target_compile_definitions(shadps4 PRIVATE IMGUI_USER_CONFIG="imgui/imgui_config.h")
target_compile_definitions(Dear_ImGui PRIVATE IMGUI_USER_CONFIG="${PROJECT_SOURCE_DIR}/src/imgui/imgui_config.h")
if (ENABLE_DISCORD_RPC)
target_compile_definitions(shadps4 PRIVATE ENABLE_DISCORD_RPC)
endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
# Optional due to https://github.com/shadps4-emu/shadPS4/issues/1704
if (ENABLE_USERFAULTFD)
target_compile_definitions(shadps4 PRIVATE ENABLE_USERFAULTFD)
endif()
target_link_libraries(shadps4 PRIVATE uuid)
endif()
if (APPLE)
# Include MoltenVK, along with an ICD file so it can be found by the system Vulkan loader if used for loading layers.
set_property(TARGET shadps4 APPEND PROPERTY BUILD_RPATH "@executable_path")
set(MVK_DST ${CMAKE_CURRENT_BINARY_DIR})
set(MVK_DYLIB_SRC ${CMAKE_CURRENT_BINARY_DIR}/externals/MoltenVK/MoltenVK/libMoltenVK.dylib)
set(MVK_DYLIB_DST ${MVK_DST}/libMoltenVK.dylib)
set(MVK_ICD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/externals/MoltenVK/MoltenVK/icd/MoltenVK_icd.json)
set(MVK_ICD_DST ${MVK_DST}/MoltenVK_icd.json)
add_custom_command(
OUTPUT ${MVK_ICD_DST}
DEPENDS ${MVK_ICD_SRC} ${MVK_DST}
COMMAND ${CMAKE_COMMAND} -E copy ${MVK_ICD_SRC} ${MVK_ICD_DST})
add_custom_command(
OUTPUT ${MVK_DYLIB_DST}
DEPENDS ${MVK_DYLIB_SRC} ${MVK_DST}
COMMAND ${CMAKE_COMMAND} -E copy ${MVK_DYLIB_SRC} ${MVK_DYLIB_DST})
add_custom_target(CopyMoltenVK DEPENDS ${MVK_ICD_DST} ${MVK_DYLIB_DST})
add_dependencies(CopyMoltenVK MoltenVK)
add_dependencies(shadps4 CopyMoltenVK)
if (ARCHITECTURE STREQUAL "x86_64")
# Reserve system-managed memory space.
target_link_options(shadps4 PRIVATE -Wl,-ld_classic,-no_pie,-no_fixup_chains,-no_huge,-pagezero_size,0x4000,-segaddr,TCB_SPACE,0x4000,-segaddr,SYSTEM_MANAGED,0x400000,-segaddr,SYSTEM_RESERVED,0x7FFFFC000,-segaddr,USER_AREA,0x7000000000,-image_base,0x700000000000)
endif()
# Replacement for std::chrono::time_zone
target_link_libraries(shadps4 PRIVATE date::date-tz epoll-shim)
endif()
if (WIN32)
target_link_libraries(shadps4 PRIVATE mincore wepoll wbemuuid)
if (MSVC)
# MSVC likes putting opinions on what people can use, disable:
add_compile_definitions(_CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE _SCL_SECURE_NO_WARNINGS)
endif()
add_compile_definitions(NOMINMAX WIN32_LEAN_AND_MEAN)
if (MSVC)
# Needed for conflicts with time.h of windows.h
add_compile_definitions(_TIMESPEC_DEFINED)
endif()
# Target Windows 10 RS5
add_compile_definitions(NTDDI_VERSION=0x0A000006 _WIN32_WINNT=0x0A00 WINVER=0x0A00)
if (MSVC)
target_link_libraries(shadps4 PRIVATE clang_rt.builtins-x86_64.lib)
endif()
# Disable ASLR so we can reserve the user area
if (MSVC)
target_link_options(shadps4 PRIVATE /DYNAMICBASE:NO)
else()
target_link_options(shadps4 PRIVATE -Wl,--disable-dynamicbase)
endif()
# Increase stack commit area (Needed, otherwise there are crashes)
if (MSVC)
target_link_options(shadps4 PRIVATE /STACK:0x200000,0x200000)
else()
target_link_options(shadps4 PRIVATE -Wl,--stack,2097152)
endif()
# Change base image address
if (MSVC)
target_link_options(shadps4 PRIVATE /BASE:0x700000000000)
else()
target_link_options(shadps4 PRIVATE -Wl,--image-base=0x700000000000)
endif()
endif()
if (WIN32)
target_sources(shadps4 PRIVATE src/shadps4.rc)
endif()
add_compile_definitions(BOOST_ASIO_STANDALONE)
target_include_directories(shadps4 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
# Shaders sources
set(HOST_SHADERS_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/src/video_core/host_shaders)
add_subdirectory(${HOST_SHADERS_INCLUDE})
add_dependencies(shadps4 host_shaders)
target_include_directories(shadps4 PRIVATE ${HOST_SHADERS_INCLUDE})
# embed resources
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeRC.cmake")
cmrc_add_resource_library(embedded-resources
ALIAS res::embedded
NAMESPACE res
src/images/trophy.wav
src/images/bronze.png
src/images/gold.png
src/images/platinum.png
src/images/silver.png)
target_link_libraries(shadps4 PRIVATE res::embedded)
# ImGui resources
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/imgui/renderer)
add_dependencies(shadps4 ImGui_Resources)
target_include_directories(shadps4 PRIVATE ${IMGUI_RESOURCES_INCLUDE})
# Discord RPC
if (ENABLE_DISCORD_RPC)
target_link_libraries(shadps4 PRIVATE discord-rpc)
endif()
# Install rules
install(TARGETS shadps4 BUNDLE DESTINATION .)
================================================
FILE: CMakePresets.json
================================================
{
"version": 9,
"cmakeMinimumRequired": {
"major": 3,
"minor": 30,
"patch": 0
},
"include": ["CMake${hostSystemName}Presets.json"],
"configurePresets": [
{
"name": "x64-Clang-Debug",
"displayName": "Clang x64 Debug",
"inherits": ["x64-Clang-Base"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "x64-Clang-Release",
"displayName": "Clang x64 Release",
"inherits": ["x64-Clang-Base"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "x64-Clang-RelWithDebInfo",
"displayName": "Clang x64 RelWithDebInfo",
"inherits": ["x64-Clang-Base"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
}
]
}
================================================
FILE: CMakeSettings.json
================================================
{
"configurations": [
{
"name": "x64-Clang-Release",
"generator": "Ninja",
"configurationType": "Release",
"buildRoot": "${projectDir}\\Build\\${name}",
"installRoot": "${projectDir}\\Install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "clang_cl_x64_x64" ],
"intelliSenseMode": "windows-clang-x64"
},
{
"name": "x64-Clang-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"buildRoot": "${projectDir}\\Build\\${name}",
"installRoot": "${projectDir}\\Install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "clang_cl_x64_x64" ],
"intelliSenseMode": "windows-clang-x64"
},
{
"name": "x64-Clang-RelWithDebInfo",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\Build\\${name}",
"installRoot": "${projectDir}\\Install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "clang_cl_x64_x64" ],
"intelliSenseMode": "windows-clang-x64"
}
]
}
================================================
FILE: CMakeWindowsPresets.json
================================================
{
"version": 9,
"cmakeMinimumRequired": {
"major": 3,
"minor": 30,
"patch": 0
},
"configurePresets": [
{
"name": "x64-Clang-Base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/Build/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang-cl",
"CMAKE_CXX_COMPILER": "clang-cl",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/Build/${presetName}"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"intelliSenseMode": "windows-clang-x64"
}
}
}
]
}
================================================
FILE: CONTRIBUTING.md
================================================
<!--
SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
# Style guidelines
## General Rules
* Line width is typically 100 characters. Please do not use 80-characters.
* Don't ever introduce new external dependencies into Core
* Don't use any platform specific code in Core
* Use namespaces often
* Avoid the use of C-style casts and instead prefer C++-style static_cast and reinterpret_cast. Try to avoid using dynamic_cast. Never use const_cast except for when dealing with external const-incorrect APIs.
## Naming Rules
* Functions: `PascalCase`
* Variables: `lower_case_underscored. Prefix with g_ if global.`
* Classes: `PascalCase`
* Files and Directories: `lower_case_underscored`
* Namespaces: `PascalCase`, `_` may also be used for clarity (e.g. `ARM_InitCore`)
# Indentation/Whitespace Style
Follow the indentation/whitespace style shown below. Do not use tabs, use 4-spaces instead.
# Comments
* For regular comments, use C++ style (//) comments, even for multi-line ones.
* For doc-comments (Doxygen comments), use /// if it's a single line, else use the /** */ style featured in the example. Start the text on the second line, not the first containing /**.
* For items that are both defined and declared in two separate files, put the doc-comment only next to the associated declaration. (In a header file, usually.) Otherwise, put it next to the implementation. Never duplicate doc-comments in both places.
```c++
// Includes should be sorted lexicographically
// STD includes first
#include <array>
#include <map>
#include <memory>
// then, library includes
#include <nihstro/shared_binary.h>
// finally, shadps4 includes
#include "common/math_util.h"
#include "common/vector_math.h"
// each major module is separated
#include "video_core/pica.h"
#include "video_core/video_core.h"
namespace Example {
// Namespace contents are not indented
// Declare globals at the top (better yet, don't use globals at all!)
int g_foo{}; // {} can be used to initialize types as 0, false, or nullptr
char* g_some_pointer{}; // Pointer * and reference & stick to the type name, and make sure to initialize as nullptr!
/// A colorful enum.
enum class SomeEnum {
Red, ///< The color of fire.
Green, ///< The color of grass.
Blue, ///< Not actually the color of water.
};
/**
* Very important struct that does a lot of stuff.
* Note that the asterisks are indented by one space to align to the first line.
*/
struct Position {
// Always initialize member variables!
int x{};
int y{};
};
// Use "typename" rather than "class" here
template <typename T>
void FooBar() {
const std::string some_string{"prefer uniform initialization"};
const std::array<int, 4> some_array{
5,
25,
7,
42,
};
if (note == the_space_after_the_if) {
CallAFunction();
} else {
// Use a space after the // when commenting
}
// Place a single space after the for loop semicolons, prefer pre-increment
for (int i = 0; i != 25; ++i) {
// This is how we write loops
}
DoStuff(this, function, call, takes, up, multiple,
lines, like, this);
if (this || condition_takes_up_multiple &&
lines && like && this || everything ||
alright || then) {
// Leave a blank space before the if block body if the condition was continued across
// several lines.
}
// No indentation for case labels
switch (var) {
case 1: {
const int case_var{var + 3};
DoSomething(case_var);
break;
}
case 3:
DoSomething(var);
return;
default:
// Yes, even break for the last case
break;
}
}
} // namespace Example
```
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
================================================
FILE: LICENSES/BSD-3-Clause.txt
================================================
Copyright (c) <year> <owner>.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: LICENSES/BSL-1.0.txt
================================================
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following:
The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: LICENSES/CC0-1.0.txt
================================================
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.
================================================
FILE: LICENSES/GPL-2.0-or-later.txt
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice
================================================
FILE: LICENSES/MIT.txt
================================================
MIT License
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: LICENSES/OFL-1.1.txt
================================================
SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting, or substituting — in part or in whole — any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
================================================
FILE: README.md
================================================
<!--
SPDX-FileCopyrightText: 2026 shadPS4 Emulator Project
SPDX-License-Identifier: GPL-2.0-or-later
-->
<h1 align="center">
<br>
<a href="https://shadps4.net/"><img src="https://github.com/shadps4-emu/shadPS4/blob/main/.github/shadps4.png" width="220"></a>
<br>
<b>shadPS4</b>
<br>
</h1>
<h1 align="center">
<a href="https://discord.gg/bFJxfftGW6">
<img src="https://img.shields.io/discord/1080089157554155590?color=5865F2&label=shadPS4%20Discord&logo=Discord&logoColor=white" width="275">
<a href="https://github.com/shadps4-emu/shadPS4/releases/latest">
<img src="https://img.shields.io/github/downloads/shadps4-emu/shadPS4/total.svg" width="140">
<a href="https://shadps4.net/">
<img src="https://img.shields.io/badge/shadPS4-website-8A2BE2" width="150">
<a href="https://x.com/shadps4">
<img src="https://img.shields.io/badge/-Join%20us-black?logo=X&logoColor=white" width="100">
<a href="https://github.com/shadps4-emu/shadPS4/stargazers">
<img src="https://img.shields.io/github/stars/shadps4-emu/shadPS4" width="120">
</h1>
| Bloodborne by From Software | Hatsune Miku Project DIVA Future Tone by SEGA |
| :-----------------------------------------------------------: | :--------------------------------------------------------------------------------------------: |
|  |  |
| Yakuza 0 by SEGA | DRIVECLUB™ by Evolution Studios |
| :------------------------------------------------------------------------: | :------------------------------------------------------------------: |
|  |  |
# General information
**shadPS4** is an early **PlayStation 4** emulator for **Windows**, **Linux** and **macOS** written in C++.
> [!IMPORTANT]
> This is the emulator core, which does not include a GUI. If you just want to use the emulator as an end user, download the [**QtLauncher**](https://github.com/shadps4-emu/shadps4-qtlauncher/releases) instead.
If you encounter problems or have doubts, do not hesitate to look at the [**Quickstart**](https://github.com/shadps4-emu/shadPS4/wiki/I.-Quick-start-%5BUsers%5D).\
To verify that a game works, you can look at [**shadPS4 Game Compatibility**](https://github.com/shadps4-compatibility/shadps4-game-compatibility).\
To discuss shadPS4 development, suggest ideas or to ask for help, join our [**Discord server**](https://discord.gg/bFJxfftGW6).\
To get the latest news, go to our [**X (Twitter)**](https://x.com/shadps4) or our [**website**](https://shadps4.net/).\
You can donate to the project via our [**Kofi page**](https://ko-fi.com/shadps4).
# Status
> [!IMPORTANT]
> shadPS4 is early in development, don't expect a flawless experience.
Currently, the emulator can successfully run games like [**Bloodborne**](https://www.youtube.com/watch?v=5sZgWyVflFM), [**Dark Souls Remastered**](https://www.youtube.com/watch?v=-3PA-Xwszts), [**Red Dead Redemption**](https://www.youtube.com/watch?v=Al7yz_5nLag), and many other games.
# Why
This project began for fun. Given our limited free time, it may take some time before shadPS4 can run more complex games, but we're committed to making small, regular updates.
# Building
## Docker
For building shadPS4 in a containerized environment using Docker and VSCode, check the instructions here:
[**Docker Build Instructions**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-docker.md)
## Windows
Check the build instructions for [**Windows**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-windows.md).
## Linux
Check the build instructions for [**Linux**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-linux.md).
## macOS
Check the build instructions for [**macOS**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-macos.md).
> [!IMPORTANT]
> macOS users need at least macOS 15.4 to run shadPS4. Due to GPU issues there are currently heavy bugs on Intel Macs.
# Usage examples
> [!IMPORTANT]
> For a user-friendly GUI, download the [**QtLauncher**](https://github.com/shadps4-emu/shadps4-qtlauncher/releases).
To get the list of all available commands and also a more detailed description of what each command does, please refer to the `--help` flag's output.
Below is a list of commonly used command patterns:
```sh
shadPS4 CUSA00001 # Searches for a game folder called CUSA00001 in the list of game install folders, and boots it.
shadPS4 --fullscreen true --config-clean CUSA00001 # the game argument is always the last one,
shadPS4 -g CUSA00001 --fullscreen true --config-clean # ...unless manually specified otherwise.
shadPS4 /path/to/game.elf # Boots a PS4 ELF file directly. Useful if you want to boot an executable that is not named eboot.bin.
shadPS4 CUSA00001 -- -flag1 -flag2 # Passes '-flag1' and '-flag2' to the game executable in argv.
```
# Debugging and reporting issues
For more information on how to test, debug and report issues with the emulator or games, read the [**Debugging documentation**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/Debugging/Debugging.md).
# Keyboard and Mouse Mappings
> [!NOTE]
> Some keyboards may also require you to hold the Fn key to use the F\* keys. Mac users should use the Command key instead of Control, and need to use Command+F11 for full screen to avoid conflicting with system key bindings.
| Button | Function |
|-------------|-------------|
F10 | FPS Counter
Ctrl+F10 | Video Debug Info
F11 | Fullscreen
F12 | Trigger RenderDoc Capture
> [!NOTE]
> Xbox and DualShock controllers work out of the box.
| Controller button | Keyboard equivalent |
|-------------|-------------|
LEFT AXIS UP | W |
LEFT AXIS DOWN | S |
LEFT AXIS LEFT | A |
LEFT AXIS RIGHT | D |
RIGHT AXIS UP | I |
RIGHT AXIS DOWN | K |
RIGHT AXIS LEFT | J |
RIGHT AXIS RIGHT | L |
TRIANGLE | Numpad 8 or C |
CIRCLE | Numpad 6 or B |
CROSS | Numpad 2 or N |
SQUARE | Numpad 4 or V |
PAD UP | UP |
PAD DOWN | DOWN |
PAD LEFT | LEFT |
PAD RIGHT | RIGHT |
OPTIONS | RETURN |
BACK BUTTON / TOUCH PAD | SPACE |
L1 | Q |
R1 | U |
L2 | E |
R2 | O |
L3 | X |
R3 | M |
Keyboard and mouse inputs can be customized in the settings menu by clicking the Controller button, and further details and help on controls are also found there. Custom bindings are saved per-game. Inputs support up to three keys per binding, mouse buttons, mouse movement mapped to joystick input, and more.
# Firmware files
shadPS4 can load some PlayStation 4 firmware files.
The following firmware modules are supported and must be placed in shadPS4's `sys_modules` folder.
<div align="center">
| Modules | Modules | Modules | Modules |
|-------------------------|-------------------------|-------------------------|-------------------------|
| libSceCesCs.sprx | libSceFont.sprx | libSceFontFt.sprx | libSceFreeTypeOt.sprx |
| libSceJpegDec.sprx | libSceJpegEnc.sprx | libSceJson.sprx | libSceJson2.sprx |
| libSceLibcInternal.sprx | libSceNgs2.sprx | libScePngEnc.sprx | libSceRtc.sprx |
| libSceUlt.sprx | libSceAudiodec.sprx | | |
</div>
> [!Caution]
> The above modules are required to run the games properly and must be dumped from your legally owned PlayStation 4 console.
# Main team
- [**georgemoralis**](https://github.com/georgemoralis)
- [**psucien**](https://github.com/psucien)
- [**viniciuslrangel**](https://github.com/viniciuslrangel)
- [**roamic**](https://github.com/roamic)
- [**squidbus**](https://github.com/squidbus)
- [**frodo**](https://github.com/baggins183)
- [**Stephen Miller**](https://github.com/StevenMiller123)
- [**kalaposfos13**](https://github.com/kalaposfos13)
Logo is done by [**Xphalnos**](https://github.com/Xphalnos)
# Contributing
If you want to contribute, please read the [**CONTRIBUTING.md**](https://github.com/shadps4-emu/shadPS4/blob/main/CONTRIBUTING.md) file.\
Open a PR and we'll check it :)
# Special Thanks
A few noteworthy teams/projects who've helped us along the way are:
- [**Panda3DS**](https://github.com/wheremyfoodat/Panda3DS): A multiplatform 3DS emulator from our co-author wheremyfoodat. They have been incredibly helpful in understanding and solving problems that came up from natively executing the x64 code of PS4 binaries
- [**fpPS4**](https://github.com/red-prig/fpPS4): The fpPS4 team has assisted massively with understanding some of the more complex parts of the PS4 operating system and libraries, by helping with reverse engineering work and research.
- **yuzu**: Our shader compiler has been designed with yuzu's Hades compiler as a blueprint. This allowed us to focus on the challenges of emulating a modern AMD GPU while having a high-quality optimizing shader compiler implementation as a base.
- [**felix86**](https://github.com/OFFTKP/felix86): A new x86-64 → RISC-V Linux userspace emulator
# License
- [**GPL-2.0 license**](https://github.com/shadps4-emu/shadPS4/blob/main/LICENSE)
================================================
FILE: REUSE.toml
================================================
version = 1
[[annotations]]
path = [
"REUSE.toml",
"crowdin.yml",
"CMakeSettings.json",
"CMakeDarwinPresets.json",
"CMakeLinuxPresets.json",
"CMakeWindowsPresets.json",
"CMakePresets.json",
".github/FUNDING.yml",
".github/shadps4.png",
".gitmodules",
"dist/MacOSBundleInfo.plist.in",
"dist/net.shadps4.shadPS4.desktop",
"dist/net.shadps4.shadPS4_metadata.pot",
"dist/net.shadps4.shadPS4.metainfo.xml",
"documents/changelog.md",
"documents/Quickstart/2.png",
"documents/Screenshots/*",
"documents/Screenshots/Linux/*",
"documents/Screenshots/Windows/*",
"externals/MoltenVK/MoltenVK_icd.json",
"scripts/ps4_names.txt",
"src/images/bronze.png",
"src/images/gold.png",
"src/images/platinum.png",
"src/images/silver.png",
"src/images/about_icon.png",
"src/images/controller_icon.png",
"src/images/discord.png",
"src/images/dump_icon.png",
"src/images/exit_icon.png",
"src/images/favorite_icon.png",
"src/images/trophy_icon.png",
"src/images/flag_china.png",
"src/images/flag_eu.png",
"src/images/flag_jp.png",
"src/images/flag_unk.png",
"src/images/flag_us.png",
"src/images/flag_world.png",
"src/images/folder_icon.png",
"src/images/github.png",
"src/images/grid_icon.png",
"src/images/keyboard_icon.png",
"src/images/iconsize_icon.png",
"src/images/KBM.png",
"src/images/ko-fi.png",
"src/images/list_icon.png",
"src/images/list_mode_icon.png",
"src/images/pause_icon.png",
"src/images/play_icon.png",
"src/images/ps4_controller.png",
"src/images/restart_game_icon.png",
"src/images/refreshlist_icon.png",
"src/images/settings_icon.png",
"src/images/fullscreen_icon.png",
"src/images/stop_icon.png",
"src/images/utils_icon.png",
"src/images/shadPS4.icns",
"src/images/shadps4.ico",
"src/images/shadps4.png",
"src/images/net.shadps4.shadPS4.svg",
"src/images/themes_icon.png",
"src/images/update_icon.png",
"src/images/youtube.png",
"src/images/website.png",
"src/images/discord.svg",
"src/images/github.svg",
"src/images/ko-fi.svg",
"src/images/shadps4.svg",
"src/images/website.svg",
"src/images/youtube.svg",
"src/images/trophy.wav",
"src/images/hotkey.png",
"src/images/game_settings.png",
"src/shadps4.rc",
]
precedence = "aggregate"
SPDX-FileCopyrightText = "shadPS4 Emulator Project"
SPDX-License-Identifier = "GPL-2.0-or-later"
[[annotations]]
path = "externals/cmake-modules/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "2009-2010 Iowa State University"
SPDX-License-Identifier = "BSL-1.0"
[[annotations]]
path = "externals/renderdoc/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "2019-2024 Baldur Karlsson"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "externals/stb/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "2017 Sean Barrett"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "externals/tracy/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "2017-2024 Bartosz Taudul <wolf@nereid.pl>"
SPDX-License-Identifier = "BSD-3-Clause"
[[annotations]]
path = "src/imgui/renderer/fonts/NotoSansJP-Regular.ttf"
precedence = "aggregate"
SPDX-FileCopyrightText = "2012 Google Inc. All Rights Reserved."
SPDX-License-Identifier = "OFL-1.1"
[[annotations]]
path = "src/imgui/renderer/fonts/ProggyVector-Regular.ttf"
precedence = "aggregate"
SPDX-FileCopyrightText = "Copyright (c) 2004, 2005 Tristan Grimmer"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "externals/gcn/include/**"
SPDX-FileCopyrightText = "NONE"
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
path = "cmake/CMakeRC.cmake"
SPDX-FileCopyrightText = "Copyright (c) 2017 vector-of-bool <vectorofbool@gmail.com>"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "src/video_core/host_shaders/fsr/*"
SPDX-FileCopyrightText = "Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved."
SPDX-License-Identifier = "MIT"
================================================
FILE: cmake/CMakeRC.cmake
================================================
# MIT License
#
# Copyright (c) 2017 vector-of-bool <vectorofbool@gmail.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# This block is executed when generating an intermediate resource file, not when
# running in CMake configure mode
if(_CMRC_GENERATE_MODE)
# Read in the digits
file(READ "${INPUT_FILE}" bytes HEX)
# Format each pair into a character literal. Heuristics seem to favor doing
# the conversion in groups of five for fastest conversion
string(REGEX REPLACE "(..)(..)(..)(..)(..)" "'\\\\x\\1','\\\\x\\2','\\\\x\\3','\\\\x\\4','\\\\x\\5'," chars "${bytes}")
# Since we did this in groups, we have some leftovers to clean up
string(LENGTH "${bytes}" n_bytes2)
math(EXPR n_bytes "${n_bytes2} / 2")
math(EXPR remainder "${n_bytes} % 5") # <-- '5' is the grouping count from above
set(cleanup_re "$")
set(cleanup_sub )
while(remainder)
set(cleanup_re "(..)${cleanup_re}")
set(cleanup_sub "'\\\\x\\${remainder}',${cleanup_sub}")
math(EXPR remainder "${remainder} - 1")
endwhile()
if(NOT cleanup_re STREQUAL "$")
string(REGEX REPLACE "${cleanup_re}" "${cleanup_sub}" chars "${chars}")
endif()
string(CONFIGURE [[
namespace { const char file_array[] = { @chars@ 0 }; }
namespace cmrc { namespace @NAMESPACE@ { namespace res_chars {
extern const char* const @SYMBOL@_begin = file_array;
extern const char* const @SYMBOL@_end = file_array + @n_bytes@;
}}}
]] code)
file(WRITE "${OUTPUT_FILE}" "${code}")
# Exit from the script. Nothing else needs to be processed
return()
endif()
set(_version 2.0.0)
cmake_minimum_required(VERSION 3.12)
include(CMakeParseArguments)
if(COMMAND cmrc_add_resource_library)
if(NOT DEFINED _CMRC_VERSION OR NOT (_version STREQUAL _CMRC_VERSION))
message(WARNING "More than one CMakeRC version has been included in this project.")
endif()
# CMakeRC has already been included! Don't do anything
return()
endif()
set(_CMRC_VERSION "${_version}" CACHE INTERNAL "CMakeRC version. Used for checking for conflicts")
set(_CMRC_SCRIPT "${CMAKE_CURRENT_LIST_FILE}" CACHE INTERNAL "Path to CMakeRC script")
function(_cmrc_normalize_path var)
set(path "${${var}}")
file(TO_CMAKE_PATH "${path}" path)
while(path MATCHES "//")
string(REPLACE "//" "/" path "${path}")
endwhile()
string(REGEX REPLACE "/+$" "" path "${path}")
set("${var}" "${path}" PARENT_SCOPE)
endfunction()
get_filename_component(_inc_dir "${CMAKE_BINARY_DIR}/_cmrc/include" ABSOLUTE)
set(CMRC_INCLUDE_DIR "${_inc_dir}" CACHE INTERNAL "Directory for CMakeRC include files")
# Let's generate the primary include file
file(MAKE_DIRECTORY "${CMRC_INCLUDE_DIR}/cmrc")
set(hpp_content [==[
#ifndef CMRC_CMRC_HPP_INCLUDED
#define CMRC_CMRC_HPP_INCLUDED
#include <cassert>
#include <functional>
#include <iterator>
#include <list>
#include <map>
#include <mutex>
#include <string>
#include <system_error>
#include <type_traits>
#if !(defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND) || defined(CMRC_NO_EXCEPTIONS))
#define CMRC_NO_EXCEPTIONS 1
#endif
namespace cmrc { namespace detail { struct dummy; } }
#define CMRC_DECLARE(libid) \
namespace cmrc { namespace detail { \
struct dummy; \
static_assert(std::is_same<dummy, ::cmrc::detail::dummy>::value, "CMRC_DECLARE() must only appear at the global namespace"); \
} } \
namespace cmrc { namespace libid { \
cmrc::embedded_filesystem get_filesystem(); \
} } static_assert(true, "")
namespace cmrc {
class file {
const char* _begin = nullptr;
const char* _end = nullptr;
public:
using iterator = const char*;
using const_iterator = iterator;
iterator begin() const noexcept { return _begin; }
iterator cbegin() const noexcept { return _begin; }
iterator end() const noexcept { return _end; }
iterator cend() const noexcept { return _end; }
std::size_t size() const { return static_cast<std::size_t>(std::distance(begin(), end())); }
file() = default;
file(iterator beg, iterator end) noexcept : _begin(beg), _end(end) {}
};
class directory_entry;
namespace detail {
class directory;
class file_data;
class file_or_directory {
union _data_t {
class file_data* file_data;
class directory* directory;
} _data;
bool _is_file = true;
public:
explicit file_or_directory(file_data& f) {
_data.file_data = &f;
}
explicit file_or_directory(directory& d) {
_data.directory = &d;
_is_file = false;
}
bool is_file() const noexcept {
return _is_file;
}
bool is_directory() const noexcept {
return !is_file();
}
const directory& as_directory() const noexcept {
assert(!is_file());
return *_data.directory;
}
const file_data& as_file() const noexcept {
assert(is_file());
return *_data.file_data;
}
};
class file_data {
public:
const char* begin_ptr;
const char* end_ptr;
file_data(const file_data&) = delete;
file_data(const char* b, const char* e) : begin_ptr(b), end_ptr(e) {}
};
inline std::pair<std::string, std::string> split_path(const std::string& path) {
auto first_sep = path.find("/");
if (first_sep == path.npos) {
return std::make_pair(path, "");
} else {
return std::make_pair(path.substr(0, first_sep), path.substr(first_sep + 1));
}
}
struct created_subdirectory {
class directory& directory;
class file_or_directory& index_entry;
};
class directory {
std::list<file_data> _files;
std::list<directory> _dirs;
std::map<std::string, file_or_directory> _index;
using base_iterator = std::map<std::string, file_or_directory>::const_iterator;
public:
directory() = default;
directory(const directory&) = delete;
created_subdirectory add_subdir(std::string name) & {
_dirs.emplace_back();
auto& back = _dirs.back();
auto& fod = _index.emplace(name, file_or_directory{back}).first->second;
return created_subdirectory{back, fod};
}
file_or_directory* add_file(std::string name, const char* begin, const char* end) & {
assert(_index.find(name) == _index.end());
_files.emplace_back(begin, end);
return &_index.emplace(name, file_or_directory{_files.back()}).first->second;
}
const file_or_directory* get(const std::string& path) const {
auto pair = split_path(path);
auto child = _index.find(pair.first);
if (child == _index.end()) {
return nullptr;
}
auto& entry = child->second;
if (pair.second.empty()) {
// We're at the end of the path
return &entry;
}
if (entry.is_file()) {
// We can't traverse into a file. Stop.
return nullptr;
}
// Keep going down
return entry.as_directory().get(pair.second);
}
class iterator {
base_iterator _base_iter;
base_iterator _end_iter;
public:
using value_type = directory_entry;
using difference_type = std::ptrdiff_t;
using pointer = const value_type*;
using reference = const value_type&;
using iterator_category = std::input_iterator_tag;
iterator() = default;
explicit iterator(base_iterator iter, base_iterator end) : _base_iter(iter), _end_iter(end) {}
iterator begin() const noexcept {
return *this;
}
iterator end() const noexcept {
return iterator(_end_iter, _end_iter);
}
inline value_type operator*() const noexcept;
bool operator==(const iterator& rhs) const noexcept {
return _base_iter == rhs._base_iter;
}
bool operator!=(const iterator& rhs) const noexcept {
return !(*this == rhs);
}
iterator& operator++() noexcept {
++_base_iter;
return *this;
}
iterator operator++(int) noexcept {
auto cp = *this;
++_base_iter;
return cp;
}
};
using const_iterator = iterator;
iterator begin() const noexcept {
return iterator(_index.begin(), _index.end());
}
iterator end() const noexcept {
return iterator();
}
};
inline std::string normalize_path(std::string path) {
while (path.find("/") == 0) {
path.erase(path.begin());
}
while (!path.empty() && (path.rfind("/") == path.size() - 1)) {
path.pop_back();
}
auto off = path.npos;
while ((off = path.find("//")) != path.npos) {
path.erase(path.begin() + static_cast<std::string::difference_type>(off));
}
return path;
}
using index_type = std::map<std::string, const cmrc::detail::file_or_directory*>;
} // detail
class directory_entry {
std::string _fname;
const detail::file_or_directory* _item;
public:
directory_entry() = delete;
explicit directory_entry(std::string filename, const detail::file_or_directory& item)
: _fname(filename)
, _item(&item)
{}
const std::string& filename() const & {
return _fname;
}
std::string filename() const && {
return std::move(_fname);
}
bool is_file() const {
return _item->is_file();
}
bool is_directory() const {
return _item->is_directory();
}
};
directory_entry detail::directory::iterator::operator*() const noexcept {
assert(begin() != end());
return directory_entry(_base_iter->first, _base_iter->second);
}
using directory_iterator = detail::directory::iterator;
class embedded_filesystem {
// Never-null:
const cmrc::detail::index_type* _index;
const detail::file_or_directory* _get(std::string path) const {
path = detail::normalize_path(path);
auto found = _index->find(path);
if (found == _index->end()) {
return nullptr;
} else {
return found->second;
}
}
public:
explicit embedded_filesystem(const detail::index_type& index)
: _index(&index)
{}
file open(const std::string& path) const {
auto entry_ptr = _get(path);
if (!entry_ptr || !entry_ptr->is_file()) {
#ifdef CMRC_NO_EXCEPTIONS
fprintf(stderr, "Error no such file or directory: %s\n", path.c_str());
abort();
#else
throw std::system_error(make_error_code(std::errc::no_such_file_or_directory), path);
#endif
}
auto& dat = entry_ptr->as_file();
return file{dat.begin_ptr, dat.end_ptr};
}
bool is_file(const std::string& path) const noexcept {
auto entry_ptr = _get(path);
return entry_ptr && entry_ptr->is_file();
}
bool is_directory(const std::string& path) const noexcept {
auto entry_ptr = _get(path);
return entry_ptr && entry_ptr->is_directory();
}
bool exists(const std::string& path) const noexcept {
return !!_get(path);
}
directory_iterator iterate_directory(const std::string& path) const {
auto entry_ptr = _get(path);
if (!entry_ptr) {
#ifdef CMRC_NO_EXCEPTIONS
fprintf(stderr, "Error no such file or directory: %s\n", path.c_str());
abort();
#else
throw std::system_error(make_error_code(std::errc::no_such_file_or_directory), path);
#endif
}
if (!entry_ptr->is_directory()) {
#ifdef CMRC_NO_EXCEPTIONS
fprintf(stderr, "Error not a directory: %s\n", path.c_str());
abort();
#else
throw std::system_error(make_error_code(std::errc::not_a_directory), path);
#endif
}
return entry_ptr->as_directory().begin();
}
};
}
#endif // CMRC_CMRC_HPP_INCLUDED
]==])
set(cmrc_hpp "${CMRC_INCLUDE_DIR}/cmrc/cmrc.hpp" CACHE INTERNAL "")
set(_generate 1)
if(EXISTS "${cmrc_hpp}")
file(READ "${cmrc_hpp}" _current)
if(_current STREQUAL hpp_content)
set(_generate 0)
endif()
endif()
file(GENERATE OUTPUT "${cmrc_hpp}" CONTENT "${hpp_content}" CONDITION ${_generate})
add_library(cmrc-base INTERFACE)
target_include_directories(cmrc-base INTERFACE $<BUILD_INTERFACE:${CMRC_INCLUDE_DIR}>)
# Signal a basic C++11 feature to require C++11.
target_compile_features(cmrc-base INTERFACE cxx_nullptr)
set_property(TARGET cmrc-base PROPERTY INTERFACE_CXX_EXTENSIONS OFF)
add_library(cmrc::base ALIAS cmrc-base)
function(cmrc_add_resource_library name)
set(args ALIAS NAMESPACE TYPE)
cmake_parse_arguments(ARG "" "${args}" "" "${ARGN}")
# Generate the identifier for the resource library's namespace
set(ns_re "[a-zA-Z_][a-zA-Z0-9_]*")
if(NOT DEFINED ARG_NAMESPACE)
# Check that the library name is also a valid namespace
if(NOT name MATCHES "${ns_re}")
message(SEND_ERROR "Library name is not a valid namespace. Specify the NAMESPACE argument")
endif()
set(ARG_NAMESPACE "${name}")
else()
if(NOT ARG_NAMESPACE MATCHES "${ns_re}")
message(SEND_ERROR "NAMESPACE for ${name} is not a valid C++ namespace identifier (${ARG_NAMESPACE})")
endif()
endif()
set(libname "${name}")
# Check that type is either "STATIC" or "OBJECT", or default to "STATIC" if
# not set
if(NOT DEFINED ARG_TYPE)
set(ARG_TYPE STATIC)
elseif(NOT "${ARG_TYPE}" MATCHES "^(STATIC|OBJECT)$")
message(SEND_ERROR "${ARG_TYPE} is not a valid TYPE (STATIC and OBJECT are acceptable)")
set(ARG_TYPE STATIC)
endif()
# Generate a library with the compiled in character arrays.
string(CONFIGURE [=[
#include <cmrc/cmrc.hpp>
#include <map>
#include <utility>
namespace cmrc {
namespace @ARG_NAMESPACE@ {
namespace res_chars {
// These are the files which are available in this resource library
$<JOIN:$<TARGET_PROPERTY:@libname@,CMRC_EXTERN_DECLS>,
>
}
namespace {
const cmrc::detail::index_type&
get_root_index() {
static cmrc::detail::directory root_directory_;
static cmrc::detail::file_or_directory root_directory_fod{root_directory_};
static cmrc::detail::index_type root_index;
root_index.emplace("", &root_directory_fod);
struct dir_inl {
class cmrc::detail::directory& directory;
};
dir_inl root_directory_dir{root_directory_};
(void)root_directory_dir;
$<JOIN:$<TARGET_PROPERTY:@libname@,CMRC_MAKE_DIRS>,
>
$<JOIN:$<TARGET_PROPERTY:@libname@,CMRC_MAKE_FILES>,
>
return root_index;
}
}
cmrc::embedded_filesystem get_filesystem() {
static auto& index = get_root_index();
return cmrc::embedded_filesystem{index};
}
} // @ARG_NAMESPACE@
} // cmrc
]=] cpp_content @ONLY)
get_filename_component(libdir "${CMAKE_CURRENT_BINARY_DIR}/__cmrc_${name}" ABSOLUTE)
get_filename_component(lib_tmp_cpp "${libdir}/lib_.cpp" ABSOLUTE)
string(REPLACE "\n " "\n" cpp_content "${cpp_content}")
file(GENERATE OUTPUT "${lib_tmp_cpp}" CONTENT "${cpp_content}")
get_filename_component(libcpp "${libdir}/lib.cpp" ABSOLUTE)
add_custom_command(OUTPUT "${libcpp}"
DEPENDS "${lib_tmp_cpp}" "${cmrc_hpp}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${lib_tmp_cpp}" "${libcpp}"
COMMENT "Generating ${name} resource loader"
)
# Generate the actual static library. Each source file is just a single file
# with a character array compiled in containing the contents of the
# corresponding resource file.
add_library(${name} ${ARG_TYPE} ${libcpp})
set_property(TARGET ${name} PROPERTY CMRC_LIBDIR "${libdir}")
set_property(TARGET ${name} PROPERTY CMRC_NAMESPACE "${ARG_NAMESPACE}")
target_link_libraries(${name} PUBLIC cmrc::base)
set_property(TARGET ${name} PROPERTY CMRC_IS_RESOURCE_LIBRARY TRUE)
if(ARG_ALIAS)
add_library("${ARG_ALIAS}" ALIAS ${name})
endif()
cmrc_add_resources(${name} ${ARG_UNPARSED_ARGUMENTS})
endfunction()
function(_cmrc_register_dirs name dirpath)
if(dirpath STREQUAL "")
return()
endif()
# Skip this dir if we have already registered it
get_target_property(registered "${name}" _CMRC_REGISTERED_DIRS)
if(dirpath IN_LIST registered)
return()
endif()
# Register the parent directory first
get_filename_component(parent "${dirpath}" DIRECTORY)
if(NOT parent STREQUAL "")
_cmrc_register_dirs("${name}" "${parent}")
endif()
# Now generate the registration
set_property(TARGET "${name}" APPEND PROPERTY _CMRC_REGISTERED_DIRS "${dirpath}")
_cm_encode_fpath(sym "${dirpath}")
if(parent STREQUAL "")
set(parent_sym root_directory)
else()
_cm_encode_fpath(parent_sym "${parent}")
endif()
get_filename_component(leaf "${dirpath}" NAME)
set_property(
TARGET "${name}"
APPEND PROPERTY CMRC_MAKE_DIRS
"static auto ${sym}_dir = ${parent_sym}_dir.directory.add_subdir(\"${leaf}\")\;"
"root_index.emplace(\"${dirpath}\", &${sym}_dir.index_entry)\;"
)
endfunction()
function(cmrc_add_resources name)
get_target_property(is_reslib ${name} CMRC_IS_RESOURCE_LIBRARY)
if(NOT TARGET ${name} OR NOT is_reslib)
message(SEND_ERROR "cmrc_add_resources called on target '${name}' which is not an existing resource library")
return()
endif()
set(options)
set(args WHENCE PREFIX)
set(list_args)
cmake_parse_arguments(ARG "${options}" "${args}" "${list_args}" "${ARGN}")
if(NOT ARG_WHENCE)
set(ARG_WHENCE ${CMAKE_CURRENT_SOURCE_DIR})
endif()
_cmrc_normalize_path(ARG_WHENCE)
get_filename_component(ARG_WHENCE "${ARG_WHENCE}" ABSOLUTE)
# Generate the identifier for the resource library's namespace
get_target_property(lib_ns "${name}" CMRC_NAMESPACE)
get_target_property(libdir ${name} CMRC_LIBDIR)
get_target_property(target_dir ${name} SOURCE_DIR)
file(RELATIVE_PATH reldir "${target_dir}" "${CMAKE_CURRENT_SOURCE_DIR}")
if(reldir MATCHES "^\\.\\.")
message(SEND_ERROR "Cannot call cmrc_add_resources in a parent directory from the resource library target")
return()
endif()
foreach(input IN LISTS ARG_UNPARSED_ARGUMENTS)
_cmrc_normalize_path(input)
get_filename_component(abs_in "${input}" ABSOLUTE)
# Generate a filename based on the input filename that we can put in
# the intermediate directory.
file(RELATIVE_PATH relpath "${ARG_WHENCE}" "${abs_in}")
if(relpath MATCHES "^\\.\\.")
# For now we just error on files that exist outside of the soure dir.
message(SEND_ERROR "Cannot add file '${input}': File must be in a subdirectory of ${ARG_WHENCE}")
continue()
endif()
if(DEFINED ARG_PREFIX)
_cmrc_normalize_path(ARG_PREFIX)
endif()
if(ARG_PREFIX AND NOT ARG_PREFIX MATCHES "/$")
set(ARG_PREFIX "${ARG_PREFIX}/")
endif()
get_filename_component(dirpath "${ARG_PREFIX}${relpath}" DIRECTORY)
_cmrc_register_dirs("${name}" "${dirpath}")
get_filename_component(abs_out "${libdir}/intermediate/${ARG_PREFIX}${relpath}.cpp" ABSOLUTE)
# Generate a symbol name relpath the file's character array
_cm_encode_fpath(sym "${relpath}")
# Get the symbol name for the parent directory
if(dirpath STREQUAL "")
set(parent_sym root_directory)
else()
_cm_encode_fpath(parent_sym "${dirpath}")
endif()
# Generate the rule for the intermediate source file
_cmrc_generate_intermediate_cpp(${lib_ns} ${sym} "${abs_out}" "${abs_in}")
target_sources(${name} PRIVATE "${abs_out}")
set_property(TARGET ${name} APPEND PROPERTY CMRC_EXTERN_DECLS
"// Pointers to ${input}"
"extern const char* const ${sym}_begin\;"
"extern const char* const ${sym}_end\;"
)
get_filename_component(leaf "${relpath}" NAME)
set_property(
TARGET ${name}
APPEND PROPERTY CMRC_MAKE_FILES
"root_index.emplace("
" \"${ARG_PREFIX}${relpath}\","
" ${parent_sym}_dir.directory.add_file("
" \"${leaf}\","
" res_chars::${sym}_begin,"
" res_chars::${sym}_end"
" )"
")\;"
)
endforeach()
endfunction()
function(_cmrc_generate_intermediate_cpp lib_ns symbol outfile infile)
add_custom_command(
# This is the file we will generate
OUTPUT "${outfile}"
# These are the primary files that affect the output
DEPENDS "${infile}" "${_CMRC_SCRIPT}"
COMMAND
"${CMAKE_COMMAND}"
-D_CMRC_GENERATE_MODE=TRUE
-DNAMESPACE=${lib_ns}
-DSYMBOL=${symbol}
"-DINPUT_FILE=${infile}"
"-DOUTPUT_FILE=${outfile}"
-P "${_CMRC_SCRIPT}"
COMMENT "Generating intermediate file for ${infile}"
)
endfunction()
function(_cm_encode_fpath var fpath)
string(MAKE_C_IDENTIFIER "${fpath}" ident)
string(MD5 hash "${fpath}")
string(SUBSTRING "${hash}" 0 4 hash)
set(${var} f_${hash}_${ident} PARENT_SCOPE)
endfunction()
================================================
FILE: cmake/FindFFmpeg.cmake
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
find_package(PkgConfig QUIET)
pkg_check_modules(FFMPEG QUIET IMPORTED_TARGET libavcodec libavfilter libavformat libavutil libswresample libswscale)
find_file(FFMPEG_VERSION_FILE libavutil/ffversion.h HINTS "${FFMPEG_libavutil_INCLUDEDIR}")
if (FFMPEG_VERSION_FILE)
file(STRINGS "${FFMPEG_VERSION_FILE}" FFMPEG_VERSION_LINE REGEX "FFMPEG_VERSION")
string(REGEX MATCH "[0-9.]+" FFMPEG_VERSION "${FFMPEG_VERSION_LINE}")
unset(FFMPEG_VERSION_LINE)
unset(FFMPEG_VERSION_FILE)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FFmpeg
REQUIRED_VARS FFMPEG_LINK_LIBRARIES
VERSION_VAR FFMPEG_VERSION
)
if (FFmpeg_FOUND AND NOT TARGET FFmpeg::ffmpeg)
add_library(FFmpeg::ffmpeg ALIAS PkgConfig::FFMPEG)
endif()
================================================
FILE: cmake/FindRenderDoc.cmake
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
find_path(RENDERDOC_INCLUDE_DIR renderdoc_app.h)
if (RENDERDOC_INCLUDE_DIR AND EXISTS "${RENDERDOC_INCLUDE_DIR}/renderdoc_app.h")
file(STRINGS "${RENDERDOC_INCLUDE_DIR}/renderdoc_app.h" RENDERDOC_VERSION_LINE REGEX "typedef struct RENDERDOC_API")
string(REGEX REPLACE ".*typedef struct RENDERDOC_API_([0-9]+)_([0-9]+)_([0-9]+).*" "\\1.\\2.\\3" RENDERDOC_VERSION "${RENDERDOC_VERSION_LINE}")
unset(RENDERDOC_VERSION_LINE)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(RenderDoc
REQUIRED_VARS RENDERDOC_INCLUDE_DIR
VERSION_VAR RENDERDOC_VERSION
)
if (RenderDoc_FOUND AND NOT TARGET RenderDoc::API)
add_library(RenderDoc::API INTERFACE IMPORTED)
set_target_properties(RenderDoc::API PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${RENDERDOC_INCLUDE_DIR}"
)
endif()
mark_as_advanced(RENDERDOC_INCLUDE_DIR)
================================================
FILE: cmake/Findhalf.cmake
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
find_path(half_INCLUDE_DIR NAMES half.hpp PATH_SUFFIXES half)
if (half_INCLUDE_DIR)
file(STRINGS "${half_INCLUDE_DIR}/half.hpp" _ver_line
REGEX "^// Version [0-9.]+$"
LIMIT_COUNT 1
)
string(REGEX MATCH "[0-9.]+" half_VERSION "${_ver_line}")
unset(_ver_line)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(half
REQUIRED_VARS half_INCLUDE_DIR
VERSION_VAR half_VERSION
)
if (half_FOUND AND NOT TARGET half::half)
add_library(half::half INTERFACE IMPORTED)
set_target_properties(half::half PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${half_INCLUDE_DIR}"
)
endif()
mark_as_advanced(half_INCLUDE_DIR)
================================================
FILE: cmake/Findlibusb.cmake
================================================
# SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
find_package(PkgConfig QUIET)
pkg_search_module(LIBUSB QUIET IMPORTED_TARGET libusb-1.0)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(libusb
REQUIRED_VARS LIBUSB_LINK_LIBRARIES
VERSION_VAR LIBUSB_VERSION
)
if (libusb_FOUND AND NOT TARGET libusb::usb)
add_library(libusb::usb ALIAS PkgConfig::LIBUSB)
endif()
================================================
FILE: cmake/Findstb.cmake
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
find_path(stb_image_INCLUDE_DIR stb_image.h PATH_SUFFIXES stb)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(stb
REQUIRED_VARS stb_image_INCLUDE_DIR
)
if (stb_FOUND AND NOT TARGET stb::headers)
add_library(stb::headers INTERFACE IMPORTED)
set_property(TARGET stb::headers PROPERTY
INTERFACE_INCLUDE_DIRECTORIES
"${stb_image_INCLUDE_DIR}"
)
endif()
mark_as_advanced(stb_image_INCLUDE_DIR)
================================================
FILE: cmake/FindxxHash.cmake
================================================
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
find_package(PkgConfig QUIET)
pkg_search_module(XXHASH QUIET IMPORTED_TA
gitextract_k8dejx2r/
├── .ci/
│ └── clang-format.sh
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── app-bug-report.yaml
│ │ ├── config.yml
│ │ ├── feature-request.yaml
│ │ ├── game-bug-report.yaml
│ │ └── rfc.yaml
│ ├── linux-appimage-sdl.sh
│ └── workflows/
│ └── build.yml
├── .gitignore
├── .gitmodules
├── CMakeDarwinPresets.json
├── CMakeLinuxPresets.json
├── CMakeLists.txt
├── CMakePresets.json
├── CMakeSettings.json
├── CMakeWindowsPresets.json
├── CONTRIBUTING.md
├── LICENSE
├── LICENSES/
│ ├── BSD-3-Clause.txt
│ ├── BSL-1.0.txt
│ ├── CC0-1.0.txt
│ ├── GPL-2.0-or-later.txt
│ ├── MIT.txt
│ └── OFL-1.1.txt
├── README.md
├── REUSE.toml
├── cmake/
│ ├── CMakeRC.cmake
│ ├── FindFFmpeg.cmake
│ ├── FindRenderDoc.cmake
│ ├── Findhalf.cmake
│ ├── Findlibusb.cmake
│ ├── Findstb.cmake
│ └── FindxxHash.cmake
├── dist/
│ ├── MacOSBundleInfo.plist.in
│ ├── net.shadps4.shadPS4.desktop
│ ├── net.shadps4.shadPS4.metainfo.xml
│ └── net.shadps4.shadPS4_metadata.pot
├── documents/
│ ├── Debugging/
│ │ └── Debugging.md
│ ├── Docker Builder/
│ │ ├── .devcontainer/
│ │ │ └── devcontainer.json
│ │ ├── .docker/
│ │ │ └── Dockerfile
│ │ └── docker-compose.yml
│ ├── building-docker.md
│ ├── building-linux.md
│ ├── building-macos.md
│ ├── building-windows.md
│ ├── changelog.md
│ └── patching-shader.md
├── externals/
│ ├── CMakeLists.txt
│ ├── aacdec/
│ │ └── CMakeLists.txt
│ ├── cmake-modules/
│ │ ├── GetGitRevisionDescription.cmake
│ │ └── GetGitRevisionDescription.cmake.in
│ ├── gcn/
│ │ ├── CMakeLists.txt
│ │ └── include/
│ │ └── gcn/
│ │ ├── si_ci_vi_merged_offset.h
│ │ └── si_ci_vi_merged_pm4_it_opcodes.h
│ ├── renderdoc/
│ │ └── renderdoc_app.h
│ └── stb/
│ └── stb_image.h
├── scripts/
│ ├── aerolib.inl
│ ├── file_formats/
│ │ └── sfo.hexpat
│ ├── ps4_names.txt
│ └── ps4_names2stubs.py
├── shell.nix
└── src/
├── .clang-format
├── common/
│ ├── adaptive_mutex.h
│ ├── aes.h
│ ├── alignment.h
│ ├── arch.h
│ ├── assert.cpp
│ ├── assert.h
│ ├── bit_array.h
│ ├── bit_field.h
│ ├── bounded_threadsafe_queue.h
│ ├── concepts.h
│ ├── config.cpp
│ ├── config.h
│ ├── cstring.h
│ ├── debug.h
│ ├── decoder.cpp
│ ├── decoder.h
│ ├── discord_rpc_handler.cpp
│ ├── discord_rpc_handler.h
│ ├── div_ceil.h
│ ├── elf_info.h
│ ├── endian.h
│ ├── enum.h
│ ├── error.cpp
│ ├── error.h
│ ├── fixed_value.h
│ ├── func_traits.h
│ ├── hash.h
│ ├── io_file.cpp
│ ├── io_file.h
│ ├── key_manager.cpp
│ ├── key_manager.h
│ ├── logging/
│ │ ├── backend.cpp
│ │ ├── backend.h
│ │ ├── filter.cpp
│ │ ├── filter.h
│ │ ├── formatter.h
│ │ ├── log.h
│ │ ├── log_entry.h
│ │ ├── text_formatter.cpp
│ │ ├── text_formatter.h
│ │ └── types.h
│ ├── lru_cache.h
│ ├── memory_patcher.cpp
│ ├── memory_patcher.h
│ ├── native_clock.cpp
│ ├── native_clock.h
│ ├── ntapi.cpp
│ ├── ntapi.h
│ ├── number_utils.cpp
│ ├── number_utils.h
│ ├── object_pool.h
│ ├── path_util.cpp
│ ├── path_util.h
│ ├── polyfill_thread.h
│ ├── range_lock.h
│ ├── rdtsc.cpp
│ ├── rdtsc.h
│ ├── recursive_lock.cpp
│ ├── recursive_lock.h
│ ├── scm_rev.cpp.in
│ ├── scm_rev.h
│ ├── scope_exit.h
│ ├── serdes.h
│ ├── sha1.h
│ ├── shared_first_mutex.h
│ ├── signal_context.cpp
│ ├── signal_context.h
│ ├── singleton.h
│ ├── slab_heap.h
│ ├── slot_array.h
│ ├── slot_vector.h
│ ├── spin_lock.cpp
│ ├── spin_lock.h
│ ├── stb.cpp
│ ├── stb.h
│ ├── string_literal.h
│ ├── string_util.cpp
│ ├── string_util.h
│ ├── support/
│ │ └── avdec.h
│ ├── thread.cpp
│ ├── thread.h
│ ├── types.h
│ ├── uint128.h
│ ├── unique_function.h
│ └── va_ctx.h
├── core/
│ ├── address_space.cpp
│ ├── address_space.h
│ ├── aerolib/
│ │ ├── aerolib.cpp
│ │ ├── aerolib.h
│ │ ├── aerolib.inl
│ │ ├── stubs.cpp
│ │ └── stubs.h
│ ├── cpu_patches.cpp
│ ├── cpu_patches.h
│ ├── debug_state.cpp
│ ├── debug_state.h
│ ├── debugger.cpp
│ ├── debugger.h
│ ├── devtools/
│ │ ├── gcn/
│ │ │ ├── gcn_context_regs.cpp
│ │ │ ├── gcn_op_names.cpp
│ │ │ └── gcn_shader_regs.cpp
│ │ ├── help.txt
│ │ ├── layer.cpp
│ │ ├── layer.h
│ │ ├── layer_extra.cpp
│ │ ├── options.cpp
│ │ ├── options.h
│ │ └── widget/
│ │ ├── cmd_list.cpp
│ │ ├── cmd_list.h
│ │ ├── common.h
│ │ ├── frame_dump.cpp
│ │ ├── frame_dump.h
│ │ ├── frame_graph.cpp
│ │ ├── frame_graph.h
│ │ ├── imgui_memory_editor.h
│ │ ├── memory_map.cpp
│ │ ├── memory_map.h
│ │ ├── module_list.cpp
│ │ ├── module_list.h
│ │ ├── reg_popup.cpp
│ │ ├── reg_popup.h
│ │ ├── reg_view.cpp
│ │ ├── reg_view.h
│ │ ├── shader_list.cpp
│ │ ├── shader_list.h
│ │ ├── text_editor.cpp
│ │ └── text_editor.h
│ ├── emulator_state.cpp
│ ├── emulator_state.h
│ ├── file_format/
│ │ ├── npbind.cpp
│ │ ├── npbind.h
│ │ ├── pfs.h
│ │ ├── playgo_chunk.cpp
│ │ ├── playgo_chunk.h
│ │ ├── psf.cpp
│ │ ├── psf.h
│ │ ├── trp.cpp
│ │ └── trp.h
│ ├── file_sys/
│ │ ├── devices/
│ │ │ ├── base_device.cpp
│ │ │ ├── base_device.h
│ │ │ ├── console_device.cpp
│ │ │ ├── console_device.h
│ │ │ ├── deci_tty6_device.cpp
│ │ │ ├── deci_tty6_device.h
│ │ │ ├── ioccom.h
│ │ │ ├── logger.cpp
│ │ │ ├── logger.h
│ │ │ ├── nop_device.h
│ │ │ ├── random_device.cpp
│ │ │ ├── random_device.h
│ │ │ ├── rng_device.cpp
│ │ │ ├── rng_device.h
│ │ │ ├── srandom_device.cpp
│ │ │ ├── srandom_device.h
│ │ │ ├── urandom_device.cpp
│ │ │ └── urandom_device.h
│ │ ├── directories/
│ │ │ ├── base_directory.cpp
│ │ │ ├── base_directory.h
│ │ │ ├── normal_directory.cpp
│ │ │ ├── normal_directory.h
│ │ │ ├── pfs_directory.cpp
│ │ │ └── pfs_directory.h
│ │ ├── file.cpp
│ │ ├── fs.cpp
│ │ └── fs.h
│ ├── ipc/
│ │ ├── ipc.cpp
│ │ └── ipc.h
│ ├── libraries/
│ │ ├── ajm/
│ │ │ ├── ajm.cpp
│ │ │ ├── ajm.h
│ │ │ ├── ajm_aac.cpp
│ │ │ ├── ajm_aac.h
│ │ │ ├── ajm_at9.cpp
│ │ │ ├── ajm_at9.h
│ │ │ ├── ajm_batch.cpp
│ │ │ ├── ajm_batch.h
│ │ │ ├── ajm_context.cpp
│ │ │ ├── ajm_context.h
│ │ │ ├── ajm_error.h
│ │ │ ├── ajm_instance.cpp
│ │ │ ├── ajm_instance.h
│ │ │ ├── ajm_instance_statistics.cpp
│ │ │ ├── ajm_instance_statistics.h
│ │ │ ├── ajm_mp3.cpp
│ │ │ ├── ajm_mp3.h
│ │ │ └── ajm_result.h
│ │ ├── app_content/
│ │ │ ├── app_content.cpp
│ │ │ ├── app_content.h
│ │ │ └── app_content_error.h
│ │ ├── audio/
│ │ │ ├── audioin.cpp
│ │ │ ├── audioin.h
│ │ │ ├── audioin_backend.h
│ │ │ ├── audioin_error.h
│ │ │ ├── audioout.cpp
│ │ │ ├── audioout.h
│ │ │ ├── audioout_backend.h
│ │ │ ├── audioout_error.h
│ │ │ ├── sdl_audio_in.cpp
│ │ │ └── sdl_audio_out.cpp
│ │ ├── audio3d/
│ │ │ ├── audio3d.cpp
│ │ │ ├── audio3d.h
│ │ │ └── audio3d_error.h
│ │ ├── avplayer/
│ │ │ ├── avplayer.cpp
│ │ │ ├── avplayer.h
│ │ │ ├── avplayer_common.cpp
│ │ │ ├── avplayer_common.h
│ │ │ ├── avplayer_data_streamer.h
│ │ │ ├── avplayer_error.h
│ │ │ ├── avplayer_file_streamer.cpp
│ │ │ ├── avplayer_file_streamer.h
│ │ │ ├── avplayer_impl.cpp
│ │ │ ├── avplayer_impl.h
│ │ │ ├── avplayer_source.cpp
│ │ │ ├── avplayer_source.h
│ │ │ ├── avplayer_state.cpp
│ │ │ └── avplayer_state.h
│ │ ├── camera/
│ │ │ ├── camera.cpp
│ │ │ ├── camera.h
│ │ │ └── camera_error.h
│ │ ├── companion/
│ │ │ ├── companion_error.h
│ │ │ ├── companion_httpd.cpp
│ │ │ ├── companion_httpd.h
│ │ │ ├── companion_util.cpp
│ │ │ └── companion_util.h
│ │ ├── disc_map/
│ │ │ ├── disc_map.cpp
│ │ │ ├── disc_map.h
│ │ │ └── disc_map_codes.h
│ │ ├── error_codes.h
│ │ ├── fiber/
│ │ │ ├── fiber.cpp
│ │ │ ├── fiber.h
│ │ │ ├── fiber_context.s
│ │ │ └── fiber_error.h
│ │ ├── font/
│ │ │ ├── font.cpp
│ │ │ ├── font.h
│ │ │ ├── font_error.h
│ │ │ ├── fontft.cpp
│ │ │ └── fontft.h
│ │ ├── game_live_streaming/
│ │ │ ├── gamelivestreaming.cpp
│ │ │ └── gamelivestreaming.h
│ │ ├── gnmdriver/
│ │ │ ├── gnm_error.h
│ │ │ ├── gnmdriver.cpp
│ │ │ ├── gnmdriver.h
│ │ │ └── gnmdriver_init.h
│ │ ├── hmd/
│ │ │ ├── hmd.cpp
│ │ │ ├── hmd.h
│ │ │ ├── hmd_distortion.cpp
│ │ │ ├── hmd_error.h
│ │ │ ├── hmd_reprojection.cpp
│ │ │ ├── hmd_setup_dialog.cpp
│ │ │ └── hmd_setup_dialog.h
│ │ ├── ime/
│ │ │ ├── error_dialog.cpp
│ │ │ ├── error_dialog.h
│ │ │ ├── ime.cpp
│ │ │ ├── ime.h
│ │ │ ├── ime_common.h
│ │ │ ├── ime_dialog.cpp
│ │ │ ├── ime_dialog.h
│ │ │ ├── ime_dialog_ui.cpp
│ │ │ ├── ime_dialog_ui.h
│ │ │ ├── ime_error.h
│ │ │ ├── ime_ui.cpp
│ │ │ └── ime_ui.h
│ │ ├── jpeg/
│ │ │ ├── jpeg_error.h
│ │ │ ├── jpegenc.cpp
│ │ │ └── jpegenc.h
│ │ ├── kernel/
│ │ │ ├── aio.cpp
│ │ │ ├── aio.h
│ │ │ ├── debug.cpp
│ │ │ ├── debug.h
│ │ │ ├── equeue.cpp
│ │ │ ├── equeue.h
│ │ │ ├── file_system.cpp
│ │ │ ├── file_system.h
│ │ │ ├── kernel.cpp
│ │ │ ├── kernel.h
│ │ │ ├── memory.cpp
│ │ │ ├── memory.h
│ │ │ ├── orbis_error.h
│ │ │ ├── posix_error.h
│ │ │ ├── process.cpp
│ │ │ ├── process.h
│ │ │ ├── sync/
│ │ │ │ ├── mutex.cpp
│ │ │ │ ├── mutex.h
│ │ │ │ └── semaphore.h
│ │ │ ├── threads/
│ │ │ │ ├── condvar.cpp
│ │ │ │ ├── event_flag.cpp
│ │ │ │ ├── exception.cpp
│ │ │ │ ├── exception.h
│ │ │ │ ├── mutex.cpp
│ │ │ │ ├── pthread.cpp
│ │ │ │ ├── pthread.h
│ │ │ │ ├── pthread_attr.cpp
│ │ │ │ ├── pthread_clean.cpp
│ │ │ │ ├── pthread_spec.cpp
│ │ │ │ ├── rwlock.cpp
│ │ │ │ ├── semaphore.cpp
│ │ │ │ ├── sleepq.cpp
│ │ │ │ ├── sleepq.h
│ │ │ │ ├── stack.cpp
│ │ │ │ ├── tcb.cpp
│ │ │ │ ├── thread_state.cpp
│ │ │ │ └── thread_state.h
│ │ │ ├── threads.cpp
│ │ │ ├── threads.h
│ │ │ ├── time.cpp
│ │ │ └── time.h
│ │ ├── libc_internal/
│ │ │ ├── libc_internal.cpp
│ │ │ ├── libc_internal.h
│ │ │ ├── libc_internal_io.cpp
│ │ │ ├── libc_internal_io.h
│ │ │ ├── libc_internal_math.cpp
│ │ │ ├── libc_internal_math.h
│ │ │ ├── libc_internal_memory.cpp
│ │ │ ├── libc_internal_memory.h
│ │ │ ├── libc_internal_str.cpp
│ │ │ ├── libc_internal_str.h
│ │ │ ├── libc_internal_threads.cpp
│ │ │ ├── libc_internal_threads.h
│ │ │ └── printf.h
│ │ ├── libpng/
│ │ │ ├── pngdec.cpp
│ │ │ ├── pngdec.h
│ │ │ ├── pngdec_error.h
│ │ │ ├── pngenc.cpp
│ │ │ ├── pngenc.h
│ │ │ └── pngenc_error.h
│ │ ├── libs.cpp
│ │ ├── libs.h
│ │ ├── mouse/
│ │ │ ├── mouse.cpp
│ │ │ └── mouse.h
│ │ ├── move/
│ │ │ ├── move.cpp
│ │ │ ├── move.h
│ │ │ └── move_error.h
│ │ ├── network/
│ │ │ ├── http.cpp
│ │ │ ├── http.h
│ │ │ ├── http2.cpp
│ │ │ ├── http2.h
│ │ │ ├── http_error.h
│ │ │ ├── net.cpp
│ │ │ ├── net.h
│ │ │ ├── net_ctl_codes.h
│ │ │ ├── net_ctl_obj.cpp
│ │ │ ├── net_ctl_obj.h
│ │ │ ├── net_epoll.cpp
│ │ │ ├── net_epoll.h
│ │ │ ├── net_error.h
│ │ │ ├── net_obj.cpp
│ │ │ ├── net_obj.h
│ │ │ ├── net_resolver.cpp
│ │ │ ├── net_resolver.h
│ │ │ ├── net_util.cpp
│ │ │ ├── net_util.h
│ │ │ ├── netctl.cpp
│ │ │ ├── netctl.h
│ │ │ ├── p2p_sockets.cpp
│ │ │ ├── posix_sockets.cpp
│ │ │ ├── sockets.h
│ │ │ ├── ssl.cpp
│ │ │ ├── ssl.h
│ │ │ ├── ssl2.cpp
│ │ │ ├── ssl2.h
│ │ │ ├── ssl2_error.h
│ │ │ ├── sys_net.cpp
│ │ │ ├── sys_net.h
│ │ │ └── unix_sockets.cpp
│ │ ├── ngs2/
│ │ │ ├── ngs2.cpp
│ │ │ ├── ngs2.h
│ │ │ ├── ngs2_custom.cpp
│ │ │ ├── ngs2_custom.h
│ │ │ ├── ngs2_eq.cpp
│ │ │ ├── ngs2_eq.h
│ │ │ ├── ngs2_error.h
│ │ │ ├── ngs2_geom.cpp
│ │ │ ├── ngs2_geom.h
│ │ │ ├── ngs2_impl.cpp
│ │ │ ├── ngs2_impl.h
│ │ │ ├── ngs2_mastering.cpp
│ │ │ ├── ngs2_mastering.h
│ │ │ ├── ngs2_pan.cpp
│ │ │ ├── ngs2_pan.h
│ │ │ ├── ngs2_report.cpp
│ │ │ ├── ngs2_report.h
│ │ │ ├── ngs2_reverb.cpp
│ │ │ ├── ngs2_reverb.h
│ │ │ ├── ngs2_sampler.cpp
│ │ │ ├── ngs2_sampler.h
│ │ │ ├── ngs2_submixer.cpp
│ │ │ └── ngs2_submixer.h
│ │ ├── np/
│ │ │ ├── np_auth.cpp
│ │ │ ├── np_auth.h
│ │ │ ├── np_auth_error.h
│ │ │ ├── np_commerce.cpp
│ │ │ ├── np_commerce.h
│ │ │ ├── np_common.cpp
│ │ │ ├── np_common.h
│ │ │ ├── np_common_error.h
│ │ │ ├── np_error.h
│ │ │ ├── np_manager.cpp
│ │ │ ├── np_manager.h
│ │ │ ├── np_matching2.cpp
│ │ │ ├── np_matching2.h
│ │ │ ├── np_partner.cpp
│ │ │ ├── np_partner.h
│ │ │ ├── np_partner_error.h
│ │ │ ├── np_party.cpp
│ │ │ ├── np_party.h
│ │ │ ├── np_party_error.h
│ │ │ ├── np_profile_dialog.cpp
│ │ │ ├── np_profile_dialog.h
│ │ │ ├── np_score.cpp
│ │ │ ├── np_score.h
│ │ │ ├── np_sns_facebook_dialog.cpp
│ │ │ ├── np_sns_facebook_dialog.h
│ │ │ ├── np_trophy.cpp
│ │ │ ├── np_trophy.h
│ │ │ ├── np_trophy_error.h
│ │ │ ├── np_tus.cpp
│ │ │ ├── np_tus.h
│ │ │ ├── np_types.h
│ │ │ ├── np_web_api.cpp
│ │ │ ├── np_web_api.h
│ │ │ ├── np_web_api2.cpp
│ │ │ ├── np_web_api2.h
│ │ │ ├── np_web_api2_error.h
│ │ │ ├── np_web_api_error.h
│ │ │ ├── np_web_api_internal.cpp
│ │ │ ├── np_web_api_internal.h
│ │ │ ├── object_manager.h
│ │ │ ├── trophy_ui.cpp
│ │ │ └── trophy_ui.h
│ │ ├── pad/
│ │ │ ├── pad.cpp
│ │ │ ├── pad.h
│ │ │ └── pad_errors.h
│ │ ├── playgo/
│ │ │ ├── playgo.cpp
│ │ │ ├── playgo.h
│ │ │ ├── playgo_dialog.cpp
│ │ │ ├── playgo_dialog.h
│ │ │ └── playgo_types.h
│ │ ├── random/
│ │ │ ├── random.cpp
│ │ │ ├── random.h
│ │ │ └── random_error.h
│ │ ├── razor_cpu/
│ │ │ ├── razor_cpu.cpp
│ │ │ └── razor_cpu.h
│ │ ├── remote_play/
│ │ │ ├── remoteplay.cpp
│ │ │ └── remoteplay.h
│ │ ├── rtc/
│ │ │ ├── rtc.cpp
│ │ │ ├── rtc.h
│ │ │ └── rtc_error.h
│ │ ├── rudp/
│ │ │ ├── rudp.cpp
│ │ │ └── rudp.h
│ │ ├── save_data/
│ │ │ ├── dialog/
│ │ │ │ ├── savedatadialog.cpp
│ │ │ │ ├── savedatadialog.h
│ │ │ │ ├── savedatadialog_ui.cpp
│ │ │ │ └── savedatadialog_ui.h
│ │ │ ├── save_backup.cpp
│ │ │ ├── save_backup.h
│ │ │ ├── save_instance.cpp
│ │ │ ├── save_instance.h
│ │ │ ├── save_memory.cpp
│ │ │ ├── save_memory.h
│ │ │ ├── savedata.cpp
│ │ │ ├── savedata.h
│ │ │ └── savedata_error.h
│ │ ├── screenshot/
│ │ │ ├── screenshot.cpp
│ │ │ └── screenshot.h
│ │ ├── share_play/
│ │ │ ├── shareplay.cpp
│ │ │ └── shareplay.h
│ │ ├── signin_dialog/
│ │ │ ├── signindialog.cpp
│ │ │ └── signindialog.h
│ │ ├── sysmodule/
│ │ │ ├── sysmodule.cpp
│ │ │ ├── sysmodule.h
│ │ │ ├── sysmodule_error.h
│ │ │ ├── sysmodule_internal.cpp
│ │ │ ├── sysmodule_internal.h
│ │ │ └── sysmodule_table.h
│ │ ├── system/
│ │ │ ├── commondialog.cpp
│ │ │ ├── commondialog.h
│ │ │ ├── msgdialog.cpp
│ │ │ ├── msgdialog.h
│ │ │ ├── msgdialog_ui.cpp
│ │ │ ├── msgdialog_ui.h
│ │ │ ├── posix.cpp
│ │ │ ├── posix.h
│ │ │ ├── systemservice.cpp
│ │ │ ├── systemservice.h
│ │ │ ├── systemservice_error.h
│ │ │ ├── userservice.cpp
│ │ │ ├── userservice.h
│ │ │ └── userservice_error.h
│ │ ├── system_gesture/
│ │ │ ├── system_gesture.cpp
│ │ │ └── system_gesture.h
│ │ ├── ulobjmgr/
│ │ │ ├── ulobjmgr.cpp
│ │ │ └── ulobjmgr.h
│ │ ├── usbd/
│ │ │ ├── emulated/
│ │ │ │ ├── dimensions.cpp
│ │ │ │ ├── dimensions.h
│ │ │ │ ├── infinity.cpp
│ │ │ │ ├── infinity.h
│ │ │ │ ├── skylander.cpp
│ │ │ │ └── skylander.h
│ │ │ ├── usb_backend.h
│ │ │ ├── usbd.cpp
│ │ │ └── usbd.h
│ │ ├── videodec/
│ │ │ ├── videodec.cpp
│ │ │ ├── videodec.h
│ │ │ ├── videodec2.cpp
│ │ │ ├── videodec2.h
│ │ │ ├── videodec2_avc.h
│ │ │ ├── videodec2_impl.cpp
│ │ │ ├── videodec2_impl.h
│ │ │ ├── videodec_error.h
│ │ │ ├── videodec_impl.cpp
│ │ │ └── videodec_impl.h
│ │ ├── videoout/
│ │ │ ├── buffer.h
│ │ │ ├── driver.cpp
│ │ │ ├── driver.h
│ │ │ ├── video_out.cpp
│ │ │ ├── video_out.h
│ │ │ └── videoout_error.h
│ │ ├── voice/
│ │ │ ├── voice.cpp
│ │ │ └── voice.h
│ │ ├── vr_tracker/
│ │ │ ├── vr_tracker.cpp
│ │ │ ├── vr_tracker.h
│ │ │ └── vr_tracker_error.h
│ │ ├── web_browser_dialog/
│ │ │ ├── webbrowserdialog.cpp
│ │ │ └── webbrowserdialog.h
│ │ └── zlib/
│ │ ├── zlib.cpp
│ │ ├── zlib_error.h
│ │ └── zlib_sce.h
│ ├── linker.cpp
│ ├── linker.h
│ ├── loader/
│ │ ├── dwarf.cpp
│ │ ├── dwarf.h
│ │ ├── elf.cpp
│ │ ├── elf.h
│ │ ├── symbols_resolver.cpp
│ │ └── symbols_resolver.h
│ ├── memory.cpp
│ ├── memory.h
│ ├── module.cpp
│ ├── module.h
│ ├── platform.h
│ ├── signals.cpp
│ ├── signals.h
│ ├── thread.cpp
│ ├── thread.h
│ ├── tls.cpp
│ └── tls.h
├── emulator.cpp
├── emulator.h
├── images/
│ └── shadPS4.icns
├── imgui/
│ ├── imgui_config.h
│ ├── imgui_layer.h
│ ├── imgui_std.h
│ ├── imgui_texture.h
│ └── renderer/
│ ├── CMakeLists.txt
│ ├── imgui_core.cpp
│ ├── imgui_core.h
│ ├── imgui_impl_sdl3.cpp
│ ├── imgui_impl_sdl3.h
│ ├── imgui_impl_vulkan.cpp
│ ├── imgui_impl_vulkan.h
│ ├── texture_manager.cpp
│ └── texture_manager.h
├── input/
│ ├── controller.cpp
│ ├── controller.h
│ ├── input_handler.cpp
│ ├── input_handler.h
│ ├── input_mouse.cpp
│ └── input_mouse.h
├── main.cpp
├── sdl_window.cpp
├── sdl_window.h
├── shader_recompiler/
│ ├── backend/
│ │ ├── bindings.h
│ │ └── spirv/
│ │ ├── emit_spirv.cpp
│ │ ├── emit_spirv.h
│ │ ├── emit_spirv_atomic.cpp
│ │ ├── emit_spirv_barriers.cpp
│ │ ├── emit_spirv_bitwise_conversion.cpp
│ │ ├── emit_spirv_bounds.h
│ │ ├── emit_spirv_composite.cpp
│ │ ├── emit_spirv_context_get_set.cpp
│ │ ├── emit_spirv_convert.cpp
│ │ ├── emit_spirv_floating_point.cpp
│ │ ├── emit_spirv_image.cpp
│ │ ├── emit_spirv_instructions.h
│ │ ├── emit_spirv_integer.cpp
│ │ ├── emit_spirv_logical.cpp
│ │ ├── emit_spirv_quad_rect.cpp
│ │ ├── emit_spirv_quad_rect.h
│ │ ├── emit_spirv_select.cpp
│ │ ├── emit_spirv_shared_memory.cpp
│ │ ├── emit_spirv_special.cpp
│ │ ├── emit_spirv_undefined.cpp
│ │ ├── emit_spirv_warp.cpp
│ │ ├── spirv_emit_context.cpp
│ │ └── spirv_emit_context.h
│ ├── frontend/
│ │ ├── control_flow_graph.cpp
│ │ ├── control_flow_graph.h
│ │ ├── copy_shader.cpp
│ │ ├── copy_shader.h
│ │ ├── decode.cpp
│ │ ├── decode.h
│ │ ├── fetch_shader.cpp
│ │ ├── fetch_shader.h
│ │ ├── format.cpp
│ │ ├── instruction.cpp
│ │ ├── instruction.h
│ │ ├── opcodes.h
│ │ ├── structured_control_flow.cpp
│ │ ├── structured_control_flow.h
│ │ ├── tessellation.h
│ │ └── translate/
│ │ ├── data_share.cpp
│ │ ├── export.cpp
│ │ ├── scalar_alu.cpp
│ │ ├── scalar_flow.cpp
│ │ ├── scalar_memory.cpp
│ │ ├── translate.cpp
│ │ ├── translate.h
│ │ ├── vector_alu.cpp
│ │ ├── vector_interpolation.cpp
│ │ └── vector_memory.cpp
│ ├── info.h
│ ├── ir/
│ │ ├── abstract_syntax_list.cpp
│ │ ├── abstract_syntax_list.h
│ │ ├── attribute.cpp
│ │ ├── attribute.h
│ │ ├── basic_block.cpp
│ │ ├── basic_block.h
│ │ ├── breadth_first_search.h
│ │ ├── condition.h
│ │ ├── debug_print.h
│ │ ├── ir_emitter.cpp
│ │ ├── ir_emitter.h
│ │ ├── microinstruction.cpp
│ │ ├── opcodes.cpp
│ │ ├── opcodes.h
│ │ ├── opcodes.inc
│ │ ├── operand_helper.h
│ │ ├── passes/
│ │ │ ├── constant_propagation_pass.cpp
│ │ │ ├── constant_propogation.h
│ │ │ ├── dead_code_elimination_pass.cpp
│ │ │ ├── flatten_extended_userdata_pass.cpp
│ │ │ ├── hull_shader_transform.cpp
│ │ │ ├── identity_removal_pass.cpp
│ │ │ ├── inject_clip_distance_attributes.cpp
│ │ │ ├── ir_passes.h
│ │ │ ├── lower_buffer_format_to_raw.cpp
│ │ │ ├── lower_fp64_to_fp32.cpp
│ │ │ ├── readlane_elimination_pass.cpp
│ │ │ ├── resource_tracking_pass.cpp
│ │ │ ├── ring_access_elimination.cpp
│ │ │ ├── shader_info_collection_pass.cpp
│ │ │ ├── shared_memory_barrier_pass.cpp
│ │ │ ├── shared_memory_simplify_pass.cpp
│ │ │ ├── shared_memory_to_storage_pass.cpp
│ │ │ ├── srt.h
│ │ │ └── ssa_rewrite_pass.cpp
│ │ ├── patch.cpp
│ │ ├── patch.h
│ │ ├── pattern_matching.h
│ │ ├── position.h
│ │ ├── post_order.cpp
│ │ ├── post_order.h
│ │ ├── program.cpp
│ │ ├── program.h
│ │ ├── reg.h
│ │ ├── reinterpret.h
│ │ ├── srt_gvn_table.h
│ │ ├── type.cpp
│ │ ├── type.h
│ │ ├── value.cpp
│ │ └── value.h
│ ├── params.h
│ ├── profile.h
│ ├── recompiler.cpp
│ ├── recompiler.h
│ ├── resource.h
│ ├── runtime_info.h
│ └── specialization.h
├── shadps4.rc
└── video_core/
├── amdgpu/
│ ├── cb_db_extent.h
│ ├── liverpool.cpp
│ ├── liverpool.h
│ ├── pixel_format.cpp
│ ├── pixel_format.h
│ ├── pm4_cmds.h
│ ├── pm4_opcodes.h
│ ├── regs.cpp
│ ├── regs.h
│ ├── regs_color.h
│ ├── regs_depth.h
│ ├── regs_primitive.h
│ ├── regs_shader.h
│ ├── regs_texture.h
│ ├── regs_vertex.h
│ ├── resource.h
│ ├── tiling.cpp
│ └── tiling.h
├── buffer_cache/
│ ├── buffer.cpp
│ ├── buffer.h
│ ├── buffer_cache.cpp
│ ├── buffer_cache.h
│ ├── fault_manager.cpp
│ ├── fault_manager.h
│ ├── memory_tracker.h
│ ├── range_set.h
│ ├── region_definitions.h
│ └── region_manager.h
├── cache_storage.cpp
├── cache_storage.h
├── host_shaders/
│ ├── CMakeLists.txt
│ ├── StringShaderHeader.cmake
│ ├── color_to_ms_depth.frag
│ ├── detilers/
│ │ ├── display_micro_64bpp.comp
│ │ ├── macro_32bpp.comp
│ │ ├── macro_64bpp.comp
│ │ ├── macro_8bpp.comp
│ │ ├── micro_128bpp.comp
│ │ ├── micro_16bpp.comp
│ │ ├── micro_32bpp.comp
│ │ ├── micro_64bpp.comp
│ │ └── micro_8bpp.comp
│ ├── fault_buffer_process.comp
│ ├── fs_tri.vert
│ ├── fsr/
│ │ ├── ffx_a.h
│ │ └── ffx_fsr1.h
│ ├── fsr.comp
│ ├── ms_image_blit.frag
│ ├── post_process.frag
│ ├── source_shader.h.in
│ └── tiling.comp
├── multi_level_page_table.h
├── page_manager.cpp
├── page_manager.h
├── renderdoc.cpp
├── renderdoc.h
├── renderer_vulkan/
│ ├── host_passes/
│ │ ├── fsr_pass.cpp
│ │ ├── fsr_pass.h
│ │ ├── pp_pass.cpp
│ │ └── pp_pass.h
│ ├── liverpool_to_vk.cpp
│ ├── liverpool_to_vk.h
│ ├── vk_common.cpp
│ ├── vk_common.h
│ ├── vk_compute_pipeline.cpp
│ ├── vk_compute_pipeline.h
│ ├── vk_graphics_pipeline.cpp
│ ├── vk_graphics_pipeline.h
│ ├── vk_instance.cpp
│ ├── vk_instance.h
│ ├── vk_master_semaphore.cpp
│ ├── vk_master_semaphore.h
│ ├── vk_pipeline_cache.cpp
│ ├── vk_pipeline_cache.h
│ ├── vk_pipeline_common.cpp
│ ├── vk_pipeline_common.h
│ ├── vk_pipeline_serialization.cpp
│ ├── vk_pipeline_serialization.h
│ ├── vk_platform.cpp
│ ├── vk_platform.h
│ ├── vk_presenter.cpp
│ ├── vk_presenter.h
│ ├── vk_rasterizer.cpp
│ ├── vk_rasterizer.h
│ ├── vk_resource_pool.cpp
│ ├── vk_resource_pool.h
│ ├── vk_scheduler.cpp
│ ├── vk_scheduler.h
│ ├── vk_shader_hle.cpp
│ ├── vk_shader_hle.h
│ ├── vk_shader_util.cpp
│ ├── vk_shader_util.h
│ ├── vk_swapchain.cpp
│ └── vk_swapchain.h
└── texture_cache/
├── blit_helper.cpp
├── blit_helper.h
├── host_compatibility.cpp
├── host_compatibility.h
├── image.cpp
├── image.h
├── image_info.cpp
├── image_info.h
├── image_view.cpp
├── image_view.h
├── sampler.cpp
├── sampler.h
├── texture_cache.cpp
├── texture_cache.h
├── tile.h
├── tile_manager.cpp
├── tile_manager.h
└── types.h
SYMBOL INDEX (516 symbols across 33 files)
FILE: externals/gcn/include/gcn/si_ci_vi_merged_offset.h
function namespace (line 29) | namespace Pal
FILE: externals/gcn/include/gcn/si_ci_vi_merged_pm4_it_opcodes.h
type IT_OpCodeType (line 29) | enum IT_OpCodeType {
FILE: externals/renderdoc/renderdoc_app.h
type RENDERDOC_CaptureOption (line 75) | typedef enum RENDERDOC_CaptureOption
type RENDERDOC_InputButton (line 250) | typedef enum RENDERDOC_InputButton
type RENDERDOC_OverlayBits (line 339) | typedef enum RENDERDOC_OverlayBits
type pRENDERDOC_RemoveHooks (line 379) | typedef pRENDERDOC_RemoveHooks pRENDERDOC_Shutdown;
type pRENDERDOC_SetCaptureFilePathTemplate (line 411) | typedef pRENDERDOC_SetCaptureFilePathTemplate pRENDERDOC_SetLogFilePathT...
type pRENDERDOC_GetCaptureFilePathTemplate (line 412) | typedef pRENDERDOC_GetCaptureFilePathTemplate pRENDERDOC_GetLogFilePathT...
type pRENDERDOC_IsTargetControlConnected (line 452) | typedef pRENDERDOC_IsTargetControlConnected pRENDERDOC_IsRemoteAccessCon...
type RENDERDOC_Version (line 576) | typedef enum RENDERDOC_Version
type RENDERDOC_API_1_6_0 (line 622) | typedef struct RENDERDOC_API_1_6_0
type RENDERDOC_API_1_6_0 (line 702) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_0;
type RENDERDOC_API_1_6_0 (line 703) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_1;
type RENDERDOC_API_1_6_0 (line 704) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_0_2;
type RENDERDOC_API_1_6_0 (line 705) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_0;
type RENDERDOC_API_1_6_0 (line 706) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_1;
type RENDERDOC_API_1_6_0 (line 707) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_1_2;
type RENDERDOC_API_1_6_0 (line 708) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_2_0;
type RENDERDOC_API_1_6_0 (line 709) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_3_0;
type RENDERDOC_API_1_6_0 (line 710) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_0;
type RENDERDOC_API_1_6_0 (line 711) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_1;
type RENDERDOC_API_1_6_0 (line 712) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_4_2;
type RENDERDOC_API_1_6_0 (line 713) | typedef RENDERDOC_API_1_6_0 RENDERDOC_API_1_5_0;
FILE: externals/stb/stb_image.h
type stbi_uc (line 387) | typedef unsigned char stbi_uc;
type stbi_us (line 388) | typedef unsigned short stbi_us;
type stbi_io_callbacks (line 411) | typedef struct
type stbi__uint16 (line 642) | typedef unsigned short stbi__uint16;
type stbi__int16 (line 643) | typedef signed short stbi__int16;
type stbi__uint32 (line 644) | typedef unsigned int stbi__uint32;
type stbi__int32 (line 645) | typedef signed int stbi__int32;
type stbi__uint16 (line 648) | typedef uint16_t stbi__uint16;
type stbi__int16 (line 649) | typedef int16_t stbi__int16;
type stbi__uint32 (line 650) | typedef uint32_t stbi__uint32;
type stbi__int32 (line 651) | typedef int32_t stbi__int32;
function stbi__cpuid3 (line 732) | static int stbi__cpuid3(void)
function stbi__sse2_available (line 754) | static int stbi__sse2_available(void)
function stbi__sse2_available (line 765) | static int stbi__sse2_available(void)
type stbi__context (line 805) | typedef struct
function stbi__start_mem (line 826) | static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int...
function stbi__start_callbacks (line 836) | static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c...
function stbi__stdio_read (line 850) | static int stbi__stdio_read(void *user, char *data, int size)
function stbi__stdio_skip (line 855) | static void stbi__stdio_skip(void *user, int n)
function stbi__stdio_eof (line 865) | static int stbi__stdio_eof(void *user)
function stbi__start_file (line 877) | static void stbi__start_file(stbi__context *s, FILE *f)
function stbi__rewind (line 886) | static void stbi__rewind(stbi__context *s)
type stbi__result_info (line 901) | typedef struct
function STBIDEF (line 972) | STBIDEF const char *stbi_failure_reason(void)
function stbi__err (line 978) | static int stbi__err(const char *str)
function stbi__addsizes_valid (line 1002) | static int stbi__addsizes_valid(int a, int b)
function stbi__mul2sizes_valid (line 1014) | static int stbi__mul2sizes_valid(int a, int b)
function stbi__mad2sizes_valid (line 1024) | static int stbi__mad2sizes_valid(int a, int b, int add)
function stbi__mad3sizes_valid (line 1031) | static int stbi__mad3sizes_valid(int a, int b, int c, int add)
function stbi__mad4sizes_valid (line 1039) | static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add)
function stbi__addints_valid (line 1070) | static int stbi__addints_valid(int a, int b)
function stbi__mul2shorts_valid (line 1078) | static int stbi__mul2shorts_valid(int a, int b)
function STBIDEF (line 1101) | STBIDEF void stbi_image_free(void *retval_from_stbi_load)
function STBIDEF (line 1116) | STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip)
function STBIDEF (line 1126) | STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_sh...
function stbi_uc (line 1190) | static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, ...
function stbi__uint16 (line 1206) | static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, ...
function stbi__vertical_flip (line 1222) | static void stbi__vertical_flip(void *image, int w, int h, int bytes_per...
function stbi__vertical_flip_slices (line 1247) | static void stbi__vertical_flip_slices(void *image, int w, int h, int z,...
function stbi__uint16 (line 1286) | static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, ...
function stbi__float_postprocess (line 1314) | static void stbi__float_postprocess(float *result, int *x, int *y, int *...
function STBIDEF (line 1331) | STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, c...
function FILE (line 1337) | static FILE *stbi__fopen(char const *filename, char const *mode)
function STBIDEF (line 1366) | STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *co...
function STBIDEF (line 1376) | STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp,...
function STBIDEF (line 1389) | STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, in...
function STBIDEF (line 1402) | STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int ...
function STBIDEF (line 1415) | STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len...
function STBIDEF (line 1422) | STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *cl...
function STBIDEF (line 1429) | STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, i...
function STBIDEF (line 1436) | STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk,...
function STBIDEF (line 1444) | STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int le...
function STBIDEF (line 1478) | STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, in...
function STBIDEF (line 1485) | STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, ...
function STBIDEF (line 1493) | STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *com...
function STBIDEF (line 1503) | STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, ...
function STBIDEF (line 1517) | STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len)
function STBIDEF (line 1531) | STBIDEF int stbi_is_hdr (char const *filename)
function STBIDEF (line 1542) | STBIDEF int stbi_is_hdr_from_file(FILE *f)
function STBIDEF (line 1559) | STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clb...
function STBIDEF (line 1575) | STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = ga...
function STBIDEF (line 1576) | STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = sc...
function STBIDEF (line 1581) | STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = ...
function STBIDEF (line 1582) | STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = ...
function stbi__refill_buffer (line 1597) | static void stbi__refill_buffer(stbi__context *s)
function stbi_inline (line 1614) | stbi_inline static stbi_uc stbi__get8(stbi__context *s)
function stbi_inline (line 1628) | stbi_inline static int stbi__at_eof(stbi__context *s)
function stbi__skip (line 1644) | static void stbi__skip(stbi__context *s, int n)
function stbi__getn (line 1666) | static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)
function stbi__get16be (line 1694) | static int stbi__get16be(stbi__context *s)
function stbi__uint32 (line 1704) | static stbi__uint32 stbi__get32be(stbi__context *s)
function stbi__get16le (line 1714) | static int stbi__get16le(stbi__context *s)
function stbi__uint32 (line 1722) | static stbi__uint32 stbi__get32le(stbi__context *s)
function stbi_uc (line 1746) | static stbi_uc stbi__compute_y(int r, int g, int b)
function stbi__uint16 (line 1803) | static stbi__uint16 stbi__compute_y_16(int r, int g, int b)
function stbi__uint16 (line 1812) | static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_...
function stbi_uc (line 1884) | static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp)
type stbi__huffman (line 1938) | typedef struct
type stbi__jpeg (line 1949) | typedef struct
function stbi__build_huffman (line 2003) | static int stbi__build_huffman(stbi__huffman *h, int *count)
function stbi__build_fast_ac (line 2050) | static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h)
function stbi__grow_buffer_unsafe (line 2075) | static void stbi__grow_buffer_unsafe(stbi__jpeg *j)
function stbi_inline (line 2097) | stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffm...
function stbi_inline (line 2153) | stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n)
function stbi_inline (line 2169) | stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n)
function stbi_inline (line 2181) | stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j)
function stbi__jpeg_decode_block (line 2210) | static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__...
function stbi__jpeg_decode_block_prog_dc (line 2265) | static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64]...
function stbi__jpeg_decode_block_prog_ac (line 2295) | static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64]...
function stbi_inline (line 2416) | stbi_inline static stbi_uc stbi__clamp(int x)
function stbi__idct_block (line 2467) | static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64])
function stbi__idct_simd (line 2530) | static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
function stbi__idct_simd (line 2711) | static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
function stbi_uc (line 2919) | static stbi_uc stbi__get_marker(stbi__jpeg *j)
function stbi__jpeg_reset (line 2936) | static void stbi__jpeg_reset(stbi__jpeg *j)
function stbi__parse_entropy_coded_data (line 2949) | static int stbi__parse_entropy_coded_data(stbi__jpeg *z)
function stbi__jpeg_dequantize (line 3073) | static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant)
function stbi__jpeg_finish (line 3080) | static void stbi__jpeg_finish(stbi__jpeg *z)
function stbi__process_marker (line 3099) | static int stbi__process_marker(stbi__jpeg *z, int m)
function stbi__process_scan_header (line 3203) | static int stbi__process_scan_header(stbi__jpeg *z)
function stbi__free_jpeg_components (line 3242) | static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why)
function stbi__process_frame_header (line 3264) | static int stbi__process_frame_header(stbi__jpeg *z, int scan)
function stbi__decode_jpeg_header (line 3365) | static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan)
function stbi_uc (line 3389) | static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg *j)
function stbi__decode_jpeg_image (line 3412) | static int stbi__decode_jpeg_image(stbi__jpeg *j)
type stbi_uc (line 3451) | typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_u...
function stbi_uc (line 3456) | static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *...
function stbi_uc (line 3465) | static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, s...
function stbi_uc (line 3475) | static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, ...
function stbi_uc (line 3505) | static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, ...
function stbi_uc (line 3530) | static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_n...
function stbi_uc (line 3646) | static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_nea...
function stbi__YCbCr_to_RGB_row (line 3660) | static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const...
function stbi__YCbCr_to_RGB_simd (line 3686) | static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi...
function stbi__setup_jpeg (line 3821) | static void stbi__setup_jpeg(stbi__jpeg *j)
function stbi__cleanup_jpeg (line 3843) | static void stbi__cleanup_jpeg(stbi__jpeg *j)
type stbi__resample (line 3848) | typedef struct
function stbi_uc (line 3859) | static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y)
function stbi_uc (line 3865) | static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, i...
function stbi__jpeg_test (line 4042) | static int stbi__jpeg_test(stbi__context *s)
function stbi__jpeg_info_raw (line 4056) | static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp)
function stbi__jpeg_info (line 4068) | static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp)
type stbi__zhuffman (line 4097) | typedef struct
function stbi_inline (line 4107) | stbi_inline static int stbi__bitreverse16(int n)
function stbi_inline (line 4116) | stbi_inline static int stbi__bit_reverse(int v, int bits)
function stbi__zbuild_huffman (line 4124) | static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizeli...
type stbi__zbuf (line 4177) | typedef struct
function stbi_inline (line 4192) | stbi_inline static int stbi__zeof(stbi__zbuf *z)
function stbi_inline (line 4197) | stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z)
function stbi__fill_bits (line 4202) | static void stbi__fill_bits(stbi__zbuf *z)
function stbi__zreceive (line 4214) | int stbi__zreceive(stbi__zbuf *z, int n)
function stbi__zhuffman_decode_slowpath (line 4224) | static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z)
function stbi_inline (line 4243) | stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffm...
function stbi__zexpand (line 4273) | static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to m...
function stbi__parse_huffman_block (line 4309) | static int stbi__parse_huffman_block(stbi__zbuf *a)
function stbi__compute_huffman_codes (line 4359) | static int stbi__compute_huffman_codes(stbi__zbuf *a)
function stbi__parse_uncompressed_block (line 4409) | static int stbi__parse_uncompressed_block(stbi__zbuf *a)
function stbi__parse_zlib_header (line 4438) | static int stbi__parse_zlib_header(stbi__zbuf *a)
function stbi__parse_zlib (line 4481) | static int stbi__parse_zlib(stbi__zbuf *a, int parse_header)
function stbi__do_zlib (line 4510) | static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, i...
function STBIDEF (line 4520) | STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int ...
function STBIDEF (line 4536) | STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *...
function STBIDEF (line 4541) | STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *b...
function STBIDEF (line 4557) | STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const ...
function STBIDEF (line 4568) | STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int l...
function STBIDEF (line 4584) | STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, co...
type stbi__pngchunk (line 4607) | typedef struct
function stbi__pngchunk (line 4613) | static stbi__pngchunk stbi__get_chunk_header(stbi__context *s)
function stbi__check_png_header (line 4621) | static int stbi__check_png_header(stbi__context *s)
type stbi__png (line 4630) | typedef struct
function stbi__paeth (line 4657) | static int stbi__paeth(int a, int b, int c)
function stbi__create_png_alpha_expand8 (line 4675) | static void stbi__create_png_alpha_expand8(stbi_uc *dest, stbi_uc *src, ...
function stbi__create_png_image_raw (line 4696) | static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__...
function stbi__create_png_image (line 4861) | static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stb...
function stbi__compute_transparency (line 4906) | static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int o...
function stbi__compute_transparency16 (line 4931) | static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3]...
function stbi__expand_png_palette (line 4956) | static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int ...
function STBIDEF (line 4996) | STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpr...
function STBIDEF (line 5001) | STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_conv...
function STBIDEF (line 5013) | STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_shou...
function STBIDEF (line 5019) | STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_shou...
function stbi__de_iphone (line 5033) | static void stbi__de_iphone(stbi__png *z)
function stbi__parse_png_file (line 5078) | static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
function stbi__png_test (line 5302) | static int stbi__png_test(stbi__context *s)
function stbi__png_info_raw (line 5310) | static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp)
function stbi__png_info (line 5322) | static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__png_is16 (line 5329) | static int stbi__png_is16(stbi__context *s)
function stbi__bmp_test_raw (line 5346) | static int stbi__bmp_test_raw(stbi__context *s)
function stbi__bmp_test (line 5361) | static int stbi__bmp_test(stbi__context *s)
function stbi__high_bit (line 5370) | static int stbi__high_bit(unsigned int z)
function stbi__bitcount (line 5382) | static int stbi__bitcount(unsigned int a)
function stbi__shiftsigned (line 5395) | static int stbi__shiftsigned(unsigned int v, int shift, int bits)
type stbi__bmp_data (line 5415) | typedef struct
function stbi__bmp_set_mask_defaults (line 5422) | static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress)
function stbi__tga_get_comp (line 5739) | static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_r...
function stbi__tga_info (line 5755) | static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__tga_test (line 5820) | static int stbi__tga_test(stbi__context *s)
function stbi__tga_read_rgb16 (line 5852) | static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out)
function stbi__psd_test (line 6081) | static int stbi__psd_test(stbi__context *s)
function stbi__psd_decode_rle (line 6088) | static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelC...
function stbi__pic_is4 (line 6336) | static int stbi__pic_is4(stbi__context *s,const char *str)
function stbi__pic_test_core (line 6346) | static int stbi__pic_test_core(stbi__context *s)
type stbi__pic_packet (line 6362) | typedef struct
function stbi_uc (line 6367) | static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest)
function stbi__copyval (line 6381) | static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src)
function stbi_uc (line 6390) | static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int heigh...
function stbi__pic_test (line 6541) | static int stbi__pic_test(stbi__context *s)
type stbi__gif_lzw (line 6553) | typedef struct
type stbi__gif (line 6560) | typedef struct
function stbi__gif_test_raw (line 6580) | static int stbi__gif_test_raw(stbi__context *s)
function stbi__gif_test (line 6590) | static int stbi__gif_test(stbi__context *s)
function stbi__gif_parse_colortable (line 6597) | static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256...
function stbi__gif_header (line 6608) | static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, i...
function stbi__gif_info_raw (line 6639) | static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp)
function stbi__out_gif_code (line 6654) | static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
function stbi_uc (line 6691) | static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)
function stbi_uc (line 6778) | static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int ...
function stbi__gif_info (line 7077) | static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__hdr_test_core (line 7087) | static int stbi__hdr_test_core(stbi__context *s, const char *signature)
function stbi__hdr_test (line 7097) | static int stbi__hdr_test(stbi__context* s)
function stbi__hdr_convert (line 7131) | static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp)
function stbi__hdr_info (line 7289) | static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__bmp_info (line 7335) | static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__psd_info (line 7359) | static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__psd_is16 (line 7394) | static int stbi__psd_is16(stbi__context *s)
function stbi__pic_info (line 7423) | static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__pnm_test (line 7494) | static int stbi__pnm_test(stbi__context *s)
function stbi__pnm_isspace (line 7543) | static int stbi__pnm_isspace(char c)
function stbi__pnm_skip_whitespace (line 7548) | static void stbi__pnm_skip_whitespace(stbi__context *s, char *c)
function stbi__pnm_isdigit (line 7562) | static int stbi__pnm_isdigit(char c)
function stbi__pnm_getinteger (line 7567) | static int stbi__pnm_getinteger(stbi__context *s, char *c)
function stbi__pnm_info (line 7581) | static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp)
function stbi__pnm_is16 (line 7624) | static int stbi__pnm_is16(stbi__context *s)
function stbi__info_main (line 7632) | static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)
function stbi__is_16_main (line 7674) | static int stbi__is_16_main(stbi__context *s)
function STBIDEF (line 7691) | STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp)
function STBIDEF (line 7701) | STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp)
function STBIDEF (line 7712) | STBIDEF int stbi_is_16_bit(char const *filename)
function STBIDEF (line 7722) | STBIDEF int stbi_is_16_bit_from_file(FILE *f)
function STBIDEF (line 7734) | STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x...
function STBIDEF (line 7741) | STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *u...
function STBIDEF (line 7748) | STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len)
function STBIDEF (line 7755) | STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, vo...
FILE: scripts/ps4_names2stubs.py
function name2nid (line 23) | def name2nid(name):
function save_stubs (line 29) | def save_stubs(NIDS):
FILE: src/common/adaptive_mutex.h
function namespace (line 10) | namespace Common {
FILE: src/common/aes.h
function namespace (line 14) | namespace aes {
function Block (line 479) | inline Block mul_blocks(const Block X, const Block Y) {
function Block (line 509) | inline Block ghash(const Block& H, const std::vector<unsigned char>& X) {
function bytes_size (line 521) | size_t bytes_size) {
function std (line 531) | inline std::vector<unsigned char> gctr(const detail::RoundKeys& rkeys, c...
function push_back (line 567) | inline void push_back(std::vector<unsigned char>& bytes, const unsigned ...
function push_back (line 572) | inline void push_back(std::vector<unsigned char>& bytes, const std::bits...
function push_back_zero_bits (line 579) | inline void push_back_zero_bits(std::vector<unsigned char>& bytes,
function Block (line 585) | inline Block calc_H(const RoundKeys& rkeys) {
function Block (line 591) | inline Block calc_J0(const Block& H, const unsigned char* iv, const std:...
function calc_gcm_tag (line 607) | inline void calc_gcm_tag(const unsigned char* data, const std::size_t da...
function crypt_gcm (line 637) | inline void crypt_gcm(const unsigned char* data, const std::size_t data_...
function std (line 661) | inline std::vector<unsigned char> key_from_string(const char (*key_str)[...
function std (line 666) | inline std::vector<unsigned char> key_from_string(const char (*key_str)[...
function std (line 671) | inline std::vector<unsigned char> key_from_string(const char (*key_str)[...
function get_padded_encrypted_size (line 676) | inline unsigned long get_padded_encrypted_size(const unsigned long data_...
type Error (line 681) | typedef enum {
function namespace (line 695) | namespace detail {
function Error (line 804) | inline Error encrypt_ecb(const unsigned char* data, const unsigned long ...
function Error (line 848) | inline Error decrypt_ecb(const unsigned char* data, const unsigned long ...
function Error (line 908) | inline Error encrypt_cbc(const unsigned char* data, const unsigned long ...
function Error (line 976) | inline Error decrypt_cbc(const unsigned char* data, const unsigned long ...
function Error (line 1046) | inline Error encrypt_gcm(unsigned char* data, const std::size_t data_size,
function Error (line 1080) | inline Error encrypt_gcm(unsigned char* data, const std::size_t data_size,
function Error (line 1099) | inline Error decrypt_gcm(unsigned char* data, const std::size_t data_size,
function Error (line 1141) | inline Error decrypt_gcm(unsigned char* data, const std::size_t data_size,
function Error (line 1169) | inline Error crypt_ctr(unsigned char* data, const std::size_t data_size,...
FILE: src/common/assert.cpp
function assert_fail_impl (line 16) | void assert_fail_impl() {
function unreachable_impl (line 22) | [[noreturn]] void unreachable_impl() {
function assert_fail_debug_msg (line 29) | void assert_fail_debug_msg(const char* msg) {
FILE: src/common/bit_array.h
function namespace (line 15) | namespace Common {
function Range (line 210) | Range FirstRangeFrom(size_t start) const {
function BitArray (line 376) | inline constexpr BitArray operator^(const BitArray& other) const {
FILE: src/common/bit_field.h
function ExtractValue (line 83) | struct BitField {
function Assign (line 144) | constexpr void Assign(const T& value) {
function T (line 148) | [[nodiscard]] constexpr T Value() const {
FILE: src/common/bounded_threadsafe_queue.h
function namespace (line 13) | namespace Common {
function TryPop (line 34) | bool TryPop(T& t) {
function PopWait (line 38) | void PopWait(T& t) {
function PopWait (line 42) | void PopWait(T& t, std::stop_token stop_token) {
function T (line 46) | T PopWait() {
function T (line 52) | T PopWait(std::stop_token stop_token) {
type class (line 59) | enum class
type class (line 65) | enum class
function else (line 122) | else if constexpr (Mode == PopMode::WaitWithStopToken) {
function TryPop (line 177) | bool TryPop(T& t) {
function PopWait (line 181) | void PopWait(T& t) {
function PopWait (line 185) | void PopWait(T& t, std::stop_token stop_token) {
function T (line 189) | T PopWait() {
function T (line 193) | T PopWait(std::stop_token stop_token) {
function T (line 232) | T PopWait() {
FILE: src/common/concepts.h
function namespace (line 10) | namespace Common {
FILE: src/common/config.cpp
type toml (line 24) | namespace toml {
function find_fs_path_or (line 26) | std::filesystem::path find_fs_path_or(const basic_value<TC>& v, const ...
function get_optional (line 42) | std::optional<T> get_optional(const toml::value& v, const std::string&...
type Config (line 79) | namespace Config {
function setConfigMode (line 83) | void setConfigMode(ConfigMode mode) {
class ConfigEntry (line 88) | class ConfigEntry {
method ConfigEntry (line 93) | ConfigEntry(const T& t = T()) : default_value(t), base_value(t), gam...
method ConfigEntry (line 94) | ConfigEntry operator=(const T& t) {
method T (line 98) | const T get() const {
method setFromToml (line 110) | void setFromToml(const toml::value& v, const std::string& key, bool ...
method set (line 117) | void set(const T value, bool is_game_specific = false) {
method setTomlValue (line 120) | void setTomlValue(toml::ordered_value& data, const std::string& head...
function getSysModulesPath (line 231) | std::filesystem::path getSysModulesPath() {
function setSysModulesPath (line 238) | void setSysModulesPath(const std::filesystem::path& path) {
function getFontsPath (line 242) | std::filesystem::path getFontsPath() {
function setFontsPath (line 249) | void setFontsPath(const std::filesystem::path& path) {
function getVolumeSlider (line 253) | int getVolumeSlider() {
function allowHDR (line 256) | bool allowHDR() {
function GetUseUnifiedInputConfig (line 260) | bool GetUseUnifiedInputConfig() {
function SetUseUnifiedInputConfig (line 264) | void SetUseUnifiedInputConfig(bool use) {
function GetOverrideControllerColor (line 268) | bool GetOverrideControllerColor() {
function SetOverrideControllerColor (line 272) | void SetOverrideControllerColor(bool enable) {
function getLoggingEnabled (line 280) | bool getLoggingEnabled() {
function SetControllerCustomColor (line 284) | void SetControllerCustomColor(int r, int b, int g) {
function string (line 290) | string getTrophyKey() {
function setTrophyKey (line 294) | void setTrophyKey(string key) {
function GetSaveDataPath (line 298) | std::filesystem::path GetSaveDataPath() {
function setVolumeSlider (line 305) | void setVolumeSlider(int volumeValue, bool is_game_specific) {
function isNeoModeConsole (line 309) | bool isNeoModeConsole() {
function isDevKitConsole (line 313) | bool isDevKitConsole() {
function getExtraDmemInMbytes (line 317) | int getExtraDmemInMbytes() {
function setExtraDmemInMbytes (line 321) | void setExtraDmemInMbytes(int value, bool is_game_specific) {
function getIsFullscreen (line 327) | bool getIsFullscreen() {
function string (line 331) | string getFullscreenMode() {
function getPresentMode (line 335) | std::string getPresentMode() {
function getisTrophyPopupDisabled (line 339) | bool getisTrophyPopupDisabled() {
function getEnableDiscordRPC (line 343) | bool getEnableDiscordRPC() {
function s16 (line 347) | s16 getCursorState() {
function getCursorHideTimeout (line 351) | int getCursorHideTimeout() {
function string (line 355) | string getMicDevice() {
function getMainOutputDevice (line 359) | std::string getMainOutputDevice() {
function getPadSpkOutputDevice (line 363) | std::string getPadSpkOutputDevice() {
function getTrophyNotificationDuration (line 367) | double getTrophyNotificationDuration() {
function u32 (line 371) | u32 getWindowWidth() {
function u32 (line 375) | u32 getWindowHeight() {
function u32 (line 379) | u32 getInternalScreenWidth() {
function u32 (line 383) | u32 getInternalScreenHeight() {
function s32 (line 387) | s32 getGpuId() {
function string (line 391) | string getLogFilter() {
function string (line 395) | string getLogType() {
function groupIdenticalLogs (line 399) | bool groupIdenticalLogs() {
function string (line 403) | string getUserName() {
function getUseSpecialPad (line 407) | bool getUseSpecialPad() {
function getSpecialPadClass (line 411) | int getSpecialPadClass() {
function getIsMotionControlsEnabled (line 415) | bool getIsMotionControlsEnabled() {
function debugDump (line 419) | bool debugDump() {
function collectShadersForDebug (line 423) | bool collectShadersForDebug() {
function showSplash (line 427) | bool showSplash() {
function string (line 431) | string sideTrophy() {
function nullGpu (line 435) | bool nullGpu() {
function copyGPUCmdBuffers (line 439) | bool copyGPUCmdBuffers() {
function getReadbacksMode (line 443) | int getReadbacksMode() {
function readbackLinearImages (line 447) | bool readbackLinearImages() {
function directMemoryAccess (line 451) | bool directMemoryAccess() {
function dumpShaders (line 455) | bool dumpShaders() {
function patchShaders (line 459) | bool patchShaders() {
function isRdocEnabled (line 463) | bool isRdocEnabled() {
function isPipelineCacheEnabled (line 467) | bool isPipelineCacheEnabled() {
function isPipelineCacheArchived (line 471) | bool isPipelineCacheArchived() {
function getShowFpsCounter (line 475) | bool getShowFpsCounter() {
function setShowFpsCounter (line 479) | void setShowFpsCounter(bool enable, bool is_game_specific) {
function isLoggingEnabled (line 483) | bool isLoggingEnabled() {
function u32 (line 487) | u32 vblankFreq() {
function vkValidationEnabled (line 494) | bool vkValidationEnabled() {
function vkValidationCoreEnabled (line 498) | bool vkValidationCoreEnabled() {
function vkValidationSyncEnabled (line 502) | bool vkValidationSyncEnabled() {
function vkValidationGpuEnabled (line 506) | bool vkValidationGpuEnabled() {
function getVkCrashDiagnosticEnabled (line 510) | bool getVkCrashDiagnosticEnabled() {
function getVkHostMarkersEnabled (line 514) | bool getVkHostMarkersEnabled() {
function getVkGuestMarkersEnabled (line 518) | bool getVkGuestMarkersEnabled() {
function setVkCrashDiagnosticEnabled (line 522) | void setVkCrashDiagnosticEnabled(bool enable, bool is_game_specific) {
function setVkHostMarkersEnabled (line 526) | void setVkHostMarkersEnabled(bool enable, bool is_game_specific) {
function setVkGuestMarkersEnabled (line 530) | void setVkGuestMarkersEnabled(bool enable, bool is_game_specific) {
function getIsConnectedToNetwork (line 534) | bool getIsConnectedToNetwork() {
function setConnectedToNetwork (line 538) | void setConnectedToNetwork(bool enable, bool is_game_specific) {
function setGpuId (line 542) | void setGpuId(s32 selectedGpuId, bool is_game_specific) {
function setWindowWidth (line 546) | void setWindowWidth(u32 width, bool is_game_specific) {
function setWindowHeight (line 550) | void setWindowHeight(u32 height, bool is_game_specific) {
function setInternalScreenWidth (line 554) | void setInternalScreenWidth(u32 width) {
function setInternalScreenHeight (line 558) | void setInternalScreenHeight(u32 height) {
function setDebugDump (line 562) | void setDebugDump(bool enable, bool is_game_specific) {
function setLoggingEnabled (line 566) | void setLoggingEnabled(bool enable, bool is_game_specific) {
function setCollectShaderForDebug (line 570) | void setCollectShaderForDebug(bool enable, bool is_game_specific) {
function setShowSplash (line 574) | void setShowSplash(bool enable, bool is_game_specific) {
function setSideTrophy (line 578) | void setSideTrophy(string side, bool is_game_specific) {
function setNullGpu (line 582) | void setNullGpu(bool enable, bool is_game_specific) {
function setAllowHDR (line 586) | void setAllowHDR(bool enable, bool is_game_specific) {
function setCopyGPUCmdBuffers (line 590) | void setCopyGPUCmdBuffers(bool enable, bool is_game_specific) {
function setReadbacksMode (line 594) | void setReadbacksMode(int mode, bool is_game_specific) {
function setReadbackLinearImages (line 598) | void setReadbackLinearImages(bool enable, bool is_game_specific) {
function setDirectMemoryAccess (line 602) | void setDirectMemoryAccess(bool enable, bool is_game_specific) {
function setDumpShaders (line 606) | void setDumpShaders(bool enable, bool is_game_specific) {
function setVkValidation (line 610) | void setVkValidation(bool enable, bool is_game_specific) {
function setVkSyncValidation (line 614) | void setVkSyncValidation(bool enable, bool is_game_specific) {
function setVkCoreValidation (line 618) | void setVkCoreValidation(bool enable, bool is_game_specific) {
function setVkGpuValidation (line 622) | void setVkGpuValidation(bool enable, bool is_game_specific) {
function setRdocEnabled (line 626) | void setRdocEnabled(bool enable, bool is_game_specific) {
function setPipelineCacheEnabled (line 630) | void setPipelineCacheEnabled(bool enable, bool is_game_specific) {
function setPipelineCacheArchived (line 634) | void setPipelineCacheArchived(bool enable, bool is_game_specific) {
function setVblankFreq (line 638) | void setVblankFreq(u32 value, bool is_game_specific) {
function setIsFullscreen (line 642) | void setIsFullscreen(bool enable, bool is_game_specific) {
function setFullscreenMode (line 646) | void setFullscreenMode(string mode, bool is_game_specific) {
function setPresentMode (line 650) | void setPresentMode(std::string mode, bool is_game_specific) {
function setisTrophyPopupDisabled (line 654) | void setisTrophyPopupDisabled(bool disable, bool is_game_specific) {
function setEnableDiscordRPC (line 658) | void setEnableDiscordRPC(bool enable) {
function setCursorState (line 662) | void setCursorState(s16 newCursorState, bool is_game_specific) {
function setCursorHideTimeout (line 666) | void setCursorHideTimeout(int newcursorHideTimeout, bool is_game_speci...
function setMicDevice (line 670) | void setMicDevice(std::string device, bool is_game_specific) {
function setMainOutputDevice (line 674) | void setMainOutputDevice(std::string device, bool is_game_specific) {
function setPadSpkOutputDevice (line 678) | void setPadSpkOutputDevice(std::string device, bool is_game_specific) {
function setTrophyNotificationDuration (line 682) | void setTrophyNotificationDuration(double newTrophyNotificationDuratio...
function setLanguage (line 686) | void setLanguage(u32 language, bool is_game_specific) {
function setNeoMode (line 690) | void setNeoMode(bool enable, bool is_game_specific) {
function setDevKitConsole (line 694) | void setDevKitConsole(bool enable, bool is_game_specific) {
function setLogType (line 698) | void setLogType(const string& type, bool is_game_specific) {
function setIdenticalLogGrouped (line 702) | void setIdenticalLogGrouped(bool enable, bool is_game_specific) {
function setLogFilter (line 706) | void setLogFilter(const string& type, bool is_game_specific) {
function setSeparateLogFilesEnabled (line 710) | void setSeparateLogFilesEnabled(bool enabled, bool is_game_specific) {
function setUserName (line 714) | void setUserName(const string& name, bool is_game_specific) {
function setUseSpecialPad (line 718) | void setUseSpecialPad(bool use) {
function setSpecialPadClass (line 722) | void setSpecialPadClass(int type) {
function setIsMotionControlsEnabled (line 726) | void setIsMotionControlsEnabled(bool use, bool is_game_specific) {
function addGameInstallDir (line 730) | bool addGameInstallDir(const std::filesystem::path& dir, bool enabled) {
function removeGameInstallDir (line 740) | void removeGameInstallDir(const std::filesystem::path& dir) {
function setGameInstallDirEnabled (line 749) | void setGameInstallDirEnabled(const std::filesystem::path& dir, bool e...
function setAddonInstallDir (line 758) | void setAddonInstallDir(const std::filesystem::path& dir) {
function setGameInstallDirs (line 762) | void setGameInstallDirs(const std::vector<std::filesystem::path>& dirs...
function setAllGameInstallDirs (line 769) | void setAllGameInstallDirs(const std::vector<GameInstallDir>& dirs_con...
function setSaveDataPath (line 773) | void setSaveDataPath(const std::filesystem::path& path) {
function getGameInstallDirs (line 777) | const std::vector<std::filesystem::path> getGameInstallDirs() {
function getGameInstallDirsEnabled (line 787) | const std::vector<bool> getGameInstallDirsEnabled() {
function getAddonInstallDir (line 795) | std::filesystem::path getAddonInstallDir() {
function u32 (line 803) | u32 GetLanguage() {
function getSeparateLogFilesEnabled (line 807) | bool getSeparateLogFilesEnabled() {
function getPSNSignedIn (line 811) | bool getPSNSignedIn() {
function setPSNSignedIn (line 815) | void setPSNSignedIn(bool sign, bool is_game_specific) {
function string (line 819) | string getDefaultControllerID() {
function setDefaultControllerID (line 823) | void setDefaultControllerID(string id) {
function getBackgroundControllerInput (line 827) | bool getBackgroundControllerInput() {
function setBackgroundControllerInput (line 831) | void setBackgroundControllerInput(bool enable, bool is_game_specific) {
function getFsrEnabled (line 835) | bool getFsrEnabled() {
function setFsrEnabled (line 839) | void setFsrEnabled(bool enable, bool is_game_specific) {
function getRcasEnabled (line 843) | bool getRcasEnabled() {
function setRcasEnabled (line 847) | void setRcasEnabled(bool enable, bool is_game_specific) {
function getRcasAttenuation (line 851) | int getRcasAttenuation() {
function setRcasAttenuation (line 855) | void setRcasAttenuation(int value, bool is_game_specific) {
function getUsbDeviceBackend (line 859) | int getUsbDeviceBackend() {
function setUsbDeviceBackend (line 863) | void setUsbDeviceBackend(int value, bool is_game_specific) {
function load (line 867) | void load(const std::filesystem::path& path, bool is_game_specific) {
function sortTomlSections (line 1034) | void sortTomlSections(toml::ordered_value& data) {
function save (line 1065) | void save(const std::filesystem::path& path, bool is_game_specific) {
function setDefaultValues (line 1216) | void setDefaultValues(bool is_game_specific) {
function GetDefaultGlobalConfig (line 1318) | constexpr std::string_view GetDefaultGlobalConfig() {
function GetDefaultInputConfig (line 1324) | constexpr std::string_view GetDefaultInputConfig() {
function GetInputConfigFile (line 1398) | std::filesystem::path GetInputConfigFile(const string& game_id) {
function resetGameSpecificValue (line 1478) | void resetGameSpecificValue(std::string entry) {
FILE: src/common/config.h
function namespace (line 10) | namespace Config {
FILE: src/common/cstring.h
function namespace (line 10) | namespace Common {
FILE: src/common/debug.h
function IsProfilerConnected (line 16) | static inline bool IsProfilerConnected() {
type MarkersPalette (line 38) | enum MarkersPalette : int {
FILE: src/common/decoder.cpp
type Common (line 7) | namespace Common {
function ZyanStatus (line 43) | ZyanStatus DecoderImpl::decodeInstruction(ZydisDecodedInstruction& inst,
FILE: src/common/decoder.h
function namespace (line 10) | namespace Common {
FILE: src/common/discord_rpc_handler.cpp
type DiscordRPCHandler (line 8) | namespace DiscordRPCHandler {
FILE: src/common/discord_rpc_handler.h
function namespace (line 10) | namespace DiscordRPCHandler {
FILE: src/common/div_ceil.h
function namespace (line 9) | namespace Common {
FILE: src/common/elf_info.h
function namespace (line 15) | namespace Core {
function namespace (line 19) | namespace Common {
function class (line 61) | class ElfInfo {
FILE: src/common/endian.h
function namespace (line 16) | namespace Common {
FILE: src/common/enum.h
function namespace (line 63) | namespace Common {
function clr (line 93) | void clr(Flags flags) {
function test (line 108) | bool test(T f) const {
function clrAll (line 116) | void clrAll() {
function Flags (line 128) | Flags operator|(const Flags& other) const {
function Flags (line 132) | Flags operator^(const Flags& other) const {
function operator (line 136) | bool operator==(const Flags& other) const {
function operator (line 140) | bool operator!=(const Flags& other) const {
function IntType (line 147) | static IntType bit(T f) {
function IntType (line 156) | static IntType bits() {
FILE: src/common/error.cpp
type Common (line 15) | namespace Common {
function NativeErrorToString (line 17) | std::string NativeErrorToString(int e) {
function GetLastErrorMsg (line 49) | std::string GetLastErrorMsg() {
FILE: src/common/fixed_value.h
function T (line 18) | T m_value{Value};
FILE: src/common/func_traits.h
function namespace (line 8) | namespace Common {
FILE: src/common/hash.h
function u64 (line 8) | [[nodiscard]] inline u64 HashCombine(const u64 seed, const u64 hash) {
function u32 (line 12) | [[nodiscard]] inline u32 HashCombine(const u32 seed, const u32 hash) {
FILE: src/common/io_file.cpp
type Common::FS (line 29) | namespace Common::FS {
function wchar_t (line 37) | [[nodiscard]] constexpr const wchar_t* AccessModeToWStr(FileAccessMode...
function ToWindowsFileShareFlag (line 74) | [[nodiscard]] constexpr int ToWindowsFileShareFlag(FileShareFlag flag) {
function ToSeekOrigin (line 129) | [[nodiscard]] constexpr int ToSeekOrigin(SeekOrigin origin) {
function IOFile (line 169) | IOFile& IOFile::operator=(IOFile&& other) noexcept {
function u64 (line 359) | u64 IOFile::GetSize() const {
function s64 (line 399) | s64 IOFile::Tell() const {
function u64 (line 409) | u64 GetDirectorySize(const std::filesystem::path& path) {
FILE: src/common/io_file.h
function namespace (line 15) | namespace Common::FS {
function WriteString (line 218) | size_t WriteString(std::span<const char> string) const {
function WriteBytes (line 222) | static size_t WriteBytes(const std::filesystem::path path, const auto& d...
function FileAccessMode (line 230) | FileAccessMode file_access_mode{}
function FileType (line 231) | FileType file_type{}
FILE: src/common/key_manager.h
function class (line 17) | class KeyManager {
type adl_serializer (line 71) | struct adl_serializer
function from_json (line 75) | static void from_json(const json& j, std::vector<u8>& vec) {
FILE: src/common/logging/backend.h
function namespace (line 9) | namespace Common::Log {
FILE: src/common/logging/filter.h
function namespace (line 11) | namespace Common::Log {
Copy disabled (too large)
Download .json
Condensed preview — 853 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (18,966K chars).
[
{
"path": ".ci/clang-format.sh",
"chars": 1103,
"preview": "#!/bin/bash -ex\n\n# SPDX-FileCopyrightText: 2023 Citra Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nif g"
},
{
"path": ".github/FUNDING.yml",
"chars": 15,
"preview": "ko_fi: shadps4\n"
},
{
"path": ".github/ISSUE_TEMPLATE/app-bug-report.yaml",
"chars": 2611,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n# Docs - h"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 366,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\nblank_issu"
},
{
"path": ".github/ISSUE_TEMPLATE/feature-request.yaml",
"chars": 1879,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n# Docs - h"
},
{
"path": ".github/ISSUE_TEMPLATE/game-bug-report.yaml",
"chars": 3901,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n# Docs - h"
},
{
"path": ".github/ISSUE_TEMPLATE/rfc.yaml",
"chars": 2377,
"preview": "# SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n# Docs - h"
},
{
"path": ".github/linux-appimage-sdl.sh",
"chars": 1045,
"preview": "# SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\n#!/bin/bash\n\nif [[ "
},
{
"path": ".github/workflows/build.yml",
"chars": 16431,
"preview": "# SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nname: Build and Rel"
},
{
"path": ".gitignore",
"chars": 7251,
"preview": "# SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\n## Ignore Visual St"
},
{
"path": ".gitmodules",
"chars": 4312,
"preview": "[submodule \"externals/zlib-ng\"]\n\tpath = externals/zlib-ng\n\turl = https://github.com/shadps4-emu/ext-zlib-ng.git\n\tshallow"
},
{
"path": "CMakeDarwinPresets.json",
"chars": 501,
"preview": "{\n \"version\": 9,\n \"cmakeMinimumRequired\": {\n \"major\": 3,\n \"minor\": 30,\n \"patch\": 0\n },\n \"configurePresets\":"
},
{
"path": "CMakeLinuxPresets.json",
"chars": 456,
"preview": "{\n \"version\": 9,\n \"cmakeMinimumRequired\": {\n \"major\": 3,\n \"minor\": 30,\n \"patch\": 0\n },\n \"configurePresets\":"
},
{
"path": "CMakeLists.txt",
"chars": 56502,
"preview": "# SPDX-FileCopyrightText: Copyright 2024-2026 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\n# Ve"
},
{
"path": "CMakePresets.json",
"chars": 795,
"preview": "{\n \"version\": 9,\n \"cmakeMinimumRequired\": {\n \"major\": 3,\n \"minor\": 30,\n \"patch\": 0\n },\n \"include\": [\"CMake$"
},
{
"path": "CMakeSettings.json",
"chars": 1272,
"preview": "{\n \"configurations\": [\n {\n \"name\": \"x64-Clang-Release\",\n \"generator\": \"Ninja\",\n \"configurationType\":"
},
{
"path": "CMakeWindowsPresets.json",
"chars": 605,
"preview": "{\n \"version\": 9,\n \"cmakeMinimumRequired\": {\n \"major\": 3,\n \"minor\": 30,\n \"patch\": 0\n },\n \"configurePresets\":"
},
{
"path": "CONTRIBUTING.md",
"chars": 3786,
"preview": "<!--\nSPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\nSPDX-License-Identifier: GPL-2.0-or-later\n-->\n\n# Style guidel"
},
{
"path": "LICENSE",
"chars": 18092,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
},
{
"path": "LICENSES/BSD-3-Clause.txt",
"chars": 1459,
"preview": "Copyright (c) <year> <owner>.\n\nRedistribution and use in source and binary forms, with or without modification, are perm"
},
{
"path": "LICENSES/BSL-1.0.txt",
"chars": 1338,
"preview": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or"
},
{
"path": "LICENSES/CC0-1.0.txt",
"chars": 7048,
"preview": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n"
},
{
"path": "LICENSES/GPL-2.0-or-later.txt",
"chars": 17337,
"preview": "GNU GENERAL PUBLIC LICENSE\nVersion 2, June 1991\n\nCopyright (C) 1989, 1991 Free Software Foundation, Inc.\n51 Franklin Str"
},
{
"path": "LICENSES/MIT.txt",
"chars": 1078,
"preview": "MIT License\n\nCopyright (c) <year> <copyright holders>\n\nPermission is hereby granted, free of charge, to any person obtai"
},
{
"path": "LICENSES/OFL-1.1.txt",
"chars": 4012,
"preview": "SIL OPEN FONT LICENSE\n\nVersion 1.1 - 26 February 2007\n\nPREAMBLE\n\nThe goals of the Open Font License (OFL) are to stimula"
},
{
"path": "README.md",
"chars": 9428,
"preview": "<!--\nSPDX-FileCopyrightText: 2026 shadPS4 Emulator Project\nSPDX-License-Identifier: GPL-2.0-or-later\n-->\n\n<h1 align=\"cen"
},
{
"path": "REUSE.toml",
"chars": 4057,
"preview": "version = 1\n\n[[annotations]]\npath = [\n \"REUSE.toml\",\n \"crowdin.yml\",\n \"CMakeSettings.json\",\n \"CMakeDarwinPre"
},
{
"path": "cmake/CMakeRC.cmake",
"chars": 22688,
"preview": "# MIT License\n# \n# Copyright (c) 2017 vector-of-bool <vectorofbool@gmail.com>\n# \n# Permission is hereby granted, free of"
},
{
"path": "cmake/FindFFmpeg.cmake",
"chars": 874,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nfind_pack"
},
{
"path": "cmake/FindRenderDoc.cmake",
"chars": 988,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nfind_path"
},
{
"path": "cmake/Findhalf.cmake",
"chars": 803,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nfind_path"
},
{
"path": "cmake/Findlibusb.cmake",
"chars": 461,
"preview": "# SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nfind_pack"
},
{
"path": "cmake/Findstb.cmake",
"chars": 565,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nfind_path"
},
{
"path": "cmake/FindxxHash.cmake",
"chars": 466,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nfind_pack"
},
{
"path": "dist/MacOSBundleInfo.plist.in",
"chars": 1219,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.c"
},
{
"path": "dist/net.shadps4.shadPS4.desktop",
"chars": 180,
"preview": "[Desktop Entry]\nName=shadPS4\nExec=shadps4\nTerminal=false\nType=Application\nIcon=net.shadps4.shadPS4\nComment=PlayStation 4"
},
{
"path": "dist/net.shadps4.shadPS4.metainfo.xml",
"chars": 5271,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component type=\"desktop-application\">\n <id translate=\"no\">net.shadps4.shadPS4</"
},
{
"path": "dist/net.shadps4.shadPS4_metadata.pot",
"chars": 1774,
"preview": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: PACKAGE VERSION\\n\"\n\"POT-Creation-Date: 2024-11-08 09:07+0000\\n\"\n\"PO-Revision-Dat"
},
{
"path": "documents/Debugging/Debugging.md",
"chars": 10499,
"preview": "<!--\nSPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\nSPDX-License-Identifier: GPL-2.0-or-later\n-->\n\n # Debugging a"
},
{
"path": "documents/Docker Builder/.devcontainer/devcontainer.json",
"chars": 1601,
"preview": "// SPDX-FileCopyrightText: 2026 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n{\n \"name\": \"sh"
},
{
"path": "documents/Docker Builder/.docker/Dockerfile",
"chars": 828,
"preview": "# SPDX-FileCopyrightText: 2026 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nFROM archlinux:late"
},
{
"path": "documents/Docker Builder/docker-compose.yml",
"chars": 226,
"preview": "# SPDX-FileCopyrightText: 2026 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nservices:\n shadps4"
},
{
"path": "documents/building-docker.md",
"chars": 2410,
"preview": "<!--\nSPDX-FileCopyrightText: 2026 shadPS4 Emulator Project\nSPDX-License-Identifier: GPL-2.0-or-later\n-->\n\n# Building sha"
},
{
"path": "documents/building-linux.md",
"chars": 6307,
"preview": "<!--\nSPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\nSPDX-License-Identifier: GPL-2.0-or-later\n-->\n\n## Build shadP"
},
{
"path": "documents/building-macos.md",
"chars": 1306,
"preview": "<!--\nSPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\nSPDX-License-Identifier: GPL-2.0-or-later\n-->\n\n## Build shadP"
},
{
"path": "documents/building-windows.md",
"chars": 8868,
"preview": "<!--\nSPDX-FileCopyrightText: 2025 shadPS4 Emulator Project\nSPDX-License-Identifier: GPL-2.0-or-later\n-->\n\n# Build shadPS"
},
{
"path": "documents/changelog.md",
"chars": 3542,
"preview": "v0.4.0 31/10/2024 - codename divicius\n=================\n\n- Shader recompiler fixes\n- Emulated support for cpus that does"
},
{
"path": "documents/patching-shader.md",
"chars": 695,
"preview": "<!--\nSPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\nSPDX-License-Identifier: GPL-2.0-or-later\n-->\n\n### Install Vu"
},
{
"path": "externals/CMakeLists.txt",
"chars": 8346,
"preview": "# SPDX-FileCopyrightText: Copyright 2024-2026 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nset("
},
{
"path": "externals/aacdec/CMakeLists.txt",
"chars": 4801,
"preview": "# SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nset(AACDE"
},
{
"path": "externals/cmake-modules/GetGitRevisionDescription.cmake",
"chars": 4629,
"preview": "# - Returns a version string from Git\n#\n# These functions force a re-configure on each git commit so that you can\n# trus"
},
{
"path": "externals/cmake-modules/GetGitRevisionDescription.cmake.in",
"chars": 1282,
"preview": "# \n# Internal file for GetGitRevisionDescription.cmake\n#\n# Requires CMake 2.6 or newer (uses the 'function' command)\n#\n#"
},
{
"path": "externals/gcn/CMakeLists.txt",
"chars": 336,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nproject(g"
},
{
"path": "externals/gcn/include/gcn/si_ci_vi_merged_offset.h",
"chars": 1257055,
"preview": "/*\n ********************************************************************************************************************"
},
{
"path": "externals/gcn/include/gcn/si_ci_vi_merged_pm4_it_opcodes.h",
"chars": 5536,
"preview": "/*\n ********************************************************************************************************************"
},
{
"path": "externals/renderdoc/renderdoc_app.h",
"chars": 31606,
"preview": "/******************************************************************************\n * The MIT License (MIT)\n *\n * Copyright"
},
{
"path": "externals/stb/stb_image.h",
"chars": 283010,
"preview": "/* stb_image - v2.30 - public domain image loader - http://nothings.org/stb\n no warrant"
},
{
"path": "scripts/aerolib.inl",
"chars": 9375906,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n// gener"
},
{
"path": "scripts/file_formats/sfo.hexpat",
"chars": 1371,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\nimport "
},
{
"path": "scripts/ps4_names.txt",
"chars": 7044700,
"preview": "ACProcessMain\nAES_cbc_encrypt\nAES_cfb128_encrypt\nAES_ctr128_encrypt\nAES_decrypt\nAES_ecb_encrypt\nAES_encrypt\nAES_set_decr"
},
{
"path": "scripts/ps4_names2stubs.py",
"chars": 1350,
"preview": "# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\n# Helper "
},
{
"path": "shell.nix",
"chars": 1229,
"preview": "# SPDX-FileCopyrightText: 2024 shadPS4 Emulator Project\n# SPDX-License-Identifier: GPL-2.0-or-later\n\nwith import (fetchT"
},
{
"path": "src/.clang-format",
"chars": 7586,
"preview": "# SPDX-FileCopyrightText: 2016 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>\n# SPDX-License-Identifier: GPL-2.0-or-later\n"
},
{
"path": "src/common/adaptive_mutex.h",
"chars": 636,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/aes.h",
"chars": 39892,
"preview": "// SPDX-FileCopyrightText: 2015 kkAyataka\n// SPDX-License-Identifier: BSL-1.0\n\n#pragma once\n\n#include <algorithm>\n#inclu"
},
{
"path": "src/common/alignment.h",
"chars": 1325,
"preview": "// SPDX-FileCopyrightText: 2014 Jannik Vogel <email@jannikvogel.de>\n// SPDX-License-Identifier: CC0-1.0\n\n#pragma once\n\n#"
},
{
"path": "src/common/arch.h",
"chars": 268,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/assert.cpp",
"chars": 800,
"preview": "// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#include \""
},
{
"path": "src/common/assert.h",
"chars": 4903,
"preview": "// SPDX-FileCopyrightText: 2013 Dolphin Emulator Project\n// SPDX-FileCopyrightText: 2014 Citra Emulator Project\n// SPDX-"
},
{
"path": "src/common/bit_array.h",
"chars": 13202,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/bit_field.h",
"chars": 5964,
"preview": "// SPDX-FileCopyrightText: 2014 Tony Wasserka\n// SPDX-FileCopyrightText: 2014 Dolphin Emulator Project\n// SPDX-License-I"
},
{
"path": "src/common/bounded_threadsafe_queue.h",
"chars": 6954,
"preview": "// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma on"
},
{
"path": "src/common/concepts.h",
"chars": 839,
"preview": "// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma on"
},
{
"path": "src/common/config.cpp",
"chars": 49348,
"preview": "// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#i"
},
{
"path": "src/common/config.h",
"chars": 8120,
"preview": "// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#p"
},
{
"path": "src/common/cstring.h",
"chars": 3776,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/debug.h",
"chars": 2933,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/decoder.cpp",
"chars": 1797,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#includ"
},
{
"path": "src/common/decoder.h",
"chars": 885,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/discord_rpc_handler.cpp",
"chars": 1530,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#includ"
},
{
"path": "src/common/discord_rpc_handler.h",
"chars": 593,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/div_ceil.h",
"chars": 797,
"preview": "// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma on"
},
{
"path": "src/common/elf_info.h",
"chars": 4101,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/endian.h",
"chars": 6726,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n/**\n * "
},
{
"path": "src/common/enum.h",
"chars": 7308,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/error.cpp",
"chars": 1574,
"preview": "// SPDX-FileCopyrightText: 2013 Dolphin Emulator Project\n// SPDX-FileCopyrightText: 2014 Citra Emulator Project\n// SPDX-"
},
{
"path": "src/common/fixed_value.h",
"chars": 957,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/func_traits.h",
"chars": 914,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/hash.h",
"chars": 435,
"preview": "// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma"
},
{
"path": "src/common/io_file.cpp",
"chars": 10822,
"preview": "// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#include <"
},
{
"path": "src/common/io_file.h",
"chars": 7241,
"preview": "// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma on"
},
{
"path": "src/common/key_manager.cpp",
"chars": 4685,
"preview": "// SPDX-FileCopyrightText: Copyright 2025-2026 shadLauncher4 Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#inc"
},
{
"path": "src/common/key_manager.h",
"chars": 2178,
"preview": "// SPDX-FileCopyrightText: Copyright 2025-2026 shadLauncher4 Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#prag"
},
{
"path": "src/common/logging/backend.h",
"chars": 801,
"preview": "// SPDX-FileCopyrightText: Copyright 2014 Citra Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma o"
},
{
"path": "src/common/logging/filter.h",
"chars": 2498,
"preview": "// SPDX-FileCopyrightText: Copyright 2014 Citra Emulator Project\n// SPDX-License-Identifier: GPL-2.0-or-later\n\n#pragma o"
},
{
"path": "src/core/libraries/network/net_obj.cpp",
"chars": 0,
"preview": ""
},
{
"path": "src/core/libraries/network/net_obj.h",
"chars": 0,
"preview": ""
}
]
// ... and 756 more files (download for full content)
About this extraction
This page contains the full source code of the shadps4-emu/shadPS4 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 853 files (33.1 MB), approximately 4.7M tokens, and a symbol index with 516 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.