Compare commits

..

1445 Commits

Author SHA1 Message Date
Ani 40e9ee5af0 rpcs3_version: Bump to 0.0.41 2026-06-04 02:58:57 +02:00
Megamouse 3fa1241ac0 Initialize render_creator in headless mode 2026-06-02 21:49:09 +02:00
Megamouse 62747bb40d Set OpenGl as default renderer if vulkan is not supported 2026-06-02 21:49:09 +02:00
Megamouse 44b33f1962 Force renderer to default renderer if not supported 2026-06-02 21:49:09 +02:00
Megamouse cc999d4210 Force disable some settings in headless mode 2026-06-02 21:49:09 +02:00
Megamouse 7c2bd56776 cellMusic: don't set current_track to umax on prev
There's no reason to do that and it might cause OOB access elsewhere.
2026-06-02 21:49:09 +02:00
Megamouse 5fc7450865 Fix uninitialized members in queue_submit_t 2026-06-02 16:10:21 +02:00
Megamouse 4ca0f0b11d cpu: fix prefetch list 2026-06-02 16:10:21 +02:00
Megamouse 66de4022b1 Fix ARCH_X64 define for hypervisor_context_t 2026-06-02 16:10:21 +02:00
Megamouse 2b9368abf5 Fix potential OOB access in try_to_enum_value 2026-06-02 16:10:21 +02:00
Megamouse f8a5a6ad93 cellMusicDecode: fix track index on next if already on last track
Fixes an OOB exception
2026-06-01 08:58:52 +02:00
Megamouse fa1aa9dcf3 cellMusicDecode: Fix track selection on prev/next track 2026-06-01 08:58:52 +02:00
Megamouse 883a6889e0 cellMusicDecode: Fix read position on prev/next track 2026-06-01 08:58:52 +02:00
Megamouse 1b5a895346 cellMusic: fix log level of "Comparing track" message 2026-06-01 08:58:52 +02:00
Megamouse 2187f8ae51 cellMusic: Fix OOB playlist access
current_track can be umax
2026-06-01 08:58:52 +02:00
Megamouse 17f1fc31bc cellMusic: fix occasional deadlock during auto-play in playlist mode 2026-06-01 08:58:52 +02:00
Elad ecf77ecef0 Add type-safe idm::last_id() overload 2026-05-31 19:54:10 +03:00
Elad db474c292f utils: Make utils::serial::operator T() explicit 2026-05-31 19:54:10 +03:00
Elad b08e805020 PPU Analyser: Fix possible infinite loop
Because of possible overflow.
2026-05-31 19:54:10 +03:00
Megamouse 7b540cdb20 cellMusic: don't send status callback if we just keep playing automatically 2026-05-31 15:49:32 +02:00
Megamouse 059e70069d cellMusic: improve music list playback 2026-05-31 15:49:32 +02:00
Megamouse 9c719a5857 trophies: fix return value of GetUnlockedPlatinumID with invalid file 2026-05-31 15:49:32 +02:00
Megamouse 375eb21c07 Fix some format and logger typos 2026-05-31 15:49:32 +02:00
Megamouse 1bd246d2d3 Fix some gcc warnings 2026-05-30 23:58:51 +02:00
Megamouse 8c82ce8bed Fix slicing warning in tar_object::save_directory 2026-05-30 19:31:16 +02:00
Megamouse eafa6a9a25 Gracefully exit after headless installation. 2026-05-30 19:31:16 +02:00
Megamouse b9d027a76c Implement fake ps move external devices 2026-05-30 15:48:56 +02:00
Megamouse 0a45c84e16 Update OpenCv to 4.13.0 2026-05-30 13:14:25 +02:00
Megamouse a88951baf3 Qt: clarify package installation during boot 2026-05-30 10:51:59 +02:00
Megamouse 66349fcb5b Qt: Move code to class 2026-05-30 10:51:59 +02:00
Megamouse c6602f673b cli: allow headless installs 2026-05-30 10:51:59 +02:00
Megamouse 7c6b3dcdb9 Update ffmpeg to 8.1.1 2026-05-29 10:23:19 +02:00
Malcolm c11979d124 Revert "SPU LLVM: Remove dead interpreter ret fallback"
This reverts commit 3058a71d72.
2026-05-29 02:24:05 +02:00
Malcolm 3058a71d72 SPU LLVM: Remove dead interpreter ret fallback 2026-05-28 14:10:51 +03:00
Arsh Kumar Singh b41b10a031 RawSPU: bound ELF loads; PPUInterpreter: fix modulo 127->128 (#18797)
Two small fixes that stop the emulator from writing past buffer
boundaries.

RawSPU: when loading a program onto an SPU processor, it now checks that
the program actually fits in 256 KB before copying it. Before this, a
corrupted file could write past the buffer into random host memory.

PPUInterpreter: a one-character typo fix. A modulo operation used % 127
instead of % 128 when computing cross-boundary data sizes. This caused
reservation checks to compare the wrong number of bytes on every load
that crossed a cache line. This fix was pointed out by @AniLeo in the
spam PR #18795 (Discovered by Opus 4.7)


The PS3 hardware enforces these limits:
- Each SPU has exactly 256 KB of memory (from Cell Broadband Engine
Handbook v1.1)
- The PPE cache line is 128 bytes — all reservation logic uses this
granularity

Neither fix should affect the usual games. They only applying to
corrupted or malformed files. Will highly appreciate feedback and
suggestions for this PR

Tested on CI: CI passes on my fork 9 of 10 platforms (Mac Intel failed
downloading a dependency).

Title and Desc written by Codex
2026-05-27 15:27:58 +00:00
Malcolm a87d175295 SPU LLVM: Retry ARM64 TBL2 register scavenger failures
- Some SPU programs inexplicably fail to compile when TBL2/TBX2 are used.
- As an insane workaround, first try to compile with TBL2/TBX2, if LLVM crashes while compiling, try to compile the same program without TBL2/TBX2.
2026-05-27 02:46:11 +03:00
Malcolm dff29a7864 PPU/SPU LLVM: Use arm shuffles in recompilers instead of emulating x86 pshufb
> - SHUFB from 9 instructions down to 5
> - Though it should be 4 if LLVM would just emit BCAX...
2026-05-27 02:46:11 +03:00
Megamouse dd81c92a02 Fix compilation on VS 2026 2026-05-24 21:05:29 +02:00
Megamouse 64ba0dd5e6 Update windows runners to visual studio 2026
Maybe this fixes current build issues...
2026-05-24 21:05:29 +02:00
Windsurf7 0a5b88ac38 Fix non-numerical numpad keys input binding (#18761) 2026-05-22 14:13:37 +02:00
Megamouse f63a34dcc2 Try to fix libusb includes 2026-05-22 09:14:16 +03:00
Megamouse d8710c431d Fix named_thread_group constructor
m_count - 1 could underflow
2026-05-22 09:14:16 +03:00
Megamouse 67464f97df Qt: only allow removal of firmware cache while emulator is stopped 2026-05-20 22:26:08 +02:00
Megamouse 190378bc33 Qt: fix batch progress bar value
It was always one too early
2026-05-20 22:26:08 +02:00
Megamouse da599f7286 Fix localization of anaglyph_settings_dialog 2026-05-20 22:26:08 +02:00
Megamouse 73c8c270a6 Fix USIO log spam 2026-05-20 22:26:08 +02:00
Elad d7da6a713b RawSPU: Implement 16-bit and 8-bit read MMIO 2026-05-20 20:44:24 +03:00
Megamouse 6a2ad0a0aa sys_usbd: enable windows hotplug 2026-05-20 18:10:01 +02:00
Megamouse 84b61e3850 Update libusb to 1.0.30 2026-05-20 18:10:01 +02:00
Malcolm 7e436f9bf1 SPU LLVM: Optimize SPU multiplies for ARM
- Saves 2 instructions in MPY, 1 instruction in MPYU, 2 instructions in MPYS, 2 instructions in MPYA, 1 instruction in MPYI, and 2 instructions in MPYUI
2026-05-20 10:54:13 +03:00
Radu13 2613d7eee7 Do not append install dir for content type theme PKGs (#18765) 2026-05-19 20:11:44 +02:00
Megamouse 55e17ccd3b Update Qt to 6.11.1 2026-05-18 22:05:33 +02:00
Megamouse f368a56c66 Update openal to 1.25.2 2026-05-18 22:05:33 +02:00
RipleyTom 79cb35daa6 Fix ethernet addr in offline mode (#18756) 2026-05-18 14:14:41 +03:00
qurious-pixel b0c1791a0c Restore .DirIcon 2026-05-18 08:29:34 +02:00
Malcolm 61a2604824 SPU LLVM: Inline reading/writing the decrementer for ARM too
- Try switching to llvm's readycyclecounter, which should map to rdtsc on x86 too.
2026-05-17 02:26:42 +03:00
Gustavo Graziano 08c926622d Visual improvements to Windows 11 Themes (#18745) 2026-05-16 18:04:15 +02:00
Megamouse b533a560e6 input: move keyboard stick value buffers to pad
This should improve stick input when using the keyboard for 2 players.
2026-05-15 07:10:40 +02:00
Megamouse e4a49cd425 input: only copy back necessary values in keyboard_pad_handler::process
Profiling has shown that copying both containers took longest.
2026-05-15 07:10:40 +02:00
Megamouse fdce82fc24 input: Use smaller external structs for button and stick access outside of the pad_thread
This needs less memory and hides unwanted members from client code.
2026-05-15 07:10:40 +02:00
Megamouse 5f00b87a44 Move bit_set to new file 2026-05-14 17:12:25 +02:00
Megamouse 53180b8141 Add bit_set unit test 2026-05-14 17:12:25 +02:00
Megamouse 4cc0e4c7fc spu_recompiler: Initialize members 2026-05-14 17:12:25 +02:00
Megamouse 46364856ae Remove unused variable 2026-05-14 17:12:25 +02:00
Megamouse f5c420994d Add unsafe bit_set access for obvious cases 2026-05-14 17:12:25 +02:00
Megamouse c5ee48f54a Harden bitset access 2026-05-14 17:12:25 +02:00
Gustavo Graziano 6f50f0854f I made some improvements to my theme to make it better (#18732) 2026-05-14 14:05:39 +02:00
Elad 53d76db753 SPU: More UB fixes 2026-05-14 13:21:23 +03:00
Elad c860aa2107 SPU Analyzer: Fix initiate_patterns function 2026-05-14 10:42:20 +03:00
Elad a545fe92a0 SPU: Log Mega SPU programs properly 2026-05-14 10:42:20 +03:00
Elad ee436307cf SPU Update 2026-05-14 10:42:20 +03:00
Elad 33016742f1 SPU: Fix CPU usage of spu_channel on BE configuration 2026-05-14 10:42:20 +03:00
Malcolm 320e8d634a SPU LLVM: Workaround bad LLVM codegen for FCGT on AARCH64
- LLVM was emitting a nasty sequence for select instead of just using BSL, so let's try using inline assembly.
2026-05-13 15:20:39 +03:00
kd-11 e52b6ecbbf rsx: Typo fix for pipeline reload hint
- Fragment state just reloads some constant buffers.
- Fragment program state recalculates the program.
- This is overkill for a variant reload, but that can be optimized later.
2026-05-13 11:43:32 +03:00
kd-11 a4712a283f C++ things 2026-05-13 11:43:32 +03:00
kd-11 6da3021158 rsx: Make emulated Z operations compatible with MSAA 2026-05-13 11:43:32 +03:00
kd-11 0064ecb85b gl: Implement emulated Z comparison support 2026-05-13 11:43:32 +03:00
kd-11 1d71854c7f rsx/qt: Add depth compare emulation to the advanced tab 2026-05-13 11:43:32 +03:00
kd-11 a9be80da6f rsx/vk: Implement software Z-buffer comparison
- Useful for scenarios where desktop precision is too high
2026-05-13 11:43:32 +03:00
capriots 2387af0854 cellDmux: fix state check 2026-05-13 07:19:09 +03:00
Phil Coulson 021f16f775 rsx: Fix swapped width/height in NV309E_SET_FORMAT decoder 2026-05-12 19:39:05 +03:00
schm1dtmac fb1c1eeaef [System] Fix restart-loops upon restart-then-quit (#18723)
I observed under macOS (although the bug seems platform agnostic to me)
that when restarting a game, then subsequently quitting it, I'd get
stuck in a 'restart loop' where the game would restart upon completely
shutting down, and this would repeat every time I tried to close the
game until I gave up & force quit RPCS3. Seems like for whatever reason,
the use of std::move didn't actually guarantee that after_kill_callback
got nuked if at all, so all I've done is take a hammer to the fucker and
manually set it to nullptr after being called.

Co-authored-by: Elad <18193363+elad335@users.noreply.github.com>
2026-05-11 17:00:45 +00:00
Edwin Jarvis 6fa7efbcc3 cellMusic: Fix shuffle always producing the same order
The shuffle in step_track() used std::default_random_engine with a
default (fixed) seed, causing the playlist to be 'shuffled' into the
same deterministic order every time. Use std::random_device to seed the
engine so each shuffle produces a genuinely random order.

Fixes #18672
2026-05-11 12:16:03 +03:00
Edwin Jarvis c534da86c3 gui: Remove close button from Game List dock widget
Users frequently close the game list accidentally and then can't
figure out how to restore it. Remove the DockWidgetClosable feature
so the close button is not shown. The game list visibility can still
be toggled via View > View Game List menu action.

Fixes #18518
2026-05-11 11:26:40 +03:00
Antonino Di Guardo 6b5a2f781a ISO: Fix missing read of remaining chunk of data on next extent, if present (#18706) 2026-05-10 16:59:15 +00:00
Arsh Kumar Singh cd7cb1cc11 Qt: include territory in language menu labels (#18704)
## Summary
Fixes the GUI language dropdown to show territory variants when
translation files include country codes.

**Before:** "Portuguese" for both `pt_BR` and `pt_PT`
**After:** "Portuguese (Brazil)" and "Portuguese (Portugal)"

Also fixes the same ambiguity for Chinese and any other language with
country variants.

## Implementation
Uses `QLocale::territoryToString()` alongside the existing
`QLocale::languageToString()` to construct display labels. When no
territory exists (e.g., `en`, `ja`), the label is unchanged.

## Edge cases
- No-territory locales (`en`, `ja`): unchanged —
`QLocale::territoryToString(AnyTerritory)` returns empty, guard
preserves plain language name
- Territory names are locale-translated (not hardcoded English) — they
follow the current UI language, same as `languageToString()`
- `zh_CN` → "Chinese (China)" / `zh_TW` → "Chinese (Taiwan)"
(territory-based, unlike the PS3 system language dropdown which uses
Simplified/Traditional script names — this is appropriate for the GUI
translator selector context)

## Test Plan
- [ ] Language menu shows "Portuguese (Brazil)" when `rpcs3_pt_BR.qm` is
present
- [ ] Language menu shows "Chinese (China)" when `rpcs3_zh_CN.qm` is
present
- [ ] Plain languages (`en`, `ja`) continue to show without parens

---

<details>
<summary>Review note: territory strings in UI locale</summary>

Territory names render in the current UI language (not forced English).
This matches `QLocale::languageToString()` behavior and is consistent
with how the rest of the menu renders. If hardcoded English labels are
preferred, that can be added after review.
</details>

Fixes #18215
2026-05-10 17:25:00 +02:00
kd-11 c0b358003f Add basic guidance on AI usage for contributors 2026-05-10 16:27:18 +03:00
brian218 29b4577fdb USIO: Implemented BanaPassport (バナパスポート) card reader emulation 2026-05-10 09:48:53 +02:00
schm1dtmac b34eba2fb3 Revert PPUThread changes
Causes GOW3 segfaults at the end of PPU linking
2026-05-09 17:56:04 +03:00
AurisDSP 6850e2e5a8 Apple Silicon: consolidate JIT W^X handling with RAII guards
Address review feedback on #18701 (cc @elad335): combine the SPU
worker fix from #18701, the SPRX Loader fix from #18703, and three
additional similar W^X leaks discovered while auditing the codebase
for the same pattern. Use Allman-style braces to match RPCS3 coding
style.

Background:
On AArch64 Apple Silicon, MAP_JIT pages enforce W^X per-thread.
pthread_jit_write_protect_np(false) enables write mode and
pthread_jit_write_protect_np(true) restores execute mode. When code
takes an early return or throws between these calls, the thread is
left in write mode, which can cause segfaults on subsequent code
fetches or inconsistent state at thread teardown.

Fixes applied (all gated on __APPLE__):

1. Emu/Cell/SPUCommonRecompiler.cpp - SPU cache worker thread
   Add RAII guard so execute mode is restored on worker exit.

2. Emu/System.cpp - SPRX Loader thread
   Enter write mode (was missing entirely) so ppu_initialize() and
   ppu_precompile() can write to MAP_JIT pages, and pair with an
   RAII guard. Reproducer: Red Dead Redemption (BLUS30418) crashes
   ~12s into boot at 0x300010000 without this fix.

3. Emu/Cell/SPULLVMRecompiler.cpp - SPU LLVM compile path
   The compile function enters write mode, then has an early
   "return nullptr" path on rebuild_ubertrampoline failure that
   skipped the explicit restore. Add RAII guard so execute mode
   is restored on every exit path. The existing explicit restore
   before the cache-flush asm directives is preserved.

4. Emu/Cell/PPUThread.cpp - PPU LLVM worker thread (operator())
   Worker entered write mode but never restored it on operator()
   return. Add RAII guard.

5. Emu/Cell/PPUThread.cpp - ppu_initialize() main path
   This scope alternates write/execute mode and contains an early
   "return compiled_new" at the empty-jits check plus a final
   return that both leak write mode. Add RAII guard so execute
   mode is always restored on exit. Intermediate explicit
   transitions for the symbol-resolver invocation are preserved.

No behavioral change on x86_64 or non-Apple ARM64 (all changes are
inside #ifdef __APPLE__ / #if defined(__APPLE__)).

Supersedes #18703.
2026-05-09 15:07:22 +03:00
RipleyTom 3c2815e89c Add option to derive MAC from PSID 2026-05-09 09:27:49 +03:00
Megamouse 4312221498 Add anaglyph settings 2026-05-08 21:42:29 +02:00
Gustavo Graziano c102d1ec0d Add missing hover effect in ‎GustavoGraziano's theme 2026-05-08 14:24:54 +00:00
Arsh Kumar Singh 98e9b3cf30 Qt: Disambiguate offset direction labels from DPad/Stick labels (#18695)
## Summary

The "Left" and "Right" strings in `pad_settings_dialog` were shared
between DPad/Stick direction labels (which have ample space) and offset
value labels — Squircle Values, Stick Multipliers, and Stick
Interpolation (where space is tight). Translators couldn't abbreviate
the offset version without also affecting the direction binding labels.

## Change

Added disambiguation via `comment="Offset direction"` in the `.ui`
file's `<string>` elements for the six offset labels:

- `label_squircle_left`
- `label_squircle_right`
- `label_stick_multi_left`
- `label_stick_multi_right`
- `left_stick_lerp_label`
- `right_stick_lerp_label`

Qt now generates separate translation entries, allowing translators to
use shorter abbreviations in the tight offset areas while keeping full
forms for direction bindings.

**English UI is unchanged** — no visual difference for English users.

Fixes #18691
2026-05-08 15:52:05 +02:00
Vishrut Sachan f9ffce76f2 game_list: Fix icon display for multi-game collection ISOs 2026-05-08 14:32:43 +02:00
Florin9doi e2e1cf02f4 USB: Stop sending USB replies after prx_unload 2026-05-08 13:05:08 +03:00
Antonino Di Guardo 026297334f Some fixes (#18686)
### FIXES + MINOR IMPROVEMENTS:
- Fixed issue18685: Not a real issue. PR18648 added some logging that made
evident a missing check on the validity of the paths in `games.yml`
before trying to manage the path as a possible ISO file. That missing
check was already present but simply invisible due to missing log
- Fixed `bytes_to_hex()` function used to store file hash hex string: In
some cases the integrity check wrongly reported the check as failed
- Optimized `fs::get_optical_raw_device()` function: Moved under
`_WIN32` block a check valid only on `Windows` and simplified the logic
to detect a CDROM / BD as raw device
- Used `iso_file` objects instead of `fs:file` in `ISO.cpp`: It allows
to use proper `bool()` operator on some checks
2026-05-07 06:38:57 +03:00
kd-11 4f47fee360 gl: Dirty tracking of interpreter sampler handles 2026-05-06 02:10:14 +03:00
kd-11 9c143d3d45 gl: Use bindless textures for the shader interpreter 2026-05-06 02:10:14 +03:00
kd-11 58eb7d2c04 gl: Implement bindless texture support 2026-05-06 02:10:14 +03:00
kd-11 2bb533274c gl: Wait for shader compilation to complete server-side before attaching to a program 2026-05-06 02:10:14 +03:00
kd-11 3fc41b6d66 gl: Fix context race condition when preparing optimized interpreter variants
- The main thread may bind the program before the compiler context has published the binding instructions
- Once bound, late bindings are not updated so the program remains with uninitialized bindings and rendering breaks
2026-05-06 02:10:14 +03:00
kd-11 c350c02592 rsx: Fix build and silence warnings 2026-05-06 02:10:14 +03:00
kd-11 9dde2bf04e vk: Skip shader cache load if we're running interpreter only 2026-05-06 02:10:14 +03:00
kd-11 4e160320ef vk/interpreter: Precompile more variants to avoid ingame stutters
- Also temporarily logs a message to make stutters more obvious
2026-05-06 02:10:14 +03:00
kd-11 ca762d5b84 vk: Add extra renderpass API entry to allow generating keys with no images 2026-05-06 02:10:14 +03:00
kd-11 d93f5f9f84 vk: Implement variant recompilation for performance 2026-05-06 02:10:14 +03:00
kd-11 ac28c391f6 vk/interpreter: Implement base pipeline propagation 2026-05-06 02:10:14 +03:00
kd-11 d519571e18 vk: Implement async interpreter builds 2026-05-06 02:10:14 +03:00
kd-11 99e6b19025 gl: C++ things 2026-05-06 02:10:14 +03:00
kd-11 3d6773dd25 vk/pipe-compiler: Allow external definition of graphics properties during async compilation 2026-05-06 02:10:14 +03:00
kd-11 d36a4bd858 vk/interpreter: Separable shader cache for the interpreter 2026-05-06 02:10:14 +03:00
kd-11 26db44b3b3 gl/interpreter: Make use of r-w locking mechanisms 2026-05-06 02:10:14 +03:00
kd-11 a6c3ef350a vk: Interpreter bringup to restore previous functionality
- Get basics working again along with some prep-work for enhancements
2026-05-06 02:10:14 +03:00
kd-11 f3d0c3ba28 gl: Implement async optimized interpreter build 2026-05-06 02:10:14 +03:00
kd-11 97c7d069ac gl: Disable hard requirement for bindless texture to use the interpreter
- I never got around to porting the implementation to use bindless correctly
2026-05-06 02:10:14 +03:00
kd-11 af7ae45888 rsx/gl: Upgrade interpreter model to use a minimal set of reusable pipelines as a base
- We generate optimized variants in the background if we have a partial miss
- A full miss is impossible
2026-05-06 02:10:14 +03:00
kd-11 5c4b0a165b gl/interpreter: Separable shader objects
- We use a real cache for separate VS and FS objects
2026-05-06 02:10:14 +03:00
kd-11 af2af23306 gl/interpreter: Implement async variant generation 2026-05-06 02:10:14 +03:00
kd-11 59f54caf08 gl: Strengthen RAII guarantees for some more objects 2026-05-06 02:10:14 +03:00
kd-11 b3ac8127ea vk: Prebuild base interpreter variants 2026-05-06 02:10:14 +03:00
kd-11 90ea92d93b gl: Fix crash when closing shader loading dialog 2026-05-06 02:10:14 +03:00
kd-11 f694000454 rsx: Fix shader interpreter variants generation 2026-05-06 02:10:14 +03:00
kd-11 b2daaff29f rsx/gl: Implement shader interpreter variant precompilation 2026-05-06 02:10:14 +03:00
Vishrut Sachan d93d9b2c5a game_list: Fix ISO cache bypass in is_from_yml branch for multi-game ISOs (#18683)
Fixes regression from #18546 and #18679.

## Problem
The is_from_yml ISO branch constructed iso_archive unconditionally,
bypassing the cache check inside add_game, making the cache write-only
for yml-sourced ISOs.

## Fix
Added a lightweight index cache entry (iso_path + "//index") storing the
subdir list + mtime. On hit, skips archive construction entirely. On
miss, walks as before and writes the index
2026-05-05 11:14:16 +02:00
MarkosTh09 4f23f5505a fix minor issues with rpath logic 2026-05-05 09:47:20 +09:00
MarkosTh09 69bc124930 add /opt/homebrew to prefix path instead
Append to `CMAKE_PREFIX_PATH` and `CMAKE_SYSTEM_PREFIX` instead of using `include_directories()` and `link_directories()`.

This avoids include/link path
pollution and reduces clashes with vendored dependencies. This means that conflicting homebrew packages no longer have to be unlinked to build rpcs3, as system paths are searched last.
2026-05-05 09:47:20 +09:00
MarkosTh09 056a8ba1b1 macos: hack to fix homebrew rpath issues 2026-05-05 09:47:20 +09:00
Megamouse 350e7b09f5 Update SDL to 3.4.8 2026-05-04 18:18:32 +02:00
Megamouse 1899b61fa5 Update FAudio to 26.05 2026-05-04 18:18:32 +02:00
xperia64 773808169e Move multi-game ISO parsing code path to proper location 2026-05-04 06:57:12 +02:00
Haxy a6fb0c8931 Restore 0.85 compatibility for PS3 Binary Decryption
0.85 elfs break here due to them not having a version header offset.

Very unlikely these elfs will ever load but its useful to be able to decrypt them at least.

Co-authored-by: Elad <18193363+elad335@users.noreply.github.com>
2026-05-03 14:27:10 +03:00
schm1dtmac 155883ea2a Update MoltenVK and restore Game Mode support (as the relevant MVK regression has been fixed) 2026-05-03 12:38:42 +02:00
Vishrut Sachan ca87d103fd game_list: Add multi-game collection support for ISO format discs 2026-05-03 10:14:44 +03:00
Elad 5dd7792c3d Remove vm_ref.h 2026-05-03 08:03:28 +03:00
Megamouse e8cd6f4ef6 Win: Update ffmpeg to 8.1 2026-05-02 08:24:33 +02:00
schm1dtmac b6ed4201df Correct the MVK build config 2026-05-01 05:38:31 +02:00
Megamouse c25e3e33ac Update curl to 8.20.0 2026-04-30 20:41:35 +02:00
Megamouse a8dd053593 Fix some warnings 2026-04-30 20:41:35 +02:00
Megamouse 66d2bc3dd5 Qt: Add timeouts and abort logic to downloader 2026-04-30 20:41:35 +02:00
kd-11 d773a3f94e ci: Bump docker version and use rpcs3 dropbox URL for vulkan SDK 2026-04-30 18:58:08 +03:00
kd-11 4e0995744a vk: Fix shader interpreter 2026-04-30 18:58:08 +03:00
kd-11 80c1c5dd6d vk: Use bulk allocator for FP and VP constant blocks to reduce wastage 2026-04-30 18:58:08 +03:00
kd-11 91a8c56c37 vk: Use UBO for basic transform constants
- Instancing still uses SSBOs, but that's ok. 95% of draw calls are uninstanced anyway.
2026-04-30 18:58:08 +03:00
kd-11 5144a999b3 vk: Use UBO for vertex environment block 2026-04-30 18:58:08 +03:00
kd-11 3b1abec405 rsx/vk: Implement bulk aligned allocator
- Avoids wasting space and allows use of natural arrays in shaders
2026-04-30 18:58:08 +03:00
kd-11 8b02f46e67 rsx: Handle edge case where window size falls outside memory range 2026-04-30 18:58:08 +03:00
kd-11 41e6cbbb5a vk: Fix build on linux CI using outdated SDK 2026-04-30 18:58:08 +03:00
kd-11 ed7f1aa17c vk: Fix UBO alignment mismatch on fragment constants binding
- Fragment constants are of dynamic size, so this isn't totally unexpected.
- NVIDIA GPUs have terrible UBO alignment requirements
2026-04-30 18:58:08 +03:00
kd-11 5839ad9c70 vk: Use UBOs for critical per-fragment data 2026-04-30 18:58:08 +03:00
kd-11 9c725935dc CI: use dropbox for vulkan SDK installer 2026-04-30 18:58:08 +03:00
kd-11 108276c076 vk/data-heap: Implement a caching sliding window buffer view system 2026-04-30 18:58:08 +03:00
kd-11 82a4ff051e vk: Upgrade Vulkan SDK to 1.4.341 2026-04-30 18:58:08 +03:00
kd-11 d1c8073106 rsx: Upgrade SPIRV generation to SPIRV 1.5 for vulkan. 2026-04-30 18:58:08 +03:00
kd-11 3829802699 3rdparty: Update glslang to release 16.2.0 2026-04-30 18:58:08 +03:00
kd-11 46bbbd2056 vk: Fix missing TRANSFER->FRAGMENT barrier for shadowed blocks 2026-04-30 18:58:08 +03:00
kd-11 cbbf52878a vk: Simplify manual heap flush for shadowed blocks 2026-04-30 18:58:08 +03:00
kd-11 278daddd2a rsx/util: Add a simple wrapper for simple_array<T>::for_each
- Just calls std::for_each behind the scenes but it's a lot more convenient
2026-04-30 18:58:08 +03:00
kd-11 48e2d808c9 rsx/util: Add simple_array<T>::filter 2026-04-30 18:58:08 +03:00
kd-11 28ab991302 vk: Support more heap types
- Support for GPU shadow heap (manual flush)
- Support for Fixed-Length data heaps
2026-04-30 18:58:08 +03:00
kd-11 d40a4ee04e vk: Add iGPU detection 2026-04-30 18:58:08 +03:00
Megamouse 7ea0a96d02 Only set db_config if we boot with a title_id 2026-04-30 14:15:29 +02:00
Megamouse 985703058b ISO: Improve path logging 2026-04-30 14:15:29 +02:00
Megamouse 14ca11fdf4 Fix uninizialized member warning 2026-04-30 14:15:29 +02:00
Megamouse 7bc08d05c6 Add some more logging for use of database config 2026-04-30 14:15:29 +02:00
digant73 79d0e0eb3c reduce check for raw device 2026-04-30 10:39:10 +03:00
digant73 570b2bddca Avoid to open bd drive if no content is present 2026-04-30 10:39:10 +03:00
schm1dtmac f3cf1da7b7 Revert "Fix race condition in memory_decommit/memory_reset on Apple ARM64"
This reverts commit 4cac76caad.
2026-04-29 20:26:49 +03:00
schm1dtmac 3c9a4417f2 Revert "Remove redundant Apple ARM64 ifdef blocks"
This reverts commit e1734b51c3.
2026-04-29 20:26:49 +03:00
Antonino Di Guardo b212935c70 Add support to play from a BD Drive (currently only on Windows) (#18648)
Follow up of #18345 to add support (currently only on `Windows`; see
notes below) for playing a PS3 disc game directly from a Blu-Ray Disc
Drive.

### HOW IT WORKS:
- The BD drive can be added as any other game so from `VFS games` or
from `Add Games` menu. In case it is selected from `VFS games`, any
attempt to write files is discarded, e.g. file `Disc Games Can Be Put
Here For Automatic Detection.txt`
- It scans the default redump keys folder `<rpcs3>/data/redump` (it
currently needs to be manually created due it is not yet provided by
rpcs3 installation) to find a matching decryption key

### NOTES:
- Support is currently provided on `Windows` where I can fully test it.
I cannot test under other OS. However, the additions needed for the
other OS are limited only on `fs::file.h/cpp`. In particular inside the
following new functions:
  - `bool is_optical_raw_device(const std::string& path);`
- `bool get_optical_raw_device(const std::string& path, std::string*
raw_device = nullptr);`
- Icons etc. are always refreshed (ISO cache cannot be used due `mtime`
on raw device is not available and any cache check would always fail)
- Code in `ISO.h/cpp` needed some rework to properly manage a read on a
raw device (alignment on offset, size and memory is mandatory). The BD
drive needs to be detected as a file, not as a folder

### MINOR FIXES:
- Fixed wrong specifier used in logging on `ISO.h/cpp`
2026-04-29 05:42:49 +03:00
shinra-electric e05d359721 Bump setup-nuget to v4 2026-04-28 19:34:31 +02:00
Megamouse 74bcbd9816 Update 7zip to 26.01 2026-04-28 12:33:45 +02:00
Megamouse b14c76c1c5 Qt: fix memory leak in confg_database 2026-04-28 10:00:00 +02:00
Luca Silva 6d058586c4 USB: remove zero-length IN URB fake-completion workaround
The passthrough path was fake-completing zero-length bulk/interrupt IN
URBs to mirror the emulated path, so games that drain-poll between
transfers wouldn't stall the libusb worker thread. This baked an
emulator-side assumption about device behaviour into the host stack.

Real PS3 USIO devices issue a ZLP on the read endpoint after any
transfer that would otherwise leave the host's drain URB outstanding
(notably after a CMD_WRITE). Devices that follow the same protocol
(e.g. ITAIKO firmware) are expected to do the same; faking it here
masks firmware bugs and diverges from real hardware behaviour.

Drop the workaround and let libusb submit the URB normally. The IN
URB now completes when the device sends its ZLP, matching real PS3.

Refs: https://github.com/RPCS3/rpcs3/pull/18636#discussion_r3143290987
2026-04-28 08:55:06 +02:00
Luca Silva 771837ee55 USB: use libusb enums for endpoint bitmask checks
Address review: replace raw 0x80 / 0x03 / 0x02 with LIBUSB_ENDPOINT_IN,
LIBUSB_TRANSFER_TYPE_MASK, and LIBUSB_TRANSFER_TYPE_BULK.
2026-04-28 08:55:06 +02:00
Luca Silva d2fc5a5b81 USB: fix passthrough of bulk endpoints on Linux
The PS3 USB stack routes both bulk and interrupt requests through
usb_device_passthrough::interrupt_transfer. The old code unconditionally
called libusb_fill_interrupt_transfer regardless of the endpoint type,
which on Linux's usbfs backend is rejected with EINVAL whenever the URB
type doesn't match the endpoint's bmAttributes. Reads against bulk IN
endpoints therefore never completed and the worker thread stalled.

Look up the endpoint descriptor and dispatch to libusb_fill_bulk_transfer
when bmAttributes indicates bulk. A new usb_device::find_endpoint helper
walks the descriptor tree once per submission.

Confirmed broken on Linux and working on Windows pre-fix; macOS
untested. WinUSB silently accepts the type mismatch, which is why this
went unnoticed. Reproduces with any passthrough device that has a bulk
IN endpoint, e.g. a Bandai Namco USIO (0b9a:0910) under Taiko no Tatsujin
S111 [SCEEXE000]: the game's boot-time the I/O board check runs and then hangs.

Two related defensive fixes uncovered while debugging the above:

- Zero-length bulk/interrupt IN URBs hang in libusb until the device
  sends a ZLP. The emulated path fake-completes them immediately; mirror
  that here so drain-polls between transfers don't stall the worker.

- An unexpected libusb_submit_transfer error used to leave
  UsbTransfer::busy = true forever. Mark it as a fake completion with
  EHCI_CC_HALTED so the USB manager processes the failure cleanly
  instead of deadlocking the request.
2026-04-28 08:55:06 +02:00
Megamouse 3b21833b8e Don't use Qt event loop in headless mode 2026-04-27 23:13:11 +02:00
Mack Core ed02f3a2ce RSX: workaround for color/depth aliasing heurestic edge case failures (#18644)
The color/depth alias collapse heuristic at get_framebuffer_layout()
picks depth whenever depth_test_enabled or stencil_test_enabled is set.
But test means read, not write - so deferred renderers that run a
Z-prepass and then a G-buffer pass with depth-test ON, depth-write OFF,
color-write ON get classified as a depth pass even though they're
writing color. The color writes get silently dropped.

In Starhawk this killed every lit surface - characters, skybox, anything
that goes through the deferred lighting path rendered black or
invisible. Terrain, particles, and emissive geometry kept working
because they don't go through that same pipeline.

Fix is to check writes instead of tests:

    if (zeta_write_enabled && !color_write_enabled)
        keep_as_depth();  // Z-prepass, shadow gen
    else
        keep_as_color();  // G-buffer / lit pass

For the both-writes case I went with color since losing color is much
more obvious visually than losing depth (the engine's Z-prepass usually
still has the depth around).

Tested with Starhawk [BCUS98181] in menu and gameplay - before: missing
characters and sky. After: matches PS3 reference. Logged every aliasing
event during a couple minutes of gameplay and they were all the G-buffer
pattern (depth-test ON, depth-write OFF, color-write ON), all handled
right. The depth-keep branch wasn't actually exercised in Starhawk, but
it's there for games that do use a Z-prepass to an aliased buffer.

Fixes #11877.
2026-04-27 21:59:45 +02:00
score3229 7028e85fac RSX Debugger: populate Captured Draw Calls list
The constructor inserted rows into m_list_captured_frame for the command queue but never did the same for m_list_captured_draw_calls. GetMemory()'s setItem() loop for draw calls then no-op'd on missing rows, so the Captured Draw Calls tab always appeared empty after a frame capture.
2026-04-27 07:16:29 +03:00
capriots 96f73f4497 cellVdec: fixup 2026-04-25 19:51:09 +03:00
capriots 3ff4f188f4 cellVdec: fixup 2026-04-25 18:52:40 +03:00
capriots 61e1c0f1fb cellVdec: reimplement cellVdecQueryAttr() 2026-04-25 15:48:50 +03:00
capriots 631e7ef979 Stub video decoder modules 2026-04-25 15:48:50 +03:00
Elad 7dce197ec4 sys_spu: Fix sys_isolated_spu_create 2026-04-25 08:16:32 +03:00
Haxy 9e0824112f Fix checks for flash device aliases 2026-04-25 07:43:17 +03:00
Daniel Risto e1734b51c3 Remove redundant Apple ARM64 ifdef blocks
The Apple ARM64 code paths are now identical to the generic case,
so the ifdef blocks are unnecessary.
2026-04-24 20:15:41 +03:00
Daniel Risto 4cac76caad Fix race condition in memory_decommit/memory_reset on Apple ARM64
The previous approach used munmap followed by mmap without MAP_FIXED
(since Apple rejects MAP_FIXED | MAP_JIT). Between the two calls,
another thread could claim the unmapped address range, causing mmap
to return a different address and triggering a fatal verification error.

Under concurrent load (e.g. PPU LLVM compilation with many worker threads),
this race manifests reliably as "Verification failed (object: 0x0)" crashes
across all PPUW threads in memory_decommit.

Fix: Use MAP_FIXED without MAP_JIT instead. This atomically replaces the
mapping without any window for other threads to interfere. The MAP_JIT
attribute is lost on the replaced pages, but the application's code signing
entitlements (allow-unsigned-executable-memory, disable-executable-page-protection)
permit executable mappings without it.

Applied the same fix to memory_reset which had the identical pattern.
2026-04-24 20:15:41 +03:00
Kravickas 077f2a73e1 Add clickable PR links in update changelog (#18465)
Replaces the plain text "Show Details" changelog in the update dialog
with a QTextBrowser that converts PR references like (#1234) into
clickable GitHub links.

**Why? :** Easy to check PRs you are interested in beyond the title.
2026-04-24 16:37:17 +00:00
kd-11 a60734e27b gl: Fix crash when renderdoc compatibility is enabled on some hardware 2026-04-24 15:00:27 +03:00
kd-11 3574677b66 rsx: Fix deswizzle of wide texel formats 2026-04-24 15:00:27 +03:00
zeph b3cc01387f Clans: PPU thread sleeping while making API calls
Signed-off-by: zeph <zephyrzefa15@gmail.com>
2026-04-23 13:31:01 +03:00
Antonino Di Guardo e26c80c129 Add ISO integrity check 2026-04-22 15:06:02 +02:00
Elad 80b6faef10 SPU Analyzer: Add some logging 2026-04-22 09:59:14 +03:00
Elad 7d0df300ea SPU LLVM: Fix RCHCNT write channel looping 2026-04-22 09:59:14 +03:00
Elad 1ca8ab393a sys_fs: Fix O_CREATE and O_TRUNC for BDVD 2026-04-21 15:43:41 +03:00
Caleb 3cca094d2d Enhance FAudio backend error handling and initialization processes (#18614) 2026-04-21 08:32:58 +00:00
digant73 a088b18e95 Add missing default setting after settings rework 2026-04-21 00:50:05 +02:00
digant73 e5af69d7b2 Add recursive scan support 2026-04-20 22:04:54 +03:00
Megamouse 814821d760 SPU LLVM: Fix unused variable warnings
- Remove unused block_optimization_exit_early
- Pass mod_val instead of value
2026-04-20 14:12:18 +00:00
Megamouse 7a8c88056a Qt: make emu_settings_type cfg_location dynamic 2026-04-19 22:51:13 +02:00
Megamouse b6b043b23d qt: remove unused emu_settings_type 2026-04-19 22:51:13 +02:00
Megamouse c5db9899e4 cfg: remove redundant prefix from variable names 2026-04-19 22:51:13 +02:00
qurious-pixel 081c094c5a Improve Mac Translation download (#18598)
Switch from API to direct download.
Fixes 403 error code.

jammy-aarch64 needs `unzip` from universe in the Dockerfile.

eg:
```
add-apt-repository universe
apt update -qq
apt-get install -y unzip
```

Fixes https://github.com/RPCS3/rpcs3/issues/18560
2026-04-19 20:42:31 +02:00
digant73 b6c8374aa5 Fix region range check on ISO file 2026-04-19 19:23:37 +03:00
Megamouse 06a6880c6c Qt: Allow to compare configurations in gamelist context menu 2026-04-19 16:21:41 +02:00
Megamouse bd5c10fd48 Fix database config application in continuous mode 2026-04-19 15:25:57 +02:00
Megamouse d3804de243 Loader: try to retrieve database config if not booted through the UI 2026-04-19 15:25:57 +02:00
Megamouse 36cd81fb5f Log url of downloader 2026-04-19 15:25:57 +02:00
Megamouse 7a4d7aa936 Improve quit logging 2026-04-19 15:25:57 +02:00
Megamouse aff082e0c1 version_check: fix formating of result output 2026-04-19 15:25:57 +02:00
Megamouse 2b144101ab Update libpng to 1.6.58 2026-04-19 15:25:57 +02:00
digant73 d4b7c31ec8 Allow to skip optional packages installation
minor cleanup

minor cleanup
2026-04-19 14:38:48 +02:00
oltolm 6c9445ff28 cmake: do not disable "WOLFSSL_HARDEN" and fix build with latest WolfSSL 2026-04-19 13:10:25 +02:00
Megamouse 2d6ca912fe Qt: fix regular boot without database config 2026-04-18 17:57:11 +02:00
digant73 3b9cc0bc3a fix wrong folder creation 2026-04-17 00:48:27 +02:00
Megamouse 88175aa84f Check for unknown keys during config validation 2026-04-16 21:28:34 +02:00
Elad a7c606c8ac sys_fs: Add unit tests 2026-04-16 11:04:37 +03:00
Elad 48acbbe4f5 sys_fs: Reimplement path analysis 2026-04-16 11:04:37 +03:00
schm1dtmac b729772041 Try building MVK 1.4.2 privapi instead of DLing 1.4.1 privapi prebuilt 2026-04-16 03:08:31 +02:00
Megamouse ea0d8a0d78 Qt/input: fix mouse button names
I tested the last PR with an older commit and thought it worked.
2026-04-16 02:10:41 +02:00
Megamouse e79f56bfdc Qt: put Custom Config with Database Settings first 2026-04-16 01:18:05 +02:00
Megamouse a543f38704 linux/macOs: update compat_db and config_db on update 2026-04-16 01:18:05 +02:00
Megamouse 1cdc401cc5 Use database per default, remove global 2026-04-16 01:18:05 +02:00
Megamouse 50d6396f99 implement config db 2026-04-16 01:18:05 +02:00
Megamouse 7d41bbdd2b Fix Disk Usage thread 2026-04-15 13:05:54 +02:00
Megamouse d53a6a87f6 Update wolfssl to 5.9.1 2026-04-15 13:05:54 +02:00
Megamouse 1e63385dfc Update libpng to 1.6.57 2026-04-15 13:05:54 +02:00
schm1dtmac 4ffeee0344 Opt out of Game Mode on macOS due to throttling 2026-04-15 03:02:23 +03:00
Megamouse 0b9c53e254 Qt: Add missing thread name 2026-04-14 11:53:41 +02:00
Megamouse 27f857a8fe Remove unused variable in find_dialog 2026-04-14 11:53:41 +02:00
Megamouse c340eb2f17 Remove nop loop 2026-04-14 11:53:41 +02:00
Megamouse e43435e152 Remove unused should_have_argument_increment 2026-04-14 11:53:41 +02:00
Megamouse ac3d14cf5c Add missing fmt case for cpu_flag::req_exit 2026-04-14 11:53:41 +02:00
Megamouse 426f3c445b Remove some unused variables 2026-04-14 11:53:41 +02:00
Megamouse bbeb7c4cd7 Remove sneaky pragma optimize 2026-04-14 11:53:41 +02:00
Megamouse 6c87413f48 SPURecompiler: add missing default 2026-04-14 11:53:41 +02:00
Megamouse b10c742f10 iso stuff 2026-04-14 09:37:18 +02:00
Megamouse 9e3e01d8f6 input: fix mouse+kb combos 2026-04-14 08:44:20 +02:00
luci4 bcd9663349 Thread.cpp: Added stack trace and register logging to exception filter (#18564) 2026-04-13 15:47:44 +03:00
Megamouse 72fa4098dc Add 3D screen size setting 2026-04-12 17:59:01 +02:00
luci4 6dc95dd078 sysinfo.cpp: Remove registry helpers (#18557)
The "caveat" is that said API bypasses compatibility shims so it will
always show the true Windows version.
2026-04-12 13:53:00 +03:00
Vishrut Sachan 11050a7032 ISO: Add metadata cache to speed up game list scanning (#18546)
Every launch constructs a fresh iso_archive for each ISO game, which
calls iso_form_hierarchy() and walks the full directory tree. On top of
that, qt_utils opens a second iso_archive just for icon loading, so
every ISO game ends up doing two full directory tree walks on every
launch.
This adds a metadata cache keyed by ISO path + mtime stored under
fs::get_config_dir()/iso_cache/. Each entry stores the raw SFO binary,
resolved icon/movie/audio paths and raw icon bytes.

- On cache hit, iso_archive construction is skipped entirely for both
game list scanning and icon loading
- On cache miss archive is scanned as before and the result is persisted
to disk
- Cache is automatically invalidated when the ISO file's mtime changes

Tested with a decrypted PS3 disc ISO (God of War III):

- First launch writes cache files correctly to iso_cache/
- Second launch reads from cache with correct title and icon
- touch game.iso correctly invalidates the cache and triggers a rescan
2026-04-12 09:07:25 +00:00
Ani f826f95c70 gui: Group CPU accuracy settings together 2026-04-11 22:08:19 +02:00
luci4 934bc34685 sysinfo.cpp: Replaced PEB read with ntdll function (OS version read) 2026-04-11 22:28:11 +03:00
oltolm f463c128e3 Fix ASan fatal-report access during emulator teardown 2026-04-11 14:01:38 +03:00
oltolm 7168cd566a Fix ASan logger shutdown use-after-free 2026-04-11 14:01:38 +03:00
digant73 110c786d80 Add support to encrypted ISO
fix compile errors and suppress minor warnings

strip minor bug fixes and cleanup

minor cleanup

minor cleanup

Fixed crash at boot parsing an ISO with a empty directory entry at file head

applied suggested changes

added missing break in switch

Update rpcs3/Loader/ISO.cpp

Co-authored-by: Megamouse <studienricky89@googlemail.com>

use hex_to_bytes() instead of self made functions

minor cleanup

rewrite nested if()

add explicit support to .key

minor cleanup

optimize partial sector read

minor optimization

fix conflict
2026-04-10 22:41:05 +02:00
oltolm fb194241d5 fix LLVM assert in use_begin 2026-04-10 19:29:23 +03:00
kd-11 09554c43ba rsx: Allow DXT texture decoding to gracefully fall back to unaligned memory addresses 2026-04-10 13:06:52 +02:00
kd-11 1b1143094e rsx: Improve handling of aligned memory 2026-04-10 13:06:52 +02:00
Ani 8121bd443c ppu: Enable vector NaN fixup by default 2026-04-10 02:26:42 +02:00
oltolm a1a140db91 CPUThread: fix ASAN use-after-free 2026-04-09 23:20:56 +03:00
Megamouse e9fb3572f9 Qt: Show error if any package is corrupt before installation 2026-04-09 12:09:06 +02:00
Katalin Rebhan 1d85de6236 Include <pthread.h> for pthread_self
Fixes compilation on Gentoo Linux with clang/libc++ 21.
2026-04-09 03:27:19 +03:00
Megamouse 6981e308a0 Update docker to 1.11
Update SDL to 3.4.4
Update ffmpeg to 8.1
Update opencv to 4.13
2026-04-08 12:19:58 +02:00
Megamouse 8e80ddd99f ISO: optimize some file reads (#18511)
- Batch some file reads in iso_read_directory_entry (speeds up indexing
by ~41% on my test iso)
- Fix some warnings
2026-04-08 10:52:03 +02:00
Ani beac01d5d1 SPU: Remove RCHCNT loop handling of SPU_WrOutIntrMbox 2026-04-07 15:19:48 +03:00
Ani d7f8e25cca SPU: Remove RCHCNT loop handling of SPU_WrOutMbox
Fixes freezing in Half-Life 2

Fixes #17958
2026-04-07 15:19:48 +03:00
kd-11 e0c3df5328 vk: Fix crash when running CPU detiler path 2026-04-07 04:11:25 +02:00
kd-11 59468f1e1e vk: Handle WAW and RAW hazards when performing "flush" operations 2026-04-07 04:11:25 +02:00
kd-11 8ab0ceaa67 vk: Wrap scratch buffer access with proper memory barriers 2026-04-07 04:11:25 +02:00
kd-11 b9f05ba71b vk: Insert a all_commands->transfer barrier before copying query results to scratch 2026-04-07 04:11:25 +02:00
kd-11 5311f004d0 vk: Insert barriers on the scratch buffer when detiling memory 2026-04-07 04:11:25 +02:00
kd-11 cb276f0da7 vk: Insert transfer->transfer barriers before creating aggregates 2026-04-07 04:11:25 +02:00
kd-11 34c26eff68 rsx: Extend cubemap_unwrap decode to handle cubemaps with mipmaps 2026-04-06 14:21:40 +02:00
kd-11 b700a7abd9 gl: Extend mipcount support for reconstructed images 2026-04-06 14:21:40 +02:00
kd-11 c279583f1f vk: Allow cubemap unwrap to generate more than 1 mipmap level 2026-04-06 14:21:40 +02:00
kd-11 ce12c29441 rsx: Allow negative src and dst pitch in nv0039
- Confirmed with hardware tests
2026-04-05 18:18:44 +02:00
capriots e95a980651 cellDmux: process PPU state after lv2 syscalls 2026-04-05 17:42:45 +03:00
capriots 87fc45d661 cellDmuxPamf: logging fix 2026-04-05 17:42:45 +03:00
capriots 93a2f1edc8 cellPamf: remove unused code 2026-04-05 17:42:45 +03:00
capriots 22fe8648ef cellDmux implementation 2026-04-05 17:42:45 +03:00
Daniel Risto f42b09d1fc Fix SPRX Loader segfault on Apple ARM64 by excluding MAP_JIT from memory mapping regions
On Apple ARM64, memory_reserve unconditionally applies MAP_JIT to all
reservations. However, regions marked as is_memory_mapping are later
replaced by file-backed MAP_FIXED mappings via shm::map/map_critical.
Overlaying a file-backed MAP_FIXED mapping onto a MAP_JIT region causes
the resulting pages to be inaccessible, leading to a segfault when the
SPRX Loader attempts to write module data into PS3 memory (g_sudo_addr).

Fix: Only apply MAP_JIT for non-mapping regions. Memory mapping regions
don't need JIT capability since they use shared memory for the PS3
address space, not executable JIT code.

Tested on Apple M3 Max, macOS 26.3.1. The SPRX Loader now successfully
loads all modules and emulation proceeds past the loading stage.
2026-04-05 14:47:24 +03:00
Megamouse b8e6785789 Update soundtouch to 2.4.1 2026-04-05 11:14:11 +02:00
Megamouse afdb57bee9 Update FAudio to 26.04 2026-04-05 11:14:11 +02:00
Sanjay Govind b22d0a0b4a Bump SDL to 3.4.4 2026-04-05 10:07:49 +02:00
Vishrut Sachan ec989781a3 game_list_table: Allow reordering game list columns 2026-04-04 18:47:12 +02:00
oltolm 110ef818b3 PPU LLVM: fix compilation for PPU Debug option 2026-04-04 11:57:50 +00:00
Elad aa841ac332 LLVM: Add source location for bitcast error 2026-04-04 01:08:05 +03:00
Elad ceb2168375 SPU LLVM: Remove debug code 2026-04-04 01:08:05 +03:00
Elad 02eb549208 SPU LLVM: Fix register updates in second block of Reduced Loop 2026-04-03 18:33:07 +03:00
Elad 13de8233b0 SPU Analyzer: Fix register origin for Reduced Loop 2026-04-03 18:33:07 +03:00
Elad ff4444b18e Silence cellNetCtlGetInfo 2026-04-03 18:33:07 +03:00
Elad 555ace0955 rsx: Silence Unknown render mode error 2026-04-03 18:33:07 +03:00
Elad a03a78dbd2 SPU: Verify SPU Reduced loop completability 2026-04-03 18:33:07 +03:00
BehroozRezvani f63b1b5dc1 Fixes PS button wrong input path check 2026-04-02 19:42:15 +03:00
Elad ac104a519e SPU Analyzer: More fix 2026-03-31 21:56:30 +02:00
Elad bd95c728f0 sys_fs: Implement ENOTDIR 2026-03-31 21:56:30 +02:00
kd-11 122ccca50e rsx: Propagate texture flags when MSAA sampling is required 2026-03-31 02:51:03 +02:00
kd-11 83bfbc1399 rsx/fp: Fix lane mask computation for varying registers 2026-03-31 02:51:03 +02:00
Elad 80f972cd38 SPU Analyzer: Acknowledge unknown targets 2026-03-31 02:12:40 +02:00
Elad 615f416af3 SPU Anlyzer: Verify bitset index 2026-03-31 02:12:40 +02:00
kayforbe 1c37f64a58 Add missing <set> include for MSVC compatibility (#18486)
Added missing #include <set> in shortcut_utils.h to fix MSVC build
errors (C2059)
2026-03-30 17:47:52 +00:00
Megamouse 7c9261a461 overlays: add toggle for boot sequence music 2026-03-30 18:40:34 +02:00
Megamouse cb3a83cba7 overlays: add setting for fatal error hint (disabled by default) 2026-03-30 18:40:34 +02:00
Megamouse b0dbac9a07 Qt: hide log frame by default 2026-03-30 18:40:34 +02:00
Megamouse f92677fa7e rsx: Add missing break 2026-03-30 14:26:50 +02:00
Megamouse 789bab97be Qt: add some sorting options to the screenshot manager 2026-03-30 14:26:50 +02:00
Megamouse 3e60bd2aa6 steam: disable steam input for shortcuts 2026-03-30 12:41:19 +02:00
Megamouse 6dc06b3ff5 Update Qt to 6.11.0 2026-03-30 10:58:19 +02:00
Megamouse a10390e52a Update libpng to 1.6.56 2026-03-30 10:58:19 +02:00
Megamouse 433110b4d8 Update wolfssl to 5.9.0 2026-03-30 10:58:19 +02:00
Megamouse b94e6d4864 Fix some warnings 2026-03-30 10:58:19 +02:00
Megamouse 44dc29e52b Qt: Add some some more thread names 2026-03-30 10:58:19 +02:00
Megamouse ab03d76ed6 overlays: show latching message for fatal errors 2026-03-30 10:13:05 +02:00
Megamouse bd2b2c2747 Qt: add recording settings dialog 2026-03-30 09:17:20 +02:00
Ani aa7cf5ea15 sysinfo: Implement RAM Usage stats for Linux (#18473)
Reads memory statistics from "/proc/meminfo"
2026-03-29 19:48:59 +03:00
oltolm f8fe64ff77 find_dialog: fix compiler warning 2026-03-29 14:45:53 +02:00
oltolm 1791876eda remove unused lambda captures 2026-03-29 14:45:53 +02:00
oltolm e6204d3c1d CMake: fix the case USE_SYSTEM_ZLIB=OFF and USE_SYSTEM_CURL=OFF 2026-03-29 14:45:53 +02:00
oltolm f0f9ef6f30 cmake: fix build with latest Curl 2026-03-29 14:45:53 +02:00
kd-11 51ea735cb5 rsx/vk: Try to reclaim memory aggressively when changing resolution scale 2026-03-28 20:20:12 +03:00
kd-11 069821a2e7 rsx/rtts: Fix broken optimization check
- Typo. Applying inverse res scale is really not what we want
2026-03-28 20:20:12 +03:00
kd-11 0052108e87 rsx/rtt: Fix transfer region calculation when source and destination scaling does not match 2026-03-28 20:20:12 +03:00
kd-11 64c24959cb rsx: Fix clang build 2026-03-28 20:20:12 +03:00
kd-11 b57390d3cd rsx/overlays: Add resolution scale threshold to home menu 2026-03-28 20:20:12 +03:00
kd-11 91c136b6d0 rsx/overlay: Add resolution scale slider to home menu 2026-03-28 20:20:12 +03:00
kd-11 c00fa2cc8c config: Make resolution scaling a dynamic option 2026-03-28 20:20:12 +03:00
kd-11 fe3cbde1d3 rsx: Add optimization to skip cloning surfaces whose dimensions did not change
- If only the threshold changed or the surface is below threshold anyway, nothing will change
- In those cases, just update the internal data and continue
2026-03-28 20:20:12 +03:00
kd-11 e2dff6bbf8 rsx: Implement resolution scale change handling in surface cache 2026-03-28 20:20:12 +03:00
Elad 976cd1ce66 SaveStates: Fix restart after saving 2026-03-27 22:22:40 +03:00
Elad a4523651c7 RPCS3: Notify RAM shortage, Log current and peak RAM usage 2026-03-27 20:20:29 +03:00
BehroozRezvani 2702417192 Make performance overlays use window space (#18419)
Adds a new performance overlay option to use the whole window as rather
than just framebuffer space.
2026-03-27 16:08:46 +01:00
capriots 72b872df66 cellDmuxPamf: fix freezing FMVs in some games
- Delays demuxing a bit to let the game finish initializing FMV
playback.
- Also includes the missing half of #18450 which I forgot to Commit ^^"
- Sets cellDmuxPamf to HLE by default again
2026-03-27 13:47:26 +00:00
Elad bb3e2689d4 Thread.cpp: Fix game exit on access violation
Fixes game closing in Twisted Metal.
This commit also aloows to debug such states by using cpu_flag::req_exit as a broker
2026-03-26 13:55:00 +02:00
Elad 4ced11e533 SPU Analyzer: Add pure opcode tag 2026-03-26 13:55:00 +02:00
Elad 9a0a5a1735 LLVM: Try to reuse BitCasts 2026-03-26 13:55:00 +02:00
Elad e83034624b SPU Debugger: Measure rate of block ran 2026-03-26 13:55:00 +02:00
Elad 619fe7b14e SPU LLVM: Classify SPU memory and context memory instructions 2026-03-26 13:55:00 +02:00
Elad 37a07ae545 SPU LLVM: Optimize FM, FMA and FCGT in Reduced Loop 2026-03-26 13:55:00 +02:00
Elad e1eae3ee49 Add floating ppoint hint 2026-03-26 13:55:00 +02:00
Elad 49abd6d8e5 SPU LLVM: Allow the reuse of address from LQX/STQX 2026-03-26 13:55:00 +02:00
Elad fbdbf8addf SPU LLVM: CEQHI pattern 2026-03-26 13:55:00 +02:00
Elad 2e4ee9c9b6 SPU LLVM: Implement reduced loop 2026-03-26 13:55:00 +02:00
Elad a863e94c25 SPU: Detect reduced loop 2026-03-26 13:55:00 +02:00
kd-11 9b6bc7c1b4 rsx: Make resolution scaling configuration non-global
- Paves the way for other changes.
- The main goal is to be able to switch the resolution scale and MSAA level at runtime.
2026-03-25 21:19:46 +03:00
kd-11 86b7ea6bf3 overlays/sdf: Avoid 0-height inner boxes for switch capsule
- Can introduce dfdx/dfdy discontinuities on the midline as the distance changes direction
- The seams can sometimes become visible if a border is applied on some GPUs
2026-03-25 21:19:46 +03:00
oltolm 18bd6d681e cmake: fix build with bundled zlib 2026-03-25 08:30:41 +01:00
oltolm 2dd194d381 make the code build with Clang 22 2026-03-25 08:30:41 +01:00
oltolm a8b603dd92 CMake: remove option USE_MSVC_STATIC_CRT and clean up 2026-03-25 08:30:41 +01:00
Megamouse a03d4f69f8 logs: Fix global log levels during boot and after changing log level settings 2026-03-24 19:34:06 +01:00
capriots 99bb042bea HLE modules: process PPU state after lv2 syscalls 2026-03-24 07:55:05 +02:00
Megamouse 2bcc27d581 Qt/input: Do not send gui input release events until there was at least one button press 2026-03-23 20:32:46 +01:00
Megamouse 53c33cd812 gui/input: disable stick anti deadzone in pad navigation
This is only meant to be used during emulation.
2026-03-23 19:35:01 +01:00
Megamouse 1d05cf9ce5 Qt/Input: trace gui pad navigation button presses 2026-03-23 19:35:01 +01:00
Megamouse 07f5b0aa5b Qt: Improve find dialog
Add index of current line and word.
Add case sensitivity checkbox.
2026-03-23 17:52:30 +01:00
Megamouse 36e1d664ea Qt: Smoothly start/stop audio with fade in and fade out 2026-03-23 14:47:15 +01:00
Megamouse 90e2c39015 Qt: loop SND0.AT3 audio 2026-03-23 14:47:15 +01:00
kd-11 5a90dc0059 overlays: Bump the slider label font size 2026-03-23 02:38:34 +03:00
kd-11 c19d22ce88 overlays/sdf: Clamp rounded-rect border radius to never exceed the box sides
- If the radius exceeds any half-dimension then the box-shrink subtraction yields a negative.
  That negative introduces a second transition boundary when the classification happens as it transitions back to positive.
  Normally not a big deal but when rendering borders at the transition points it can introduce artifacts.
2026-03-23 02:38:34 +03:00
kd-11 5acc263b73 gl: Properly initialize memory layout definition structs
- Also refactors the upload_texture function to be a bit more readable
2026-03-23 01:36:50 +03:00
schm1dtmac bc6e01c422 Fix GH & brew breaking macOS builds again 2026-03-22 20:36:51 +01:00
kd-11 a2eb4fec53 overlays: Restore slider handles to previous size
- Added padding to smooth out the outer edge transition made the circle too small
2026-03-22 20:11:43 +03:00
kd-11 32c9c6f515 overlays: Fixups for switch rendering
- Disallow odd numbers for the primary dimension
- Increase the size slightly in home menus
- Disable vertex snapping when rendering SDFs
2026-03-22 20:11:43 +03:00
kd-11 04f7dd02fd overlays: Fix SDF rendering when scrolling is involved 2026-03-22 20:11:43 +03:00
kd-11 35907bcfc8 overlays: Redesign switches 2026-03-22 20:11:43 +03:00
kd-11 61b1bd7ead overlays/sdf: Take element padding into account
- Helps to smooth out the outer edges of ellipses and circles
2026-03-22 20:11:43 +03:00
kd-11 2bad4f47f1 gl: Integrate SDF rendering functionality 2026-03-22 20:11:43 +03:00
kd-11 5a94adcf26 overlays: Implement SDF config transforms 2026-03-22 20:11:43 +03:00
kd-11 57e37862f4 overlays: Use ellipse SDF for circles 2026-03-22 20:11:43 +03:00
kd-11 45bae0046a vk: Add support for basic SDF rendering
- Does not support scaled coordinates yet
2026-03-22 20:11:43 +03:00
kd-11 a0c91bf96a overlays: Use SDF equations to represent curved shapes 2026-03-22 20:11:43 +03:00
Ani b607993b7b overlay: Remove redundant redeclaration
Fixes one gcc compilation warning
2026-03-22 16:40:20 +01:00
Ani 1eb72e4b71 rpcs3: Add missing #include <climits>, fix gcc-16 compilation 2026-03-22 16:40:20 +01:00
Megamouse e5840ab868 Qt: fix audio timer loop 2026-03-22 15:46:44 +01:00
BehroozRezvani 54999d1507 Add Zed config files to gitignore 2026-03-22 13:16:58 +01:00
Megamouse 51514f9dc8 Qt: start hover audio/video after a timeout 2026-03-22 06:49:43 +01:00
Megamouse 40229adb14 Qt: add gui audio volume setting 2026-03-22 06:49:43 +01:00
Megamouse 33f8deffbe Qt: add setting for disabling hover music 2026-03-22 06:49:43 +01:00
Megamouse c80e08a642 Qt: Don't check for movies if play_hover_movies is disabled
Apparently this was forgotten. The variable was already captured
2026-03-22 06:49:43 +01:00
Megamouse 62b2ffd7ca Qt/overlays: Add secondary audio output for emulation 2026-03-22 06:49:43 +01:00
Megamouse cd1d6282b4 Qt: Remove some unused code 2026-03-21 16:10:26 +01:00
kd-11 67f69bb4b3 rsx/cfg: Fix handling of instructions with literal input
- The hardware is pretty dumb about it, it just unconditionally skips the next instruction
2026-03-21 14:44:45 +01:00
RipleyTom 2ba7756c0e Add overlay notification for received messages 2026-03-20 19:51:16 +01:00
Megamouse c6407b37a5 Batch create/remove steam shortcuts 2026-03-20 17:48:11 +01:00
kd-11 410660627d overlays: Add a special message id for spinners with empty text 2026-03-20 15:33:28 +03:00
kd-11 852317a071 overlays: Shrink the shader notification popup 2026-03-20 15:33:28 +03:00
kd-11 6590f1b55d overlays: Add RSX memory tiling to settings page 2026-03-20 15:33:28 +03:00
schm1dtmac 84277f41a1 Fix mac builds (& add some failsafes) 2026-03-19 21:51:36 +01:00
Ani b73c45f1fb overlay: Add 8px left margin on the sidebar 2026-03-19 19:44:55 +01:00
kd-11 ddd226f0ea rsx/fp/cfg: Add unit test for special cond inversion 2026-03-19 19:38:17 +03:00
kd-11 3c68c36fa0 rsx/cfg: Log a warning when encountering empty IF blocks with ELSE aliasing
- Hardware tests confirm this is correct behavior, the condition just inverts
2026-03-19 19:38:17 +03:00
kd-11 d54e54b66d rsx/cfg: Handle IF-ELSE aliasing statement as inverted condition
- If there is no IF block but ELSE block exists, treat the branch as being inverted and the ELSE block as the main IF body
- Rare but seen in some games
2026-03-19 19:38:17 +03:00
RipleyTom 2f3b66985e Clean up code using mutable + const when possible 2026-03-19 14:56:48 +02:00
kd-11 43799762c7 qt: Update tooltips with new vsync behavior 2026-03-19 03:10:07 +03:00
kd-11 cb501e32ca gl: Make vsync setting dynamic 2026-03-19 03:10:07 +03:00
kd-11 7a7e25f901 overlays: Add Vsync configuration to overlays 2026-03-19 03:10:07 +03:00
kd-11 e690e7e458 gl/vk: Implement tri-state Vsync setting 2026-03-19 03:10:07 +03:00
Ani 253d4565f1 config: Enable start in fullscreen mode by default 2026-03-18 22:34:37 +01:00
Megamouse 1f2a935458 Qt: Do not close pad settings dialog if user said no in duplicate button dialog 2026-03-18 18:47:34 +01:00
Megamouse 0c27b63ab4 Qt: fix duplicate button or combo warning 2026-03-18 18:47:34 +01:00
FlexBy420 4c106960c5 Update current firmware to 4.93 2026-03-18 16:00:35 +02:00
Megamouse f076d1e1e6 Input: Fix keyboard stick handling 2026-03-18 12:10:29 +01:00
Megamouse 7b58340a60 Input: optimize keyboard button handling on release 2026-03-18 12:10:29 +01:00
Megamouse 5578edf9e4 Input: Map PS button to start+select by default 2026-03-18 12:10:29 +01:00
Megamouse 704d8764af input: refactor combos into a struct for future use
Also update some terminology in the code
2026-03-18 12:10:29 +01:00
Darkhost1999 6523afa69a overlays/home: Fix restarting games from home menu 2026-03-17 21:39:18 +01:00
Megamouse 5416f432b5 input: Fix SDL buttons 2026-03-17 20:53:46 +01:00
Megamouse 43f3a4816d Qt: Fix game list selection after Refresh(true) 2026-03-17 20:15:40 +01:00
Megamouse bc0c42b025 Automatic combo button input 2026-03-17 15:30:21 +01:00
Megamouse 9f3adb3fc7 Fix steam banners for iso files 2026-03-17 14:47:17 +01:00
Megamouse df6cba6582 Use ICON0.PNG for steam cover 2026-03-17 14:47:17 +01:00
Megamouse 8cdad0af98 Add more fallbacks to the steam banner 2026-03-17 14:47:17 +01:00
Megamouse 801a1e6c38 Qt: Move game shortcut creation logic to shortcut_utils 2026-03-17 14:47:17 +01:00
kd-11 9da088fe29 overlays: Relax vblank range to default 2026-03-17 15:42:12 +03:00
kd-11 d96f31eda4 overlays: Limit vblank setting in the UI
- Use Qt GUI or config modification if you need crazy figures
2026-03-17 15:42:12 +03:00
kd-11 a5cce58225 overlays/home: Auto-resize the sidebar in case of long translated text 2026-03-17 15:42:12 +03:00
kd-11 39e6fc5918 overlays: Left align the savestates menu
- Temporary measure, a proper dialog will be added later
2026-03-17 15:42:12 +03:00
kd-11 2ea344ce3e overlays: Allow home menu 'entries' to support different alignment options 2026-03-17 15:42:12 +03:00
kd-11 358fbb3ce3 overlays: Backing out of settings menu returns to home menu 2026-03-17 15:42:12 +03:00
kd-11 aaf441005a overlays: Fix UX issues with dropdowns
- Select button resets the value to default
- Audio cues play correctly
2026-03-17 15:42:12 +03:00
Megamouse 6e6dd603cb mmjoy: deduplicate some code 2026-03-17 13:36:25 +01:00
Megamouse 22fe14d31d input: implement button combos 2026-03-17 13:36:25 +01:00
Megamouse 2eba7da8e6 Qt: Create Steam banners as well during shortcut creation 2026-03-16 23:20:24 +01:00
kd-11 ca2b7f9b9f rsx/overlays: Fix linux build 2026-03-16 19:08:07 +03:00
kd-11 4780e7c8da rsx/overlays: Fix clang build 2026-03-16 19:08:07 +03:00
kd-11 a318384142 rsx/overlays: Fix weird spacing with reset prompt
- Just post-rebase issues
2026-03-16 19:08:07 +03:00
kd-11 53d3f49f45 overlays/gl: Fix misbehaving clip regions 2026-03-16 19:08:07 +03:00
kd-11 25581ce52f overlays/tabs: Fix crash when scrolling through tabs quickly 2026-03-16 19:08:07 +03:00
kd-11 6c0c80b7bb overlays/list-view: Use track to indicate scrolling instead of ugly highlight 2026-03-16 19:08:07 +03:00
kd-11 f9af53f215 overlays: Fix bug with list view element count calculation and selection wrap-around 2026-03-16 19:08:07 +03:00
kd-11 2fd5b1b4be overlays/home: Add icons to settings page 2026-03-16 19:08:07 +03:00
kd-11 3acf1f6470 overlays: Add some more icons 2026-03-16 19:08:07 +03:00
kd-11 37f1533dad overlays/home: Integrate the new dropdown widget 2026-03-16 19:08:07 +03:00
kd-11 bb652ed840 rsx/overlays: Implement dropdown control
- The base widget and the popup are rendered separately
- The owner is responsible for placing the widget at the desired position for rendering
2026-03-16 19:08:07 +03:00
kd-11 281706fdae overlays/utils: Add simple utility to center align a child component 2026-03-16 19:08:07 +03:00
kd-11 198fe71cc4 overlays/checkbox: Make sure backgrounds are opaque for clarity 2026-03-16 19:08:07 +03:00
kd-11 b8e2c7060b overlays: Improve slider label spacing 2026-03-16 19:08:07 +03:00
kd-11 dbb6c87a10 utils: Implement enum size computation 2026-03-16 19:08:07 +03:00
kd-11 7240cbfdab rsx/overlays: Implement arrow rendering 2026-03-16 19:08:07 +03:00
kd-11 7866c7195c rsx/overlays: Tabs - Do not touch renderer resources on the input thread! 2026-03-16 19:08:07 +03:00
kd-11 e26978e664 overlays/home: Use the new slider component 2026-03-16 19:08:07 +03:00
kd-11 63ed8881a4 rsx/overlays: Implement slider control 2026-03-16 19:08:07 +03:00
kd-11 1be7b9f983 overlays: Align switches to container end 2026-03-16 19:08:07 +03:00
kd-11 471ed347f4 overlay/settings: Use switch element instead of checkbox 2026-03-16 19:08:07 +03:00
kd-11 cff9b5b65e rsx/overlays: Implement checkbox and switch controls 2026-03-16 19:08:07 +03:00
kd-11 5d28ff5df1 overlays: Unified icon loading logic 2026-03-16 19:08:07 +03:00
kd-11 7fd0aa95fb overlays: Add icons for trophies and friends 2026-03-16 19:08:07 +03:00
kd-11 27ecfaee9c overlays/home: Add icons to the home menu 2026-03-16 19:08:07 +03:00
kd-11 ce2afa1d54 overlays: Extend list view to allow hassle-free insertion of overlay-element descendants 2026-03-16 19:08:07 +03:00
kd-11 984c562500 overlays: Fix bug in box padding calculation 2026-03-16 19:08:07 +03:00
kd-11 f880a00cba overlays: Provide home icons in different sizes 2026-03-16 19:08:07 +03:00
kd-11 6cf2cc67d3 overlays/icon: Handle some edge cases 2026-03-16 19:08:07 +03:00
kd-11 9e6fecb4ca rsx: Tighten data contract for "external" raw images 2026-03-16 19:08:07 +03:00
kd-11 3194bd3fb4 overlays/home: Add icons repository wrapper 2026-03-16 19:08:07 +03:00
kd-11 fcb5a5c5f8 overlays: Add some home menu icons from font-awesome 2026-03-16 19:08:07 +03:00
kd-11 3988eceb8d overlays: Turn the home menu into a proper sidebar 2026-03-16 19:08:07 +03:00
kd-11 2b2b13273b overlay/settings: Add missing sound effects 2026-03-16 19:08:07 +03:00
kd-11 88278ec7c9 rxs/overlays: Fix visual glitches in the tabbed settings dialogs 2026-03-16 19:08:07 +03:00
kd-11 7d92198ef0 rsx/overlays: Improvements for some containers 2026-03-16 19:08:07 +03:00
kd-11 23eb67badc rsx/overlays: Convert settings pages to a tabbed interface 2026-03-16 19:08:07 +03:00
kd-11 d5928d99d7 rsx/overlays: Replace home menu with a sidebar 2026-03-16 19:08:07 +03:00
kd-11 3c16105c3b overlays/home: Refactor to support having some home pages inside other containers 2026-03-16 19:08:07 +03:00
kd-11 5cb688f309 rsx/overlays: Implement tabbed containers 2026-03-16 19:08:07 +03:00
Megamouse 7859a5f9d2 input: log warning instead of throwing an exception when the dpad has an unknown value 2026-03-16 11:13:17 +01:00
Megamouse 8b74ea8757 Qt: Add steam shortcuts 2026-03-16 10:30:47 +01:00
Megamouse 2c2ec6e109 VS: Add missing test files
I'm having some gmock issues, so let's just exclude them for now.
2026-03-16 10:30:47 +01:00
Megamouse 6c48bd8f93 Fix callback initialization order
We need to initialize the emu callbacks before creating the main window.
Otherwise CallFromMainThread segs since call_from_main_thread is null.
The same goes for the CallFromMainThread connect in gui_application.
If we create the connection too late, we will simply never wake up the
caller and therefore softlock eventually.
2026-03-16 09:49:42 +01:00
Ani b422cb86f2 cmake: Build with SDL by default 2026-03-16 08:59:15 +01:00
Ani 1fb97734a0 cellDmuxPamf: LLE by default again
HLE implementation is crashing on a few games, see #18360, revert it back to LLE until issues with HLE are fixed
2026-03-16 06:21:01 +02:00
Ani 7221012593 config: Disable pad navigation by default
Pad navigation is currently crashing with the SDL handler, see #18362. Disable it until the issue is fixed.
2026-03-16 02:03:54 +01:00
p0yr4s 297db8713f qt: import QJsonDocument 2026-03-15 21:00:11 +01:00
p0yr4s 477ae6c6df cmake: Only use Qt6::GuiPrivate for Qt >= 6.10 2026-03-15 21:00:11 +01:00
Megamouse 74fbca8c80 input: simplify mmjoy handler 2026-03-15 20:00:05 +01:00
Megamouse 433816148a Fix iso shortcuts 2026-03-15 19:02:32 +01:00
Ani 5714eb0ba5 config/ui: Unify Shader Mode values
Have the same values between UI and Config for easing automatic configuration
2026-03-15 18:19:45 +01:00
Ani 315f88b0e4 ui: Split overlay settings, A-Z order emulator tab settings 2026-03-15 18:19:45 +01:00
AniLeo 8587fca5db ui: Move SPU Loop Detection to advanced 2026-03-15 18:19:45 +01:00
AniLeo e2a26f937f ui: Move PPU Non-Java Fixup to debug 2026-03-15 18:19:45 +01:00
AniLeo 90ebc7f319 ui: Move Accurate DFMA to debug 2026-03-15 18:19:45 +01:00
AniLeo 67a67feb68 ui: A-Z order advanced tab settings 2026-03-15 18:19:45 +01:00
AniLeo 9bdacc64aa config: Enable pad navigation by default 2026-03-15 18:19:45 +01:00
AniLeo 5a921bca46 ui: Allow toggling pad navigation on BSD 2026-03-15 18:19:45 +01:00
AniLeo 86f453f677 ui: Merge pkg/pup install dialog options 2026-03-15 18:19:45 +01:00
AniLeo 7712584bd4 ui: Merge exit/boot game dialog options 2026-03-15 18:19:45 +01:00
Ani bc58dff715 ui: Rename depth buffers to depth buffer
Removes ambiguity between config and ui
2026-03-15 18:19:45 +01:00
Ani 0bb6299e39 ui: Specify Anti-Aliasing as MSAA 2026-03-15 18:19:45 +01:00
Ani b24524fc75 config: Fix naming of SPU XFloat Accuracy
Rename from 'XFloat Accuracy' to 'SPU XFloat Accuracy'
2026-03-15 18:19:45 +01:00
Ani 60eb1ce2ec config: Fix naming of Asynchronous Texture Streaming
Rename from 'Asynchronous Texture Streaming 2' to 'Asynchronous Texture Streaming'
2026-03-15 18:19:45 +01:00
Ani 9733d8c857 config: Move FSR CAS out of Vulkan subcategory
FSR1 was already implemented for OpenGL as well, so this setting is no longer exclusive to the Vulkan render
2026-03-15 18:19:45 +01:00
jfleezy23 5274210ba8 VK: scale auto shader compiler workers on wide CPUs 2026-03-15 18:45:36 +03:00
Malcolm 1627757608 SPU LLVM: Emulate GBB with udot/sdot
Greatly simplifies GB, GBH, and GBH. Uses udot/sdot with power of two
masks to shift values and sum them in a single step, effectively
gathering them
2026-03-15 08:48:18 +02:00
Malcolm 4542020c86 SPU LLVM: ARM64: Use UDOT for emulating SUMB 2026-03-15 08:48:18 +02:00
Megamouse b734ceb2e7 overlays: allow to reset current setting 2026-03-14 17:50:22 +01:00
qurious-pixel 951d47c94c Use System Protobuf for Intel Mac 2026-03-14 09:53:24 +01:00
Megamouse 6f07e8453a Update curl to 8.19.0 2026-03-12 19:08:49 +01:00
Megamouse e6cf05cfb7 Qt: Fix log levels tooltip 2026-03-11 14:42:45 +01:00
Megamouse 6b6dd6c432 Qt: Rename Shortcuts to Keyboard Shortcuts 2026-03-11 14:42:45 +01:00
Megamouse ee01d1186f overlays: play SND0.AT3 during initialization 2026-03-11 06:45:22 +01:00
Megamouse 2934641237 overlays: support playing audio with video_view 2026-03-11 06:45:22 +01:00
Elad fecb53f86c Fix SaveStates cellDumxPamf regression 2026-03-10 20:13:29 +02:00
Elad 9811e1cc3b Debugger: Add HW PPU threads view 2026-03-10 20:13:29 +02:00
Elad 234f2b4648 Silence sys_memory_get_user_memory_size 2026-03-10 20:13:29 +02:00
Megamouse 9e573a9ff2 rpcn: set default version to 2 2026-03-10 17:41:48 +01:00
Megamouse 3803c864f7 rpcn: Fix file access error when loading rpcn.yml with version 1
The file was still in use when saving.
2026-03-10 17:41:48 +01:00
Megamouse 8afa40eaa7 rpcn: Fix segfault in rpcn_settings_dialog destructor
This will happen if m_rpcn failed to connect in the constructor.
2026-03-10 17:41:48 +01:00
kd-11 c7a576edce gl: Implement proper, sectioned DMA transfers
- Allows to transfer partial contents when needed
2026-03-10 16:25:32 +03:00
kd-11 c72d54bd6a gl: Add guards to catch invalid configuration in image transfer functions 2026-03-10 16:25:32 +03:00
kd-11 040a79ddd1 gl: Improve object annotation for renderdoc debugging 2026-03-10 16:25:32 +03:00
kd-11 aa094ca948 gl: Trace memory readback operations to debug tracking when renderdoc compat is enabled
- Renderdoc does not show these calls so we need to insert the debug message
2026-03-10 16:25:32 +03:00
kd-11 7917520633 gl: Support packing/unpacking images with padding 2026-03-10 16:25:32 +03:00
kd-11 8651875e59 gl: Add optional row length to GPU image routines 2026-03-10 16:25:32 +03:00
kd-11 ef70a6e825 gl: Move ownership of the global blitter object from texture cache to global 2026-03-10 16:25:32 +03:00
kd-11 0869ef421d gl: Silence compiler warning 2026-03-10 16:25:32 +03:00
kd-11 5f86315ae0 gl: Fix shader interpreter compilation 2026-03-10 16:25:32 +03:00
kd-11 ab72ce418e gl: Minor enhancements to blitter
- Move some functions to cpp. Makes it easier to debug failing image operations
- Add fbo validation before blit operations
2026-03-10 16:25:32 +03:00
kd-11 36cdaac327 overlays: Fix image size estimation 2026-03-10 16:25:32 +03:00
kd-11 6d52415d50 gl: Ignore range offset when doing readback operations
- OGL desperately needs a functioning DMA layer
2026-03-10 16:25:32 +03:00
Megamouse 0603d24a91 Qt: play SND0.AT3 in game lists when a movie would play 2026-03-10 12:42:56 +01:00
Megamouse 71f0d5c602 cellGem: fix RAW8 to RGBA_320x240
We were basically writing two rows into dst for each other src line.
This means we were writing 480 lines in total instead of 240,
overwriting one of the lines written in the previous iteration.
This led to writing one line out of bounds last iteration.
Let's just use a simple debayer technique which perfectly matches here.
This also applies the previously missing gain factors.

I also tried to first demosaic and then drop every other pixel.
The result was comparatively blurred and the performance worse.
2026-03-10 07:01:55 +01:00
Megamouse 763001ee91 cellGem: fix gain channels 2026-03-10 07:01:55 +01:00
Megamouse 0f92ea2578 cellGem: fix memcpy in cellGemReadExternalPortDeviceInfo
It was copying from dst to src, and the wrong size at that
2026-03-10 07:01:55 +01:00
Megamouse e0a0d736c4 cellGem: remove redundant check 2026-03-10 07:01:55 +01:00
Ani 65320446f0 vk: Add 0x13C0 NAVI2 device ID (Raphael Mendocino)
This is the iGPU on 9800X3D
2026-03-09 19:32:09 +02:00
kd-11 5f6822042d gl: Silence warnings 2026-03-09 15:18:47 +03:00
kd-11 302e87c920 rsx/vk: Improve robustness when encountering corrupted shaders 2026-03-09 15:18:47 +03:00
RipleyTom 77cbdd82ab LLVM 22 fixups
From https://releases.llvm.org/22.1.0/docs/ReleaseNotes.html:
The alignment argument of the @llvm.masked.load, @llvm.masked.store, @llvm.masked.gather and @llvm.masked.scatter intrinsics has been removed. Instead, the align attribute should be placed on the pointer (or vector of pointers) argument.

They also changed(not in changelog for some reason):
vpdpbusd_128: [v4i32] -> [v4i32, v4i32, v4i32]
to
vpdpbusd_128: [v4i32] -> [v4i32, v16i8, v16i8]
2026-03-09 06:30:29 +02:00
Megamouse 41db06b53f cellGem: fix handle_pos calculation
The handle position depends on the sphere position and the orientation
2026-03-08 16:12:44 +01:00
Megamouse eeda9c7738 cellGem: improve quaternion rotation
rotate_vector caused wrong results for default_orientation and 0,0,x
2026-03-08 16:12:44 +01:00
Megamouse c38bf70464 cellCamera: improve error logging 2026-03-08 16:12:44 +01:00
RipleyTom 43b295892f PPUAnalyzer: Fix SLDI shift operand 2026-03-08 09:29:48 +02:00
capriots 2573cc5fd0 cellDmuxPamf: fix stream cache not being consumed in some cases 2026-03-07 21:46:07 +02:00
capriots 4828d4d2d6 cellDmuxPamf: review fixes 2026-03-07 21:46:07 +02:00
capriots c5f278ed37 cellDmuxPamf: properly handle streams smaller than 0x800 bytes 2026-03-07 21:46:07 +02:00
capriots b839d4d1a6 cellDmuxPamf: consume guest memory on SPU thread group creation 2026-03-07 21:46:07 +02:00
capriots 3616424b26 cellDmuxPamf: fix lv2 mutex + cond not being destroyed on close 2026-03-07 21:46:07 +02:00
capriots 4d6da6542e tests: enable cellDmuxPamf tests in CMakeLists 2026-03-07 21:46:07 +02:00
capriots f2aa347608 cellDmuxPamf: review fixes + improvements 2026-03-07 21:46:07 +02:00
capriots bd7d5faa9f cellDmuxPamf implementation part 2: PPU thread 2026-03-07 21:46:07 +02:00
capriots a3d09a7427 tests: cellDmuxPamf 2026-03-07 21:46:07 +02:00
capriots 7dad9663b2 cellDmuxPamf implementation part 1: SPU thread 2026-03-07 21:46:07 +02:00
kd-11 cae8ae63e3 gl: Use image dimensions to determine read buffer size 2026-03-07 16:29:11 +03:00
kd-11 728d84b1fe gl: Add debug names to some objects 2026-03-07 16:29:11 +03:00
kd-11 4a51302c58 gl: Propagate native layout from parent when creating temporary subresources 2026-03-07 16:29:11 +03:00
kd-11 0ea692e9ab gl: Use named_object<GL_TEXTURE> as the base class for images 2026-03-07 16:29:11 +03:00
kd-11 1e16b338b4 gl: Add support for named objects 2026-03-07 16:29:11 +03:00
kd-11 14789b536f gl: Clean up the awful image copy API
- Wrap everything in rsx::io_buffer and gl::buffer to avoid out of bounds issues.
- Also abstracts away nasty things like OpenGL offset pointer casts.
2026-03-07 16:29:11 +03:00
RipleyTom ac30feeddb Revert enabling PPU jump elider 2026-03-06 21:10:40 +00:00
Megamouse 0d80e300a0 Qt: add log level settings 2026-03-06 15:06:25 +01:00
Megamouse 69384d7bb4 Update codebase to SDL 3.4.0 2026-03-06 13:56:04 +01:00
Megamouse 4fd2409b8b Update FAudio to 26.03 2026-03-06 13:56:04 +01:00
Megamouse d97851376d Add stacktrace in case of exception 2026-03-06 13:56:04 +01:00
Megamouse 1c5e30e83f input/qt: fix default squircle value in text and remove duplicate comments 2026-03-06 13:56:04 +01:00
kd-11 414df8432e gl: Respect internal offsets when performing DMA transfer operations 2026-03-06 12:18:18 +03:00
kd-11 92f63ccc0b rsx/cfg: Silence GCC noise 2026-03-06 12:18:18 +03:00
kd-11 d75e8b24f7 [FIXUP] API extend 2026-03-06 12:18:18 +03:00
kd-11 a1af15b907 gl/dma: Fix range calculation when creating DMA blocks 2026-03-06 12:18:18 +03:00
kd-11 cf5eb22591 glutils: Extend buffer_object interface 2026-03-06 12:18:18 +03:00
RipleyTom 2f9f79eea2 PPU Fixes
-CallFunction empty function/jump elision was never gone through as cond was always false
-MSelf duplicate offset detection never triggered because set was reset each loop
-Rel executable memory size calculation used wrong section type
2026-03-06 10:49:59 +02:00
Megamouse c57d6110c4 rsx: add missing default to switch 2026-03-05 21:05:15 +01:00
Megamouse 2a292d1e2e rsx: fix unused parameter warning 2026-03-05 21:05:15 +01:00
Megamouse f2c8b157ef ISO: pass mode to file 2026-03-05 21:05:15 +01:00
Megamouse ec00a06caf Fix warning suppression in windows clang 2026-03-05 21:05:15 +01:00
Megamouse ae6172d86b Remove unused function 2026-03-05 21:05:15 +01:00
Megamouse 5605cf2141 Qt: Do not check return code of rpcs3 download 2026-03-05 17:25:45 +01:00
RipleyTom d46ddcee5d Fix mac build 2026-03-04 21:08:07 +03:00
Megamouse 3750fb2c1f cellGem: Fix deadlock when cellGemUpdateStart is called before cellCamera delivers images 2026-03-04 11:31:32 +01:00
kd-11 86b2773c28 rsx: Clean up after vertex cache changes 2026-03-04 03:54:39 +03:00
kd-11 11a9011510 rsx: Fix memory misalignment for temporary storage
- We create the temp storage with alignment of U but then do a type cast to u128 later. This obviously causes problems.
2026-03-04 03:54:39 +03:00
Iván Díaz Álvarez e66f1fa306 Solves render problems due to vertex data being modified before reuse
* Stores first 64bit of the vertex data to compare on retrieval as a fingerprint of if the underlying vertex data has been changed
2026-03-04 01:31:01 +03:00
AniLeo 595e42c4f3 rpcs3_version: Bump to 0.0.40 2026-03-03 13:16:24 +01:00
Megamouse 9288565676 Qt: properly handle cancel of pkg install dialog 2026-03-02 07:54:26 +01:00
Ani 00a1c7278a config/ux: Disable double-click to fullscreen by default
The state of mouse/keyboard on rpcs3 has matured enough to the point where using mouse on rpcs3 to play games is normal. Other games do not fullscreen on double-click, our default should match the expected application behaviour.
2026-03-01 11:58:38 +01:00
RipleyTom 5ca19eabd5 NP code review
sceNpTrophy fixes

- sceNpTrophyGetTrophyUnlockState: signed 1 was potentially shifted by 31(UB)
- sceNpTrophyUnlockTrophy: used a reader_lock and was missing check for read only context

cellGame fixes

- cellHddGameCheck: missing log parameters
- cellGameDataCheckCreate2: missing log parameter
- cellGameThemeInstall: condition inverted checking for extension + added tolower just in case
- cellGameThemeInstallFromBuffer: OOB access, buf is always filled from the start and then used as a parameter to the CB

sceNp fixes

- sceNpManagerGetTicket: Made accurate from RE
- sceNpDrmGetTimelimit: Fix msec calculation

sceNp2 fixes

-sceNpMatching2ContextStartAsync: avoid capturing ctx
-sceNpMatching2ContextStop: Minor error value swap

rpcn_client fixes

-add_friend: missing log parameter
-handle_friend_notification: misc validation issue

np_handler fixes
-ticket: Missing move in move constructor
-ticket::parse: Misc validation fix
-get_player_history_entry: potential UB fix

np_requests fixes

-Wrong CB event_type set for get_room_member_data_external_list!
-reply_tus_get_data was not copying status data!
-Order of error check in reply_get_room_member_data_external_list was wrong
-Improved logging

np_requests_gui:

-Added missing guards for gui_notifications

upnp_handler fixes

-Highest density of bugs per line of code in the west, let's pretend I never wrote this

signaling_handler fixes

-Swapped to multimap to avoid collisions on timestamps

Misc fixes
2026-03-01 09:20:32 +02:00
Megamouse 198c2e9eb8 Qt: attempt to download up to 3 times on return_code -255 2026-02-28 20:35:55 +01:00
Megamouse df5b624e45 clans: use std::move for ticket 2026-02-28 14:40:25 +01:00
Megamouse 37a125ddbd clans: const correctness 2026-02-28 14:40:25 +01:00
Megamouse 3624dac22b clans: remove unused struct 2026-02-28 14:40:25 +01:00
Megamouse b8f4aaa6fb Update SDL to 3.4.2 2026-02-28 11:35:36 +01:00
Megamouse 8cee5a33d0 Fix some warnings 2026-02-28 11:35:36 +01:00
Megamouse a9d4e1399a Update zlib to 1.3.2 2026-02-28 11:35:36 +01:00
Elad 0f3275ec82 sys_fs: Fixup op_read 2026-02-28 10:58:25 +02:00
Elad 45c6e938a5 SPU LLVM: Expand SPU Profiling to blocks 2026-02-28 10:58:25 +02:00
Elad 1ec3de9e8f SPU Analyzer: Fix analysis of instructions without regmod 2026-02-28 10:58:25 +02:00
Elad 35ccd63dbc Win32/File.cpp: Fix fs::file constraints to avoid crashes 2026-02-28 10:58:25 +02:00
Elad 188151fa99 SPU/misc: Remove outdated Instruction statistics 2026-02-28 10:58:25 +02:00
Elad 16b05c930f Misc: Force define LLVM for IntelliSense 2026-02-28 10:58:25 +02:00
Elad f39d82f990 SPU: Fix spu_itype::zregmod 2026-02-28 10:58:25 +02:00
Elad bbd91dad92 SPU DisAsm: Disable unlikely float representations 2026-02-28 10:58:25 +02:00
Elad cc1b4c8fd1 Fix strcpy_trunc type validation 2026-02-28 10:58:25 +02:00
RipleyTom 3b6afc1d9a Final sys_ fixes 2026-02-28 09:00:49 +02:00
RipleyTom b30a20c2dc More sys_ fixes 2026-02-27 06:02:28 +02:00
Ani 60db25980f ci: Update docker to 1.9 2026-02-26 12:37:45 +01:00
Ani 8396cc2300 openal: Update to 1.25.1 2026-02-26 12:37:45 +01:00
kd-11 41e036473a rsx: Fix broken shaders when depth format conversion is enabled with no format conversion code active 2026-02-25 22:44:33 +03:00
kd-11 daa53c8642 vk: Fix cubemap detection logic 2026-02-25 22:44:33 +03:00
kd-11 99c9c16187 rsx: Disallow sRGB hardware format promotion unless no remap is required 2026-02-25 22:44:33 +03:00
kd-11 94cd6a6f9e gl/vk: Clean up vertex texture handling
- Clean up code after refactors
2026-02-25 22:44:33 +03:00
kd-11 4fa3aaf2b5 rsx: Fix flickering when initializing texture units 2026-02-25 22:44:33 +03:00
kd-11 34f0e865ac rsx: Get rid of some guessing when handling special hardware formats 2026-02-25 22:44:33 +03:00
kd-11 cb7c3488ab rsx: Do not emit format conversion code in shaders if the feature is unused
- The sampling logic has become increasingly complex yet it is needed very rarely
2026-02-25 22:44:33 +03:00
kd-11 759ef0f5b0 rsx: Add border color correction for hardware SNORM formats 2026-02-25 22:44:33 +03:00
kd-11 585305f434 rsx: Improve hardware texel remapping support
- Fixes issues observed when the remap is requested on a hardcoded channel
- In that scenario, fall back to software
2026-02-25 22:44:33 +03:00
kd-11 cee868560a rsx: Add configuration toggle to debug tab 2026-02-25 22:44:33 +03:00
kd-11 0fb8091a31 rsx: Disable HW remapper if BX2 is active or the user requests not to use it 2026-02-25 22:44:33 +03:00
kd-11 bf5056145e rsx: Track BX2 reads per-TIU to allow enabling/disabling hw remapping 2026-02-25 22:44:33 +03:00
kd-11 34380b1ee7 vk: Make use of mutable formats for dynamic views 2026-02-25 22:44:33 +03:00
kd-11 f27315c821 vk: Support explicit mutable format list
- Actually important for performance reasons
2026-02-25 22:44:33 +03:00
kd-11 794abe2025 vk: Clean up image_view interfaces 2026-02-25 22:44:33 +03:00
kd-11 e29cd4cc93 gl: Implement SNORM and SRGB format overrides 2026-02-25 22:44:33 +03:00
kd-11 0f1735d0df gl: Add support for subviews 2026-02-25 22:44:33 +03:00
kd-11 07abde4e8d vk: Allow cached view to have mutable format 2026-02-25 22:44:33 +03:00
kd-11 3f174b2a97 vk: Implement SNORM and SRGB format overrides 2026-02-25 22:44:33 +03:00
kd-11 4c20bdcc9f vk: Add support for derived image views 2026-02-25 22:44:33 +03:00
kd-11 f2a17e4898 rsx: Add format override functionality to format_ex 2026-02-25 22:44:33 +03:00
kd-11 b9bdbfa55b vk: De-sphaggetify texture handling 2026-02-25 22:44:33 +03:00
kd-11 9e7268ed6d gl: Despaghettify texture handling 2026-02-25 22:44:33 +03:00
Megamouse 7c8b915ba1 tiny style fixes 2026-02-25 11:53:04 +01:00
Megamouse 9ede04c4b9 Invalidate some global variables in gs_frame dtor 2026-02-25 11:53:04 +01:00
Megamouse 8a0eae0ccd overlays: allow to go to begin/end of list without auto repeat 2026-02-25 11:53:04 +01:00
Megamouse f6429a1ae8 overlays: add fullscreen toggle to home menu 2026-02-25 11:53:04 +01:00
Megamouse bc93fdf9f4 input: Add some logging to mouse_gyro_handler 2026-02-25 11:53:04 +01:00
RipleyTom 064c006339 Various sys_ fixes 2026-02-25 04:41:01 +02:00
silviolet 260c986186 Implemented sorted emit_data for YAML nodes
- emit_data now Recursively sorts each node in a YAML node and outputs them as per the function description, originally a TODO
- The default config is still unsorted so when you click save or apply the sorted file will appear
2026-02-22 16:05:14 +02:00
oltolm 3b49420205 cellVdec: replace std::aligned_union_t with a union 2026-02-22 14:56:48 +02:00
kd-11 f5cf818bcc rsx: Disable interpolation for SNORM emulated textures 2026-02-22 14:56:56 +03:00
kd-11 2d7b72a769 rsx: Implement format_ex decoding for FS inputs 2026-02-22 14:56:56 +03:00
kd-11 2b7bb9ef0a rsx: Add format_ex utility 2026-02-22 14:56:56 +03:00
kd-11 e22c83f4ce rsx: Improve comments/documentation around border color SEXT convert 2026-02-22 14:56:56 +03:00
oltolm 3585881a6c cellSaveData: fix "Your comparator is not a valid strict-weak ordering" 2026-02-22 12:33:24 +02:00
Ani 6bfb33279f test_fmt: include <algorithm> 2026-02-20 19:46:39 +02:00
Ani 89efca9f63 system_utils: include <vector> 2026-02-20 19:46:39 +02:00
Ani bfea622999 sys_time: include <exception> on NOT WIN32 2026-02-20 19:46:39 +02:00
Ani e075170cc4 JITASM: include <mutex> on APPLE
Co-Authored-By: RipleyTom <RipleyTom@users.noreply.github.com>
2026-02-20 19:46:39 +02:00
Ani c7d7f2d03b Thread: Move include <thread> to .h
Co-Authored-By: RipleyTom <RipleyTom@users.noreply.github.com>
2026-02-20 19:46:39 +02:00
Ani fec2be87f6 types.hpp: #include <new>
Co-Authored-By: RipleyTom <RipleyTom@users.noreply.github.com>
2026-02-20 19:46:39 +02:00
Ani 6de8861b4e rpcs3: Target c++23 (msvc) 2026-02-20 19:46:39 +02:00
Ani 48667d68b2 rpcs3: Target c++23 2026-02-20 19:46:39 +02:00
RipleyTom a6b5c7e79f Generalize np::npid_to_string() use 2026-02-20 17:50:49 +02:00
RipleyTom a29758de6e signaling_handler: bugfix and cleanup 2026-02-20 17:50:49 +02:00
Megamouse ff992a67c8 win/fs: check file handle with GetFileInformationByHandle when creating fs::file
On empty mounted drives CreateFileW may return a valid handle even if the drive is not usable.
We have to check the file handle early. Otherwise other functions may fail later as a result.
2026-02-20 11:25:39 +02:00
RipleyTom aaf84a8445 sys_net/P2P: Various fixes
Fix RTT adjustment
Fix possible dead pointer interaction in lv2_socket_native::recvfrom()
Fix iterator invalidation in nt_p2p_port::recv_data()
2026-02-20 05:15:49 +02:00
RipleyTom b7b0e06a54 sys_net/lv2_socket_native: Various fixes
Fix is_socket_connected(always returned false)
Implement SYS_NET_IP_TTLCHK and SYS_NET_IP_MAXTTL
Fix lv2_socket_native::sendmsg, it was only sending the first iovec
Fix sys_net_bnet_sendto addrlen check
Fix assert in lv2_socket_native::recvfrom()
2026-02-20 05:15:49 +02:00
RipleyTom 53dcf2ba00 rpcn_client: Misc fixes
Fix missing freeaddrinfo
Fix wrong return value in a rpcn_client::connect() path
Fix missing 0 presence validation in vec_stream::get_string()
2026-02-20 05:15:49 +02:00
kd-11 2064bd87e3 rsx: Fix GCC build 2026-02-19 00:33:09 +03:00
kd-11 dc63f2fc1f rsx: Correct border-color register value for shader texel remapping
- PS3 border color does not correctly support signed channels and instead treats them as simple compression
- We instead perform the reverse conversion before sending it to our shader pipeline
2026-02-19 00:33:09 +03:00
kd-11 0faa8945bc rsx/vk: Fix bug with custom border color sampler storage
- If an app used multiple border colors, only the first one was being applied.
2026-02-19 00:33:09 +03:00
kd-11 b30a44c136 rsx: Make BX2 flag respect constant overrides 2026-02-15 21:04:56 +03:00
kd-11 8a1b323749 rsx/fp: Rework FP prepass analyzer to capture more information about bx2 expansion 2026-02-15 21:04:56 +03:00
kd-11 27fe5c6604 rsx: Fix input-side vs output-side remapping flags
- Sign bit and biased renorm apply on input, Gamma on output
2026-02-15 21:04:56 +03:00
Ani ed3d2a096c audio: Default buffering to 34ms 2026-02-15 15:19:32 +01:00
kd-11 49029c9b98 rsx: Handle 16-bit format remapping 2026-02-15 15:31:53 +03:00
kd-11 2f5a66581f rsx/fp: Fix biased renormalization without BX2 flag
- With biased renorm, a value of 0 gives a value slightly less than -1
- Biased renormalization does not have a "clamped" mode unlike sext
2026-02-15 15:31:53 +03:00
kd-11 3f321c61f3 rsx: Fix remapping behavior for depth textures (sampled as depth) 2026-02-15 15:31:53 +03:00
kd-11 765e72dcb7 rsx: Use 'format features' to drive BX2 texture sample remapping on the GPU
- Fixes problems with BX2 kicking in when it shouldn't
2026-02-15 15:31:53 +03:00
kd-11 d3cd3e9650 rsx: Remove value remapping shuffle 2026-02-15 15:31:53 +03:00
kd-11 e29832fa00 fixup [first commit] 2026-02-15 15:31:53 +03:00
kd-11 6b272ed563 rsx: Re-work value remapping capabilities to match real hardware
- Drop heurestics and use what real hardware is doing instead
2026-02-15 15:31:53 +03:00
kd-11 3df370a7e6 rsx: Value remapping can only happen to a texel lane once per sample
- Avoids double operation if for example BX2 and SNORM/SEXT are active concurrently
2026-02-15 15:31:53 +03:00
Ani dd490fc725 Update libpng to 1.6.55 2026-02-15 12:51:57 +01:00
Ani 1e63088b3e Update cubeb to 2026-01-22 2026-02-15 12:51:57 +01:00
Ani 8dfd7e126e Update glext to 2026.01.26 2026-02-15 12:51:57 +01:00
Ani 66c7dd1381 Update FAudio to 26.02 2026-02-15 12:51:57 +01:00
Ani 9290422fea Update 7zip to 26.00 2026-02-15 12:51:57 +01:00
Paul Plant 365b2939f6 Updated Fedora build dependencies list 2026-02-15 12:15:38 +01:00
Megamouse 97bbc2d419 Update yaml-cpp to 0.9.0 2026-02-15 11:19:02 +01:00
Marin Baron 06798ef729 [Build] Remove quotes protoc 2026-02-15 09:50:18 +01:00
Zion Nimchuk c6f5abe59f Update docker and ccache 2026-02-15 07:48:24 +01:00
RipleyTom 9f92824721 Fix glsl_invalid_program not fitting within 3 bits 2026-02-14 16:56:38 +02:00
RipleyTom 7f2dec46ca Ignore gcc strict aliasing warnings on __sync_lock_test_and_set 2026-02-14 16:56:38 +02:00
RipleyTom 236dc96689 Microphone fixes 2026-02-14 16:56:38 +02:00
Ani 7cfe96a1d1 macOS: Check for hw.optional.neon as fallback 2026-02-11 10:39:30 +01:00
Malcolm b2469039af ARM64: Detect some arm features and let LLVM know if they are or aren't present via attributes
- On x86, LLVM has robust detection for the CPU name. If a CPU like skylake has AVX disabled, it will fall back to something without AVX (nehalem)
- On ARM, detection is not as robust. For instance, on my snapdragon 8 gen 2, it assumes that we have SVE support, as the cortex-x3 supports SVE.
- If an ARM cpu is paired with other cpus from another generation which doesn't support the same instructions as the cortex-x3, or if the cortex-x3 just has SVE disabled for no apparant reason (in the case of the snapdragon 8 gen 2)
- We need to actually detect that ourselves.
- Beyond SVE also detect support for some instructions that might be useful SPU LLVM when optimized with intrinsics.
2026-02-11 08:19:59 +02:00
Megamouse 8f066541a3 Qt: adjust ansi colors based on background color 2026-02-09 23:22:45 +01:00
Megamouse 4c234dc744 Qt: Fix duplicate ansi highlighter creation
It is created in the slot when the action is toggled in LoadSettings
2026-02-09 23:22:45 +01:00
Megamouse 6a07c3f46d input: fix input guard button offsets for closing native overlays
L2, R1 and all hat buttons were incorrectly enforcing the
pad interception after closing a native dialog.
2026-02-09 21:51:46 +01:00
RipleyTom 3bb21db71b Guard async transactions against spurious wakeups 2026-02-09 07:59:29 +02:00
kd-11 aeaa62a28c rsx/sync: Do not allow short-circuiting behavior when releasing GCM labels via host queue 2026-02-08 17:46:15 +03:00
RipleyTom 93dbdead24 Improve add friend logging/dialogs 2026-02-06 08:33:23 +01:00
Malcolm 93fd33a19a ARM: Use ISB instead of yield in place of x86 pause
ISB isn't an exact match for pause, but it does slow down execution at least a litle.
Unfortunately, yield does nothing on machines without SMT (99% of aarch64 machines)
2026-02-06 07:54:44 +02:00
silviolet ebf9374ccd Fixed typos in rpcs3/System.cpp
- changed string containing a typo buyes -> bytes
- capitalized ps2/ps3 to PS2/PS3
2026-02-04 11:54:50 +02:00
Megamouse 43b2ce6577 MouseHandler: minor cleanup 2026-02-03 10:26:37 +01:00
Megamouse 7a6b34cac3 Update Qt to 6.10.2 2026-02-03 10:26:37 +01:00
Megamouse 98aaafe4a4 Update libpng to 1.6.54 2026-02-03 10:26:37 +01:00
Megamouse 294050986f Qt: allow to exclude strings in log viewer 2026-02-03 08:58:03 +01:00
Megamouse 3eb8fdaef4 Qt: simplify log level filtering in log viewer 2026-02-03 08:58:03 +01:00
Megamouse 622fe1ce47 Qt: don't filter log if the input dialog was canceled 2026-02-03 08:58:03 +01:00
trautamaki f1e679d981 Switch from FFmpeg av_opt_set_* to swr_alloc_set_opts2 (#18138)
ffmpeg 7 doesn't allow to set in_channel_count and out_channel_count anymore
2026-02-03 08:00:48 +01:00
Megamouse 8ba48932d3 Qt: try to fix update downloader 2026-02-03 07:13:03 +01:00
kd-11 55aae4dd40 vk: Fix NVIDIA crash when resizing the game window quickly 2026-02-02 21:21:50 +03:00
kd-11 ad90f8b44b rsx: Conservative MM flush during CPU handling of nv3089_image_in 2026-02-02 16:16:24 +03:00
Windsurf7 588cf69dad Add mouse-based gyro emulation (#18113)
This change adds a hardcoded mouse-based motion sensor emulation
feature, inspired by how Cemu handles mouse-driven gyro input.

While the game window is focused, holding the right mouse button enables
gyro emulation:
- Mouse X movement feeds Motion X
- Mouse Y movement feeds Motion Z
- Mouse Wheel feeds Motion Y

The axis mapping and behavior were tested with the "Spark Runner"
minigame in _Sly Cooper: Thieves in Time_ and _Bentley's Hackpack_.
In accordance with this minigame, a top-down view motion control scheme
relies on the X/Z axes.

While the right mouse button is being held, mouse deltas are captured
via the Qt native event filter and accumulated in the frontend, then
consumed by the pad thread.
On right mouse button release, motion values are reset to the neutral
center to avoid residual drift.

This input path is intentionally independent of pad configuration and
works even when a keyboard-only profile is selected.

This implementation thus resolves issue #13883 by allowing motion-only
gameplay without requiring a physical motion-capable controller.
2026-02-02 09:21:02 +01:00
RipleyTom 1c08439907 Force disable RPCN IPv6 support for now 2026-01-31 08:46:11 +02:00
RipleyTom 96cf5c4e63 Fix generic_async_transaction_context thread handling 2026-01-31 08:46:11 +02:00
RipleyTom db3d9cd217 Implement sceNpMatching2GetRoomMemberDataExternalList 2026-01-30 13:56:29 +01:00
RipleyTom 3e0cfc651d Fix sceNpBasicLimited_0xEB42E2E6 2026-01-30 10:45:55 +02:00
RipleyTom 4df51025e5 Improve Message ComId handling 2026-01-30 10:45:55 +02:00
RipleyTom 97feb4eed4 Add Message logging 2026-01-30 10:45:55 +02:00
Tuna Celik 086ab3cb37 Fix for an emulation shutdown hang 2026-01-29 23:25:56 +02:00
Ani b7311bd6db hle: Register missing functions 2026-01-29 09:13:22 +02:00
RipleyTom b0b0ed7634 Implement sceNpMatching2GetCbQueueInfo 2026-01-28 22:33:35 +01:00
RipleyTom cafc2aa9d0 Implement sceNpMatching2GetMemoryInfo 2026-01-28 22:33:35 +01:00
RipleyTom 8f8032b5a8 Implement sceNpMatching2GetSignalingOptParamLocal 2026-01-28 22:33:35 +01:00
RipleyTom 0e2584fc9f sceNpBasicLimitedSendMessage 2026-01-27 17:21:46 +02:00
kd-11 818b11fd2f Revert adrenalin crash workaround 2026-01-26 15:34:46 +01:00
kd-11 0ee3e24b25 vk: Drain the pending frame queue before resizing the swapchain 2026-01-26 02:59:31 +01:00
kd-11 fb420d5989 vk: Fix flood of VVL synchronization violations appearing when capturing media 2026-01-26 02:59:31 +01:00
kd-11 9b09fba811 vk: Prevent WAW hazard when the window size exceeds the output draw box 2026-01-26 02:59:31 +01:00
kd-11 33d79ee2cd vk: Fix CPU frame misalignment bug
- This one has been around for a really long time.
- The frame-based structure was due to translating the original vulkan tutorial to working code.
- While it is not feasible to throw the arch away, we don't need a rigid 2-frame set for acquire-submit semaphores.
2026-01-26 02:59:31 +01:00
kd-11 a907cc838b vk: Always specify LATE_FRAGMENT_TESTS and EARLY_FRAGMENT_TESTS together when declaring barriers
- The combination of access patterns can go either way, do not assume early testing to always take place.
2026-01-26 02:59:31 +01:00
kd-11 29cb4f59bd vk: Invalidate renderpass key in post-cyclic-z barrier
- Post-Z renderpass split is crucial due to loss of writes. The failure to invalidate the renderpass key was an oversight.
2026-01-26 02:59:31 +01:00
kd-11 9dfaca4cd8 vk: Fix WAW hazard when preparing copy commands for texture uploads using scratch 2026-01-26 02:59:31 +01:00
kd-11 318385787a vk: Force strict query scopes quirk if SRM is enabled 2026-01-26 02:59:31 +01:00
kd-11 11464f0793 vk: Tighten image barriers to account for IMAGE_OP_LOAD operation when starting a renderpass 2026-01-26 02:59:31 +01:00
kd-11 11087a973c vk: Set debug names for image views
- Crucial for debugging hangs and crashes as well as VVL output
2026-01-26 02:59:31 +01:00
kd-11 2e4a187145 vk: Persist debug name in the image wrapper to aid in debugging 2026-01-26 02:59:31 +01:00
Megamouse d854ff03fe Qt: allow to disable logging to the log frame while it is hidden 2026-01-25 11:42:16 +01:00
Florin9doi f883718b23 USB: Complete Summonride figures
- Support the last 3 riders discovered by @RipleyTom
- Simplify the creator dialog
2026-01-25 03:02:23 +01:00
kd-11 b9f5d85d16 rsx: Lower harmless errors to warnings 2026-01-25 01:31:58 +03:00
kd-11 131eee2eed rsx: Fix convolution filter decoding 2026-01-25 01:31:58 +03:00
kd-11 590a0bbcad vk: Include GCM format in debug name for temp texture-cache resources 2026-01-25 01:31:58 +03:00
kd-11 ae8e28282c rsx/zcull: Fix silly copypasta
- Find+Replace bug
2026-01-25 01:31:58 +03:00
Megamouse 1e0909c579 CI: download dependency if the filename is the same but the checksum changed 2026-01-24 21:23:26 +01:00
schm1dtmac fbd5bbcfa3 Address review comments 2026-01-24 20:18:25 +01:00
schm1dtmac 7a12e80666 [macOS] Specify plist version 2026-01-24 20:18:25 +01:00
schm1dtmac a646a66ead [macOS] Fix release naming 2026-01-24 20:18:25 +01:00
Daniel López Guimaraes b41c2754ce cellVdec: Remove resolved TODOs 2026-01-24 19:31:39 +01:00
Daniel López Guimaraes 4b07ac4f27 cellVdec: Document all supported codecs
These are all the codecs that the PS3 can handle. There are some numbers
skipped on the codecs enum, but this is intentional: there isn't a codec
assigned to those.
2026-01-24 19:31:39 +01:00
Daniel López Guimaraes f70b5e0c1c cellVdec: Add support for all MPEG4 profile levels
The names are based from the maximum resolution that the PS3 supports
and the levels that are listed on the MPEG-4 Part 2 Wikipedia.

The PS3 uses a separate decoder for MPEG4 instead of DivX, so the
handling on cellVdecGetPicItem should probably be separate too. However,
research needs to be done on that side and things seem to be working
with what we currently have.
2026-01-24 19:31:39 +01:00
Skiski ef9ff09e17 change velocity for RB3 pro guitar when it stays the same twice in a row (#18064)
There is a bug when you play twice in a row with the same velocity on a
string. The second note is not taken into account as the game does not
notice any change in the velocity.

It is because the velocity is never reset (or at least not very often).
The idea is to check if the velocity of the string is the same as the
previous one. And if it is, we just flip the last bit. Since the
accepted values goes from 6 to 127, from what I've seen, it should be
ok.

I don't have an official RB3 pro guitar, but I have a YouRock Guitar
that is compatible and works perfectly with a real MPA. When I use midi
in rpcs3, I miss notes because of that bug. I've add a log message to
test the patch and in a streak of nearly 150 notes, I should have missed
nearly 20 notes. I had absolutely no missed note with thanks to the
patch.

fixes https://github.com/RPCS3/rpcs3/issues/18062

---------

Co-authored-by: Romain Janvier <romain.janvier@ac-grenoble.fr>
2026-01-24 18:35:00 +01:00
Rosalie Wanders a5f570996f Qt: change UI labels based on device product type 2026-01-24 15:18:07 +01:00
RipleyTom aec981935c Migration bugfixes 2026-01-24 14:23:52 +01:00
RipleyTom 27ebd182e7 Flatbuffers to Protobuf (#18082)
Migrate from Flatbuffers to Protobuf to make some lawyers happy.

Fixes https://github.com/RPCS3/rpcs3/issues/17894
2026-01-24 09:37:47 +01:00
Florin9doi 3e49c32c9c USB: Summonride updates 2026-01-20 21:07:53 +02:00
qurious-pixel d91c11deb0 Define source encoding for iconv 2026-01-20 18:41:19 +01:00
qurious-pixel 2ef8dce8cf Explicitly install iconv 2026-01-20 18:41:19 +01:00
Malcolm 0f85e9123e utils: Scale busy_wait according to arm timer frequency
> - This is a fatal issue that was impacting arm builds, since busy_waits were written assuming an approx 3Ghz x86 machine
> and most arm machines have a hardware timer that runs south of 100mhz, meaning the top items in the profiler were calls to busy_wait();
> all over the code. Fixing this is a very significant speedup, on my snapdragon 8 gen 2 device. 27->37FPS in Metal Gear Rising, but almost
> all games benefit when run on ARM.
2026-01-17 10:07:01 +02:00
Malcolm 760c35eec8 PPU LLVM: Use arm fmax/fmin for vmaxfp/vminfp
- Arm fmax/fmin match altivec behaviour regarding nan behaviour
2026-01-17 09:20:13 +02:00
Malcolm eaebd3426e LLVM: enable FMA for ARM cpus unconditionally
- All armv8 machines should have FMA.
- Should be a speedup for snapdragon elite and apple machines.
2026-01-15 08:29:33 +02:00
Daniel López Guimaraes d7b723cd7c cellVdec: Add MPEG4 profile 3
This profile is used in SingStar recordings while in a song on some
versions.
2026-01-14 03:49:53 +01:00
qurious-pixel 1591b7f5a6 Prepend _win64_ 2026-01-14 03:22:17 +01:00
qurious-pixel 7090f16ff3 Prepend win64 on all Windows artifacts 2026-01-14 03:22:17 +01:00
Megamouse a0f2f006b1 Qt: just remove the entire .app dir on macOs 2026-01-13 23:51:57 +01:00
Megamouse 72851d7d44 VS: Fix ISO filters 2026-01-13 23:51:57 +01:00
Megamouse caaee9b7cc Qt: remove all shortcut files if requested 2026-01-13 23:51:57 +01:00
qurious-pixel d656420cc4 Export AVVER for Release Title name 2026-01-13 21:26:14 +01:00
Elad df72f4abed rsx: Fixup get_address() after #18038 2026-01-13 16:14:49 +02:00
Elad 960e2a9ed8 rsx: Make get_address(MAIN) more strict 2026-01-13 15:28:07 +02:00
Elad 57f162c3c4 rsx/nv3089: Fix wrong suggestion 2026-01-13 15:28:07 +02:00
Elad 2d42a4e25b rsx/gcm: Do not rely on GCM IOMAP table in HLE gcmIoOffsetToAddress 2026-01-13 15:28:07 +02:00
Elad 8f8d468774 rsx/gcm: Fix cellGcmGetTimeStampLocation 2026-01-13 10:53:42 +02:00
RipleyTom 4a12f70f2c Add Delete command to RPCN 2026-01-12 21:33:04 +01:00
Zion Nimchuk ee1886fad9 Fix windows aarch64 deploy 2026-01-12 18:48:49 +01:00
Valters 5fd6d413d7 Add async suffix to TODO sceNpLookupUserProfileAsync 2026-01-12 18:15:37 +01:00
Megamouse ec7f666c6b Loader: Fix graceful Emu Restart
This wasn't working because GracefulShutdown was guarding the boot
2026-01-12 15:45:27 +01:00
Megamouse d5bf11703d Qt: Restart game even if there's no savestate when using the restart shortcut 2026-01-12 15:45:27 +01:00
Megamouse cf94be2aac ISO: reset m_path to original path during Restart 2026-01-12 15:45:27 +01:00
Elad 100a402cd8 rsx/nv3089: Fix image_in source line length estimation 2026-01-12 15:33:41 +02:00
kd-11 86b559ab52 rsx/zcull: Stop any running when the clear command is processed 2026-01-12 14:24:05 +03:00
kd-11 c199a96dac rsx/zcull: Rename write_enabled to surface_active to make the meaning clear 2026-01-12 14:24:05 +03:00
kd-11 f45742df52 gcm: Implement cellGcmGetTimeStampLocation as HLE to improve timestamp reports detection
- Timestamp reports don't need host GPU access and are much faster to emulate
2026-01-12 14:24:05 +03:00
kd-11 578d30d3ae rsx: Fix context_dma enum naming 2026-01-12 14:24:05 +03:00
kd-11 a6321caaa2 rsx: Remove surface management hack breaking savestate capture 2026-01-12 14:24:05 +03:00
Zion Nimchuk 4842339f9e Setup to deploy aarch64 binaries 2026-01-12 10:58:16 +01:00
Florin9doi aa220d24e8 Fixed more SingStar previews 2026-01-11 22:14:36 +01:00
Florin9doi d9edf98d55 USB: Usbd support for microphones 2026-01-11 22:14:36 +01:00
Megamouse cf6aaaa74f VS: update googletest package
This fixes building the test project in VS 2026
2026-01-11 19:23:11 +01:00
Megamouse 25b412a90f cellVdec: impove error logging 2026-01-11 18:49:25 +01:00
Florin9doi d584575984 Fixed more SingStar previews, this time for v05.00 2026-01-11 17:36:38 +01:00
Live session user 7e9e0f56fb Windows ARM build 2026-01-11 16:53:16 +01:00
Elad 8188c45b9d Cut sceNpDrmIsAvailable sleep time 2026-01-11 17:03:41 +02:00
Elad 1f731afbd9 sys_fs: Add PPU sleep 2026-01-11 17:03:41 +02:00
Florin9doi 9781690918 Fixed SingStar previews 2026-01-11 14:26:04 +02:00
Megamouse cd6dfc82a2 cellVdec: also use ctx->framerate to calculate the timestamps
ffmpeg 7 doesn't seem to guess the time_base parameter anymore
2026-01-10 19:17:32 +01:00
Megamouse ae6bdf84f1 Update ffmpeg to 7.1.2 2026-01-10 19:17:32 +01:00
Megamouse ad65878c0c gl: fix some cppcheck issues 2026-01-10 19:17:32 +01:00
zeph 50fcee6fe0 UI: ANSI colors, code fix suggestion
Co-authored-by: Megamouse <studienricky89@googlemail.com>
2026-01-10 17:22:54 +01:00
zeph 4431f6b3d9 UI: ANSI TTY colors, fix git submodule versions and correct include 2026-01-10 17:22:54 +01:00
zeph 84ddcea45a UI: ANSI colors, more explicit erase check 2026-01-10 17:22:54 +01:00
zeph 6eeca69c56 UI: ANSI colors, further fix-ups 2026-01-10 17:22:54 +01:00
zeph 484d97caf1 UI: colored ANSI logs fix-ups 2026-01-10 17:22:54 +01:00
zeph b2768bbd61 UI: colored ANSI logs 2026-01-10 17:22:54 +01:00
Megamouse 9faf9a6145 ISO: optimize byteswap and utf16 string conversion 2026-01-10 15:22:41 +01:00
Megamouse 36bce33684 ISO: use string_view in retrieve 2026-01-10 15:22:41 +01:00
Megamouse f712de0c91 ISO: Remove psf hack 2026-01-10 15:22:41 +01:00
Megamouse a8624682a7 ISO: add some logging 2026-01-10 12:14:09 +01:00
Megamouse 4dc994833d Qt: fix shortcut creation for ISO 2026-01-10 12:14:09 +01:00
Megamouse 98e64d7821 Qt: fix appicon for ISO 2026-01-10 12:14:09 +01:00
Megamouse 6bd4f52173 Qt: Allow to boot iso files from menu 2026-01-10 12:14:09 +01:00
Megamouse 41a5c69db4 Qt: Allow to add iso files from menu 2026-01-10 12:14:09 +01:00
Megamouse f2afdee40c Qt: fix missing mice menu 2026-01-10 12:14:09 +01:00
Megamouse 19129eddd7 Qt: ISO clean up
Should fix some potential Qt bugs as well
2026-01-10 06:36:58 +01:00
Megamouse be77083a2b Qt: some cleanup 2026-01-10 06:36:58 +01:00
Functionable 49bcc93072 ISO: Move load_icon 2026-01-09 14:40:51 +02:00
Functionable a53f2fc7b9 ISO: Fix save states in games with multiple executables
- Some games will load into a different executable from EBOOT.BIN, and
attempting to restore those games from savestate causes the game to
crash immediately.
- This commit repurposes the disc_info field in a savestate generated
from an ISO game to store the running game executable at the time of the
save state.
2026-01-09 14:40:51 +02:00
Functionable f4dffd985b ISO: Fix argv[0] being set to a garbage value
- Due to GetCallbacks().resolve_path behaviour being reverted in a prior
commit, resolved_path will not have the path to the game executable.
This causes issues when setting argv[0] to the game executable path and
apparently breaks some games which may rely on this value.
2026-01-09 14:40:51 +02:00
Functionable 59a1f81e86 ISO: Game loading fixes
- After undoing the changes to do with resolve_path, loading game
updates was broken. This required the condition to be changed to check
for launching_from_disc_archive.
- When attempting to load an update for an ISO game,
inherited_ps3_game_path needs to be set otherwise launching the updated
game will fail.
- An additional check was added to ensure that the inherited vitual game
directory isn't saved as the game path in games.yml.
- Fixed attempting to load an updated ISO game by launching its updated
executable, which can happen when loading a savestate for a game with
updates, the emulator would crash before.
- Unload ISO file when Load() fails, otherwise ISO loading might be
stuck in a broken state.
2026-01-09 14:40:51 +02:00
Functionable a2d76aedaa ISO: Fix recent actions created when launching ISO games 2026-01-09 14:40:51 +02:00
Functionable 59f9a7c080 ISO: Use clearer code to set game.icon_in_archive
- Suggested change from PR review
2026-01-09 14:40:51 +02:00
Functionable 714359b544 ISO: Move icon loading to a common function in qt_utils.h 2026-01-09 14:40:51 +02:00
Functionable bc1d0b9e65 ISO: Move game size assignment to size_calc_func in game_list_table.cpp 2026-01-09 14:40:51 +02:00
Functionable 407cbf9690 ISO: Add ISO games through Emulator::AddGamesFromDir
- When dragging and dropping ISO files, they will be treated the same as
game directories currently are and added to the game list rather than
immediately being opened.
2026-01-09 14:40:51 +02:00
Functionable 4cd75971f0 ISO: Move code to load psf::registry into iso_archive
- Multiple places end up needing to retrieve a psf::registry from an is
o archive.
- Added a safety check along with this
2026-01-09 14:40:51 +02:00
Functionable 38daf8d325 ISO: Add empty path check to iso_archive::retrieve 2026-01-09 14:40:51 +02:00
Functionable 095f433f8e ISO: Fix loading games in continuous mode
Some games will load into another game and continuous mode will be set.
Currently, if this happens the ISO will get unloaded in the shutdown
function. This commit adds an additional check before calling the unload
function to fix this.
2026-01-09 14:40:51 +02:00
Functionable fa11af1cba ISO: Remove resolve_path hack
- Modify Emulator::GetFakeCat to return "DG" for mounted ISO games like
expected.
- Undo changes to main_application resolve_path callback
2026-01-09 14:40:51 +02:00
Functionable 48f39acac7 ISO: Unload the iso_device on shutdown 2026-01-09 14:40:51 +02:00
Functionable 257043529a ISO: Loader improvements
- Don't use floating point when advancing sectors
- Remove redudndant seek in iso_archive constructor
- Drop error code checks in iso_file::read_at
- Don't use lexically_normal for handling path in iso_archive::retrieve.
More complete directory search implementation.
2026-01-09 14:40:51 +02:00
Functionable 2533aa02d0 ISO: Don't access m_game_info from icon_load_func 2026-01-09 14:40:51 +02:00
Functionable 27510f5fa8 ISO: Move game image loading to game_list_base::IconLoadFunction 2026-01-09 14:40:51 +02:00
Functionable acdb0ee729 ISO: Small clean up
Cleaning up old comments and fixing small mistakes in ISO.cpp
2026-01-09 14:40:51 +02:00
Functionable 673cc040fa ISO: Add UI support
Adds ISO file type to load dialog and allows launching ISO games via
drag and drop.
2026-01-09 14:40:51 +02:00
Functionable eff25ed0aa ISO: Fix game movie icons 2026-01-09 14:40:51 +02:00
Functionable ab45b1bf61 ISO: Fix icons in savestate_manager_dialog 2026-01-09 14:40:51 +02:00
Functionable 1d2f6404c6 ISO: Fix for save states 2026-01-09 14:40:51 +02:00
Functionable d6d7ae35f8 ISO: Add games to games list 2026-01-09 14:40:51 +02:00
Functionable 990e002782 ISO: Modify game boot for ISOs
This commit modifies code in System.cpp to allow games to boot from ISO
images. Game data is loaded by leveraging fs::set_virtual_device, and
setting the m_path to the ISO device location.

This commit also modifies the resolve_path callback to return the path
it was given if it wasn't found in the OS. This is necessary as
Emulator::GetFakeCat will return "HG" on disc games, making games
unplayable through ISO.
2026-01-09 14:40:51 +02:00
Functionable 6c083d6184 ISO: Add ISO reader code and ISO device
Adds infrastructure to read files/data from ISOs.

Also adds classes extending fs::device_base and fs::file_base in order
to allow reading files through fs namespace functions. This approach
should allow ISO data to be read by the emulator with the least changes
to existing code.
2026-01-09 14:40:51 +02:00
Megamouse ef5a4bf7e4 Qt/input: fix pressure intensity button availability 2026-01-08 14:33:37 +01:00
kd-11 c22d2b51bb gl: Do not overwrite texture-cache image dimensions when updating format
- The code was an outdated relic from the early days. The calculated pitch was wrong as it did not take subregions (incomplete rows) into account.
2026-01-08 14:31:44 +03:00
Megamouse 72a19a87b6 Qt: Add mulit selection to game grid 2026-01-08 07:45:04 +01:00
Megamouse 1bfd1154f5 Update FAudio to 26.01 2026-01-07 19:12:04 +01:00
Megamouse 0bd6aee8c8 Update SDL to 3.4.0 2026-01-07 19:12:04 +01:00
qurious-pixel e3a938fb76 Embed qt.conf in RPCS3 binary 2026-01-07 09:58:06 +01:00
qurious-pixel db89f55ca1 Add Qt translations to Windows Clang 2026-01-07 09:58:06 +01:00
Antonino Di Guardo 27033ee0cb move disk usage dialog box to game list's context menu (#17977) 2026-01-07 08:22:40 +01:00
Megamouse 90df8baa5f Qt: Fix game list multi-selection after Refresh 2026-01-06 17:09:39 +01:00
Megamouse 1eb0b2260d Refactor game_list_frame 2026-01-06 16:22:07 +01:00
digant73 9fb7c8f52c Add multi-selection context menu
fix compile errors on Mac and provide reviewed changes

fix wrong resolved conflict

removed duplicate

cleanup after latest merged PRs

minor cleanup

rename and move get_existing_dir() to File.cpp

apply reviewed changes
2026-01-06 09:47:15 +01:00
Florin9doi 9b256d71a9 USB: Fixed G27 crash during reinitialization 2026-01-05 21:00:37 +01:00
Megamouse 8f26c01ae5 Qt: try to fix drag and drop issues 2026-01-05 20:14:55 +01:00
Megamouse 113679ead8 Update SDL to 3.2.30 2026-01-05 18:13:25 +01:00
Megamouse c2b93317ad Revert "Update SDL to 3.4.0"
This reverts commit cfbc416521.
2026-01-05 18:13:25 +01:00
schm1dtmac a0e0a6c6a6 [macOS Updater] Cleanup remnants of the old app bundle post-update 2026-01-04 19:11:37 +01:00
kd-11 cc37a40f40 rsx/fp: Harden the FP decompiler a bit when bogus inputs are passed in. 2026-01-04 15:05:52 +03:00
schm1dtmac aab40bd269 Try and cut down unnecessary Qt translations 2026-01-04 09:46:49 +01:00
schm1dtmac 44bd0568e7 Unify Mac CI action 2026-01-04 09:46:49 +01:00
schm1dtmac c83769e79e Unify & cleanup Mac deploy script 2026-01-04 09:46:49 +01:00
schm1dtmac e65755d68d Unify & optimise Mac build script 2026-01-04 09:46:49 +01:00
Megamouse 643d1102cc Add SDL camera handler 2026-01-03 14:40:02 +01:00
Megamouse ea6bb77d57 Qt: Fix image dimensions passed to camera_video_sink::present 2026-01-03 02:27:54 +01:00
Megamouse 050d2d3b2f macOs: Deploy Qt translations 2026-01-03 00:28:41 +01:00
Megamouse 8d55db334e Qt: deploy and apply Qt translations 2026-01-01 19:17:13 +01:00
kd-11 ee06dccdea vk: Disable VK_EXT_attachment_feedback_loop_layout support for adrenalin driver 2026-01-01 13:36:31 +02:00
qurious-pixel 8d7484df89 [BSD] Use FreeBSD 14.3 vm
Fixes runner stopping when running out of disk space.
2026-01-01 10:50:19 +02:00
Megamouse ae72de3881 Refactor camera code to support different camera handlers
I split this off the sdl camera PR due to rebase conflicts.
It can also be seen as a partial integration test.
2026-01-01 08:54:57 +01:00
Megamouse cfbc416521 Update SDL to 3.4.0 2026-01-01 06:51:46 +01:00
Megamouse 05ae739a22 Update OpenAl to 1.25.0 2026-01-01 06:51:46 +01:00
Megamouse f50b9cd5c4 Update libpng to 1.6.53 2026-01-01 06:51:46 +01:00
AniLeo c5511200d5 rpcs3_version: Bump to 0.0.39 2025-12-31 23:53:44 +01:00
Florin9doi 51fd4b2f76 USB: Added support for G27 compatibility modes
- Driving Force EX
- Driving Force Pro
- Driving Force GT
- G25
2025-12-31 21:25:37 +00:00
Niram7777 2f94891c23 Build Freebsd update LLVM dev (22)
Fix the CI by using the correct compiler version
https://wiki.freebsd.org/HardcodedCCVersions
2025-12-31 20:17:40 +00:00
Antonino Di Guardo f535c82a3f Improve Utilities and Log menus (#17944) 2025-12-31 16:44:11 +01:00
digant73 d929596b0f improve menus 2025-12-30 14:48:09 +01:00
Megamouse 4feb876b7f cellPhotoImport: Try to create unique filenames 2025-12-30 10:26:13 +01:00
Megamouse 953e31cbe8 Adjust media list dialog for larger folder depth
Use shared_ptr to fix crashes when navigating deeper folders
2025-12-30 10:26:13 +01:00
Megamouse 953f9f7e01 cellPhotoExport: Use roughly same path as cellScreenShot 2025-12-30 10:26:13 +01:00
Megamouse d85b9d0cd1 cellScreenshot: escape photo_title in path 2025-12-30 10:26:13 +01:00
Megamouse 9810d24ebb cellScreenshot: update filenames 2025-12-30 10:26:13 +01:00
RipleyTom 65273dde76 Remove call to glxewInit 2025-12-29 15:29:34 +02:00
Ninetime 2579ddf996 RPCN menu changes (#17936)
- Adds a shortcut for RPCN to the toolbar

- Adds a link for the Network tab to the Configuration menu
2025-12-29 07:12:21 +02:00
Megamouse 01fe12483f Qt: remove unused NotifyBatchedGameActionFinished signal 2025-12-27 22:00:12 +01:00
Megamouse bba1cf4b6e Qt: ask user for install options before starting the installation 2025-12-27 22:00:12 +01:00
Megamouse 92f56215d0 Qt: Allow user to precompile caches on demand when installing packages or adding disc games 2025-12-27 22:00:12 +01:00
kd-11 f5be489d9f rsx: Improve framebuffer layout change detection 2025-12-27 22:54:27 +03:00
kd-11 316aa44d3e vk: Fix crash when shuffling between cyclic and non-cyclic Z-buffer in one logical pass 2025-12-27 22:54:27 +03:00
kd-11 e586986845 rsx/gl: Clear cyclic Z barrier flag
- OpenGL doesn't care about this but we clear it anyway to indicate it is no longer pending.
2025-12-27 22:54:27 +03:00
kd-11 ba673d1407 rsx/vk: Add post-cyclic-z barriers allowing us to keep early Z optimizations 2025-12-27 22:54:27 +03:00
kd-11 fd3ecea21e rsx: Improve early-Z disablement mechanism 2025-12-27 22:54:27 +03:00
kd-11 5a809c5f72 rsx/fp: Stop using m_ctrl and use the correct object from m_prog 2025-12-27 22:54:27 +03:00
kd-11 441e7e0485 rsx: Disable early-Z optimizations if a loopback on the depth texture is active
- The optimizations worked a bit too well and allowed early-Z to kick in.
- Early Z inverts the logic making reads happen after writes and breaking loopback sampling.
2025-12-27 22:54:27 +03:00
kd-11 5baf8aeb22 vk/fp: Only emit alpha-testing variables when required 2025-12-27 22:54:27 +03:00
kd-11 bd1a25698c rsx: Fix alpha testing
- We no longer reload fragment state when toggling alpha-test. Instead, a different shader variant is picked.
2025-12-27 22:54:27 +03:00
kd-11 307dac479c rsx: Fix texcoord clamp regression 2025-12-27 22:54:27 +03:00
kd-11 0e9c877b83 rsx: Drop pointless ROP control bit check 2025-12-27 22:54:27 +03:00
kd-11 6e0b5a874d rxs: Improve alpha-to-coverage emulation 2025-12-27 22:54:27 +03:00
kd-11 da21b10144 rsx: Propagate state changes to trigger permutation lookup
- Alpha test
- MSAA (for CSAA enable flag)
- Polygon stipple
2025-12-27 22:54:27 +03:00
kd-11 69cdded5ba rsx: Fix sRGB control flag propagation to shader control
- Also clean up the texturing code and fix some memcpy overflow bugs.
2025-12-27 22:54:27 +03:00
kd-11 8030b01064 rsx: Propagate shader kill flag and refactor texture flags processing a bit 2025-12-27 22:54:27 +03:00
kd-11 1a733353de rsx: Fix MSAA sampling operations 2025-12-27 22:54:27 +03:00
kd-11 20dcfa5c8a rsx: Move heavy codegen capabilities to permutation flags from runtime checks 2025-12-27 22:54:27 +03:00
kd-11 3cb3f6972e vk: Hoist texture param loads 2025-12-27 22:54:27 +03:00
kd-11 215880cd1a rsx/vk/gl: Make texture parameter reads backend-dependent
- Allows optimizations and improvements per-backend
2025-12-27 22:54:27 +03:00
kd-11 308adca206 rsx/fp: Stop referencing wpos when the value is just getting discarded. 2025-12-27 22:54:27 +03:00
kd-11 5e4c2433c1 vk/gl: Mark unused FP outputs as unused 2025-12-27 22:54:27 +03:00
Florin9doi 0536ad3b23 USB: Fix an incorrect log 2025-12-27 20:40:28 +01:00
Florin9doi bdcde24e28 USB: Remove a duplicate PSP entry 2025-12-27 20:40:28 +01:00
Florin9doi 80d7db520b USB: Remove unused method 2025-12-27 20:40:28 +01:00
Florin9doi eafe0f76cf USB: Update Kamen Rider Summonride virtual portal
- Increase ack time for interrupt packets
- Add missing HID Descriptor Node
2025-12-27 20:40:28 +01:00
Florin9doi ce0a6da88e Docs: Update clone instructions 2025-12-27 20:40:28 +01:00
Megamouse fdbf25076e Fix lld warning LNK4286 2025-12-27 20:04:43 +01:00
oltolm 0ce686b1f1 fix lld warning LNK4217 2025-12-27 18:40:01 +01:00
Antonino Di Guardo 908c616783 Improve Manage menu (#17919) 2025-12-27 17:54:03 +01:00
Megamouse 739c178aac Qt/cheats: don't accept imported cheats unless valid 2025-12-27 17:18:44 +01:00
schm1dtmac 77aa5d4bbf [macOS] Don’t compile in GL-related code or link GLEW
This seems sensible enough since macOS’s archaic, deprecated OpenGL
implementation isn’t supported by RPCS3 anyways. Also fixes some CI
fails caused by GLEW as a consequence.
2025-12-24 21:21:57 +02:00
RipleyTom 847a147002 Improve usb timing accuracy 2025-12-24 04:44:47 +02:00
RipleyTom df6a3d01df Clean UsbTransfer state 2025-12-24 04:44:47 +02:00
Megamouse f81a5a5cb1 sceNpClans: cleanup 2025-12-23 13:26:34 +01:00
Megamouse 2fb697322f overlays: log font lookup info on exception (#17903)
- Logs the font lookup dirs and the target fonts when no font was found
in the native overlay
2025-12-21 14:00:36 +01:00
zeph 73bcabf7d5 Clans: fix graphical bug displaying JID instead of username (#17906)
This PR fixes a visual bug with the Clans system, incorrectly converting
the `jid` to a user's NPID, instead of using their username.

Variable names should now be a bit clearer and avoid similar issues in
the future.

---------

Signed-off-by: zeph <zephyrzefa15@gmail.com>
2025-12-21 13:11:33 +01:00
schm1dtmac 3819b9d57e [macOS] Force max pthread priority, fix throttling 2025-12-21 07:18:43 +02:00
zeph f946054a37 Clans: Emulator and server implementation (#17835)
This PR implements the Sony Clans subsystem for the RPCS3 emulator.

Used in:
- PlayStation Home [NPIA00005]
- ?

Addresses and closes
[#16464](https://github.com/RPCS3/rpcs3/issues/16464).

---

The source code for the server is available
[here](https://github.com/ZephyrCodesStuff/clans-rs) and is licensed
AGPLv3.
- It's written in Rust, with my best efforts in readability and
documentation.
- Every feature not-pertaining to RPCS3 has been feature-gated at
compile-time.
- Fully Dockerized deployment
- Ticket signature verification

NOTE: The server is fully compatible with the PS3 console as well, as it
follows the PS3 Clans Library specification.

---

The emulator code tries its best to follow on the steps of the RPCN
client code wherever possible; both in the Client as well as the
Settings and Config components.

Features:

- Clans client implementation in `clans_client.[h,cpp]`
- Syscalls implementation in `sceNpClans.[h,cpp]`
- A couple of missing structs and/or enum members have been added in
`sceNp.h`
- Qt GUI for selecting the desired Clans server to use (default: [HTTPS]
`clans.rpcs3.net`)
  - Implemented in `clans_settings_dialog.[h,cpp]`
  - Prevents modifying during emulator usage
- `clans.yml` config file for persistence
  - Implemented in `clans_config.[h,cpp]`

---------

Signed-off-by: zeph <35661622+ZephyrCodesStuff@users.noreply.github.com>
Signed-off-by: zeph <zephyrzefa15@gmail.com>
2025-12-20 16:43:17 +01:00
schm1dtmac 6546cf9e3a [macOS] General cleanup/fixups 2025-12-20 07:35:36 +01:00
Niram7777 cbecb91b94 Build 3rdparty/soundtouch include as system 2025-12-19 13:40:04 +00:00
Niram7777 8c9d266284 Build LLVM wrap getFirstNonPHI by version 2025-12-19 13:40:04 +00:00
Niram7777 a65eb3eb30 Build LLVM wrap getDeclaration by version 2025-12-19 13:40:04 +00:00
Marin Baron c9725b79fc Build 3rdparty include as system 2025-12-19 13:40:04 +00:00
Marin Baron 78690282eb Build LLVM some API dont support iterator so use pointer 2025-12-19 13:40:04 +00:00
Marin Baron 46db5c35eb Build LLVM deprecated getFirstNonPHI 2025-12-19 13:40:04 +00:00
Marin Baron 752155d5dd Build LLVM-22 fix removed getDeclaration 2025-12-19 13:40:04 +00:00
RipleyTom 371af2d94f Refuse to abort sceNp2 requests that change state 2025-12-19 12:06:02 +01:00
RipleyTom b99bd12d5e Add Extra sceNp2 logging 2025-12-19 12:06:02 +01:00
schm1dtmac 5507078bd8 [macOS] Use native os_sync calls for futexes 2025-12-17 21:21:59 +02:00
Elad ddfa773675 sys_fs: Optimize split files handling 2025-12-17 12:39:37 +02:00
Ani 36af9f54d3 Revert "SPU/config: Make SPU LLVM Mega block size default"
This reverts commit 4a042ae84f.
2025-12-17 07:03:15 +00:00
schm1dtmac 1147f47a8a Switch macOS atomics to futexes, bump min ver to 14.4
Co-authored-by: elad335 <18193363+elad335@users.noreply.github.com>
2025-12-17 00:38:38 +00:00
kd-11 03a91aa052 rsx/cfg: Increase valid register file size to 768 bytes per pixel pipe 2025-12-17 00:05:22 +00:00
Elad e0cdafddb5 SPU Analyzer: Fix missing jump table entries in Mega mode 2025-12-16 23:20:37 +00:00
schm1dtmac 4c7d19fc69 [macOS] Update to MVK 1.4.1 with private API support (fixes panics, improves feature support) 2025-12-16 22:50:40 +00:00
Ani 061fb5d112 Revert "Fix hypervisor context memory placement"
This reverts commit b1089ab1a3.
2025-12-16 21:54:21 +00:00
kd-11 b1089ab1a3 Fix hypervisor context memory placement 2025-12-16 16:31:56 +02:00
Elad 812d84e7f4 Util/sync.h: Fix iterator invalidation in futex emulation 2025-12-16 13:08:58 +02:00
Elad 103d580d9a Fixup futex emulation
std::unordered_multimap::find may return any matching element.. unlike equal_range. (code relied on matching the first)
There was also UB there of reference to an element after it has deleted.
2025-12-16 10:41:21 +02:00
Elad de8552048f PPU: Prevent repeated notifications 2025-12-16 10:41:21 +02:00
Elad 65cd4deb77 Prevent atomic cache line collisions 2025-12-16 10:41:21 +02:00
Elad 16e41f4492 Fix compilation with older Qt versions 2025-12-16 10:41:21 +02:00
RipleyTom 711ec69e48 Fix RPCN replies ordering 2025-12-16 10:07:03 +02:00
Megamouse cf87f24587 cellGem: improve bayer demosaicing 2025-12-15 14:20:34 +01:00
Megamouse 12a3818fcf Fix logging of gem configs 2025-12-15 14:20:34 +01:00
kd-11 d9da5f26c0 vk: Ignore memory pressure handling when allocating data heaps into ReBAR memory. 2025-12-15 11:53:47 +00:00
kd-11 1a3e150a62 vk: Extend memory allocation system to explicitly allow requesting no VRAM recovery on allocation fail. 2025-12-15 11:53:47 +00:00
Megamouse c3db85c68e cellGem: Fix YUV conversions, implement gain, averaging and basic outlier detection 2025-12-13 12:43:22 +01:00
kd-11 2b0456520e rsx/cfg: Fix edge case where an empty block is defined 2025-12-13 13:50:39 +03:00
Megamouse 0c455d12c9 Fix int -> float conversion warning 2025-12-13 03:55:44 +01:00
Megamouse 236f783466 overlays fix c++23 elifndef
This is a c++23 feature...
2025-12-13 03:55:44 +01:00
Megamouse f739ce7323 cellGem: Implement CELL_CAMERA_RAW8 to CELL_GEM_BAYER_RESTORED_RASTERIZED 2025-12-12 10:31:26 +01:00
Megamouse 3c0558c822 cellGem: Implement CELL_CAMERA_RAW8 to CELL_GEM_BAYER_RESTORED_RGGB 2025-12-12 10:31:26 +01:00
Megamouse c38146636a Update fusion to 1.2.11 2025-12-12 10:31:26 +01:00
Megamouse 26b0f822d8 ps_move_handler: enable orientation by default 2025-12-12 10:31:26 +01:00
Megamouse ee9dc44059 ps_move_handler: fix decoding of ZCM1 sensor values 2025-12-12 10:31:26 +01:00
Megamouse 24745416c5 cellGem: fix compilation 2025-12-12 10:31:26 +01:00
Megamouse fa4e2d1b42 ps_move_handler: fix trigger values depending on ps move version 2025-12-12 10:31:26 +01:00
Megamouse c2284c962b move ps_move_data to own file 2025-12-12 10:31:26 +01:00
Megamouse 757e9a0493 cellGem: implement world coordinate orientation in cellGemGetState 2025-12-12 10:31:26 +01:00
Megamouse f7cda4b2b4 cellGem: fix default orientation 2025-12-12 10:31:26 +01:00
Megamouse c6ef09500a cellGem: fix division by zero 2025-12-12 10:31:26 +01:00
Megamouse 26ae6f0902 cellGem: fix default accelerometer value 2025-12-12 10:31:26 +01:00
Megamouse 1b01a9274c cellGem: clarify member descriptions 2025-12-12 10:31:26 +01:00
kd-11 0f1eadcab0 rsx/gtest: Drop unused function 2025-12-10 13:07:07 +03:00
kd-11 1ea3c121fa rsx/cfg: Fix delay-slot detection when copying from the same register index but different precision. 2025-12-10 13:07:07 +03:00
kd-11 2c6d3dde67 C++ Pro
- Different from C++ amateur.
- Addresses code review suggestions to step up the C++
2025-12-10 13:07:07 +03:00
kd-11 a412e34fa6 rsx/cfg/fp: Fix back-traversal for IF-ELSE pairs 2025-12-10 13:07:07 +03:00
kd-11 4dc52fde82 rsx/common: Implement list insert for simple_array 2025-12-10 13:07:07 +03:00
kd-11 5688573b3d rsx/fp: Fix pre-branch epilogue emit 2025-12-10 13:07:07 +03:00
kd-11 98a12de256 rsx/gtest: Enable unit tests for nix builds 2025-12-10 13:07:07 +03:00
kd-11 43d8518faa rsx/fp: Warning cleanup 2025-12-10 13:07:07 +03:00
kd-11 1e6fe1f4ab rsx/cfg/fp: Add delay-slot detection to remove unnecessary barriers
- Reduces emitted barriers by like 99%
2025-12-10 13:07:07 +03:00
kd-11 93f89b8a74 rsx/cfg: Fix instruction injection when more than one barrier is needed for a single instruction 2025-12-10 13:07:07 +03:00
kd-11 8cd241ca10 rsx/fp: Implement OR16_LO and OR16_HI instructions 2025-12-10 13:07:07 +03:00
kd-11 8d2f7ae85f rsx/cfg: Implement partial barriers for 32-bit register channels 2025-12-10 13:07:07 +03:00
kd-11 81d657a960 rsx/cfg: Fix grouping barrier16 instructions when lane is shared. 2025-12-10 13:07:07 +03:00
kd-11 4183d09a52 rsx/fp/cfg: Fix input mask for DIV and DIVSQ instructions 2025-12-10 13:07:07 +03:00
kd-11 316e01995b rsx/fp: Re-implement ROP output resolve 2025-12-10 13:07:07 +03:00
kd-11 f2913e4692 rsx/fp: Reimplement GLSL code generation from CFG 2025-12-10 13:07:07 +03:00
kd-11 d23ea4760b rsx/cfg: Handle nested IF/LOOP blocks falling out to unsuitable nodes (ELSE).
- In that case, find the node's END node and link to that instead. ELSE nodes are not reachable from children of the preceding IF.
- ELSE nodes are special this way, all other types of nodes are reachable by adjacency.
2025-12-10 13:07:07 +03:00
kd-11 26fd0510ab rsx/fp: Enable CFG passes and emit block epilogues 2025-12-10 13:07:07 +03:00
kd-11 e8e2d4b93d rsx/fp: Fix issues with FP decompiler using new CFG system 2025-12-10 13:07:07 +03:00
kd-11 a7f5514913 rsx/cfg: Fix dependency injection tests for FP 2025-12-10 13:07:07 +03:00
kd-11 3bed46b844 rsx/fp/cfg: Fix IF/ELSE and LOOP node linkage 2025-12-10 13:07:07 +03:00
kd-11 e1ec2f58bb rsx/fp/asm: Fix ELSE encoding 2025-12-10 13:07:07 +03:00
kd-11 91e19652de rsx/cfg/gtest: Rewrite CFG tests using the assembler
- Also extend IF-ELSE test to catch a broken succession chain
2025-12-10 13:07:07 +03:00
kd-11 b244c0fa0f rsx/cfg/gtest: Update unit tests 2025-12-10 13:07:07 +03:00
kd-11 f4ba548748 rsx/fp/asm: Implement asm support for branches
- Allows creating more complex command sequences from text
2025-12-10 13:07:07 +03:00
kd-11 856eaac1b6 rsx/cfg: Implement dependency injection pass with branches 2025-12-10 13:07:07 +03:00
kd-11 8ff3dda5e8 rsx/cfg: Skip literal constants when annotating instructions 2025-12-10 13:07:07 +03:00
kd-11 fa40cef0b1 rsx/fp/cfg: Insert bi-directional edges correctly during traversal 2025-12-10 13:07:07 +03:00
kd-11 65b4bcb027 rsx/fp/asm: Add support for more instructions 2025-12-10 13:07:07 +03:00
kd-11 5a8ad219ba rsx/asm: Implement dependency barrier injection pass 2025-12-10 13:07:07 +03:00
kd-11 ed397c5d67 rsx/asm: Add support for more opcodes and add tests for mixed block IO 2025-12-10 13:07:07 +03:00
kd-11 13d66f324b rsx/shaders: Fix nix builds 2025-12-10 13:07:07 +03:00
kd-11 aaaa6feb5a rsx: Add UTs for register annotation pass and fix uncovered bugs 2025-12-10 13:07:07 +03:00
kd-11 88a54e2d98 rsx/fp: Add a basic assembler to aid in test authoring 2025-12-10 13:07:07 +03:00
kd-11 9d30716aa8 rsx: Implement register annotation pass 2025-12-10 13:07:07 +03:00
kd-11 e20bae3cd7 rsx/asm: Stub out register annotation and dependency passes 2025-12-10 13:07:07 +03:00
Megamouse aff645272f overlays/macOs: add some fallback fonts for cyrillic 2025-12-09 12:52:51 +01:00
Megamouse 27f39d2ac0 fmt: add more string_view versions of string functions 2025-12-08 19:49:42 +01:00
oltolm c840c98e9e bit_set.h: forward declare fmt_unveil
This change is necessary to fix the following clangd error in `StrFmt.h`

Redefinition of 'fmt_unveil'clang(redefinition)
bit_set.h(388, 8): Previous definition is here
2025-12-08 12:43:15 +02:00
RipleyTom adcacc1119 Remove RPCN test server 2025-12-08 09:16:52 +01:00
RipleyTom 65458effa6 RPCN v1.5.0 2025-12-08 09:16:52 +01:00
Antonino Di Guardo 0f1d516d9a Check available and required size when installing a package (#17829)
Show and check available and required size when installing a package.
Installation is not allowed, by disabling `Yes` and/or `Install` button,
if not enough disk space is detected.
On multi installation dialog box, installation size for each package is
reported in the list.

fixes #14440

</br>
</br>

### Single PKG installation - Not enough space available

![pr_single_no_space](https://github.com/user-attachments/assets/3fc83d3e-8219-4dca-a4ae-a351f3c4c662)

</br>
</br>

### Single PKG installation - Required space available

![pr_single_space](https://github.com/user-attachments/assets/84b6b4a0-ee4a-430e-b84f-60a754e0a4fa)

</br>
</br>

### Multi PKG installation - Not enough space available

![pr_no_space](https://github.com/user-attachments/assets/56af51a1-cd78-4ad5-818d-7707c0c45de4)

</br>
</br>

### Multi PKG installation - Required space available

![pr_space](https://github.com/user-attachments/assets/43cc66dd-7e98-46de-8dd3-859f8ebb2b05)

---------

Co-authored-by: Megamouse <studienricky89@googlemail.com>
2025-12-07 14:38:13 +01:00
oltolm 3f6529fecb UI: remove unnecessary QOverloads 2025-12-06 20:58:28 +01:00
schm1dtmac b76ca8807f (macOS) Support loading VK ICDs (in preparation for KosmicKrisp) 2025-12-06 19:21:54 +03:00
schm1dtmac 54206c62b3 Add OpenCV to macOS builds 2025-12-05 22:48:40 +01:00
Elad 67f7119717 Make RSX FIFO Atomic fetching default (#17810) 2025-12-04 18:17:39 +02:00
Megamouse 133b19f205 Update Qt for macOs to 6.10.1 2025-12-03 22:54:59 +01:00
Megamouse fce393024a Update Qt for macOs to 6.9.3 2025-12-03 22:54:59 +01:00
Megamouse 7d3cf831d5 Qt/macOS: Fix GUI freezes on Qt 6.8+ 2025-12-03 22:54:59 +01:00
Megamouse dc27047ed4 Qt: fix game list refresh order when changing the language 2025-12-03 21:17:46 +01:00
Megamouse b9a9c1af07 Qt: revert setting UserRole. this doesn't seem to have been the culprit for multiselection 2025-12-03 21:17:46 +01:00
Megamouse e3f5f2d14e cellPad: fix pad mode setters 2025-12-03 18:23:12 +02:00
Megamouse ff9401303b hidapi: switch to official libusb remote 2025-12-03 15:50:25 +01:00
kd-11 2a6f1cf35c rsx/common - work around macos posix_memalign quirks 2025-12-03 13:57:59 +03:00
Megamouse b86b4d15c6 Update SDL to 3.2.28 2025-12-03 09:33:51 +01:00
Megamouse 23ffa4ccdb Update FAudio to 25.12 2025-12-03 09:33:51 +01:00
Megamouse cbba687ffa Qt: Relax game_list deselection checks 2025-12-03 02:16:30 +01:00
Megamouse 613d428ced Qt: fix update note visiblity on linux/macOs 2025-12-03 01:12:00 +01:00
Ani 6489fca16b YoRHa: Fix the height of QSpinBox 2025-12-02 21:14:11 +00:00
Megamouse 3c747b377f Qt: fix translation of update dialog if the language was changed between downloading the json and clicking on update 2025-12-02 09:18:16 +01:00
Megamouse a859e14e19 Qt: update main window elements on language change 2025-12-02 09:18:16 +01:00
Megamouse 6dd37cb2d5 Qt: fix game list table multiselection
Apparently table items need one common role set for internal indexing.
2025-12-01 21:43:19 +01:00
Megamouse 7e8ed5ecc1 rsx: clear unused parameters on capture boot 2025-12-01 17:51:30 +01:00
Megamouse d396a778b7 rsx: fix capture path if title id is empty 2025-12-01 17:51:30 +01:00
Megamouse 25badf9534 Qt: Update header texts and actions when language changes 2025-12-01 14:49:04 +01:00
Megamouse 314b69c7d8 Qt: save spinbox values with fmt::format
This prevents saving localized strings with different decimal characters
2025-12-01 10:14:29 +01:00
Megamouse bc55f7787e Add notes for VS 2026 to BUILDING.md 2025-12-01 08:51:49 +01:00
Elad 4bda2f9b0f Test: Disable PUTLLC0 2025-11-30 18:31:50 +02:00
Elad d822d85ea1 SPU: Tame PUTLLC16 2025-11-30 18:31:50 +02:00
Elad 7001940483 SPU Analyzer: Be more strict with loads 2025-11-30 18:31:50 +02:00
Elad 3c5c74c496 SPU Cache debug 2025-11-30 18:31:50 +02:00
Megamouse c80aba2342 Update libpng to 1.6.51 2025-11-30 10:03:35 +00:00
Megamouse 84d5e42896 Update Qt to 6.10.1 2025-11-30 10:03:35 +00:00
Megamouse 53edd410c7 ppu: move alignment below llvm check 2025-11-30 09:23:36 +00:00
Megamouse 7f9cc357e8 Qt: Add sound effect manager 2025-11-30 09:23:36 +00:00
Megamouse e2cbbcf646 overlays: use enum for sound effects 2025-11-30 09:23:36 +00:00
Elad e938b93f48 SPU Analyzer: Ignore large switch state 2025-11-29 20:17:21 +02:00
Elad 4a042ae84f SPU/config: Make SPU LLVM Mega block size default 2025-11-29 18:24:01 +02:00
Elad c48ae344a8 SPU LLVM (Mega): Fix quarter of missing jumptable discoveries 2025-11-29 17:10:30 +02:00
Elad e09be04df6 Emu/UX: Automatic Cache Precompilation for PKG instal 2025-11-29 10:47:51 +02:00
Elad d625c1d004 SPU LLVM: Reduce notifications for PUTLLC16 2025-11-29 07:30:39 +02:00
Elad cae77784db UTs: Fix AlignedAllocator.Realloc test
_aligned_realloc may return the same pointer if the internal implementation finds it suitable. Fixes Windows' builds.
2025-11-29 07:30:39 +02:00
Elad 14bd6b0cc5 SPU: Enable PUTLLC16 by default
Experimental, may be reduced to specific patterns instead of being enabled globally.
2025-11-29 07:30:39 +02:00
Elad e11f8df064 PPU LLVM: Fixup PPU Profiler for PRX 2025-11-29 07:30:39 +02:00
Elad e2da6d36ba SPU LLVM: Permit relative-PC in PUTLLC16 with alignment check 2025-11-29 07:30:39 +02:00
Elad 27c2f2ae4d SPU Analyzer: Contnue with failed patterns until they proven failure 2025-11-29 07:30:39 +02:00
Elad 727f3dd7a1 SPU Analyzer: Try to detect no-return in BISL/BRSL 2025-11-29 07:30:39 +02:00
kd-11 7b560e5ffa rsx: Clean up aligned realloc implementation 2025-11-29 00:34:23 +03:00
rcaridade145 50c9a91942 rsx: Free previous pointer after reallocating memory
After realloc in simple_array free the memory referenced by the old pointer.
2025-11-28 21:54:45 +03:00
Elad d9f913016c Fix possible ambiguity of utils::bless (#17757)
Make utils::bless at util/bless.hpp argument type be complete, avoiding
possible ambiguity with RSX-utility version. A fix for Apple Clang
compiler.
2025-11-27 02:50:45 +02:00
kd-11 a442cb91a1 rsx/cfg: Check for end flag before handling any instruction including NOP 2025-11-27 02:53:34 +03:00
Elad 41aaa912e7 Fixup ::narrow (#17756)
Also fix negative signed to unsigned narrowing when source type is greater than destination.
2025-11-26 15:34:38 +02:00
Antonino Di Guardo 6ebdb0c0c1 Add an entry on Log panel's contextual menu to show the main disk usa… (#17715)
Added the entry `Show Disk Usage` on `Log` panel's contextual menu to
show the main disk usage of the emulator.
It reports VFS disk usage (with the exception of useless usb
directories) and cache disk usage.
I avoided to automatically display the disk usage, e.g. when refreshing
the game list, just because the disk usage calculation can require some
time (so it will slow down the emulator). So I opted to provide the
functionality on demand.
This PR is propaedeutic to pr6008. A separated PR to complete pr6008 will
follow. It will allow multiple selection of games on game list and a
contextual menu to manage the removal of the selected games.
2025-11-26 13:05:10 +02:00
Elad 914b52cf4a util/types.hpp: Fix signed/unsigned comparison error 2025-11-26 10:33:12 +02:00
kd-11 b451dfe877 vk: Fall back to host-visible pool if we cannot place resources in Re-BAR pool 2025-11-26 02:52:40 +03:00
kd-11 7986ee58de vk: Allow buffer creation to fail gracefully if placement is not possible 2025-11-26 02:52:40 +03:00
kd-11 5a9083e4fc rsx: Fix saw-tooth artifacts when using GPU deswizzle for small texel widths 2025-11-24 23:01:54 +03:00
kd-11 6a398f9947 rsx/cfg: Fix arm64 build 2025-11-24 16:48:03 +03:00
kd-11 8495a138c6 rsx/gtest: Fix unit tests build on GCC 2025-11-24 16:48:03 +03:00
kd-11 2c1d962bdc rsx/cfg: Replace 'avx512' intrinsics with SSE2-compatible ones
- These are just PAND and POR instruction wrappers for SSE2, no idea why they're classified as 'avx512'
2025-11-24 16:48:03 +03:00
kd-11 0fbd0e8cc7 rsx/gtest: Add tests for CFG BB succ edges and fix UT failures 2025-11-24 16:48:03 +03:00
kd-11 5c187f5cda rsx/fp: Use CFG to decompile fragment programs 2025-11-24 16:48:03 +03:00
kd-11 cb7650240c rsx/fp: Use CFG for fragment program 2025-11-24 16:48:03 +03:00
kd-11 9d92e190eb rsx/cfg: Add support for multi-slot instructions with literals
- Also fix pred edge direction bug
2025-11-24 16:48:03 +03:00
kd-11 42d9065c11 rsx: Add flow information to flow edges 2025-11-24 16:48:03 +03:00
kd-11 f300832edb rsx: Implement FP to CFG analyzer 2025-11-24 16:48:03 +03:00
kd-11 683baf46b2 rsx: Add find_if operation for simple_array<T> 2025-11-24 16:48:03 +03:00
Elad 89a13b75f7 SPU Analyzer: Fix jumptable append 2025-11-23 21:00:11 +02:00
Elad 7472d95b0c SPU Analyzer: Fix jumptable analysis for SPU Block Mega 2025-11-23 21:00:11 +02:00
Elad ecba1d2cb7 sys_fs: Remove PPU sleep hacks 2025-11-23 09:56:18 +02:00
oltolm fcff16b6f7 Fix Clang build and other small fixes (#17736)
1. I fixed the Clang build.
1. I removed what I think is an unnecessary `ptrtoint` in
`rpcs3/Emu/Cell/PPUTranslator.cpp`. I am not 100% sure that it's
correct, but I tested a small LLVM IR snippet and it didn't make a
difference. The ASM code was the same.
1. I also changed the definition of `prefetch_write` from `return
__builtin_prefetch(ptr, 1, 0);` to `return __builtin_prefetch(ptr, 1,
3);` because that's how `_m_prefetchw` is defined in GCC.
2025-11-23 07:11:36 +02:00
kd-11 a3f7c0d67f Fix typo 2025-11-22 12:35:22 +02:00
kd-11 98ca15699b Fix windows clang builds 2025-11-22 12:35:22 +02:00
kd-11 dec6fba68d gl: Use 16-byte alignment on staging buffers 2025-11-22 12:35:22 +02:00
kd-11 e1eb7421fb rsx: Enforce natural data alignment for IO buffers span cast 2025-11-22 12:35:22 +02:00
kd-11 ea7183b6bd test: Add unit tests for simple array alignment 2025-11-22 12:35:22 +02:00
kd-11 d6a36f4b60 vk: Fix build using new simple_array guard-rails 2025-11-22 12:35:22 +02:00
kd-11 6e11978638 rsx: Properly implement data alignment in simple_array<T> 2025-11-22 12:35:22 +02:00
kd-11 7f6842705c rsx: Rework GPU deswizzle kernel to prevent hangs 2025-11-22 01:49:31 +00:00
FeTetra 9deb6cd4fa Fix ppu_register_function_at with unaligned parameters (#17718)
This fixes some crashes in interpreter mode when calling functions like
`sys_dbg_write_process_memory` to write data which may not be an
instruction.

---------

Co-authored-by: Elad <18193363+elad335@users.noreply.github.com>
2025-11-21 16:07:47 +02:00
kd-11 e6d723c675 rsx: Fix 16-bit format hardware deswizzle 2025-11-21 11:52:35 +03:00
kd-11 400b4e71cf gl: Lower the GPU decoding requirements since each level is decoded separately 2025-11-21 11:52:35 +03:00
kd-11 3c3197d72d gl: Fix crashes when creating new context 2025-11-21 11:52:35 +03:00
kd-11 cffc13696d gl: Implement hardware deswizzle for small texel formats 2025-11-21 11:52:35 +03:00
kd-11 ff72f944ba rsx/vk: Add support for 8 and 16-bit texel GPU-accelerated deswizzle 2025-11-21 11:52:35 +03:00
kd-11 b067688c8e rsx: Drop meaningless log message
- This used to be a big deal a decade ago, now its just wasting CPU cycles and filling up log files
2025-11-21 11:52:35 +03:00
qurious-pixel 8ccc30725a Update install-freebsd.sh 2025-11-20 09:11:49 +02:00
qurious-pixel c38b8c6d12 restore [[noreturn]] 2025-11-20 09:11:49 +02:00
Elad 107d9dc533 PPU Profiler 2025-11-19 21:37:50 +02:00
Elad c669a0beb7 kernel_explorer: Order PPUs by priority 2025-11-17 21:32:58 +02:00
Elad f992ccdcad cellGam/celCamera: Add more wait flags 2025-11-17 21:32:58 +02:00
Elad e6dc0d98f5 SPU: Optimize check for args sharing page with Effective-Address 2025-11-17 21:32:58 +02:00
Elad 1250e428a7 SPU: Exclude reservation_check address receptacle from writer_lock 2025-11-17 21:32:58 +02:00
Elad ddecade935 vm/sys_memory: Remove VM locking in sys_memory_get_page_attribute 2025-11-17 21:32:58 +02:00
Megamouse de914247be overlays: remove unnecessary cast 2025-11-17 19:42:31 +01:00
Megamouse 6a51cd9f7f overlays: Use SCE-PS3-DH-R-CGB.TTF for chinese characters 2025-11-17 19:42:31 +01:00
Megamouse 2042b54d2d cmake: fix build with USE_FAUDIO if system SDL is not found 2025-11-17 19:42:31 +01:00
Megamouse 5267c87ca7 Overlays: check return value of stbtt_InitFont 2025-11-17 19:42:31 +01:00
Megamouse 6731feb751 overlays: add some more chinese fallback fonts 2025-11-17 19:42:31 +01:00
Megamouse 10f8a49e36 overlays: Check if a font actually contains the character 2025-11-17 19:42:31 +01:00
Megamouse a6371ef5d3 overlays: use get_font instead of duplicate font fallback 2025-11-17 19:42:31 +01:00
Megamouse 2d3e6c6d02 overlays: use std::string_view for font functions 2025-11-17 19:42:31 +01:00
Elad 9b1d39c14e SPU Analyzer: Fix spu_thread::is_exec_code for BRSL 2025-11-17 10:32:08 +02:00
Elad 5893851029 Core: Remove Intel-TSX ISA Extension based code 2025-11-17 10:32:08 +02:00
Megamouse 42177add17 Qt: fix image flip warning on newer Qt 2025-11-17 03:46:06 +02:00
Megamouse 84fdd2e056 rsx_debugger: fix gcc index access warning 2025-11-17 03:46:06 +02:00
Megamouse bc01863654 Fix some warnings 2025-11-17 03:46:06 +02:00
Megamouse cbb4dd8f22 Qt: forward declare gui_settings 2025-11-17 03:46:06 +02:00
oltolm 0439b62257 SPU Analyzer: use std::lexicographical_compare_three_way
It should compile now because we upgraded Linux CI.
2025-11-16 22:57:16 +02:00
oltolm a93197cdcb asm.hpp: replace custom functions with C++20 functions 2025-11-16 20:05:00 +02:00
oltolm b8031f4510 StrFmt.h: fix build with Clang 2025-11-16 20:05:00 +02:00
Elad db8437b01c Fix mask calculation in SPUThread.cpp 2025-11-16 12:12:20 +02:00
Elad 63f7bcf652 SPU: Use CMPXCHG16B for atomic store if possible 2025-11-16 12:12:20 +02:00
Elad 109abea454 sys_ppu_thread: Fix warning 2025-11-16 12:12:20 +02:00
Megamouse c7ae97f8ea Qt: add button to remove gamepad config 2025-11-16 01:19:43 +01:00
oltolm d61f4101ad utils: replace hex_to_u64 with std::from_chars 2025-11-15 21:33:29 +02:00
qurious-pixel ec70c9691f [Mac Arm64] Use runner ccache
Remove HomeBrew ccache in favor of Mac runner
2025-11-15 21:08:47 +03:00
Megamouse 18111ac8bc rsx: add simple pair and tuple types 2025-11-15 17:40:49 +02:00
Megamouse 5a761c7184 rsx: only allow trivially copyable types in simple_array 2025-11-15 17:40:49 +02:00
Megamouse 510ed00b11 rsx: fix some warnings 2025-11-15 17:40:49 +02:00
Megamouse fa06fed86f overlays: take screenshot after exiting the home menu 2025-11-15 14:55:09 +01:00
Megamouse 871dd729b2 cheats: fix cheat type on apply 2025-11-15 13:22:52 +01:00
Elad 7e209a7275 sys_spu: Improve arguments accuracy 2025-11-15 12:31:22 +02:00
Elad 0bb84b374e sys_ppu_thread: Fix u64 stack size argument 2025-11-15 12:31:22 +02:00
Elad 92e24a5779 PPU/x64: Fix gv_cvtu32_tofs 2025-11-14 21:15:27 +02:00
Elad e48ba283d8 Overlays/SaveStates: Add multi-slot support to controller menu 2025-11-12 15:57:53 +02:00
kd-11 0bf9ee9fa5 rsx: Fix an oops causing DEVICE_LOST
- We only apply scaling when RTTs are part of the input set.
- This fact was previously hidden by an optional arg
2025-11-11 01:04:31 +03:00
Elad c60e5cc48a ZSTD: Fixup threads terminations 2025-11-10 21:16:31 +02:00
Elad 642005cf1d Add wait flag in cellGemConvertVideoFinish 2025-11-10 21:16:31 +02:00
Elad b0956a8f74 More logging to sys_memory_allocate_from_container 2025-11-10 21:16:31 +02:00
Elad 2fb8cbda38 SaveStates/ZSTD: Improve termination and file handling 2025-11-10 13:04:43 +02:00
Elad c16278a5ab vm.cpp: Skip memory clearing on emulation stop 2025-11-10 13:04:43 +02:00
Elad bfe54a29ae Savestates/TAR: Extract files asynchronously 2025-11-10 13:04:43 +02:00
kd-11 265d6643e5 rsx: Fix shader interpreter 2025-11-09 17:29:22 +03:00
kd-11 d87f055bb2 vk: Fix hang when doing typeless copy in the resource assembler 2025-11-09 14:24:44 +03:00
kd-11 1af5afdaab vk: Reduce number of barriers for each copy transfer sequence
- Sometimes the same source image is copied more than once
2025-11-09 14:24:44 +03:00
kd-11 864bb9f0db rsx: Speed up slice gathering for large datasets
- We can cut down by an order of magnitude the amount of checks we do to construct objects
2025-11-09 14:24:44 +03:00
kd-11 1007aaee4c rsx: Refactor texture cache lookup core to be easier to read 2025-11-09 14:24:44 +03:00
Elad 8126a199f5 SPU: Fix race in PUTLLC with unchanged data 2025-11-08 16:20:18 +02:00
Joshua de Reeper b435deac9d sys_usbd: Small tidyups 2025-11-08 12:55:44 +02:00
shinra-electric 8a9b15dee3 Bump MoltenVK to v1.4.0 2025-11-07 22:26:41 +01:00
kd-11 c5a54a3d4f gl: Ensure overlays render in fill mode 2025-11-07 23:47:47 +03:00
kd-11 bcdf2ef36f gl: Implement polygon render modes 2025-11-07 23:47:47 +03:00
robotics13 3df0c8caef Synced Skylander variant IDs with values from Dolphin for #13315 2025-11-06 20:28:23 +01:00
FlexBy420 50eb46d294 download from releases instead 2025-11-05 23:30:17 +01:00
FlexBy420 ff922f6324 Update deploy-windows-clang.sh 2025-11-05 23:30:17 +01:00
FlexBy420 1e1da422ea Update deploy-windows-clang.sh 2025-11-05 23:30:17 +01:00
FlexBy420 3e5a035046 eh update macos-arm path again 2025-11-05 23:30:17 +01:00
FlexBy420 6e5338d091 update macos path again 2025-11-05 23:30:17 +01:00
FlexBy420 d73a7e0ff3 change translations location to a correct one (probably) 2025-11-05 23:30:17 +01:00
FlexBy420 a6c0433a2e forgot mkdir 2025-11-05 23:30:17 +01:00
FlexBy420 ca5a43a3ab macos support maybe? 2025-11-05 23:30:17 +01:00
FlexBy420 4710b38505 linux support 2025-11-05 23:30:17 +01:00
FlexBy420 9cde97c22b remove echo 2025-11-05 23:30:17 +01:00
FlexBy420 323f504138 comment 2025-11-05 23:30:17 +01:00
FlexBy420 d7df929ada Update deploy-windows.sh 2025-11-05 23:30:17 +01:00
Megamouse 2667d5de0f input: change default squircle value to 4000
The last squircle changes fixed a bug that caused the squircle to be too
large. This caused the previous default value of 8000 to be too circular
2025-11-05 22:39:34 +01:00
Megamouse 49548b913d rsx: fix some warnings 2025-11-05 21:56:26 +01:00
Megamouse 17c148d90e Update curl to 8.17.0 2025-11-05 21:56:26 +01:00
Megamouse 17621d2a5e Update FAudio to 25.11 2025-11-05 21:56:26 +01:00
kd-11 8984c2b316 rsx: Implement pixel_center_origin decorator for WPOS 2025-11-05 18:26:12 +03:00
kd-11 5d906e1da4 rsx: Whitespace fix 2025-11-05 18:26:12 +03:00
kd-11 dba48d6387 rsx: Invalidate surface cache slots that are trampled by buffer writes. 2025-11-05 18:26:12 +03:00
Joshua de Reeper 0403231a0d sys_usbd: fix id/type combo for Kamen Rider Display (#17662)
Fixes the display issues seen here:
https://github.com/RPCS3/rpcs3/issues/17653
2025-11-04 19:57:53 +01:00
Elad 8712414123 System.cpp: Check if the original EBOOT.BIN is valid for disc game updates 2025-11-03 12:04:11 +02:00
oltolm 2485a98d4f cmake: simplify code 2025-11-02 21:41:11 +00:00
Elad cc8929ef4a PSF.cpp: Fixup 2025-11-02 17:23:46 +02:00
Elad ede8382c6a Remove std::strcpy 2025-11-02 14:22:11 +02:00
Megamouse dc22584f72 input: always apply stick multiplier when no analog limiter button is set 2025-11-01 08:44:04 +01:00
Megamouse 7cb4a68043 Qt: fix type conversion warning 2025-10-31 19:55:03 +01:00
Megamouse ded91329bc Update SDL to 3.2.26 2025-10-31 19:55:03 +01:00
Joshua de Reeper 81f5be30aa sys_usbd: Emulate Kamen Rider Summonride Ride Gate (#17605)
This PR aims to implement another USB peripheral device, used in Kamen
Rider Summonride. Code is very similar to Skylanders (for the
loading/creating/removing of figures) and Disney Infinity for the actual
USB commands and responses (minus any of the built in random number
generation). I haven't been able to generate a full list of the Ride
Chips (see
[here](https://kamenrider.fandom.com/wiki/Kamen_Rider_Summonride#Characters)
for a list of Characters and Chips) besides the ones I have myself from
the Starter Set, so I am hoping that interested parties are able to play
around and discover what other chips there may be, or if there are any
issues when generating their own Characters and Chips.

Implements https://github.com/RPCS3/rpcs3/issues/17122
2025-10-31 18:17:51 +01:00
Elad ba2518f862 cellGame: Fix cellHddGameCheck dataVersion parameter 2025-10-30 21:34:54 +02:00
shinra-electric 3a6c71e523 Explicitly copy libunwind for x86 2025-10-29 14:53:53 +01:00
shinra-electric 8013129c5b Copy libc++abi to Frameworks instead of lib 2025-10-29 14:53:53 +01:00
shinra-electric 5ea92df4ca Cleaner export of LDFLAGS 2025-10-29 14:53:53 +01:00
shinra-electric afffd3061a Make hack for removing rpath failable 2025-10-29 14:53:53 +01:00
shinra-electric 8ea2109b37 Workaround for issues with Python and brew libc++ linkage on x86 2025-10-29 14:53:53 +01:00
shinra-electric fa8f35ea38 Bump llvm version from 19 to 21 2025-10-29 14:53:53 +01:00
Megamouse 50576d044b Qt: fix TSX warning style 2025-10-29 14:26:49 +01:00
Megamouse 3f797b2de3 VK: cache recording image 2025-10-28 22:04:01 +01:00
Megamouse 9124d08fdb GL: flip overlays vertically during recordings 2025-10-28 22:04:01 +01:00
Megamouse e4ae5bdce1 GL: only create new texture when necessary 2025-10-28 22:04:01 +01:00
Megamouse 5f37f2c8df VK: add memory barriers to copy_image 2025-10-28 22:04:01 +01:00
Megamouse 9dc66b46fc overlays: add record with overlays setting to settings dialog 2025-10-28 22:04:01 +01:00
Megamouse 0ca4f85dc7 overlays: add record with overlays setting to home menu 2025-10-28 22:04:01 +01:00
Megamouse 9c512849ef Vk: allow to record overlays 2025-10-28 22:04:01 +01:00
Megamouse 9550d5b67d GL: allow to record overlays 2025-10-28 22:04:01 +01:00
Megamouse dd40f49e5f Add new option for recording overlays 2025-10-28 22:04:01 +01:00
Megamouse 90fb81d1d9 Use move semantics for present_frame 2025-10-28 22:04:01 +01:00
Megamouse 3c401e7b3d Update fusion to 1.2.9 2025-10-26 09:20:32 +02:00
Megamouse dc53a3ba42 Update linux docker image to v.1.7 2025-10-26 09:20:32 +02:00
Live session user 3c1ebe9f4a [openal-soft] Fix malloc/free in fmtlib 2025-10-25 14:52:43 +03:00
kd-11 73c984a637 vk: Filter out re-bar usage from memory pressure watchdog 2025-10-24 12:51:03 +01:00
Elad ae30cb5557 SaveStates/SPU-LLVM: Fix SPU Access Violations on load 2025-10-23 19:00:42 +03:00
kd-11 311e7a9992 vk: Make best-effort attempt to utilize the low-latency pool 2025-10-22 20:20:07 +03:00
Elad 2f86f95c3f vm: Deallocate memory early, check no PS3 memory leaks 2025-10-22 10:55:48 +03:00
RipleyTom f61aaf83f6 More communication id validation changes 2025-10-21 21:27:55 +03:00
RipleyTom 66920b4d8f Improve sceNpSignalingGetLocalNetInfo 2025-10-21 17:17:05 +03:00
engdyn 038ee090b7 Fix build with Qt 6.10 2025-10-21 13:58:25 +01:00
RipleyTom 6a028b1883 Relax SceNpCommunicationId validation 2025-10-21 11:32:15 +03:00
Elad 64e5a8c099 SaveState Manager: Add option to boot last savestate 2025-10-21 04:27:54 +03:00
Elad abad7f2790 SaveState Manager: Format specially close dates 2025-10-21 04:27:54 +03:00
Elad c683b47ac3 SaveState Manager: Fix game specific filtering 2025-10-21 04:27:54 +03:00
kd-11 0c4e7fc178 vk: Do not access async scheduler if not explicitly initialized 2025-10-18 14:05:06 +03:00
kd-11 c4fba680d1 vk: Fix broken bound object comparison 2025-10-17 23:22:22 +03:00
kd-11 0d1a05ecd1 vk: Make buffer objects uniquely identifiable 2025-10-17 23:22:22 +03:00
kd-11 eb453462c1 vk: Use unique resource ids on buffer views 2025-10-17 23:22:22 +03:00
kd-11 5a91ed01eb vk: Rework the unique resource id system and apply it to buffer views 2025-10-17 23:22:22 +03:00
Megamouse 2fcd542b0b overlays: allow to update messages by id instead of text 2025-10-16 18:02:01 +02:00
Megamouse 146619de91 Qt: Allow to clear keyboard shortcuts in dialog 2025-10-15 23:27:10 +02:00
Marin Baron 41a122a266 [Build] Explicit Triple with LLVM 21.1.0 2025-10-15 20:09:21 +02:00
Elad 1c0fa2ad58 SaveStates: Improve try_lock_spu_threads_in_a_state_compatible_with_savestates 2025-10-15 17:16:32 +03:00
Megamouse a053abfba4 ffmpeg: update cellAtracXDec to ffmpeg 7 2025-10-14 21:12:39 +02:00
Elad e5848f4731 Qt: Fix savestate failuire message 2025-10-14 08:16:02 +03:00
Elad 32a18795fb Debug: Apply SPU Profiling data if debug enabled 2025-10-14 08:16:02 +03:00
Elad 6b556ca5b0 SaveStates: Fix Gem Thread Reboot 2025-10-14 08:16:02 +03:00
kd-11 a5b5ac1ed5 rsx: Fix user clip plane encode/decode 2025-10-14 01:51:57 +03:00
kd-11 1cae72c872 vk: Uniquely identify images using a monotonic incrementing counter 2025-10-13 12:12:22 +03:00
kd-11 878bb12a72 vk: Add support for blackwell PCI IDs 2025-10-13 12:12:22 +03:00
kd-11 e0249b05d2 vk: Improve documentation and remove notifications from instancing buffer 2025-10-13 12:12:22 +03:00
kd-11 1fa5286c87 vk: Raise heap changed interrupt when growing persistently bound SSBOs
- Using stale VAs leads to crashes for obvious reasons (UAF)
2025-10-13 12:12:22 +03:00
kd-11 f3f0c7d8da vk: Restore thread safety locks to descriptor routines 2025-10-13 12:12:22 +03:00
kd-11 afb814788f vk: Fix shader interpreter compilation and crashes 2025-10-13 12:12:22 +03:00
kd-11 efa4c6c34e gl: Reimplement user clip planes using the new ABI 2025-10-13 12:12:22 +03:00
kd-11 f3e34e1d44 vk: Fix user clip planes 2025-10-13 12:12:22 +03:00
kd-11 ce304f33de vk: Don't use rebar for transform constants data
- These heaps see massive writes, upto 8KB per draw in worst case scenarios. Write combining yields better throughput.
2025-10-13 12:12:22 +03:00
kd-11 c42fe42787 vk: Add re-bar toggle to GUI 2025-10-13 12:12:22 +03:00
kd-11 20a7297ac4 vk: Use BAR memory pool for low-latency resource uploads 2025-10-13 12:12:22 +03:00
kd-11 21809731e2 vk: Decorations for readonly SSBOs 2025-10-13 12:12:22 +03:00
kd-11 d770c7d7fa vk/exp: Remove unnecessary locks and optimize VS
- Hoists the most common pointer-chase to local var
2025-10-13 12:12:22 +03:00
kd-11 89e1c3ecfa rsx/vk: Update shader interpreter to use new varying draw params model 2025-10-13 12:12:22 +03:00
kd-11 f76ae4619b vk: Pass draw parameters to FS via varying register
- Should be better than pointer chasing with OpAccessChain + OpLoad
2025-10-13 12:12:22 +03:00
kd-11 2945ff1016 gl: Fix compilation error when using clip planes 2025-10-13 12:12:22 +03:00
kd-11 51e1ff4976 vk: Fix shader compiler issues caused by broken preprocessor macro expansion 2025-10-13 12:12:22 +03:00
kd-11 87677cfc85 vk: Guard against concurrent access of storage pool under high pressure and MTRSX. 2025-10-13 12:12:22 +03:00
kd-11 3ee626ce3c vk: Rewrite descriptor write template management 2025-10-13 12:12:22 +03:00
kd-11 c4426b0f07 rsx: Fix shader interpreter compilation 2025-10-13 12:12:22 +03:00
kd-11 1a5ec26392 vk: Fix shader compilation for certain glslang versions 2025-10-13 12:12:22 +03:00
kd-11 2275e689ce rsx: Restore optimizations in fragment shader recompiler 2025-10-13 12:12:22 +03:00
kd-11 10741a97ea vk: Improved state cache tracking 2025-10-13 12:12:22 +03:00
kd-11 1cc0446bc1 vk: Fix raster-env buffer type 2025-10-13 12:12:22 +03:00
kd-11 cec7ace28b vk: Fix shader compilation with fog parameters 2025-10-13 12:12:22 +03:00
kd-11 6e4f380e36 vk: Move polygon stipple parameters to fixed array buffer 2025-10-13 12:12:22 +03:00
kd-11 d68e4acb50 vk: Fix stale pointer reference when back-to-back partial updates are interrupted by a shader swap 2025-10-13 12:12:22 +03:00
kd-11 052ebe5acf vk: Fix windows build 2025-10-13 12:12:22 +03:00
kd-11 128267a236 vk: Fix wpos computation 2025-10-13 12:12:22 +03:00
kd-11 b1365a051d vk: Implement state tracking for command buffers
- Only tracks the heavy items for now. Binding the same pipeline or descriptor set causes some drivers to perform expensive operations (RADV, AMDVLK)
2025-10-13 12:12:22 +03:00
kd-11 3452aaf5d5 vk: Combine all draw-time constants to a single struct and update only the offset id
- Reduces push constants consumed per draw to 4 bytes total
2025-10-13 12:12:22 +03:00
kd-11 335f3dbe2f vk: Implement descriptor write buffering 2025-10-13 12:12:22 +03:00
kd-11 97620c4e17 rsx: Prepend namespace for simple_array uses
- Simplifies migration later on with find+replace in case we promote this useful class to utils namespace
2025-10-13 12:12:22 +03:00
kd-11 75f759079a rsx: Use simple array for texcoord stack
- Saves an expensive allocation when these ephemeral objects are constructed
2025-10-13 12:12:22 +03:00
kd-11 315ffed12f rsx: Simplify descriptor set contract a bit
- Making the functions sometimes destructive is confusing
2025-10-13 12:12:22 +03:00
kd-11 c347435151 vk: Move texture parameter stream to SSBO layout 2025-10-13 12:12:22 +03:00
kd-11 183acd4196 vk: Move FS context vars to block format 2025-10-13 12:12:22 +03:00
kd-11 1e40081d1f rsx/common: Add reverse_ptr impl to VS tree 2025-10-13 12:12:22 +03:00
kd-11 cd3e4fc8f1 rsx: Fix bugs in fragment program constants stream maagement
- Fix misplaced semicolon in GL fragment program compiler
- Add a simple lookup to avoid silly reverse-indexing issues in FP::AddConst
2025-10-13 12:12:22 +03:00
kd-11 e860cc9fad vk: Fix vertex context indexing 2025-10-13 12:12:22 +03:00
kd-11 aa119e1413 vk: Fix fragment constants indexing 2025-10-13 12:12:22 +03:00
kd-11 33e4b11509 vk: Fix use of push constants
- The double-overhead is so not worth it. Better to remove it down the line.
2025-10-13 12:12:22 +03:00
kd-11 5911330f8b rsx: Fix bug in reverse_iterator for simple_array 2025-10-13 12:12:22 +03:00
kd-11 e0e0d1ee0b rsx/vk: Convert fragment constants from static struct to array of vec4
- Also allows vulkan to use full-range binding model
2025-10-13 12:12:22 +03:00
kd-11 3188cb4a5a rsx: Enhance unordered_map declaration to be more versatile 2025-10-13 12:12:22 +03:00
kd-11 a3e6bdd8e4 rsx: Replace use of small vectors with simple_array 2025-10-13 12:12:22 +03:00
kd-11 ecc0fe4678 vk: Move draw-time constants to vertex layout stream and make it SSBO 2025-10-13 12:12:22 +03:00
kd-11 a819b9fc2a vk: Get basic vertex shaders working without traditional UBOs 2025-10-13 12:12:22 +03:00
kd-11 a4eccb259a vk: Fix allocation of vertex env data 2025-10-13 12:12:22 +03:00
kd-11 6e1436f1cd vk: Start converting UBO bindings to SSBO indexed arrays 2025-10-13 12:12:22 +03:00
Megamouse 9e49b9100f Qt: fix some warnings 2025-10-10 13:02:04 +02:00
Megamouse 950c7768bc cellL10n: fix ucs2 type 2025-10-10 13:02:04 +02:00
Megamouse 13bb9a2041 vm.cpp: remove unused variable 2025-10-10 13:02:04 +02:00
Megamouse 44e875618f cellPad: Fix some warnings 2025-10-10 13:02:04 +02:00
Megamouse 25fbdfb43a Qt/Input: Adjust pad settings dialog based on pad capabilities 2025-10-10 13:02:04 +02:00
Megamouse 43c4947cb9 Update Qt to 6.10.0 2025-10-10 10:54:39 +02:00
Elad b18a0830f3 Multi-Slot Savestates 2025-10-07 13:33:58 +03:00
RipleyTom 48bf30aa2d Fix sceNpManagerGetAccountRegion's returned language 2025-10-05 09:01:03 +03:00
RipleyTom f05fabdb79 Change sceNpManagerGetMyLanguages languages priority 2025-10-04 19:23:38 +03:00
Elad 274fec7bd0 Pull Request #17543: review fixes 2025-10-04 15:48:30 +03:00
derole 86b7ccef93 sys_ss/RPCN: Add PSID randomisation 2025-10-04 15:48:30 +03:00
Megamouse 054000fb37 Update SDL to 3.2.24 2025-10-04 13:54:07 +02:00
Megamouse 76cdcc9f32 Update FAudio to 25.10 2025-10-04 13:54:07 +02:00
Elad e8aa1caa4e Config: Implement 128-bit setting entry type 2025-10-03 19:46:01 +03:00
Elad 4141f76105 Win32/vm_native.cpp: Improve sparse memory file mapping robustness 2025-10-03 15:06:19 +03:00
Ani 23b339d410 rpcs3_version: Bump to 0.0.38 2025-09-30 22:49:18 +01:00
Ani cc01b0f0dc yorha: Style QScrollbar 2025-09-30 21:58:45 +01:00
Ani 4d28a14c33 yorha: Tag r4 theme update 2025-09-30 21:58:45 +01:00
Ani 15178da4e3 yorha: Fix excessive QSpinBox height 2025-09-30 21:58:45 +01:00
Ani edda8bc490 yorha: Fix background on savestate manager 2025-09-30 21:58:45 +01:00
Ani 41cf61dcf7 yorha: Unify QCheckBox and QList/QTree indicator styling
Fixes styling of checkboxes inside LLE/HLE and Game Patches selector
2025-09-30 21:58:45 +01:00
Ani 4f8184a6a6 yorha: Fix left padding on QDockWidget titles 2025-09-30 21:58:45 +01:00
Ani 3017085a44 yorha: Only modify QMenuBar height on the main menu bar 2025-09-30 21:58:45 +01:00
Gustavo Graziano 506e927df5 Windows 11 Themes
I added 2 new Windows 11 themes Dark and Light
2025-09-30 20:52:32 +01:00
Ani 8f776e14a2 cubeb: Update to 2025-09-17 2025-09-30 20:20:35 +01:00
Megamouse 5b3c70fb18 Update Qt to 6.9.3 2025-09-30 20:10:11 +02:00
Swordmaster3214 6fe6c4e0f6 Enhance Infinity Manager Figure Creator Dialog (#17529)
## Summary
This will enhance and add filters for the Figure Creator dialog of
Infinity manager, adding selectable filters for the character dropdown
and displays the series number after the figure/power disc.

## Changes
- Added filter buttons for Disney Infinity 1.0, 2.0, 3.0, and "All"
- Character names now display series information (e.g., "Buzz Lightyear
(1.0)")
- Dynamic dropdown population based on selected filter
- Maintains all existing functionality and slot validation

## Benefits
- Easier character discovery in large character lists
- Better organization by game series
2025-09-28 22:29:54 +02:00
schm1dtmac 359163c442 Second set of Intel build optimisations (massive speedups, cold builds around 22mins now) & other cleanups 2025-09-25 18:22:02 +01:00
schm1dtmac 0b89b1b912 Cleanup & optimise the macOS CI scripts 2025-09-25 18:22:02 +01:00
isJuhn 6451c4d49f Fix calloc patches in the middle of blocks 2025-09-25 15:17:21 +03:00
Megamouse 8163c6c041 cellPad: simplify output button logic 2025-09-24 08:33:07 +02:00
Elad 29108e1cb4 PPU LLVM: Filter out functions with patches 2025-09-22 17:03:31 +03:00
fentbuscoding 6bc690491f Audio Processing Improvements (#17525)
This pull request introduces several improvements to the audio backend,
focusing on more accurate and higher-quality audio processing, smoother
transitions, and better volume control. The main changes include
enhancements to volume application and normalization, improved resampler
settings for higher audio fidelity, and more user-friendly volume
adjustment behavior.

**Audio Processing Improvements:**

* Added fast paths for unity gain and mute in `apply_volume_static`,
improving performance and precision when volume is unchanged or set to
zero. Also, improved floating-point comparison in `apply_volume` to
avoid infinite loops and ensure accurate volume ramping.
[[1]](diffhunk://#diff-a81b131fe4d35d635646418ea2196cd28208dc3e1b2ff72c29f606bf963e1a92R62-R78)
[[2]](diffhunk://#diff-a81b131fe4d35d635646418ea2196cd28208dc3e1b2ff72c29f606bf963e1a92R111-R129)
* Enhanced normalization in `normalize` by introducing soft clipping for
smoother distortion and better dynamic range handling, reducing harsh
audio artifacts.

**Audio Quality Enhancements:**

* Updated resampler settings in `audio_resampler` to prioritize audio
quality over latency by increasing sequence length, improving overlap
and seeking window, disabling quick seek, and enabling anti-aliasing
filtering.

**Volume Control Improvements:**

* Implemented non-linear volume scaling in `audio_utils.cpp` for more
precise control at low volumes and faster adjustment at high volumes,
resulting in a more natural user experience.

**Code Quality and Consistency:**

* Refactored several methods in `AudioBackend` to use consistent
formatting and clearer logic, and increased `VOLUME_CHANGE_DURATION` for
smoother volume transitions.
[[1]](diffhunk://#diff-f0ca92a07863205fb9a1c687e4eaf14c932446e72b095f5265a8e7dbef2b7236L96-R98)
[[2]](diffhunk://#diff-f0ca92a07863205fb9a1c687e4eaf14c932446e72b095f5265a8e7dbef2b7236L108-R129)
[[3]](diffhunk://#diff-f0ca92a07863205fb9a1c687e4eaf14c932446e72b095f5265a8e7dbef2b7236L388-R400)
* Added missing includes and improved formatting for better
maintainability.
[[1]](diffhunk://#diff-a81b131fe4d35d635646418ea2196cd28208dc3e1b2ff72c29f606bf963e1a92R5-R6)
[[2]](diffhunk://#diff-49dc42f5cf17be84cfe84c0911320ab86307bef6095a09ccf743d4af5e32d3a5R7)
[[3]](diffhunk://#diff-f0ca92a07863205fb9a1c687e4eaf14c932446e72b095f5265a8e7dbef2b7236L187-R199)
2025-09-22 09:06:18 +03:00
Elad 9524211b9a sys_spu: Untangle IDM mutex from sys_spu's 2025-09-21 18:22:38 +03:00
Elad 9d020a3e59 SPU: Fix Max SPURS Threads Limit 2025-09-21 17:11:40 +03:00
Elad d92ebf7b31 SPU: Fix group wakeup 2025-09-21 17:11:40 +03:00
Megamouse 1667998b4e SDL: call SDL_PumpEvents from main thread 2025-09-21 10:07:02 +02:00
isJuhn 6b87423293 Fix rc variants of ADDE and SUBFE in interpreter 2025-09-20 20:22:48 +03:00
Elad 3e701a743b Win32/SPU: Respect home space / shadow space on the stack frame 2025-09-19 12:28:51 +03:00
Elad ffeb16fe1e Win32: Respect home space / shadow space on the stack frame (#17514)
Previous code did not respect the 32-byte long area on the stack frame
called the home space - area on the stack frame area that is specific to
Microsoft's x64 calling convention, leading to corrupted values after a
callback.
Bug noticed by @capriots

Co-Authored-By: capriots <29807355+capriots@users.noreply.github.com>
2025-09-19 11:46:39 +03:00
Megamouse e995511c57 Revert "Update wolfssl to 5.8.2"
This reverts commit 99b3c45f05.
2025-09-19 02:24:11 +01:00
Megamouse cc3b1163f1 Qt: Fix savestate table selection style 2025-09-18 23:33:46 +02:00
kd-11 335ed8d91b vk: Fix invalidated surface_cache resource deletion bug 2025-09-16 16:33:52 +03:00
Megamouse 1a7d702e4e Qt: Check if movie item changed and is valid before calling the callbacks 2025-09-16 11:05:21 +02:00
Megamouse 25925f2680 qt: use the same date format in all managers 2025-09-15 00:06:30 +02:00
Megamouse 0daa6d6fb0 rsx: allow to toggle 3D modes dynamically
A new checkbox for 3D support needs to be enabled at boot though.
2025-09-14 14:08:22 +02:00
Megamouse 6106e8f79f rsx: fix 3D aspect ratio 2025-09-12 21:18:13 +02:00
Megamouse a2a3ce1d7a cellMouse: Add debug overlay 2025-09-12 04:10:19 +02:00
Megamouse c36d01b46b Update curl to 8.16.0 2025-09-11 22:14:28 +02:00
Megamouse b3d5493a6b input: restore original defaults when changing pad handlers
This fixes the vibration threshold being 0 when going to DS3 and back.
Probably also fixes a lot of other tiny bugs.
2025-09-11 10:24:08 +02:00
Megamouse 735588aa1a qt/input: add vibration threshold to pad settings dialog 2025-09-11 10:24:08 +02:00
Megamouse 0876a7d37e input: Memorize original small motor value for display purposes 2025-09-11 10:24:08 +02:00
Megamouse aca9d28a7a input: simplify VibrateMotor constructor 2025-09-11 10:24:08 +02:00
Megamouse 6911d0b5e1 cellPad: Add DS3 motor speed threshold
Also add motor speeds to pad debug overlay
2025-09-11 10:24:08 +02:00
Megamouse eb6d13a8c0 System: expose date format and time format as settings 2025-09-10 19:51:43 +02:00
Antonino Di Guardo 09f8c6ddcd Add selection on firmware libraries panel by double-clicking (#17481)
I minor, and last, follow up of #17459 and #17442 allowing to
check/uncheck an entry in the firmware libraries panel by
double-clicking.
For that panel, a solution based on single-clicking was preferrable but
it seems it was conflicting with the existing itemChanged (single click
was triggered twice so producing no state change).
IMO, better than nothing.

---------

Co-authored-by: Megamouse <studienricky89@googlemail.com>
2025-09-10 16:25:47 +02:00
Megamouse f63bb4c7fb input: fix sdl pad handler LED and rumble properties 2025-09-08 21:20:21 +02:00
Antonino Di Guardo 28920f1781 Fix emulator crash when a pad gets disconnected (e.g. due to inactivity) (#17478) 2025-09-07 21:21:35 +02:00
Megamouse e457dbdea3 Update opencv to 4.12.0 2025-09-07 17:32:25 +02:00
Elad c76a3366ec Network: Increase P2P listener thread rest duration (#17474)
1 milisecond is not enough time for WSAPoll to be CPU time efficient, 5 miliseconds seems to address it.
2025-09-07 13:03:36 +03:00
Elad 0564842871 SPU: Restore postponed LR notifications (with tweaks) 2025-09-06 00:05:46 +03:00
Elad f84df03651 SPU: Limit SPU self notifying thread to 12+ threaded CPUs 2025-09-05 11:11:03 +03:00
Elad fc62733d65 SPU: Self-notifying SPU waiters 2025-09-05 11:11:03 +03:00
Elad cfe1eca185 SPU: Reimplement reservation notifications 2025-09-05 11:11:03 +03:00
Megamouse 34a9d03d3d Update SDL to 3.2.22 2025-09-02 23:29:54 +02:00
Megamouse 79fa06f9d6 Update FAudio to 25.09 2025-09-02 23:29:54 +02:00
Megamouse c7de9053b4 Qt: fix saved gs_frame visibility 2025-09-02 00:30:44 +02:00
Antonino Di Guardo 6d1a85b947 Minor improvements and cleanup on VFS panel (#17459) 2025-09-01 20:44:00 +02:00
Megamouse 4800aa9bfc Update Qt to 6.9.2 2025-08-29 21:17:30 +02:00
RunnerFaith 92a30b4e41 Fix raw mouse handler keypress logic 2025-08-27 20:50:38 +02:00
schm1dtmac 6b238d847f Fix mvk formulae causing builds to fail 2025-08-25 19:21:56 +02:00
Antonino Di Guardo 3a13da3201 asm.hpp: Make utils::rational_mul<u64>() consistent (#17452) 2025-08-24 19:12:35 +03:00
Megamouse 4332d2151e vfs_dialog: ensure that one item is always selected 2025-08-24 10:26:46 +02:00
Megamouse e56bc9d15f vfs_dialog: allow to check list items with double-click 2025-08-24 10:26:46 +02:00
Megamouse ce4edf9cb1 patch_manager: make patches selectable by double click 2025-08-24 10:26:46 +02:00
Megamouse d72f95677e overlays: add settings for screenshot and recording hints 2025-08-21 08:27:12 +02:00
Megamouse d087c86243 Audio: simplify apply_volume 2025-08-20 20:36:29 +02:00
Elad 6e7c3362b3 SPU: Update RdEventStat Busy Wait detection to updated setting behavior 2025-08-20 06:36:11 +03:00
ADAS2024 246519c5e1 Fixes for AppImage not targeting Gamemode (#17398)
Targets #17386
2025-08-18 00:03:31 +02:00
oltolm 8e34d7885c SPULLVMRecompiler: add overload for _ptr 2025-08-09 23:34:23 +03:00
oltolm 1902c5f3f4 SPULLVMRecompiler: remove unused parameters from spu_ptr and _ptr 2025-08-09 23:34:23 +03:00
oltolm 48d3b30204 llvm: use CreatePtrAdd
use CreatePtrAdd instead of CreateGEP(get_type<u8>(), ...) or
CreateIntToPtr(CreateAdd, CreatePtrToInt(...))
2025-08-09 09:41:07 +03:00
Megamouse f474533447 Update SDL to 3.2.20 2025-08-06 22:28:06 +02:00
Megamouse bf3501b737 Update 7zip to 25.01 2025-08-06 22:28:06 +02:00
Megamouse cda683df63 Update FAudio to 25.08 2025-08-06 22:28:06 +02:00
Marcin Serwin e5537c1cb0 Remove alternative default device detection in Cubeb backend
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-08-04 21:00:57 +01:00
Marcin Serwin e49a086edf Fix description of system wolfSSL option
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-08-04 19:56:01 +02:00
Marcin Serwin 69bf745246 Add option to use system Vulkan Memory Allocator
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-08-04 19:56:01 +02:00
Marcin Serwin 2211876b57 Add option to use system hidapi
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-08-04 19:56:01 +02:00
Marcin Serwin cb5411440d Add option to use system zstd
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-08-04 19:56:01 +02:00
Marcin Serwin 1b72868abf Add option to use system glslang
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-08-04 19:56:01 +02:00
Marcin Serwin 9126d617c5 Add option to use system RtMidi
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-08-04 19:56:01 +02:00
Marcin Serwin aa7758a20f Add option to use system MiniUPnPc
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-08-04 19:56:01 +02:00
Takuya Wakazono 81b33625f9 Set USE_SYSTEM_OPENAL default to OFF on macOS and Windows
On Linux, using system libraries is generally preferred, but this is
less relevant on macOS and Windows. In particular, macOS does not
provide "alext.h" in its OpenAL framework, which causes the build to
fail.
2025-08-03 12:27:02 +02:00
Takuya Wakazono daad30b2b3 Fix USE_SYSTEM_OPENAL to use system headers
Even when USE_SYSTEM_OPENAL was enabled, the code directly included the
bundled OpenAL headers, bypassing the system headers.

Since `#include <AL/al.h>` is not portable, use `#include "al.h"`
instead.
https://cmake.org/cmake/help/latest/module/FindOpenAL.html
2025-08-03 12:27:02 +02:00
Megamouse e319ca2998 Update SDL to 3.2.18 2025-07-28 21:42:36 +01:00
Megamouse 99b3c45f05 Update wolfssl to 5.8.2 2025-07-28 21:42:36 +01:00
Megamouse 3fd417e230 Update curl to 8.15.0 2025-07-28 21:42:36 +01:00
Ani b90bacba48 vk: Fix textureCompressionBC check for v3dv/panvk 2025-07-23 02:42:26 +03:00
Yahfz 7fe3afbbc2 Add support for arrowlake-s and lunarlake CPUs 2025-07-20 03:27:47 +03:00
Yahfz 8b9c9f677a ARL wasn't using FMA/VNNI/GFNI 2025-07-20 01:18:21 +03:00
Elad 620997c193 SPU/LV2: Notify SPU events after mutex guards' unlocking 2025-07-19 22:44:45 +03:00
capriots 06f480cb83 VS: add quotes around paths
Fixes use with paths that contain spaces.
2025-07-15 23:38:18 +03:00
Megamouse c69d7bc758 Qt/patches: optimize patch_manager_dialog::handle_item_changed 2025-07-13 14:19:58 +02:00
Megamouse 3926889c97 Qt/patches: Fix configurable value dropdown visibility 2025-07-13 14:19:58 +02:00
kd-11 34074a9c70 vk: Fix windows build 2025-07-13 05:49:34 +03:00
kd-11 81380a0d60 gl: Fix compiler warning 2025-07-13 05:49:34 +03:00
kd-11 65878c69be vk: Default initiailize program inputs with trap constants 2025-07-13 05:49:34 +03:00
kd-11 7c4fb183d0 vk: Properly initialize VS inputs 2025-07-13 05:49:34 +03:00
overwriter 699e1f0516 fix: cannot compile with Qt Creator while using "/DYNAMICBASE:YES" 2025-07-12 07:28:23 +03:00
Megamouse 269d45bfc0 only check out gamemode on linux 2025-07-06 19:42:09 +02:00
Megamouse f371f8be3e Move gamemode exit to final kill callback analog to display_sleep 2025-07-06 19:42:09 +02:00
Megamouse a965607f14 VS: Add gamemode_control filters 2025-07-06 19:42:09 +02:00
Megamouse 59567daea7 Update 7z to 25.00 2025-07-06 19:42:09 +02:00
ADAS2024 ef566186be [Linux] Implement Feral Interactive's Gamemode for Potential Performance Increases (#17325)
Currently, this is a draft PR to implement Feral Interactive's Gamemode
into RPCS3, which can improve game performance on certain Linux systems.

At the moment, I am running into various compiler warnings when trying
to include "gamemode_client.h" due to the file not using strict typings
and old C-style casts. I know I can disable these flags during RPCS3's
compilation but I wanted to check with the maintainers before going
forward and if this feature should be implemented.

It should be noted that RPCS3 only fails to compile and run if I include
Feral's header file, but everything else compiles if I comment out the
include.

Targets Issue #11299
2025-07-06 11:50:03 +02:00
Megamouse 46150322a3 cellVdec: log uknown arguments instead of throwing an error 2025-07-03 08:13:12 +02:00
Megamouse 2bb2c748bd clang-cl: fix a bunch of warnings 2025-07-02 22:19:31 +02:00
Megamouse a5c4951914 Update libpng to 1.6.50 2025-07-02 19:42:44 +02:00
Megamouse dfd80d2165 Update libusb to 1.0.29 2025-07-02 19:42:44 +02:00
Megamouse 4dbaaafbf1 Update FAudio to 25.07 2025-07-02 19:42:44 +02:00
Megamouse 25c2c601c9 Update curl to 8.14.1 2025-07-02 19:42:44 +02:00
Megamouse 9403d87d84 Update SDL to 3.2.16 2025-07-02 19:42:44 +02:00
Megamouse f50d374393 Enable fetch (oops) and also check highest tag in version_check 2025-07-02 19:42:44 +02:00
Kuan-Wei Chiu eeeb7fb4ab Fix invalid comparator in event_strcmp_events()
The function event_strcmp_events was previously returning int values
(-1, 0, 1) to indicate ordering. While this may resemble strcmp-like
semantics, it is invalid when used as a comparator with std::sort.

According to the C++ standard, the comparator used in standard
algorithms must be a function object returning a value contextually
convertible to bool, where comp(a, b) returns true if and only if a is
considered less than b.

Returning -1, 0, or 1 violates these rules. In particular, std::sort()
only expects the comparator to return a boolean value, and it uses that
value to infer ordering. Returning an int may lead to incorrect sorting
behavior and undefined behavior, including segmentation faults.

Replace the int-style comparator with a strict boolean comparison to
comply with the standard and ensure sorting correctness.
2025-07-02 09:12:35 +03:00
Megamouse 20c9dcd2d6 Remove qstr, sstr and qsv aliases. This does not compile on clang-cl 2025-06-30 08:18:50 +02:00
Megamouse 38ff48595d Fix missing include on clang-cl 2025-06-30 08:18:50 +02:00
Megamouse c7c206ecdc Fix u32 compile error on clang-cl 2025-06-30 08:18:50 +02:00
Megamouse bfd2adab5e Fix noexcept warnings in XAudio 2025-06-30 08:18:50 +02:00
Elad 786ac95dc0 RawSPU: Add missing MMIO register reads 2025-06-29 21:31:52 +03:00
Elad 1660dc24b3 cellSaveData: Order equal elements using the opposing trait 2025-06-27 17:56:26 +03:00
kd-11 aa50b0fbb9 vk: Fix video-out calibration pass inputs 2025-06-25 23:06:04 +03:00
kd-11 3df93dcc19 vk: Fix shader interpreter inputs when textures are not used 2025-06-25 23:06:04 +03:00
kd-11 1f0328c5d5 vk: Fix up binding layouts for some broken shaders 2025-06-25 23:06:04 +03:00
kd-11 3f635033cc vk: Cleanup compiler warnings 2025-06-25 23:06:04 +03:00
kd-11 8130babad3 vk: Fix crash when running MSAA resolve shaders 2025-06-25 23:06:04 +03:00
kd-11 37c4406b23 Remove unused file 2025-06-25 23:06:04 +03:00
kd-11 5d6b8b20c4 vk: Fix binding of arrays 2025-06-25 23:06:04 +03:00
kd-11 396c4bbdd7 vk: Drop obsolete logic around descriptor switching 2025-06-25 23:06:04 +03:00
kd-11 16a0ae6a7b vk: Update shader interpreter to use dynamic binding layout 2025-06-25 23:06:04 +03:00
kd-11 dd28d100d6 vk: Fix crash when running attachment clear pass 2025-06-25 23:06:04 +03:00
kd-11 91e22aa4e4 vk: Fix FS stencil mirror binding location overwrites causing holes in descriptor layout 2025-06-25 23:06:04 +03:00
kd-11 cdc78f81f7 vk: Code improvements 2025-06-25 23:06:04 +03:00
kd-11 91491c7cf3 vk: Drop copy optimization
- The pointer-based nature of write entries, changes invalidate previous data
- Instead of managing scratch, just push to the descriptors built-in management which is quite optimal
2025-06-25 23:06:04 +03:00
kd-11 b3492b73ad vk: Improve pipeline layout validation and fix slot allocation bugs 2025-06-25 23:06:04 +03:00
kd-11 15791cf94e vk: Fix descriptor set update and caching model to support skipped updates 2025-06-25 23:06:04 +03:00
kd-11 5417d4854d vk: Fix edge cases in descriptor update logic 2025-06-25 23:06:04 +03:00
kd-11 bb1c0a5eee rsx/util: Support basic array merge 2025-06-25 23:06:04 +03:00
kd-11 3a65359d59 vk: Fix clang build and resource leak on exit 2025-06-25 23:06:04 +03:00
kd-11 ffa835efac vk: Use shared layout generator for all pipelines
- Common code applying flags uniformly fixes bugs with misconfigured options
2025-06-25 23:06:04 +03:00
kd-11 f241825c73 vk: Update binding model for compute jobs 2025-06-25 23:06:04 +03:00
kd-11 2c8c788d81 vk: Use standard C++ 2025-06-25 23:06:04 +03:00
kd-11 2ae9753d79 vk: Lazy register/derigeter of hot data 2025-06-25 23:06:04 +03:00
kd-11 93e6aa6310 vk: Fix FSR upscaling 2025-06-25 23:06:04 +03:00
kd-11 ae74aa336f vk: Use write commands instead of copy commands to avoid dependencies 2025-06-25 23:06:04 +03:00
kd-11 64866098e7 vk: Respect shader compile flags when linking 2025-06-25 23:06:04 +03:00
kd-11 20b54f3086 vk: Correctly initialize descriptor copy data 2025-06-25 23:06:04 +03:00
kd-11 aac4fbe941 vk: Fix graphical bugs and crashes 2025-06-25 23:06:04 +03:00
kd-11 356b2f5910 vk: Rewrite program binding management to use "separate shader objects" concept. 2025-06-25 23:06:04 +03:00
kd-11 4d493bbb80 vk: Fix build 2025-06-25 23:06:04 +03:00
kd-11 49729086ac vk: Move descriptor management to the pipeline layer
- Frees up callers from managing descriptors themselves (ewww)
- Makes descriptor reuse possible
- Opens up the door to techniques like descriptor_buffer by abstracting away management to an implementation detail
2025-06-25 23:06:04 +03:00
digant73 329655a1bf fix DEBUG mode compilation 2025-06-24 05:16:17 +03:00
qurious-pixel b0067e8934 Windows Clang - libvulkan
Fix windows clang libvulkan static lib name
2025-06-22 03:38:16 +03:00
Kuan-Wei Chiu 22d9343f2c Fix invalid comparator in savedata_op sorting
According to the C++ standard, comparison functions used in sorting
algorithms such as std::sort must establish a strict weak ordering.
Specifically, the comparator must be irreflexive: for all values x,
comp(x, x) must be false.

The original comparator used >= for descending order, which violates
this requirement in the case of equal values (i.e., when a == b, both
comp(a, b) and comp(b, a) would return true). This can result in
undefined behavior in sorting algorithms, including potential
segmentation faults due to invalid iterator manipulation.

This change replaces >= with > to ensure irreflexivity and compliance
with the standard's requirement for a strict weak ordering.
2025-06-21 20:00:12 +03:00
qurious-pixel 9c93ec0bc3 exclude libusb submodule 2025-06-20 09:08:03 +02:00
qurious-pixel c6c72d3721 install opencv FreeBSD 2025-06-20 09:08:03 +02:00
qurious-pixel 424f9306c4 Use system LibUSB for FreeBSD 2025-06-20 09:08:03 +02:00
qurious-pixel 5d552ca236 Add Timeout to FreeBSD build 2025-06-20 09:08:03 +02:00
Megamouse 28896acb83 CI: Build static OpenAl 2025-06-19 12:09:59 +02:00
Megamouse 6f37be1afd CI/Win/clang: try to fix vulkan support 2025-06-19 09:07:01 +02:00
Megamouse 4fd581b812 Add github actions for linux arm gcc 2025-06-18 16:31:05 +02:00
Marcin Serwin bad6e99258 Disable -Wold-style-cast diagnostic before including sse2neon
Signed-off-by: Marcin Serwin <marcin@serwin.dev>
2025-06-18 15:52:52 +02:00
Megamouse 27359d3d32 CMake: add more options 2025-06-16 09:01:00 +02:00
Megamouse f8f34787b3 CI: Do not checkout zlib 2025-06-16 09:01:00 +02:00
Megamouse d61c2496b6 hid/input: fix enumerated device comparison 2025-06-16 08:12:13 +02:00
Megamouse 5569c5c803 Win/cmake: Copy test directory to bin 2025-06-15 17:12:50 +02:00
Megamouse d0812ee5a8 CI: build windows clang 2025-06-15 17:12:50 +02:00
Megamouse 9634e58f0a CI: fix branch name and PR number 2025-06-14 23:44:06 +02:00
RipleyTom 9610d45ebf Entitlements are never found (#17306)
Minor change, we don't support entitlements atm.
2025-06-14 09:38:38 +03:00
Elad 85c813d84c RawSPU: Fix race of SPU_MBox_Status_offs (#17303) 2025-06-13 18:56:35 +03:00
Megamouse ab55500f01 Add github actions for windows llvm 2025-06-13 03:31:08 +02:00
Megamouse af0432a44b Update opencv to 4.11.0 2025-06-13 01:35:28 +02:00
qurious-pixel 2b7161208e [CI] FreeBSD build (#17293)
Build FreeBSD on Github Actions
2025-06-12 09:33:40 +03:00
Megamouse 5514d7c3d8 input: only copy relevant members to external buttons and sticks
fixes a crash in std::set, which is not thread safe
2025-06-09 11:09:26 +02:00
Elad 823e17288c SPU: Skip PUTLLUC writes of the same data 2025-06-08 19:09:22 +03:00
Megamouse 866daf2059 input/macOs: Call hid_close on the main thread 2025-06-07 13:03:41 +02:00
Megamouse ae38cef7b1 input/macOs: Call hid_open_path on the main thread 2025-06-07 13:03:41 +02:00
Megamouse e36f55ea41 input/macOs: call hid_enumerate on the main thread 2025-06-07 13:03:41 +02:00
Megamouse 819d3dc7a6 input/macOs: Run hidapi pad handlers on a single thread 2025-06-07 13:03:41 +02:00
oltolm ac99b2036d llvm: fix deprecation warnings 2025-06-07 12:46:48 +03:00
Megamouse 46cce45b13 Fix missing inserted = true in check_for_duplicates_fast 2025-06-06 01:07:33 +02:00
Megamouse d685348644 Update Qt to 6.9.1
- Updates Qt to 6.9.1
2025-06-05 21:57:43 +02:00
Megamouse d15b7a9955 ci/macOs: run unit tests 2025-06-03 21:59:59 +02:00
kd-11 99db73a34f Update VMA vulkan version to 1.2 2025-06-02 17:06:23 +03:00
kd-11 85e4eff571 vk: Raise min API version to 1.2 2025-06-02 17:06:23 +03:00
Megamouse d8bc2d5c75 input: move copilot code to pad_thread 2025-06-02 09:12:32 +02:00
Megamouse 4704c03209 Fix some static analysis warnings, including c-style cast 2025-06-01 22:07:03 +02:00
Megamouse 70faef3fdb Logs: use thread_local 2025-06-01 20:17:51 +03:00
qurious-pixel 663ff55af9 restore ffmpeg dependencies on linux 2025-06-01 18:45:00 +02:00
Zion Nimchuk 229c1c38a3 Setup build caches to only save on master builds, to ensure PR caches don't take presidence 2025-06-01 13:18:16 +01:00
1077 changed files with 147273 additions and 31848 deletions
+4 -2
View File
@@ -1,9 +1,10 @@
#!/bin/sh -ex
# Pull all the submodules except llvm, opencv, libpng, sdl and curl
# Pull all the submodules except some
# Note: Tried to use git submodule status, but it takes over 20 seconds
# shellcheck disable=SC2046
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ && !/opencv/ && !/libpng/ && !/libsdl-org/ && !/curl/ { print $3 }' .gitmodules)
git config --global --add safe.directory .
git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ && !/opencv/ && !/libpng/ && !/libsdl-org/ && !/curl/ && !/zlib/ && !/libusb/ && !/feralinteractive/ { print $3 }' .gitmodules)
CONFIGURE_ARGS="
-DWITH_LLVM=ON
@@ -13,6 +14,7 @@ CONFIGURE_ARGS="
-DUSE_SYSTEM_FFMPEG=ON
-DUSE_SYSTEM_CURL=ON
-DUSE_SYSTEM_LIBPNG=ON
-DUSE_SYSTEM_LIBUSB=ON
-DUSE_SYSTEM_OPENCV=ON
"
+5 -11
View File
@@ -1,16 +1,14 @@
#!/bin/sh -ex
if [ -z "$CIRRUS_CI" ]; then
cd rpcs3 || exit 1
fi
cd rpcs3 || exit 1
shellcheck .ci/*.sh
git config --global --add safe.directory '*'
# Pull all the submodules except llvm, opencv, sdl and curl
# Pull all the submodules except some
# shellcheck disable=SC2046
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/libsdl-org/ && !/curl/ { print $3 }' .gitmodules)
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/libsdl-org/ && !/curl/ && !/zlib/ { print $3 }' .gitmodules)
mkdir build && cd build || exit 1
@@ -37,7 +35,7 @@ cmake .. \
-DUSE_SYSTEM_CURL=ON \
-DUSE_SDL=ON \
-DUSE_SYSTEM_SDL=ON \
-DUSE_SYSTEM_FFMPEG=OFF \
-DUSE_SYSTEM_FFMPEG=ON \
-DUSE_SYSTEM_OPENCV=ON \
-DUSE_DISCORD_RPC=ON \
-DOpenGL_GL_PREFERENCE=LEGACY \
@@ -52,10 +50,6 @@ ninja; build_status=$?;
cd ..
# If it compiled succesfully let's deploy.
# Azure and Cirrus publish PRs as artifacts only.
{ [ "$CI_HAS_ARTIFACTS" = "true" ];
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
if [ "$build_status" -eq 0 ]; then
.ci/deploy-linux.sh "aarch64"
fi
+5 -11
View File
@@ -1,17 +1,15 @@
#!/bin/sh -ex
if [ -z "$CIRRUS_CI" ]; then
cd rpcs3 || exit 1
fi
cd rpcs3 || exit 1
shellcheck .ci/*.sh
git config --global --add safe.directory '*'
# Pull all the submodules except llvm, opencv, sdl and curl
# Pull all the submodules except some
# Note: Tried to use git submodule status, but it takes over 20 seconds
# shellcheck disable=SC2046
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/libsdl-org/ && !/curl/ { print $3 }' .gitmodules)
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/libsdl-org/ && !/curl/ && !/zlib/ { print $3 }' .gitmodules)
mkdir build && cd build || exit 1
@@ -48,7 +46,7 @@ cmake .. \
-DUSE_SYSTEM_CURL=ON \
-DUSE_SDL=ON \
-DUSE_SYSTEM_SDL=ON \
-DUSE_SYSTEM_FFMPEG=OFF \
-DUSE_SYSTEM_FFMPEG=ON \
-DUSE_SYSTEM_OPENCV=ON \
-DUSE_DISCORD_RPC=ON \
-DOpenGL_GL_PREFERENCE=LEGACY \
@@ -63,10 +61,6 @@ ninja; build_status=$?;
cd ..
# If it compiled succesfully let's deploy.
# Azure and Cirrus publish PRs as artifacts only.
{ [ "$CI_HAS_ARTIFACTS" = "true" ];
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
if [ "$build_status" -eq 0 ]; then
.ci/deploy-linux.sh "x86_64"
fi
-123
View File
@@ -1,123 +0,0 @@
#!/bin/sh -ex
# shellcheck disable=SC2086
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
export HOMEBREW_NO_ENV_HINTS=1
export HOMEBREW_NO_INSTALL_CLEANUP=1
/opt/homebrew/bin/brew install -f --overwrite --quiet nasm ninja p7zip ccache pipenv gnutls freetype #create-dmg
/opt/homebrew/bin/brew install -f --quiet ffmpeg@5
/opt/homebrew/bin/brew install --quiet "llvm@$LLVM_COMPILER_VER" glew cmake sdl3 vulkan-headers coreutils
/opt/homebrew/bin/brew link -f --quiet "llvm@$LLVM_COMPILER_VER" ffmpeg@5
# moltenvk based on commit for 1.3.0 release
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/7255441cbcafabaa8950f67c7ec55ff499dbb2d3/Formula/m/molten-vk.rb
/opt/homebrew/bin/brew install -f --overwrite --formula --quiet ./molten-vk.rb
export CXX=clang++
export CC=clang
export BREW_PATH;
BREW_PATH="$(brew --prefix)"
export BREW_BIN="/opt/homebrew/bin"
export BREW_SBIN="/opt/homebrew/sbin"
export CMAKE_EXTRA_OPTS='-DLLVM_TARGETS_TO_BUILD=arm64'
export WORKDIR;
WORKDIR="$(pwd)"
# Get Qt
if [ ! -d "/tmp/Qt/$QT_VER" ]; then
mkdir -p "/tmp/Qt"
git clone https://github.com/engnr/qt-downloader.git
cd qt-downloader
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
# nested Qt 6.9.0 URL workaround
# sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
# sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
# archived Qt 6.7.3 URL workaround
sed -i '' "s/official_releases/archive/g" qt-downloader
cd "/tmp/Qt"
arch -arm64 "$BREW_PATH/bin/pipenv" run pip3 uninstall py7zr requests semantic_version lxml
arch -arm64 "$BREW_PATH/bin/pipenv" run pip3 install py7zr requests semantic_version lxml --no-cache
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
# sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader" # Qt 6.9.0 workaround
arch -arm64 "$BREW_PATH/bin/pipenv" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats # -o "$QT_VER/clang_64"
fi
cd "$WORKDIR"
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN"
export SDL3_DIR="$BREW_PATH/opt/sdl3/lib/cmake/SDL3"
export PATH="$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH"
export LDFLAGS="-L$BREW_PATH/lib $BREW_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_PATH/lib/libSDL3.dylib $BREW_PATH/lib/libGLEW.dylib $BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/unwind/libunwind.1.dylib -Wl,-rpath,$BREW_PATH/lib"
export CPPFLAGS="-I$BREW_PATH/include -I$BREW_PATH/include -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
export LIBRARY_PATH="$BREW_PATH/lib"
export LD_LIBRARY_PATH="$BREW_PATH/lib"
export VULKAN_SDK
VULKAN_SDK="$BREW_PATH/opt/molten-vk"
ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib" || true
export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json"
export LLVM_DIR
LLVM_DIR="$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER"
# exclude ffmpeg, LLVM, opencv, and sdl from submodule update
# shellcheck disable=SC2046
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/ffmpeg/ && !/llvm/ && !/opencv/ && !/SDL/ { print $3 }' .gitmodules)
# 3rdparty fixes
sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVersionNumber = 1343;/g" 3rdparty/hidapi/hidapi/mac/hid.c
mkdir build && cd build || exit 1
export MACOSX_DEPLOYMENT_TARGET=14.0
"$BREW_PATH/bin/cmake" .. \
-DBUILD_RPCS3_TESTS=OFF \
-DRUN_RPCS3_TESTS=OFF \
-DUSE_SDL=ON \
-DUSE_DISCORD_RPC=ON \
-DUSE_VULKAN=ON \
-DUSE_ALSA=OFF \
-DUSE_PULSE=OFF \
-DUSE_AUDIOUNIT=ON \
-DUSE_SYSTEM_FFMPEG=ON \
-DLLVM_CCACHE_BUILD=OFF \
-DLLVM_BUILD_RUNTIME=OFF \
-DLLVM_BUILD_TOOLS=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_TOOLS=OFF \
-DLLVM_INCLUDE_UTILS=OFF \
-DLLVM_USE_PERF=OFF \
-DLLVM_ENABLE_Z3_SOLVER=OFF \
-DUSE_NATIVE_INSTRUCTIONS=OFF \
-DUSE_SYSTEM_MVK=ON \
-DUSE_SYSTEM_FAUDIO=OFF \
-DUSE_SYSTEM_SDL=ON \
-DUSE_SYSTEM_OPENCV=ON \
"$CMAKE_EXTRA_OPTS" \
-DLLVM_TARGET_ARCH=arm64 \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DCMAKE_IGNORE_PATH="$BREW_PATH/lib" \
-DCMAKE_IGNORE_PREFIX_PATH=/opt/homebrew/opt \
-DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000" \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_OSX_SYSROOT="$(xcrun --sdk macosx --show-sdk-path)" \
-G Ninja
"$BREW_PATH/bin/ninja"; build_status=$?;
cd ..
{ [ "$CI_HAS_ARTIFACTS" = "true" ];
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
.ci/deploy-mac-arm64.sh
fi
+85 -75
View File
@@ -1,126 +1,136 @@
#!/bin/sh -ex
# Gather explicit version number and number of commits
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' rpcs3/rpcs3_version.cpp)
COMM_COUNT=$(git rev-list --count HEAD)
COMM_HASH=$(git rev-parse --short=8 HEAD)
# AVVER is used for GitHub releases, it is the version number. LVER is used for release naming.
AVVER="${COMM_TAG}-${COMM_COUNT}"
export LVER="${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}"
echo "AVVER=$AVVER" >> .ci/ci-vars.env
# shellcheck disable=SC2086
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
export HOMEBREW_NO_ENV_HINTS=1
export HOMEBREW_NO_INSTALL_CLEANUP=1
brew update
brew install -f --overwrite --quiet ccache "llvm@$LLVM_COMPILER_VER"
brew link -f --overwrite --quiet "llvm@$LLVM_COMPILER_VER"
if [ "$AARCH64" -eq 1 ]; then
brew install -f --overwrite --quiet googletest opencv@4 sdl3 vulkan-headers vulkan-loader molten-vk
brew unlink --quiet ffmpeg fmt qtbase qtsvg qtdeclarative protobuf || true
else
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
arch -x86_64 /usr/local/bin/brew install -f --overwrite --quiet python@3.14 opencv@4 "llvm@$LLVM_COMPILER_VER" sdl3 vulkan-headers vulkan-loader molten-vk
arch -x86_64 /usr/local/bin/brew unlink --quiet ffmpeg qtbase qtsvg qtdeclarative protobuf || true
fi
#/usr/sbin/softwareupdate --install-rosetta --agree-to-license
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
arch -x86_64 /usr/local/bin/brew update
arch -x86_64 /usr/local/bin/brew install -f --overwrite --quiet python || arch -x86_64 /usr/local/bin/brew link --overwrite python
arch -x86_64 /usr/local/bin/brew install -f --overwrite --quiet nasm ninja p7zip ccache pipenv gnutls freetype #create-dmg
arch -x86_64 /usr/local/bin/brew install -f --quiet ffmpeg@5
arch -x86_64 /usr/local/bin/brew install --quiet "llvm@$LLVM_COMPILER_VER" glew cmake sdl3 vulkan-headers coreutils
arch -x86_64 /usr/local/bin/brew link -f --quiet "llvm@$LLVM_COMPILER_VER" ffmpeg@5
# moltenvk based on commit for 1.3.0 release
wget https://raw.githubusercontent.com/Homebrew/homebrew-core/7255441cbcafabaa8950f67c7ec55ff499dbb2d3/Formula/m/molten-vk.rb
arch -x86_64 /usr/local/bin/brew install -f --overwrite --formula --quiet ./molten-vk.rb
export CXX=clang++
export CC=clang
export BREW_X64_PATH;
BREW_X64_PATH="$("/usr/local/bin/brew" --prefix)"
export BREW_BIN="/usr/local/bin"
export BREW_SBIN="/usr/local/sbin"
export CMAKE_EXTRA_OPTS='-DLLVM_TARGETS_TO_BUILD=X86'
export BREW_PATH;
if [ "$AARCH64" -eq 1 ]; then
BREW_PATH="$(brew --prefix)"
export BREW_BIN="/opt/homebrew/bin"
export BREW_SBIN="/opt/homebrew/sbin"
else
BREW_PATH="$("/usr/local/bin/brew" --prefix)"
export BREW_BIN="/usr/local/bin"
export BREW_SBIN="/usr/local/sbin"
fi
export WORKDIR;
WORKDIR="$(pwd)"
# Setup ccache
if [ ! -d "$CCACHE_DIR" ]; then
mkdir -p "$CCACHE_DIR"
fi
# Get Qt
if [ ! -d "/tmp/Qt/$QT_VER" ]; then
mkdir -p "/tmp/Qt"
git clone https://github.com/engnr/qt-downloader.git
cd qt-downloader
git checkout f52efee0f18668c6d6de2dec0234b8c4bc54c597
# nested Qt 6.9.0 URL workaround
# sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
# sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
# archived Qt 6.7.3 URL workaround
sed -i '' "s/official_releases/archive/g" qt-downloader
sed -i '' "s/'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/'qt{0}_{0}{1}{2}'.format(major, minor, patch), 'qt{0}_{0}{1}{2}'.format(major, minor, patch)]))/g" qt-downloader
sed -i '' "s/'{}\/{}\/qt{}_{}\/'/'{0}\/{1}\/qt{2}_{3}\/qt{2}_{3}\/'/g" qt-downloader
cd "/tmp/Qt"
arch -x86_64 "$BREW_X64_PATH/bin/pipenv" --python "$BREW_X64_PATH/bin/python3" run pip3 install py7zr requests semantic_version lxml
pip3 install py7zr requests semantic_version lxml --no-cache --break-system-packages
mkdir -p "$QT_VER/macos" ; ln -s "macos" "$QT_VER/clang_64"
# sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader" # Qt 6.9.0 workaround
arch -x86_64 "$BREW_X64_PATH/bin/pipenv" --python "$BREW_X64_PATH/bin/python3" run "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats # -o "$QT_VER/clang_64"
sed -i '' 's/args\.version \/ derive_toolchain_dir(args) \/ //g' "$WORKDIR/qt-downloader/qt-downloader"
python3 "$WORKDIR/qt-downloader/qt-downloader" macos desktop "$QT_VER" clang_64 --opensource --addons qtmultimedia qtimageformats -o "$QT_VER/clang_64"
fi
cd "$WORKDIR"
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN"
export SDL3_DIR="$BREW_X64_PATH/opt/sdl3/lib/cmake/SDL3"
export SDL3_DIR="$BREW_PATH/opt/sdl3/lib/cmake/SDL3"
export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH"
export LDFLAGS="-L$BREW_X64_PATH/lib -Wl,-rpath,$BREW_X64_PATH/lib"
export CPPFLAGS="-I$BREW_X64_PATH/include -msse -msse2 -mcx16 -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000"
export LIBRARY_PATH="$BREW_X64_PATH/lib"
export LD_LIBRARY_PATH="$BREW_X64_PATH/lib"
export PATH="/opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/bin:$PATH"
export LDFLAGS="-L$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++ -L$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/unwind -lunwind"
export VULKAN_SDK
VULKAN_SDK="$BREW_X64_PATH/opt/molten-vk"
ln -s "$VULKAN_SDK/lib/libMoltenVK.dylib" "$VULKAN_SDK/lib/libvulkan.dylib"
export VK_ICD_FILENAMES="$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json"
VULKAN_SDK="$BREW_PATH/opt/molten-vk"
ln -s "$BREW_PATH/opt/vulkan-loader/lib/libvulkan.dylib" "$VULKAN_SDK/lib/libvulkan.dylib"
export LLVM_DIR
LLVM_DIR="BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER"
# exclude ffmpeg, LLVM, opencv, and sdl from submodule update
LLVM_DIR="$BREW_PATH/opt/llvm@$LLVM_COMPILER_VER"
# Pull all the submodules except some
# shellcheck disable=SC2046
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/ffmpeg/ && !/llvm/ && !/opencv/ && !/SDL/ { print $3 }' .gitmodules)
# 3rdparty fixes
sed -i '' "s/extern const double NSAppKitVersionNumber;/const double NSAppKitVersionNumber = 1343;/g" 3rdparty/hidapi/hidapi/mac/hid.c
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/llvm/ && !/opencv/ && !/SDL/ && !/feralinteractive/ { print $3 }' .gitmodules)
mkdir build && cd build || exit 1
export MACOSX_DEPLOYMENT_TARGET=14.0
"$BREW_X64_PATH/bin/cmake" .. \
-DBUILD_RPCS3_TESTS=OFF \
-DRUN_RPCS3_TESTS=OFF \
if [ "$AARCH64" -eq 1 ]; then
cmake .. \
-DBUILD_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
-DRUN_RPCS3_TESTS="${RUN_UNIT_TESTS}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET=14.4 \
-DCMAKE_OSX_SYSROOT="$(xcrun --sdk macosx --show-sdk-path)" \
-DMACOSX_BUNDLE_SHORT_VERSION_STRING="${COMM_TAG}" \
-DMACOSX_BUNDLE_BUNDLE_VERSION="${COMM_COUNT}" \
-DSTATIC_LINK_LLVM=ON \
-DUSE_SDL=ON \
-DUSE_DISCORD_RPC=ON \
-DUSE_VULKAN=ON \
-DUSE_ALSA=OFF \
-DUSE_PULSE=OFF \
-DUSE_AUDIOUNIT=ON \
-DUSE_SYSTEM_FFMPEG=ON \
-DLLVM_CCACHE_BUILD=OFF \
-DLLVM_BUILD_RUNTIME=OFF \
-DLLVM_BUILD_TOOLS=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_TOOLS=OFF \
-DLLVM_INCLUDE_UTILS=OFF \
-DLLVM_USE_PERF=OFF \
-DLLVM_ENABLE_Z3_SOLVER=OFF \
-DUSE_SYSTEM_FFMPEG=OFF \
-DUSE_NATIVE_INSTRUCTIONS=OFF \
-DUSE_PRECOMPILED_HEADERS=OFF \
-DUSE_SYSTEM_MVK=ON \
-DUSE_SYSTEM_FAUDIO=OFF \
-DUSE_SYSTEM_SDL=ON \
-DUSE_SYSTEM_OPENCV=ON \
"$CMAKE_EXTRA_OPTS" \
-DLLVM_TARGET_ARCH=X86_64 \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCMAKE_IGNORE_PATH="$BREW_X64_PATH/lib" \
-DCMAKE_IGNORE_PREFIX_PATH=/usr/local/opt \
-DCMAKE_CXX_FLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=140000" \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_OSX_SYSROOT="$(xcrun --sdk macosx --show-sdk-path)" \
-G Ninja
else
cmake .. \
-DBUILD_RPCS3_TESTS=OFF \
-DRUN_RPCS3_TESTS=OFF \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DCMAKE_SYSTEM_PROCESSOR=x86_64 \
-DCMAKE_TOOLCHAIN_FILE=buildfiles/cmake/TCDarwinX86_64.cmake \
-DCMAKE_OSX_DEPLOYMENT_TARGET=14.4 \
-DCMAKE_OSX_SYSROOT="$(xcrun --sdk macosx --show-sdk-path)" \
-DMACOSX_BUNDLE_SHORT_VERSION_STRING="${COMM_TAG}" \
-DMACOSX_BUNDLE_BUNDLE_VERSION="${COMM_COUNT}"\
-DSTATIC_LINK_LLVM=ON \
-DUSE_SDL=ON \
-DUSE_DISCORD_RPC=ON \
-DUSE_AUDIOUNIT=ON \
-DUSE_SYSTEM_FFMPEG=OFF \
-DUSE_NATIVE_INSTRUCTIONS=OFF \
-DUSE_PRECOMPILED_HEADERS=OFF \
-DUSE_SYSTEM_MVK=ON \
-DUSE_SYSTEM_SDL=ON \
-DUSE_SYSTEM_OPENCV=ON \
-G Ninja
fi
"$BREW_X64_PATH/bin/ninja"; build_status=$?;
ninja; build_status=$?;
cd ..
{ [ "$CI_HAS_ARTIFACTS" = "true" ];
} && SHOULD_DEPLOY="true" || SHOULD_DEPLOY="false"
if [ "$build_status" -eq 0 ] && [ "$SHOULD_DEPLOY" = "true" ]; then
# If it compiled succesfully let's deploy.
if [ "$build_status" -eq 0 ]; then
.ci/deploy-mac.sh
fi
+64
View File
@@ -0,0 +1,64 @@
#!/bin/sh -ex
git config --global --add safe.directory '*'
CPU_ARCH="${1:-x86_64}"
MSYS2="${2:-clang64}"
# Pull all the submodules except some
# Note: Tried to use git submodule status, but it takes over 20 seconds
# shellcheck disable=SC2046
git submodule -q update --init $(awk '/path/ && !/llvm/ && !/opencv/ && !/ffmpeg/ && !/curl/ && !/FAudio/ && !/zlib/ { print $3 }' .gitmodules)
mkdir build && cd build || exit 1
export CC="clang"
export CXX="clang++"
export LINKER=lld
export LINKER_FLAG="-fuse-ld=${LINKER}"
if [ -n "$LLVMVER" ]; then
export AR="llvm-ar-$LLVMVER"
export RANLIB="llvm-ranlib-$LLVMVER"
else
export AR="llvm-ar"
export RANLIB="llvm-ranlib"
fi
cmake .. \
-DCMAKE_PREFIX_PATH=/"${MSYS2}" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DUSE_NATIVE_INSTRUCTIONS=OFF \
-DUSE_PRECOMPILED_HEADERS=OFF \
-DCMAKE_C_FLAGS="$CFLAGS" \
-DCMAKE_CXX_FLAGS="$CFLAGS" \
-DCMAKE_EXE_LINKER_FLAGS="${LINKER_FLAG}" \
-DCMAKE_MODULE_LINKER_FLAGS="${LINKER_FLAG}" \
-DCMAKE_SHARED_LINKER_FLAGS="${LINKER_FLAG}" \
-DCMAKE_AR="$AR" \
-DCMAKE_RANLIB="$RANLIB" \
-DUSE_SYSTEM_CURL=ON \
-DUSE_FAUDIO=OFF \
-DUSE_SDL=ON \
-DUSE_SYSTEM_SDL=OFF \
-DUSE_SYSTEM_FFMPEG=ON \
-DUSE_SYSTEM_OPENCV=ON \
-DUSE_SYSTEM_OPENAL=OFF \
-DUSE_DISCORD_RPC=ON \
-DOpenGL_GL_PREFERENCE=LEGACY \
-DWITH_LLVM=ON \
-DLLVM_DIR=/"${MSYS2}"/lib/cmake/llvm \
-DVulkan_LIBRARY=/"${MSYS2}"/lib/libvulkan-1.dll.a \
-DSTATIC_LINK_LLVM=ON \
-DBUILD_RPCS3_TESTS=OFF \
-DRUN_RPCS3_TESTS=OFF \
-G Ninja
ninja; build_status=$?;
cd ..
# If it compiled succesfully let's deploy.
if [ "$build_status" -eq 0 ]; then
.ci/deploy-windows-clang.sh "${CPU_ARCH}" "${MSYS2}"
fi
+23 -4
View File
@@ -14,11 +14,14 @@ if [ "$DEPLOY_APPIMAGE" = "true" ]; then
curl -fsSLo linuxdeploy-plugin-checkrt.sh https://github.com/darealshinji/linuxdeploy-plugin-checkrt/releases/download/continuous/linuxdeploy-plugin-checkrt.sh
chmod +x ./linuxdeploy-plugin-checkrt.sh
export EXTRA_PLATFORM_PLUGINS="libqwayland-egl.so;libqwayland-generic.so"
export EXTRA_PLATFORM_PLUGINS="libqwayland.so"
export EXTRA_QT_PLUGINS="svg;wayland-decoration-client;wayland-graphics-integration-client;wayland-shell-integration;waylandcompositor"
APPIMAGE_EXTRACT_AND_RUN=1 linuxdeploy --appdir AppDir --plugin qt --plugin checkrt
# Restore App Icon
ln -sr ./AppDir/rpcs3.svg ./AppDir/.DirIcon
# Remove libwayland-client because it has platform-dependent exports and breaks other OSes
rm -f ./AppDir/usr/lib/libwayland-client.so*
@@ -26,15 +29,31 @@ if [ "$DEPLOY_APPIMAGE" = "true" ]; then
rm -f ./AppDir/usr/lib/libvulkan.so*
# Remove unused Qt6 libraries
rm -f ./AppDir/usr/lib/libQt6OpenGL.so*
rm -f ./AppDir/usr/lib/libQt6Qml*.so*
rm -f ./AppDir/usr/lib/libQt6Quick.so*
rm -f ./AppDir/usr/lib/libQt6VirtualKeyboard.so*
rm -f ./AppDir/usr/plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so*
# Remove git directory containing local commit history file
rm -rf ./AppDir/usr/share/rpcs3/git
# Download translations
mkdir -p "./AppDir/usr/translations"
ZIP_URL=$(curl -fsSL "https://api.github.com/repos/RPCS3/rpcs3_translations/releases/latest" \
| grep "browser_download_url" \
| grep "RPCS3-languages.zip" \
| cut -d '"' -f 4)
if [ -z "$ZIP_URL" ]; then
echo "Failed to find RPCS3-languages.zip in the latest release. Continuing without translations."
else
echo "Downloading translations from: $ZIP_URL"
curl -L -o translations.zip "$ZIP_URL" || {
echo "Failed to download translations.zip. Continuing without translations."
exit 0
}
unzip -o translations.zip -d "./AppDir/usr/translations" >/dev/null 2>&1 || \
echo "Failed to extract translations.zip. Continuing without translations."
rm -f translations.zip
fi
curl -fsSLo /uruntime "https://github.com/VHSgunzo/uruntime/releases/download/v0.3.4/uruntime-appimage-dwarfs-$CPU_ARCH"
chmod +x /uruntime
/uruntime --appimage-mkdwarfs -f --set-owner 0 --set-group 0 --no-history --no-create-timestamp \
+20
View File
@@ -0,0 +1,20 @@
#!/bin/sh -ex
# First let's print some info about our caches
"$(cygpath -u "$CCACHE_BIN_DIR")"/ccache.exe --show-stats -v
# BUILD_blablabla is Azure specific, so we wrap it for portability
ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
BUILD="llvmlibs_mt.7z"
# Package artifacts
7z a -m0=LZMA2 -mx9 "$BUILD" ./build/lib/Release-x64/llvm_build
# Generate sha256 hashes
# Write to file for GitHub releases
sha256sum "$BUILD" | awk '{ print $1 }' | tee "$BUILD.sha256"
echo "$(cat "$BUILD.sha256");$(stat -c %s "$BUILD")B" > GitHubReleaseMessage.txt
# Move files to publishing directory
cp -- "$BUILD" "$ARTIFACT_DIR"
cp -- "$BUILD.sha256" "$ARTIFACT_DIR"
-74
View File
@@ -1,74 +0,0 @@
#!/bin/sh -ex
# shellcheck disable=SC2086
cd build || exit 1
# Gather explicit version number and number of commits
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ../rpcs3/rpcs3_version.cpp)
COMM_COUNT=$(git rev-list --count HEAD)
COMM_HASH=$(git rev-parse --short=8 HEAD)
AVVER="${COMM_TAG}-${COMM_COUNT}"
# AVVER is used for GitHub releases, it is the version number.
echo "AVVER=$AVVER" >> ../.ci/ci-vars.env
cd bin
mkdir "rpcs3.app/Contents/lib/" || true
cp "$(realpath /opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib)" "rpcs3.app/Contents/Frameworks/libc++abi.1.dylib"
cp "$(realpath /opt/homebrew/lib/libsharpyuv.0.dylib)" "rpcs3.app/Contents/lib/libsharpyuv.0.dylib"
cp "$(realpath /opt/homebrew/lib/libintl.8.dylib)" "rpcs3.app/Contents/lib/libintl.8.dylib"
rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
"rpcs3.app/Contents/Frameworks/QtQml.framework" \
"rpcs3.app/Contents/Frameworks/QtQmlModels.framework" \
"rpcs3.app/Contents/Frameworks/QtQuick.framework" \
"rpcs3.app/Contents/Frameworks/QtVirtualKeyboard.framework" \
"rpcs3.app/Contents/Plugins/platforminputcontexts" \
"rpcs3.app/Contents/Plugins/virtualkeyboard" \
"rpcs3.app/Contents/Resources/git"
../../.ci/optimize-mac.sh rpcs3.app
# Hack
install_name_tool \
-delete_rpath /opt/homebrew/lib \
-delete_rpath /opt/homebrew/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3
#-delete_rpath /opt/homebrew1/Cellar/sdl3/3.2.8/lib
# Need to do this rename hack due to case insensitive filesystem
mv rpcs3.app RPCS3_.app
mv RPCS3_.app RPCS3.app
# NOTE: "--deep" is deprecated
codesign --deep -fs - RPCS3.app
echo "[InternetShortcut]" > Quickstart.url
echo "URL=https://rpcs3.net/quickstart" >> Quickstart.url
echo "IconIndex=0" >> Quickstart.url
#DMG_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos_arm64.dmg"
#"$BREW_X64_PATH/bin/create-dmg" --volname RPCS3 \
#--window-size 800 400 \
#--icon-size 100 \
#--icon rpcs3.app 200 190 \
#--add-file Quickstart.url Quickstart.url 400 20 \
#--hide-extension rpcs3.app \
#--hide-extension Quickstart.url \
#--app-drop-link 600 185 \
#--skip-jenkins \
#--format ULMO \
#"$DMG_FILEPATH" \
#RPCS3.app
#FILESIZE=$(stat -f %z "$DMG_FILEPATH")
#SHA256SUM=$(shasum -a 256 "$DMG_FILEPATH" | awk '{ print $1 }')
ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos_arm64.7z"
"$BREW_PATH/bin/7z" a -mx9 "$ARCHIVE_FILEPATH" RPCS3.app Quickstart.url
FILESIZE=$(stat -f %z "$ARCHIVE_FILEPATH")
SHA256SUM=$(shasum -a 256 "$ARCHIVE_FILEPATH" | awk '{ print $1 }')
cd ..
echo "${SHA256SUM};${FILESIZE}B" > "$RELEASE_MESSAGE"
cd bin
+62 -38
View File
@@ -3,22 +3,21 @@
# shellcheck disable=SC2086
cd build || exit 1
# Gather explicit version number and number of commits
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ../rpcs3/rpcs3_version.cpp)
COMM_COUNT=$(git rev-list --count HEAD)
COMM_HASH=$(git rev-parse --short=8 HEAD)
AVVER="${COMM_TAG}-${COMM_COUNT}"
# AVVER is used for GitHub releases, it is the version number.
echo "AVVER=$AVVER" >> ../.ci/ci-vars.env
cd bin
mkdir "rpcs3.app/Contents/lib/"
git clone --revision=a075e5e417f87675ea3137b7365f3e5a99608d72 https://github.com/KhronosGroup/MoltenVK.git
cd MoltenVK
./fetchDependencies --macos
sudo xcode-select -switch /Applications/Xcode_16.2.app/Contents/Developer
make macos MVK_USE_METAL_PRIVATE_API=1
cd ../
cp "/usr/local/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib" "rpcs3.app/Contents/lib/libc++abi.1.dylib"
cp "$(realpath /usr/local/lib/libsharpyuv.0.dylib)" "rpcs3.app/Contents/lib/libsharpyuv.0.dylib"
cp "$(realpath /usr/local/lib/libintl.8.dylib)" "rpcs3.app/Contents/lib/libintl.8.dylib"
mkdir -p "rpcs3.app/Contents/Resources/vulkan/icd.d" || true
cp "MoltenVK/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib" "rpcs3.app/Contents/Frameworks/libMoltenVK.dylib"
cp "MoltenVK/Package/Release/MoltenVK/dynamic/dylib/macOS/MoltenVK_icd.json" "rpcs3.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json"
sed -i '' "s/.\//..\/..\/..\/Frameworks\//g" "rpcs3.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json"
cp "$(realpath $BREW_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++abi.1.0.dylib)" "rpcs3.app/Contents/Frameworks/libc++abi.1.dylib"
cp "$(realpath $BREW_PATH/opt/gcc/lib/gcc/current/libgcc_s.1.1.dylib)" "rpcs3.app/Contents/Frameworks/libgcc_s.1.1.dylib"
rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
"rpcs3.app/Contents/Frameworks/QtQml.framework" \
@@ -27,19 +26,56 @@ rm -rf "rpcs3.app/Contents/Frameworks/QtPdf.framework" \
"rpcs3.app/Contents/Frameworks/QtVirtualKeyboard.framework" \
"rpcs3.app/Contents/Plugins/platforminputcontexts" \
"rpcs3.app/Contents/Plugins/virtualkeyboard" \
"rpcs3.app/Contents/Resources/git"
"rpcs3.app/Contents/Resources/git" || true
../../.ci/optimize-mac.sh rpcs3.app
# Download translations
mkdir -p "rpcs3.app/Contents/translations"
ZIP_URL="https://github.com/RPCS3/rpcs3_translations/releases/latest/download/RPCS3-languages.zip"
echo "Downloading translations from: $ZIP_URL"
if curl -fsSL "$ZIP_URL" -o "translations.zip"; then
echo "Successfully downloaded translations."
if unzip -o translations.zip -d "rpcs3.app/Contents/translations" >/dev/null 2>&1; then
rm -f translations.zip
else
echo "Failed to extract translations.zip. Continuing without translations."
rm -f translations.zip
fi
else
echo "Warning: Failed to download translations. Skipping..."
fi
# Copy Qt translations manually
QT_TRANS="$WORKDIR/qt-downloader/$QT_VER/clang_64/translations"
cp $QT_TRANS/qt_*.qm rpcs3.app/Contents/translations
cp $QT_TRANS/qtbase_*.qm rpcs3.app/Contents/translations
cp $QT_TRANS/qtmultimedia_*.qm rpcs3.app/Contents/translations
rm -f rpcs3.app/Contents/translations/qt_help_*.qm || true
# Need to do this rename hack due to case insensitive filesystem
mv rpcs3.app RPCS3_.app
mv RPCS3_.app RPCS3.app
# Hack
install_name_tool \
-delete_rpath /usr/local/lib \
-delete_rpath /usr/local/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3
#-delete_rpath /usr/local/Cellar/sdl3/3.2.8/lib
# Hack to fix rpath issues
BIN="RPCS3.app/Contents/MacOS/rpcs3"
install_name_tool -delete_rpath /opt/homebrew/lib $BIN || true
install_name_tool -delete_rpath /usr/local/lib $BIN || true
# Fix dylib IDs
for lib in RPCS3.app/Contents/Frameworks/*.dylib; do
name=$(basename "$lib")
install_name_tool -id "@rpath/$name" "$lib"
done
# Rewrite any hardcoded Homebrew paths to use @rpath
find "RPCS3.app/Contents/" -type f \( -perm +111 -o -name "*.dylib" \) | while read -r bin; do
otool -L "$bin" | grep -E "/opt/homebrew|/usr/local" | awk '{print $1}' | while read -r dep; do
base=$(basename "$dep")
echo "Fixing $dep -> @rpath/$base in $bin"
install_name_tool -change "$dep" "@rpath/$base" "$bin"
done
done
# NOTE: "--deep" is deprecated
codesign --deep -fs - RPCS3.app
@@ -48,24 +84,12 @@ echo "[InternetShortcut]" > Quickstart.url
echo "URL=https://rpcs3.net/quickstart" >> Quickstart.url
echo "IconIndex=0" >> Quickstart.url
#DMG_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos.dmg"
#"$BREW_X64_PATH/bin/create-dmg" --volname RPCS3 \
#--window-size 800 400 \
#--icon-size 100 \
#--icon rpcs3.app 200 190 \
#--add-file Quickstart.url Quickstart.url 400 20 \
#--hide-extension rpcs3.app \
#--hide-extension Quickstart.url \
#--app-drop-link 600 185 \
#--skip-jenkins \
#--format ULMO \
#"$DMG_FILEPATH" \
#RPCS3.app
#FILESIZE=$(stat -f %z "$DMG_FILEPATH")
#SHA256SUM=$(shasum -a 256 "$DMG_FILEPATH" | awk '{ print $1 }')
ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${COMM_TAG}-${COMM_COUNT}-${COMM_HASH}_macos.7z"
"$BREW_X64_PATH/bin/7z" a -mx9 "$ARCHIVE_FILEPATH" RPCS3.app Quickstart.url
if [ "$AARCH64" -eq 1 ]; then
ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${LVER}_macos_aarch64.7z"
else
ARCHIVE_FILEPATH="$BUILD_ARTIFACTSTAGINGDIRECTORY/rpcs3-v${LVER}_macos.7z"
fi
7z a -mx9 "$ARCHIVE_FILEPATH" RPCS3.app Quickstart.url
FILESIZE=$(stat -f %z "$ARCHIVE_FILEPATH")
SHA256SUM=$(shasum -a 256 "$ARCHIVE_FILEPATH" | awk '{ print $1 }')
+59
View File
@@ -0,0 +1,59 @@
#!/bin/sh -ex
# source ci-vars.env
# shellcheck disable=SC1091
. .ci/ci-vars.env
cd build || exit 1
CPU_ARCH="${1:-x86_64}"
MSYS2="${2:-clang64}"
echo "Deploying rpcs3 windows clang $CPU_ARCH"
# BUILD_blablabla is CI specific, so we wrap it for portability
ARTIFACT_DIR=$(cygpath -u "$BUILD_ARTIFACTSTAGINGDIRECTORY")
MSYS2_CLANG_BIN=$(cygpath -w /"${MSYS2}"/bin)
MSYS2_USR_BIN=$(cygpath -w /usr/bin)
echo "Installing dependencies of: ./bin/rpcs3.exe (MSYS2 dir is '$MSYS2_CLANG_BIN', usr dir is '$MSYS2_USR_BIN')"
cmake -DMSYS2_CLANG_BIN="$MSYS2_CLANG_BIN" -DMSYS2_USR_BIN="$MSYS2_USR_BIN" -Dexe=./bin/rpcs3.exe -P ../buildfiles/cmake/CopyRuntimeDependencies.cmake
# Prepare compatibility and SDL database for packaging
mkdir ./bin/config
mkdir ./bin/config/input_configs
curl -fsSL 'https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt' 1> ./bin/config/input_configs/gamecontrollerdb.txt
curl -fsSL 'https://rpcs3.net/compatibility?api=v1&export' | iconv -f ISO-8859-1 -t UTF-8 1> ./bin/GuiConfigs/compat_database.dat
curl -fsSL 'https://api.rpcs3.net/config/?api=v1' | iconv -f ISO-8859-1 -t UTF-8 1> ./bin/GuiConfigs/config_database.dat
# Download translations
mkdir -p ./bin/share/qt6/translations
ZIP_URL=$(curl -fsSL "https://api.github.com/repos/RPCS3/rpcs3_translations/releases/latest" \
| grep "browser_download_url" \
| grep "RPCS3-languages.zip" \
| cut -d '"' -f 4)
if [ -z "$ZIP_URL" ]; then
echo "Failed to find RPCS3-languages.zip in the latest release. Continuing without translations."
else
echo "Downloading translations from: $ZIP_URL"
curl -L -o translations.zip "$ZIP_URL" || {
echo "Failed to download translations.zip. Continuing without translations."
exit 0
}
7z x translations.zip -o"./bin/share/qt6/translations" >/dev/null 2>&1 || \
echo "Failed to extract translations.zip. Continuing without translations."
rm -f translations.zip
fi
# Package artifacts
7z a -m0=LZMA2 -mx9 "$BUILD" ./bin/*
# Generate sha256 hashes
# Write to file for GitHub releases
sha256sum "$BUILD" | awk '{ print $1 }' | tee "$BUILD.sha256"
echo "$(cat "$BUILD.sha256");$(stat -c %s "$BUILD")B" > "$RELEASE_MESSAGE"
# Move files to publishing directory
mkdir -p "$ARTIFACT_DIR"
cp -- "$BUILD" "$ARTIFACT_DIR"
cp -- "$BUILD.sha256" "$ARTIFACT_DIR"
+22 -2
View File
@@ -1,9 +1,9 @@
#!/bin/sh -ex
# First let's see print some info about our caches
# First let's print some info about our caches
"$(cygpath -u "$CCACHE_BIN_DIR")"/ccache.exe --show-stats -v
# BUILD_blablabla is Azure specific, so we wrap it for portability
# BUILD_blablabla is CI specific, so we wrap it for portability
ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
# Remove unecessary files
@@ -14,6 +14,26 @@ mkdir ./bin/config
mkdir ./bin/config/input_configs
curl -fsSL 'https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt' 1> ./bin/config/input_configs/gamecontrollerdb.txt
curl -fsSL 'https://rpcs3.net/compatibility?api=v1&export' | iconv -t UTF-8 1> ./bin/GuiConfigs/compat_database.dat
curl -fsSL 'https://api.rpcs3.net/config/?api=v1' | iconv -t UTF-8 1> ./bin/GuiConfigs/config_database.dat
# Download translations
mkdir -p ./bin/qt6/translations
ZIP_URL=$(curl -fsSL "https://api.github.com/repos/RPCS3/rpcs3_translations/releases/latest" \
| grep "browser_download_url" \
| grep "RPCS3-languages.zip" \
| cut -d '"' -f 4)
if [ -z "$ZIP_URL" ]; then
echo "Failed to find RPCS3-languages.zip in the latest release. Continuing without translations."
else
echo "Downloading translations from: $ZIP_URL"
curl -L -o translations.zip "$ZIP_URL" || {
echo "Failed to download translations.zip. Continuing without translations."
exit 0
}
unzip -o translations.zip -d "./bin/qt6/translations" >/dev/null 2>&1 || \
echo "Failed to extract translations.zip. Continuing without translations."
rm -f translations.zip
fi
# Download SSL certificate (not needed with CURLSSLOPT_NATIVE_CA)
#curl -fsSL 'https://curl.haxx.se/ca/cacert.pem' 1> ./bin/cacert.pem
+1 -2
View File
@@ -1,5 +1,4 @@
# Variables set by Azure Pipelines
CI_HAS_ARTIFACTS
# Variables set by CI
BUILD_REASON
BUILD_SOURCEVERSION
BUILD_ARTIFACTSTAGINGDIRECTORY
-13
View File
@@ -1,13 +0,0 @@
#!/bin/sh -e
# Export variables for later stages of the Azure pipeline
# Values done in this manner will appear as environment variables
# in later stages.
# From pure-sh-bible
# Setting 'IFS' tells 'read' where to split the string.
while IFS='=' read -r key val; do
# Skip over lines containing comments.
[ "${key##\#*}" ] || continue
echo "##vso[task.setvariable variable=$key]$val"
done < ".ci/ci-vars.env"
-13
View File
@@ -1,13 +0,0 @@
#!/bin/sh -e
# Export variables for later stages of the Cirrus pipeline
# Values done in this manner will appear as environment variables
# in later stages.
# From pure-sh-bible
# Setting 'IFS' tells 'read' where to split the string.
while IFS='=' read -r key val; do
# Skip over lines containing comments.
[ "${key##\#*}" ] || continue
export "$key"="$val"
done < ".ci/ci-vars.env"
+2 -2
View File
@@ -12,7 +12,7 @@ pkg info # debug
pkg install "llvm$LLVM_COMPILER_VER"
# Mandatory dependencies (qtX-base is pulled via qtX-multimedia)
pkg install git ccache cmake ninja "qt$QT_VER_MAIN-multimedia" "qt$QT_VER_MAIN-svg" glew openal-soft ffmpeg
pkg install git ccache cmake ninja "qt$QT_VER_MAIN-multimedia" "qt$QT_VER_MAIN-svg" glew openal-soft ffmpeg pcre2
# Optional dependencies (libevdev is pulled by qtX-base)
pkg install pkgconf alsa-lib pulseaudio sdl3 evdev-proto vulkan-headers vulkan-loader
pkg install pkgconf alsa-lib pulseaudio sdl3 evdev-proto vulkan-headers vulkan-loader opencv
+75
View File
@@ -0,0 +1,75 @@
#!/bin/sh -ex
# Resource/dependency URLs
CCACHE_URL="https://github.com/ccache/ccache/releases/download/v4.12.3/ccache-4.12.3-windows-x86_64.zip"
DEP_URLS=" \
$CCACHE_URL"
# CI doesn't make a cache dir if it doesn't exist, so we do it manually
[ -d "$DEPS_CACHE_DIR" ] || mkdir "$DEPS_CACHE_DIR"
# Pull the llvm submodule
# shellcheck disable=SC2046
git submodule -q update --init --depth=1 -- 3rdparty/llvm
# Git bash doesn't have rev, so here it is
rev()
{
echo "$1" | awk '{ for(i = length($0); i != 0; --i) { a = a substr($0, i, 1); } } END { print a }'
}
# Usage: download_and_verify url checksum algo file
# Check to see if a file is already cached, and the checksum matches. If not, download it.
# Tries up to 3 times
download_and_verify()
{
url="$1"
correctChecksum="$2"
algo="$3"
fileName="$4"
path="$DEPS_CACHE_DIR/$fileName"
for _ in 1 2 3; do
# Check if the file exists and the checksum is correct
if [ -e "$path" ]; then
fileChecksum=$("${algo}sum" "$path" | awk '{ print $1 }')
[ "$fileChecksum" = "$correctChecksum" ] && return 0
fi
# Otherwise download the file
curl -fLo "$path" "$url"
# Check again if the file exists and the checksum is correct
if [ -e "$path" ]; then
fileChecksum=$("${algo}sum" "$path" | awk '{ print $1 }')
[ "$fileChecksum" = "$correctChecksum" ] && return 0
fi
done
return 1;
}
# Some dependencies install here
[ -d "./build/lib_ext/Release-x64" ] || mkdir -p "./build/lib_ext/Release-x64"
for url in $DEP_URLS; do
# Get the filename from the URL and remove query strings (?arg=something).
fileName="$(rev "$(rev "$url" | cut -d'/' -f1)" | cut -d'?' -f1)"
[ -z "$fileName" ] && echo "Unable to parse url: $url" && exit 1
# shellcheck disable=SC1003
case "$url" in
*ccache*) checksum=$CCACHE_SHA; algo="sha256"; outDir="$CCACHE_BIN_DIR" ;;
*) echo "Unknown url resource: $url"; exit 1 ;;
esac
download_and_verify "$url" "$checksum" "$algo" "$fileName"
7z x -y "$DEPS_CACHE_DIR/$fileName" -aos -o"$outDir"
done
# Setup ccache tool
[ -d "$CCACHE_DIR" ] || mkdir -p "$(cygpath -u "$CCACHE_DIR")"
CCACHE_SH_DIR=$(cygpath -u "$CCACHE_BIN_DIR")
mv "$CCACHE_SH_DIR"/ccache-*/* "$CCACHE_SH_DIR"
cp "$CCACHE_SH_DIR"/ccache.exe "$CCACHE_SH_DIR"/cl.exe
+46
View File
@@ -0,0 +1,46 @@
#!/bin/sh -ex
CPU_ARCH="${1:-win64}"
COMPILER="${2:-msvc}"
# These are CI specific, so we wrap them for portability
REPO_NAME="$BUILD_REPOSITORY_NAME"
REPO_BRANCH="$BUILD_SOURCEBRANCHNAME"
PR_NUMBER="$BUILD_PR_NUMBER"
# Gather explicit version number and number of commits
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
COMM_COUNT=$(git rev-list --count HEAD)
COMM_HASH=$(git rev-parse --short=8 HEAD)
# Differentiate Windows builds
if [ "$COMPILER" = 'clang' ];then
BUILD_SUFFIX="win64_${CPU_ARCH}_${COMPILER}"
else
BUILD_SUFFIX="${CPU_ARCH}_${COMPILER}"
fi
# Format the above into filenames
if [ -n "$PR_NUMBER" ]; then
AVVER="${COMM_TAG}-${COMM_HASH}"
BUILD_RAW="rpcs3-v${AVVER}_${BUILD_SUFFIX}"
BUILD="${BUILD_RAW}.7z"
else
AVVER="${COMM_TAG}-${COMM_COUNT}"
BUILD_RAW="rpcs3-v${AVVER}-${COMM_HASH}_${BUILD_SUFFIX}"
BUILD="${BUILD_RAW}.7z"
fi
# BRANCH is used for experimental build warnings for pr builds, used in main_window.cpp.
# BUILD is the name of the release artifact
# BUILD_RAW is just filename
# AVVER is used for GitHub releases, it is the version number.
BRANCH="${REPO_NAME}/${REPO_BRANCH}"
# SC2129
{
echo "BRANCH=$BRANCH"
echo "BUILD=$BUILD"
echo "BUILD_RAW=$BUILD_RAW"
echo "AVVER=$AVVER"
} >> .ci/ci-vars.env
+24 -45
View File
@@ -1,27 +1,23 @@
#!/bin/sh -ex
# These are Azure specific, so we wrap them for portability
REPO_NAME="$BUILD_REPOSITORY_NAME"
REPO_BRANCH="$SYSTEM_PULLREQUEST_SOURCEBRANCH"
PR_NUMBER="$SYSTEM_PULLREQUEST_PULLREQUESTID"
# Resource/dependency URLs
# Qt mirrors can be volatile and slow, so we list 2
#QT_HOST="http://mirrors.ocf.berkeley.edu/qt/"
QT_HOST="http://qt.mirror.constant.com/"
QT_URL_VER=$(echo "$QT_VER" | sed "s/\.//g")
QT_VER_MSVC_UP=$(echo "${QT_VER_MSVC}" | tr '[:lower:]' '[:upper:]')
QT_PREFIX="online/qtsdkrepository/windows_x86/desktop/qt${QT_VER_MAIN}_${QT_URL_VER}/qt${QT_VER_MAIN}_${QT_URL_VER}/qt.qt${QT_VER_MAIN}.${QT_URL_VER}."
QT_PREFIX="online/qtsdkrepository/windows_x86/desktop/qt${QT_VER_MAIN}_${QT_URL_VER}/qt${QT_VER_MAIN}_${QT_URL_VER}_${QT_VER_MSVC}_64/qt.qt${QT_VER_MAIN}.${QT_URL_VER}."
QT_PREFIX_2="win64_${QT_VER_MSVC}_64/${QT_VER}-0-${QT_DATE}"
QT_SUFFIX="-Windows-Windows_11_23H2-${QT_VER_MSVC_UP}-Windows-Windows_11_23H2-X86_64.7z"
QT_SUFFIX="-Windows-Windows_11_24H2-${QT_VER_MSVC_UP}-Windows-Windows_11_24H2-X86_64.7z"
QT_BASE_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtbase${QT_SUFFIX}"
QT_DECL_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtdeclarative${QT_SUFFIX}"
QT_TOOL_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qttools${QT_SUFFIX}"
QT_MM_URL="${QT_HOST}${QT_PREFIX}addons.qtmultimedia.${QT_PREFIX_2}qtmultimedia${QT_SUFFIX}"
QT_SVG_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qtsvg${QT_SUFFIX}"
QT_TRANSLATIONS_URL="${QT_HOST}${QT_PREFIX}${QT_PREFIX_2}qttranslations${QT_SUFFIX}"
LLVMLIBS_URL="https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win-${LLVM_VER}/llvmlibs_mt.7z"
VULKAN_SDK_URL="https://www.dropbox.com/scl/fi/sjjh0fc4ld281pjbl2xzu/VulkanSDK-${VULKAN_VER}-Installer.exe?rlkey=f6wzc0lvms5vwkt2z3qabfv9d&dl=1"
CCACHE_URL="https://github.com/ccache/ccache/releases/download/v4.11.2/ccache-4.11.2-windows-x86_64.zip"
VULKAN_SDK_URL="https://www.dropbox.com/scl/fi/olpvqk4346ig7i8btadk5/vulkansdk-windows-X64-${VULKAN_VER}.exe?rlkey=huvssch6sy904qkg8ti9p65br&st=pztptdin&dl=1"
CCACHE_URL="https://github.com/ccache/ccache/releases/download/v4.12.3/ccache-4.12.3-windows-x86_64.zip"
DEP_URLS=" \
$QT_BASE_URL \
@@ -29,17 +25,18 @@ DEP_URLS=" \
$QT_TOOL_URL \
$QT_MM_URL \
$QT_SVG_URL \
$QT_TRANSLATIONS_URL \
$LLVMLIBS_URL \
$VULKAN_SDK_URL\
$CCACHE_URL"
# Azure pipelines doesn't make a cache dir if it doesn't exist, so we do it manually
# CI doesn't make a cache dir if it doesn't exist, so we do it manually
[ -d "$DEPS_CACHE_DIR" ] || mkdir "$DEPS_CACHE_DIR"
# Pull all the submodules except llvm, since it is built separately and we just download that build
# Note: Tried to use git submodule status, but it takes over 20 seconds
# shellcheck disable=SC2046
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/FAudio/ && !/llvm/ { print $3 }' .gitmodules)
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/FAudio/ && !/llvm/ && !/feralinteractive/ { print $3 }' .gitmodules)
# Git bash doesn't have rev, so here it is
rev()
@@ -56,11 +53,23 @@ download_and_verify()
correctChecksum="$2"
algo="$3"
fileName="$4"
path="$DEPS_CACHE_DIR/$fileName"
for _ in 1 2 3; do
[ -e "$DEPS_CACHE_DIR/$fileName" ] || curl -fLo "$DEPS_CACHE_DIR/$fileName" "$url"
fileChecksum=$("${algo}sum" "$DEPS_CACHE_DIR/$fileName" | awk '{ print $1 }')
[ "$fileChecksum" = "$correctChecksum" ] && return 0
# Check if the file exists and the checksum is correct
if [ -e "$path" ]; then
fileChecksum=$("${algo}sum" "$path" | awk '{ print $1 }')
[ "$fileChecksum" = "$correctChecksum" ] && return 0
fi
# Otherwise download the file
curl -fLo "$path" "$url"
# Check again if the file exists and the checksum is correct
if [ -e "$path" ]; then
fileChecksum=$("${algo}sum" "$path" | awk '{ print $1 }')
[ "$fileChecksum" = "$correctChecksum" ] && return 0
fi
done
return 1;
@@ -79,7 +88,7 @@ for url in $DEP_URLS; do
*qt*) checksum=$(curl -fL "${url}.sha1"); algo="sha1"; outDir="$QTDIR/" ;;
*llvm*) checksum=$(curl -fL "${url}.sha256"); algo="sha256"; outDir="./build/lib_ext/Release-x64" ;;
*ccache*) checksum=$CCACHE_SHA; algo="sha256"; outDir="$CCACHE_BIN_DIR" ;;
*Vulkan*)
*vulkansdk*)
# Vulkan setup needs to be run in batch environment
# Need to subshell this or else it doesn't wait
download_and_verify "$url" "$VULKAN_SDK_SHA" "sha256" "$fileName"
@@ -99,33 +108,3 @@ done
CCACHE_SH_DIR=$(cygpath -u "$CCACHE_BIN_DIR")
mv "$CCACHE_SH_DIR"/ccache-*/* "$CCACHE_SH_DIR"
cp "$CCACHE_SH_DIR"/ccache.exe "$CCACHE_SH_DIR"/cl.exe
# Gather explicit version number and number of commits
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
COMM_COUNT=$(git rev-list --count HEAD)
COMM_HASH=$(git rev-parse --short=8 HEAD)
# Format the above into filenames
if [ -n "$PR_NUMBER" ]; then
AVVER="${COMM_TAG}-${COMM_HASH}"
BUILD_RAW="rpcs3-v${AVVER}_win64"
BUILD="${BUILD_RAW}.7z"
else
AVVER="${COMM_TAG}-${COMM_COUNT}"
BUILD_RAW="rpcs3-v${AVVER}-${COMM_HASH}_win64"
BUILD="${BUILD_RAW}.7z"
fi
# BRANCH is used for experimental build warnings for pr builds, used in main_window.cpp.
# BUILD is the name of the release artifact
# BUILD_RAW is just filename
# AVVER is used for GitHub releases, it is the version number.
BRANCH="${REPO_NAME}/${REPO_BRANCH}"
# SC2129
{
echo "BRANCH=$BRANCH"
echo "BUILD=$BUILD"
echo "BUILD_RAW=$BUILD_RAW"
echo "AVVER=$AVVER"
} >> .ci/ci-vars.env
-153
View File
@@ -1,153 +0,0 @@
env:
CIRRUS_CLONE_DEPTH: 0 # Unshallow clone to obtain proper GIT_VERSION
BUILD_REPOSITORY_NAME: $CIRRUS_REPO_FULL_NAME
SYSTEM_PULLREQUEST_SOURCEBRANCH: $CIRRUS_BRANCH
SYSTEM_PULLREQUEST_PULLREQUESTID: $CIRRUS_PR
BUILD_SOURCEVERSION: $CIRRUS_CHANGE_IN_REPO
BUILD_SOURCEBRANCHNAME: $CIRRUS_BRANCH
RPCS3_TOKEN: ENCRYPTED[100ebb8e3552bf2021d0ef55dccda3e58d27be5b6cab0b0b92843ef490195d3c4edaefa087e4a3b425caa6392300b9b1]
QT_VER_MAIN: '6'
QT_VER: '6.9.0'
LLVM_COMPILER_VER: '19'
LLVM_VER: '19.1.7'
# windows_task:
# matrix:
# - name: Cirrus Windows
# windows_container:
# image: cirrusci/windowsservercore:visualstudio2019
# cpu: 8
# memory: 16G
# env:
# CIRRUS_SHELL: "bash"
# COMPILER: msvc
# BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}\artifacts\
# QT_VER_MSVC: 'msvc2022'
# QT_DATE: '202503301022'
# QTDIR: C:\Qt\${QT_VER}\${QT_VER_MSVC}_64
# VULKAN_VER: '1.3.268.0'
# VULKAN_SDK_SHA: '8459ef49bd06b697115ddd3d97c9aec729e849cd775f5be70897718a9b3b9db5'
# VULKAN_SDK: C:\VulkanSDK\${VULKAN_VER}
# CACHE_DIR: "./cache"
# UPLOAD_COMMIT_HASH: 7d09e3be30805911226241afbb14f8cdc2eb054e
# UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-win"
# deps_cache:
# folder: "./cache"
# #obj_cache:
# # folder: "./tmp"
# #obj2_cache:
# # folder: "./rpcs3/x64"
# setup_script:
# - './.ci/get_keys-windows.sh'
# - './.ci/setup-windows.sh'
# rpcs3_script:
# - export PATH=${PATH}:"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin"
# - msbuild.exe rpcs3.sln //p:Configuration=Release //m
# deploy_script:
# - mkdir artifacts
# - source './.ci/export-cirrus-vars.sh'
# - './.ci/deploy-windows.sh'
# artifacts:
# name: Artifact
# path: "*.7z*"
# push_script: |
# if [ "$CIRRUS_REPO_OWNER" = "RPCS3" ] && [ -z "$CIRRUS_PR" ] && [ "$CIRRUS_BRANCH" = "master" ]; then
# source './.ci/export-cirrus-vars.sh'
# './.ci/github-upload.sh'
# fi;
# linux_task:
# container:
# image: rpcs3/rpcs3-ci-jammy:1.6
# cpu: 4
# memory: 16G
# env:
# BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}/artifacts
# ARTDIR: ${CIRRUS_WORKING_DIR}/artifacts/
# CCACHE_DIR: "/tmp/ccache_dir"
# CCACHE_MAXSIZE: 300M
# CI_HAS_ARTIFACTS: true
# UPLOAD_COMMIT_HASH: d812f1254a1157c80fd402f94446310560f54e5f
# UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux"
# DEPLOY_APPIMAGE: true
# APPDIR: "./appdir"
# RELEASE_MESSAGE: "../GitHubReleaseMessage.txt"
# ccache_cache:
# folder: "/tmp/ccache_dir"
# matrix:
# - name: Cirrus Linux GCC
# env:
# COMPILER: gcc
# gcc_script:
# - mkdir artifacts
# - ".ci/build-linux.sh"
# - name: Cirrus Linux Clang
# env:
# COMPILER: clang
# clang_script:
# - mkdir artifacts
# - ".ci/build-linux.sh"
# artifacts:
# name: Artifact
# path: "artifacts/*"
# push_script: |
# if [ "$CIRRUS_REPO_OWNER" = "RPCS3" ] && [ -z "$CIRRUS_PR" ] && [ "$CIRRUS_BRANCH" = "master" ] && [ "$COMPILER" = "gcc" ]; then
# COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
# COMM_COUNT=$(git rev-list --count HEAD)
# COMM_HASH=$(git rev-parse --short=8 HEAD)
# export AVVER="${COMM_TAG}-${COMM_COUNT}"
# .ci/github-upload.sh
# fi;
freebsd_task:
matrix:
- name: Cirrus FreeBSD
freebsd_instance:
image_family: freebsd-13-5
cpu: 8
memory: 8G
env:
CCACHE_MAXSIZE: 300M # 3x clean build, rounded
CCACHE_DIR: /tmp/ccache_dir
ccache_cache:
folder: /tmp/ccache_dir
install_script: "sh -ex ./.ci/install-freebsd.sh"
script: "./.ci/build-freebsd.sh"
# linux_aarch64_task:
# env:
# BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}/artifacts
# ARTDIR: ${CIRRUS_WORKING_DIR}/artifacts/
# CCACHE_DIR: "/tmp/ccache_dir"
# CCACHE_MAXSIZE: 300M
# CI_HAS_ARTIFACTS: true
# UPLOAD_COMMIT_HASH: a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1
# UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux-arm64"
# DEPLOY_APPIMAGE: true
# APPDIR: "./appdir"
# RELEASE_MESSAGE: "../GitHubReleaseMessage.txt"
# COMPILER: clang
# ccache_cache:
# folder: "/tmp/ccache_dir"
# matrix:
# - name: Cirrus Linux AArch64 Clang
# arm_container:
# image: 'docker.io/rpcs3/rpcs3-ci-jammy-aarch64:1.6'
# cpu: 8
# memory: 8G
# clang_script:
# - mkdir artifacts
# - "sh -ex ./.ci/build-linux-aarch64.sh"
# artifacts:
# name: Artifact
# path: "artifacts/*"
# push_script: |
# if [ "$CIRRUS_REPO_OWNER" = "RPCS3" ] && [ -z "$CIRRUS_PR" ] && [ "$CIRRUS_BRANCH" = "master" ]; then
# COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
# COMM_COUNT=$(git rev-list --count HEAD)
# COMM_HASH=$(git rev-parse --short=8 HEAD)
# export AVVER="${COMM_TAG}-${COMM_COUNT}"
# .ci/github-upload.sh
# fi;
+72
View File
@@ -0,0 +1,72 @@
name: Build LLVM
defaults:
run:
shell: bash
on:
workflow_dispatch:
concurrency:
group: ${{ github.ref }}-${{ github.event_name }}
cancel-in-progress: true
env:
BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts/
jobs:
Windows_Build:
if: github.event_name == 'workflow_dispatch'
name: LLVM Windows (MSVC)
runs-on: windows-2025-vs2026
env:
COMPILER: msvc
CCACHE_SHA: '859141059ac950e1e8cd042c66f842f26b9e3a62a1669a69fe6ba180cb58bbdf'
CCACHE_BIN_DIR: 'C:\ccache_bin'
CCACHE_DIR: 'C:\ccache'
CCACHE_INODECACHE: 'true'
CCACHE_SLOPPINESS: 'time_macros'
DEPS_CACHE_DIR: ./dependency_cache
steps:
- name: Checkout repository
uses: actions/checkout@main
with:
fetch-depth: 0
- name: Restore Dependencies Cache
uses: actions/cache/restore@main
id: restore-dependencies-cache
with:
path: ${{ env.DEPS_CACHE_DIR }}
key: "${{ runner.os }}-${{ env.COMPILER }}-llvm-${{ env.CCACHE_SHA }}"
restore-keys: ${{ runner.os }}-${{ env.COMPILER }}-llvm
- name: Download and unpack dependencies
run: .ci/setup-llvm.sh
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@main
- name: Compile LLVM
shell: pwsh
run: msbuild 3rdparty\llvm\llvm_build.vcxproj /p:SolutionDir="$(pwd)/" /p:Configuration=Release /v:minimal /p:Platform=x64 /p:PreferredToolArchitecture=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_only.targets"
- name: Pack up build artifacts
run: |
mkdir -p "${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}"
.ci/deploy-llvm.sh
- name: Upload artifacts (7z)
uses: actions/upload-artifact@main
with:
name: LLVM for Windows (MSVC)
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
compression-level: 0
if-no-files-found: error
- name: Save Dependencies Cache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@main
with:
path: ${{ env.DEPS_CACHE_DIR }}
key: ${{ steps.restore-dependencies-cache.outputs.cache-primary-key }}
+234 -36
View File
@@ -17,6 +17,7 @@ concurrency:
env:
BUILD_REPOSITORY_NAME: ${{ github.repository }}
BUILD_SOURCEBRANCHNAME: ${{ github.ref_name }}
BUILD_PR_NUMBER: ${{ github.event.pull_request.number }}
BUILD_SOURCEVERSION: ${{ github.sha }}
BUILD_ARTIFACTSTAGINGDIRECTORY: ${{ github.workspace }}/artifacts/
@@ -29,26 +30,29 @@ jobs:
matrix:
include:
- os: ubuntu-24.04
docker_img: "rpcs3/rpcs3-ci-jammy:1.6"
docker_img: "rpcs3/rpcs3-ci-jammy:1.13"
build_sh: "/rpcs3/.ci/build-linux.sh"
compiler: clang
UPLOAD_COMMIT_HASH: d812f1254a1157c80fd402f94446310560f54e5f
UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux"
- os: ubuntu-24.04
docker_img: "rpcs3/rpcs3-ci-jammy:1.6"
docker_img: "rpcs3/rpcs3-ci-jammy:1.13"
build_sh: "/rpcs3/.ci/build-linux.sh"
compiler: gcc
- os: ubuntu-24.04-arm
docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.6"
docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.13"
build_sh: "/rpcs3/.ci/build-linux-aarch64.sh"
compiler: clang
UPLOAD_COMMIT_HASH: a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1
UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux-arm64"
- os: ubuntu-24.04-arm
docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.13"
build_sh: "/rpcs3/.ci/build-linux-aarch64.sh"
compiler: gcc
name: RPCS3 Linux ${{ matrix.os }} ${{ matrix.compiler }}
runs-on: ${{ matrix.os }}
env:
CCACHE_DIR: ${{ github.workspace }}/ccache
CI_HAS_ARTIFACTS: true
DEPLOY_APPIMAGE: true
APPDIR: "/rpcs3/build/appdir"
ARTDIR: "/root/artifacts"
@@ -63,19 +67,19 @@ jobs:
with:
fetch-depth: 0
- name: Setup Cache
uses: actions/cache@main
- name: Restore build Ccache
uses: actions/cache/restore@main
id: restore-build-ccache
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-${{github.run_id}}
restore-keys: |
${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-
restore-keys: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ runner.arch }}-
- name: Docker setup and build
run: |
docker pull --quiet ${{ matrix.docker_img }}
docker run \
-v $PWD:/rpcs3 \
docker run \
-v $PWD:/rpcs3 \
--env-file .ci/docker.env \
-v ${{ env.CCACHE_DIR }}:/root/.ccache \
-v ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}:${{ env.ARTDIR }} \
@@ -104,6 +108,13 @@ jobs:
export AVVER="${COMM_TAG}-${COMM_COUNT}"
.ci/github-upload.sh
- name: Save build Ccache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@main
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
Mac_Build:
# Only run push event on master branch of main repo, but run all PRs
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
@@ -112,48 +123,49 @@ jobs:
matrix:
include:
- name: Intel
build_sh: "arch -X86_64 .ci/build-mac.sh"
AARCH64: 0
UPLOAD_COMMIT_HASH: 51ae32f468089a8169aaf1567de355ff4a3e0842
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac
- name: Apple Silicon
build_sh: .ci/build-mac-arm64.sh
AARCH64: 1
UPLOAD_COMMIT_HASH: 8e21bdbc40711a3fccd18fbf17b742348b0f4281
UPLOAD_REPO_FULL_NAME: rpcs3/rpcs3-binaries-mac-arm64
name: RPCS3 Mac ${{ matrix.name }}
runs-on: macos-14
env:
CCACHE_DIR: /tmp/ccache_dir
CI_HAS_ARTIFACTS: true
QT_VER: '6.7.3'
QT_VER: '6.11.1'
QT_VER_MAIN: '6'
LLVM_COMPILER_VER: '19'
LLVM_COMPILER_VER: '21'
RELEASE_MESSAGE: ../GitHubReleaseMessage.txt
UPLOAD_COMMIT_HASH: ${{ matrix.UPLOAD_COMMIT_HASH }}
UPLOAD_REPO_FULL_NAME: ${{ matrix.UPLOAD_REPO_FULL_NAME }}
AARCH64: ${{ matrix.AARCH64 }}
RUN_UNIT_TESTS: github.event_name == 'pull_request' && 'ON' || 'OFF'
steps:
- name: Checkout repository
uses: actions/checkout@main
with:
fetch-depth: 0
- name: Setup Cache
uses: actions/cache@main
- name: Restore Build Ccache
uses: actions/cache/restore@main
id: restore-build-ccache
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-ccache-${{ matrix.name }}-${{github.run_id}}
restore-keys: |
${{ runner.os }}-ccache-${{ matrix.name }}-
restore-keys: ${{ runner.os }}-ccache-${{ matrix.name }}-
- name: Setup Qt Cache
uses: actions/cache@main
- name: Restore Qt Cache
uses: actions/cache/restore@main
id: restore-qt-cache
with:
path: /tmp/Qt
key: ${{ runner.os }}-qt-${{ matrix.name }}-${{ env.QT_VER }}
restore-keys: |
${{ runner.os }}-qt-${{ matrix.name }}-${{ env.QT_VER }}
restore-keys: ${{ runner.os }}-qt-${{ matrix.name }}-${{ env.QT_VER }}
- name: Build
run: ${{ matrix.build_sh }}
run: .ci/build-mac.sh
- name: Upload artifacts
uses: actions/upload-artifact@main
@@ -179,21 +191,35 @@ jobs:
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
run: .ci/github-upload.sh
- name: Save Build Ccache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@main
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
- name: Save Qt Cache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@main
with:
path: /tmp/Qt
key: ${{ steps.restore-qt-cache.outputs.cache-primary-key }}
Windows_Build:
# Only run push event on master branch of main repo, but run all PRs
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
name: RPCS3 Windows
runs-on: windows-2025
runs-on: windows-2025-vs2026
env:
COMPILER: msvc
QT_VER_MAIN: '6'
QT_VER: '6.9.0'
QT_VER: '6.11.1'
QT_VER_MSVC: 'msvc2022'
QT_DATE: '202503301022'
QT_DATE: '202605090529'
LLVM_VER: '19.1.7'
VULKAN_VER: '1.3.268.0'
VULKAN_SDK_SHA: '8459ef49bd06b697115ddd3d97c9aec729e849cd775f5be70897718a9b3b9db5'
CCACHE_SHA: '1f39f3ad5aae3fe915e99ad1302633bc8f6718e58fa7c0de2b0ba7e080f0f08c'
VULKAN_VER: '1.4.341.1'
VULKAN_SDK_SHA: 'bcf2d75aa9556889ab974858666e20b3655b6055a0db704ccb47279ff33b5bfe'
CCACHE_SHA: '859141059ac950e1e8cd042c66f842f26b9e3a62a1669a69fe6ba180cb58bbdf'
CCACHE_BIN_DIR: 'C:\ccache_bin'
CCACHE_DIR: 'C:\ccache'
CCACHE_INODECACHE: 'true'
@@ -209,7 +235,7 @@ jobs:
fetch-depth: 0
- name: Setup NuGet
uses: nuget/setup-nuget@v2
uses: nuget/setup-nuget@v4
- name: Restore NuGet packages
run: nuget restore rpcs3.sln
@@ -223,22 +249,26 @@ jobs:
- name: Get Cache Keys
run: .ci/get_keys-windows.sh
- name: Setup Build Ccache
uses: actions/cache@main
- name: Restore Build Ccache
uses: actions/cache/restore@main
id: restore-build-ccache
with:
path: ${{ env.CCACHE_DIR }}
key: "${{ runner.os }}-ccache-${{ env.COMPILER }}-${{github.run_id}}"
restore-keys: ${{ runner.os }}-ccache-${{ env.COMPILER }}-
- name: Setup Dependencies Cache
uses: actions/cache@main
- name: Restore Dependencies Cache
uses: actions/cache/restore@main
id: restore-dependencies-cache
with:
path: ${{ env.DEPS_CACHE_DIR }}
key: "${{ runner.os }}-${{ env.COMPILER }}-${{ env.QT_VER }}-${{ env.VULKAN_SDK_SHA }}-${{ env.CCACHE_SHA }}-${{ hashFiles('llvm.lock') }}"
restore-keys: ${{ runner.os }}-${{ env.COMPILER }}-
- name: Download and unpack dependencies
run: .ci/setup-windows.sh
run: |
.ci/setup-windows.sh
.ci/setup-windows-ci-vars.sh win64 msvc
- name: Export Variables
run: |
@@ -281,3 +311,171 @@ jobs:
env:
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
run: .ci/github-upload.sh
- name: Save Build Ccache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@main
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
- name: Save Dependencies Cache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@main
with:
path: ${{ env.DEPS_CACHE_DIR }}
key: ${{ steps.restore-dependencies-cache.outputs.cache-primary-key }}
Windows_Build_Clang:
# Only run push event on master branch of main repo, but run all PRs
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
strategy:
fail-fast: false
matrix:
include:
- msys2: clang64
compiler: clang
arch: x86_64
os: windows-2025
name: X64
- msys2: clangarm64
compiler: clang
arch: aarch64
os: windows-11-arm
name: ARM64
env:
CCACHE_DIR: 'C:\ccache'
RELEASE_MESSAGE: ../GitHubReleaseMessage.txt
name: RPCS3 Windows Clang ${{ matrix.arch }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@main
with:
fetch-depth: 0
- name: Setup msys2
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msys2 }}
update: true
cache: true
install: |
mingw-w64-clang-${{ matrix.arch }}-clang
mingw-w64-clang-${{ matrix.arch }}-ccache
mingw-w64-clang-${{ matrix.arch }}-cmake
mingw-w64-clang-${{ matrix.arch }}-lld
mingw-w64-clang-${{ matrix.arch }}-ninja
mingw-w64-clang-${{ matrix.arch }}-llvm
mingw-w64-clang-${{ matrix.arch }}-ffmpeg
mingw-w64-clang-${{ matrix.arch }}-opencv
mingw-w64-clang-${{ matrix.arch }}-iconv
mingw-w64-clang-${{ matrix.arch }}-glew
mingw-w64-clang-${{ matrix.arch }}-vulkan
mingw-w64-clang-${{ matrix.arch }}-vulkan-headers
mingw-w64-clang-${{ matrix.arch }}-vulkan-loader
mingw-w64-clang-${{ matrix.arch }}-gtest
mingw-w64-clang-${{ matrix.arch }}-qt6-base
mingw-w64-clang-${{ matrix.arch }}-qt6-declarative
mingw-w64-clang-${{ matrix.arch }}-qt6-multimedia
mingw-w64-clang-${{ matrix.arch }}-qt6-svg
mingw-w64-clang-${{ matrix.arch }}-qt6-tools
mingw-w64-clang-${{ matrix.arch }}-qt6-translations
base-devel
curl
git
p7zip
- name: Restore build Ccache
uses: actions/cache/restore@main
id: restore-build-ccache
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ matrix.arch }}-${{ github.run_id }}
restore-keys: ${{ runner.os }}-ccache-${{ matrix.compiler }}-${{ matrix.arch }}-
- name: Build RPCS3
shell: msys2 {0}
run: |
export CCACHE_DIR=$(cygpath -u "$CCACHE_DIR")
echo "CCACHE_DIR=$CCACHE_DIR"
.ci/setup-windows-ci-vars.sh ${{ matrix.arch }} ${{ matrix.compiler }}
.ci/build-windows-clang.sh ${{ matrix.arch }} ${{ matrix.msys2 }}
- name: Deploy master build to GitHub Releases (only aarch64)
if: |
matrix.arch == 'aarch64' &&
github.event_name != 'pull_request' &&
github.repository == 'RPCS3/rpcs3' &&
github.ref == 'refs/heads/master'
env:
RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
# We specify it here since this upload is specific to arm64
UPLOAD_COMMIT_HASH: ee05050fd1d8488148a771b526702656a10dacf0
UPLOAD_REPO_FULL_NAME: "RPCS3/rpcs3-binaries-win-arm64"
run: |
COMM_TAG=$(awk '/version{.*}/ { printf("%d.%d.%d", $5, $6, $7) }' ./rpcs3/rpcs3_version.cpp)
COMM_COUNT=$(git rev-list --count HEAD)
COMM_HASH=$(git rev-parse --short=8 HEAD)
export AVVER="${COMM_TAG}-${COMM_COUNT}"
.ci/github-upload.sh
- name: Save build Ccache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@main
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
- name: Upload artifacts
uses: actions/upload-artifact@main
with:
name: RPCS3 for Windows (${{ matrix.name }}, clang)
path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
compression-level: 0
if-no-files-found: error
FreeBSD_Build:
# Only run push event on master branch of main repo, but run all PRs
if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
name: RPCS3 FreeBSD
runs-on: ubuntu-latest
timeout-minutes: 60
env:
CCACHE_DIR: ${{ github.workspace }}/ccache
QT_VER_MAIN: '6'
LLVM_COMPILER_VER: '-devel'
CC: 'clang-devel'
CXX: 'clang++-devel'
LLVM_CONFIG: 'llvm-config-devel'
steps:
- name: Checkout repository
uses: actions/checkout@main
with:
fetch-depth: 0
- name: Restore Build Ccache
uses: actions/cache/restore@main
id: restore-build-ccache
with:
path: ${{ env.CCACHE_DIR }}
key: FreeBSD-ccache-${{github.run_id}}
restore-keys: FreeBSD-ccache-
- name: FreeBSD build
id: root
uses: vmactions/freebsd-vm@v1
with:
envs: 'QT_VER_MAIN LLVM_COMPILER_VER CCACHE_DIR CC CXX LLVM_CONFIG'
usesh: true
copyback: false
release: "14.3"
run: .ci/install-freebsd.sh && .ci/build-freebsd.sh
- name: Save Build Ccache
if: github.ref == 'refs/heads/master'
uses: actions/cache/save@main
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
+3
View File
@@ -69,6 +69,9 @@ CMakeSettings.json
*PVS-Studio*
PVS/*
# Zed Editor files
.zed/*
# Ignore other system generated files
x64/*
rpcs3/x64/*
+9 -5
View File
@@ -21,7 +21,7 @@
ignore = dirty
[submodule "3rdparty/hidapi"]
path = 3rdparty/hidapi/hidapi
url = ../../RPCS3/hidapi.git
url = ../../libusb/hidapi.git
branch = master
ignore = dirty
[submodule "3rdparty/pugixml"]
@@ -52,10 +52,6 @@
path = 3rdparty/wolfssl/wolfssl
url = ../../wolfSSL/wolfssl.git
ignore = dirty
[submodule "3rdparty/flatbuffers"]
path = 3rdparty/flatbuffers
url = ../../google/flatbuffers.git
ignore = dirty
[submodule "3rdparty/cubeb/cubeb"]
path = 3rdparty/cubeb/cubeb
url = ../../mozilla/cubeb.git
@@ -108,3 +104,11 @@
path = 3rdparty/GPUOpen/VulkanMemoryAllocator
url = ../../GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
ignore = dirty
[submodule "3rdparty/feralinteractive/feralinteractive"]
path = 3rdparty/feralinteractive/feralinteractive
url = ../../FeralInteractive/gamemode.git
ignore = dirty
[submodule "3rdparty/protobuf/protobuf"]
path = 3rdparty/protobuf/protobuf
url = ../../protocolbuffers/protobuf.git
ignore = dirty
+2 -2
View File
@@ -59,11 +59,11 @@ if(WIN32 OR APPLE)
7zip/C/XzEnc.c
7zip/C/XzIn.c
7zip/C/ZstdDec.c)
target_include_directories(3rdparty_7zip INTERFACE
target_include_directories(3rdparty_7zip SYSTEM INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/7zip/C>
$<INSTALL_INTERFACE:/7zip/C>)
target_include_directories(3rdparty_7zip INTERFACE 7zip)
target_include_directories(3rdparty_7zip SYSTEM INTERFACE 7zip)
set_property(TARGET 3rdparty_7zip PROPERTY FOLDER "3rdparty/")
+23 -26
View File
@@ -25,18 +25,8 @@ add_subdirectory(zstd EXCLUDE_FROM_ALL)
# 7zip sdk
add_subdirectory(7zip EXCLUDE_FROM_ALL)
add_library(3rdparty_flatbuffers INTERFACE)
if (USE_SYSTEM_FLATBUFFERS)
pkg_check_modules(FLATBUFFERS REQUIRED IMPORTED_TARGET flatbuffers>=2.0.0)
target_link_libraries(3rdparty_flatbuffers INTERFACE PkgConfig::FLATBUFFERS)
set(FBS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../rpcs3/Emu/NP/generated/")
execute_process(COMMAND flatc --cpp -o "${FBS_DIR}" "${FBS_DIR}/np2_structs.fbs" RESULT_VARIABLE FBS_CMD_ERROR)
if(FBS_CMD_ERROR AND NOT FBS_CMD_ERROR EQUAL 0)
message(FATAL_ERROR "flatc failed to regenerate flatbuffers headers.")
endif()
else()
target_include_directories(3rdparty_flatbuffers INTERFACE flatbuffers/include)
endif()
# Protobuf
add_subdirectory(protobuf EXCLUDE_FROM_ALL)
# libPNG
add_subdirectory(libpng EXCLUDE_FROM_ALL)
@@ -51,6 +41,14 @@ else()
add_subdirectory(pugixml EXCLUDE_FROM_ALL)
endif()
if (USE_SYSTEM_VULKAN_MEMORY_ALLOCATOR)
find_package(VulkanMemoryAllocator REQUIRED GLOBAL)
add_library(3rdparty::vulkanmemoryallocator ALIAS GPUOpen::VulkanMemoryAllocator)
else()
add_library(3rdparty_vulkanmemoryallocator INTERFACE)
target_include_directories(3rdparty_vulkanmemoryallocator SYSTEM INTERFACE GPUOpen/VulkanMemoryAllocator/include)
add_library(3rdparty::vulkanmemoryallocator ALIAS 3rdparty_vulkanmemoryallocator)
endif()
# libusb
if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD")
@@ -92,9 +90,6 @@ add_subdirectory(hidapi)
# glslang
add_subdirectory(glslang EXCLUDE_FROM_ALL)
add_library(3rdparty_glslang INTERFACE)
target_link_libraries(3rdparty_glslang INTERFACE SPIRV)
# yaml-cpp
add_subdirectory(yaml-cpp)
@@ -102,11 +97,11 @@ add_subdirectory(yaml-cpp)
# OpenGL
if (NOT ANDROID)
if (NOT ANDROID AND NOT APPLE)
find_package(OpenGL REQUIRED OPTIONAL_COMPONENTS EGL)
add_library(3rdparty_opengl INTERFACE)
target_include_directories(3rdparty_opengl INTERFACE GL)
target_include_directories(3rdparty_opengl SYSTEM INTERFACE GL)
if (WIN32)
if(NOT MSVC)
@@ -114,8 +109,6 @@ if (NOT ANDROID)
else()
target_link_libraries(3rdparty_opengl INTERFACE dxgi.lib d2d1.lib dwrite.lib)
endif()
elseif(APPLE)
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU)
else()
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU OpenGL::GLX)
endif()
@@ -199,7 +192,7 @@ if(USE_VULKAN)
find_package(Wayland)
if (WAYLAND_FOUND)
target_include_directories(3rdparty_vulkan
INTERFACE ${WAYLAND_INCLUDE_DIR})
SYSTEM INTERFACE ${WAYLAND_INCLUDE_DIR})
endif()
endif()
@@ -273,7 +266,7 @@ if(USE_FAUDIO)
target_compile_definitions(FAudio-static INTERFACE -DHAVE_FAUDIO)
set(FAUDIO_TARGET FAudio-static)
else()
message(FATAL_ERROR
message(WARNING
"-- RPCS3: 3rdparty FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
">=3.2.0 version cannot be found, building with FAudio will be skipped.")
set(USE_FAUDIO OFF CACHE BOOL "Disabled FAudio with SDL < 3.2.0" FORCE)
@@ -293,7 +286,7 @@ if(NOT ANDROID)
message(STATUS "RPCS3: using shared ffmpeg")
find_package(FFMPEG REQUIRED)
target_include_directories(3rdparty_ffmpeg INTERFACE ${FFMPEG_INCLUDE_DIR})
target_include_directories(3rdparty_ffmpeg SYSTEM INTERFACE ${FFMPEG_INCLUDE_DIR})
target_link_libraries(3rdparty_ffmpeg INTERFACE ${FFMPEG_LIBRARIES})
else()
message(STATUS "RPCS3: using builtin ffmpeg")
@@ -323,14 +316,14 @@ if(NOT ANDROID)
${FFMPEG_LIB_SWSCALE}
${FFMPEG_LIB_SWRESAMPLE}
)
target_include_directories(3rdparty_ffmpeg INTERFACE "ffmpeg/include")
target_include_directories(3rdparty_ffmpeg SYSTEM INTERFACE "ffmpeg/include")
endif()
endif()
# GLEW
add_library(3rdparty_glew INTERFACE)
if(NOT MSVC AND NOT ANDROID)
if(NOT MSVC AND NOT ANDROID AND NOT APPLE)
find_package(GLEW REQUIRED)
target_link_libraries(3rdparty_glew INTERFACE GLEW::GLEW)
endif()
@@ -357,6 +350,9 @@ add_subdirectory(opencv EXCLUDE_FROM_ALL)
# FUSION
add_subdirectory(fusion EXCLUDE_FROM_ALL)
# FERAL INTERACTIVE
add_subdirectory(feralinteractive EXCLUDE_FROM_ALL)
# add nice ALIAS targets for ease of use
if(USE_SYSTEM_LIBUSB)
add_library(3rdparty::libusb ALIAS usb-1.0-shared)
@@ -366,7 +362,7 @@ endif()
add_library(3rdparty::zlib ALIAS 3rdparty_zlib)
add_library(3rdparty::zstd ALIAS 3rdparty_zstd)
add_library(3rdparty::7zip ALIAS 3rdparty_7zip)
add_library(3rdparty::flatbuffers ALIAS 3rdparty_flatbuffers)
add_library(3rdparty::protobuf ALIAS 3rdparty_protobuf)
add_library(3rdparty::pugixml ALIAS pugixml)
add_library(3rdparty::glslang ALIAS 3rdparty_glslang)
add_library(3rdparty::yaml-cpp ALIAS yaml-cpp)
@@ -385,7 +381,8 @@ add_library(3rdparty::wolfssl ALIAS wolfssl)
add_library(3rdparty::libcurl ALIAS 3rdparty_libcurl)
add_library(3rdparty::soundtouch ALIAS soundtouch)
add_library(3rdparty::sdl3 ALIAS ${SDL3_TARGET})
add_library(3rdparty::miniupnpc ALIAS libminiupnpc-static)
add_library(3rdparty::miniupnpc ALIAS 3rdparty_miniupnpc)
add_library(3rdparty::rtmidi ALIAS rtmidi)
add_library(3rdparty::opencv ALIAS ${OPENCV_TARGET})
add_library(3rdparty::fusion ALIAS Fusion)
add_library(3rdparty::feralinteractive ALIAS 3rdparty_feralinteractive)
+123 -2
View File
@@ -6,7 +6,7 @@ extern "C" {
#endif
/*
** Copyright 2013-2020 The Khronos Group Inc.
** Copyright 2013-2026 The Khronos Group Inc.
** SPDX-License-Identifier: MIT
**
** This header is generated from the Khronos OpenGL / OpenGL ES XML
@@ -32,7 +32,7 @@ extern "C" {
#define GLAPI extern
#endif
#define GL_GLEXT_VERSION 20250203
#define GL_GLEXT_VERSION 20260126
#include <KHR/khrplatform.h>
@@ -7358,6 +7358,47 @@ GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const voi
#endif
#endif /* GL_EXT_fog_coord */
#ifndef GL_EXT_fragment_shading_rate
#define GL_EXT_fragment_shading_rate 1
#define GL_SHADING_RATE_1X1_PIXELS_EXT 0x96A6
#define GL_SHADING_RATE_1X2_PIXELS_EXT 0x96A7
#define GL_SHADING_RATE_2X1_PIXELS_EXT 0x96A8
#define GL_SHADING_RATE_2X2_PIXELS_EXT 0x96A9
#define GL_SHADING_RATE_1X4_PIXELS_EXT 0x96AA
#define GL_SHADING_RATE_4X1_PIXELS_EXT 0x96AB
#define GL_SHADING_RATE_4X2_PIXELS_EXT 0x96AC
#define GL_SHADING_RATE_2X4_PIXELS_EXT 0x96AD
#define GL_SHADING_RATE_4X4_PIXELS_EXT 0x96AE
#define GL_SHADING_RATE_EXT 0x96D0
#define GL_SHADING_RATE_ATTACHMENT_EXT 0x96D1
#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_EXT 0x96D2
#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_EXT 0x96D3
#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_EXT 0x96D4
#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_EXT 0x96D5
#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_EXT 0x96D6
#define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D7
#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D8
#define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96D9
#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96DA
#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_ASPECT_RATIO_EXT 0x96DB
#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_LAYERS_EXT 0x96DC
#define GL_FRAGMENT_SHADING_RATE_WITH_SHADER_DEPTH_STENCIL_WRITES_SUPPORTED_EXT 0x96DD
#define GL_FRAGMENT_SHADING_RATE_WITH_SAMPLE_MASK_SUPPORTED_EXT 0x96DE
#define GL_FRAGMENT_SHADING_RATE_ATTACHMENT_WITH_DEFAULT_FRAMEBUFFER_SUPPORTED_EXT 0x96DF
#define GL_FRAGMENT_SHADING_RATE_NON_TRIVIAL_COMBINERS_SUPPORTED_EXT 0x8F6F
#define GL_FRAGMENT_SHADING_RATE_PRIMITIVE_RATE_WITH_MULTI_VIEWPORT_SUPPORTED_EXT 0x9780
typedef void (APIENTRYP PFNGLGETFRAGMENTSHADINGRATESEXTPROC) (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates);
typedef void (APIENTRYP PFNGLSHADINGRATEEXTPROC) (GLenum rate);
typedef void (APIENTRYP PFNGLSHADINGRATECOMBINEROPSEXTPROC) (GLenum combinerOp0, GLenum combinerOp1);
typedef void (APIENTRYP PFNGLFRAMEBUFFERSHADINGRATEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight);
#ifdef GL_GLEXT_PROTOTYPES
GLAPI void APIENTRY glGetFragmentShadingRatesEXT (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates);
GLAPI void APIENTRY glShadingRateEXT (GLenum rate);
GLAPI void APIENTRY glShadingRateCombinerOpsEXT (GLenum combinerOp0, GLenum combinerOp1);
GLAPI void APIENTRY glFramebufferShadingRateEXT (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight);
#endif
#endif /* GL_EXT_fragment_shading_rate */
#ifndef GL_EXT_framebuffer_blit
#define GL_EXT_framebuffer_blit 1
#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
@@ -7816,6 +7857,86 @@ GLAPI void APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GL
#endif
#endif /* GL_EXT_memory_object_win32 */
#ifndef GL_EXT_mesh_shader
#define GL_EXT_mesh_shader 1
#define GL_MESH_SHADER_EXT 0x9559
#define GL_TASK_SHADER_EXT 0x955A
#define GL_MAX_MESH_UNIFORM_BLOCKS_EXT 0x8E60
#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_EXT 0x8E61
#define GL_MAX_MESH_IMAGE_UNIFORMS_EXT 0x8E62
#define GL_MAX_MESH_UNIFORM_COMPONENTS_EXT 0x8E63
#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_EXT 0x8E64
#define GL_MAX_MESH_ATOMIC_COUNTERS_EXT 0x8E65
#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_EXT 0x8E66
#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_EXT 0x8E67
#define GL_MAX_TASK_UNIFORM_BLOCKS_EXT 0x8E68
#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_EXT 0x8E69
#define GL_MAX_TASK_IMAGE_UNIFORMS_EXT 0x8E6A
#define GL_MAX_TASK_UNIFORM_COMPONENTS_EXT 0x8E6B
#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_EXT 0x8E6C
#define GL_MAX_TASK_ATOMIC_COUNTERS_EXT 0x8E6D
#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_EXT 0x8E6E
#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_EXT 0x8E6F
#define GL_MAX_TASK_WORK_GROUP_TOTAL_COUNT_EXT 0x9740
#define GL_MAX_MESH_WORK_GROUP_TOTAL_COUNT_EXT 0x9741
#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_EXT 0x9757
#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_EXT 0x9759
#define GL_MAX_TASK_PAYLOAD_SIZE_EXT 0x9742
#define GL_MAX_TASK_SHARED_MEMORY_SIZE_EXT 0x9743
#define GL_MAX_MESH_SHARED_MEMORY_SIZE_EXT 0x9744
#define GL_MAX_TASK_PAYLOAD_AND_SHARED_MEMORY_SIZE_EXT 0x9745
#define GL_MAX_MESH_PAYLOAD_AND_SHARED_MEMORY_SIZE_EXT 0x9746
#define GL_MAX_MESH_OUTPUT_MEMORY_SIZE_EXT 0x9747
#define GL_MAX_MESH_PAYLOAD_AND_OUTPUT_MEMORY_SIZE_EXT 0x9748
#define GL_MAX_MESH_OUTPUT_VERTICES_EXT 0x9538
#define GL_MAX_MESH_OUTPUT_PRIMITIVES_EXT 0x9756
#define GL_MAX_MESH_OUTPUT_COMPONENTS_EXT 0x9749
#define GL_MAX_MESH_OUTPUT_LAYERS_EXT 0x974A
#define GL_MAX_MESH_MULTIVIEW_VIEW_COUNT_EXT 0x9557
#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_EXT 0x92DF
#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_EXT 0x9543
#define GL_MAX_PREFERRED_TASK_WORK_GROUP_INVOCATIONS_EXT 0x974B
#define GL_MAX_PREFERRED_MESH_WORK_GROUP_INVOCATIONS_EXT 0x974C
#define GL_MESH_PREFERS_LOCAL_INVOCATION_VERTEX_OUTPUT_EXT 0x974D
#define GL_MESH_PREFERS_LOCAL_INVOCATION_PRIMITIVE_OUTPUT_EXT 0x974E
#define GL_MESH_PREFERS_COMPACT_VERTEX_OUTPUT_EXT 0x974F
#define GL_MESH_PREFERS_COMPACT_PRIMITIVE_OUTPUT_EXT 0x9750
#define GL_MAX_TASK_WORK_GROUP_COUNT_EXT 0x9751
#define GL_MAX_MESH_WORK_GROUP_COUNT_EXT 0x9752
#define GL_MAX_MESH_WORK_GROUP_SIZE_EXT 0x9758
#define GL_MAX_TASK_WORK_GROUP_SIZE_EXT 0x975A
#define GL_MESH_WORK_GROUP_SIZE_EXT 0x953E
#define GL_TASK_WORK_GROUP_SIZE_EXT 0x953F
#define GL_MESH_VERTICES_OUT_EXT 0x9579
#define GL_MESH_PRIMITIVES_OUT_EXT 0x957A
#define GL_MESH_OUTPUT_TYPE_EXT 0x957B
#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_EXT 0x959C
#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_EXT 0x959D
#define GL_REFERENCED_BY_MESH_SHADER_EXT 0x95A0
#define GL_REFERENCED_BY_TASK_SHADER_EXT 0x95A1
#define GL_TASK_SHADER_INVOCATIONS_EXT 0x9753
#define GL_MESH_SHADER_INVOCATIONS_EXT 0x9754
#define GL_MESH_PRIMITIVES_GENERATED_EXT 0x9755
#define GL_MESH_SHADER_BIT_EXT 0x00000040
#define GL_TASK_SHADER_BIT_EXT 0x00000080
#define GL_MESH_SUBROUTINE_EXT 0x957C
#define GL_TASK_SUBROUTINE_EXT 0x957D
#define GL_MESH_SUBROUTINE_UNIFORM_EXT 0x957E
#define GL_TASK_SUBROUTINE_UNIFORM_EXT 0x957F
#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_EXT 0x959E
#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_EXT 0x959F
typedef void (APIENTRYP PFNGLDRAWMESHTASKSEXTPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTEXTPROC) (GLintptr indirect);
typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTEXTPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride);
typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTEXTPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
#ifdef GL_GLEXT_PROTOTYPES
GLAPI void APIENTRY glDrawMeshTasksEXT (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
GLAPI void APIENTRY glDrawMeshTasksIndirectEXT (GLintptr indirect);
GLAPI void APIENTRY glMultiDrawMeshTasksIndirectEXT (GLintptr indirect, GLsizei drawcount, GLsizei stride);
GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountEXT (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
#endif
#endif /* GL_EXT_mesh_shader */
#ifndef GL_EXT_misc_attribute
#define GL_EXT_misc_attribute 1
#endif /* GL_EXT_misc_attribute */
+1 -1
View File
@@ -3,7 +3,7 @@ include(ExternalProject)
ExternalProject_Add(moltenvk
GIT_REPOSITORY https://github.com/KhronosGroup/MoltenVK.git
GIT_TAG 49b97f2
GIT_TAG 4588705
BUILD_IN_SOURCE 1
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK
CONFIGURE_COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/fetchDependencies" --macos
+1
View File
@@ -11,6 +11,7 @@ if(USE_SYSTEM_OPENAL)
else()
option(ALSOFT_UTILS "Build utility programs" OFF)
option(ALSOFT_EXAMPLES "Build example programs" OFF)
set(LIBTYPE "STATIC")
add_subdirectory(openal-soft EXCLUDE_FROM_ALL)
add_library(3rdparty_openal INTERFACE)
target_link_libraries(3rdparty_openal INTERFACE OpenAL::OpenAL)
+3 -3
View File
@@ -49,11 +49,11 @@
<PropertyGroup Label="UserMacros">
<CmakeReleaseCLI>call vsdevcmd.bat -arch=amd64
cd "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)"
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="./Release" -DCMAKE_SYSTEM_VERSION=10.0 -DLIBTYPE=STATIC -DFORCE_STATIC_VCRT=true -DALSOFT_UTILS=false -DALSOFT_EXAMPLES=false -DALSOFT_INSTALL=false -DALSOFT_INSTALL_CONFIG=false -DALSOFT_INSTALL_HRTF_DATA=false -DALSOFT_INSTALL_AMBDEC_PRESETS=false -DALSOFT_INSTALL_EXAMPLES=false -DALSOFT_INSTALL_UTILS=false "$(SolutionDir)3rdparty\OpenAL\openal-soft"
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="./Release" -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -DCMAKE_SYSTEM_VERSION=10.0 -DLIBTYPE=STATIC -DFORCE_STATIC_VCRT=true -DALSOFT_UTILS=false -DALSOFT_EXAMPLES=false -DALSOFT_INSTALL=false -DALSOFT_INSTALL_CONFIG=false -DALSOFT_INSTALL_HRTF_DATA=false -DALSOFT_INSTALL_AMBDEC_PRESETS=false -DALSOFT_INSTALL_EXAMPLES=false -DALSOFT_INSTALL_UTILS=false "$(SolutionDir)3rdparty\OpenAL\openal-soft"
</CmakeReleaseCLI>
<CmakeDebugCLI>call vsdevcmd.bat -arch=amd64
cd "$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)"
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_INSTALL_PREFIX="./Debug" -DCMAKE_SYSTEM_VERSION=10.0 -DLIBTYPE=STATIC -DALSOFT_UTILS=false -DALSOFT_EXAMPLES=false -DALSOFT_INSTALL=false -DALSOFT_INSTALL_CONFIG=false -DALSOFT_INSTALL_HRTF_DATA=false -DALSOFT_INSTALL_AMBDEC_PRESETS=false -DALSOFT_INSTALL_EXAMPLES=false -DALSOFT_INSTALL_UTILS=false "$(SolutionDir)3rdparty\OpenAL\openal-soft"
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_INSTALL_PREFIX="./Debug" -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug -DCMAKE_SYSTEM_VERSION=10.0 -DLIBTYPE=STATIC -DALSOFT_UTILS=false -DALSOFT_EXAMPLES=false -DALSOFT_INSTALL=false -DALSOFT_INSTALL_CONFIG=false -DALSOFT_INSTALL_HRTF_DATA=false -DALSOFT_INSTALL_AMBDEC_PRESETS=false -DALSOFT_INSTALL_EXAMPLES=false -DALSOFT_INSTALL_UTILS=false "$(SolutionDir)3rdparty\OpenAL\openal-soft"
</CmakeDebugCLI>
<CmakeCopyCLI>
echo Copying..
@@ -106,4 +106,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>
+2 -2
View File
@@ -11,11 +11,11 @@ add_library(soundtouch STATIC EXCLUDE_FROM_ALL
soundtouch/source/SoundTouch/TDStretch.cpp
)
target_include_directories(soundtouch PRIVATE
target_include_directories(soundtouch SYSTEM PRIVATE
soundtouch/source/SoundTouch
soundtouch/include)
target_include_directories(soundtouch INTERFACE
target_include_directories(soundtouch SYSTEM INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/soundtouch/include>
$<INSTALL_INTERFACE:/soundtouch/include>)
+1 -1
View File
@@ -9,7 +9,7 @@ set(ASMJIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/asmjit" CACHE PATH "Location of 'asm
include("${ASMJIT_DIR}/CMakeLists.txt")
add_library(asmjit ${ASMJIT_SRC})
target_include_directories(asmjit PUBLIC ${ASMJIT_DIR}/src)
target_include_directories(asmjit SYSTEM PUBLIC ${ASMJIT_DIR}/src)
target_link_libraries(asmjit PRIVATE ${ASMJIT_DEPS})
# ASMJIT should have a option for disabling installing and this wouldnt
+15 -18
View File
@@ -7,27 +7,24 @@ if(USE_SYSTEM_CURL)
target_link_libraries(3rdparty_libcurl INTERFACE CURL::libcurl)
else()
message(STATUS "RPCS3: building libcurl + wolfssl submodules")
set(BUILD_CURL_EXE OFF CACHE BOOL "Set to ON to build curl executable.")
set(BUILD_STATIC_CURL OFF CACHE BOOL "Set to ON to build curl executable with static libcurl.")
set(BUILD_STATIC_LIBS ON CACHE BOOL "Set to ON to build static libcurl.")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Set to ON to build shared libcurl.")
set(BUILD_CURL_EXE OFF CACHE INTERNAL "")
set(BUILD_STATIC_CURL OFF CACHE INTERNAL "")
set(BUILD_STATIC_LIBS ON CACHE INTERNAL "")
set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "")
find_package(WolfSSL REQUIRED)
set(CURL_USE_WOLFSSL ON CACHE BOOL "enable wolfSSL for SSL/TLS")
set(CURL_USE_OPENSSL OFF CACHE BOOL "Use OpenSSL code. Experimental")
set(HTTP_ONLY ON CACHE BOOL "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)")
set(USE_LIBIDN2 OFF CACHE BOOL "Use libidn2 for IDN support") # Disabled because MacOS CI doesn't work otherwise
set(CURL_CA_PATH "none" CACHE STRING "Location of default CA path. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.")
option(CURL_DISABLE_INSTALL "Disable installation targets" ON)
if(USE_MSVC_STATIC_CRT)
set(CURL_STATIC_CRT ON CACHE BOOL "Use static crt to build curl")
endif()
set(CURL_USE_WOLFSSL ON CACHE INTERNAL "")
set(CURL_USE_OPENSSL OFF CACHE INTERNAL "")
set(HTTP_ONLY ON CACHE INTERNAL "")
set(USE_LIBIDN2 OFF CACHE INTERNAL "") # Disabled because MacOS CI doesn't work otherwise
set(CURL_CA_PATH "none" CACHE INTERNAL "")
set(CURL_DISABLE_INSTALL ON CACHE INTERNAL "")
if(WIN32)
set(ENABLE_UNICODE ON CACHE BOOL "enable Unicode")
set(ENABLE_UNICODE ON CACHE INTERNAL "")
endif()
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "Use libSSH2")
set(CURL_USE_LIBPSL OFF CACHE BOOL "Use libPSL")
option(BUILD_TESTING "Build tests" OFF)
option(BUILD_EXAMPLES "Build libcurl examples" OFF)
set(CURL_USE_LIBSSH2 OFF CACHE INTERNAL "")
set(CURL_USE_LIBPSL OFF CACHE INTERNAL "")
set(BUILD_TESTING OFF CACHE INTERNAL "")
set(BUILD_EXAMPLES OFF CACHE INTERNAL "")
add_subdirectory(curl EXCLUDE_FROM_ALL)
+42 -31
View File
@@ -66,10 +66,12 @@
<ClCompile Include="curl\lib\asyn-thrdd.c" />
<ClCompile Include="curl\lib\bufq.c" />
<ClCompile Include="curl\lib\bufref.c" />
<ClCompile Include="curl\lib\cf-dns.c" />
<ClCompile Include="curl\lib\cf-h1-proxy.c" />
<ClCompile Include="curl\lib\cf-h2-proxy.c" />
<ClCompile Include="curl\lib\cf-haproxy.c" />
<ClCompile Include="curl\lib\cf-https-connect.c" />
<ClCompile Include="curl\lib\cf-ip-happy.c" />
<ClCompile Include="curl\lib\cf-socket.c" />
<ClCompile Include="curl\lib\cfilters.c" />
<ClCompile Include="curl\lib\conncache.c" />
@@ -78,29 +80,37 @@
<ClCompile Include="curl\lib\cookie.c" />
<ClCompile Include="curl\lib\cshutdn.c" />
<ClCompile Include="curl\lib\curlx\base64.c" />
<ClCompile Include="curl\lib\curlx\basename.c" />
<ClCompile Include="curl\lib\curlx\dynbuf.c" />
<ClCompile Include="curl\lib\curlx\fopen.c" />
<ClCompile Include="curl\lib\curlx\inet_ntop.c" />
<ClCompile Include="curl\lib\curlx\inet_pton.c" />
<ClCompile Include="curl\lib\curlx\multibyte.c" />
<ClCompile Include="curl\lib\curlx\nonblock.c" />
<ClCompile Include="curl\lib\curlx\snprintf.c" />
<ClCompile Include="curl\lib\curlx\strcopy.c" />
<ClCompile Include="curl\lib\curlx\strdup.c" />
<ClCompile Include="curl\lib\curlx\strerr.c" />
<ClCompile Include="curl\lib\curlx\strparse.c" />
<ClCompile Include="curl\lib\curlx\timediff.c" />
<ClCompile Include="curl\lib\curlx\timeval.c" />
<ClCompile Include="curl\lib\curlx\version_win32.c" />
<ClCompile Include="curl\lib\curlx\wait.c" />
<ClCompile Include="curl\lib\curlx\warnless.c" />
<ClCompile Include="curl\lib\curlx\winapi.c" />
<ClCompile Include="curl\lib\curl_addrinfo.c" />
<ClCompile Include="curl\lib\curl_des.c" />
<ClCompile Include="curl\lib\curl_endian.c" />
<ClCompile Include="curl\lib\curl_fnmatch.c" />
<ClCompile Include="curl\lib\curl_fopen.c" />
<ClCompile Include="curl\lib\curl_gethostname.c" />
<ClCompile Include="curl\lib\curl_get_line.c" />
<ClCompile Include="curl\lib\curl_gssapi.c" />
<ClCompile Include="curl\lib\curl_memrchr.c" />
<ClCompile Include="curl\lib\curl_ntlm_core.c" />
<ClCompile Include="curl\lib\curl_range.c" />
<ClCompile Include="curl\lib\curl_rtmp.c" />
<ClCompile Include="curl\lib\curl_sasl.c" />
<ClCompile Include="curl\lib\curl_sha512_256.c" />
<ClCompile Include="curl\lib\curl_share.c" />
<ClCompile Include="curl\lib\curl_sspi.c" />
<ClCompile Include="curl\lib\curl_threads.c" />
<ClCompile Include="curl\lib\curl_trc.c" />
@@ -108,6 +118,7 @@
<ClCompile Include="curl\lib\cw-pause.c" />
<ClCompile Include="curl\lib\dict.c" />
<ClCompile Include="curl\lib\dllmain.c" />
<ClCompile Include="curl\lib\dnscache.c" />
<ClCompile Include="curl\lib\doh.c" />
<ClCompile Include="curl\lib\dynhds.c" />
<ClCompile Include="curl\lib\easy.c" />
@@ -117,7 +128,6 @@
<ClCompile Include="curl\lib\fake_addrinfo.c" />
<ClCompile Include="curl\lib\file.c" />
<ClCompile Include="curl\lib\fileinfo.c" />
<ClCompile Include="curl\lib\fopen.c" />
<ClCompile Include="curl\lib\formdata.c" />
<ClCompile Include="curl\lib\ftp.c" />
<ClCompile Include="curl\lib\ftplistparser.c" />
@@ -144,8 +154,6 @@
<ClCompile Include="curl\lib\idn.c" />
<ClCompile Include="curl\lib\if2ip.c" />
<ClCompile Include="curl\lib\imap.c" />
<ClCompile Include="curl\lib\inet_ntop.c" />
<ClCompile Include="curl\lib\krb5.c" />
<ClCompile Include="curl\lib\ldap.c" />
<ClCompile Include="curl\lib\llist.c" />
<ClCompile Include="curl\lib\macos.c" />
@@ -157,6 +165,7 @@
<ClCompile Include="curl\lib\mqtt.c" />
<ClCompile Include="curl\lib\multi.c" />
<ClCompile Include="curl\lib\multi_ev.c" />
<ClCompile Include="curl\lib\multi_ntfy.c" />
<ClCompile Include="curl\lib\netrc.c" />
<ClCompile Include="curl\lib\noproxy.c" />
<ClCompile Include="curl\lib\openldap.c" />
@@ -164,16 +173,16 @@
<ClCompile Include="curl\lib\pingpong.c" />
<ClCompile Include="curl\lib\pop3.c" />
<ClCompile Include="curl\lib\progress.c" />
<ClCompile Include="curl\lib\protocol.c" />
<ClCompile Include="curl\lib\psl.c" />
<ClCompile Include="curl\lib\rand.c" />
<ClCompile Include="curl\lib\rename.c" />
<ClCompile Include="curl\lib\ratelimit.c" />
<ClCompile Include="curl\lib\request.c" />
<ClCompile Include="curl\lib\rtsp.c" />
<ClCompile Include="curl\lib\select.c" />
<ClCompile Include="curl\lib\sendf.c" />
<ClCompile Include="curl\lib\setopt.c" />
<ClCompile Include="curl\lib\sha256.c" />
<ClCompile Include="curl\lib\share.c" />
<ClCompile Include="curl\lib\slist.c" />
<ClCompile Include="curl\lib\smb.c" />
<ClCompile Include="curl\lib\smtp.c" />
@@ -181,15 +190,15 @@
<ClCompile Include="curl\lib\socks.c" />
<ClCompile Include="curl\lib\socks_gssapi.c" />
<ClCompile Include="curl\lib\socks_sspi.c" />
<ClCompile Include="curl\lib\speedcheck.c" />
<ClCompile Include="curl\lib\splay.c" />
<ClCompile Include="curl\lib\strcase.c" />
<ClCompile Include="curl\lib\strdup.c" />
<ClCompile Include="curl\lib\strequal.c" />
<ClCompile Include="curl\lib\strerror.c" />
<ClCompile Include="curl\lib\system_win32.c" />
<ClCompile Include="curl\lib\telnet.c" />
<ClCompile Include="curl\lib\tftp.c" />
<ClCompile Include="curl\lib\thrdpool.c" />
<ClCompile Include="curl\lib\thrdqueue.c" />
<ClCompile Include="curl\lib\transfer.c" />
<ClCompile Include="curl\lib\uint-bset.c" />
<ClCompile Include="curl\lib\uint-hash.c" />
@@ -199,9 +208,10 @@
<ClCompile Include="curl\lib\urlapi.c" />
<ClCompile Include="curl\lib\vauth\gsasl.c" />
<ClCompile Include="curl\lib\version.c" />
<ClCompile Include="curl\lib\vquic\curl_msh3.c" />
<ClCompile Include="curl\lib\vquic\curl_ngtcp2.c" />
<ClCompile Include="curl\lib\vquic\curl_quiche.c" />
<ClCompile Include="curl\lib\vssh\vssh.c" />
<ClCompile Include="curl\lib\vtls\apple.c" />
<ClCompile Include="curl\lib\vtls\cipher_suite.c" />
<ClCompile Include="curl\lib\vtls\hostcheck.c" />
<ClCompile Include="curl\lib\vtls\rustls.c" />
@@ -221,19 +231,14 @@
<ClCompile Include="curl\lib\vauth\spnego_sspi.c" />
<ClCompile Include="curl\lib\vauth\vauth.c" />
<ClCompile Include="curl\lib\vquic\vquic.c" />
<ClCompile Include="curl\lib\vssh\curl_path.c" />
<ClCompile Include="curl\lib\vssh\libssh.c" />
<ClCompile Include="curl\lib\vssh\libssh2.c" />
<ClCompile Include="curl\lib\vssh\wolfssh.c" />
<ClCompile Include="curl\lib\vtls\bearssl.c" />
<ClCompile Include="curl\lib\vtls\gtls.c" />
<ClCompile Include="curl\lib\vtls\keylog.c" />
<ClCompile Include="curl\lib\vtls\mbedtls.c" />
<ClCompile Include="curl\lib\vtls\mbedtls_threadlock.c" />
<ClCompile Include="curl\lib\vtls\openssl.c" />
<ClCompile Include="curl\lib\vtls\schannel.c" />
<ClCompile Include="curl\lib\vtls\schannel_verify.c" />
<ClCompile Include="curl\lib\vtls\sectransp.c" />
<ClCompile Include="curl\lib\vtls\vtls.c" />
<ClCompile Include="curl\lib\vtls\wolfssl.c" />
<ClCompile Include="curl\lib\ws.c" />
@@ -254,10 +259,12 @@
<ClInclude Include="curl\lib\asyn.h" />
<ClInclude Include="curl\lib\bufq.h" />
<ClInclude Include="curl\lib\bufref.h" />
<ClInclude Include="curl\lib\cf-dns.h" />
<ClInclude Include="curl\lib\cf-h1-proxy.h" />
<ClInclude Include="curl\lib\cf-h2-proxy.h" />
<ClInclude Include="curl\lib\cf-haproxy.h" />
<ClInclude Include="curl\lib\cf-https-connect.h" />
<ClInclude Include="curl\lib\cf-ip-happy.h" />
<ClInclude Include="curl\lib\cf-socket.h" />
<ClInclude Include="curl\lib\cfilters.h" />
<ClInclude Include="curl\lib\config-mac.h" />
@@ -271,47 +278,54 @@
<ClInclude Include="curl\lib\cookie.h" />
<ClInclude Include="curl\lib\cshutdn.h" />
<ClInclude Include="curl\lib\curlx\base64.h" />
<ClInclude Include="curl\lib\curlx\curlx.h" />
<ClInclude Include="curl\lib\curlx\basename.h" />
<ClInclude Include="curl\lib\curlx\binmode.h" />
<ClInclude Include="curl\lib\curlx\dynbuf.h" />
<ClInclude Include="curl\lib\curlx\fopen.h" />
<ClInclude Include="curl\lib\curlx\inet_ntop.h" />
<ClInclude Include="curl\lib\curlx\inet_pton.h" />
<ClInclude Include="curl\lib\curlx\multibyte.h" />
<ClInclude Include="curl\lib\curlx\nonblock.h" />
<ClInclude Include="curl\lib\curlx\snprintf.h" />
<ClInclude Include="curl\lib\curlx\strcopy.h" />
<ClInclude Include="curl\lib\curlx\strdup.h" />
<ClInclude Include="curl\lib\curlx\strerr.h" />
<ClInclude Include="curl\lib\curlx\strparse.h" />
<ClInclude Include="curl\lib\curlx\timediff.h" />
<ClInclude Include="curl\lib\curlx\timeval.h" />
<ClInclude Include="curl\lib\curlx\version_win32.h" />
<ClInclude Include="curl\lib\curlx\wait.h" />
<ClInclude Include="curl\lib\curlx\warnless.h" />
<ClInclude Include="curl\lib\curlx\winapi.h" />
<ClInclude Include="curl\lib\curl_addrinfo.h" />
<ClInclude Include="curl\lib\curl_ctype.h" />
<ClInclude Include="curl\lib\curl_des.h" />
<ClInclude Include="curl\lib\curl_endian.h" />
<ClInclude Include="curl\lib\curl_fnmatch.h" />
<ClInclude Include="curl\lib\curl_fopen.h" />
<ClInclude Include="curl\lib\curl_gethostname.h" />
<ClInclude Include="curl\lib\curl_get_line.h" />
<ClInclude Include="curl\lib\curl_gssapi.h" />
<ClInclude Include="curl\lib\curl_hmac.h" />
<ClInclude Include="curl\lib\curl_krb5.h" />
<ClInclude Include="curl\lib\curl_ldap.h" />
<ClInclude Include="curl\lib\curl_md4.h" />
<ClInclude Include="curl\lib\curl_md5.h" />
<ClInclude Include="curl\lib\curl_memory.h" />
<ClInclude Include="curl\lib\curl_memrchr.h" />
<ClInclude Include="curl\lib\curl_ntlm_core.h" />
<ClInclude Include="curl\lib\curl_printf.h" />
<ClInclude Include="curl\lib\curl_range.h" />
<ClInclude Include="curl\lib\curl_rtmp.h" />
<ClInclude Include="curl\lib\curl_sasl.h" />
<ClInclude Include="curl\lib\curl_setup.h" />
<ClInclude Include="curl\lib\curl_setup_once.h" />
<ClInclude Include="curl\lib\curl_sha256.h" />
<ClInclude Include="curl\lib\curl_sha512_256.h" />
<ClInclude Include="curl\lib\curl_share.h" />
<ClInclude Include="curl\lib\curl_sspi.h" />
<ClInclude Include="curl\lib\curl_threads.h" />
<ClInclude Include="curl\lib\curl_trc.h" />
<ClInclude Include="curl\lib\cw-out.h" />
<ClInclude Include="curl\lib\cw-pause.h" />
<ClInclude Include="curl\lib\dict.h" />
<ClInclude Include="curl\lib\dnscache.h" />
<ClInclude Include="curl\lib\doh.h" />
<ClInclude Include="curl\lib\dynhds.h" />
<ClInclude Include="curl\lib\easyif.h" />
@@ -321,8 +335,8 @@
<ClInclude Include="curl\lib\fake_addrinfo.h" />
<ClInclude Include="curl\lib\file.h" />
<ClInclude Include="curl\lib\fileinfo.h" />
<ClInclude Include="curl\lib\fopen.h" />
<ClInclude Include="curl\lib\formdata.h" />
<ClInclude Include="curl\lib\ftp-int.h" />
<ClInclude Include="curl\lib\ftp.h" />
<ClInclude Include="curl\lib\ftplistparser.h" />
<ClInclude Include="curl\lib\functypes.h" />
@@ -345,24 +359,24 @@
<ClInclude Include="curl\lib\idn.h" />
<ClInclude Include="curl\lib\if2ip.h" />
<ClInclude Include="curl\lib\imap.h" />
<ClInclude Include="curl\lib\inet_ntop.h" />
<ClInclude Include="curl\lib\llist.h" />
<ClInclude Include="curl\lib\macos.h" />
<ClInclude Include="curl\lib\memdebug.h" />
<ClInclude Include="curl\lib\mime.h" />
<ClInclude Include="curl\lib\mqtt.h" />
<ClInclude Include="curl\lib\multihandle.h" />
<ClInclude Include="curl\lib\multiif.h" />
<ClInclude Include="curl\lib\multi_ev.h" />
<ClInclude Include="curl\lib\multi_ntfy.h" />
<ClInclude Include="curl\lib\netrc.h" />
<ClInclude Include="curl\lib\noproxy.h" />
<ClInclude Include="curl\lib\parsedate.h" />
<ClInclude Include="curl\lib\pingpong.h" />
<ClInclude Include="curl\lib\pop3.h" />
<ClInclude Include="curl\lib\progress.h" />
<ClInclude Include="curl\lib\protocol.h" />
<ClInclude Include="curl\lib\psl.h" />
<ClInclude Include="curl\lib\rand.h" />
<ClInclude Include="curl\lib\rename.h" />
<ClInclude Include="curl\lib\ratelimit.h" />
<ClInclude Include="curl\lib\request.h" />
<ClInclude Include="curl\lib\rtsp.h" />
<ClInclude Include="curl\lib\select.h" />
@@ -371,7 +385,6 @@
<ClInclude Include="curl\lib\setup-os400.h" />
<ClInclude Include="curl\lib\setup-vms.h" />
<ClInclude Include="curl\lib\setup-win32.h" />
<ClInclude Include="curl\lib\share.h" />
<ClInclude Include="curl\lib\sigpipe.h" />
<ClInclude Include="curl\lib\slist.h" />
<ClInclude Include="curl\lib\smb.h" />
@@ -379,7 +392,6 @@
<ClInclude Include="curl\lib\sockaddr.h" />
<ClInclude Include="curl\lib\socketpair.h" />
<ClInclude Include="curl\lib\socks.h" />
<ClInclude Include="curl\lib\speedcheck.h" />
<ClInclude Include="curl\lib\splay.h" />
<ClInclude Include="curl\lib\strcase.h" />
<ClInclude Include="curl\lib\strdup.h" />
@@ -389,6 +401,8 @@
<ClInclude Include="curl\lib\system_win32.h" />
<ClInclude Include="curl\lib\telnet.h" />
<ClInclude Include="curl\lib\tftp.h" />
<ClInclude Include="curl\lib\thrdpool.h" />
<ClInclude Include="curl\lib\thrdqueue.h" />
<ClInclude Include="curl\lib\transfer.h" />
<ClInclude Include="curl\lib\uint-bset.h" />
<ClInclude Include="curl\lib\uint-hash.h" />
@@ -397,10 +411,11 @@
<ClInclude Include="curl\lib\url.h" />
<ClInclude Include="curl\lib\urlapi-int.h" />
<ClInclude Include="curl\lib\urldata.h" />
<ClInclude Include="curl\lib\vquic\curl_msh3.h" />
<ClInclude Include="curl\lib\vquic\curl_ngtcp2.h" />
<ClInclude Include="curl\lib\vquic\curl_quiche.h" />
<ClInclude Include="curl\lib\vquic\vquic_int.h" />
<ClInclude Include="curl\lib\vssh\vssh.h" />
<ClInclude Include="curl\lib\vtls\apple.h" />
<ClInclude Include="curl\lib\vtls\cipher_suite.h" />
<ClInclude Include="curl\lib\vtls\hostcheck.h" />
<ClInclude Include="curl\lib\vtls\rustls.h" />
@@ -413,16 +428,12 @@
<ClInclude Include="curl\lib\vauth\ntlm.h" />
<ClInclude Include="curl\lib\vauth\vauth.h" />
<ClInclude Include="curl\lib\vquic\vquic.h" />
<ClInclude Include="curl\lib\vssh\curl_path.h" />
<ClInclude Include="curl\lib\vssh\ssh.h" />
<ClInclude Include="curl\lib\vtls\bearssl.h" />
<ClInclude Include="curl\lib\vtls\gtls.h" />
<ClInclude Include="curl\lib\vtls\keylog.h" />
<ClInclude Include="curl\lib\vtls\mbedtls.h" />
<ClInclude Include="curl\lib\vtls\mbedtls_threadlock.h" />
<ClInclude Include="curl\lib\vtls\openssl.h" />
<ClInclude Include="curl\lib\vtls\schannel.h" />
<ClInclude Include="curl\lib\vtls\sectransp.h" />
<ClInclude Include="curl\lib\vtls\vtls.h" />
<ClInclude Include="curl\lib\vtls\wolfssl.h" />
<ClInclude Include="curl\lib\ws.h" />
+126 -93
View File
@@ -42,9 +42,6 @@
<ClCompile Include="curl\lib\curl_addrinfo.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curl_des.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curl_endian.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -69,9 +66,6 @@
<ClCompile Include="curl\lib\curl_range.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curl_rtmp.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curl_sasl.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -159,12 +153,6 @@
<ClCompile Include="curl\lib\imap.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\inet_ntop.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\krb5.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\ldap.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -213,9 +201,6 @@
<ClCompile Include="curl\lib\rand.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\rename.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\rtsp.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -231,9 +216,6 @@
<ClCompile Include="curl\lib\sha256.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\share.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\slist.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -255,18 +237,12 @@
<ClCompile Include="curl\lib\socks_sspi.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\speedcheck.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\splay.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\strcase.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\strdup.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\strerror.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -327,30 +303,18 @@
<ClCompile Include="curl\lib\vauth\vauth.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vssh\curl_path.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vssh\libssh.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vssh\libssh2.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vssh\wolfssh.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\bearssl.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\gtls.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\mbedtls.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\mbedtls_threadlock.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\openssl.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -360,9 +324,6 @@
<ClCompile Include="curl\lib\vtls\schannel_verify.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\sectransp.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\vtls.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -405,9 +366,6 @@
<ClCompile Include="curl\lib\headers.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\fopen.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\noproxy.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -426,9 +384,6 @@
<ClCompile Include="curl\lib\cf-socket.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vquic\curl_msh3.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vquic\curl_ngtcp2.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -549,6 +504,66 @@
<ClCompile Include="curl\lib\curlx\winapi.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curlx\inet_ntop.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curlx\wait.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\cf-ip-happy.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curl_fopen.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\multi_ntfy.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\apple.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curlx\fopen.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curlx\strerr.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curlx\strcopy.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vssh\vssh.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curl_share.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\ratelimit.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curlx\basename.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curlx\snprintf.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\curlx\strdup.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\cf-dns.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\dnscache.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\protocol.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\thrdpool.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\thrdqueue.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="curl\include\curl\curl.h">
@@ -626,9 +641,6 @@
<ClInclude Include="curl\lib\curl_ctype.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_des.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_endian.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -656,9 +668,6 @@
<ClInclude Include="curl\lib\curl_md5.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_memory.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_memrchr.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -671,9 +680,6 @@
<ClInclude Include="curl\lib\curl_range.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_rtmp.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_sasl.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -758,15 +764,9 @@
<ClInclude Include="curl\lib\imap.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\inet_ntop.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\llist.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\memdebug.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\mime.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -797,9 +797,6 @@
<ClInclude Include="curl\lib\rand.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\rename.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\rtsp.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -818,9 +815,6 @@
<ClInclude Include="curl\lib\setup-vms.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\share.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\sigpipe.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -842,9 +836,6 @@
<ClInclude Include="curl\lib\socks.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\speedcheck.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\splay.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -893,33 +884,21 @@
<ClInclude Include="curl\lib\vauth\vauth.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vssh\curl_path.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vssh\ssh.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\bearssl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\gtls.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\mbedtls.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\mbedtls_threadlock.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\openssl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\schannel.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\sectransp.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\vtls.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -938,9 +917,6 @@
<ClInclude Include="curl\lib\vtls\keylog.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_krb5.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\easyoptions.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -965,9 +941,6 @@
<ClInclude Include="curl\lib\easy_lock.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\fopen.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\functypes.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -989,9 +962,6 @@
<ClInclude Include="curl\lib\cf-socket.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vquic\curl_msh3.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vquic\curl_ngtcp2.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -1079,9 +1049,6 @@
<ClInclude Include="curl\lib\curlx\base64.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\curlx.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\dynbuf.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -1112,6 +1079,72 @@
<ClInclude Include="curl\lib\curlx\winapi.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\binmode.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\inet_ntop.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\wait.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\cf-ip-happy.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_fopen.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\multi_ntfy.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\apple.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\fopen.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\strerr.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\snprintf.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\strcopy.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vssh\vssh.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curl_share.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\ratelimit.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\basename.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\curlx\strdup.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\cf-dns.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\dnscache.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\ftp-int.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\protocol.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\thrdpool.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\thrdqueue.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="curl\lib\libcurl.rc">
+1 -1
View File
@@ -9,7 +9,7 @@ if (USE_DISCORD_RPC AND (WIN32 OR CMAKE_SYSTEM MATCHES "Linux" OR APPLE))
set(WARNINGS_AS_ERRORS FALSE CACHE BOOL "When enabled, compiles with `-Werror` (on *nix platforms).")
add_subdirectory(discord-rpc EXCLUDE_FROM_ALL)
target_include_directories(3rdparty_discordRPC INTERFACE discord-rpc/include)
target_include_directories(3rdparty_discordRPC SYSTEM INTERFACE discord-rpc/include)
target_compile_definitions(3rdparty_discordRPC INTERFACE -DWITH_DISCORD_RPC)
target_link_libraries(3rdparty_discordRPC INTERFACE discord-rpc)
endif()
+9
View File
@@ -0,0 +1,9 @@
# Feral Interactive
add_library(3rdparty_feralinteractive INTERFACE)
if (CMAKE_SYSTEM MATCHES "Linux")
target_include_directories(3rdparty_feralinteractive SYSTEM INTERFACE feralinteractive/lib)
target_compile_definitions(3rdparty_feralinteractive INTERFACE -DGAMEMODE_AVAILABLE)
target_link_libraries(3rdparty_feralinteractive INTERFACE feralinteractive)
endif()
Submodule 3rdparty/flatbuffers deleted from 595bf0007a
+21 -9
View File
@@ -1,11 +1,23 @@
#glslang
set(ENABLE_PCH OFF CACHE BOOL "Enables Precompiled header" FORCE)
set(BUILD_EXTERNAL OFF CACHE BOOL "Build external dependencies in /External" FORCE)
set(SKIP_GLSLANG_INSTALL ON CACHE BOOL "Skip installation" FORCE)
set(ENABLE_SPVREMAPPER OFF CACHE BOOL "Enables building of SPVRemapper" FORCE)
set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "Builds glslangValidator and spirv-remap" FORCE)
set(ENABLE_HLSL OFF CACHE BOOL "Enables HLSL input support" FORCE)
set(ENABLE_OPT OFF CACHE BOOL "Enables spirv-opt capability if present" FORCE)
set(ENABLE_CTEST OFF CACHE BOOL "Enables testing" FORCE)
add_subdirectory(glslang)
if(USE_SYSTEM_GLSLANG)
message(STATUS "RPCS3: using shared glslang")
find_package(glslang REQUIRED GLOBAL)
add_library(3rdparty_glslang INTERFACE)
target_link_libraries(3rdparty_glslang INTERFACE glslang::SPIRV)
get_target_property(SPIRV_INCLUDE_DIRS glslang::SPIRV INTERFACE_INCLUDE_DIRECTORIES)
list(TRANSFORM SPIRV_INCLUDE_DIRS APPEND "/glslang")
target_include_directories(3rdparty_glslang SYSTEM INTERFACE ${SPIRV_INCLUDE_DIRS})
else()
set(ENABLE_PCH OFF CACHE BOOL "Enables Precompiled header" FORCE)
set(BUILD_EXTERNAL OFF CACHE BOOL "Build external dependencies in /External" FORCE)
set(SKIP_GLSLANG_INSTALL ON CACHE BOOL "Skip installation" FORCE)
set(ENABLE_SPVREMAPPER OFF CACHE BOOL "Enables building of SPVRemapper" FORCE)
set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "Builds glslangValidator and spirv-remap" FORCE)
set(ENABLE_HLSL OFF CACHE BOOL "Enables HLSL input support" FORCE)
set(ENABLE_OPT OFF CACHE BOOL "Enables spirv-opt capability if present" FORCE)
set(ENABLE_CTEST OFF CACHE BOOL "Enables testing" FORCE)
add_subdirectory(glslang)
add_library(3rdparty_glslang INTERFACE)
target_link_libraries(3rdparty_glslang INTERFACE SPIRV)
endif()
+27 -19
View File
@@ -1,22 +1,30 @@
# hidapi
set(BUILD_SHARED_LIBS FALSE CACHE BOOL "Don't build shared libs")
set(HIDAPI_INSTALL_TARGETS FALSE CACHE BOOL "Don't install anything")
if(CMAKE_SYSTEM MATCHES "Linux")
set(HIDAPI_WITH_LIBUSB FALSE CACHE BOOL "Don't build with libusb for linux")
endif()
add_library(3rdparty_hidapi INTERFACE)
add_subdirectory(hidapi EXCLUDE_FROM_ALL)
if(APPLE)
target_link_libraries(3rdparty_hidapi INTERFACE hidapi_darwin "-framework CoreFoundation" "-framework IOKit")
elseif(CMAKE_SYSTEM MATCHES "Linux")
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-hidraw udev)
elseif(WIN32)
target_link_libraries(3rdparty_hidapi INTERFACE hidapi::hidapi hidapi::include Shlwapi.lib)
elseif(ANDROID)
target_link_libraries(3rdparty_hidapi INTERFACE hidapi::libusb)
if(USE_SYSTEM_HIDAPI)
message(STATUS "RPCS3: using shared hidapi")
pkg_check_modules(hidapi-hidraw REQUIRED IMPORTED_TARGET hidapi-hidraw)
add_library(3rdparty_hidapi INTERFACE)
target_link_libraries(3rdparty_hidapi INTERFACE PkgConfig::hidapi-hidraw)
target_include_directories(3rdparty_hidapi SYSTEM INTERFACE PkgConfig::hidapi-hidraw)
else()
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-libusb usb)
set(BUILD_SHARED_LIBS FALSE CACHE BOOL "Don't build shared libs")
set(HIDAPI_INSTALL_TARGETS FALSE CACHE BOOL "Don't install anything")
if(CMAKE_SYSTEM MATCHES "Linux")
set(HIDAPI_WITH_LIBUSB FALSE CACHE BOOL "Don't build with libusb for linux")
endif()
add_library(3rdparty_hidapi INTERFACE)
add_subdirectory(hidapi EXCLUDE_FROM_ALL)
if(APPLE)
target_link_libraries(3rdparty_hidapi INTERFACE hidapi_darwin "-framework CoreFoundation" "-framework IOKit")
elseif(CMAKE_SYSTEM MATCHES "Linux")
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-hidraw udev)
elseif(WIN32)
target_link_libraries(3rdparty_hidapi INTERFACE hidapi::hidapi hidapi::include Shlwapi.lib)
elseif(ANDROID)
target_link_libraries(3rdparty_hidapi INTERFACE hidapi::libusb)
else()
target_link_libraries(3rdparty_hidapi INTERFACE hidapi-libusb usb)
endif()
endif()
+2 -2
View File
@@ -6,14 +6,14 @@ if (NOT USE_SYSTEM_LIBPNG)
set(PNG_TESTS OFF CACHE BOOL "Build libpng tests")
set(SKIP_INSTALL_ALL ON)
add_subdirectory(libpng EXCLUDE_FROM_ALL)
target_include_directories(png_static INTERFACE "${libpng_BINARY_DIR}" "${libpng_SOURCE_DIR}")
target_include_directories(png_static SYSTEM INTERFACE "${libpng_BINARY_DIR}" "${libpng_SOURCE_DIR}")
set(LIBPNG_TARGET png_static PARENT_SCOPE)
else()
find_package(PNG REQUIRED)
add_library(3rdparty_system_libpng INTERFACE)
target_include_directories(3rdparty_system_libpng INTERFACE ${PNG_INCLUDE_DIR})
target_include_directories(3rdparty_system_libpng SYSTEM INTERFACE ${PNG_INCLUDE_DIR})
target_link_libraries(3rdparty_system_libpng INTERFACE ${PNG_LIBRARY})
target_compile_definitions(3rdparty_system_libpng INTERFACE ${PNG_DEFINITIONS})
+29 -8
View File
@@ -23,6 +23,7 @@
<ClInclude Include="SDL\include\SDL3\SDL_clipboard.h" />
<ClInclude Include="SDL\include\SDL3\SDL_copying.h" />
<ClInclude Include="SDL\include\SDL3\SDL_cpuinfo.h" />
<ClInclude Include="SDL\include\SDL3\SDL_dlopennote.h" />
<ClInclude Include="SDL\include\SDL3\SDL_egl.h" />
<ClInclude Include="SDL\include\SDL3\SDL_endian.h" />
<ClInclude Include="SDL\include\SDL3\SDL_error.h" />
@@ -102,6 +103,7 @@
<ClInclude Include="SDL\src\audio\wasapi\SDL_wasapi.h" />
<ClInclude Include="SDL\src\camera\SDL_camera_c.h" />
<ClInclude Include="SDL\src\camera\SDL_syscamera.h" />
<ClInclude Include="SDL\src\core\SDL_core_unsupported.h" />
<ClInclude Include="SDL\src\core\windows\SDL_directx.h" />
<ClInclude Include="SDL\src\core\windows\SDL_gameinput.h" />
<ClInclude Include="SDL\src\core\windows\SDL_hid.h" />
@@ -130,6 +132,8 @@
<ClInclude Include="SDL\src\filesystem\SDL_sysfilesystem.h" />
<ClInclude Include="SDL\src\gpu\SDL_sysgpu.h" />
<ClInclude Include="SDL\src\gpu\vulkan\SDL_gpu_vulkan_vkfuncs.h" />
<ClInclude Include="SDL\src\haptic\hidapi\SDL_hidapihaptic.h" />
<ClInclude Include="SDL\src\haptic\hidapi\SDL_hidapihaptic_c.h" />
<ClInclude Include="SDL\src\io\SDL_asyncio_c.h" />
<ClInclude Include="SDL\src\io\SDL_sysasyncio.h" />
<ClInclude Include="SDL\src\haptic\SDL_haptic_c.h" />
@@ -140,7 +144,11 @@
<ClInclude Include="SDL\src\hidapi\SDL_hidapi_c.h" />
<ClInclude Include="SDL\src\joystick\controller_type.h" />
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapijoystick_c.h" />
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_flydigi.h" />
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_nintendo.h" />
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_rumble.h" />
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_sinput.h" />
<ClInclude Include="SDL\src\joystick\hidapi\SDL_report_descriptor.h" />
<ClInclude Include="SDL\src\joystick\SDL_gamepad_c.h" />
<ClInclude Include="SDL\src\joystick\SDL_gamepad_db.h" />
<ClInclude Include="SDL\src\joystick\SDL_joystick_c.h" />
@@ -156,6 +164,7 @@
<ClInclude Include="SDL\src\libm\math_private.h" />
<ClInclude Include="SDL\src\locale\SDL_syslocale.h" />
<ClInclude Include="SDL\src\main\SDL_main_callbacks.h" />
<ClInclude Include="SDL\src\misc\SDL_libusb.h" />
<ClInclude Include="SDL\src\misc\SDL_sysurl.h" />
<ClInclude Include="SDL\src\power\SDL_syspower.h" />
<ClInclude Include="SDL\src\render\direct3d11\SDL_shaders_d3d11.h" />
@@ -175,7 +184,6 @@
<ClInclude Include="SDL\src\render\software\SDL_drawline.h" />
<ClInclude Include="SDL\src\render\software\SDL_drawpoint.h" />
<ClInclude Include="SDL\src\render\software\SDL_render_sw_c.h" />
<ClInclude Include="SDL\src\render\software\SDL_rotate.h" />
<ClInclude Include="SDL\src\render\software\SDL_triangle.h" />
<ClInclude Include="SDL\src\render\vulkan\SDL_shaders_vulkan.h" />
<ClInclude Include="SDL\src\SDL_assert_c.h" />
@@ -184,20 +192,35 @@
<ClCompile Include="SDL\src\camera\dummy\SDL_camera_dummy.c" />
<ClCompile Include="SDL\src\camera\mediafoundation\SDL_camera_mediafoundation.c" />
<ClCompile Include="SDL\src\camera\SDL_camera.c" />
<ClCompile Include="SDL\src\core\windows\pch_cpp.cpp" />
<ClCompile Include="SDL\src\core\windows\SDL_gameinput.cpp" />
<ClCompile Include="SDL\src\dialog\SDL_dialog.c" />
<ClCompile Include="SDL\src\dialog\SDL_dialog_utils.c" />
<ClCompile Include="SDL\src\filesystem\SDL_filesystem.c" />
<ClCompile Include="SDL\src\filesystem\windows\SDL_sysfsops.c" />
<ClCompile Include="SDL\src\haptic\hidapi\SDL_hidapihaptic.c" />
<ClCompile Include="SDL\src\haptic\hidapi\SDL_hidapihaptic_lg4ff.c" />
<ClCompile Include="SDL\src\io\windows\SDL_asyncio_windows_ioring.c" />
<ClCompile Include="SDL\src\gpu\SDL_gpu.c" />
<ClCompile Include="SDL\src\gpu\d3d12\SDL_gpu_d3d12.c" />
<ClCompile Include="SDL\src\gpu\vulkan\SDL_gpu_vulkan.c" />
<ClCompile Include="SDL\src\io\generic\SDL_asyncio_generic.c" />
<ClCompile Include="SDL\src\io\SDL_asyncio.c" />
<ClCompile Include="SDL\src\joystick\gdk\SDL_gameinputjoystick.cpp" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_8bitdo.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_flydigi.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_gip.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_lg4ff.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_sinput.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steam_triton.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_switch2.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_zuiki.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_report_descriptor.c" />
<ClCompile Include="SDL\src\main\generic\SDL_sysmain_callbacks.c" />
<ClCompile Include="SDL\src\main\SDL_main_callbacks.c" />
<ClCompile Include="SDL\src\main\SDL_runapp.c" />
<ClCompile Include="SDL\src\main\windows\SDL_sysmain_runapp.c" />
<ClCompile Include="SDL\src\misc\SDL_libusb.c" />
<ClCompile Include="SDL\src\render\vulkan\SDL_render_vulkan.c" />
<ClCompile Include="SDL\src\render\vulkan\SDL_shaders_vulkan.c" />
<ClCompile Include="SDL\src\SDL_guid.c" />
@@ -241,6 +264,7 @@
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xcb.h" />
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xlib.h" />
<ClInclude Include="SDL\src\video\khronos\vulkan\vulkan_xlib_xrandr.h" />
<ClInclude Include="SDL\src\video\miniz.h" />
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenevents_c.h" />
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenframebuffer_c.h" />
<ClInclude Include="SDL\src\video\offscreen\SDL_offscreenopengles.h" />
@@ -256,13 +280,14 @@
<ClInclude Include="SDL\src\video\SDL_pixels_c.h" />
<ClInclude Include="SDL\src\video\SDL_rect_c.h" />
<ClInclude Include="SDL\src\video\SDL_RLEaccel_c.h" />
<ClInclude Include="SDL\src\video\SDL_rotate.h" />
<ClInclude Include="SDL\src\video\SDL_stb_c.h" />
<ClInclude Include="SDL\src\video\SDL_surface_c.h" />
<ClInclude Include="SDL\src\video\SDL_sysvideo.h" />
<ClInclude Include="SDL\src\video\SDL_video_unsupported.h" />
<ClInclude Include="SDL\src\video\SDL_vulkan_internal.h" />
<ClInclude Include="SDL\src\video\SDL_yuv_c.h" />
<ClInclude Include="SDL\src\video\windows\SDL_msctf.h" />
<ClInclude Include="SDL\src\video\windows\SDL_surface_utils.h" />
<ClInclude Include="SDL\src\video\windows\SDL_windowsclipboard.h" />
<ClInclude Include="SDL\src\video\windows\SDL_windowsevents.h" />
<ClInclude Include="SDL\src\video\windows\SDL_windowsframebuffer.h" />
@@ -303,7 +328,6 @@
<ClCompile Include="SDL\src\audio\SDL_wave.c" />
<ClCompile Include="SDL\src\audio\wasapi\SDL_wasapi.c" />
<ClCompile Include="SDL\src\core\SDL_core_unsupported.c" />
<ClCompile Include="SDL\src\core\windows\SDL_gameinput.c" />
<ClCompile Include="SDL\src\core\windows\SDL_hid.c" />
<ClCompile Include="SDL\src\core\windows\SDL_immdevice.c" />
<ClCompile Include="SDL\src\core\windows\SDL_windows.c" />
@@ -333,7 +357,6 @@
<ClCompile Include="SDL\src\hidapi\SDL_hidapi.c" />
<ClCompile Include="SDL\src\joystick\controller_type.c" />
<ClCompile Include="SDL\src\joystick\dummy\SDL_sysjoystick.c" />
<ClCompile Include="SDL\src\joystick\gdk\SDL_gameinputjoystick.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapijoystick.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_combined.c" />
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_gamecube.c" />
@@ -384,7 +407,6 @@
<ClCompile Include="SDL\src\render\opengl\SDL_shaders_gl.c" />
<ClCompile Include="SDL\src\render\opengles2\SDL_render_gles2.c" />
<ClCompile Include="SDL\src\render\opengles2\SDL_shaders_gles2.c" />
<ClCompile Include="SDL\src\render\SDL_d3dmath.c" />
<ClCompile Include="SDL\src\render\SDL_render.c" />
<ClCompile Include="SDL\src\render\SDL_render_unsupported.c" />
<ClCompile Include="SDL\src\render\SDL_yuv_sw.c" />
@@ -394,7 +416,6 @@
<ClCompile Include="SDL\src\render\software\SDL_drawline.c" />
<ClCompile Include="SDL\src\render\software\SDL_drawpoint.c" />
<ClCompile Include="SDL\src\render\software\SDL_render_sw.c" />
<ClCompile Include="SDL\src\render\software\SDL_rotate.c" />
<ClCompile Include="SDL\src\render\software\SDL_triangle.c" />
<ClCompile Include="SDL\src\SDL.c" />
<ClCompile Include="SDL\src\SDL_assert.c" />
@@ -465,6 +486,7 @@
<ClCompile Include="SDL\src\video\SDL_pixels.c" />
<ClCompile Include="SDL\src\video\SDL_rect.c" />
<ClCompile Include="SDL\src\video\SDL_RLEaccel.c" />
<ClCompile Include="SDL\src\video\SDL_rotate.c" />
<ClCompile Include="SDL\src\video\SDL_stb.c" />
<ClCompile Include="SDL\src\video\SDL_stretch.c" />
<ClCompile Include="SDL\src\video\SDL_surface.c" />
@@ -472,12 +494,11 @@
<ClCompile Include="SDL\src\video\SDL_video_unsupported.c" />
<ClCompile Include="SDL\src\video\SDL_vulkan_utils.c" />
<ClCompile Include="SDL\src\video\SDL_yuv.c" />
<ClCompile Include="SDL\src\video\windows\SDL_surface_utils.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsclipboard.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsevents.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsframebuffer.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsgameinput.cpp" />
<ClCompile Include="SDL\src\video\windows\SDL_windowskeyboard.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsgameinput.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsmessagebox.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsmodes.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsmouse.c" />
+117 -36
View File
@@ -172,9 +172,6 @@
<Filter Include="render\direct3d12">
<UniqueIdentifier>{f48c2b17-1bee-4fec-a7c8-24cf619abe08}</UniqueIdentifier>
</Filter>
<Filter Include="video\intrin">
<UniqueIdentifier>{653672cc-90ae-4eba-a256-6479f2c31804}</UniqueIdentifier>
</Filter>
<Filter Include="main">
<UniqueIdentifier>{00001967ea2801028a046a722a070000}</UniqueIdentifier>
</Filter>
@@ -217,6 +214,9 @@
<Filter Include="io\windows">
<UniqueIdentifier>{000028b2ea36d7190d13777a4dc70000}</UniqueIdentifier>
</Filter>
<Filter Include="haptic\hidapi">
<UniqueIdentifier>{695ffc61-5497-4227-b415-15e9bdd5b6bf}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="SDL\include\SDL3\SDL_begin_code.h">
@@ -702,9 +702,6 @@
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_std_func.h">
<Filter>video\yuv2rgb</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\windows\SDL_surface_utils.h">
<Filter>video\windows</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\windows\SDL_windowsclipboard.h">
<Filter>video\windows</Filter>
</ClInclude>
@@ -834,9 +831,6 @@
<ClInclude Include="SDL\src\render\software\SDL_render_sw_c.h">
<Filter>render\software</Filter>
</ClInclude>
<ClInclude Include="SDL\src\render\software\SDL_rotate.h">
<Filter>render\software</Filter>
</ClInclude>
<ClInclude Include="SDL\src\render\software\SDL_triangle.h">
<Filter>render\software</Filter>
</ClInclude>
@@ -914,12 +908,6 @@
<ClInclude Include="SDL\src\hidapi\SDL_hidapi_c.h" />
<ClInclude Include="SDL\src\thread\generic\SDL_sysrwlock_c.h" />
<ClInclude Include="SDL\src\thread\generic\SDL_sysrwlock_c.h" />
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_common.h" />
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_internal.h" />
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_lsx.h" />
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_lsx_func.h" />
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_sse.h" />
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_std.h" />
<ClInclude Include="SDL\src\render\vulkan\SDL_shaders_vulkan.h">
<Filter>render\vulkan</Filter>
</ClInclude>
@@ -953,6 +941,60 @@
<ClInclude Include="SDL\include\SDL3\SDL_storage.h" />
<ClInclude Include="SDL\include\SDL3\SDL_time.h" />
<ClInclude Include="SDL\src\events\SDL_categories_c.h" />
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_std.h">
<Filter>video\yuv2rgb</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_common.h">
<Filter>video\yuv2rgb</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_internal.h">
<Filter>video\yuv2rgb</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_lsx.h">
<Filter>video\yuv2rgb</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_lsx_func.h">
<Filter>video\yuv2rgb</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\yuv2rgb\yuv_rgb_sse.h">
<Filter>video\yuv2rgb</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\miniz.h">
<Filter>video</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\SDL_rotate.h">
<Filter>video</Filter>
</ClInclude>
<ClInclude Include="SDL\src\video\SDL_video_unsupported.h">
<Filter>video</Filter>
</ClInclude>
<ClInclude Include="SDL\src\misc\SDL_libusb.h">
<Filter>misc</Filter>
</ClInclude>
<ClInclude Include="SDL\src\haptic\hidapi\SDL_hidapihaptic.h">
<Filter>haptic\hidapi</Filter>
</ClInclude>
<ClInclude Include="SDL\src\haptic\hidapi\SDL_hidapihaptic_c.h">
<Filter>haptic\hidapi</Filter>
</ClInclude>
<ClInclude Include="SDL\src\core\SDL_core_unsupported.h">
<Filter>core</Filter>
</ClInclude>
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_flydigi.h">
<Filter>joystick\hidapi</Filter>
</ClInclude>
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_nintendo.h">
<Filter>joystick\hidapi</Filter>
</ClInclude>
<ClInclude Include="SDL\src\joystick\hidapi\SDL_hidapi_sinput.h">
<Filter>joystick\hidapi</Filter>
</ClInclude>
<ClInclude Include="SDL\src\joystick\hidapi\SDL_report_descriptor.h">
<Filter>joystick\hidapi</Filter>
</ClInclude>
<ClInclude Include="SDL\include\SDL3\SDL_dlopennote.h">
<Filter>API Headers</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="SDL\src\audio\wasapi\SDL_wasapi.c" />
@@ -1040,9 +1082,6 @@
<ClCompile Include="SDL\src\core\SDL_core_unsupported.c">
<Filter>core</Filter>
</ClCompile>
<ClCompile Include="SDL\src\core\windows\SDL_gameinput.c">
<Filter>core\windows</Filter>
</ClCompile>
<ClCompile Include="SDL\src\core\windows\SDL_hid.c">
<Filter>core\windows</Filter>
</ClCompile>
@@ -1169,9 +1208,6 @@
<ClCompile Include="SDL\src\joystick\dummy\SDL_sysjoystick.c">
<Filter>joystick\dummy</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\gdk\SDL_gameinputjoystick.c">
<Filter>joystick\gdk</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_combined.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
@@ -1331,9 +1367,6 @@
<ClCompile Include="SDL\src\video\dummy\SDL_nullvideo.c">
<Filter>video\dummy</Filter>
</ClCompile>
<ClCompile Include="SDL\src\video\windows\SDL_surface_utils.c">
<Filter>video\windows</Filter>
</ClCompile>
<ClCompile Include="SDL\src\video\windows\SDL_windowsclipboard.c">
<Filter>video\windows</Filter>
</ClCompile>
@@ -1346,9 +1379,6 @@
<ClCompile Include="SDL\src\video\windows\SDL_windowskeyboard.c">
<Filter>video\windows</Filter>
</ClCompile>
<ClCompile Include="SDL\src\video\windows\SDL_windowsgameinput.c">
<Filter>video\windows</Filter>
</ClCompile>
<ClCompile Include="SDL\src\video\windows\SDL_windowsmessagebox.c">
<Filter>video\windows</Filter>
</ClCompile>
@@ -1460,9 +1490,6 @@
<ClCompile Include="SDL\src\sensor\windows\SDL_windowssensor.c">
<Filter>sensor\windows</Filter>
</ClCompile>
<ClCompile Include="SDL\src\render\SDL_d3dmath.c">
<Filter>render</Filter>
</ClCompile>
<ClCompile Include="SDL\src\render\SDL_render.c">
<Filter>render</Filter>
</ClCompile>
@@ -1514,9 +1541,6 @@
<ClCompile Include="SDL\src\render\software\SDL_render_sw.c">
<Filter>render\software</Filter>
</ClCompile>
<ClCompile Include="SDL\src\render\software\SDL_rotate.c">
<Filter>render\software</Filter>
</ClCompile>
<ClCompile Include="SDL\src\render\software\SDL_triangle.c">
<Filter>render\software</Filter>
</ClCompile>
@@ -1541,9 +1565,6 @@
</ClCompile>
<ClCompile Include="SDL\src\thread\generic\SDL_sysrwlock.c" />
<ClCompile Include="SDL\src\thread\generic\SDL_sysrwlock.c" />
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_lsx.c" />
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_sse.c" />
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_std.c" />
<ClCompile Include="SDL\src\render\vulkan\SDL_render_vulkan.c">
<Filter>render\vulkan</Filter>
</ClCompile>
@@ -1585,6 +1606,66 @@
<ClCompile Include="SDL\src\storage\generic\SDL_genericstorage.c" />
<ClCompile Include="SDL\src\storage\steam\SDL_steamstorage.c" />
<ClCompile Include="SDL\src\storage\SDL_storage.c" />
<ClCompile Include="SDL\src\video\windows\SDL_windowsgameinput.cpp">
<Filter>video\windows</Filter>
</ClCompile>
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_lsx.c">
<Filter>video\yuv2rgb</Filter>
</ClCompile>
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_sse.c">
<Filter>video\yuv2rgb</Filter>
</ClCompile>
<ClCompile Include="SDL\src\video\yuv2rgb\yuv_rgb_std.c">
<Filter>video\yuv2rgb</Filter>
</ClCompile>
<ClCompile Include="SDL\src\video\SDL_rotate.c">
<Filter>video</Filter>
</ClCompile>
<ClCompile Include="SDL\src\misc\SDL_libusb.c">
<Filter>misc</Filter>
</ClCompile>
<ClCompile Include="SDL\src\haptic\hidapi\SDL_hidapihaptic.c">
<Filter>haptic\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\haptic\hidapi\SDL_hidapihaptic_lg4ff.c">
<Filter>haptic\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\core\windows\pch_cpp.cpp">
<Filter>core\windows</Filter>
</ClCompile>
<ClCompile Include="SDL\src\core\windows\SDL_gameinput.cpp">
<Filter>core\windows</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\gdk\SDL_gameinputjoystick.cpp">
<Filter>joystick\gdk</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_8bitdo.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_flydigi.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_gip.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_lg4ff.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_sinput.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_steam_triton.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_switch2.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_hidapi_zuiki.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
<ClCompile Include="SDL\src\joystick\hidapi\SDL_report_descriptor.c">
<Filter>joystick\hidapi</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="SDL\src\core\windows\version.rc" />
+5
View File
@@ -54,6 +54,9 @@
<ClCompile Condition="'$(Configuration)'=='Release'">
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Condition="'$(EnableLibUsbWindowsHotplug)' == 'true'">
<PreprocessorDefinitions>LIBUSB_WINDOWS_HOTPLUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Lib>
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
</Lib>
@@ -64,6 +67,7 @@
<ClCompile Include="libusb\libusb\hotplug.c" />
<ClCompile Include="libusb\libusb\io.c" />
<ClCompile Include="libusb\libusb\os\events_windows.c" />
<ClCompile Condition="'$(EnableLibUsbWindowsHotplug)' == 'true'" Include="libusb\libusb\os\windows_hotplug.c" />
<ClCompile Include="libusb\libusb\strerror.c" />
<ClCompile Include="libusb\libusb\sync.c" />
<ClCompile Include="libusb\libusb\os\threads_windows.c" />
@@ -72,6 +76,7 @@
<ClCompile Include="libusb\libusb\os\windows_winusb.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Condition="'$(EnableLibUsbWindowsHotplug)' == 'true'" Include="libusb\libusb\os\windows_hotplug.h" />
<ClInclude Include="libusb\msvc\config.h" />
<ClInclude Include="libusb\libusb\hotplug.h" />
<ClInclude Include="libusb\libusb\libusb.h" />
+3 -5
View File
@@ -66,12 +66,10 @@ if(WITH_LLVM)
find_package(LLVM CONFIG)
if (NOT LLVM_FOUND)
message(FATAL_ERROR "Can't find LLVM libraries from the CMAKE_PREFIX_PATH path or LLVM_DIR. \
Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
message(FATAL_ERROR "Can't find LLVM libraries from the CMAKE_PREFIX_PATH path or LLVM_DIR. Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
endif()
if (LLVM_VERSION VERSION_LESS 18)
message(FATAL_ERROR "Found LLVM version ${LLVM_VERSION}. Required version 18 or above. \
Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
message(FATAL_ERROR "Found LLVM version ${LLVM_VERSION}. Required version 18 or above. Enable BUILD_LLVM option to build LLVM from included as a git submodule.")
endif()
endif()
@@ -109,7 +107,7 @@ if(WITH_LLVM)
add_library(3rdparty_llvm INTERFACE)
target_link_libraries(3rdparty_llvm INTERFACE ${LLVM_LIBS})
target_include_directories(3rdparty_llvm INTERFACE ${LLVM_INCLUDE_DIRS})
target_include_directories(3rdparty_llvm SYSTEM INTERFACE ${LLVM_INCLUDE_DIRS})
separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS})
target_compile_definitions(3rdparty_llvm INTERFACE ${LLVM_DEFINITIONS_LIST} LLVM_AVAILABLE)
+20 -7
View File
@@ -1,8 +1,21 @@
option (UPNPC_BUILD_STATIC "Build static library" TRUE)
option (UPNPC_BUILD_SHARED "Build shared library" FALSE)
option (UPNPC_BUILD_TESTS "Build test executables" FALSE)
option (UPNPC_BUILD_SAMPLE "Build sample executables" FALSE)
option (NO_GETADDRINFO "Define NO_GETADDRINFO" FALSE)
option (UPNPC_NO_INSTALL "Disable installation" TRUE)
if(USE_SYSTEM_MINIUPNPC)
message(STATUS "RPCS3: using shared MiniUPnPc")
pkg_check_modules(MiniUPnPc REQUIRED IMPORTED_TARGET miniupnpc>=2.3.3)
add_library(3rdparty_miniupnpc INTERFACE)
target_link_libraries(3rdparty_miniupnpc INTERFACE PkgConfig::MiniUPnPc)
target_include_directories(3rdparty_miniupnpc SYSTEM INTERFACE PkgConfig::MiniUPnPc)
list(TRANSFORM MiniUPnPc_INCLUDE_DIRS APPEND "/miniupnpc")
target_include_directories(3rdparty_miniupnpc SYSTEM INTERFACE ${MiniUPnPc_INCLUDE_DIRS})
else()
option (UPNPC_BUILD_STATIC "Build static library" TRUE)
option (UPNPC_BUILD_SHARED "Build shared library" FALSE)
option (UPNPC_BUILD_TESTS "Build test executables" FALSE)
option (UPNPC_BUILD_SAMPLE "Build sample executables" FALSE)
option (NO_GETADDRINFO "Define NO_GETADDRINFO" FALSE)
option (UPNPC_NO_INSTALL "Disable installation" TRUE)
add_subdirectory(miniupnp/miniupnpc EXCLUDE_FROM_ALL)
add_subdirectory(miniupnp/miniupnpc EXCLUDE_FROM_ALL)
add_library(3rdparty_miniupnpc INTERFACE)
target_link_libraries(3rdparty_miniupnpc INTERFACE libminiupnpc-static)
target_include_directories(3rdparty_miniupnpc SYSTEM INTERFACE libminiupnpc-static)
endif()
+29
View File
@@ -0,0 +1,29 @@
add_library(3rdparty_protobuf INTERFACE)
if (USE_SYSTEM_PROTOBUF)
pkg_check_modules(PROTOBUF REQUIRED IMPORTED_TARGET protobuf>=33.0.0)
target_link_libraries(3rdparty_protobuf INTERFACE PkgConfig::PROTOBUF)
set(PROTOBUF_DIR "${CMAKE_SOURCE_DIR}/rpcs3/Emu/NP/generated")
execute_process(COMMAND protoc --cpp_out=${PROTOBUF_DIR} --proto_path=${PROTOBUF_DIR} np2_structs.proto RESULT_VARIABLE PROTOBUF_CMD_ERROR)
if(PROTOBUF_CMD_ERROR AND NOT PROTOBUF_CMD_ERROR EQUAL 0)
message(FATAL_ERROR "protoc failed to regenerate protobuf files.")
endif()
else()
option(protobuf_INSTALL "Install protobuf binaries and files" OFF)
option(protobuf_BUILD_TESTS "Build tests" OFF)
option(protobuf_BUILD_CONFORMANCE "Build conformance tests" OFF)
option(protobuf_BUILD_EXAMPLES "Build examples" OFF)
option(protobuf_BUILD_PROTOBUF_BINARIES "Build protobuf libraries and protoc compiler" ON)
option(protobuf_BUILD_PROTOC_BINARIES "Build libprotoc and protoc compiler" OFF)
option(protobuf_BUILD_LIBPROTOC "Build libprotoc" OFF)
option(protobuf_BUILD_LIBUPB "Build libupb" OFF)
option(protobuf_ALLOW_CCACHE "Adjust build flags to allow for ccache support." ON)
option(protobuf_DISABLE_RTTI "Remove runtime type information in the binaries" OFF)
option(protobuf_FORCE_FETCH_DEPENDENCIES "Force all dependencies to be downloaded from GitHub. Local installations will be ignored." OFF)
option(protobuf_LOCAL_DEPENDENCIES_ONLY "Prevent downloading any dependencies from GitHub. If this option is set, the dependency must be available locally as an installed package." OFF)
option(protobuf_BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
option(protobuf_MSVC_STATIC_RUNTIME "Link static runtime libraries" OFF)
add_subdirectory(protobuf EXCLUDE_FROM_ALL)
target_include_directories(3rdparty_protobuf SYSTEM INTERFACE protobuf/src)
target_link_libraries(3rdparty_protobuf INTERFACE libprotobuf)
endif()
Vendored Submodule
+1
+111
View File
@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{7B3B4C5D-6E7F-8A9B-0C1D-2E3F4A5B6C7D}</ProjectGuid>
<Keyword>MakeFileProj</Keyword>
</PropertyGroup>
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(SolutionDir)\buildfiles\msvc\common_default_macros.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Makefile</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Makefile</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros">
<CmakeReleaseCLI>call vsdevcmd.bat -arch=amd64
if not exist "$(SolutionDir)build\tmp\protobuf_build-$(Configuration)-$(Platform)" mkdir "$(SolutionDir)build\tmp\protobuf_build-$(Configuration)-$(Platform)"
cd "$(SolutionDir)build\tmp\protobuf_build-$(Configuration)-$(Platform)"
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_STANDARD=20 -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="$(SolutionDir)build\lib\$(Configuration)-$(Platform)\protobuf_build" -DCMAKE_SYSTEM_VERSION=10.0 -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded -Dprotobuf_INSTALL=ON -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_CONFORMANCE=OFF -Dprotobuf_BUILD_EXAMPLES=OFF -Dprotobuf_BUILD_PROTOBUF_BINARIES=ON -Dprotobuf_BUILD_PROTOC_BINARIES=OFF -Dprotobuf_BUILD_LIBPROTOC=OFF -Dprotobuf_BUILD_LIBUPB=OFF -Dprotobuf_ALLOW_CCACHE=ON -Dprotobuf_FORCE_FETCH_DEPENDENCIES=ON -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=ON "$(SolutionDir)3rdparty\protobuf\protobuf"
</CmakeReleaseCLI>
<CmakeDebugCLI>call vsdevcmd.bat -arch=amd64
if not exist "$(SolutionDir)build\tmp\protobuf_build-$(Configuration)-$(Platform)" mkdir "$(SolutionDir)build\tmp\protobuf_build-$(Configuration)-$(Platform)"
cd "$(SolutionDir)build\tmp\protobuf_build-$(Configuration)-$(Platform)"
cmake -G Ninja -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_STANDARD=20 -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_INSTALL_PREFIX="$(SolutionDir)build\lib\$(Configuration)-$(Platform)\protobuf_build" -DCMAKE_SYSTEM_VERSION=10.0 -DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=$(WindowsTargetPlatformVersion) -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebugDLL -Dprotobuf_INSTALL=ON -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_CONFORMANCE=OFF -Dprotobuf_BUILD_EXAMPLES=OFF -Dprotobuf_BUILD_PROTOBUF_BINARIES=ON -Dprotobuf_BUILD_PROTOC_BINARIES=OFF -Dprotobuf_BUILD_LIBPROTOC=OFF -Dprotobuf_BUILD_LIBUPB=OFF -Dprotobuf_ALLOW_CCACHE=ON -Dprotobuf_FORCE_FETCH_DEPENDENCIES=ON -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF "$(SolutionDir)3rdparty\protobuf\protobuf"
</CmakeDebugCLI>
<CmakeCleanCLI>
echo Cleaning..
rmdir /s /q "$(SolutionDir)build\lib\$(Configuration)-$(Platform)\protobuf_build"
cd "$(SolutionDir)build\tmp\protobuf_build-$(Configuration)-$(Platform)"
for /F "delims= eol=|" %%f in ('
dir /b ^| findstr /V "[^.]*\build[^.]*\.vcxproj"') do (
echo Deleting .\%%f
if exist %%f\nul (
rmdir .\%%f /s /q
) else (
del .\%%f /q
)
)
</CmakeCleanCLI>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<NMakePreprocessorDefinitions>
</NMakePreprocessorDefinitions>
<OutDir>$(SolutionDir)build\lib\$(Configuration)-$(Platform)\</OutDir>
<IntDir>$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\</IntDir>
<NMakeBuildCommandLine>
$(CmakeDebugCLI)
ninja
ninja install
</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>
$(CmakeCleanCLI)
$(CmakeDebugCLI)
ninja
ninja install
</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>
$(CmakeCleanCLI)
</NMakeCleanCommandLine>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<NMakePreprocessorDefinitions>
</NMakePreprocessorDefinitions>
<OutDir>$(SolutionDir)build\lib\$(Configuration)-$(Platform)\</OutDir>
<IntDir>$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\</IntDir>
<NMakeBuildCommandLine>
$(CmakeReleaseCLI)
ninja
ninja install
</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>
$(CmakeCleanCLI)
$(CmakeReleaseCLI)
ninja
ninja install
</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>
$(CmakeCleanCLI)
</NMakeCleanCommandLine>
</PropertyGroup>
<ItemDefinitionGroup>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
+10 -2
View File
@@ -6,14 +6,22 @@ find_package(Qt6 ${QT_MIN_VER} CONFIG COMPONENTS Widgets Concurrent Multimedia M
if(WIN32)
target_link_libraries(3rdparty_qt6 INTERFACE Qt6::Widgets Qt6::Concurrent Qt6::Multimedia Qt6::MultimediaWidgets Qt6::Svg Qt6::SvgWidgets)
else()
find_package(Qt6 ${QT_MIN_VER} COMPONENTS DBus Gui)
find_package(Qt6 ${QT_MIN_VER} COMPONENTS DBus Gui)
if(Qt6_VERSION VERSION_GREATER_EQUAL "6.10.0")
set(QT_NO_PRIVATE_MODULE_WARNING ON)
find_package(Qt6 ${QT_MIN_VER} COMPONENTS GuiPrivate)
endif()
if(Qt6DBus_FOUND)
target_link_libraries(3rdparty_qt6 INTERFACE Qt6::Widgets Qt6::DBus Qt6::Concurrent Qt6::Multimedia Qt6::MultimediaWidgets Qt6::Svg Qt6::SvgWidgets)
target_compile_definitions(3rdparty_qt6 INTERFACE -DHAVE_QTDBUS)
else()
target_link_libraries(3rdparty_qt6 INTERFACE Qt6::Widgets Qt6::Concurrent Qt6::Multimedia Qt6::MultimediaWidgets Qt6::Svg Qt6::SvgWidgets)
endif()
target_include_directories(3rdparty_qt6 INTERFACE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
if(Qt6_VERSION VERSION_GREATER_EQUAL "6.10.0")
target_link_libraries(3rdparty_qt6 INTERFACE Qt6::GuiPrivate)
else()
target_include_directories(3rdparty_qt6 INTERFACE ${Qt6Gui_PRIVATE_INCLUDE_DIRS})
endif()
endif()
if(Qt6Widgets_FOUND)
+12 -4
View File
@@ -1,4 +1,12 @@
option(RTMIDI_API_JACK "Compile with JACK support." OFF)
option(RTMIDI_BUILD_TESTING "Build test programs" OFF)
set(RTMIDI_TARGETNAME_UNINSTALL "uninstall-rpcs3-rtmidi")
add_subdirectory(rtmidi EXCLUDE_FROM_ALL)
if(USE_SYSTEM_RTMIDI)
message(STATUS "RPCS3: using shared RtMidi")
pkg_check_modules(RtMidi REQUIRED IMPORTED_TARGET rtmidi>=6.0.0)
add_library(rtmidi INTERFACE)
target_link_libraries(rtmidi INTERFACE PkgConfig::RtMidi)
target_include_directories(rtmidi SYSTEM INTERFACE PkgConfig::RtMidi)
else()
option(RTMIDI_API_JACK "Compile with JACK support." OFF)
option(RTMIDI_BUILD_TESTING "Build test programs" OFF)
set(RTMIDI_TARGETNAME_UNINSTALL "uninstall-rpcs3-rtmidi")
add_subdirectory(rtmidi EXCLUDE_FROM_ALL)
endif()
+1 -1
View File
@@ -1,2 +1,2 @@
add_library(3rdparty_stblib INTERFACE)
target_include_directories(3rdparty_stblib INTERFACE stb)
target_include_directories(3rdparty_stblib SYSTEM INTERFACE stb)
+15 -10
View File
@@ -39,13 +39,14 @@ check_tags()
echo "Checking $path"
# git_call fetch --prune --all
git_call fetch --prune --all
# Get the latest tag (by commit date, not tag name)
local tag_list=$(git_call rev-list --tags --max-count=1)
local latest_tag=$(git_call describe --tags "$tag_list")
local highest_tag=$(git_call tag -l | sort -V | tail -n1)
if [ -n "$latest_tag" ]; then
if [ -n "$latest_tag" ] || [ -n "$highest_tag" ]; then
# Get the current tag
local current_tag=$(git_call describe --tags --abbrev=0)
@@ -53,28 +54,29 @@ check_tags()
if [ -n "$current_tag" ]; then
if [ "$verbose" -eq 1 ]; then
echo "$path -> latest: $latest_tag, current: $current_tag"
echo "$path -> latest: $latest_tag, highest: $highest_tag, current: $current_tag"
fi
local ts0=$(git_call log -1 --format=%ct $highest_tag)
local ts1=$(git_call log -1 --format=%ct $latest_tag)
local ts2=$(git_call log -1 --format=%ct $current_tag)
if (( ts1 > ts2 )); then
if (( ts0 > ts2 )) || (( ts1 > ts2 )); then
if [ "$verbose" -eq 1 ]; then
echo -e "\t $path: latest is newer"
elif [ "$verbose" -eq 0 ]; then
echo "$path -> latest: $latest_tag, current: $current_tag"
echo "$path -> latest: $latest_tag, highest: $highest_tag, current: $current_tag"
fi
# Critical section guarded by flock
(
flock 200
echo "$path -> latest: $latest_tag, current: $current_tag" >> "$resultfile"
echo "$path -> latest: $latest_tag, highest: $highest_tag, current: $current_tag" >> "$resultfile"
) 200>"$lockfile"
fi
elif [ "$verbose" -eq 1 ]; then
echo "$path -> latest: $latest_tag"
echo "$path -> latest: $latest_tag, highest: $highest_tag"
fi
elif [ "$verbose" -eq 1 ]; then
@@ -117,7 +119,8 @@ echo -e "\n\nResult:\n"
# Find the max length of the paths (before '->')
max_len=0
while IFS='->' read -r left _; do
while read -r line; do
left="${line%%->*}"
len=$(echo -n "$left" | wc -c)
if (( len > max_len )); then
max_len=$len
@@ -125,8 +128,10 @@ while IFS='->' read -r left _; do
done < "$resultfile"
# Print with padding so '->' lines up
while IFS='->' read -r left right; do
right=$(echo "$right" | sed 's/^[[:space:]]*>*[[:space:]]*//')
while read -r line; do
left="${line%%->*}"
right="${line#*->}"
right=$(echo "$right" | sed 's/^[[:space:]]*//')
printf "%-${max_len}s -> %s\n" "$left" "$right"
done < "$resultfile"
+15 -16
View File
@@ -4,23 +4,22 @@ if(USE_SYSTEM_WOLFSSL)
add_library(wolfssl INTERFACE)
target_link_libraries(wolfssl INTERFACE PkgConfig::WolfSSL)
else()
option(WOLFSSL_TLS13 "Enable wolfSSL TLS v1.3 (default: enabled)" OFF)
set(WOLFSSL_SHA3 ON CACHE STRING "Enable wolfSSL SHA-3 support (default: enabled on x86_64/aarch64)")
set(WOLFSSL_SHAKE256 ON CACHE STRING "Enable wolfSSL SHAKE256 support (default: enabled on x86_64/aarch64)")
option(WOLFSSL_BASE64_ENCODE "Enable Base64 encoding (default: enabled on x86_64)" OFF)
option(WOLFSSL_DES3 "Enable DES3 (default: disabled)" ON)
option(WOLFSSL_PWDBASED "Enable PWDBASED (default: disabled)" ON)
option(WOLFSSL_FAST_MATH "Enable fast math ops (default: disabled)" ON)
option(WOLFSSL_EXAMPLES "Enable examples (default: enabled)" OFF)
option(WOLFSSL_CRYPT_TESTS "Enable Crypt Bench/Test (default: enabled)" OFF)
option(WOLFSSL_ASYNC_THREADS "Enable Asynchronous Threading (default: enabled)" OFF)
option(WOLFSSL_BUILD_OUT_OF_TREE "Don't generate files in the source tree (default: yes)" ON)
option(WOLFSSL_SNI "Enable SNI (default: disabled)" ON)
option(WOLFSSL_OPENSSLEXTRA "Enable extra OpenSSL API, size+ (default: disabled)" ON)
option(WOLFSSL_HARDEN "Enable Hardened build, Enables Timing Resistance and Blinding (default: enabled)" OFF)
option(WOLFSSL_ALT_CERT_CHAINS "Enable support for Alternate certification chains (default: disabled)" ON)
set(WOLFSSL_TLS13 OFF CACHE INTERNAL "")
set(WOLFSSL_SHA3 ON CACHE INTERNAL "")
set(WOLFSSL_SHAKE256 ON CACHE INTERNAL "")
set(WOLFSSL_BASE64_ENCODE OFF CACHE INTERNAL "")
set(WOLFSSL_DES3 ON CACHE INTERNAL "")
set(WOLFSSL_PWDBASED ON CACHE INTERNAL "")
set(WOLFSSL_FAST_MATH ON CACHE INTERNAL "")
set(WOLFSSL_EXAMPLES OFF CACHE INTERNAL "")
set(WOLFSSL_CRYPT_TESTS OFF CACHE INTERNAL "")
set(WOLFSSL_ASYNC_THREADS OFF CACHE INTERNAL "")
set(WOLFSSL_BUILD_OUT_OF_TREE ON CACHE INTERNAL "")
set(WOLFSSL_SNI ON CACHE INTERNAL "")
set(WOLFSSL_OPENSSLEXTRA ON CACHE INTERNAL "")
set(WOLFSSL_ALT_CERT_CHAINS ON CACHE INTERNAL "")
add_subdirectory(wolfssl EXCLUDE_FROM_ALL)
target_compile_definitions(wolfssl PUBLIC WOLFSSL_DES_ECB HAVE_WRITE_DUP FP_MAX_BITS=8192 WOLFSSL_NO_OPTIONS_H)
target_compile_definitions(wolfssl PUBLIC WOLFSSL_DES_ECB HAVE_WRITE_DUP FP_MAX_BITS=8192 WOLFSSL_USE_OPTIONS_H)
endif()
+1
View File
@@ -76,6 +76,7 @@
<ClCompile Include="yaml-cpp\src\exceptions.cpp" />
<ClCompile Include="yaml-cpp\src\exp.cpp">
</ClCompile>
<ClCompile Include="yaml-cpp\src\fptostring.cpp" />
<ClCompile Include="yaml-cpp\src\memory.cpp">
</ClCompile>
<ClCompile Include="yaml-cpp\src\node.cpp">
+3
View File
@@ -94,5 +94,8 @@
<ClCompile Include="yaml-cpp\src\depthguard.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="yaml-cpp\src\fptostring.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
+3 -2
View File
@@ -6,13 +6,14 @@ if (USE_SYSTEM_ZLIB)
target_link_libraries(3rdparty_zlib INTERFACE ZLIB::ZLIB)
target_compile_definitions(3rdparty_zlib INTERFACE -DZLIB_CONST=1)
else()
option(ZLIB_BUILD_EXAMPLES "Enable Zlib Examples" OFF)
option(ZLIB_BUILD_TESTING "Enable Zlib Examples as tests" OFF)
option(ZLIB_BUILD_SHARED "Enable building zlib shared library" OFF)
message(STATUS "RPCS3: Using builtin ZLIB")
set(SKIP_INSTALL_ALL ON)
add_subdirectory(zlib EXCLUDE_FROM_ALL)
add_library(3rdparty_zlib INTERFACE)
target_link_libraries(3rdparty_zlib INTERFACE zlibstatic)
target_include_directories(3rdparty_zlib INTERFACE zlib ${CMAKE_CURRENT_BINARY_DIR}/zlib)
target_include_directories(3rdparty_zlib SYSTEM INTERFACE zlib ${CMAKE_CURRENT_BINARY_DIR}/zlib)
target_compile_definitions(3rdparty_zlib INTERFACE -DZLIB_CONST=1)
endif()
+15 -7
View File
@@ -1,8 +1,16 @@
option(ZSTD_BUILD_PROGRAMS "BUILD PROGRAMS" OFF)
option(ZSTD_BUILD_SHARED "BUILD SHARED LIBRARIES" OFF)
option(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" ON)
option(ZSTD_BUILD_TESTS "BUILD TESTS" OFF)
if(USE_SYSTEM_ZSTD)
message(STATUS "RPCS3: using shared zstd")
pkg_check_modules(zstd REQUIRED IMPORTED_TARGET libzstd)
add_library(3rdparty_zstd INTERFACE)
target_link_libraries(3rdparty_zstd INTERFACE PkgConfig::zstd)
target_include_directories(3rdparty_zstd SYSTEM INTERFACE PkgConfig::RtMidi)
else()
option(ZSTD_BUILD_PROGRAMS "BUILD PROGRAMS" OFF)
option(ZSTD_BUILD_SHARED "BUILD SHARED LIBRARIES" OFF)
option(ZSTD_BUILD_STATIC "BUILD STATIC LIBRARIES" ON)
option(ZSTD_BUILD_TESTS "BUILD TESTS" OFF)
add_subdirectory(zstd/build/cmake EXLUDE_FROM_ALL)
add_library(3rdparty_zstd INTERFACE)
target_link_libraries(3rdparty_zstd INTERFACE libzstd_static)
add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL)
add_library(3rdparty_zstd INTERFACE)
target_link_libraries(3rdparty_zstd INTERFACE libzstd_static)
endif()
+14 -12
View File
@@ -8,38 +8,39 @@ Other instructions may be found [here](https://wiki.rpcs3.net/index.php?title=Bu
### Windows 10 or later
The following tools are required to build RPCS3 on Windows 10 or later:
- [Visual Studio 2022](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community)
- [Visual Studio 2022/2026](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community)
- **Optional** - [CMake 3.28.0+](https://www.cmake.org/download/) (add to PATH)
**NOTES:**
- **Visual Studio 2022** integrates **CMake 3.29+** and it also supports both the `sln` solution (`.sln`, `.vcxproj`) and `CMake` solution (`CMakeLists.txt`, `CMakePresets.json`).
- **Visual Studio 2026** needs at least **CMake 4.2.0+**.
- **Visual Studio 2022/2026** integrates **CMake 3.29+** and it also supports both the `sln` solution (`.sln`, `.vcxproj`) and `CMake` solution (`CMakeLists.txt`, `CMakePresets.json`).
See sections [Building with Visual Studio sln solution](#building-with-visual-studio-sln-solution) and [Building with Visual Studio CMake solution](#building-with-visual-studio-cmake-solution)
on how to build the project with **Visual Studio**.
- Install and use this standalone **CMake** tool just in case of your preference. See section [Building with standalone CMake tool](#building-with-standalone-cmake-tool) on how to build the project
with standalone **CMake** tool.
- [Python 3.6+](https://www.python.org/downloads/) (add to PATH)
- [Qt 6.9.0](https://www.qt.io/download-qt-installer) In case you can't download from the official installer, you can use [Another Qt installer](https://github.com/miurahr/aqtinstall) (In that case you will need to manually add the "qtmultimedia" module when installing Qt)
- [Vulkan SDK 1.3.268.0](https://vulkan.lunarg.com/sdk/home) (see "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/windows/getting_started.html)) for now future SDKs don't work. You need precisely 1.3.268.0.
- [Qt 6.11.1](https://www.qt.io/download-qt-installer) In case you can't download from the official installer, you can use [Another Qt installer](https://github.com/miurahr/aqtinstall) (In that case you will need to manually add the "qtmultimedia" module when installing Qt)
- [Vulkan SDK 1.4.341.1](https://vulkan.lunarg.com/sdk/home) (see "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/windows/getting_started.html)). Note that future SDKs may not work.
The `sln` solution available only on **Visual Studio** is the preferred building solution. It easily allows to build the **RPCS3** application in `Release` and `Debug` mode.
In order to build **RPCS3** with the `sln` solution (with **Visual Studio**), **Qt** libs need to be detected. To detect the libs:
- add and set the `QTDIR` environment variable, e.g. `<QtInstallFolder>\6.9.0\msvc2022_64\`
- add and set the `QTDIR` environment variable, e.g. `<QtInstallFolder>\6.11.1\msvc2022_64\`
- or use the [Visual Studio Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2022)
**NOTE:** If you have issues with the **Visual Studio Qt Plugin**, you may want to uninstall it and install the [Legacy Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.LEGACYQtVisualStudioTools2022) instead.
In order to build **RPCS3** with the `CMake` solution (with both **Visual Studio** and standalone **CMake** tool):
- add and set the `Qt6_ROOT` environment variable to the **Qt** libs path, e.g. `<QtInstallFolder>\6.9.0\msvc2022_64\`
- add and set the `Qt6_ROOT` environment variable to the **Qt** libs path, e.g. `<QtInstallFolder>\6.11.1\msvc2022_64\`
### Linux
These are the essentials tools to build RPCS3 on Linux. Some of them can be installed through your favorite package manager:
- Clang 17+ or GCC 13+
- [CMake 3.28.0+](https://www.cmake.org/download/)
- [Qt 6.9.0](https://www.qt.io/download-qt-installer)
- [Vulkan SDK 1.3.268.0](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html)) for now future SDKs don't work. You need precisely 1.3.268.0.
- [Qt 6.11.1](https://www.qt.io/download-qt-installer)
- [Vulkan SDK 1.4.341.1](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html)). Note that future SDKs may not work.
- [SDL3](https://github.com/libsdl-org/SDL/releases) (for the FAudio backend)
**If you have an NVIDIA GPU, you may need to install the libglvnd package.**
@@ -50,7 +51,7 @@ These are the essentials tools to build RPCS3 on Linux. Some of them can be inst
#### Debian & Ubuntu
sudo apt-get install build-essential ninja-build libasound2-dev libpulse-dev libopenal-dev libglew-dev zlib1g-dev libedit-dev libvulkan-dev libudev-dev git libevdev-dev libsdl3-3.2 libsdl3-dev libjack-dev libsndio-dev
sudo apt-get install build-essential ninja-build libasound2-dev libpulse-dev libopenal-dev libglew-dev zlib1g-dev libedit-dev libvulkan-dev libudev-dev git libevdev-dev libsdl3-dev libjack-dev libsndio-dev libcurl4-openssl-dev qt6-base-dev qt6-base-private-dev qt6-multimedia-dev qt6-svg-dev libxkbcommon-dev
Ubuntu is usually horrendously out of date, and some packages need to be downloaded by hand. This part is for Qt, GCC, Vulkan, and CMake
@@ -94,7 +95,7 @@ sudo apt-get install cmake
#### Fedora
sudo dnf install alsa-lib-devel cmake ninja-build glew glew-devel libatomic libevdev-devel libudev-devel openal-devel qt6-qtbase-devel qt6-qtbase-private-devel vulkan-devel pipewire-jack-audio-connection-kit-devel qt6-qtmultimedia-devel qt6-qtsvg-devel llvm-devel
sudo dnf install alsa-lib-devel cmake ninja-build glew glew-devel libatomic libevdev-devel libudev-devel openal-soft-devel qt6-qtbase-devel qt6-qtbase-private-devel vulkan-devel pipewire-jack-audio-connection-kit-devel qt6-qtmultimedia-devel qt6-qtsvg-devel llvm-devel libcurl-devel
#### OpenSUSE
@@ -107,9 +108,10 @@ Clone and initialize the repository
```bash
git clone --recurse-submodules https://github.com/RPCS3/rpcs3.git
cd rpcs3
git submodule sync
# This is automatically done by `git clone --recurse-submodules`,
# but in case you forgot it, you can manually fetch submodules this way:
git submodule update --init
git submodule update --init --recursive
```
### Windows
@@ -121,7 +123,7 @@ Start **Visual Studio**, click on `Open a project or solution` and select the `r
##### Configuring the Qt Plugin (if used)
1) go to `Extensions->Qt VS Tools->Qt Versions`
2) add the path to your Qt installation with compiler e.g. `<QtInstallFolder>\6.9.0\msvc2022_64`, version will fill in automatically
2) add the path to your Qt installation with compiler e.g. `<QtInstallFolder>\6.11.1\msvc2022_64`, version will fill in automatically
3) go to `Extensions->Qt VS Tools->Options->Legacy Project Format`. (Only available in the **Legacy Qt Plugin**)
4) set `Build: Run pre-build setup` to `true`. (Only available in the **Legacy Qt Plugin**)
+49 -66
View File
@@ -1,20 +1,33 @@
cmake_minimum_required(VERSION 3.28)
find_program(CCACHE_PATH ccache HINTS ENV PATH)
if(CCACHE_PATH)
message(STATUS "Using ccache: ${CCACHE_PATH}")
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PATH}")
set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PATH}")
endif()
project(rpcs3 LANGUAGES C CXX)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11)
message(FATAL_ERROR "RPCS3 requires at least gcc-11.")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13)
message(FATAL_ERROR "RPCS3 requires at least gcc-13.")
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.0)
message(FATAL_ERROR "RPCS3 requires at least clang-12.0.")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0)
message(FATAL_ERROR "RPCS3 requires at least clang-19.0.")
endif()
endif()
if(APPLE OR WIN32)
set(USE_SYSTEM_OPENAL_DEFAULT OFF)
else()
set(USE_SYSTEM_OPENAL_DEFAULT ON)
endif()
option(USE_NATIVE_INSTRUCTIONS "USE_NATIVE_INSTRUCTIONS makes rpcs3 compile with -march=native, which is useful for local builds, but not good for packages." ON)
option(WITH_LLVM "Enable usage of LLVM library" ON)
option(BUILD_LLVM "Build LLVM from git submodule" OFF)
@@ -22,20 +35,34 @@ option(STATIC_LINK_LLVM "Link against LLVM statically. This will get set to ON i
option(USE_FAUDIO "FAudio audio backend" ON)
option(USE_LIBEVDEV "libevdev-based joystick support" ON)
option(USE_DISCORD_RPC "Discord rich presence integration" OFF)
option(USE_SYSTEM_ZLIB "Prefer system ZLIB instead of the builtin one" ON)
option(USE_VULKAN "Vulkan render backend" ON)
option(USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF)
option(USE_SDL "Enables SDL input handler" OFF)
option(USE_SYSTEM_SDL "Prefer system SDL instead of the builtin one" ON)
option(USE_SYSTEM_FFMPEG "Prefer system ffmpeg instead of the prebuild one" OFF)
option(USE_SYSTEM_OPENAL "Prefer system OpenAL instead of the prebuild one" ON)
option(USE_SYSTEM_CURL "Prefer system Curl instead of the prebuild one" ON)
option(USE_SYSTEM_OPENCV "Prefer system OpenCV instead of the builtin one" ON)
option(USE_SDL "Enables SDL input handler" ON)
option(USE_SYSTEM_CUBEB "Prefer system cubeb instead of the builtin one" OFF)
option(USE_SYSTEM_CURL "Prefer system Curl instead of the prebuild one" ON)
option(USE_SYSTEM_FAUDIO "Prefer system FAudio instead of the builtin one" OFF)
option(USE_SYSTEM_FFMPEG "Prefer system ffmpeg instead of the prebuild one" OFF)
option(USE_SYSTEM_PROTOBUF "Prefer system protobuf instead of the builtin one" OFF)
option(USE_SYSTEM_GLSLANG "Prefer system glslang instead of the builtin one" OFF)
option(USE_SYSTEM_HIDAPI "Prefer system hidapi instead of the builtin one" OFF)
option(USE_SYSTEM_LIBPNG "Prefer system libpng instead of the builtin one" OFF)
option(USE_SYSTEM_LIBUSB "Prefer system libusb instead of the builtin one" OFF)
option(USE_SYSTEM_MINIUPNPC "Prefer system MiniUPnPc instead of the builtin one" OFF)
option(USE_SYSTEM_MVK "Prefer system MoltenVK instead of the builtin one" OFF)
option(USE_SYSTEM_OPENAL "Prefer system OpenAL instead of the prebuild one" ${USE_SYSTEM_OPENAL_DEFAULT})
option(USE_SYSTEM_OPENCV "Prefer system OpenCV instead of the builtin one" ON)
option(USE_SYSTEM_PUGIXML "Prefer system pugixml instead of the builtin one" OFF)
option(USE_SYSTEM_RTMIDI "Prefer system RtMidi instead of the builtin one" OFF)
option(USE_SYSTEM_SDL "Prefer system SDL instead of the builtin one" ON)
option(USE_SYSTEM_VULKAN_MEMORY_ALLOCATOR "Prefer system Vulkan Memory Allocator instead of the builtin one" OFF)
option(USE_SYSTEM_WOLFSSL "Prefer system wolfSSL instead of the builtin one" OFF)
option(USE_SYSTEM_ZLIB "Prefer system ZLIB instead of the builtin one" ON)
option(USE_SYSTEM_ZSTD "Prefer system zstd instead of the builtin one" OFF)
option(HAS_MEMORY_BREAKPOINTS "Add support for memory breakpoints to the interpreter" OFF)
option(USE_LTO "Use LTO for building" ON)
option(BUILD_RPCS3_TESTS "Build RPCS3 unit tests." OFF)
option(RUN_RPCS3_TESTS "Run RPCS3 unit tests. Requires BUILD_RPCS3_TESTS" OFF)
option(USE_GAMEMODE "Choose whether to enable GameMode features or not." ON)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/buildfiles/cmake")
@@ -59,68 +86,20 @@ if(CMAKE_BUILD_TYPE MATCHES "Debug" AND NOT MSVC)
endif()
if(MSVC)
option(USE_MSVC_STATIC_CRT "Use static MSVC C runtime" OFF)
# TODO(cjj19970505@live.cn)
# DiscordRPC binary in 3rdparty is compiled /MT
# So theoretically we should enable DiscordRPC in Release and static CRT build
# since we might encounter some rumtime issues when more than one CRT version are presented.
# https://docs.microsoft.com/en-us/cpp/c-runtime-library/crt-library-features?view=msvc-160#what-problems-exist-if-an-application-uses-more-than-one-crt-version
# Add other DiscordRPC binaries(compiled with /MTd, /MD, /MDd) or compile it from source may address this issue.
if(NOT IS_MULTI_CONFIG)
if(NOT(CMAKE_BUILD_TYPE MATCHES "Release" AND USE_MSVC_STATIC_CRT))
set(USE_DISCORD_RPC OFF CACHE BOOL "Discord RPC is only available in Release and static CRT build." FORCE)
endif()
endif()
if(USE_MSVC_STATIC_CRT)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
else()
# though doc ( https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html )
# says if that property is not set then CMake uses the default value MultiThreaded$<$<CONFIG:Debug>:Debug>DLL
# to select a MSVC runtime library.
# But yaml-cpp set /MT(d) if CMAKE_MSVC_RUNTIME_LIBRARY is undefined
# So we have to define it explicitly
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
endif()
# TODO(cjj19970505@live.cn)
# offical QT uses dynamic CRT.
# When building our lib with static CRT and debug build type
# and linking with Qt with dynamic CRT and debug build,
# error is encountered in runtime (which is expected).
# But building our lib with static CRT and release build type,
# and linking with Qt with dynamic CRT and release build seems to be working,
# which is the same config with VS solution.
# (though technically it might still have some hidden errors).
# So we allow static CRT in both relase and debug build, but prompt warning in debug build.
# For more info:
# https://docs.microsoft.com/en-us/cpp/c-runtime-library/crt-library-features?view=msvc-160#what-problems-exist-if-an-application-uses-more-than-one-crt-version
# https://wiki.qt.io/Technical_FAQ#Why_does_a_statically_built_Qt_use_the_dynamic_Visual_Studio_runtime_libraries_.3F_Do_I_need_to_deploy_those_with_my_application_.3F
if(USE_MSVC_STATIC_CRT)
if(IS_MULTI_CONFIG OR CMAKE_BUILD_TYPE MATCHES "Debug")
message(AUTHOR_WARNING "Debug build currently can not work with static CRT.")
endif()
endif()
add_compile_options(/MP)
add_compile_options("$<$<COMPILE_LANGUAGE:C,CXX>:/MP>")
endif()
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." )
endif()
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
set(CMAKE_CXX_COMPILER_LAUNCHER ccache)
message(FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms.")
endif()
if(APPLE AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
include_directories(/opt/homebrew/include)
link_directories(/opt/homebrew/lib)
list(APPEND CMAKE_PREFIX_PATH "/opt/homebrew")
list(APPEND CMAKE_SYSTEM_PREFIX_PATH "/opt/homebrew")
endif()
if(MSVC)
add_compile_options(/wd4530 /utf-8) # C++ exception handler used, but unwind semantics are not enabled
add_compile_options("$<$<COMPILE_LANGUAGE:C,CXX>:/wd4530;/utf-8>") # C++ exception handler used, but unwind semantics are not enabled
endif()
add_subdirectory(3rdparty)
@@ -139,8 +118,12 @@ if (NOT FOUND_LTO EQUAL -1)
message(FATAL_ERROR "RPCS3 doesn't support building with LTO, use -DDISABLE_LTO=TRUE to force-disable it")
endif()
if(NOT WIN32)
add_compile_options(-pthread)
## Look for Gamemode if its installed on Linux
if(LINUX)
## User chooses whether to Enable GameMode features or not
if(USE_GAMEMODE)
add_compile_definitions(GAMEMODE_AVAILABLE)
endif()
endif()
# TODO: do real installation, including copying directory structure
+10 -1
View File
@@ -1,7 +1,6 @@
RPCS3
=====
[![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/RPCS3/rpcs3/master?label=Cirrus%20CI&logo=cirrus-ci)](https://cirrus-ci.com/github/RPCS3/rpcs3)
[![GitHub Actions](https://img.shields.io/github/actions/workflow/status/RPCS3/rpcs3/rpcs3.yml?branch=master&logo=github&label=Actions)](https://github.com/RPCS3/rpcs3/actions/workflows/rpcs3.yml)
[![RPCS3 Discord Server](https://img.shields.io/discord/272035812277878785?color=5865F2&label=RPCS3%20Discord&logo=discord&logoColor=white)](https://discord.gg/rpcs3)
@@ -24,6 +23,16 @@ If you want to contribute as a developer, please take a look at the following pa
You should also contact any of the developers in the forums or in the Discord server to learn more about the current state of the emulator.
### AI Use
Use of AI tools for research and reverse engineering purposes is permitted. However, contributors are expected to fully own and understand all code they submit. Any communication with the team — including code, code comments, and GitHub comments — must come from the human contributor, not an AI agent acting autonomously.
We have unfortunately seen a rise in untested and unverified AI-generated slop being submitted to this project. This wastes maintainer time and, in worse cases, such changes get merged and break functionality for all users. Repeated violations will result in a ban from the repository. Please be respectful of everyone's time.
**Pull requests opened by AI agents or automated tools must include a disclosure in the PR description** stating the scope of AI involvement — which parts were AI-generated and what human testing or review was performed prior to submission. PRs that omit this disclosure may be closed without review.
If you are unsure about your work, open a discussion issue to talk it through with the team, or reach out to a maintainer on [Discord](https://discord.gg/RPCS3).
## Building
See [BUILDING.md](BUILDING.md) for more information about how to setup an environment to build RPCS3.
+199 -55
View File
@@ -40,7 +40,7 @@ namespace cfg
owner->m_nodes.emplace_back(this);
}
bool _base::from_string(std::string_view, bool)
bool _base::from_string(std::string_view /*value*/, bool /*dynamic*/)
{
cfg_log.fatal("cfg::_base::from_string() purecall");
return false;
@@ -68,7 +68,7 @@ namespace cfg
// Incrementally load config entries from YAML::Node.
// The config value is preserved if the corresponding YAML node doesn't exist.
static void decode(const YAML::Node& data, class _base& rhs, bool dynamic = false);
[[nodiscard]] static bool decode(const YAML::Node& data, class _base& rhs, bool dynamic, bool strict);
}
std::vector<std::string> cfg::make_int_range(s64 min, s64 max)
@@ -76,11 +76,11 @@ std::vector<std::string> cfg::make_int_range(s64 min, s64 max)
return {std::to_string(min), std::to_string(max)};
}
bool try_to_int64(s64* out, std::string_view value, s64 min, s64 max)
bool try_to_int64(s64* out, std::string_view value, s64 min, s64 max, std::string_view name)
{
if (value.empty())
{
if (out) cfg_log.error("cfg::try_to_int64(): called with an empty string");
if (out) cfg_log.error("cfg::try_to_int64('%s'): called with an empty string", name);
return false;
}
@@ -107,7 +107,7 @@ bool try_to_int64(s64* out, std::string_view value, s64 min, s64 max)
if (ret.ec != std::errc() || ret.ptr != end || (start[0] == '-' && sign < 0))
{
if (out) cfg_log.error("cfg::try_to_int64('%s'): invalid integer", value);
if (out) cfg_log.error("cfg::try_to_int64('%s', '%s'): invalid integer", value, name);
return false;
}
@@ -115,7 +115,7 @@ bool try_to_int64(s64* out, std::string_view value, s64 min, s64 max)
if (result < min || result > max)
{
if (out) cfg_log.error("cfg::try_to_int64('%s'): out of bounds (val=%d, min=%d, max=%d)", value, result, min, max);
if (out) cfg_log.error("cfg::try_to_int64('%s', '%s'): out of bounds (val=%d, min=%d, max=%d)", value, name, result, min, max);
return false;
}
@@ -128,11 +128,11 @@ std::vector<std::string> cfg::make_uint_range(u64 min, u64 max)
return {std::to_string(min), std::to_string(max)};
}
bool try_to_uint64(u64* out, std::string_view value, u64 min, u64 max)
bool try_to_uint64(u64* out, std::string_view value, u64 min, u64 max, std::string_view name)
{
if (value.empty())
{
if (out) cfg_log.error("cfg::try_to_uint64(): called with an empty string");
if (out) cfg_log.error("cfg::try_to_uint64('%s'): called with an empty string", name);
return false;
}
@@ -152,13 +152,13 @@ bool try_to_uint64(u64* out, std::string_view value, u64 min, u64 max)
if (ret.ec != std::errc() || ret.ptr != end)
{
if (out) cfg_log.error("cfg::try_to_uint64('%s'): invalid integer", value);
if (out) cfg_log.error("cfg::try_to_uint64('%s', '%s'): invalid integer", value, name);
return false;
}
if (result < min || result > max)
{
if (out) cfg_log.error("cfg::try_to_uint64('%s'): out of bounds (val=%u, min=%u, max=%u)", value, result, min, max);
if (out) cfg_log.error("cfg::try_to_uint64('%s', '%s'): out of bounds (val=%u, min=%u, max=%u)", value, name, result, min, max);
return false;
}
@@ -166,16 +166,65 @@ bool try_to_uint64(u64* out, std::string_view value, u64 min, u64 max)
return true;
}
bool try_to_uint128(u128* out, std::string_view value, std::string_view name)
{
if (value.empty())
{
if (out) cfg_log.error("cfg::try_to_uint128('%s'): called with an empty string", name);
return false;
}
u64 result_low = 0, result_high = 0;
const char* start_high64 = value.data();
const char* end = value.data() + value.size();
if (start_high64[0] == '0' && value.size() >= 2 && (start_high64[1] == 'x' || start_high64[1] == 'X'))
{
// Hex support
start_high64 += 2;
}
const char* start_low64 = end - std::min<usz>(end - start_high64, 16);
// Hexadecimal-only
constexpr int base = 16;
auto ret = std::from_chars(start_low64, end, result_low, base);
if (ret.ec != std::errc() || ret.ptr != end)
{
if (out) cfg_log.error("cfg::try_to_uint128('%s', '%s'): invalid integer", value, name);
return false;
}
if (start_high64 == start_low64)
{
if (out) *out = result_low;
return true;
}
ret = std::from_chars(start_high64, start_low64, result_high, base);
if (ret.ec != std::errc() || ret.ptr != start_low64)
{
if (out) cfg_log.error("cfg::try_to_uint128('%s', '%s'): invalid integer", value, name);
return false;
}
if (out) *out = result_low + (u128{result_high} << 64);
return true;
}
std::vector<std::string> cfg::make_float_range(f64 min, f64 max)
{
return {std::to_string(min), std::to_string(max)};
}
bool try_to_float(f64* out, std::string_view value, f64 min, f64 max)
bool try_to_float(f64* out, std::string_view value, f64 min, f64 max, std::string_view name)
{
if (value.empty())
{
if (out) cfg_log.error("cfg::try_to_float(): called with an empty string");
if (out) cfg_log.error("cfg::try_to_float('%s'): called with an empty string", name);
return false;
}
@@ -188,13 +237,13 @@ bool try_to_float(f64* out, std::string_view value, f64 min, f64 max)
if (end_check != str.data() + str.size())
{
if (out) cfg_log.error("cfg::try_to_float('%s'): invalid float", value);
if (out) cfg_log.error("cfg::try_to_float('%s', '%s'): invalid float", value, name);
return false;
}
if (result < min || result > max)
{
if (out) cfg_log.error("cfg::try_to_float('%s'): out of bounds (val=%f, min=%f, max=%f)", value, result, min, max);
if (out) cfg_log.error("cfg::try_to_float('%s', '%s'): out of bounds (val=%f, min=%f, max=%f)", value, name, result, min, max);
return false;
}
@@ -202,12 +251,8 @@ bool try_to_float(f64* out, std::string_view value, f64 min, f64 max)
return true;
}
bool try_to_string(std::string* out, const f64& value)
bool try_to_string(std::string* out, f64 value, std::string_view name)
{
#ifdef __APPLE__
if (out) *out = std::to_string(value);
return true;
#else
std::array<char, 32> str{};
if (auto [ptr, ec] = std::to_chars(str.data(), str.data() + str.size(), value, std::chars_format::fixed); ec == std::errc())
@@ -217,14 +262,15 @@ bool try_to_string(std::string* out, const f64& value)
}
else
{
if (out) cfg_log.error("cfg::try_to_string(): could not convert value '%f' to string. error='%s'", value, std::make_error_code(ec).message());
if (out) cfg_log.error("cfg::try_to_string('%s'): could not convert value '%f' to string. error='%s'", name, value, std::make_error_code(ec).message());
return false;
}
#endif
}
bool cfg::try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) func, std::string_view value)
bool cfg::try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) func, std::string_view value, std::string_view name)
{
ensure(func);
u64 max = umax;
for (u64 i = 0;; i++)
@@ -253,7 +299,7 @@ bool cfg::try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) f
const char* end = start + value.size();
int base = 10;
if (start[0] == '0' && (start[1] == 'x' || start[1] == 'X'))
if (value.size() >= 2 && start[0] == '0' && (start[1] == 'x' || start[1] == 'X'))
{
// Limited hex support
base = 16;
@@ -264,13 +310,13 @@ bool cfg::try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) f
if (ret.ec != std::errc() || ret.ptr != end)
{
if (out) cfg_log.error("cfg::try_to_enum_value('%s'): invalid enum or integer", value);
if (out) cfg_log.error("cfg::try_to_enum_value('%s', '%s'): invalid enum or integer", value, name);
return false;
}
if (result > max)
{
if (out) cfg_log.error("cfg::try_to_enum_value('%s'): out of bounds(val=%u, min=0, max=%u)", value, result, max);
if (out) cfg_log.error("cfg::try_to_enum_value('%s', '%s'): out of bounds(val=%u, min=0, max=%u)", value, name, result, max);
return false;
}
@@ -278,6 +324,19 @@ bool cfg::try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) f
return true;
}
std::string cfg::uint128::to_string(u128 value) noexcept
{
std::string result = "0x";
result.resize(result.size() + 32);
for (u32 i = 0; i < 32; i++)
{
result[result.size() - 1 - i] = "0123456789ABCDEF"[static_cast<u64>(value >> (i * 4)) % 16];
}
return result;
}
std::vector<std::string> cfg::try_to_enum_list(decltype(&fmt_class_string<int>::format) func)
{
std::vector<std::string> result;
@@ -300,6 +359,27 @@ std::vector<std::string> cfg::try_to_enum_list(decltype(&fmt_class_string<int>::
return result;
}
size_t cfg::try_to_enum_size(decltype(&fmt_class_string<int>::format) func)
{
size_t result = 0;
for (u64 i = 0;; i++)
{
std::string var;
func(var, i);
std::string hex;
fmt_class_string<u64>::format(hex, i);
if (var == hex)
{
break;
}
result++;
}
return result;
}
void cfg::encode(YAML::Emitter& out, const cfg::_base& rhs)
{
switch (rhs.get_type())
@@ -354,7 +434,7 @@ void cfg::encode(YAML::Emitter& out, const cfg::_base& rhs)
out << YAML::BeginMap;
for (const auto& np : static_cast<const log_entry&>(rhs).get_map())
{
if (np.second == logs::level::notice) continue;
if (np.second == logs::level::_default) continue;
out << YAML::Key << np.first;
out << YAML::Value << fmt::format("%s", np.second);
}
@@ -385,37 +465,50 @@ void cfg::encode(YAML::Emitter& out, const cfg::_base& rhs)
}
}
void cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic)
bool cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic, bool strict)
{
if (dynamic && !rhs.get_is_dynamic())
{
return;
return true;
}
switch (rhs.get_type())
{
case type::node:
{
if (data.IsScalar() || data.IsSequence())
if (!data.IsMap())
{
return; // ???
cfg_log.error("node node is not a map");
return false;
}
bool success = true;
for (const auto& pair : data)
{
if (!pair.first.IsScalar()) continue;
// Find the key among existing nodes
for (const auto& node : static_cast<node&>(rhs).get_nodes())
const auto& nodes = static_cast<node&>(rhs).get_nodes();
const auto it = std::find_if(nodes.cbegin(), nodes.cend(), [&pair](const auto& node) { return ensure(node)->get_name() == pair.first.Scalar(); });
if (it == nodes.cend())
{
if (node->get_name() == pair.first.Scalar())
if (strict)
{
decode(pair.second, *node, dynamic);
cfg_log.error("Unknown key found: '%s'", pair.first.Scalar());
success = false;
}
continue;
}
if (!decode(pair.second, *ensure(*it), dynamic, strict) && strict)
{
success = false;
}
}
break;
return success;
}
case type::set:
{
@@ -423,7 +516,10 @@ void cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic)
if (YAML::convert<decltype(values)>::decode(data, values))
{
rhs.from_list(std::move(values));
if (!rhs.from_list(std::move(values)) && strict)
{
return false;
}
}
break;
@@ -433,7 +529,8 @@ void cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic)
{
if (!data.IsMap())
{
return;
cfg_log.error("map node is not a map");
return false;
}
map_of_type<std::string> values;
@@ -450,22 +547,36 @@ void cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic)
}
case type::log:
{
if (data.IsScalar() || data.IsSequence())
if (!data.IsMap())
{
return; // ???
cfg_log.error("log node is not a map");
return false;
}
map_of_type<logs::level> values;
for (const auto& pair : data)
{
if (!pair.first.IsScalar() || !pair.second.IsScalar()) continue;
if (!pair.first.IsScalar() || !pair.second.IsScalar())
{
if (strict)
{
if (!pair.first.IsScalar())
cfg_log.error("Key in map is not a scalar");
else
cfg_log.error("Value in map is not a scalar. key='%s'", pair.first.Scalar());
return false;
}
continue;
}
u64 value;
if (cfg::try_to_enum_value(&value, &fmt_class_string<logs::level>::format, pair.second.Scalar()))
if (!cfg::try_to_enum_value(&value, &fmt_class_string<logs::level>::format, pair.second.Scalar(), pair.first.Scalar()) && strict)
{
values.emplace(pair.first.Scalar(), static_cast<logs::level>(static_cast<int>(value)));
return false;
}
values.emplace(pair.first.Scalar(), static_cast<logs::level>(static_cast<int>(value)));
}
static_cast<log_entry&>(rhs).set_map(std::move(values));
@@ -475,20 +586,43 @@ void cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic)
{
if (!data.IsMap())
{
return; // ???
cfg_log.error("device node is not a map");
return false;
}
map_of_type<device_info> values;
for (const auto& pair : data)
{
if (!pair.first.IsScalar() || !pair.second.IsMap()) continue;
if (!pair.first.IsScalar() || !pair.second.IsMap())
{
if (strict)
{
if (!pair.first.IsScalar())
cfg_log.error("Key in device map is not a scalar");
else
cfg_log.error("Value in device map is not a map. key='%s'", pair.first.Scalar());
return false;
}
continue;
}
device_info info{};
for (const auto& key_value : pair.second)
{
if (!key_value.first.IsScalar() || !key_value.second.IsScalar()) continue;
if (!key_value.first.IsScalar() || !key_value.second.IsScalar())
{
if (strict)
{
if (!key_value.first.IsScalar())
cfg_log.error("Key in device info map is not a scalar");
else
cfg_log.error("Value in device map is not a scalar. key='%s'", key_value.first.Scalar());
return false;
}
continue;
}
if (key_value.first.Scalar() == "Path")
info.path = key_value.second.Scalar();
@@ -515,12 +649,17 @@ void cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic)
if (YAML::convert<std::string>::decode(data, value))
{
rhs.from_string(value, dynamic);
if (!rhs.from_string(value, dynamic) && strict)
{
return false;
}
}
break; // ???
}
}
return true;
}
std::string cfg::node::to_string() const
@@ -537,8 +676,7 @@ bool cfg::node::from_string(std::string_view value, bool dynamic)
if (error.empty())
{
cfg::decode(result, *this, dynamic);
return true;
return cfg::decode(result, *this, dynamic, false);
}
cfg_log.error("Failed to load node: %s", error);
@@ -553,19 +691,25 @@ void cfg::node::from_default()
}
}
void cfg::_bool::from_default()
void cfg::node::restore_defaults()
{
m_value = def;
for (auto& node : m_nodes)
{
node->restore_defaults();
}
}
void cfg::string::from_default()
bool cfg::node::validate(std::string_view value)
{
m_value = def;
}
auto [result, error] = yaml_load(std::string(value));
void cfg::set_entry::from_default()
{
m_set = {};
if (error.empty())
{
return cfg::decode(result, *this, false, true);
}
cfg_log.error("Failed to load node: %s", error);
return false;
}
std::string cfg::map_entry::get_value(std::string_view key)
+188 -18
View File
@@ -25,11 +25,14 @@ namespace cfg
std::vector<std::string> make_float_range(f64 min, f64 max);
// Internal hack
bool try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) func, std::string_view);
bool try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) func, std::string_view value, std::string_view name = {});
// Internal hack
std::vector<std::string> try_to_enum_list(decltype(&fmt_class_string<int>::format) func);
// Internal hack
size_t try_to_enum_size(decltype(&fmt_class_string<int>::format) func);
// Config tree entry type.
enum class type : unsigned
{
@@ -38,6 +41,7 @@ namespace cfg
_enum, // cfg::_enum type
_int, // cfg::_int type
uint, // cfg::uint type
uint128, // cfg::uint128 type
string, // cfg::string type
set, // cfg::set_entry type
map, // cfg::map_entry type
@@ -90,6 +94,9 @@ namespace cfg
// Reset defaults
virtual void from_default() = 0;
// Restore default members
virtual void restore_defaults() = 0;
// Convert to string (optional)
virtual std::string to_string() const
{
@@ -103,7 +110,7 @@ namespace cfg
}
// Try to convert from string (optional)
virtual bool from_string(std::string_view, bool /*dynamic*/ = false);
virtual bool from_string(std::string_view value, bool dynamic = false);
// Get string list (optional)
virtual std::vector<std::string> to_list() const
@@ -151,11 +158,18 @@ namespace cfg
// Set default values
void from_default() override;
// Restore default members
void restore_defaults() override;
// Try to convert from string and validate
bool validate(std::string_view value);
};
class _bool final : public _base
{
atomic_t<bool> m_value;
bool original_def;
public:
bool def;
@@ -163,6 +177,7 @@ namespace cfg
_bool(node* owner, std::string name, bool def = false, bool dynamic = false)
: _base(type::_bool, owner, std::move(name), dynamic)
, m_value(def)
, original_def(def)
, def(def)
{
}
@@ -177,7 +192,15 @@ namespace cfg
return m_value;
}
void from_default() override;
void from_default() override
{
m_value = def;
}
void restore_defaults() override
{
def = original_def;
}
std::string to_string() const override
{
@@ -220,14 +243,16 @@ namespace cfg
class _enum : public _base
{
atomic_t<T> m_value;
T original_def;
public:
const T def;
T def;
_enum(node* owner, const std::string& name, T value = {}, bool dynamic = false)
_enum(node* owner, const std::string& name, T def = {}, bool dynamic = false)
: _base(type::_enum, owner, name, dynamic)
, m_value(value)
, def(value)
, m_value(def)
, original_def(def)
, def(def)
{
}
@@ -256,6 +281,11 @@ namespace cfg
m_value = def;
}
void restore_defaults() override
{
def = original_def;
}
std::string to_string() const override
{
std::string result;
@@ -274,7 +304,7 @@ namespace cfg
{
u64 result;
if (try_to_enum_value(&result, &fmt_class_string<T>::format, value))
if (try_to_enum_value(&result, &fmt_class_string<T>::format, value, m_name))
{
// No narrowing check, it's hard to do right there
m_value = static_cast<T>(static_cast<std::underlying_type_t<T>>(result));
@@ -288,6 +318,11 @@ namespace cfg
{
return try_to_enum_list(&fmt_class_string<T>::format);
}
size_t size() const
{
return try_to_enum_size(&fmt_class_string<T>::format);
}
};
// Signed 32/64-bit integer entry with custom Min/Max range.
@@ -300,6 +335,7 @@ namespace cfg
using int_type = std::conditional_t<Min >= s32{smin} && Max <= s32{smax}, s32, s64>;
atomic_t<int_type> m_value;
int_type original_def;
public:
int_type def;
@@ -311,6 +347,7 @@ namespace cfg
_int(node* owner, const std::string& name, int_type def = std::min<int_type>(Max, std::max<int_type>(Min, 0)), bool dynamic = false)
: _base(type::_int, owner, name, dynamic)
, m_value(def)
, original_def(def)
, def(def)
{
}
@@ -330,6 +367,11 @@ namespace cfg
m_value = def;
}
void restore_defaults() override
{
def = original_def;
}
std::string to_string() const override
{
return std::to_string(m_value);
@@ -343,7 +385,7 @@ namespace cfg
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
{
s64 result;
if (try_to_int64(&result, value, Min, Max))
if (try_to_int64(&result, value, Min, Max, m_name))
{
m_value = static_cast<int_type>(result);
return true;
@@ -354,7 +396,7 @@ namespace cfg
void set(const s64& value)
{
ensure(value >= Min && value <= Max);
if (value < Min || value > Max) fmt::throw_exception("'%s': value %d out of bounds (min=%d, max=%d)", m_name, value, Min, Max);
m_value = static_cast<int_type>(value);
}
@@ -372,6 +414,7 @@ namespace cfg
using float_type = f64;
atomic_t<float_type> m_value;
float_type original_def;
public:
float_type def;
@@ -383,6 +426,7 @@ namespace cfg
_float(node* owner, const std::string& name, float_type def = std::min<float_type>(Max, std::max<float_type>(Min, 0)), bool dynamic = false)
: _base(type::_int, owner, name, dynamic)
, m_value(def)
, original_def(def)
, def(def)
{
}
@@ -402,10 +446,15 @@ namespace cfg
m_value = def;
}
void restore_defaults() override
{
def = original_def;
}
std::string to_string() const override
{
std::string result;
if (try_to_string(&result, m_value))
if (try_to_string(&result, m_value, m_name))
{
return result;
}
@@ -416,7 +465,7 @@ namespace cfg
std::string def_to_string() const override
{
std::string result;
if (try_to_string(&result, def))
if (try_to_string(&result, def, m_name))
{
return result;
}
@@ -427,7 +476,7 @@ namespace cfg
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
{
f64 result;
if (try_to_float(&result, value, Min, Max))
if (try_to_float(&result, value, Min, Max, m_name))
{
m_value = static_cast<float_type>(result);
return true;
@@ -438,7 +487,7 @@ namespace cfg
void set(const f64& value)
{
ensure(value >= Min && value <= Max);
if (value < Min || value > Max) fmt::throw_exception("'%s': value %d out of bounds (min=%d, max=%d)", m_name, value, Min, Max);
m_value = static_cast<float_type>(value);
}
@@ -464,6 +513,7 @@ namespace cfg
using int_type = std::conditional_t<Max <= u32{umax}, u32, u64>;
atomic_t<int_type> m_value;
int_type original_def;
public:
int_type def;
@@ -475,6 +525,7 @@ namespace cfg
uint(node* owner, const std::string& name, int_type def = std::max<int_type>(Min, 0), bool dynamic = false)
: _base(type::uint, owner, name, dynamic)
, m_value(def)
, original_def(def)
, def(def)
{
}
@@ -494,6 +545,11 @@ namespace cfg
m_value = def;
}
void restore_defaults() override
{
def = original_def;
}
std::string to_string() const override
{
return std::to_string(m_value);
@@ -507,7 +563,7 @@ namespace cfg
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
{
u64 result;
if (try_to_uint64(&result, value, Min, Max))
if (try_to_uint64(&result, value, Min, Max, m_name))
{
m_value = static_cast<int_type>(result);
return true;
@@ -518,7 +574,7 @@ namespace cfg
void set(const u64& value)
{
ensure(value >= Min && value <= Max);
if (value < Min || value > Max) fmt::throw_exception("'%s': value %d out of bounds (min=%d, max=%d)", m_name, value, Min, Max);
m_value = static_cast<int_type>(value);
}
@@ -534,10 +590,91 @@ namespace cfg
// Alias for 64 bit int
using uint64 = uint<0, u64{umax}>;
// Unsigned 128-bit integer entry.
class uint128 final : public _base
{
using int_type = u128;
atomic_t<int_type> m_value{};
int_type original_def = 0;
public:
int_type def;
uint128(node* owner, const std::string& name, int_type def = 0, bool dynamic = false)
: _base(type::uint128, owner, name, dynamic)
, m_value(def)
, original_def(def)
, def(def)
{
}
operator int_type() const
{
return m_value;
}
operator ullong() const
{
return static_cast<ullong>(m_value.load());
}
int_type get() const
{
return m_value;
}
void from_default() override
{
m_value = def;
}
void restore_defaults() override
{
def = original_def;
}
static std::string to_string(u128 value) noexcept;
std::string to_string() const override
{
return to_string(m_value.load());
}
std::string def_to_string() const override
{
return to_string(def);
}
bool from_string(std::string_view value, bool /*dynamic*/ = false) override
{
u128 result;
if (try_to_uint128(&result, value, m_name))
{
m_value = result;
return true;
}
return false;
}
void set(u128 value)
{
m_value = value;
}
std::vector<std::string> to_list() const override
{
// Should not be used
return make_uint_range(0, 1);
}
};
// Simple string entry with mutex
class string : public _base
{
atomic_ptr<std::string> m_value;
std::string original_def;
public:
std::string def;
@@ -545,6 +682,7 @@ namespace cfg
string(node* owner, std::string name, std::string def = {}, bool dynamic = false)
: _base(type::string, owner, std::move(name), dynamic)
, m_value(def)
, original_def(def)
, def(std::move(def))
{
}
@@ -554,7 +692,15 @@ namespace cfg
return *m_value.load().get();
}
void from_default() override;
void from_default() override
{
m_value = def;
}
void restore_defaults() override
{
def = original_def;
}
std::string to_string() const override
{
@@ -571,6 +717,11 @@ namespace cfg
m_value = std::string(value);
return true;
}
void set(std::string_view value)
{
m_value = std::string(value);
}
};
// Simple set entry (TODO: template for various types)
@@ -595,7 +746,14 @@ namespace cfg
m_set = std::move(set);
}
void from_default() override;
void from_default() override
{
m_set = {};
}
void restore_defaults() override
{
}
std::vector<std::string> to_list() const override
{
@@ -636,6 +794,10 @@ namespace cfg
void erase(std::string_view key);
void from_default() override;
void restore_defaults() override
{
}
};
class node_map_entry final : public map_entry
@@ -665,6 +827,10 @@ namespace cfg
void set_map(map_of_type<logs::level>&& map);
void from_default() override;
void restore_defaults() override
{
}
};
struct device_info
@@ -702,5 +868,9 @@ namespace cfg
void set_map(map_of_type<device_info>&& map);
void from_default() override;
void restore_defaults() override
{
}
};
}
+162 -14
View File
@@ -38,6 +38,17 @@ static std::unique_ptr<wchar_t[]> to_wchar(std::string_view source)
// Buffer for max possible output length
std::unique_ptr<wchar_t[]> buffer(new wchar_t[buf_size + 8 + 32768]);
// If path points to an optical raw device, copy it AS IS
if (fs::is_optical_raw_device(std::string(source)))
{
ensure(MultiByteToWideChar(CP_UTF8, 0, source.data(), size, buffer.get() + 32768, size)); // "to_wchar"
// Canonicalize wide path (replace '/', ".", "..", \\ repetitions, etc)
ensure(GetFullPathNameW(buffer.get() + 32768, 32768, buffer.get(), nullptr) - 1 < 32768 - 1); // "to_wchar"
return buffer;
}
// Prepend wide path prefix (4 characters)
std::memcpy(buffer.get() + 32768, L"\\\\\?\\", 4 * sizeof(wchar_t));
@@ -117,6 +128,7 @@ static fs::error to_error(DWORD e)
case ERROR_NEGATIVE_SEEK: return fs::error::inval;
case ERROR_DIRECTORY: return fs::error::inval;
case ERROR_INVALID_NAME: return fs::error::inval;
case ERROR_INVALID_FUNCTION: return fs::error::inval;
case ERROR_SHARING_VIOLATION: return fs::error::acces;
case ERROR_DIR_NOT_EMPTY: return fs::error::notempty;
case ERROR_NOT_READY: return fs::error::noent;
@@ -165,6 +177,7 @@ static fs::error to_error(int e)
case ENOTEMPTY: return fs::error::notempty;
case EROFS: return fs::error::readonly;
case EISDIR: return fs::error::isdir;
case ENOTDIR: return fs::error::notdir;
case ENOSPC: return fs::error::nospace;
case EXDEV: return fs::error::xdev;
default: return fs::error::unknown;
@@ -398,12 +411,12 @@ namespace fs
class windows_file final : public file_base
{
HANDLE m_handle;
atomic_t<u64> m_pos;
bool m_raw_device;
atomic_t<u64> m_pos {0};
public:
windows_file(HANDLE handle)
: m_handle(handle)
, m_pos(0)
windows_file(HANDLE handle, bool raw_device = false)
: m_handle(handle), m_raw_device(raw_device)
{
}
@@ -417,10 +430,10 @@ namespace fs
stat_t get_stat() override
{
FILE_BASIC_INFO basic_info;
FILE_BASIC_INFO basic_info {};
ensure(GetFileInformationByHandleEx(m_handle, FileBasicInfo, &basic_info, sizeof(FILE_BASIC_INFO))); // "file::stat"
stat_t info;
stat_t info {};
info.is_directory = (basic_info.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
info.is_writable = (basic_info.FileAttributes & FILE_ATTRIBUTE_READONLY) == 0;
info.size = this->size();
@@ -441,7 +454,7 @@ namespace fs
bool trunc(u64 length) override
{
FILE_END_OF_FILE_INFO _eof;
FILE_END_OF_FILE_INFO _eof {};
_eof.EndOfFile.QuadPart = length;
if (!SetFileInformationByHandle(m_handle, FileEndOfFileInfo, &_eof, sizeof(_eof)))
@@ -563,10 +576,20 @@ namespace fs
u64 size() override
{
LARGE_INTEGER size;
ensure(GetFileSizeEx(m_handle, &size)); // "file::size"
if (!m_raw_device)
{
// NOTE: this can fail if we access a mounted empty drive (e.g. after unmounting an iso).
LARGE_INTEGER size;
return size.QuadPart;
ensure(GetFileSizeEx(m_handle, &size)); // "file::size"
return size.QuadPart;
}
// For a raw device, we need to use DeviceIoControl.
DISK_GEOMETRY_EX geometry;
ensure(DeviceIoControl(m_handle, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, nullptr, 0, &geometry, sizeof(geometry), nullptr, nullptr));
return geometry.DiskSize.QuadPart;
}
native_handle get_handle() override
@@ -579,12 +602,12 @@ namespace fs
file_id id{"windows_file"};
id.data.resize(sizeof(FILE_ID_INFO));
FILE_ID_INFO info;
FILE_ID_INFO info {};
if (!GetFileInformationByHandleEx(m_handle, FileIdInfo, &info, sizeof(info)))
{
// Try GetFileInformationByHandle as a fallback
BY_HANDLE_FILE_INFORMATION info2;
BY_HANDLE_FILE_INFORMATION info2{};
ensure(GetFileInformationByHandle(m_handle, &info2));
info = {};
@@ -625,7 +648,7 @@ namespace fs
struct ::stat file_info;
ensure(::fstat(m_fd, &file_info) == 0); // "file::stat"
stat_t info;
stat_t info {};
info.is_directory = S_ISDIR(file_info.st_mode);
info.is_writable = file_info.st_mode & 0200; // HACK: approximation
info.size = file_info.st_size;
@@ -901,6 +924,22 @@ std::string_view fs::get_parent_dir_view(std::string_view path, u32 parent_level
return result;
}
std::string fs::get_path_if_dir(const std::string& path)
{
if (path.empty() || !fs::is_dir(path))
{
return {};
}
// If delimiters are already present at the end of the string then nothing else to do
if (usz sz = path.find_last_of(delim); sz != umax && (sz + 1) == path.size())
{
return path;
}
return path + '/';
}
bool fs::get_stat(const std::string& path, stat_t& info)
{
// Ensure consistent information on failure
@@ -1073,6 +1112,55 @@ bool fs::is_symlink(const std::string& path)
return true;
}
bool fs::is_optical_raw_device([[maybe_unused]] const std::string& path)
{
#ifdef _WIN32
if (path.starts_with("\\\\.\\"))
{
return true;
}
#endif
return false;
}
bool fs::get_optical_raw_device(const std::string& path, std::string* raw_device)
{
if (fs::is_optical_raw_device(path))
{
if (raw_device)
{
*raw_device = path;
}
return true;
}
#ifdef _WIN32
// Skip a useless check to detect an optical raw device if navigating on subfolders (e.g. C:\subfolder_1\subfolder_2\),
// it means we are on a HDD/SSD. A path for an optical drive should include only the drive letter (e.g. E:\)
const size_t drive_delim_pos = path.find_first_of(":");
if (drive_delim_pos != 1 || drive_delim_pos != path.find_last_not_of(delim))
{
return false;
}
const std::string drive_letter = path.substr(0, drive_delim_pos + 1); // e.g. "E:"
const std::string drive_path = drive_letter + "\\"; // e.g. "E:\"
if (GetDriveTypeA(drive_path.c_str()) == DRIVE_CDROM)
{
if (raw_device)
{
*raw_device = "\\\\.\\" + drive_letter;
}
return true;
}
#endif
return false;
}
bool fs::statfs(const std::string& path, fs::device_stat& info)
{
if (auto device = get_virtual_device(path))
@@ -1640,6 +1728,65 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
return;
}
// If path points to an optical raw device, complete the file opening
// (the following GetFileInformationByHandle() would always fail on a raw device).
if (is_optical_raw_device(path))
{
DISK_GEOMETRY_EX geometry;
// Try to retrieve information on content. If it fails, no disc is probably mounted so abort the file opening
if (!DeviceIoControl(handle, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, nullptr, 0, &geometry, sizeof(geometry), nullptr, nullptr))
{
const DWORD last_error = GetLastError();
CloseHandle(handle);
g_tls_error = to_error(last_error);
return;
}
m_file = std::make_unique<windows_file>(handle, true);
return;
}
// Check if the handle is actually valid.
// This can fail on empty mounted drives (e.g. with ERROR_NOT_READY or ERROR_INVALID_FUNCTION).
BY_HANDLE_FILE_INFORMATION info{};
if (!GetFileInformationByHandle(handle, &info))
{
const DWORD last_error = GetLastError();
CloseHandle(handle);
if (last_error == ERROR_INVALID_FUNCTION)
{
g_tls_error = fs::error::isdir;
return;
}
g_tls_error = to_error(last_error);
return;
}
if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
CloseHandle(handle);
g_tls_error = fs::error::isdir;
return;
}
if (info.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM)
{
CloseHandle(handle);
g_tls_error = fs::error::acces;
return;
}
if ((mode & fs::write) && (info.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
{
CloseHandle(handle);
g_tls_error = fs::error::readonly;
return;
}
m_file = std::make_unique<windows_file>(handle);
#else
int flags = O_CLOEXEC; // Ensures all files are closed on execl for auto updater
@@ -2579,7 +2726,7 @@ bool fs::pending_file::commit(bool overwrite)
while (file_handle != INVALID_HANDLE_VALUE)
{
// Get file ID (used to check for hardlinks)
BY_HANDLE_FILE_INFORMATION file_info;
BY_HANDLE_FILE_INFORMATION file_info{};
if (!GetFileInformationByHandle(file_handle, &file_info) || file_info.nNumberOfLinks == 1)
{
@@ -2777,6 +2924,7 @@ void fmt_class_string<fs::error>::format(std::string& out, u64 arg)
case fs::error::notempty: return "Not empty";
case fs::error::readonly: return "Read only";
case fs::error::isdir: return "Is a directory";
case fs::error::notdir: return "Not a directory";
case fs::error::toolong: return "Path too long";
case fs::error::nospace: return "Not enough space on the device";
case fs::error::xdev: return "Device mismatch";
+20 -8
View File
@@ -66,13 +66,13 @@ namespace fs
// File attributes (TODO)
struct stat_t
{
bool is_directory;
bool is_symlink;
bool is_writable;
u64 size;
s64 atime;
s64 mtime;
s64 ctime;
bool is_directory = false;
bool is_symlink = false;
bool is_writable = false;
u64 size = 0;
s64 atime = 0;
s64 mtime = 0;
s64 ctime = 0;
using enable_bitcopy = std::true_type;
@@ -155,7 +155,7 @@ namespace fs
// Virtual device
struct device_base
{
const std::string fs_prefix;
std::string fs_prefix;
device_base();
virtual ~device_base();
@@ -195,6 +195,9 @@ namespace fs
return std::string{get_parent_dir_view(path, parent_level)};
}
// Return "path" plus an ending delimiter (if missing) if "path" is an existing directory. Otherwise, an empty string
std::string get_path_if_dir(const std::string& path);
// Get file information
bool get_stat(const std::string& path, stat_t& info);
@@ -210,6 +213,12 @@ namespace fs
// Check whether the path points to an existing symlink
bool is_symlink(const std::string& path);
// Check whether the path points to a raw device
bool is_optical_raw_device(const std::string& path);
// Check whether the path points to an optical drive. If so, provide the raw device in "raw_device" if requested
bool get_optical_raw_device(const std::string& path, std::string* raw_device = nullptr);
// Get filesystem information
bool statfs(const std::string& path, device_stat& info);
@@ -254,6 +263,8 @@ namespace fs
// Open file with specified mode
explicit file(const std::string& path, bs_t<open_mode> mode = ::fs::read);
file(std::unique_ptr<file_base>&& ptr) : m_file(std::move(ptr)) {}
static file from_native_handle(native_handle handle);
// Open memory for read
@@ -678,6 +689,7 @@ namespace fs
notempty,
readonly,
isdir,
notdir,
toolong,
nospace,
xdev,
+13
View File
@@ -493,6 +493,10 @@ inline FT build_function_asm(std::string_view name, F&& builder, ::jit_runtime*
return reinterpret_cast<FT>(uptr(result));
}
#if defined(__INTELLISENSE__) && !defined(LLVM_AVAILABLE)
#define LLVM_AVAILABLE
#endif
#ifdef LLVM_AVAILABLE
namespace llvm
@@ -539,9 +543,15 @@ public:
// Add module (path to obj cache dir)
void add(std::unique_ptr<llvm::Module> _module, const std::string& path);
// Returns false after LLVM fatal recovery. The compiler must be discarded.
bool try_add(std::unique_ptr<llvm::Module> _module, const std::string& path, std::string& error);
// Add module (not cached)
void add(std::unique_ptr<llvm::Module> _module);
// Returns false after LLVM fatal recovery. The compiler must be discarded.
bool try_add(std::unique_ptr<llvm::Module> _module, std::string& error);
// Add object (path to obj file)
bool add(const std::string& path);
@@ -554,6 +564,9 @@ public:
// Finalize
void fin();
// Returns false after LLVM fatal recovery. The compiler must be discarded.
bool try_fin(std::string& error);
// Get compiled function address
u64 get(const std::string& name);
+4
View File
@@ -14,6 +14,10 @@
#define CAN_OVERCOMMIT
#endif
#if defined(__APPLE__)
#include <mutex>
#endif
LOG_CHANNEL(jit_log, "JIT");
void jit_announce(uptr func, usz size, std::string_view name)
+139
View File
@@ -12,6 +12,10 @@
#include <charconv>
#if defined(__APPLE__)
#include <pthread.h>
#endif
LOG_CHANNEL(jit_log, "JIT");
#ifdef LLVM_AVAILABLE
@@ -50,6 +54,44 @@ LOG_CHANNEL(jit_log, "JIT");
#include "Emu/CPU/Backends/AArch64/AArch64Common.h"
#endif
namespace
{
thread_local std::string* g_llvm_fatal_message = nullptr;
template <typename F>
bool run_recoverable_llvm(F&& func, std::string& error)
{
error.clear();
// Run LLVM codegen in a disposable thread. If LLVM invokes the fatal
// handler, only this helper thread exits.
named_thread worker("LLVM JIT", [&]()
{
#if defined(__APPLE__)
pthread_jit_write_protect_np(false);
#endif
g_llvm_fatal_message = &error;
std::forward<F>(func)();
g_llvm_fatal_message = nullptr;
#if defined(__APPLE__)
pthread_jit_write_protect_np(true);
#endif
});
worker();
const bool result = static_cast<thread_state>(worker) == thread_state::finished;
if (!result && error.empty())
{
error = "LLVM crash recovery invoked";
}
return result;
}
}
const bool jit_initialize = []() -> bool
{
llvm::InitializeNativeTarget();
@@ -649,6 +691,13 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
llvm::install_fatal_error_handler([](void*, const char* msg, bool)
{
const std::string_view out = msg ? msg : "";
if (g_llvm_fatal_message)
{
*g_llvm_fatal_message = out;
thread_ctrl::silent_exit();
}
fmt::throw_exception("LLVM Emergency Exit Invoked: '%s'", out);
}, nullptr);
@@ -658,7 +707,11 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
std::string result;
auto null_mod = std::make_unique<llvm::Module> ("null_", *m_context);
#if LLVM_VERSION_MAJOR >= 21 && (LLVM_VERSION_MINOR >= 1 || LLVM_VERSION_MAJOR >= 22)
null_mod->setTargetTriple(llvm::Triple(jit_compiler::triple1()));
#else
null_mod->setTargetTriple(jit_compiler::triple1());
#endif
std::unique_ptr<llvm::RTDyldMemoryManager> mem;
@@ -672,7 +725,11 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
else
{
mem = std::make_unique<MemoryManager2>(std::move(symbols_cement));
#if LLVM_VERSION_MAJOR >= 21 && (LLVM_VERSION_MINOR >= 1 || LLVM_VERSION_MAJOR >= 22)
null_mod->setTargetTriple(llvm::Triple(jit_compiler::triple2()));
#else
null_mod->setTargetTriple(jit_compiler::triple2());
#endif
}
}
else
@@ -680,6 +737,30 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
mem = std::make_unique<MemoryManager1>(std::move(symbols_cement));
}
std::vector<std::string> attributes;
#if defined(ARCH_ARM64)
if (utils::has_sha3())
attributes.push_back("+sha3");
else
attributes.push_back("-sha3");
if (utils::has_dotprod())
attributes.push_back("+dotprod");
else
attributes.push_back("-dotprod");
if (utils::has_sve())
attributes.push_back("+sve");
else
attributes.push_back("-sve");
if (utils::has_sve2())
attributes.push_back("+sve2");
else
attributes.push_back("-sve2");
#endif
{
m_engine.reset(llvm::EngineBuilder(std::move(null_mod))
.setErrorStr(&result)
@@ -691,6 +772,7 @@ jit_compiler::jit_compiler(const std::unordered_map<std::string, u64>& _link, co
//.setCodeModel(llvm::CodeModel::Large)
#endif
.setRelocationModel(llvm::Reloc::Model::PIC_)
.setMAttrs(attributes)
.setMCPU(m_cpu)
.create());
}
@@ -755,6 +837,33 @@ void jit_compiler::add(std::unique_ptr<llvm::Module> _module, const std::string&
}
}
bool jit_compiler::try_add(std::unique_ptr<llvm::Module> _module, const std::string& path, std::string& error)
{
ObjectCache cache{path, this};
m_engine->setObjectCache(&cache);
const auto ptr = _module.get();
m_engine->addModule(std::move(_module));
if (!run_recoverable_llvm([&]()
{
m_engine->generateCodeForModule(ptr);
}, error))
{
return false;
}
m_engine->setObjectCache(nullptr);
for (auto& func : ptr->functions())
{
// Delete IR to lower memory consumption
func.deleteBody();
}
return true;
}
void jit_compiler::add(std::unique_ptr<llvm::Module> _module)
{
const auto ptr = _module.get();
@@ -768,6 +877,28 @@ void jit_compiler::add(std::unique_ptr<llvm::Module> _module)
}
}
bool jit_compiler::try_add(std::unique_ptr<llvm::Module> _module, std::string& error)
{
const auto ptr = _module.get();
m_engine->addModule(std::move(_module));
if (!run_recoverable_llvm([&]()
{
m_engine->generateCodeForModule(ptr);
}, error))
{
return false;
}
for (auto& func : ptr->functions())
{
// Delete IR to lower memory consumption
func.deleteBody();
}
return true;
}
bool jit_compiler::add(const std::string& path)
{
auto cache = ObjectCache::load(path);
@@ -819,6 +950,14 @@ void jit_compiler::fin()
m_engine->finalizeObject();
}
bool jit_compiler::try_fin(std::string& error)
{
return run_recoverable_llvm([&]()
{
m_engine->finalizeObject();
}, error);
}
u64 jit_compiler::get(const std::string& name)
{
return m_engine->getGlobalValueAddress(name);
+85 -5
View File
@@ -16,12 +16,12 @@
#include <errno.h>
#endif
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
#elif defined(__clang__)
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(_MSC_VER)
#pragma warning(push)
#pragma warning(disable : 4996)
#else
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
@@ -83,7 +83,8 @@ std::string fmt::win_error_to_string(unsigned long error, void* module_handle)
if (FormatMessageW((module_handle ? FORMAT_MESSAGE_FROM_HMODULE : FORMAT_MESSAGE_FROM_SYSTEM) | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS,
module_handle, error, 0, reinterpret_cast<LPWSTR>(&message_buffer), 0, nullptr))
{
message = fmt::format("%s (0x%x)", fmt::trim(wchar_to_utf8(message_buffer), " \t\n\r\f\v"), error);
const std::string utf8 = wchar_to_utf8(message_buffer);
message = fmt::format("%s (0x%x)", fmt::trim_sv(utf8, " \t\n\r\f\v"), error);
}
else
{
@@ -823,6 +824,50 @@ std::vector<std::string> fmt::split(std::string_view source, std::initializer_li
return result;
}
std::vector<std::string_view> fmt::split_sv(std::string_view source, std::initializer_list<std::string_view> separators, bool is_skip_empty)
{
std::vector<std::string_view> result;
for (usz index = 0; index < source.size();)
{
usz pos = -1;
usz sep_size = 0;
for (auto& separator : separators)
{
if (usz pos0 = source.find(separator, index); pos0 < pos)
{
pos = pos0;
sep_size = separator.size();
}
}
if (!sep_size)
{
result.emplace_back(&source[index], source.size() - index);
return result;
}
std::string_view piece = {&source[index], pos - index};
index = pos + sep_size;
if (piece.empty() && is_skip_empty)
{
continue;
}
result.emplace_back(std::move(piece));
}
if (result.empty() && !is_skip_empty)
{
result.emplace_back();
}
return result;
}
std::string fmt::trim(const std::string& source, std::string_view values)
{
const usz begin = source.find_first_not_of(values);
@@ -838,6 +883,21 @@ std::string fmt::trim(const std::string& source, std::string_view values)
return source.substr(begin, end + 1 - begin);
}
std::string_view fmt::trim_sv(std::string_view source, std::string_view values)
{
const usz begin = source.find_first_not_of(values);
if (begin == source.npos)
return {};
const usz end = source.find_last_not_of(values);
if (end == source.npos)
return source.substr(begin);
return source.substr(begin, end + 1 - begin);
}
std::string fmt::trim_front(const std::string& source, std::string_view values)
{
const usz begin = source.find_first_not_of(values);
@@ -848,12 +908,32 @@ std::string fmt::trim_front(const std::string& source, std::string_view values)
return source.substr(begin);
}
std::string_view fmt::trim_front_sv(std::string_view source, std::string_view values)
{
const usz begin = source.find_first_not_of(values);
if (begin == source.npos)
return {};
return source.substr(begin);
}
void fmt::trim_back(std::string& source, std::string_view values)
{
const usz index = source.find_last_not_of(values);
source.resize(index + 1);
}
std::string_view fmt::trim_back_sv(std::string_view source, std::string_view values)
{
const usz index = source.find_last_not_of(values);
if (index == std::string_view::npos)
return {};
source.remove_suffix(source.size() - (index + 1));
return source;
}
std::string fmt::to_upper(std::string_view string)
{
std::string result;
+2 -2
View File
@@ -393,8 +393,8 @@ namespace fmt
raw_throw_exception(src_loc, reinterpret_cast<const char*>(fmt), type_info_v<Args...>, fmt_args_t<Args...>{fmt_unveil<Args>::get(args)...});
}
#ifndef _MSC_VER
[[noreturn]] ~throw_exception();
#if !defined(_MSC_VER) || defined(__clang__)
[[noreturn]] ~throw_exception() = default;
#endif
};
+52 -16
View File
@@ -13,26 +13,29 @@ std::string wchar_to_utf8(std::wstring_view src);
std::string utf16_to_utf8(std::u16string_view src);
std::u16string utf8_to_utf16(std::string_view src);
// Copy null-terminated string from a std::string or a char array to a char array with truncation
template <typename D, typename T>
// Copy null-terminated string from a std::basic_string or a char array to a char array with truncation
template <typename D, typename T> requires requires (D& d, T& t) { std::declval<decltype(&t[0])&>() = &d[0]; }
inline void strcpy_trunc(D&& dst, const T& src)
{
const usz count = std::size(src) >= std::size(dst) ? std::max<usz>(std::size(dst), 1) - 1 : std::size(src);
std::memcpy(std::data(dst), std::data(src), count);
std::memset(std::data(dst) + count, 0, std::size(dst) - count);
std::copy_n(std::data(src), count, std::data(dst));
std::fill_n(std::data(dst) + count, std::size(dst) - count, std::remove_cvref_t<decltype(dst[0])>{});
}
// Convert string to signed integer
bool try_to_int64(s64* out, std::string_view value, s64 min, s64 max);
bool try_to_int64(s64* out, std::string_view value, s64 min, s64 max, std::string_view name = {});
// Convert string to unsigned integer
bool try_to_uint64(u64* out, std::string_view value, u64 min, u64 max);
bool try_to_uint64(u64* out, std::string_view value, u64 min, u64 max, std::string_view name = {});
// Convert string to unsigned int128_t
bool try_to_uint128(u128* out, std::string_view value, std::string_view name = {});
// Convert string to float
bool try_to_float(f64* out, std::string_view value, f64 min, f64 max);
bool try_to_float(f64* out, std::string_view value, f64 min, f64 max, std::string_view name = {});
// Convert float to string locale independent
bool try_to_string(std::string* out, const f64& value);
bool try_to_string(std::string* out, f64 value, std::string_view name = {});
// Get the file extension of a file path ("png", "jpg", etc.)
std::string get_file_extension(const std::string& file_path);
@@ -136,57 +139,90 @@ namespace fmt
// Splits the string into a vector of strings using the separators. The vector may contain empty strings unless is_skip_empty is true.
std::vector<std::string> split(std::string_view source, std::initializer_list<std::string_view> separators, bool is_skip_empty = true);
// Splits the string_view into a vector of string_views using the separators. The vector may contain empty string_views unless is_skip_empty is true.
std::vector<std::string_view> split_sv(std::string_view source, std::initializer_list<std::string_view> separators, bool is_skip_empty = true);
// Removes all preceding and trailing characters specified by 'values' from 'source'.
std::string trim(const std::string& source, std::string_view values = " \t");
// Removes all preceding and trailing characters specified by 'values' from 'source' and returns the result.
std::string_view trim_sv(std::string_view source, std::string_view values = " \t");
// Removes all preceding characters specified by 'values' from 'source'.
std::string trim_front(const std::string& source, std::string_view values = " \t");
// Removes all preceding characters specified by 'values' from 'source' and returns the result.
std::string_view trim_front_sv(std::string_view source, std::string_view values = " \t");
// Removes all trailing characters specified by 'values' from 'source'.
void trim_back(std::string& source, std::string_view values = " \t");
// Removes all trailing characters specified by 'values' from 'source' and returns the result.
std::string_view trim_back_sv(std::string_view source, std::string_view values = " \t");
template <typename T>
std::string merge(const T& source, const std::string& separator)
std::string merge(const T& source, std::string_view separator)
{
if (source.empty())
{
return {};
}
usz total = (source.size() - 1) * separator.size();
for (const auto& s : source)
{
total += s.size();
}
std::string result;
result.reserve(total);
auto it = source.begin();
auto end = source.end();
for (--end; it != end; ++it)
{
result += std::string{*it} + separator;
result.append(*it);
if (!separator.empty())
result.append(separator);
}
return result + std::string{source.back()};
return result.append(*end);
}
template <typename T>
std::string merge(std::initializer_list<T> sources, const std::string& separator)
std::string merge(std::initializer_list<T> sources, std::string_view separator)
{
if (!sources.size())
{
return {};
}
usz total = (sources.size() - 1) * separator.size();
for (const auto& s : sources)
{
if (s.empty()) continue;
total += s.size() + (s.size() - 1) * separator.size();
}
std::string result;
result.reserve(total);
bool first = true;
for (const auto& v : sources)
{
if (first)
{
result = fmt::merge(v, separator);
first = false;
first = false;
}
else
else if (!separator.empty())
{
result += separator + fmt::merge(v, separator);
result.append(separator);
}
result.append(fmt::merge(v, separator));
}
return result;
+240 -35
View File
@@ -8,19 +8,24 @@
#include "Emu/RSX/RSXThread.h"
#include "Thread.h"
#include "Utilities/JIT.h"
#include <thread>
#include <cfenv>
#ifdef ARCH_ARM64
#include "Emu/CPU/Backends/AArch64/AArch64Signal.h"
#endif
#ifdef __cpp_lib_stacktrace
#include "rpcs3_version.h"
#include <stacktrace>
#endif
#ifdef _WIN32
#include <Windows.h>
#include <Psapi.h>
#include <process.h>
#include <sysinfoapi.h>
#include "stack_trace.h"
#include "util/dyn_lib.hpp"
DYNAMIC_IMPORT_RENAME("Kernel32.dll", SetThreadDescriptionImport, "SetThreadDescription", HRESULT(HANDLE hThread, PCWSTR lpThreadDescription));
@@ -103,9 +108,14 @@ thread_local u64 g_tls_fault_rsx = 0;
thread_local u64 g_tls_fault_spu = 0;
thread_local u64 g_tls_wait_time = 0;
thread_local u64 g_tls_wait_fail = 0;
thread_local bool g_tls_access_violation_recovered = false;
thread_local u64 g_tls_access_violation_recovered = umax;
extern thread_local std::string(*g_tls_log_prefix)();
namespace stx
{
atomic_t<u32> g_launch_retainer{0};
}
// Report error and call std::abort(), defined in main.cpp
[[noreturn]] void report_fatal_error(std::string_view text, bool is_html = false, bool include_help_text = true);
@@ -1260,7 +1270,7 @@ namespace rsx
extern std::function<bool(u32 addr, bool is_writing)> g_access_violation_handler;
}
bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noexcept
bool handle_access_violation(u32 addr, bool is_writing, bool is_exec, ucontext_t* context) noexcept
{
g_tls_fault_all++;
@@ -1296,7 +1306,7 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
}
} spu_protection{cpu};
if (addr < RAW_SPU_BASE_ADDR && vm::check_addr(addr) && rsx::g_access_violation_handler)
if (!is_exec && addr < RAW_SPU_BASE_ADDR && vm::check_addr(addr) && rsx::g_access_violation_handler)
{
bool state_changed = false;
@@ -1362,7 +1372,7 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
{
auto thread = idm::get_unlocked<named_thread<spu_thread>>(spu_thread::find_raw_spu((addr - RAW_SPU_BASE_ADDR) / RAW_SPU_OFFSET));
if (!thread)
if (!thread || is_exec)
{
break;
}
@@ -1374,11 +1384,7 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
return false;
}
if (a_size != 4)
{
// Might be unimplemented, such as writing MFC proxy EAL+EAH using 64-bit store
break;
}
bool handled = true;
switch (op)
{
@@ -1388,14 +1394,37 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
case X64OP_LOAD_TEST:
{
u32 value;
if (is_writing || !thread->read_reg(addr, value))
const u32 addr_aligned = addr & -4;
if (addr % 4 + a_size > 4)
{
handled = false;
break;
}
if (is_writing || !thread->read_reg(addr_aligned, value))
{
return false;
}
// Adjust value for 8-bit and 16-bit reads
value >>= ((4 - a_size) * 8) - ((addr % 4) * 8);
value &= a_size == 4 ? u32{umax} : ((1u << (a_size * 8)) - 1);
if (op != X64OP_LOAD_BE)
{
value = stx::se_storage<u32>::swap(value);
if (a_size == 4)
{
value = stx::se_storage<u32>::swap(value);
}
else if (a_size == 2)
{
value = stx::se_storage<u16>::swap(value);
}
else
{
ensure(a_size == 1);
}
}
if (op == X64OP_LOAD_CMP)
@@ -1430,12 +1459,35 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
case X64OP_BEXTR:
{
u32 value;
if (is_writing || !thread->read_reg(addr, value))
const u32 addr_aligned = addr & -4;
if (addr % 4 + a_size > 4)
{
handled = false;
break;
}
if (is_writing || !thread->read_reg(addr_aligned, value))
{
return false;
}
value = stx::se_storage<u32>::swap(value);
// Adjust value for 8-bit and 16-bit reads
value >>= ((4 - a_size) * 8) - ((addr % 4) * 8);
value &= a_size == 4 ? u32{umax} : ((1u << (a_size * 8)) - 1);
if (a_size == 4)
{
value = stx::se_storage<u32>::swap(value);
}
else if (a_size == 2)
{
value = stx::se_storage<u16>::swap(value);
}
else
{
ensure(a_size == 1);
}
u64 ctrl;
if (!get_x64_reg_value(context, s_tls_reg3, d_size, i_size, ctrl))
@@ -1461,6 +1513,13 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
case X64OP_STORE:
case X64OP_STORE_BE:
{
if (a_size != 4)
{
// Might be unimplemented, such as writing MFC proxy EAL+EAH using 64-bit store
handled = false;
break;
}
u64 reg_value;
if (!is_writing || !get_x64_reg_value(context, reg, d_size, i_size, reg_value))
{
@@ -1479,12 +1538,19 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
case X64OP_STOS:
default:
{
sig_log.error("Invalid or unsupported operation (op=%d, reg=%d, d_size=%lld, i_size=%lld)", +op, +reg, d_size, i_size);
sig_log.error("Invalid or unsupported operation (op=%d, addr=0x%x, reg=%d, d_size=%lld, i_size=%lld, a_size=%d)", +op, addr, +reg, d_size, i_size, a_size);
report_opcode();
return false;
}
}
if (!handled)
{
sig_log.error("Invalid or unsupported operation (op=%d, addr=0x%x, reg=%d, d_size=%lld, i_size=%lld, a_size=%d)", +op, addr, +reg, d_size, i_size, a_size);
report_opcode();
break;
}
// skip processed instruction
RIP(context) += i_size;
g_tls_fault_spu++;
@@ -1494,7 +1560,9 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
static_cast<void>(context);
#endif /* ARCH_ */
if (vm::check_addr(addr, is_writing ? vm::page_writable : vm::page_readable))
const auto required_page_perms = (is_writing ? vm::page_writable : vm::page_readable) + (is_exec ? vm::page_executable : 0);
if (vm::check_addr(addr, required_page_perms))
{
return true;
}
@@ -1502,9 +1570,7 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
// Hack: allocate memory in case the emulator is stopping
const auto hack_alloc = [&]()
{
g_tls_access_violation_recovered = true;
if (vm::check_addr(addr, is_writing ? vm::page_writable : vm::page_readable))
if (vm::check_addr(addr, required_page_perms))
{
return true;
}
@@ -1516,17 +1582,45 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
return false;
}
extern void ppu_register_range(u32 addr, u32 size);
bool reprotected = false;
if (vm::writer_lock mlock; area->flags & vm::preallocated || vm::check_addr(addr, 0))
{
// For allocated memory with protection lower than required (such as protection::no or read-only while writing to it)
utils::memory_protect(vm::base(addr & -0x1000), 0x1000, utils::protection::rw);
reprotected = true;
}
if (reprotected)
{
if (is_exec && !vm::check_addr(addr, vm::page_executable))
{
ppu_register_range(addr & -0x10000, 0x10000);
}
g_tls_access_violation_recovered = addr;
return true;
}
return area->falloc(addr & -0x10000, 0x10000) || vm::check_addr(addr, is_writing ? vm::page_writable : vm::page_readable);
const bool allocated = area->falloc(addr & -0x10000, 0x10000);
if (allocated)
{
if (is_exec && !vm::check_addr(addr, vm::page_executable))
{
ppu_register_range(addr & -0x10000, 0x10000);
}
g_tls_access_violation_recovered = addr;
return true;
}
return false;
};
if (cpu && (cpu->get_class() == thread_class::ppu || cpu->get_class() == thread_class::spu))
if (cpu && (cpu->get_class() == thread_class::ppu || cpu->get_class() == thread_class::spu) && !is_exec)
{
vm::temporary_unlock(*cpu);
u32 pf_port_id = 0;
@@ -1669,7 +1763,7 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
if (cpu->get_class() == thread_class::spu)
{
if (!g_tls_access_violation_recovered)
if (g_tls_access_violation_recovered != addr)
{
vm_log.notice("\n%s", dump_useful_thread_info());
vm_log.always()("[%s] Access violation %s location 0x%x (%s)", cpu->get_name(), is_writing ? "writing" : "reading", addr, (is_writing && vm::check_addr(addr)) ? "read-only memory" : "unmapped memory");
@@ -1705,10 +1799,10 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
// Note: a thread may access violate more than once after hack_alloc recovery
// Do not log any further access violations in this case.
if (!g_tls_access_violation_recovered)
if (g_tls_access_violation_recovered != addr)
{
vm_log.notice("\n%s", dump_useful_thread_info());
vm_log.fatal("Access violation %s location 0x%x (%s)", is_writing ? "writing" : (cpu && cpu->get_class() == thread_class::ppu && cpu->get_pc() == addr ? "executing" : "reading"), addr, (is_writing && vm::check_addr(addr)) ? "read-only memory" : "unmapped memory");
vm_log.fatal("Access violation %s location 0x%x (%s)", is_writing ? "writing" : (is_exec ? "executing" : "reading"), addr, (is_writing && vm::check_addr(addr)) ? "read-only memory" : "unmapped memory");
}
while (Emu.IsPausedOrReady())
@@ -1757,8 +1851,13 @@ bool handle_access_violation(u32 addr, bool is_writing, ucontext_t* context) noe
}
}
if (Emu.IsStopped() && !hack_alloc())
if (Emu.IsStopped())
{
while (!hack_alloc())
{
thread_ctrl::wait_for(1000);
}
return false;
}
@@ -1797,6 +1896,7 @@ static LONG exception_handler(PEXCEPTION_POINTERS pExp) noexcept
if (pExp->ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION && !is_executing)
{
u32 addr = 0;
bool is_exec = false;
if (auto [addr0, ok] = vm::try_get_addr(ptr); ok)
{
@@ -1804,14 +1904,21 @@ static LONG exception_handler(PEXCEPTION_POINTERS pExp) noexcept
}
else if (const usz exec64 = (ptr - vm::g_exec_addr) / 2; exec64 <= u32{umax})
{
is_exec = true;
addr = static_cast<u32>(exec64);
}
else
else if (const usz exec64 = (ptr - vm::g_exec_addr - vm::g_exec_addr_seg_offset); exec64 <= u32{umax})
{
is_exec = true;
addr = static_cast<u32>(exec64);
}
else
{
std::this_thread::sleep_for(1ms);
return EXCEPTION_CONTINUE_SEARCH;
}
if (thread_ctrl::get_current() && handle_access_violation(addr, is_writing, pExp->ContextRecord))
if (thread_ctrl::get_current() && handle_access_violation(addr, is_writing, is_exec, pExp->ContextRecord))
{
return EXCEPTION_CONTINUE_EXECUTION;
}
@@ -1931,9 +2038,39 @@ static LONG exception_filter(PEXCEPTION_POINTERS pExp) noexcept
}
fmt::append(msg, "RPCS3 image base: %p.\n", GetModuleHandle(NULL));
#if defined(ARCH_X64)
fmt::append(msg, "RAX: %016llX RBX: %016llX\n", pExp->ContextRecord->Rax, pExp->ContextRecord->Rbx);
fmt::append(msg, "RCX: %016llX RDX: %016llX\n", pExp->ContextRecord->Rcx, pExp->ContextRecord->Rdx);
fmt::append(msg, "RSI: %016llX RDI: %016llX\n", pExp->ContextRecord->Rsi, pExp->ContextRecord->Rdi);
fmt::append(msg, "RBP: %016llX RSP: %016llX\n", pExp->ContextRecord->Rbp, pExp->ContextRecord->Rsp);
fmt::append(msg, "R8: %016llX R9: %016llX\n", pExp->ContextRecord->R8, pExp->ContextRecord->R9);
fmt::append(msg, "R10: %016llX R11: %016llX\n", pExp->ContextRecord->R10, pExp->ContextRecord->R11);
fmt::append(msg, "R12: %016llX R13: %016llX\n", pExp->ContextRecord->R12, pExp->ContextRecord->R13);
fmt::append(msg, "R14: %016llX R15: %016llX\n", pExp->ContextRecord->R14, pExp->ContextRecord->R15);
fmt::append(msg, "RFLAGS: %08X\n", pExp->ContextRecord->EFlags);
#elif defined(ARCH_ARM64)
for (int i = 0; i < 29; i += 2)
{
if (i + 1 < 29)
fmt::append(msg, "X%-2d: %016llX X%-2d: %016llX\n", i, pExp->ContextRecord->X[i], i + 1, pExp->ContextRecord->X[i + 1]);
else
fmt::append(msg, "X%-2d: %016llX\n", i, pExp->ContextRecord->X[i]);
}
fmt::append(msg, "SP: %016llX FP: %016llX LR: %016llX\n", pExp->ContextRecord->Sp, pExp->ContextRecord->Fp, pExp->ContextRecord->Lr);
fmt::append(msg, "CPSR: %08X\n", pExp->ContextRecord->Cpsr);
#endif
// TODO: print registers and the callstack
const auto stack_trace = utils::get_backtrace(64, pExp->ContextRecord);
const auto stack_symbols = utils::get_backtrace_symbols(stack_trace);
msg += "Stack Trace:\n";
for (const auto& symbol : stack_symbols)
{
fmt::append(msg, "%s\n", symbol);
}
sys_log.fatal("\n%s", msg);
logs::listener::sync_all();
@@ -2018,12 +2155,13 @@ static void signal_handler(int /*sig*/, siginfo_t* info, void* uct) noexcept
#endif
const u64 exec64 = (reinterpret_cast<u64>(info->si_addr) - reinterpret_cast<u64>(vm::g_exec_addr)) / 2;
const u64 exec64_2 = (reinterpret_cast<u64>(info->si_addr) - reinterpret_cast<u64>(vm::g_exec_addr)) - vm::g_exec_addr_seg_offset;
const auto cause = is_executing ? "executing" : is_writing ? "writing" : "reading";
if (auto [addr, ok] = vm::try_get_addr(info->si_addr); ok && !is_executing)
{
// Try to process access violation
if (thread_ctrl::get_current() && handle_access_violation(addr, is_writing, context))
if (thread_ctrl::get_current() && handle_access_violation(addr, is_writing, false, context))
{
return;
}
@@ -2031,7 +2169,14 @@ static void signal_handler(int /*sig*/, siginfo_t* info, void* uct) noexcept
if (exec64 < 0x100000000ull && !is_executing)
{
if (thread_ctrl::get_current() && handle_access_violation(static_cast<u32>(exec64), is_writing, context))
if (thread_ctrl::get_current() && handle_access_violation(static_cast<u32>(exec64), is_writing, true, context))
{
return;
}
}
else if (exec64_2 < 0x100000000ull && !is_executing)
{
if (thread_ctrl::get_current() && handle_access_violation(static_cast<u32>(exec64_2), is_writing, true, context))
{
return;
}
@@ -2160,10 +2305,17 @@ void thread_base::start()
ensure(m_thread);
ensure(::ResumeThread(reinterpret_cast<HANDLE>(+m_thread)) != static_cast<DWORD>(-1));
#elif defined(__APPLE__)
pthread_attr_t stack_size_attr;
pthread_attr_init(&stack_size_attr);
pthread_attr_setstacksize(&stack_size_attr, 0x800000);
ensure(pthread_create(reinterpret_cast<pthread_t*>(&m_thread.raw()), &stack_size_attr, entry_point, this) == 0);
pthread_attr_t attrs;
struct sched_param sp;
memset(&sp, 0, sizeof(struct sched_param));
sp.sched_priority=99;
pthread_attr_init(&attrs);
pthread_attr_setstacksize(&attrs, 0x800000);
pthread_attr_set_qos_class_np(&attrs, QOS_CLASS_USER_INTERACTIVE, 0);
pthread_attr_setschedpolicy(&attrs, SCHED_RR);
pthread_attr_setschedparam(&attrs, &sp);
ensure(pthread_create(reinterpret_cast<pthread_t*>(&m_thread.raw()), &attrs, entry_point, this) == 0);
#else
ensure(pthread_create(reinterpret_cast<pthread_t*>(&m_thread.raw()), nullptr, entry_point, this) == 0);
#endif
@@ -2343,7 +2495,7 @@ thread_base::native_entry thread_base::finalize(u64 _self) noexcept
g_tls_fault_spu = 0;
g_tls_wait_time = 0;
g_tls_wait_fail = 0;
g_tls_access_violation_recovered = false;
g_tls_access_violation_recovered = umax;
g_tls_log_prefix = []() -> std::string { return {}; };
@@ -2787,8 +2939,25 @@ void thread_base::exec()
}
}
void thread_ctrl::set_name(std::string name)
{
ensure(g_tls_this_thread);
g_tls_this_thread->m_tname.store(make_single<std::string>(name));
g_tls_this_thread->set_name(std::move(name));
}
[[noreturn]] void thread_ctrl::emergency_exit(std::string_view reason)
{
// Print stacktrace
#ifdef __cpp_lib_stacktrace
if (rpcs3::is_local_build())
{
std::ostringstream oss;
oss << std::stacktrace::current();
sys_log.notice("StackTrace\n\n%s\n", oss.str());
}
#endif
if (const std::string info = dump_useful_thread_info(); !info.empty())
{
sys_log.notice("\n%s", info);
@@ -2804,6 +2973,16 @@ void thread_base::exec()
}
}
if (auto [total, current] = utils::get_memory_usage(); total - current <= 256 * 1024 * 1024)
{
if (reason_buf.empty())
{
reason_buf = std::string{reason};
}
fmt::append(reason_buf, " (Possible RAM deficiency: free RAM: %dMB)", (total - current) / (1024 * 1024));
}
if (!reason_buf.empty())
{
reason = reason_buf;
@@ -2865,6 +3044,32 @@ void thread_base::exec()
report_fatal_error(reason);
}
void thread_ctrl::silent_exit() noexcept
{
if (const auto _this = g_tls_this_thread)
{
g_tls_error_callback();
u64 _self = _this->finalize(thread_state::errored);
if (_self == umax)
{
// Unused, detached thread support remnant
delete _this;
}
thread_base::finalize(umax);
}
#ifdef _WIN32
_endthreadex(0);
#else
pthread_exit(nullptr);
#endif
std::abort();
}
void thread_ctrl::detect_cpu_layout()
{
if (!g_native_core_layout.compare_and_swap_test(native_core_arrangement::undefined, native_core_arrangement::generic))
+32 -16
View File
@@ -4,6 +4,7 @@
#include "util/atomic.hpp"
#include "util/shared_ptr.hpp"
#include <thread>
#include <string>
// Hardware core layout
@@ -96,7 +97,7 @@ class thread_future
thread_future* prev{};
protected:
atomic_t<void(*)(thread_base*, thread_future*)> exec{};
atomic_t<void(*)(const thread_base*, thread_future*)> exec{};
atomic_t<u32> done{0};
@@ -128,7 +129,7 @@ public:
const native_entry entry_point;
// Set name for debugger
static void set_name(std::string);
static void set_name(std::string name);
private:
// Thread handle (platform-specific)
@@ -231,11 +232,7 @@ public:
}
// Set current thread name (not recommended)
static void set_name(std::string name)
{
g_tls_this_thread->m_tname.store(make_single<std::string>(name));
g_tls_this_thread->set_name(std::move(name));
}
static void set_name(std::string name);
// Set thread name (not recommended)
template <typename T>
@@ -318,6 +315,9 @@ public:
// Exit.
[[noreturn]] static void emergency_exit(std::string_view reason);
// Exit the current named thread as errored without reporting a fatal error.
[[noreturn]] static void silent_exit() noexcept;
// Get current thread (may be nullptr)
static thread_base* get_current()
{
@@ -374,13 +374,23 @@ private:
static const u64 process_affinity_mask;
};
#if defined(__has_cpp_attribute)
#if __has_cpp_attribute(no_unique_address)
#define NO_UNIQUE_ADDRESS [[no_unique_address]]
#else
#define NO_UNIQUE_ADDRESS
#endif
#else
#define NO_UNIQUE_ADDRESS
#endif
// Used internally
template <bool Discard, typename Ctx, typename... Args>
class thread_future_t : public thread_future, result_storage<Ctx, std::conditional_t<Discard, int, void>, Args...>
{
[[no_unique_address]] decltype(std::make_tuple(std::forward<Args>(std::declval<Args>())...)) m_args;
NO_UNIQUE_ADDRESS decltype(std::make_tuple(std::forward<Args>(std::declval<Args>())...)) m_args;
[[no_unique_address]] Ctx m_func;
NO_UNIQUE_ADDRESS Ctx m_func;
using future = thread_future_t;
@@ -389,7 +399,7 @@ public:
: m_args(std::forward<Args>(args)...)
, m_func(std::forward<Ctx>(func))
{
thread_future::exec.raw() = +[](thread_base* tb, thread_future* tf)
thread_future::exec.raw() = +[](const thread_base* tb, thread_future* tf)
{
const auto _this = static_cast<future*>(tf);
@@ -455,6 +465,8 @@ public:
namespace stx
{
struct launch_retainer;
extern atomic_t<u32> g_launch_retainer;
}
// Derived from the callable object Context, possibly a lambda
@@ -471,6 +483,11 @@ class named_thread final : public Context, result_storage<Context>, thread_base
u64 entry_point2()
{
while (u32 value = stx::g_launch_retainer)
{
stx::g_launch_retainer.wait(value);
}
thread::initialize([]()
{
if constexpr (!result::empty)
@@ -783,31 +800,30 @@ public:
m_count = 0;
// Create all threads
for (u32 i = 0; i < count - 1; i++)
for (; m_count < count - 1; m_count++)
{
// Copy the context
std::remove_cvref_t<Context> context(static_cast<const Context&>(f));
// Perform the check and additional preparations for each context
if (!std::invoke(std::forward<CheckAndPrepare>(check), i, context))
if (!std::invoke(std::forward<CheckAndPrepare>(check), m_count, context))
{
return;
}
m_count++;
new (static_cast<void*>(m_threads + i)) Thread(std::string(name) + std::to_string(i + 1), std::move(context));
new (static_cast<void*>(m_threads + m_count)) Thread(std::string(name) + std::to_string(m_count + 1), std::move(context));
}
// Move the context (if movable)
std::remove_cvref_t<Context> context(std::forward<Context>(f));
if (!std::invoke(std::forward<CheckAndPrepare>(check), m_count - 1, context))
if (!std::invoke(std::forward<CheckAndPrepare>(check), m_count, context))
{
return;
}
new (static_cast<void*>(m_threads + m_count)) Thread(std::string(name) + std::to_string(m_count + 1), std::move(context));
m_count++;
new (static_cast<void*>(m_threads + m_count - 1)) Thread(std::string(name) + std::to_string(m_count - 1), std::move(context));
}
// Default constructor
+1 -1
View File
@@ -329,7 +329,7 @@ bool patch_engine::load(patch_map& patches_map, const std::string& path, std::st
is_valid = false;
continue;
}
else if (serial.size() != 9 || !std::all_of(serial.begin(), serial.end(), [](char c) { return std::isalnum(c); }))
else if (serial.size() != 9 || !std::all_of(serial.begin(), serial.end(), [](char c) { return std::isalnum(static_cast<unsigned char>(c)); }))
{
append_log_message(log_messages, fmt::format("Error: Serial '%s' invalid (patch: %s, key: %s, location: %s, file: %s)", serial, description, main_key, get_yaml_node_location(serial_node), path), &patch_log.error);
is_valid = false;
+3 -1
View File
@@ -23,7 +23,6 @@ Intersection (&) and symmetric difference (^) is also available.
#include "util/types.hpp"
#include "util/atomic.hpp"
#include "Utilities/StrFmt.h"
template <typename T>
concept BitSetEnum = std::is_enum_v<T> && requires(T x)
@@ -384,6 +383,9 @@ public:
}
};
template <typename T>
struct fmt_unveil;
template <typename T>
struct fmt_unveil<bs_t<T>>
{
+3 -3
View File
@@ -27,14 +27,14 @@ void fmt_class_string<cheat_type>::format(std::string& out, u64 arg)
});
}
bool cheat_info::from_str(const std::string& cheat_line)
bool cheat_info::from_str(std::string_view cheat_line)
{
auto cheat_vec = fmt::split(cheat_line, {"@@@"}, false);
const auto cheat_vec = fmt::split(cheat_line, {"@@@"}, false);
s64 val64 = 0;
if (cheat_vec.size() != 5 || !try_to_int64(&val64, cheat_vec[2], 0, cheat_type_max - 1))
{
log_cheat.fatal("Failed to parse cheat line");
log_cheat.error("Failed to parse cheat line: '%s'", cheat_line);
return false;
}
+1 -1
View File
@@ -28,6 +28,6 @@ struct cheat_info
u32 offset{};
std::string red_script{};
bool from_str(const std::string& cheat_line);
bool from_str(std::string_view cheat_line);
std::string to_str() const;
};
+27
View File
@@ -0,0 +1,27 @@
#pragma once
// Generic deferred routine wrapper
// Use-case is similar to "defer" statement in other languages, just invokes a callback when the object goes out of scope
#include <functional>
namespace utils
{
template <typename F>
requires std::is_invocable_v<F>
class deferred_op
{
public:
deferred_op(F&& callback)
: m_callback(callback)
{}
~deferred_op()
{
m_callback();
}
private:
F m_callback;
};
}
+12
View File
@@ -1,5 +1,6 @@
#pragma once
#include <array>
#include <cmath>
#include <type_traits>
@@ -821,6 +822,14 @@ struct color4_base
a *= rhs;
}
void operator += (const color4_base<T>& rhs)
{
r += rhs.r;
g += rhs.g;
b += rhs.b;
a += rhs.a;
}
constexpr color4_base<T> operator * (const color4_base<T>& rhs) const
{
return { r * rhs.r, g * rhs.g, b * rhs.b, a * rhs.a };
@@ -1019,3 +1028,6 @@ using color1u = color1_base<unsigned int>;
using color1i = color1_base<int>;
using color1f = color1_base<float>;
using color1d = color1_base<double>;
using mat3f = color3_base<float>[3];
static_assert(sizeof(mat3f) == sizeof(float) * 3 * 3);
+3 -7
View File
@@ -94,8 +94,6 @@ if defined BUILD_SOURCEBRANCHNAME (
rem // This must be a CI build
echo SYSTEM_PULLREQUEST_SOURCEBRANCH: %SYSTEM_PULLREQUEST_SOURCEBRANCH%
if defined BUILD_REPOSITORY_NAME (
echo BUILD_REPOSITORY_NAME: %BUILD_REPOSITORY_NAME%
) else (
@@ -110,9 +108,7 @@ if defined BUILD_SOURCEBRANCHNAME (
rem // These environment variables are defined by CI
rem // BUILD_REPOSITORY_NAME will look like "RPCS3/rpcs3"
rem // SYSTEM_PULLREQUEST_SOURCEBRANCH will look like "master"
rem // BUILD_SOURCEBRANCHNAME will look like "master"
rem // See https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables
set GIT_FULL_BRANCH=%BUILD_REPOSITORY_NAME%/%BUILD_SOURCEBRANCHNAME%
echo GIT_FULL_BRANCH: !GIT_FULL_BRANCH!
@@ -129,12 +125,12 @@ if defined BUILD_SOURCEBRANCHNAME (
rem // This must be a pull request or a build from a fork.
echo Assuming pull request build
if "%SYSTEM_PULLREQUEST_SOURCEBRANCH%"=="master" (
if "%BUILD_SOURCEBRANCHNAME%"=="master" (
rem // If pull request comes from a master branch, GIT_BRANCH = username/branch in order to distinguish from upstream/master
for /f "tokens=1* delims=/" %%a in ("%BUILD_REPOSITORY_NAME%") do set user=%%a
set "GIT_BRANCH=!user!/%SYSTEM_PULLREQUEST_SOURCEBRANCH%"
set "GIT_BRANCH=!user!/%BUILD_SOURCEBRANCHNAME%"
) else (
set GIT_BRANCH=%SYSTEM_PULLREQUEST_SOURCEBRANCH%
set GIT_BRANCH=%BUILD_SOURCEBRANCHNAME%
)
rem // Make GIT_VERSION the last commit (shortened); Don't include commit count on non-release builds
+13
View File
@@ -10,6 +10,19 @@ rXmlNode::rXmlNode(const pugi::xml_node& node)
handle = node;
}
std::shared_ptr<rXmlNode> rXmlNode::GetChild(std::string_view name)
{
if (handle)
{
if (const pugi::xml_node child = handle.child(name))
{
return std::make_shared<rXmlNode>(child);
}
}
return nullptr;
}
std::shared_ptr<rXmlNode> rXmlNode::GetChildren()
{
if (handle)
+1
View File
@@ -20,6 +20,7 @@ struct rXmlNode
{
rXmlNode();
rXmlNode(const pugi::xml_node& node);
std::shared_ptr<rXmlNode> GetChild(std::string_view name);
std::shared_ptr<rXmlNode> GetChildren();
std::shared_ptr<rXmlNode> GetNext();
std::string GetName();

Some files were not shown because too many files have changed in this diff Show More