Compare commits

...

361 Commits

Author SHA1 Message Date
Ani b8477a470f rpcs3_version: Bump to 0.0.16 2021-04-30 21:42:14 +01:00
Ani 2f44523e6d .github: Update issue templates
Mention settings must be as close to defaults as possible and that game 
patches must be disabled when reporting issues
2021-04-30 21:14:51 +01:00
Ani 2fa5f6f242 .github: Update PR-BUILD.md 2021-04-30 21:14:51 +01:00
Ani a86cce5d70 Update BUILDING.md
- Update Vulkan SDK references to match the version currently used in CI 
(1.2.154)
- Update Python to the oldest still supported version (3.6), also the 
version currently available on bionic
- Update leftover minimum required CMake version to 3.16.9
2021-04-30 21:14:51 +01:00
Ani 9856f170a7 .github: Update CONTRIBUTING.md
Modernize it a little bit
2021-04-30 21:14:51 +01:00
Megamouse ba35619718 curl: fix visual studio build 2021-04-30 17:07:05 +01:00
Ani 37331d8ead stblib: Ignore new 3rdparty warnings 2021-04-30 17:07:05 +01:00
Ani d17784b231 curl: Update from v7.72.0 to v7.76.1 2021-04-30 17:07:05 +01:00
Ani 18e1b45388 stblib: Update stb_truetype from v1.21 to v1.24 2021-04-30 17:07:05 +01:00
Ani 9b083f801c stblib: Update stb_image from v2.22 to v2.26 2021-04-30 17:07:05 +01:00
Ani f0907d6f96 pugixml: Update from v1.9-git to v1.11.4 2021-04-30 17:07:05 +01:00
Megamouse 71d58e3a67 rsx: remove unused tile functions 2021-04-30 08:23:16 +02:00
Megamouse 37425d6fcd GL: Remove unused copy functions 2021-04-30 08:23:16 +02:00
Megamouse 1f295bba5b VK: ReSharper warning fixes 2021-04-30 08:23:16 +02:00
Megamouse a50be7a912 GL: resharper findings (too lazy for const functions) 2021-04-30 08:23:16 +02:00
Ani f9d52ea5b9 OpenAL: Update include from 1.20.1 to 1.21.1 2021-04-30 00:02:08 +01:00
Ani e192869e15 XAudio2: Update from 1.2.0 to 1.2.6
Microsoft.XAudio2.Redist 1.2.0 to 1.2.6
2021-04-30 00:02:08 +01:00
Ani f1be9bbf6c FAudio: Update from 20.03-git to 21.04 2021-04-30 00:02:08 +01:00
Megamouse d331ff3193 overlays: implement text_align::right 2021-04-30 00:30:26 +02:00
Megamouse 035a187c42 user-overlays: add sanity check for enter button 2021-04-30 00:30:26 +02:00
Megamouse 3c37036f7a save-overlays: add entry size info 2021-04-30 00:30:26 +02:00
Megamouse 14b6d6291b save-overlays: add localization 2021-04-30 00:30:26 +02:00
Megamouse 5720a32bc5 save-overlays: change list entry contents.
There's no need to tell the user that the entry is for game xy, they are already playing that game.
On a real PS3 only the subtitle and the date are displayed.
2021-04-30 00:30:26 +02:00
Megamouse 11f57f259c cellSaveData: keep focus after confirmation cancel
It was very annoying to be thrown to beginning of the list after cancelling the confirmation.
2021-04-30 00:30:26 +02:00
Nekotekina 3fc6375ec5 Use consteval (experimental) 2021-04-29 23:16:43 +03:00
Nekotekina f8e05f8e3c Remove redundant operators != 2021-04-29 22:57:40 +03:00
Ani 98c0b3a2b1 glslang: Disable precompile headers 2021-04-29 20:20:40 +01:00
Ani 6423c23a9a glslang: Update to 11.4.0
From SDK-candidate-26-Jul-2020
2021-04-29 20:20:40 +01:00
polar dece8a69f6 BUILD: Refactor libusb submodule (#10169)
* relocate module files
* fix cmake errors
* moved & updated libusb MSVC build file
2021-04-29 16:50:18 +01:00
Nekotekina 5724d2d4c7 Simplify umax
Add operator less and conversion operator.
2021-04-29 12:21:12 +03:00
Nekotekina b1736b6411 Simplify utils::umulh64 (MSVC) 2021-04-29 09:45:57 +03:00
Nekotekina 703ec474f5 Fixup for sys_time_get_timezone (3rd path)
Also simplify Linux path a bit.
2021-04-29 00:07:22 +03:00
xddxd 64a109d28a Toolchain upgrades
CI/FreeBSD: unbreak build with bundled libc++ 12

Co-authored-by: Jan Beich <jbeich@FreeBSD.org>
2021-04-28 23:50:39 +03:00
Jan Beich dc2ec17886 CI/FreeBSD: stop caching downloaded packages
Packages on /latest get out of date pretty quickly, anyway.
2021-04-28 20:44:06 +03:00
kd-11 1d9dd8d29d vk: Add support for tagging objects to ease debugging
- Makes use of VK_EXT_debug_utils
2021-04-28 16:53:02 +03:00
kd-11 8b0e1d6c03 rsx: Make renderdoc compatibility mode a general option 2021-04-28 16:53:02 +03:00
Megamouse f1a9f6263e Rename Rockband to Rock Band 2021-04-27 23:33:46 +02:00
Nekotekina a049c6fd6b Implement sys_time_get_timezone syscall
Try to get system timezone automatically.
Attempt to address #10195.
2021-04-27 22:21:58 +03:00
kd-11 9609767c51 vk: Refactor render target code 2021-04-26 00:33:05 +03:00
Nekotekina 86a8e0716f Test alterable aggregates via overriding be_t
Checking how it might look like without introducing too many changes.
Alteration of its behaviour as a "template template" argument allows:
 - normal access
 - easier aggregate inspection
 - memory access interception
2021-04-25 19:00:16 +03:00
Nekotekina b5e9f09972 fmt: support numeric u128 formatting 2021-04-25 18:17:38 +03:00
Nekotekina 4d9a167f56 u128: add multiplication support (for MSVC) 2021-04-25 18:17:38 +03:00
Nekotekina b704cc8375 shared_ptr.hpp: implement make_single_value(), make_shared_value()
A function that constructs single_ptr from its argument.
Type can be deduced from the argument (unlike make_single).
2021-04-25 18:17:38 +03:00
Nekotekina e34c956196 shared_ptr.hpp: add invoke operator 2021-04-25 18:17:38 +03:00
clienthax 7197dd751a Fcntl e0000025 (#10172)
Co-authored-by: Eladash <elad3356p@gmail.com>
2021-04-24 21:43:09 +03:00
David Carlier 0b9e4ffe54 Mac OS build update and simplification, recent releases of macOS has clock_gettime support. 2021-04-24 12:55:21 +03:00
Megamouse 486ba6121d Qt: fix window position of update dialog 2021-04-24 11:46:51 +02:00
Megamouse 1015c126d7 fix formatting (somehow broken by copy pasta) 2021-04-24 11:46:51 +02:00
Megamouse 1caf81811a Move unspecific Emulator code out of System.cpp 2021-04-24 11:21:22 +03:00
kd-11 4c2a11b6d0 vk: Fix broken FBO swizzle for depth textures. WDB was basically broken for these. 2021-04-24 00:19:50 +03:00
Megamouse 8fd3b26308 sys: more constants 2021-04-23 22:46:15 +02:00
Megamouse 617d21fa84 sys_prx: more constants 2021-04-23 22:02:52 +02:00
Megamouse 4a88ffe250 Fix typo causing unreachable code 2021-04-23 22:02:52 +02:00
Megamouse 41b68ef353 some more constants 2021-04-23 22:02:52 +02:00
Eladash 72c85744b9 kernel-explorer: Show bound queue to port information
Show its IPC key or ID, depends on the queue's type.
2021-04-23 21:34:05 +03:00
Eladash c7b5bbd467 Fix emulation restart 2021-04-23 20:59:02 +03:00
David Carlier 082bbc7336 Following up on MacOS build fix.
Specialisation of llvm_value_t to allow build with LLVM this time.
2021-04-23 15:20:40 +03:00
Megamouse 087dccd194 Implement most of cellUserInfo 2021-04-23 05:50:19 +03:00
Nekotekina 61450335a5 named_thread: use concepts, improve constructors
Better default thread name detection.
2021-04-21 17:19:53 +03:00
Nekotekina 67649d7976 SPU LLVM: restore lost comment 2021-04-21 13:33:44 +03:00
Malcolm Jestadt 6247969ede SPU LLVM: Absolute final fixes for icelake shufb paths
- The constant mask was accessing bits in reverse order of what was expected
2021-04-21 11:00:02 +03:00
Malcolm Jestadt efd38fa940 SPU LLVM: Improve byteswap elimination
- Use the data before it has been swapped rather than relying on a second byteswap to cancel out the first
2021-04-20 23:24:21 +03:00
Malcolm Jestadt 551472220e SPU LLVM: Remove icelake shufb paths for now 2021-04-20 23:24:21 +03:00
p01arst0rm 01703b1350 moved cmake_modules to project root 2021-04-20 21:38:47 +03:00
p01arst0rm e9d785475e removed redundant cmake version check 2021-04-20 21:38:47 +03:00
p01arst0rm 9e008996ab swap STREQUAL for MATCHES 2021-04-20 21:38:47 +03:00
p01arst0rm bcfae17219 unified missmatched indentation in CMake files 2021-04-20 21:38:47 +03:00
dio-gh ddea45160b GUI: take out some unwise shortcuts
Removes the ability to stop or restart emulation via keyboard shortcuts
while the game is running. Prevents loss of work that can happen due to
the current bindings conflicting with very-widely established shortcuts.

Ctrl+C and Ctrl+E will now be unbound, and Ctrl+R will now mean Resume.
Strings that mention these keybinds were adjusted accordingly.
2021-04-20 19:46:47 +03:00
Malcolm Jestadt 53f13a9721 SPU LLVM: Final fixup for icelake shufb paths
- The cause of the problems was due to the constant mask for gf2p9affineqb being used as the first argument, instead of the second argument.
2021-04-20 13:07:24 +03:00
Megamouse 3e33f064bf overlays: hotfix for dialog interaction
Turns out there was an undocumented reason for this.
Nobody warned me that "It's a trap!".
I wonder how this hasn't summoned a shitstorm yet.
2021-04-20 00:42:11 +02:00
Megamouse aa0afc9a4e Input: avoid mouse events when unused 2021-04-20 00:06:23 +02:00
Eladash a0d1cf26d0 Reduce precompilation failure log level (error -> notice) 2021-04-19 23:18:31 +03:00
Megamouse 01d14aed80 fix null chars in hostname log message 2021-04-19 21:54:27 +02:00
Megamouse 3c4c830e20 Qt: Speed up Log Viewer 2021-04-19 21:25:19 +02:00
Nekotekina 0c9c481cee Use requires syntax in more places
Change style in some places.
2021-04-19 16:51:40 +03:00
Nekotekina 7dae376646 Implement fill_array() utility 2021-04-19 12:33:32 +03:00
Nekotekina ccb89bd76a MSVC: disable throwing new 2021-04-19 12:33:32 +03:00
Megamouse b2317543c8 Qt: Fix initial gs_frame position on multi-monitor 2021-04-19 10:44:48 +02:00
p01arst0rm b812ef2771 removed space between and its opening parentheses 2021-04-19 08:59:28 +03:00
David Carlier 7618e7f3fb FreeBSD/clang update proposal.
silence few build warnings, VKDMA: disable Intel chipset for host buffer as it requires root privilege.
2021-04-18 19:56:21 +03:00
David Carlier b6732fbae9 MacOs build fix proposal.
Made on Big Sur, removing few unnecessary old specifics.
Build with LLVM homebrew.
2021-04-18 17:18:09 +03:00
clienthax 68fa377d13 Add dev_flash2+3 2021-04-18 14:49:29 +03:00
Nekotekina 7a9561b966 vm_native: document some unmap_critical behaviour (posix) 2021-04-18 13:13:15 +03:00
Nekotekina c061991c43 vm_native: supply only one madvise flag at a time 2021-04-18 13:13:15 +03:00
Megamouse bdac1d9bfd Qt: fix type mismatch crash of game grid items 2021-04-18 09:58:54 +02:00
David Carlier 266c4209c4 VM: FreeBSD c_madv_no_dump/dump constants support. 2021-04-17 20:47:36 +03:00
Nekotekina fb26da1cb0 bs_t<>: create BitSetEnum concept
Try concepts instead of SFINAE.
2021-04-17 19:23:19 +03:00
Nekotekina d623720f4d Fix condition for -Wno-attributes (regression) 2021-04-17 16:26:41 +03:00
Nekotekina 9d4fcbf946 bs_t<>: fix/cleanup some operators 2021-04-17 15:54:33 +03:00
p01arst0rm 896db3806d replaced CMAKE_COMPILER_IS_GNUCXX with CMAKE_CXX_COMPILER_ID 2021-04-17 15:54:27 +03:00
Megamouse 691b986e36 keyboard pads: release all keys on FocusOut event 2021-04-17 14:03:50 +02:00
Megamouse 5416f60643 basic keyboard: release all keys on FocusOut event 2021-04-17 14:03:50 +02:00
Eladash 67e2e154fa Replace simple_type with std::common_type 2021-04-17 10:27:55 +03:00
Megamouse 330dea181a Qt: unify some movie hover code and fix cellLeave 2021-04-16 23:18:13 +02:00
Megamouse 7bc673002f overlays: fix dirty state of message dialog 2021-04-16 23:18:13 +02:00
Megamouse ae8d1a3a60 Qt: smoother scrolling in savedata manager 2021-04-16 21:26:24 +02:00
Megamouse 27975e9dfd Qt: remove uncritical deprecated notes and titles
This also fixes a savedata notes bug.
The detail section notes were always taken from the deprecated settings.
2021-04-16 21:26:24 +02:00
Megamouse bff938ccf5 Qt: optimize game list repaint with new logic
We now pass a shared pointer to the icon items, so there is no need to trigger a full refresh of the list anymore.
Sadly this doesn't apply to the game grid.
2021-04-16 11:21:04 +02:00
Megamouse 53f317e076 Qt: use gifs as icons on hover if available. 2021-04-16 11:21:04 +02:00
Malcolm Jestadt 0a7df9d02e SPU LLVM: add AVX-512 SPU verification
- This is hidden behind a new setting, as some cpus may downclock agressively when executing 512 wide instructions
2021-04-16 09:35:26 +03:00
Nekotekina 408ffd3d2c fxo: add debug name to the typeinfo 2021-04-15 20:01:29 +03:00
Nekotekina a211895e28 shared_ptr.hpp: use for fs::virtual_device
Add new constructors for single_ptr and shared_ptr.
Change virtual device prefix format.
2021-04-15 17:26:47 +03:00
Nekotekina 19763f8973 Remove unnecessary default:breaks 2021-04-15 15:23:59 +03:00
Desterly 99d6f9c7a9 Skylander - Traptanium portal cleanup
- Remove "Status" query responses from reset request
- Add additional request types for newer portal
2021-04-15 12:10:22 +02:00
Desterly 63e4ac80bd Skylander - Change portal version
Switch emulation to the Traptanium portal.   This portal is universal
and works with all games.
2021-04-15 12:10:22 +02:00
polar 24983ea329 removed whitespace
Co-authored-by: Megamouse <studienricky89@googlemail.com>
2021-04-15 11:37:35 +02:00
p01arst0rm 6cab5b5591 removed extra perentheses pair 2021-04-15 11:37:35 +02:00
p01arst0rm c9d2aed286 small collection of fixes 2021-04-15 11:05:15 +03:00
Eladash a16cc3ac8a lv2: Remove flags from IPC-supported objects 2021-04-15 10:31:40 +03:00
TotalCaesar659 ba1699a831 Fix typo 2021-04-14 20:01:18 +02:00
Megamouse 20c69a0e3e overlays: make auto-repeat buttons configurable
and properly reset the auto-repeat timer whenever a new button was pressed
2021-04-13 20:57:05 +02:00
Megamouse bdc5ed094b overlays: implement OSK password mode 2021-04-13 20:57:05 +02:00
Megamouse 088d22675b overlays: fix osk placeholder 2021-04-13 20:57:05 +02:00
Megamouse fc9b3c13e6 misc: fix old some style casts and redundancies 2021-04-13 20:57:05 +02:00
kd-11 14a64e2529 rsx: Handle rare rounding issue where position.w is very close to zero 2021-04-13 21:26:23 +03:00
Megamouse f5415fb4ac overlays: dynamically change dialog background 2021-04-13 19:13:56 +02:00
Megamouse 20076ed57e Qt: Properly disable perfoverlay datapoint sliders 2021-04-13 19:13:56 +02:00
Michał Karczewski 006b8574ae Update BUILDING.md
There is no `qt515-meta-minimal` package under mentioned package repository, but `qt515base` allows to build CMake configuration
2021-04-13 10:00:52 +03:00
p01arst0rm 1de7ac3c67 added inline suggestion to patch_engine_version to prevent duplicate includes 2021-04-13 09:14:53 +03:00
kd-11 8d1fc18941 vk: Fix mip level packed pitch calculation 2021-04-13 00:14:16 +03:00
kd-11 06dc99ab85 rsx: Fix decompression of RB_RG textures.
- Removes several subtle hacks that hid the real issue.
  A compressed texture has more than one texel per 'block'.
2021-04-11 21:36:36 +03:00
p01arst0rm e4059dfe6a added pvs-studio artifacts to gitignore 2021-04-11 19:44:57 +03:00
p01arst0rm 4048b1e515 added inline suggestion to settings_location to prevent duplicate includes 2021-04-11 18:38:02 +03:00
Nekotekina ccb46df905 Minor fixups (removed unnecessary code) 2021-04-11 16:36:02 +03:00
Megamouse a16d8ba3ea More random changes 2021-04-11 14:01:51 +03:00
xddxd a485957130 Cirrus warning fix 2021-04-11 01:18:23 +03:00
Eladash 56d34e0e80 Enforce backslash at the end of emulated drives paths 2021-04-10 23:51:49 +03:00
Eladash 11824b3916 Win32 FS: Improve fs::create_dir 2021-04-10 23:51:49 +03:00
Eladash 5ca6381624 Implement "PPU LLVM Precompilation" control setting 2021-04-10 18:06:46 +03:00
xddxd 024b184008 Cirrus build 2021-04-10 17:21:01 +03:00
Megamouse 7a105333dc Qt: fix vfs dir remove button enabled state 2021-04-10 15:18:16 +02:00
Megamouse 332eb5fbd6 Log firmware after Emu was initialized 2021-04-10 15:18:16 +02:00
Megamouse 5b0dac797c Remove deprecated user management code 2021-04-10 15:18:16 +02:00
Eladash 86ddc00bb1 Suggest adding RPCS3 to anti-virus whitelist on firmware/PKG installation failure 2021-04-10 10:37:20 +02:00
Nekotekina 3107f37864 Fix psf::load error for error::stream 2021-04-10 00:43:08 +03:00
Megamouse 17f5fec538 sceNp: fix rap file regression (#10084) 2021-04-09 21:37:57 +01:00
Megamouse 03b76b4606 Emu: some cleanup 2021-04-09 21:03:49 +02:00
Eladash a3e8a61547 PSF: Fix string_view optimization
Avoid redundant copies of std::string.
2021-04-09 20:58:30 +03:00
Eladash a8d5a8734a Loader/cellGame: Do not crash on invalid PSF files 2021-04-09 20:58:30 +03:00
Nekotekina 10bbb7fa1f Fix some warnings (deprecate enum arithmetics) 2021-04-09 10:26:13 +03:00
Nekotekina 8c5f2b249c shared_ptr.hpp: further fixes
Improved is_same_ptr() trait (added third "maybe" category).
Fallback to pseudo-runtime check in certain cases (if "maybe").
Fix single_ptr moving assignment operator.
2021-04-09 10:26:13 +03:00
Nekotekina 332c512eed shared_ptr.hpp: minor optimization (GCC hotfix)
Use thread_local for dummy objects (doesn't work on MSVC).
Couldn't find better way to remove fake static objects completely.
In a sense that they don't appear in object files.
2021-04-09 10:26:13 +03:00
Megamouse d10584ac6c DRM: Search all user directories for rap files 2021-04-09 08:47:59 +02:00
Eladash d2b761b7de Log error about HG games booted outside of /dev_hdd0 2021-04-08 23:57:00 +03:00
Eladash 49c5ce30cc Emulation: Fix boot path resolving
* Fix /dev_flash executables path arg. (/host_root is wrong for it)
* Fix usage of /host_root for homebrew applications when it is not mounted, use /app_home.
* Fix path source detection. (don't get fooled by path slashes repetitions, symlinks, '.', ".." and ('\' on Windows))
* Unescape tail of /dev_hdd0 paths.
2021-04-08 23:57:00 +03:00
Nekotekina 95725bf7fc Add -Werror=missing-noreturn (GCC, clang)
May be useful to diagnose functions which fail assertions unconditionally.
2021-04-08 10:29:47 +03:00
Nekotekina 94c62b1eec shared_ptr.hpp: improve is_same_ptr<> trait
Don't always return true on MSVC.
2021-04-08 10:29:47 +03:00
Megamouse 02febd3f65 Workaround: Skip progress_dialog during gameplay 2021-04-06 21:39:34 +03:00
Megamouse 497fbb17a8 progress_dialog fixes 2021-04-06 21:39:34 +03:00
p01arst0rm 5ddb1d6649 moved build options to options.cmake 2021-04-06 15:23:56 +03:00
Nick Renieris 396c129d41 vm: Flag names (refactoring) 2021-04-06 13:07:54 +03:00
cglmrfreeman f64a7bb820 Update OpenSUSE dependencies
Added `libqt5gui-private-headers-devel` dependency to fix `fatal error: qpa/qplatformnativeinterface.h: No such file or directory`
2021-04-05 11:14:59 +03:00
Eladash 4a9be0a8d2 core: Move IDM to FXO 2021-04-04 17:29:32 +03:00
Megamouse bf1756448e overlays: fix taskbar progress reset 2021-04-04 13:38:10 +03:00
Nekotekina ed8f60431f Fixup for progress dialog closing logic
Co-authored-by: Megamouse <studienricky89@googlemail.com>
2021-04-03 23:25:02 +03:00
Nekotekina 6f1f75bc8f Minor progress dialog refactoring
Add rsx::overlays::progress_dialog class (identical to message_dialog).
Don't use Emu.CallAfter() for native dialogs.
Make g_progr_ptotal waitable.
2021-04-03 22:38:04 +03:00
Nekotekina 963d150e93 Fix some -Weffc++ warnings (part 2) 2021-04-03 21:54:15 +03:00
Nekotekina c1f1b1174d Update commits 2021-04-03 21:54:15 +03:00
Nekotekina 1ddeef71c6 Fix some typos 2021-04-03 21:54:15 +03:00
Megamouse b7eefeac8b hotfix: skip progr dialogs if msg dialogs are open 2021-04-03 20:37:40 +02:00
Eladash e57f36fc5b Quick sys_sm_get_params implementation 2021-04-03 17:23:40 +03:00
Eladash 32116086b3 Implement _sys_prx_register_module loading imports/exports functionality 2021-04-03 17:23:40 +03:00
Eladash 878da3b474 Implement get_cellos_appname()
Identifying vsh.self and possibly other operating system executables in the future.
2021-04-03 17:23:40 +03:00
Eladash 73320d4180 Output all fatal log messages to Console/debugger as well 2021-04-03 08:47:58 +02:00
Eladash a1d31f640a Set userland firmware SPRX directory as the default PS3 decryption tool path 2021-04-02 20:54:33 +02:00
Megamouse 9c7230e79f cli: set user-id per command line 2021-04-02 11:50:28 +02:00
Megamouse 98687d474b Move system info to extra line 2021-04-02 07:14:23 +02:00
Eladash 7b57b8f2ca debugger: Implement ability to pause entire emulation on breakpoint 2021-04-01 19:11:55 +03:00
Eladash 55c98bfaef Fix #9879 and fix firmware confirmation dialog when auto-start is disabled 2021-04-01 14:09:02 +03:00
Nekotekina e9a45a2f45 Implement scoped_progress_dialog
Create Emu/system_progress.hpp
Remove atomic g_progr_show
2021-03-31 23:40:09 +02:00
Nekotekina 2212a131ef Fix some -Weffc++ warnings (part 1) 2021-03-31 11:27:09 +03:00
Nekotekina deacf05769 Enable -Wdeprecated-copy
Some classes violated the Rule of 3(5) in their special operator definitions.
2021-03-31 11:27:09 +03:00
Megamouse 870224cde0 Emu/overlay: ingame native overlay PPU compilation 2021-03-31 09:38:30 +02:00
Megamouse e557c962fb Qt: gs_frame position updates 2021-03-30 19:09:01 +02:00
Eladash 5a3c218239 thread-pool: Fix default rounding mode 2021-03-30 11:13:47 +03:00
Eladash 1e71deb0db rsx: Compile shaders when CELL is not running 2021-03-30 11:13:47 +03:00
Eladash dea1d01de2 Fix Emulator::Stop race with IDM
Newly created threads' state could have not been flagged with exit.
2021-03-30 10:21:54 +03:00
Eladash e9bea1c742 Emu: Do not obey auto-exit setting after creating firmware cache 2021-03-30 10:21:54 +03:00
Eladash d51bb8b1cc Fix Emulator::Pause race with IDM 2021-03-30 10:21:54 +03:00
Eladash aad5283786 Fix Emulator::IsPaused() 2021-03-30 10:21:54 +03:00
Megamouse 66df38957b add AppIcon to fatal_error_dialog 2021-03-29 23:32:15 +02:00
xddxd 7cbafd603a Get rid of non-LLVM build configurations (#10030)
Co-authored-by: Megamouse <studienricky89@googlemail.com>
2021-03-29 22:45:48 +03:00
dio-gh 3e48c9744b upgrade icons to a modern design
Credits go to @DAGINATSUKO, and @hcorion for the svg version.
2021-03-29 22:24:40 +03:00
Megamouse a982280400 Qt: Drop int for QT_SCALE_FACTOR_ROUNDING_POLICY 2021-03-29 20:37:33 +02:00
Megamouse d62983e1a2 Qt: Properly set QT_SCALE_FACTOR_ROUNDING_POLICY 2021-03-29 20:37:33 +02:00
Megamouse 90ac24e524 Qt: set find_dialog "next" button to default 2021-03-29 19:19:24 +02:00
Megamouse 0b2ba98238 Qt: add option to hide the log prefix 2021-03-29 19:19:24 +02:00
xddxd 916ce7899b LLVM Clang-cl support and ninja build
Also update the submodule
2021-03-28 17:24:48 +03:00
xddxd b978aa6dca Wording changes and tooltip fix for unsupported CPUs 2021-03-26 18:56:16 +01:00
Megamouse 6565855005 Qt: clean global cfg before adding custom cfgs 2021-03-26 09:08:30 +01:00
Megamouse 9f80a55652 Qt: don't show updater if booted with cli arg 2021-03-25 23:39:42 +01:00
xddxd 9d895e6b15 Scheduler overhaul 2021-03-26 00:29:44 +03:00
Megamouse a7acb84b8b Qt: Remove unused GUI entries when saving a config 2021-03-25 20:34:00 +01:00
Megamouse 8d54453981 Qt: Fix debugger breakpoint deletion 2021-03-24 20:47:51 +01:00
Megamouse 452fb59c74 Qt: select target item in debugger list
This should make it easier to spot the item
2021-03-24 20:47:51 +01:00
Megamouse ba45daff35 Qt: some cleanup in debugger 2021-03-24 20:47:51 +01:00
Nekotekina b3fb6d7d18 Add and fix -Wredundant-decls (GCC) 2021-03-23 22:48:57 +03:00
Nekotekina 5dc3467337 vm: fix reservation_update notification
Rare function.
2021-03-23 21:09:37 +03:00
Nekotekina 729757b1dd atomic.hpp: allow raw notify_all by pointer 2021-03-23 20:58:42 +03:00
Nekotekina 393f9d329d atomic.cpp: allow non-standard sizes in atomic wait (>16) 2021-03-23 20:52:56 +03:00
Nekotekina 820390b7ed atomic.cpp: remove raw_notify and simplify internal logic
Also permit zero size in waiters.
2021-03-23 20:19:10 +03:00
Nekotekina e0790f758e Add some warnings (GCC, clang) 2021-03-23 16:40:44 +03:00
Eladash 2f333424a6 Improve ELF/Trophy loader's error checking 2021-03-23 16:05:23 +03:00
Eladash a67b347966 debugger: Fix SPU memory viewing (#10007)
* debugger: Fix SPU memory viewing

* Fix terminal recovery from page faults (hack allocation)
2021-03-23 13:33:07 +03:00
Megamouse dedf09017a VS: try to unbreak debug builds 2021-03-23 09:11:04 +01:00
Megamouse cd07ab5b5f VS: fix release build 2021-03-23 00:46:26 +01:00
Megamouse 6892cb1c7e Qt: prepare for removal of deprecated GUI settings
If you remove a custom name and already had a deprecated name before, you'll never get rid of it.
This applies to all of the deprecated settings.
2021-03-22 23:47:11 +01:00
Megamouse b518a9a338 VS: fix release Optimization 2021-03-22 20:19:36 +01:00
Megamouse 54d078f379 VS: fix AdditionalIncludeDirectories 2021-03-22 20:19:36 +01:00
Eladash b0a0533a4f Memory string searcher improvements
* Search the entire PS3 4GB address space instead of a small area of memory which is meant mostly for PRX/SELF memory aka vm::main segment. This limitation rendered string searcher nearly useless.
* Implement hexadecimal byte-string, hexadecimal integer, float and double value search formats.
* Multi-thread searching.
* Optimize searching algorithm vastly.
* Fix crash on empty string, report an error.
* Implement case-insensitive string search.
2021-03-22 18:37:26 +03:00
Megamouse 399f20ae54 Qt: Fix debugger step shortcuts 2021-03-22 10:44:30 +01:00
Megamouse 554ba9d6a6 Qt: Allow package installation through cli
Adds --installpkg cli option
2021-03-21 18:44:11 +01:00
Megamouse 2c05e9719d cfg: simplify get_nodes 2021-03-20 20:54:26 +03:00
Megamouse cb9e7358d2 cfg: log unused config entries 2021-03-20 20:54:26 +03:00
Megamouse ae01e1d2c3 cfg: move get_name to _base 2021-03-20 20:54:26 +03:00
Zion Nimchuk 2766e5ca6f Fix some minor shellcheck errors in github upload and windows build scripts 2021-03-20 15:09:48 +03:00
Zion Nimchuk ca0c4f2cc0 Run shellcheck on all build scripts to ensure quality 2021-03-20 15:09:48 +03:00
Megamouse 70c98fff19 Make cli fw installation more foolproof 2021-03-20 11:57:04 +01:00
Romain TISSERAND b5698ee101 Add command-line option to install firmware 2021-03-20 11:57:04 +01:00
Nekotekina 379138af27 Fix NtSetTimerResolution in no-gui mode (Win32)
Add dummy persistent timer with 10ms period.
Replace QTimer invocation with Emu.CallAfter().
This way, headless and no-gui modes should be affected by it.
2021-03-19 22:26:48 +03:00
Eladash 1864419561 Fix SPU mapped memory page size 2021-03-19 22:25:08 +03:00
Megamouse c4a8bb26fb VS: move projects to 3rdParty 2021-03-19 19:52:51 +03:00
Eladash a9ddb1d3b3 GUI: Implement full extraction of PUP
* Implement full extraction of PS3UPDAT.PUP.
* Implement TAR extraction via GUI.
* Use VFS to implement missing PS3 filesystem characters escaping.
* Use VFS to error on illegal paths. (illegal paths such as malware pointing to "/../../..and so on../C:/Windows")
2021-03-19 17:51:09 +01:00
Eladash 314670a347 Improve firmware installation error handling
* Add new error types and descriptions.
* Do not crash on missing 0x100 and 0x300 PUP file entries.
* Report an error on missing PUP package inner files.
* Fix overflow in file-size against header check.
* Move all header errors to pup_object class.
* Move verbose error descriptions to pup_object class.
* Minor optimizations.
2021-03-19 17:51:09 +01:00
Eladash ad49c54531 Fix race in render_creator (#9939) 2021-03-18 12:09:42 +03:00
Megamouse 43ac33c2b4 cellSaveDataEnableOverlay 2021-03-18 11:11:34 +03:00
Nekotekina 83fdcff178 Add commits 2021-03-17 23:53:31 +03:00
Nekotekina ee4009e123 Add supporters 2021-03-17 23:53:10 +03:00
Nekotekina 2decf1ecda Rename and move g_tls_current_cpu_thread inside cpu_thread
Don't declare extern inside get_current_cpu_thread().
Possible workaround for gcc-11.
2021-03-17 23:49:48 +03:00
Eladash 1d7fbd6a9a Fix sceNpTrophyGet(Trophy/Game)Icon 2021-03-17 22:31:57 +03:00
Eladash 1213708b72 Replace some log errors (#9980) 2021-03-17 17:19:35 +03:00
Megamouse 6cc5428d5e Qt: make some scrollbars thicker.
How are we supposed to grab them if they are so tiny?
2021-03-17 08:49:03 +01:00
Nekotekina 8fcebebae3 Implement lv2_mp_flag::cache
Identify /dev_hdd1 without unsafe path comparison.
2021-03-16 19:37:03 +03:00
Nekotekina f801dc6558 Save all 8 syscall_args 2021-03-16 19:33:37 +03:00
Eladash 8716ac554f Fix sys_raw_spu_destroy 2021-03-16 19:31:52 +03:00
Eladash d7b4753007 Make gamedata installation atomic as real PS3 2021-03-16 19:31:52 +03:00
Eladash a9b0d25c01 PPU Debugger: Fixup for syscall arguments (#9932) 2021-03-16 16:20:45 +03:00
Eladash 4c7fc8a70a Improve fs::container_stream::write (#9976)
Add overflow condition.
2021-03-16 14:03:58 +03:00
Megamouse f8e9ea45ba Qt: add bright arrows for tree views 2021-03-15 22:41:00 +01:00
Nekotekina 1b6c14be8d SPIRV: disable error on warnings 2021-03-15 22:31:05 +03:00
Eladash a5bb925a3d Thread.cpp: Add missing newline 2021-03-15 20:41:33 +03:00
shockdude 6a14849381 sys_usbd: DJ Hero Turntable Emulation (#9965)
* Initial Turntable Emulation
2021-03-14 23:48:50 +03:00
Megamouse f93dbb8f49 Qt: dont scale small icons, deal with size instead 2021-03-14 19:56:11 +01:00
Megamouse f83b19cecf Qt: Fix wide game icons (weird copy pasta error) 2021-03-14 19:56:11 +01:00
Megamouse 1e09be19f5 Qt: Fix PaintedPixmap crash if icon is null 2021-03-14 19:56:11 +01:00
Megamouse c1de0bc28c workaround for clang compilation 2021-03-14 16:46:16 +01:00
Megamouse 1a5a0f5eca overlays: Fix aspect ratio of custom bakground images 2021-03-14 16:46:16 +01:00
Megamouse 8b0cd60be9 Qt: Fix game icon canvas size 2021-03-14 16:46:16 +01:00
Megamouse 2239a52e9b Qt: Import Custom Shader Loading Icons
and refactor icon import
2021-03-14 16:46:16 +01:00
kd-11 c9214ce6c0 vk: Disable async streaming by default 2021-03-14 16:39:55 +03:00
Nekotekina bb9b5e6aff Enable -Wtautological-compare 2021-03-13 23:01:37 +03:00
Nekotekina 0327ecc5c1 Enable -Wduplicated-cond (GCC) 2021-03-13 18:46:59 +03:00
Nekotekina ccdea1c4ad Enable -Wduplicated-branches (GCC) 2021-03-13 18:03:08 +03:00
Nekotekina c22e1e71f0 Continue fixing strict aliasing warnings 2021-03-13 18:02:37 +03:00
Eladash aff63028d4 SCE Decryption: Detect illegal RAP files 2021-03-13 11:51:40 +01:00
Eladash 7a7b168af3 GUI: Atomic RAP file installation 2021-03-13 11:51:40 +01:00
Eladash bdf6a1c70e GUI: Handle all PUP files in drag-and-drop 2021-03-13 11:51:40 +01:00
Eladash d1e07434a1 GUI: Handle uppercase RAP file extension 2021-03-13 11:51:40 +01:00
Megamouse c0d823f1d8 Qt: Fix square custom icons 2021-03-13 10:19:39 +01:00
Megamouse 8d0947f07f Qt: Option for Custom Icons 2021-03-13 10:19:39 +01:00
Megamouse 161d8ef47a Qt: Center Custom Icons 2021-03-13 10:19:39 +01:00
Megamouse 8c139206d7 Qt: Import Custom Icons 2021-03-13 10:19:39 +01:00
jtscott e3a7fddddf Resolve minor typo 'verion' 2021-03-13 01:16:01 +01:00
Eladash 923ba6f3bb Fix sysutil_send_system_cmd at Emu.Stop() 2021-03-12 21:01:48 +03:00
Eladash 729cd9284e debugger: Fix PPU threads pausing 2021-03-12 13:01:12 +03:00
kd-11 140c5bfc3e Add asynchronous streaming to the GUI and auto-enable it
- Hopefully not many users are on very weak GPUs
2021-03-12 02:27:05 +03:00
kd-11 a5f0faefc3 vk: Check for uninitialized target before going into any scaling op 2021-03-12 02:27:05 +03:00
kd-11 608f8de347 vk: Solve GPU hang/reset due to waiting on events that are never signaled
- TODO: Some refactoring may be required to pair the primary and secondary CB and avoid such blunders
2021-03-12 02:27:05 +03:00
kd-11 3e8a00d264 Basic fixups 2021-03-12 02:27:05 +03:00
kd-11 7d5a72c9e0 vk: Add options to system configuration 2021-03-12 02:27:05 +03:00
kd-11 48d0f80a86 vk: Add an alternate async queue scheduler
- This version violates spec but does not rely on CPU threads to keep the GPU from hanging. It's ironically much safer to use.
2021-03-12 02:27:05 +03:00
kd-11 bd6c187fcd vk: Tune event polling for higher throughput 2021-03-12 02:27:05 +03:00
kd-11 585837a3f0 vk: Support new fxo usage pattern 2021-03-12 02:27:05 +03:00
kd-11 b4e821c28d vk: Flip on async texture uploads 2021-03-12 02:27:05 +03:00
kd-11 589ac1c5d4 vk: Optimization - avoid touching the mutex at all if possible even when there is no contention 2021-03-12 02:27:05 +03:00
kd-11 c9e8b87c60 vk: Properly clean up async scheduler 2021-03-12 02:27:05 +03:00
kd-11 41f5158247 vk: Sync main pipe with async jobs if any 2021-03-12 02:27:05 +03:00
kd-11 d2993474fb vk: Lazy-initialize image resource on first use when owned by a separate queue 2021-03-12 02:27:05 +03:00
kd-11 77e312fb99 vk: Add the async task scheduler 2021-03-12 02:27:05 +03:00
Eladash cd6ef2958b Add information about unnamed/main threads in logs and fatal dialog
* If thread is unnamed, keep log name empty for main thread, otherwise print thread id. In fatal dialog, main thread can be handled differently (with special remark that it's main thread).
* Always print thread id in fatal dialog, regardless of thread type.

Co-authored-by: Nekotekina <nekotekina@gmail.com>
2021-03-11 22:55:06 +03:00
Megamouse 40f3adc45f Overlays: Implement individual pulse 2021-03-11 20:48:12 +01:00
Eladash cfa2d4aaa8 Loader: Log FNID of imported/exported functions 2021-03-11 15:23:58 +03:00
arabek bdefeaf6f9 Use maybe_unused macro for chip var
Var chip is only used in the WIN32 ifdef block - use maybe_unused to silence the compiler warning about unused variable.
2021-03-11 14:33:04 +03:00
Eladash 0958c10f88 Improve TAR loader (#9908)
* Fix header magic test.
* Rewrite code to not use so many filesystem calls.
* Add many more error checks.
* Add missing NUL filetype.
* octalToDecimal(header.size) has been fixed to use fixed 12 characters range instead of endless string.
* Add many optimizations.
* Fix possible signed overflows with int, use the unisgned u64 type instead which allows for greater files as well.
* Log errors.
2021-03-11 02:26:39 +03:00
Nekotekina 4adf412049 Fix std::bit_cast misuse 2021-03-10 16:11:30 +03:00
Nekotekina 03332c340d Implement utils::bless (pointer cast)
Tries to workaround strict aliasing troubles.
Don't confuse with std::bless which works differently.
2021-03-10 16:02:00 +03:00
Eladash 63ecb56b51 PPU interpreter hotfix 2021-03-10 13:41:13 +03:00
Megamouse cbd895a29c Move code to cpp (#9938)
* GL: move GLOverlays code to cpp
* GL: move GLCompute code to cpp
* VK: move VKOverlays code to cpp
* VK: move VKCompute code to cpp
2021-03-10 00:58:08 +01:00
Nekotekina 9cbe77904d Revert changes in BufferUtils.cpp
Should fix #9933
2021-03-09 19:19:24 +03:00
Nekotekina a6350d5dd1 Fixup write_gather (Linux, BSD)
Split iovec into small portions (256 for now)
2021-03-09 15:54:04 +03:00
Nekotekina 19b5b47b26 Add -Wnull-dereference (commented out) 2021-03-09 15:54:04 +03:00
Eladash 52a0b38379 Workaround segfaults in Vulkan enumeration thread (#9935)
* Workaround segfaults in Vulkan enumeration thread
2021-03-09 13:50:58 +01:00
Nekotekina a4fdbf0a88 Enable -Wstrict-aliasing=1 (GCC)
Fixed partially.
2021-03-09 03:10:15 +03:00
Nekotekina 3990e2d3e6 Add -Wclobbered and -Wcast-function-type (no effect) 2021-03-09 03:10:15 +03:00
Nekotekina 53af2dbb3f Add/fix warning -Wignored-qualifiers (GCC/clang)
Fix simple_array::const_iterator as a part of it.
2021-03-09 03:09:50 +03:00
Nekotekina 5bdd1cf837 Remove some redundant code
Potential fix for future warnings.
2021-03-09 03:09:50 +03:00
dio-gh 5dfe3f414d fix colors for skyline (dark)
Fixes debugger colors in the dark Skyline stylesheet.
2021-03-09 01:07:32 +01:00
dio-gh 324fa10918 fix colors for skyline (bright)
Fixes debugger colors and the notice-level log message colors, the latter to the gray that is noted in the color palette.
2021-03-09 01:07:32 +01:00
dio-gh aad06faf1f fix debugger instr coloring
Fixes the missing color highlights from the currently executing instruction and the breakpoints.
2021-03-09 01:07:32 +01:00
Megamouse 1a3c01154a make from_hdd0_game check lowercase 2021-03-08 22:58:19 +03:00
xddxd df338f0552 Move sys_crashdump to it's own file and make it a module itself 2021-03-08 22:57:35 +03:00
Malcolm Jestadt e5d0e035d0 SPU LLVM: Rearange FM instruction for better performance
- Doesn't eliminate any instructions, but allows for better out of order execution.
2021-03-08 15:48:36 +03:00
xddxd 6d91a9fe6f Possible workaround for mobile Kepler chips 2021-03-08 15:46:03 +03:00
Megamouse 935e398930 patch_manager: expand first search results 2021-03-08 12:05:00 +01:00
Eladash 2afc7cbaaa GUI: Implement MSELF extraction tool (#9909)
* MSELF: fix overflow

* GUI: Implement MSELF extraction tool

* VS: fix mself files in vcxproj

* fix

* Update mself.cpp

* fixed
2021-03-07 17:59:37 +01:00
Megamouse 1b5cf118e7 Input/Qt: implement XInput battery level 2021-03-07 11:48:19 +01:00
Megamouse a3a4c0a906 overlays: don't count initial garbage values.
This might also shave off some microseconds.
2021-03-07 00:52:11 +01:00
Megamouse 3ae7debc17 Qt: Do not allow updates during emulation 2021-03-07 01:56:25 +03:00
Megamouse dab53f4e41 Cleanup Emu before the update reboot 2021-03-07 01:56:25 +03:00
Megamouse 9da7910fc9 Fix auto updates. Don't pass exe as arg0 to execl 2021-03-07 01:56:25 +03:00
Nekotekina 3609eb25c9 Implement thread_ctrl::is_main() 2021-03-06 23:10:31 +03:00
Nekotekina 55c75d2c87 Implement thread_ctrl::get_tid() 2021-03-06 23:10:31 +03:00
Nekotekina ded828dfc9 sysinfo.cpp: Implement utils::main_tid (main thread id)
Careful.
2021-03-06 23:10:31 +03:00
Nekotekina c69c70cf5f Another minor fix for fmt::split
Doesn't affect existing code.
If there are 2 or more separator, choose closest.
2021-03-06 19:30:09 +03:00
Nekotekina 7cd79714fa Minor fix for fmt::split with empty string
Doesn't affect existing code, I believe.
Return at least 1 empty string if is_skip_empty=false.
2021-03-06 19:26:41 +03:00
Nekotekina 87af905018 Enable -Wunused-parameter 2021-03-06 18:07:08 +03:00
Megamouse 7205a93751 add some log messages for debugging 2021-03-06 18:06:21 +03:00
GitArUs f8097a428c Allow games to list all savedata (#9547)
* cellSaveData - allow games to list all savedata, not only those they own.

Co-authored-by: Megamouse <studienricky89@googlemail.com>
2021-03-06 16:01:04 +03:00
Eladash 228988ca2b Fix utils::get_firmware_version()
* Do not crash on invalid file contents.
* Do not crash on unexpected file.open() error.
2021-03-06 14:53:40 +03:00
Megamouse d2b0b019ec DualSense: Fix initial ingame LED update 2021-03-06 11:15:54 +01:00
Eladash a5d74c5e96 GUI: Improve missing firmware handling
* Install PS3UPDAT.PUP at the spot when booting games whenever firmware is missing. The option to boot games without firmware is still supported when all firmware SPRX are HLEd in firmware settings.
* Pop-up a confirmation dialog in firmware installation if firmware is already installed.
2021-03-06 10:34:49 +01:00
Megamouse 3e7e077fad DS3/DS4: fix battery LED update 2021-03-06 02:07:02 +01:00
Megamouse dbb03ae2d7 dualsense: implement lightbar pulse (low battery) 2021-03-06 02:07:02 +01:00
Megamouse 06d2c5357b dualsense: fix LED updates 2021-03-06 02:07:02 +01:00
Megamouse c8e7530e37 dualsense: get hardware and firmware version 2021-03-06 02:07:02 +01:00
Megamouse cdffaa1598 dualsense: implement battery level 2021-03-06 02:07:02 +01:00
Megamouse b836d2497d dualsense: minor cleanup 2021-03-06 02:07:02 +01:00
Megamouse bdd94f053c Qt: reset battery progress bar when not supported. 2021-03-06 02:07:02 +01:00
Megamouse f88c3ae417 Qt: fix settings_dialog layout. Add stretches. 2021-03-05 14:46:52 +03:00
Megamouse b09ac19e61 VS 16.9.0 compilation workaround 2021-03-05 14:46:52 +03:00
Timothy Redaelli 826dc7d5a6 Fix linking with system curl 2021-03-04 12:22:19 +03:00
Timothy Redaelli fa5a2b6a85 SPUThread.cpp: remove "__attribute__((always_inline))"
cmp_rdata and mov_rdata are using __attribute__((always_inline)),
without inline, that is not supported on current g++ (see RPCS3#1546).

Moreover __attribute__((always_inline)) is a noop if used without inline so
just remove it.

A proper fix is to move the 2 functions in an header file as static
(with FORCE_INLINE) so it can be correctly inlined by the compiler.
2021-03-04 12:17:27 +03:00
Nekotekina 8b8120cfb7 Add commits 2021-03-03 17:38:36 +03:00
Nekotekina e6a3b59229 endian.hpp: simplify be_t/le_t constructors 2021-03-03 17:37:51 +03:00
RipleyTom 0eb0b1e1c9 Add some GT6 devices to whitelist 2021-03-03 17:30:16 +03:00
kd-11 1becd2f788 vk: Remove redundant double barrier
- Luckily it was not too harmful in single queue submissions
2021-03-03 13:17:04 +03:00
Megamouse 7c0b93f815 perf overlay: Don't allow 0 or 1 datapoint count
Doesn't render anyway
2021-03-03 00:33:46 +01:00
Megamouse fa852c7dbe perf overlay: add missing graph vertex
And fix potential division by 0
2021-03-03 00:33:46 +01:00
Megamouse 73ca2119ed perf overlay: add datapoint settings to GUI 2021-03-03 00:33:46 +01:00
Megamouse 86dbb859b7 perf overlay: add datapoint count config settings 2021-03-03 00:33:46 +01:00
Megamouse e1e370999e perf overlays: fix dynamic font resize of graphs 2021-03-03 00:33:46 +01:00
Megamouse 038c708a0a perf overlays: add detail level none (hides FPS) 2021-03-03 00:33:46 +01:00
Nekotekina c71bc25090 PPU: remove artificial 0x20000000 barrier for debug stats
Change it to 0xE0000000 (SPU demarcation line)
2021-03-02 21:58:49 +03:00
Nekotekina 52fe86b56c fixed_typemap.hpp: make it a bit fool-proof
Require objects to be non-copyable (move is still allowed).
2021-03-02 21:58:49 +03:00
Eladash 004ebfdaee SPU debugger: Implement MFC journal
* Allow to dump up to 1820 commands with up 128 bytes of data each, using key D with the debugger.
2021-03-02 21:57:51 +03:00
Eladash d0edd44a69 Atomic trophy status updates 2021-03-02 19:19:27 +03:00
Nekotekina ea5e837bd6 fixed_typemap.hpp: return reference 2021-03-02 16:08:14 +03:00
Nekotekina bbf52f3cea named_thread: fix bugs in std::forward usage
Fix few misused threads and other bugs.
2021-03-02 16:08:14 +03:00
Nekotekina d788b12a8e fixed_typemap.hpp: reduce indirection
Backported some changes from auto_typemap.hpp
Implemented methods init(), reset(), clear()
Disabled recreation support.
2021-03-02 16:08:14 +03:00
Nekotekina 8a9320c4ef auto_typemap.hpp: reduce indirection
Implement is_init() method.
Implement optional Size template arg for further optimization.
2021-03-02 16:08:14 +03:00
Nekotekina 5cc9bd7702 typeindices.hpp: upgrade with size and align info
This allows contiguous allocation (as in an aggregate).
2021-03-02 16:08:14 +03:00
Nekotekina aa7e2376ec shared_ptr.hpp: minor fixup for arrays 2021-03-02 16:08:14 +03:00
Eladash ff211a9508 LLVM: Do not crash on failure to create cache file 2021-03-02 16:07:51 +03:00
Megamouse 930895a218 DS3: fix LED battery status 2021-03-02 01:29:28 +01:00
Megamouse 3452e18da1 DS3: fix linux output report 2021-03-02 00:45:42 +01:00
Megamouse b5d4b5a21c DS3: fix regression: pad data is cleared even if there is no new data 2021-03-01 14:37:49 +01:00
Megamouse 2dc798d539 DS3: fix battery_level aquisition 2021-03-01 14:37:49 +01:00
Megamouse 805d52987f Qt/Input: set player LED in pad settings 2021-03-01 14:37:49 +01:00
Megamouse c2467b7b38 ds3: add led battery indicators (Linux only atm)
needs testing. maybe doesn't work
2021-03-01 14:37:49 +01:00
Megamouse 22b8cfd0ba input: add some sanity checks 2021-03-01 14:37:49 +01:00
Megamouse 10a55f16cc DS3: implement player LEDs 2021-03-01 14:37:49 +01:00
700 changed files with 22546 additions and 17844 deletions
+4 -4
View File
@@ -7,10 +7,10 @@ git submodule -q update --init --depth 1 $(awk '/path/ && !/llvm/ { print $3 }'
# Prefer newer Clang than in base system (see also .ci/install-freebsd.sh)
# libc++ isn't in llvm* packages, so download manually
fetch https://github.com/llvm/llvm-project/releases/download/llvmorg-11.0.0/libcxx-11.0.0.src.tar.xz
tar xf libcxx-11.0.0.src.tar.xz
export CC=clang11 CXX=clang++11
export CXXFLAGS="$CXXFLAGS -nostdinc++ -isystem $PWD/libcxx-11.0.0.src/include"
fetch https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.0/libcxx-12.0.0.src.tar.xz
tar xf libcxx-12.0.0.src.tar.xz
export CC=clang12 CXX=clang++12
export CXXFLAGS="$CXXFLAGS -nostdinc++ -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -isystem $PWD/libcxx-12.0.0.src/include"
CONFIGURE_ARGS="
-DWITH_LLVM=OFF
+8 -4
View File
@@ -5,7 +5,9 @@ export QT_BASE_DIR=/opt/qt${QTVERMIN}
export PATH=$QT_BASE_DIR/bin:$PATH
export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib
cd rpcs3 || exit 1
if [ -z "$CIRRUS_CI" ]; then
cd rpcs3 || exit 1
fi
# 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
@@ -55,9 +57,11 @@ ninja; build_status=$?;
cd ..
# If it compiled succesfully let's deploy depending on the build pipeline (Azure Pipelines).
# Azure publishes PRs as artifacts only.
{ [ "$IS_AZURE" = "true" ];
shellcheck .ci/*.sh
# 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
+5 -5
View File
@@ -12,7 +12,6 @@ if [ "$DEPLOY_APPIMAGE" = "true" ]; then
./squashfs-root/AppRun ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs
ls ./appdir/usr/lib/
rm -r ./appdir/usr/share/doc
rm ./appdir/usr/lib/libxcb*
cp "$(readlink -f /lib/x86_64-linux-gnu/libnsl.so.1)" ./appdir/usr/lib/libnsl.so.1
export PATH=/rpcs3/build/squashfs-root/usr/bin/:${PATH}
@@ -33,7 +32,8 @@ if [ "$DEPLOY_APPIMAGE" = "true" ]; then
printf "#include <bits/stdc++.h>\nint main(){std::make_exception_ptr(0);std::pmr::get_default_resource();}" | $CXX -x c++ -std=c++2a -o ./appdir/usr/optional/checker -
# Package it up and send it off
./squashfs-root/usr/bin/appimagetool /rpcs3/build/appdir
./squashfs-root/usr/bin/appimagetool "$APPDIR"
ls
COMM_TAG="$(grep 'version{.*}' ../rpcs3/rpcs3_version.cpp | awk -F[\{,] '{printf "%d.%d.%d", $2, $3, $4}')"
@@ -43,14 +43,14 @@ if [ "$DEPLOY_APPIMAGE" = "true" ]; then
mv ./RPCS3*.AppImage "$RPCS3_APPIMAGE"
# If we're building using Azure Pipelines, let's copy over the AppImage artifact
# If we're building using a CI, let's copy over the AppImage artifact
if [ -n "$BUILD_ARTIFACTSTAGINGDIRECTORY" ]; then
cp "$RPCS3_APPIMAGE" ~/artifacts
cp "$RPCS3_APPIMAGE" "$ARTDIR"
fi
FILESIZE=$(stat -c %s ./rpcs3*.AppImage)
SHA256SUM=$(sha256sum ./rpcs3*.AppImage | awk '{ print $1 }')
echo "${SHA256SUM};${FILESIZE}B" > /rpcs3/GitHubReleaseMessage.txt
echo "${SHA256SUM};${FILESIZE}B" > "$RELEASE_MESSAGE"
fi
+3 -3
View File
@@ -4,7 +4,7 @@
ARTIFACT_DIR="$BUILD_ARTIFACTSTAGINGDIRECTORY"
# Remove unecessary files
rm -f ./bin/rpcs3.exp ./bin/rpcs3.lib ./bin/rpcs3.pdb
rm -f ./bin/rpcs3.exp ./bin/rpcs3.lib ./bin/rpcs3.pdb ./bin/vc_redist.x64.exe
# Prepare compatibility database for packaging, as well as
# certificate for ssl (auto-updater)
@@ -20,5 +20,5 @@ sha256sum "$BUILD" | awk '{ print $1 }' | tee "$BUILD.sha256"
echo "$(cat "$BUILD.sha256");$(stat -c %s "$BUILD")B" > GitHubReleaseMessage.txt
# Move files to publishing directory
mv -- "$BUILD" "$ARTIFACT_DIR"
mv -- "$BUILD.sha256" "$ARTIFACT_DIR"
cp -- "$BUILD" "$ARTIFACT_DIR"
cp -- "$BUILD.sha256" "$ARTIFACT_DIR"
+4 -1
View File
@@ -1,10 +1,13 @@
# Variables set by Azure Pipelines
IS_AZURE
CI_HAS_ARTIFACTS
BUILD_REASON
BUILD_SOURCEVERSION
BUILD_ARTIFACTSTAGINGDIRECTORY
BUILD_REPOSITORY_NAME
BUILD_SOURCEBRANCHNAME
APPDIR
ARTDIR
RELEASE_MESSAGE
# Variables for build matrix
COMPILER
DEPLOY_APPIMAGE
+13
View File
@@ -0,0 +1,13 @@
#!/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
export "$key"="$val"
done < ".ci/azure-vars.env"
+1 -1
View File
@@ -24,7 +24,7 @@ curl -s \
cat release.json
id=$(grep '"id"' release.json | cut -d ':' -f2 | head -n1 | awk '{$1=$1;print}')
id=${id%?}
echo ${id:?}
echo "${id:?}"
upload_file()
{
+1 -1
View File
@@ -9,7 +9,7 @@ export ASSUME_ALWAYS_YES=true
pkg info # debug
# Prefer newer Clang than in base system (see also .ci/build-freebsd.sh)
pkg install llvm11
pkg install llvm12
# Mandatory dependencies (qt5-dbus and qt5-gui are pulled via qt5-widgets)
pkg install git ccache cmake ninja qt5-qmake qt5-buildtools qt5-widgets qt5-concurrent glew openal-soft ffmpeg
+3 -3
View File
@@ -10,7 +10,7 @@ PR_NUMBER="$SYSTEM_PULLREQUEST_PULLREQUESTID"
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_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${QT_VER_MAIN}.${QT_URL_VER}.win64_${QT_VER_MSVC}_64/${QT_VER}-0-${QT_DATE}"
QT_SUFFIX="-Windows-Windows_10-${QT_VER_MSVC_UP}-Windows-Windows_10-X86_64.7z"
QT_BASE_URL="${QT_HOST}${QT_PREFIX}qtbase${QT_SUFFIX}"
@@ -36,7 +36,7 @@ DEP_URLS=" \
# 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 $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
git submodule -q update --init --depth=1 --jobs=8 $(awk '/path/ && !/llvm/ { print $3 }' .gitmodules)
# Git bash doesn't have rev, so here it is
rev()
@@ -76,7 +76,7 @@ for url in $DEP_URLS; do
case "$url" in
*qt*) checksum=$(curl -L "${url}.sha1"); algo="sha1"; outDir='C:\Qt\' ;;
*llvm*) checksum=$(curl -L "${url}.sha256"); algo="sha256"; outDir="." ;;
*glslang*) checksum=$(curl -L "${url}.sha256"); algo="sha256"; outDir="./lib/Release - LLVM-x64" ;;
*glslang*) checksum=$(curl -L "${url}.sha256"); algo="sha256"; outDir="./lib/Release-x64" ;;
*Vulkan*)
# Vulkan setup needs to be run in batch environment
# Need to subshell this or else it doesn't wait
+96 -2
View File
@@ -1,5 +1,101 @@
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
# RPCS3_TOKEN: ENCRYPTED[13a0f18de9285e6c880e3aecbb54258245a74872af7d0fcb92447fa1200ceb6a4dc8acc880ddbf5e653d46336563ca72] # Replace this when we're using Cirrus for master releases!!
windows_task:
matrix:
- name: Cirrus Windows
windows_container:
image: cirrusci/windowsservercore:visualstudio2019
cpu: 8
memory: 16G
env:
CIRRUS_SHELL: "bash"
COMPILER: msvc
QT_VER_MAIN: '5'
BUILD_ARTIFACTSTAGINGDIRECTORY: ${CIRRUS_WORKING_DIR}\artifacts\
QT_VER: '5.15.2'
QT_VER_MSVC: 'msvc2019'
QT_DATE: '202011130602'
QTDIR: C:\Qt\${QT_VER}\${QT_VER_MSVC}_64
VULKAN_VER: '1.2.154.1'
VULKAN_SDK_SHA: 'b64471f3a720e649c1fae6535ea83b8c642655ebed1485bfdf15bf4d88f746d9'
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'
# - choco install -y python # Needed for SPIRV, use either this or make a new Docker image
# spirv_script:
# - export PATH=${PATH}:"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin"
# - cd "${CIRRUS_WORKING_DIR}/Vulkan/spirv-tools-build"
# - msbuild.exe spirv-tools-build.vcxproj //p:Configuration=Release //m
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-bionic:1.0
cpu: 4
memory: 16G
env:
BUILD_ARTIFACTSTAGINGDIRECTORY: ${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"
ARTDIR: ${CIRRUS_WORKING_DIR}/artifacts/
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
# '.ci/github-upload.sh'
# fi;
freebsd_task:
matrix:
@@ -13,7 +109,5 @@ freebsd_task:
CCACHE_DIR: /tmp/ccache_dir
ccache_cache:
folder: /tmp/ccache_dir
packages_cache:
folder: /var/cache/pkg
install_script: "sh -ex ./.ci/install-freebsd.sh"
script: "./.ci/build-freebsd.sh"
+5 -6
View File
@@ -1,6 +1,6 @@
# Getting Started
Before getting started using the emulator, read the [Quickstart Guide](https://rpcs3.net/quickstart) and the [FAQ](https://rpcs3.net/faq). After reading those, if you need support, visit our [Forums](https://forums.rpcs3.net).
Before getting started using the emulator, read the [Quickstart Guide](https://rpcs3.net/quickstart). After reading it, if you need support, check out [How to ask for Support](https://github.com/RPCS3/rpcs3/wiki/How-to-ask-for-Support).
# Issue Reporting
@@ -8,13 +8,12 @@ Before getting started using the emulator, read the [Quickstart Guide](https://r
**Before reporting an issue:**
- Check if your system matches all the minimum requirements listed in the [Quickstart Guide](https://rpcs3.net/quickstart);
- Check if the issue is meaningful for the team (e.g. The Last of Us doesn't work is obvious and therefore useless);
- Search older issues/forum threads to see if your issue was already submitted.
- Use understandable English. It doesn't need to be perfect, but clear enough to understand your message.
- While reporting issues, don't forget to include details about your system (OS, CPU, GPU, etc.), as well as the RPCS3.log file.
- Search older issues/forum threads to see if your issue was already submitted;
- Use understandable English. It doesn't need to be perfect, but clear enough to understand your message;
- While reporting issues, please follow the template for the type of issue you've selected (Regression Report, Bug Report or Feature Request), which is prefilled on the issue's textbox.
Submitting your test results for Commercial Games must be done on our forums. Please read the [Game Compatibility](https://github.com/RPCS3/rpcs3/wiki/Game-Compatibility) wiki page before doing so.
# Contributing
Check the [Coding Style Guidelines](https://github.com/RPCS3/rpcs3/wiki/Coding-Style), [Roadmap](https://github.com/RPCS3/rpcs3/wiki/Roadmap) and [Developer Information](https://github.com/RPCS3/rpcs3/wiki/Developer-Information). If you have any questions, hit us up on our [Discord Server](https://discord.me/RPCS3) in the **#development** channel.
Check the [Coding Style Guidelines](https://github.com/RPCS3/rpcs3/wiki/Coding-Style) and [Developer Information](https://github.com/RPCS3/rpcs3/wiki/Developer-Information). If you have any questions, hit us up on our [Discord Server](https://discord.me/RPCS3) in the **#development** channel.
@@ -15,6 +15,10 @@ Please briefly describe what has stopped working correctly.
## Details
Please describe the regression as accurately as possible.
#### 0. Make sure you're running with settings as close to default as possible
* **Do NOT enable any emulator game patches when reporting issues**
* Only change settings that are required for the game to work
#### 1. Please provide _exact_ build (or commit) information that introduced the regression you're reporting.
* Please see [How to find the build that caused a regression](https://wiki.rpcs3.net/index.php?title=Help:Using_different_versions_of_RPCS3#How_to_find_the_build_that_caused_a_regression.3F) in our wiki.
* You can find [History of RPCS3 builds](https://rpcs3.net/compatibility?b) here.
@@ -35,12 +39,12 @@ Please describe the regression as accurately as possible.
On Windows it will be near the executable.
* Attach the log:
+ Drag and drop your log file into the issue.
+ Or upload it to the cloud, such as Dropbox, Mega etc.
+ Or upload it to the cloud, such as Dropbox, Mega etc.
#### 3. If you describe graphical regression, please provide an RSX capture and a RenderDoc capture that demonstrate it.
* To create an RSX capture, use _Create_ _RSX_ _Capture_ under _Utilities_.
Captures will be stored in RPCS3 folder → captures.
+ Compress your capture with 7z, Rar etc.
+ Compress your capture with 7z, Rar etc.
And drag and drop it into the issue.
+ Or upload it to the cloud, such as Dropbox, Mega etc.
* To create a RenderDoc capture, please refer to [RenderDoc's documentation](https://renderdoc.org/docs/how/how_capture_frame.html).
@@ -59,4 +63,4 @@ You can find it in _Emulator_ tab in _Settings_.
* etc.
#### Please include.
* Anything else you deem to be important
* Anything else you deem to be important
+6 -2
View File
@@ -16,6 +16,10 @@ Please briefly describe what is not working correctly.
Please describe the problem as accurately as possible.
#### 0. Make sure you're running with settings as close to default as possible
* **Do NOT enable any emulator game patches when reporting issues**
* Only change settings that are required for the game to work
#### 1. Please attach RPCS3's log.
* Run the game until you find the issue.
* Completely close RPCS3, or move to the next step in case it has crashed.
@@ -28,12 +32,12 @@ Please describe the problem as accurately as possible.
On Windows it will be near the executable.
* Attach the log:
+ Drag and drop your log file into the issue.
+ Or upload it to the cloud, such as Dropbox, Mega etc.
+ Or upload it to the cloud, such as Dropbox, Mega etc.
#### 2. If you describe graphical issue, please provide an RSX capture and a RenderDoc capture that demonstrate it.
* To create an RSX capture, use _Create_ _RSX_ _Capture_ under _Utilities_.
Captures will be stored in RPCS3 folder → captures.
+ Compress your capture with 7z, Rar etc.
+ Compress your capture with 7z, Rar etc.
And drag and drop it into the issue.
+ Or upload it to the cloud, such as Dropbox, Mega etc.
* To create a RenderDoc capture, please refer to [RenderDoc's documentation](https://renderdoc.org/docs/how/how_capture_frame.html).
+12 -14
View File
@@ -1,20 +1,18 @@
## How to test a PR build
Please take into account, that RPCS3 build usually takes some time (about 20 min), so you can't access a build, if a PR was just submitted.
Please take into account, that RPCS3 build usually takes some time (about 15 mins), so you can't access a build if a PR was just submitted.
- Open a PR you want to test
- Scroll to the very bottom and locate "Checks" section
- Expand all checks
- Scroll to the very bottom and locate the **Checks** section
- Click on **Show all checks**
You are supposed to see something like this
![image](https://user-images.githubusercontent.com/44116740/102790039-f98f6d00-43b5-11eb-9134-2359b732508d.png)
- Click on **Linux_Build** or **Windows_Build** __Details__
- Click **View more details on Azure Pipelines** at the very bottom
![image](https://user-images.githubusercontent.com/44116740/102790281-45daad00-43b6-11eb-90e7-0fa8c37c31c6.png)
- Click on *1 artifact produced*
![image](https://user-images.githubusercontent.com/44116740/102790526-9a7e2800-43b6-11eb-9925-be1ea1c8bdad.png)
- Select a build for your OS and click three dots on the right, Click **Download artifacts**
![image](https://user-images.githubusercontent.com/44116740/102790636-c9949980-43b6-11eb-9692-1e3ba567b9be.png)
- Congratulations! You are now downloading RPCS3 build for specific PR.
![image](https://user-images.githubusercontent.com/10283761/116630952-2cd99e00-a94c-11eb-933e-986d6020ca92.png)
- Click on __Details__ on either **Cirrus Linux GCC** or **Cirrus Windows**
- Click **View more details on Cirrus CI** at the very bottom
![image](https://user-images.githubusercontent.com/10283761/116631111-5e526980-a94c-11eb-95f7-751e6f15e1ea.png)
- Click on the download button for **Artifact** on the **Artifacts** block
![image](https://user-images.githubusercontent.com/10283761/116631322-bee1a680-a94c-11eb-89a3-be365783582e.png)
Please note, that PR builds are not supposed to be stable, because they contain new changesets.
- Congratulations! You are now downloading an RPCS3 build for that specific PR.
__Please note that PR builds are not supposed to be stable because they contain new changesets.__
+7 -1
View File
@@ -9,7 +9,7 @@
# Compiled Static libraries
*.lai
*.la
# *.a # Commented out since OpenAL Soft's binaries use this extension.
*.a
*.opensdf
*.sdf
*.suo
@@ -45,6 +45,10 @@
!/bin
/bin/*
# Audio DLLs
!/bin/soft_oal.dll
!/bin/xaudio2_9redist.dll
# Themes
!/bin/GuiConfigs/
/bin/GuiConfigs/*.ini
@@ -65,6 +69,8 @@
*.vcxproj.user
enc_temp_folder/*
CMakeSettings.json
*PVS-Studio*
PVS/*
# Ignore other system generated files
x64/*
+1 -1
View File
@@ -53,7 +53,7 @@
url = https://github.com/glennrp/libpng.git
ignore = dirty
[submodule "3rdparty/libusb"]
path = 3rdparty/libusb
path = 3rdparty/libusb/src
url = https://github.com/libusb/libusb.git
ignore = dirty
[submodule "3rdparty/FAudio"]
+2 -2
View File
@@ -123,7 +123,7 @@ if(CMAKE_SYSTEM MATCHES "DragonFly|FreeBSD")
elseif(MSVC)
# Windows time.h defines timespec but doesn't add any flag for it, which makes libusb attempt to define it again
add_definitions(-DHAVE_STRUCT_TIMESPEC=1)
add_subdirectory(libusb_cmake EXCLUDE_FROM_ALL)
add_subdirectory(libusb EXCLUDE_FROM_ALL)
else()
if(USE_SYS_LIBUSB)
# we have the system libusb and have selected to use it
@@ -132,7 +132,7 @@ else()
else()
# we don't have the system libusb, so we compile from submodule
unset(LIBUSB_LIBRARIES CACHE)
add_subdirectory(libusb_cmake EXCLUDE_FROM_ALL)
add_subdirectory(libusb EXCLUDE_FROM_ALL)
endif()
endif()
+31 -32
View File
@@ -22,7 +22,7 @@ extern "C" {
#endif
/** Deprecated macro. */
/* Deprecated macros. */
#define OPENAL
#define ALAPI AL_API
#define ALAPIENTRY AL_APIENTRY
@@ -30,7 +30,7 @@ extern "C" {
#define AL_ILLEGAL_ENUM AL_INVALID_ENUM
#define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION
/** Supported AL version. */
/* Supported AL versions. */
#define AL_VERSION_1_0
#define AL_VERSION_1_1
@@ -234,7 +234,7 @@ typedef void ALvoid;
*/
#define AL_SOURCE_STATE 0x1010
/** Source state value. */
/* Source state values. */
#define AL_INITIAL 0x1011
#define AL_PLAYING 0x1012
#define AL_PAUSED 0x1013
@@ -300,7 +300,7 @@ typedef void ALvoid;
* Source maximum distance.
* Type: ALfloat
* Range: [0.0 - ]
* Default: +inf
* Default: FLT_MAX
*
* The distance above which the source is not attenuated any further with a
* clamped distance model, or where attenuation reaches 0.0 gain for linear
@@ -330,15 +330,18 @@ typedef void ALvoid;
*/
#define AL_SOURCE_TYPE 0x1027
/** Source type value. */
/* Source type values. */
#define AL_STATIC 0x1028
#define AL_STREAMING 0x1029
#define AL_UNDETERMINED 0x1030
/** Buffer format specifier. */
/** Unsigned 8-bit mono buffer format. */
#define AL_FORMAT_MONO8 0x1100
/** Signed 16-bit mono buffer format. */
#define AL_FORMAT_MONO16 0x1101
/** Unsigned 8-bit stereo buffer format. */
#define AL_FORMAT_STEREO8 0x1102
/** Signed 16-bit stereo buffer format. */
#define AL_FORMAT_STEREO16 0x1103
/** Buffer frequency (query only). */
@@ -350,11 +353,7 @@ typedef void ALvoid;
/** Buffer data size (query only). */
#define AL_SIZE 0x2004
/**
* Buffer state.
*
* Not for public use.
*/
/* Buffer state. Not for public use. */
#define AL_UNUSED 0x2010
#define AL_PENDING 0x2011
#define AL_PROCESSED 0x2012
@@ -441,7 +440,7 @@ AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value);
#define AL_DISTANCE_MODEL 0xD000
AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel);
/** Distance model value. */
/* Distance model values. */
#define AL_INVERSE_DISTANCE 0xD001
#define AL_INVERSE_DISTANCE_CLAMPED 0xD002
#define AL_LINEAR_DISTANCE 0xD003
@@ -449,12 +448,12 @@ AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel);
#define AL_EXPONENT_DISTANCE 0xD005
#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
/** Renderer State management. */
/* Renderer State management. */
AL_API void AL_APIENTRY alEnable(ALenum capability);
AL_API void AL_APIENTRY alDisable(ALenum capability);
AL_API ALboolean AL_APIENTRY alIsEnabled(ALenum capability);
/** State retrieval. */
/* State retrieval. */
AL_API const ALchar* AL_APIENTRY alGetString(ALenum param);
AL_API void AL_APIENTRY alGetBooleanv(ALenum param, ALboolean *values);
AL_API void AL_APIENTRY alGetIntegerv(ALenum param, ALint *values);
@@ -465,25 +464,25 @@ AL_API ALint AL_APIENTRY alGetInteger(ALenum param);
AL_API ALfloat AL_APIENTRY alGetFloat(ALenum param);
AL_API ALdouble AL_APIENTRY alGetDouble(ALenum param);
/**
* Error retrieval.
*
* Obtain the first error generated in the AL context since the last check.
*/
/* Error retrieval. */
/** Obtain the first error generated in the AL context since the last check. */
AL_API ALenum AL_APIENTRY alGetError(void);
/**
* Extension support.
*
* Query for the presence of an extension, and obtain any appropriate function
* pointers and enum values.
*/
/** Query for the presence of an extension on the AL context. */
AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extname);
/**
* Retrieve the address of a function. The returned function may be context-
* specific.
*/
AL_API void* AL_APIENTRY alGetProcAddress(const ALchar *fname);
/**
* Retrieve the value of an enum. The returned value may be context-specific.
*/
AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *ename);
/** Set Listener parameters */
/* Set Listener parameters */
AL_API void AL_APIENTRY alListenerf(ALenum param, ALfloat value);
AL_API void AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
AL_API void AL_APIENTRY alListenerfv(ALenum param, const ALfloat *values);
@@ -491,7 +490,7 @@ AL_API void AL_APIENTRY alListeneri(ALenum param, ALint value);
AL_API void AL_APIENTRY alListener3i(ALenum param, ALint value1, ALint value2, ALint value3);
AL_API void AL_APIENTRY alListeneriv(ALenum param, const ALint *values);
/** Get Listener parameters */
/* Get Listener parameters */
AL_API void AL_APIENTRY alGetListenerf(ALenum param, ALfloat *value);
AL_API void AL_APIENTRY alGetListener3f(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
AL_API void AL_APIENTRY alGetListenerfv(ALenum param, ALfloat *values);
@@ -507,7 +506,7 @@ AL_API void AL_APIENTRY alDeleteSources(ALsizei n, const ALuint *sources);
/** Verify a handle is a valid Source. */
AL_API ALboolean AL_APIENTRY alIsSource(ALuint source);
/** Set Source parameters. */
/* Set Source parameters. */
AL_API void AL_APIENTRY alSourcef(ALuint source, ALenum param, ALfloat value);
AL_API void AL_APIENTRY alSource3f(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
AL_API void AL_APIENTRY alSourcefv(ALuint source, ALenum param, const ALfloat *values);
@@ -515,7 +514,7 @@ AL_API void AL_APIENTRY alSourcei(ALuint source, ALenum param, ALint value);
AL_API void AL_APIENTRY alSource3i(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3);
AL_API void AL_APIENTRY alSourceiv(ALuint source, ALenum param, const ALint *values);
/** Get Source parameters. */
/* Get Source parameters. */
AL_API void AL_APIENTRY alGetSourcef(ALuint source, ALenum param, ALfloat *value);
AL_API void AL_APIENTRY alGetSource3f(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
AL_API void AL_APIENTRY alGetSourcefv(ALuint source, ALenum param, ALfloat *values);
@@ -558,7 +557,7 @@ AL_API ALboolean AL_APIENTRY alIsBuffer(ALuint buffer);
/** Specifies the data to be copied into a buffer */
AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq);
/** Set Buffer parameters, */
/* Set Buffer parameters, */
AL_API void AL_APIENTRY alBufferf(ALuint buffer, ALenum param, ALfloat value);
AL_API void AL_APIENTRY alBuffer3f(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3);
AL_API void AL_APIENTRY alBufferfv(ALuint buffer, ALenum param, const ALfloat *values);
@@ -566,7 +565,7 @@ AL_API void AL_APIENTRY alBufferi(ALuint buffer, ALenum param, ALint value);
AL_API void AL_APIENTRY alBuffer3i(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3);
AL_API void AL_APIENTRY alBufferiv(ALuint buffer, ALenum param, const ALint *values);
/** Get Buffer parameters. */
/* Get Buffer parameters. */
AL_API void AL_APIENTRY alGetBufferf(ALuint buffer, ALenum param, ALfloat *value);
AL_API void AL_APIENTRY alGetBuffer3f(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3);
AL_API void AL_APIENTRY alGetBufferfv(ALuint buffer, ALenum param, ALfloat *values);
@@ -574,7 +573,7 @@ AL_API void AL_APIENTRY alGetBufferi(ALuint buffer, ALenum param, ALint *value);
AL_API void AL_APIENTRY alGetBuffer3i(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3);
AL_API void AL_APIENTRY alGetBufferiv(ALuint buffer, ALenum param, ALint *values);
/** Pointer-to-function type, useful for dynamically getting AL entry points. */
/* Pointer-to-function type, useful for dynamically getting AL entry points. */
typedef void (AL_APIENTRY *LPALENABLE)(ALenum capability);
typedef void (AL_APIENTRY *LPALDISABLE)(ALenum capability);
typedef ALboolean (AL_APIENTRY *LPALISENABLED)(ALenum capability);
+54 -21
View File
@@ -22,7 +22,7 @@ extern "C" {
#endif
/** Deprecated macro. */
/* Deprecated macros. */
#define ALCAPI ALC_API
#define ALCAPIENTRY ALC_APIENTRY
#define ALC_INVALID 0
@@ -89,7 +89,7 @@ typedef void ALCvoid;
/** Context attribute: <int> Hz. */
#define ALC_REFRESH 0x1008
/** Context attribute: AL_TRUE or AL_FALSE. */
/** Context attribute: AL_TRUE or AL_FALSE synchronous context? */
#define ALC_SYNC 0x1009
/** Context attribute: <int> requested Mono (3D) Sources. */
@@ -117,12 +117,14 @@ typedef void ALCvoid;
#define ALC_OUT_OF_MEMORY 0xA005
/** Runtime ALC version. */
/** Runtime ALC major version. */
#define ALC_MAJOR_VERSION 0x1000
/** Runtime ALC minor version. */
#define ALC_MINOR_VERSION 0x1001
/** Context attribute list properties. */
/** Context attribute list size. */
#define ALC_ATTRIBUTES_SIZE 0x1002
/** Context attribute list properties. */
#define ALC_ALL_ATTRIBUTES 0x1003
/** String for the default device specifier. */
@@ -166,49 +168,80 @@ typedef void ALCvoid;
#define ALC_ALL_DEVICES_SPECIFIER 0x1013
/** Context management. */
ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCint* attrlist);
/* Context management. */
/** Create and attach a context to the given device. */
ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCint *attrlist);
/**
* Makes the given context the active process-wide context. Passing NULL clears
* the active context.
*/
ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context);
/** Resumes processing updates for the given context. */
ALC_API void ALC_APIENTRY alcProcessContext(ALCcontext *context);
/** Suspends updates for the given context. */
ALC_API void ALC_APIENTRY alcSuspendContext(ALCcontext *context);
/** Remove a context from its device and destroys it. */
ALC_API void ALC_APIENTRY alcDestroyContext(ALCcontext *context);
/** Returns the currently active context. */
ALC_API ALCcontext* ALC_APIENTRY alcGetCurrentContext(void);
/** Returns the device that a particular context is attached to. */
ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *context);
/** Device management. */
/* Device management. */
/** Opens the named playback device. */
ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *devicename);
/** Closes the given playback device. */
ALC_API ALCboolean ALC_APIENTRY alcCloseDevice(ALCdevice *device);
/* Error support. */
/**
* Error support.
*
* Obtain the most recent Device error.
*/
/** Obtain the most recent Device error. */
ALC_API ALCenum ALC_APIENTRY alcGetError(ALCdevice *device);
/* Extension support. */
/**
* Extension support.
*
* Query for the presence of an extension, and obtain any appropriate
* function pointers and enum values.
* Query for the presence of an extension on the device. Pass a NULL device to
* query a device-inspecific extension.
*/
ALC_API ALCboolean ALC_APIENTRY alcIsExtensionPresent(ALCdevice *device, const ALCchar *extname);
ALC_API void* ALC_APIENTRY alcGetProcAddress(ALCdevice *device, const ALCchar *funcname);
/**
* Retrieve the address of a function. Given a non-NULL device, the returned
* function may be device-specific.
*/
ALC_API ALCvoid* ALC_APIENTRY alcGetProcAddress(ALCdevice *device, const ALCchar *funcname);
/**
* Retrieve the value of an enum. Given a non-NULL device, the returned value
* may be device-specific.
*/
ALC_API ALCenum ALC_APIENTRY alcGetEnumValue(ALCdevice *device, const ALCchar *enumname);
/** Query function. */
/* Query functions. */
/** Returns information about the device, and error strings. */
ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum param);
/** Returns information about the device and the version of OpenAL. */
ALC_API void ALC_APIENTRY alcGetIntegerv(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values);
/** Capture function. */
/* Capture functions. */
/**
* Opens the named capture device with the given frequency, format, and buffer
* size.
*/
ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize);
/** Closes the given capture device. */
ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice(ALCdevice *device);
/** Starts capturing samples into the device buffer. */
ALC_API void ALC_APIENTRY alcCaptureStart(ALCdevice *device);
/** Stops capturing samples. Samples in the device buffer remain available. */
ALC_API void ALC_APIENTRY alcCaptureStop(ALCdevice *device);
/** Reads samples from the device buffer. */
ALC_API void ALC_APIENTRY alcCaptureSamples(ALCdevice *device, ALCvoid *buffer, ALCsizei samples);
/** Pointer-to-function type, useful for dynamically getting ALC entry points. */
/* Pointer-to-function type, useful for dynamically getting ALC entry points. */
typedef ALCcontext* (ALC_APIENTRY *LPALCCREATECONTEXT)(ALCdevice *device, const ALCint *attrlist);
typedef ALCboolean (ALC_APIENTRY *LPALCMAKECONTEXTCURRENT)(ALCcontext *context);
typedef void (ALC_APIENTRY *LPALCPROCESSCONTEXT)(ALCcontext *context);
@@ -220,7 +253,7 @@ typedef ALCdevice* (ALC_APIENTRY *LPALCOPENDEVICE)(const ALCchar *devicename
typedef ALCboolean (ALC_APIENTRY *LPALCCLOSEDEVICE)(ALCdevice *device);
typedef ALCenum (ALC_APIENTRY *LPALCGETERROR)(ALCdevice *device);
typedef ALCboolean (ALC_APIENTRY *LPALCISEXTENSIONPRESENT)(ALCdevice *device, const ALCchar *extname);
typedef void* (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname);
typedef ALCvoid* (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname);
typedef ALCenum (ALC_APIENTRY *LPALCGETENUMVALUE)(ALCdevice *device, const ALCchar *enumname);
typedef const ALCchar* (ALC_APIENTRY *LPALCGETSTRING)(ALCdevice *device, ALCenum param);
typedef void (ALC_APIENTRY *LPALCGETINTEGERV)(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values);
+68 -19
View File
@@ -22,17 +22,20 @@
#define AL_ALEXT_H
#include <stddef.h>
/* Define int64_t and uint64_t types */
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#include <inttypes.h>
#elif defined(_WIN32) && defined(__GNUC__)
/* Define int64 and uint64 types */
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
(defined(__cplusplus) && __cplusplus >= 201103L)
#include <stdint.h>
typedef int64_t _alsoft_int64_t;
typedef uint64_t _alsoft_uint64_t;
#elif defined(_WIN32)
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
typedef __int64 _alsoft_int64_t;
typedef unsigned __int64 _alsoft_uint64_t;
#else
/* Fallback if nothing above works */
#include <inttypes.h>
#include <stdint.h>
typedef int64_t _alsoft_int64_t;
typedef uint64_t _alsoft_uint64_t;
#endif
#include "alc.h"
@@ -158,9 +161,9 @@ extern "C" {
#ifndef AL_EXT_STATIC_BUFFER
#define AL_EXT_STATIC_BUFFER 1
typedef ALvoid (AL_APIENTRY*PFNALBUFFERDATASTATICPROC)(const ALint,ALenum,ALvoid*,ALsizei,ALsizei);
typedef void (AL_APIENTRY*PFNALBUFFERDATASTATICPROC)(const ALint,ALenum,ALvoid*,ALsizei,ALsizei);
#ifdef AL_ALEXT_PROTOTYPES
AL_API ALvoid AL_APIENTRY alBufferDataStatic(const ALint buffer, ALenum format, ALvoid *data, ALsizei len, ALsizei freq);
AL_API void AL_APIENTRY alBufferDataStatic(const ALint buffer, ALenum format, ALvoid *data, ALsizei len, ALsizei freq);
#endif
#endif
@@ -193,9 +196,9 @@ ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void);
#define AL_SOFT_buffer_sub_data 1
#define AL_BYTE_RW_OFFSETS_SOFT 0x1031
#define AL_SAMPLE_RW_OFFSETS_SOFT 0x1032
typedef ALvoid (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei);
typedef void (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei);
#ifdef AL_ALEXT_PROTOTYPES
AL_API ALvoid AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length);
AL_API void AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length);
#endif
#endif
@@ -343,8 +346,8 @@ ALC_API void ALC_APIENTRY alcRenderSamplesSOFT(ALCdevice *device, ALCvoid *buffe
#define AL_SOFT_source_latency 1
#define AL_SAMPLE_OFFSET_LATENCY_SOFT 0x1200
#define AL_SEC_OFFSET_LATENCY_SOFT 0x1201
typedef int64_t ALint64SOFT;
typedef uint64_t ALuint64SOFT;
typedef _alsoft_int64_t ALint64SOFT;
typedef _alsoft_uint64_t ALuint64SOFT;
typedef void (AL_APIENTRY*LPALSOURCEDSOFT)(ALuint,ALenum,ALdouble);
typedef void (AL_APIENTRY*LPALSOURCE3DSOFT)(ALuint,ALenum,ALdouble,ALdouble,ALdouble);
typedef void (AL_APIENTRY*LPALSOURCEDVSOFT)(ALuint,ALenum,const ALdouble*);
@@ -381,11 +384,11 @@ AL_API void AL_APIENTRY alGetSourcei64vSOFT(ALuint source, ALenum param, ALint64
#ifndef AL_SOFT_deferred_updates
#define AL_SOFT_deferred_updates 1
#define AL_DEFERRED_UPDATES_SOFT 0xC002
typedef ALvoid (AL_APIENTRY*LPALDEFERUPDATESSOFT)(void);
typedef ALvoid (AL_APIENTRY*LPALPROCESSUPDATESSOFT)(void);
typedef void (AL_APIENTRY*LPALDEFERUPDATESSOFT)(void);
typedef void (AL_APIENTRY*LPALPROCESSUPDATESSOFT)(void);
#ifdef AL_ALEXT_PROTOTYPES
AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void);
AL_API ALvoid AL_APIENTRY alProcessUpdatesSOFT(void);
AL_API void AL_APIENTRY alDeferUpdatesSOFT(void);
AL_API void AL_APIENTRY alProcessUpdatesSOFT(void);
#endif
#endif
@@ -496,8 +499,8 @@ AL_API const ALchar* AL_APIENTRY alGetStringiSOFT(ALenum pname, ALsizei index);
#ifndef ALC_SOFT_device_clock
#define ALC_SOFT_device_clock 1
typedef int64_t ALCint64SOFT;
typedef uint64_t ALCuint64SOFT;
typedef _alsoft_int64_t ALCint64SOFT;
typedef _alsoft_uint64_t ALCuint64SOFT;
#define ALC_DEVICE_CLOCK_SOFT 0x1600
#define ALC_DEVICE_LATENCY_SOFT 0x1601
#define ALC_DEVICE_CLOCK_LATENCY_SOFT 0x1602
@@ -530,6 +533,52 @@ ALC_API void ALC_APIENTRY alcGetInteger64vSOFT(ALCdevice *device, ALCenum pname,
#define AL_N3D_SOFT 0x0002
#endif
#ifndef ALC_SOFT_loopback_bformat
#define ALC_SOFT_loopback_bformat 1
#define ALC_AMBISONIC_LAYOUT_SOFT 0x1997
#define ALC_AMBISONIC_SCALING_SOFT 0x1998
#define ALC_AMBISONIC_ORDER_SOFT 0x1999
#define ALC_MAX_AMBISONIC_ORDER_SOFT 0x199B
#define ALC_BFORMAT3D_SOFT 0x1507
/* Ambisonic layouts */
#define ALC_FUMA_SOFT 0x0000
#define ALC_ACN_SOFT 0x0001
/* Ambisonic scalings (normalization) */
/*#define ALC_FUMA_SOFT*/
#define ALC_SN3D_SOFT 0x0001
#define ALC_N3D_SOFT 0x0002
#endif
#ifndef AL_SOFT_effect_target
#define AL_SOFT_effect_target
#define AL_EFFECTSLOT_TARGET_SOFT 0x199C
#endif
#ifndef AL_SOFT_events
#define AL_SOFT_events 1
#define AL_EVENT_CALLBACK_FUNCTION_SOFT 0x19A2
#define AL_EVENT_CALLBACK_USER_PARAM_SOFT 0x19A3
#define AL_EVENT_TYPE_BUFFER_COMPLETED_SOFT 0x19A4
#define AL_EVENT_TYPE_SOURCE_STATE_CHANGED_SOFT 0x19A5
#define AL_EVENT_TYPE_DISCONNECTED_SOFT 0x19A6
typedef void (AL_APIENTRY*ALEVENTPROCSOFT)(ALenum eventType, ALuint object, ALuint param,
ALsizei length, const ALchar *message,
void *userParam);
typedef void (AL_APIENTRY*LPALEVENTCONTROLSOFT)(ALsizei count, const ALenum *types, ALboolean enable);
typedef void (AL_APIENTRY*LPALEVENTCALLBACKSOFT)(ALEVENTPROCSOFT callback, void *userParam);
typedef void* (AL_APIENTRY*LPALGETPOINTERSOFT)(ALenum pname);
typedef void (AL_APIENTRY*LPALGETPOINTERVSOFT)(ALenum pname, void **values);
#ifdef AL_ALEXT_PROTOTYPES
AL_API void AL_APIENTRY alEventControlSOFT(ALsizei count, const ALenum *types, ALboolean enable);
AL_API void AL_APIENTRY alEventCallbackSOFT(ALEVENTPROCSOFT callback, void *userParam);
AL_API void* AL_APIENTRY alGetPointerSOFT(ALenum pname);
AL_API void AL_APIENTRY alGetPointervSOFT(ALenum pname, void **values);
#endif
#endif
#ifdef __cplusplus
}
#endif
+30 -30
View File
@@ -243,41 +243,41 @@ typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat*
typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, ALfloat*);
#ifdef AL_ALEXT_PROTOTYPES
AL_API ALvoid AL_APIENTRY alGenEffects(ALsizei n, ALuint *effects);
AL_API ALvoid AL_APIENTRY alDeleteEffects(ALsizei n, const ALuint *effects);
AL_API void AL_APIENTRY alGenEffects(ALsizei n, ALuint *effects);
AL_API void AL_APIENTRY alDeleteEffects(ALsizei n, const ALuint *effects);
AL_API ALboolean AL_APIENTRY alIsEffect(ALuint effect);
AL_API ALvoid AL_APIENTRY alEffecti(ALuint effect, ALenum param, ALint iValue);
AL_API ALvoid AL_APIENTRY alEffectiv(ALuint effect, ALenum param, const ALint *piValues);
AL_API ALvoid AL_APIENTRY alEffectf(ALuint effect, ALenum param, ALfloat flValue);
AL_API ALvoid AL_APIENTRY alEffectfv(ALuint effect, ALenum param, const ALfloat *pflValues);
AL_API ALvoid AL_APIENTRY alGetEffecti(ALuint effect, ALenum param, ALint *piValue);
AL_API ALvoid AL_APIENTRY alGetEffectiv(ALuint effect, ALenum param, ALint *piValues);
AL_API ALvoid AL_APIENTRY alGetEffectf(ALuint effect, ALenum param, ALfloat *pflValue);
AL_API ALvoid AL_APIENTRY alGetEffectfv(ALuint effect, ALenum param, ALfloat *pflValues);
AL_API void AL_APIENTRY alEffecti(ALuint effect, ALenum param, ALint iValue);
AL_API void AL_APIENTRY alEffectiv(ALuint effect, ALenum param, const ALint *piValues);
AL_API void AL_APIENTRY alEffectf(ALuint effect, ALenum param, ALfloat flValue);
AL_API void AL_APIENTRY alEffectfv(ALuint effect, ALenum param, const ALfloat *pflValues);
AL_API void AL_APIENTRY alGetEffecti(ALuint effect, ALenum param, ALint *piValue);
AL_API void AL_APIENTRY alGetEffectiv(ALuint effect, ALenum param, ALint *piValues);
AL_API void AL_APIENTRY alGetEffectf(ALuint effect, ALenum param, ALfloat *pflValue);
AL_API void AL_APIENTRY alGetEffectfv(ALuint effect, ALenum param, ALfloat *pflValues);
AL_API ALvoid AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters);
AL_API ALvoid AL_APIENTRY alDeleteFilters(ALsizei n, const ALuint *filters);
AL_API void AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters);
AL_API void AL_APIENTRY alDeleteFilters(ALsizei n, const ALuint *filters);
AL_API ALboolean AL_APIENTRY alIsFilter(ALuint filter);
AL_API ALvoid AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint iValue);
AL_API ALvoid AL_APIENTRY alFilteriv(ALuint filter, ALenum param, const ALint *piValues);
AL_API ALvoid AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue);
AL_API ALvoid AL_APIENTRY alFilterfv(ALuint filter, ALenum param, const ALfloat *pflValues);
AL_API ALvoid AL_APIENTRY alGetFilteri(ALuint filter, ALenum param, ALint *piValue);
AL_API ALvoid AL_APIENTRY alGetFilteriv(ALuint filter, ALenum param, ALint *piValues);
AL_API ALvoid AL_APIENTRY alGetFilterf(ALuint filter, ALenum param, ALfloat *pflValue);
AL_API ALvoid AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pflValues);
AL_API void AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint iValue);
AL_API void AL_APIENTRY alFilteriv(ALuint filter, ALenum param, const ALint *piValues);
AL_API void AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue);
AL_API void AL_APIENTRY alFilterfv(ALuint filter, ALenum param, const ALfloat *pflValues);
AL_API void AL_APIENTRY alGetFilteri(ALuint filter, ALenum param, ALint *piValue);
AL_API void AL_APIENTRY alGetFilteriv(ALuint filter, ALenum param, ALint *piValues);
AL_API void AL_APIENTRY alGetFilterf(ALuint filter, ALenum param, ALfloat *pflValue);
AL_API void AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pflValues);
AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots);
AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint *effectslots);
AL_API void AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots);
AL_API void AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint *effectslots);
AL_API ALboolean AL_APIENTRY alIsAuxiliaryEffectSlot(ALuint effectslot);
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue);
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *piValues);
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue);
AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, const ALfloat *pflValues);
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue);
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues);
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue);
AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues);
AL_API void AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue);
AL_API void AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *piValues);
AL_API void AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue);
AL_API void AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, const ALfloat *pflValues);
AL_API void AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue);
AL_API void AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues);
AL_API void AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue);
AL_API void AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues);
#endif
/* Filter ranges and defaults. */
+80
View File
@@ -1,35 +1,84 @@
EXPORTS
alAuxiliaryEffectSlotPlaySOFT
alAuxiliaryEffectSlotPlayvSOFT
alAuxiliaryEffectSlotStopSOFT
alAuxiliaryEffectSlotStopvSOFT
alAuxiliaryEffectSlotf
alAuxiliaryEffectSlotfv
alAuxiliaryEffectSloti
alAuxiliaryEffectSlotiv
alBuffer3f
alBuffer3i
alBufferCallbackSOFT
alBufferData
alBufferSamplesSOFT
alBufferStorageSOFT
alBufferSubDataSOFT
alBufferSubSamplesSOFT
alBufferf
alBufferfv
alBufferi
alBufferiv
alDeferUpdatesSOFT
alDeleteAuxiliaryEffectSlots
alDeleteBuffers
alDeleteEffects
alDeleteFilters
alDeleteSources
alDisable
alDistanceModel
alDopplerFactor
alDopplerVelocity
alEffectf
alEffectfv
alEffecti
alEffectiv
alEnable
alEventCallbackSOFT
alEventControlSOFT
alFilterf
alFilterfv
alFilteri
alFilteriv
alFlushMappedBufferSOFT
alGenAuxiliaryEffectSlots
alGenBuffers
alGenEffects
alGenFilters
alGenSources
alGetAuxiliaryEffectSlotf
alGetAuxiliaryEffectSlotfv
alGetAuxiliaryEffectSloti
alGetAuxiliaryEffectSlotiv
alGetBoolean
alGetBooleanv
alGetBuffer3PtrSOFT
alGetBuffer3f
alGetBuffer3i
alGetBufferPtrSOFT
alGetBufferPtrvSOFT
alGetBufferSamplesSOFT
alGetBufferf
alGetBufferfv
alGetBufferi
alGetBufferiv
alGetDouble
alGetDoublev
alGetEffectf
alGetEffectfv
alGetEffecti
alGetEffectiv
alGetEnumValue
alGetError
alGetFilterf
alGetFilterfv
alGetFilteri
alGetFilteriv
alGetFloat
alGetFloatv
alGetInteger
alGetInteger64SOFT
alGetInteger64vSOFT
alGetIntegerv
alGetListener3f
alGetListener3i
@@ -37,17 +86,30 @@ EXPORTS
alGetListenerfv
alGetListeneri
alGetListeneriv
alGetPointerSOFT
alGetPointervSOFT
alGetProcAddress
alGetSource3dSOFT
alGetSource3f
alGetSource3i
alGetSource3i64SOFT
alGetSourcedSOFT
alGetSourcedvSOFT
alGetSourcef
alGetSourcefv
alGetSourcei
alGetSourcei64SOFT
alGetSourcei64vSOFT
alGetSourceiv
alGetString
alGetStringiSOFT
alIsAuxiliaryEffectSlot
alIsBuffer
alIsBufferFormatSupportedSOFT
alIsEffect
alIsEnabled
alIsExtensionPresent
alIsFilter
alIsSource
alListener3f
alListener3i
@@ -55,8 +117,12 @@ EXPORTS
alListenerfv
alListeneri
alListeneriv
alMapBufferSOFT
alProcessUpdatesSOFT
alSource3dSOFT
alSource3f
alSource3i
alSource3i64SOFT
alSourcePause
alSourcePausev
alSourcePlay
@@ -67,11 +133,16 @@ EXPORTS
alSourceStop
alSourceStopv
alSourceUnqueueBuffers
alSourcedSOFT
alSourcedvSOFT
alSourcef
alSourcefv
alSourcei
alSourcei64SOFT
alSourcei64vSOFT
alSourceiv
alSpeedOfSound
alUnmapBufferSOFT
alcCaptureCloseDevice
alcCaptureOpenDevice
alcCaptureSamples
@@ -80,17 +151,26 @@ EXPORTS
alcCloseDevice
alcCreateContext
alcDestroyContext
alcDevicePauseSOFT
alcDeviceResumeSOFT
alcGetContextsDevice
alcGetCurrentContext
alcGetEnumValue
alcGetError
alcGetInteger64vSOFT
alcGetIntegerv
alcGetProcAddress
alcGetString
alcGetStringiSOFT
alcGetThreadContext
alcIsExtensionPresent
alcIsRenderFormatSupportedSOFT
alcLoopbackOpenDeviceSOFT
alcMakeContextCurrent
alcOpenDevice
alcProcessContext
alcRenderSamplesSOFT
alcResetDeviceSOFT
alcSetThreadContext
alcSuspendContext
alsoft_get_version
Binary file not shown.
+10 -9
View File
@@ -18,10 +18,10 @@
// Current name of the DLL shipped in the same SDK as this header.
// The name reflects the current version
#define XAUDIO2_DLL_A "xaudio2redist.dll"
#define XAUDIO2_DLL_W L"xaudio2redist.dll"
#define XAUDIO2D_DLL_A "xaudio2redist.dll"
#define XAUDIO2D_DLL_W L"xaudio2redist.dll"
#define XAUDIO2_DLL_A "xaudio2_9redist.dll"
#define XAUDIO2_DLL_W L"xaudio2_9redist.dll"
#define XAUDIO2D_DLL_A "xaudio2_9redist.dll"
#define XAUDIO2D_DLL_W L"xaudio2_9redist.dll"
#ifdef UNICODE
#define XAUDIO2_DLL XAUDIO2_DLL_W
@@ -446,7 +446,7 @@ DECLARE_INTERFACE_(IXAudio2, IUnknown)
// ARGUMENTS:
// pCallback - Callback interface to be called during each processing pass.
//
STDMETHOD(RegisterForCallbacks) (_In_ IXAudio2EngineCallback* pCallback) PURE;
STDMETHOD(RegisterForCallbacks) (THIS_ _In_ IXAudio2EngineCallback* pCallback) PURE;
// NAME: IXAudio2::UnregisterForCallbacks
// DESCRIPTION: Removes an existing receiver of XAudio2 engine callbacks.
@@ -454,7 +454,7 @@ DECLARE_INTERFACE_(IXAudio2, IUnknown)
// ARGUMENTS:
// pCallback - Previously registered callback interface to be removed.
//
STDMETHOD_(void, UnregisterForCallbacks) (_In_ IXAudio2EngineCallback* pCallback) PURE;
STDMETHOD_(void, UnregisterForCallbacks) (THIS_ _In_ IXAudio2EngineCallback* pCallback) PURE;
// NAME: IXAudio2::CreateSourceVoice
// DESCRIPTION: Creates and configures a source voice.
@@ -1047,6 +1047,8 @@ DECLARE_INTERFACE(IXAudio2VoiceCallback)
#define IXAudio2_QueryInterface(This,riid,ppvInterface) ((This)->lpVtbl->QueryInterface(This,riid,ppvInterface))
#define IXAudio2_AddRef(This) ((This)->lpVtbl->AddRef(This))
#define IXAudio2_Release(This) ((This)->lpVtbl->Release(This))
#define IXAudio2_RegisterForCallbacks(This,pCallback) ((This)->lpVtbl->RegisterForCallbacks(This,pCallback))
#define IXAudio2_UnregisterForCallbacks(This,pCallback) ((This)->lpVtbl->UnregisterForCallbacks(This,pCallback))
#define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) ((This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain))
#define IXAudio2_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) ((This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain))
#define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory) ((This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory))
@@ -1215,7 +1217,7 @@ __inline float XAudio2CutoffFrequencyToRadians(float CutoffFrequency, UINT32 Sam
{
return XAUDIO2_MAX_FILTER_FREQUENCY;
}
return 2.0f * sinf((float)M_PI * CutoffFrequency / SampleRate);
return 2.0f * sinf((float)M_PI * CutoffFrequency / (float)SampleRate);
}
// Convert from radian frequencies back to absolute frequencies in Hertz
@@ -1234,7 +1236,7 @@ __inline float XAudio2CutoffFrequencyToOnePoleCoefficient(float CutoffFrequency,
{
return XAUDIO2_MAX_FILTER_FREQUENCY;
}
return ( 1.0f - powf(1.0f - 2.0f * CutoffFrequency / SampleRate, 2.0f) );
return ( 1.0f - powf(1.0f - 2.0f * CutoffFrequency / (float)SampleRate, 2.0f) );
}
@@ -1271,4 +1273,3 @@ XAUDIO2_STDAPI XAudio2Create(_Outptr_ IXAudio2** ppXAudio2, UINT32 Flags X2DEFAU
#endif // #ifndef GUID_DEFS_ONLY
#endif // #ifndef __XAUDIO2_INCLUDED__
Binary file not shown.
+1 -1
+13 -9
View File
@@ -1,14 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug - LLVM|x64">
<Configuration>Debug - LLVM</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release - LLVM|x64">
<Configuration>Release - LLVM</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
@@ -72,6 +64,7 @@
<ClCompile Include="curl\lib\asyn-ares.c" />
<ClCompile Include="curl\lib\asyn-thread.c" />
<ClCompile Include="curl\lib\base64.c" />
<ClCompile Include="curl\lib\c-hyper.c" />
<ClCompile Include="curl\lib\conncache.c" />
<ClCompile Include="curl\lib\connect.c" />
<ClCompile Include="curl\lib\content_encoding.c" />
@@ -99,6 +92,8 @@
<ClCompile Include="curl\lib\dotdot.c" />
<ClCompile Include="curl\lib\dynbuf.c" />
<ClCompile Include="curl\lib\easy.c" />
<ClCompile Include="curl\lib\easygetopt.c" />
<ClCompile Include="curl\lib\easyoptions.c" />
<ClCompile Include="curl\lib\escape.c" />
<ClCompile Include="curl\lib\file.c" />
<ClCompile Include="curl\lib\fileinfo.c" />
@@ -116,8 +111,10 @@
<ClCompile Include="curl\lib\hostip4.c" />
<ClCompile Include="curl\lib\hostip6.c" />
<ClCompile Include="curl\lib\hostsyn.c" />
<ClCompile Include="curl\lib\hsts.c" />
<ClCompile Include="curl\lib\http.c" />
<ClCompile Include="curl\lib\http2.c" />
<ClCompile Include="curl\lib\http_aws_sigv4.c" />
<ClCompile Include="curl\lib\http_chunks.c" />
<ClCompile Include="curl\lib\http_digest.c" />
<ClCompile Include="curl\lib\http_negotiate.c" />
@@ -152,7 +149,6 @@
<ClCompile Include="curl\lib\rand.c" />
<ClCompile Include="curl\lib\rename.c" />
<ClCompile Include="curl\lib\rtsp.c" />
<ClCompile Include="curl\lib\security.c" />
<ClCompile Include="curl\lib\select.c" />
<ClCompile Include="curl\lib\sendf.c" />
<ClCompile Include="curl\lib\setopt.c" />
@@ -179,8 +175,10 @@
<ClCompile Include="curl\lib\transfer.c" />
<ClCompile Include="curl\lib\url.c" />
<ClCompile Include="curl\lib\urlapi.c" />
<ClCompile Include="curl\lib\vauth\gsasl.c" />
<ClCompile Include="curl\lib\version.c" />
<ClCompile Include="curl\lib\version_win32.c" />
<ClCompile Include="curl\lib\vtls\rustls.c" />
<ClCompile Include="curl\lib\warnless.c" />
<ClCompile Include="curl\lib\wildcard.c" />
<ClCompile Include="curl\lib\x509asn1.c" />
@@ -231,6 +229,7 @@
<ClInclude Include="curl\lib\amigaos.h" />
<ClInclude Include="curl\lib\arpa_telnet.h" />
<ClInclude Include="curl\lib\asyn.h" />
<ClInclude Include="curl\lib\c-hyper.h" />
<ClInclude Include="curl\lib\config-amigaos.h" />
<ClInclude Include="curl\lib\config-dos.h" />
<ClInclude Include="curl\lib\config-mac.h" />
@@ -257,6 +256,7 @@
<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" />
@@ -281,6 +281,7 @@
<ClInclude Include="curl\lib\dotdot.h" />
<ClInclude Include="curl\lib\dynbuf.h" />
<ClInclude Include="curl\lib\easyif.h" />
<ClInclude Include="curl\lib\easyoptions.h" />
<ClInclude Include="curl\lib\escape.h" />
<ClInclude Include="curl\lib\file.h" />
<ClInclude Include="curl\lib\fileinfo.h" />
@@ -292,8 +293,10 @@
<ClInclude Include="curl\lib\hash.h" />
<ClInclude Include="curl\lib\hostcheck.h" />
<ClInclude Include="curl\lib\hostip.h" />
<ClInclude Include="curl\lib\hsts.h" />
<ClInclude Include="curl\lib\http.h" />
<ClInclude Include="curl\lib\http2.h" />
<ClInclude Include="curl\lib\http_aws_sigv4.h" />
<ClInclude Include="curl\lib\http_chunks.h" />
<ClInclude Include="curl\lib\http_digest.h" />
<ClInclude Include="curl\lib\http_negotiate.h" />
@@ -351,6 +354,7 @@
<ClInclude Include="curl\lib\urlapi-int.h" />
<ClInclude Include="curl\lib\urldata.h" />
<ClInclude Include="curl\lib\version_win32.h" />
<ClInclude Include="curl\lib\vtls\rustls.h" />
<ClInclude Include="curl\lib\warnless.h" />
<ClInclude Include="curl\lib\wildcard.h" />
<ClInclude Include="curl\lib\x509asn1.h" />
+72 -3
View File
@@ -264,9 +264,6 @@
<ClCompile Include="curl\lib\rtsp.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\security.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\select.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -447,6 +444,42 @@
<ClCompile Include="curl\lib\vtls\wolfssl.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\dynbuf.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\mqtt.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\version_win32.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vquic\vquic.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\keylog.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\c-hyper.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\easygetopt.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\easyoptions.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\hsts.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\http_aws_sigv4.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vtls\rustls.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="curl\lib\vauth\gsasl.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="curl\include\curl\curl.h">
@@ -902,6 +935,42 @@
<ClInclude Include="curl\lib\vtls\wolfssl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\dynbuf.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\mqtt.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\setup-win32.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\version_win32.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vquic\vquic.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\keylog.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\c-hyper.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>
<ClInclude Include="curl\lib\hsts.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\http_aws_sigv4.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="curl\lib\vtls\rustls.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="curl\lib\libcurl.rc">
@@ -1,11 +1,11 @@
cmake_minimum_required(VERSION 2.8.4)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
set(LIBUSB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../libusb/)
project(libusb)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules")
set(LIBUSB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
option(WITH_DEBUG_LOG "enable debug logging" OFF)
# if debug logging is enabled, by default enable logging
option(WITH_LOGGING "if false, disable all logging" ON)
@@ -2,7 +2,7 @@ include(CheckCXXCompilerFlag)
include(CheckIncludeFiles)
include(CheckTypeSize)
if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
if (NOT OS_WINDOWS)
# mingw appears to print a bunch of warnings about this
check_cxx_compiler_flag("-fvisibility=hidden" HAVE_VISIBILITY)
@@ -15,9 +15,9 @@
<ProjectGuid>{349EE8F9-7D25-4909-AAF5-FF3FADE72187}</ProjectGuid>
<RootNamespace>libusb</RootNamespace>
</PropertyGroup>
<Import Project="..\common_default.props" />
<Import Project="..\..\common_default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\common_default_macros.props" />
<Import Project="..\..\common_default_macros.props" />
<PropertyGroup Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
@@ -42,7 +42,7 @@
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
<AdditionalIncludeDirectories>libusb\msvc;libusb\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>src\msvc;src\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WINVER=0x0600;_WIN32_WINNT=0x0600;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
<WarningLevel>Level4</WarningLevel>
@@ -61,30 +61,30 @@
</Lib>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="libusb\libusb\core.c" />
<ClCompile Include="libusb\libusb\descriptor.c" />
<ClCompile Include="libusb\libusb\hotplug.c" />
<ClCompile Include="libusb\libusb\io.c" />
<ClCompile Include="libusb\libusb\os\events_windows.c" />
<ClCompile Include="libusb\libusb\strerror.c" />
<ClCompile Include="libusb\libusb\sync.c" />
<ClCompile Include="libusb\libusb\os\threads_windows.c" />
<ClCompile Include="libusb\libusb\os\windows_common.c" />
<ClCompile Include="libusb\libusb\os\windows_usbdk.c" />
<ClCompile Include="libusb\libusb\os\windows_winusb.c" />
<ClCompile Include="src\libusb\core.c" />
<ClCompile Include="src\libusb\descriptor.c" />
<ClCompile Include="src\libusb\hotplug.c" />
<ClCompile Include="src\libusb\io.c" />
<ClCompile Include="src\libusb\os\events_windows.c" />
<ClCompile Include="src\libusb\strerror.c" />
<ClCompile Include="src\libusb\sync.c" />
<ClCompile Include="src\libusb\os\threads_windows.c" />
<ClCompile Include="src\libusb\os\windows_common.c" />
<ClCompile Include="src\libusb\os\windows_usbdk.c" />
<ClCompile Include="src\libusb\os\windows_winusb.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="libusb\msvc\config.h" />
<ClInclude Include="libusb\libusb\hotplug.h" />
<ClInclude Include="libusb\libusb\libusb.h" />
<ClInclude Include="libusb\libusb\libusbi.h" />
<ClInclude Include="libusb\libusb\os\events_windows.h" />
<ClInclude Include="libusb\libusb\os\threads_windows.h" />
<ClInclude Include="libusb\libusb\version.h" />
<ClInclude Include="libusb\libusb\version_nano.h" />
<ClInclude Include="libusb\libusb\os\windows_common.h" />
<ClInclude Include="libusb\libusb\os\windows_usbdk.h" />
<ClInclude Include="libusb\libusb\os\windows_winusb.h" />
<ClInclude Include="src\msvc\config.h" />
<ClInclude Include="src\libusb\hotplug.h" />
<ClInclude Include="src\libusb\libusb.h" />
<ClInclude Include="src\libusb\libusbi.h" />
<ClInclude Include="src\libusb\os\events_windows.h" />
<ClInclude Include="src\libusb\os\threads_windows.h" />
<ClInclude Include="src\libusb\version.h" />
<ClInclude Include="src\libusb\version_nano.h" />
<ClInclude Include="src\libusb\os\windows_common.h" />
<ClInclude Include="src\libusb\os\windows_usbdk.h" />
<ClInclude Include="src\libusb\os\windows_winusb.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
View File
+345 -130
View File
File diff suppressed because it is too large Load Diff
+206 -77
View File
@@ -1,5 +1,14 @@
// stb_truetype.h - v1.21 - public domain
// authored from 2009-2016 by Sean Barrett / RAD Game Tools
// stb_truetype.h - v1.24 - public domain
// authored from 2009-2020 by Sean Barrett / RAD Game Tools
//
// =======================================================================
//
// NO SECURITY GUARANTEE -- DO NOT USE THIS ON UNTRUSTED FONT FILES
//
// This library does no range checking of the offsets found in the file,
// meaning an attacker can use it to read arbitrary memory.
//
// =======================================================================
//
// This library processes TrueType files:
// parse files
@@ -32,11 +41,11 @@
// Daniel Ribeiro Maciel
//
// Bug/warning reports/fixes:
// "Zer" on mollyrocket Fabian "ryg" Giesen
// Cass Everitt Martins Mozeiko
// stoiko (Haemimont Games) Cap Petschulat
// Brian Hook Omar Cornut
// Walter van Niftrik github:aloucks
// "Zer" on mollyrocket Fabian "ryg" Giesen github:NiLuJe
// Cass Everitt Martins Mozeiko github:aloucks
// stoiko (Haemimont Games) Cap Petschulat github:oyvindjam
// Brian Hook Omar Cornut github:vassvik
// Walter van Niftrik Ryan Griege
// David Gow Peter LaValle
// David Given Sergey Popov
// Ivan-Assen Ivanov Giumo X. Clanjor
@@ -44,11 +53,14 @@
// Johan Duparc Thomas Fields
// Hou Qiming Derek Vinyard
// Rob Loach Cort Stratton
// Kenney Phillis Jr. github:oyvindjam
// Brian Costabile github:vassvik
//
// Kenney Phillis Jr. Brian Costabile
// Ken Voskuil (kaesve)
//
// VERSION HISTORY
//
// 1.24 (2020-02-05) fix warning
// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS)
// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined
// 1.21 (2019-02-25) fix warning
// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics()
// 1.19 (2018-02-11) GPOS kerning, STBTT_fmod
@@ -208,7 +220,7 @@
//
// Advancing for the next character:
// Call GlyphHMetrics, and compute 'current_point += SF * advance'.
//
//
//
// ADVANCED USAGE
//
@@ -333,7 +345,7 @@ int main(int argc, char **argv)
}
return 0;
}
#endif
#endif
//
// Output:
//
@@ -347,9 +359,9 @@ int main(int argc, char **argv)
// :@@. M@M
// @@@o@@@@
// :M@@V:@@.
//
//
//////////////////////////////////////////////////////////////////////////////
//
//
// Complete program: print "Hello World!" banner, with bugs
//
#if 0
@@ -650,7 +662,7 @@ STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, cons
// Calling these functions in sequence is roughly equivalent to calling
// stbtt_PackFontRanges(). If you more control over the packing of multiple
// fonts, or if you want to pack custom data into a font texture, take a look
// at the source to of stbtt_PackFontRanges() and create a custom version
// at the source to of stbtt_PackFontRanges() and create a custom version
// using these functions, e.g. call GatherRects multiple times,
// building up a single array of rects, then call PackRects once,
// then call RenderIntoRects repeatedly. This may result in a
@@ -702,7 +714,7 @@ struct stbtt_fontinfo
int numGlyphs; // number of glyphs, needed for range checking
int loca,head,glyf,hhea,hmtx,kern,gpos; // table locations as offset from start of .ttf
int loca,head,glyf,hhea,hmtx,kern,gpos,svg; // table locations as offset from start of .ttf
int index_map; // a cmap mapping for our chosen character encoding
int indexToLocFormat; // format needed to map from glyph index to glyph
@@ -785,6 +797,18 @@ STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1,
STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1);
// as above, but takes one or more glyph indices for greater efficiency
typedef struct stbtt_kerningentry
{
int glyph1; // use stbtt_FindGlyphIndex
int glyph2;
int advance;
} stbtt_kerningentry;
STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info);
STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length);
// Retrieves a complete list of all of the kerning pairs provided by the font
// stbtt_GetKerningTable never writes more than table_length entries and returns how many entries it did write.
// The table will be sorted by (a.glyph1 == b.glyph1)?(a.glyph2 < b.glyph2):(a.glyph1 < b.glyph1)
//////////////////////////////////////////////////////////////////////////////
//
@@ -829,6 +853,11 @@ STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, s
STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices);
// frees the data allocated above
STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg);
STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg);
// fills svg with the character's SVG data.
// returns data size or 0 if SVG not found.
//////////////////////////////////////////////////////////////////////////////
//
// BITMAP RENDERING
@@ -958,7 +987,7 @@ STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, floa
// and computing from that can allow drop-out prevention).
//
// The algorithm has not been optimized at all, so expect it to be slow
// if computing lots of characters or very large sizes.
// if computing lots of characters or very large sizes.
@@ -1330,6 +1359,22 @@ static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
return stbtt__cff_get_index(&cff);
}
// since most people won't use this, find this table the first time it's needed
static int stbtt__get_svg(stbtt_fontinfo *info)
{
stbtt_uint32 t;
if (info->svg < 0) {
t = stbtt__find_table(info->data, info->fontstart, "SVG ");
if (t) {
stbtt_uint32 offset = ttULONG(info->data + t + 2);
info->svg = t + offset;
} else {
info->svg = 0;
}
}
return info->svg;
}
static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart)
{
stbtt_uint32 cmap, t;
@@ -1409,6 +1454,8 @@ static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, in
else
info->numGlyphs = 0xffff;
info->svg = -1;
// find a cmap encoding table we understand *now* to avoid searching
// later. (todo: could make this installable)
// the same regardless of glyph.
@@ -1715,7 +1762,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s
if (i != 0)
num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
// now start the new one
// now start the new one
start_off = !(flags & 1);
if (start_off) {
// if we start off with an off-curve point, then when we need to find a point on the curve
@@ -1757,7 +1804,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s
}
}
num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
} else if (numberOfContours == -1) {
} else if (numberOfContours < 0) {
// Compound shapes.
int more = 1;
stbtt_uint8 *comp = data + g + 10;
@@ -1768,7 +1815,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s
int comp_num_verts = 0, i;
stbtt_vertex *comp_verts = 0, *tmp = 0;
float mtx[6] = {1,0,0,1,0,0}, m, n;
flags = ttSHORT(comp); comp+=2;
gidx = ttSHORT(comp); comp+=2;
@@ -1798,7 +1845,7 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s
mtx[2] = ttSHORT(comp)/16384.0f; comp+=2;
mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
}
// Find transformation scales.
m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]);
n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]);
@@ -1834,9 +1881,6 @@ static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, s
// More components ?
more = flags & (1<<5);
}
} else if (numberOfContours < 0) {
// @TODO other compound variations?
STBTT_assert(0);
} else {
// numberOfCounters == 0, do nothing
}
@@ -2265,6 +2309,48 @@ STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_inde
}
}
STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info)
{
stbtt_uint8 *data = info->data + info->kern;
// we only look at the first table. it must be 'horizontal' and format 0.
if (!info->kern)
return 0;
if (ttUSHORT(data+2) < 1) // number of tables, need at least 1
return 0;
if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format
return 0;
return ttUSHORT(data+10);
}
STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length)
{
stbtt_uint8 *data = info->data + info->kern;
int k, length;
// we only look at the first table. it must be 'horizontal' and format 0.
if (!info->kern)
return 0;
if (ttUSHORT(data+2) < 1) // number of tables, need at least 1
return 0;
if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format
return 0;
length = ttUSHORT(data+10);
if (table_length < length)
length = table_length;
for (k = 0; k < length; k++)
{
table[k].glyph1 = ttUSHORT(data+18+(k*6));
table[k].glyph2 = ttUSHORT(data+20+(k*6));
table[k].advance = ttSHORT(data+22+(k*6));
}
return length;
}
static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2)
{
stbtt_uint8 *data = info->data + info->kern;
@@ -2540,8 +2626,7 @@ STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int
if (info->gpos)
xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2);
if (info->kern)
else if (info->kern)
xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2);
return xAdvance;
@@ -2602,6 +2687,45 @@ STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
STBTT_free(v, info->userdata);
}
STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl)
{
int i;
stbtt_uint8 *data = info->data;
stbtt_uint8 *svg_doc_list = data + stbtt__get_svg((stbtt_fontinfo *) info);
int numEntries = ttUSHORT(svg_doc_list);
stbtt_uint8 *svg_docs = svg_doc_list + 2;
for(i=0; i<numEntries; i++) {
stbtt_uint8 *svg_doc = svg_docs + (12 * i);
if ((gl >= ttUSHORT(svg_doc)) && (gl <= ttUSHORT(svg_doc + 2)))
return svg_doc;
}
return 0;
}
STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg)
{
stbtt_uint8 *data = info->data;
stbtt_uint8 *svg_doc;
if (info->svg == 0)
return 0;
svg_doc = stbtt_FindSVGDoc(info, gl);
if (svg_doc != NULL) {
*svg = (char *) data + info->svg + ttULONG(svg_doc + 4);
return ttULONG(svg_doc + 8);
} else {
return 0;
}
}
STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg)
{
return stbtt_GetGlyphSVG(info, stbtt_FindGlyphIndex(info, unicode_codepoint), svg);
}
//////////////////////////////////////////////////////////////////////////////
//
// antialiasing software rasterizer
@@ -2727,7 +2851,7 @@ static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, i
float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
STBTT_assert(z != NULL);
if (!z) return z;
// round dx down to avoid overshooting
if (dxdy < 0)
z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy);
@@ -2805,7 +2929,7 @@ static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__ac
}
}
}
e = e->next;
}
}
@@ -3533,7 +3657,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
{
int ix0,iy0,ix1,iy1;
stbtt__bitmap gbm;
stbtt_vertex *vertices;
stbtt_vertex *vertices;
int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
if (scale_x == 0) scale_x = scale_y;
@@ -3556,7 +3680,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
if (height) *height = gbm.h;
if (xoff ) *xoff = ix0;
if (yoff ) *yoff = iy0;
if (gbm.w && gbm.h) {
gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata);
if (gbm.pixels) {
@@ -3567,7 +3691,7 @@ STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info
}
STBTT_free(vertices, info->userdata);
return gbm.pixels;
}
}
STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff)
{
@@ -3579,7 +3703,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigne
int ix0,iy0;
stbtt_vertex *vertices;
int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
stbtt__bitmap gbm;
stbtt__bitmap gbm;
stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0);
gbm.pixels = output;
@@ -3601,7 +3725,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *
STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
{
return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff);
}
}
STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint)
{
@@ -3616,7 +3740,7 @@ STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, uns
STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
{
return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff);
}
}
STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint)
{
@@ -3741,7 +3865,7 @@ static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *no
con->y = 0;
con->bottom_y = 0;
STBTT__NOTUSED(nodes);
STBTT__NOTUSED(num_nodes);
STBTT__NOTUSED(num_nodes);
}
static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects)
@@ -3968,6 +4092,7 @@ static float stbtt__oversample_shift(int oversample)
STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
{
int i,j,k;
int missing_glyph_added = 0;
k=0;
for (i=0; i < num_ranges; ++i) {
@@ -3979,7 +4104,7 @@ STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stb
int x0,y0,x1,y1;
int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j];
int glyph = stbtt_FindGlyphIndex(info, codepoint);
if (glyph == 0 && spc->skip_missing) {
if (glyph == 0 && (spc->skip_missing || missing_glyph_added)) {
rects[k].w = rects[k].h = 0;
} else {
stbtt_GetGlyphBitmapBoxSubpixel(info,glyph,
@@ -3989,6 +4114,8 @@ STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stb
&x0,&y0,&x1,&y1);
rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1);
rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1);
if (glyph == 0)
missing_glyph_added = 1;
}
++k;
}
@@ -4023,7 +4150,7 @@ STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info
// rects array must be big enough to accommodate all characters in the given ranges
STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
{
int i,j,k, return_value = 1;
int i,j,k, missing_glyph = -1, return_value = 1;
// save current values
int old_h_over = spc->h_oversample;
@@ -4088,6 +4215,13 @@ STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const
bc->yoff = (float) y0 * recip_v + sub_y;
bc->xoff2 = (x0 + r->w) * recip_h + sub_x;
bc->yoff2 = (y0 + r->h) * recip_v + sub_y;
if (glyph == 0)
missing_glyph = j;
} else if (spc->skip_missing) {
return_value = 0;
} else if (r->was_packed && r->w == 0 && r->h == 0 && missing_glyph >= 0) {
ranges[i].chardata_for_range[j] = ranges[i].chardata_for_range[missing_glyph];
} else {
return_value = 0; // if any fail, report failure
}
@@ -4126,7 +4260,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char
n = 0;
for (i=0; i < num_ranges; ++i)
n += ranges[i].num_chars;
rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context);
if (rects == NULL)
return 0;
@@ -4137,7 +4271,7 @@ STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char
n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects);
stbtt_PackFontRangesPackRects(spc, rects, n);
return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects);
STBTT_free(rects, spc->user_allocator_context);
@@ -4298,7 +4432,7 @@ static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex
int x1 = (int) verts[i ].x, y1 = (int) verts[i ].y;
if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
if (x_inter < x)
if (x_inter < x)
winding += (y0 < y1) ? 1 : -1;
}
}
@@ -4324,7 +4458,7 @@ static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex
y1 = (int)verts[i ].y;
if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
if (x_inter < x)
if (x_inter < x)
winding += (y0 < y1) ? 1 : -1;
}
} else {
@@ -4336,7 +4470,7 @@ static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex
if (hits[1][0] < 0)
winding += (hits[1][1] < 0 ? -1 : 1);
}
}
}
}
}
return winding;
@@ -4389,12 +4523,7 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc
int w,h;
unsigned char *data;
// if one scale is 0, use same scale for both
if (scale_x == 0) scale_x = scale_y;
if (scale_y == 0) {
if (scale_x == 0) return NULL; // if both scales are 0, return NULL
scale_y = scale_x;
}
if (scale == 0) return NULL;
stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1);
@@ -4417,7 +4546,7 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc
// invert for y-downwards bitmaps
scale_y = -scale_y;
{
int x,y,i,j;
float *precompute;
@@ -4566,7 +4695,7 @@ STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float sc
STBTT_free(verts, info->userdata);
}
return data;
}
}
STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff)
{
@@ -4584,7 +4713,7 @@ STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
//
// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string
static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2)
static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2)
{
stbtt_int32 i=0;
@@ -4623,7 +4752,7 @@ static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, s
return i;
}
static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2)
static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2)
{
return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2);
}
@@ -4752,7 +4881,7 @@ STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index)
{
return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index);
return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index);
}
STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
@@ -4845,38 +4974,38 @@ This software is available under 2 licenses -- choose whichever you prefer.
------------------------------------------------------------------------------
ALTERNATIVE A - MIT License
Copyright (c) 2017 Sean Barrett
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
------------------------------------------------------------------------------
ALTERNATIVE B - Public Domain (www.unlicense.org)
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
software, either in source code form or as a compiled binary, for any purpose,
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
software, either in source code form or as a compiled binary, for any purpose,
commercial or non-commercial, and by any means.
In jurisdictions that recognize copyright laws, the author or authors of this
software dedicate any and all copyright interest in the software to the public
domain. We make this dedication for the benefit of the public at large and to
the detriment of our heirs and successors. We intend this dedication to be an
overt act of relinquishment in perpetuity of all present and future rights to
In jurisdictions that recognize copyright laws, the author or authors of this
software dedicate any and all copyright interest in the software to the public
domain. We make this dedication for the benefit of the public at large and to
the detriment of our heirs and successors. We intend this dedication to be an
overt act of relinquishment in perpetuity of all present and future rights to
this software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
*/
+21 -16
View File
@@ -7,11 +7,11 @@ Other instructions may be found [here](https://wiki.rpcs3.net/index.php?title=Bu
### Windows 7 or later
* [CMake 3.14.1+](https://www.cmake.org/download/) (add to PATH)
* [Python 3.3+](https://www.python.org/downloads/) (add to PATH)
* [CMake 3.16.9+](https://www.cmake.org/download/) (add to PATH)
* [Python 3.6+](https://www.python.org/downloads/) (add to PATH)
* [Qt 5.15.2](https://www.qt.io/download-qt-installer)
* [Visual Studio 2019](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community)
* [Vulkan SDK 1.1.126+](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/windows/getting_started.html))
* [Vulkan SDK 1.2.154+](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/windows/getting_started.html))
**Either add the** `QTDIR` **environment variable, e.g.** `<QtInstallFolder>\5.15.2\msvc2019_64\` **, or use the [Visual Studio Qt Plugin](https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2019)**
@@ -19,10 +19,10 @@ Other instructions may be found [here](https://wiki.rpcs3.net/index.php?title=Bu
These are the essentials tools to build RPCS3 on Linux. Some of them can be installed through your favorite package manager.
* Clang 11+ or GCC 9+
* [CMake 3.14.1+](https://www.cmake.org/download/)
* Clang 12+ or GCC 10+
* [CMake 3.16.9+](https://www.cmake.org/download/)
* [Qt 5.15.2](https://www.qt.io/download-qt-installer)
* [Vulkan SDK 1.1.126+](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html))
* [Vulkan SDK 1.2.154+](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html))
* [SDL2](https://www.libsdl.org/download-2.0.php) (for the FAudio backend)
**If you have an NVIDIA GPU, you may need to install the libglvnd package.**
@@ -43,20 +43,20 @@ Ubuntu usually does not have a new enough Qt package to suit rpcs3's needs. Ther
. /etc/os-release
sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-$UBUNTU_CODENAME
sudo apt-get update
sudo apt-get install qt515-meta-minimal qt515svg
sudo apt-get install qt515base qt515svg
. /opt/qt515/bin/qt515-env.sh >/dev/null 2>&1
```
##### GCC 9.x installation
##### GCC 10.x installation
If the `gcc-9` package is not available on your system, use the following commands
If the `gcc-10` package is not available on your system, use the following commands
```
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-9 g++-9
sudo apt-get install gcc-10 g++-10
```
You can either use `update-alternatives` to setup `gcc-9`/`g++-9` as your default compilers or prefix any `cmake` command by `CXX=g++-9 CC=gcc-9 ` to use it.
You can either use `update-alternatives` to setup `gcc-10`/`g++-10` as your default compilers or prefix any `cmake` command by `CXX=g++-10 CC=gcc-10 ` to use it.
##### Vulkan SDK
@@ -64,7 +64,7 @@ For Ubuntu systems, it is strongly recommended to use the PPA from [LunarG](http
```
. /etc/os-release
wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.2.148-$UBUNTU_CODENAME.list https://packages.lunarg.com/vulkan/1.2.148/lunarg-vulkan-1.2.148-$UBUNTU_CODENAME.list
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.2.154-$UBUNTU_CODENAME.list https://packages.lunarg.com/vulkan/1.2.154/lunarg-vulkan-1.2.154-$UBUNTU_CODENAME.list
sudo apt update
sudo apt install vulkan-sdk
```
@@ -86,7 +86,7 @@ sudo apt-get install cmake
#### OpenSUSE
sudo zypper install git cmake libasound2 libpulse-devel openal-soft-devel glew-devel zlib-devel libedit-devel vulkan-devel libudev-devel libqt5-qtbase-devel libevdev-devel
sudo zypper install git cmake libasound2 libpulse-devel openal-soft-devel glew-devel zlib-devel libedit-devel vulkan-devel libudev-devel libqt5-qtbase-devel libqt5gui-private-headers-devel libevdev-devel
## Setup the project
@@ -108,11 +108,16 @@ git submodule update --init
#### Building the projects
Open `rpcs3.sln`. The recommended build configuration is `Release - LLVM` for all purposes.
Open `rpcs3.sln`. The recommended build configuration is `Release`. (On older revisions: `Release - LLVM`)
You may want to download the precompiled [LLVM libs](https://github.com/RPCS3/llvm-mirror/releases/download/custom-build-win/llvmlibs_mt.7z) and extract them to the root rpcs3 folder (which contains `rpcs3.sln`), as well as download and extract the [additional libs](https://github.com/RPCS3/glslang/releases/download/custom-build-win/glslanglibs_mt.7z) to `lib\%CONFIGURATION%-x64\` to speed up compilation time (unoptimised/debug libs are currently not available precompiled).
If you're not using the precompiled libs, build the projects in *__BUILD_BEFORE* folder: right-click on every project > *Build*.
If you're not using the precompiled libs, build the following projects in *__BUILD_BEFORE* folder by right-clicking on a project > *Build*.:
* glslang-build
* **Either** llvm_build **or** llvm_build_clang_cl
* spirv-tools-build
Afterwards:
`Build > Build Solution`
@@ -121,7 +126,7 @@ If you're not using the precompiled libs, build the projects in *__BUILD_BEFORE*
While still in the project root:
1) `cd .. && mkdir rpcs3_build && cd rpcs3_build`
2) `cmake ../rpcs3/ && make` or `CXX=g++-9 CC=gcc-9 cmake ../rpcs3/ && make` to force these compilers
2) `cmake ../rpcs3/ && make` or `CXX=g++-10 CC=gcc-10 cmake ../rpcs3/ && make` to force these compilers
3) Run RPCS3 with `./bin/rpcs3`
When using GDB, configure it to ignore SIGSEGV signal (`handle SIGSEGV nostop noprint`).
+28 -37
View File
@@ -1,63 +1,54 @@
cmake_minimum_required(VERSION 3.14.1)
cmake_minimum_required(VERSION 3.16.9)
project(rpcs3)
if(CMAKE_COMPILER_IS_GNUCXX)
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
message(FATAL_ERROR "RPCS3 requires at least gcc-9.")
endif()
if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10)
message(FATAL_ERROR "RPCS3 requires at least gcc-10.")
endif()
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0)
message(FATAL_ERROR "RPCS3 requires at least clang-11.0.")
endif()
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.0)
message(FATAL_ERROR "RPCS3 requires at least clang-12.0.")
endif()
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_SUBMODULE "Build LLVM from git submodule" ON)
option(USE_ALSA "ALSA audio backend" ON)
option(USE_PULSE "PulseAudio audio backend" ON)
option(USE_FAUDIO "FAudio audio backend" ON)
option(USE_LIBEVDEV "libevdev-based joystick support" ON)
option(USE_DISCORD_RPC "Discord rich presence integration" ON)
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)
# include build options
include(options.cmake)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/rpcs3/cmake_modules")
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules")
set(CMAKE_CXX_STANDARD 20)
include(CheckCXXCompilerFlag)
if (NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type selected, default to Release")
set(CMAKE_BUILD_TYPE "Release")
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type selected, default to Release")
set(CMAKE_BUILD_TYPE "Release")
endif()
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DNDEBUG)
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
add_definitions(-DNDEBUG)
elseif(NOT MSVC)
add_definitions(-D_DEBUG)
add_definitions(-D_DEBUG)
endif()
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." )
message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." )
endif()
find_program(CCACHE_FOUND ccache)
if (CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
if(CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif()
if(WIN32)
add_definitions(-DUNICODE)
add_definitions(-D_WIN32_WINNT=0x0602)
add_definitions(-DUNICODE)
add_definitions(-D_WIN32_WINNT=0x0602)
endif()
if(APPLE)
include_directories(/opt/local/include)
link_directories(/opt/local/lib)
include_directories(/opt/local/include)
link_directories(/opt/local/lib)
endif()
# Warnings are silenced for 3rdparty code
@@ -66,7 +57,7 @@ set(CMAKE_C_FLAGS -w)
set(LLVM_ENABLE_WARNINGS OFF CACHE BOOL "")
if(MSVC)
add_compile_options(/wd4530 /utf-8) # C++ exception handler used, but unwind semantics are not enabled
add_compile_options(/wd4530 /utf-8) # C++ exception handler used, but unwind semantics are not enabled
endif()
add_subdirectory(Vulkan EXCLUDE_FROM_ALL)
@@ -76,8 +67,8 @@ add_subdirectory(3rdparty)
unset(CMAKE_CXX_FLAGS)
unset(CMAKE_C_FLAGS)
if (NOT WIN32)
add_compile_options(-pthread)
if(NOT WIN32)
add_compile_options(-pthread)
endif()
# TODO: do real installation, including copying directory structure
+15 -6
View File
@@ -3,11 +3,16 @@
#include "util/types.hpp"
#include "Utilities/StrFmt.h"
#ifndef _MSC_VER
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#endif
template<typename T, uint N>
struct bf_base
{
using type = T;
using vtype = simple_t<type>;
using vtype = std::common_type_t<type>;
using utype = typename std::make_unsigned<vtype>::type;
// Datatype bitsize
@@ -217,7 +222,7 @@ struct cf_t<void>
}
template<typename T>
static constexpr auto extract(const T& data) -> decltype(+T())
static constexpr auto extract(const T&) -> decltype(+T())
{
return 0;
}
@@ -237,7 +242,7 @@ struct ff_t : bf_base<T, N>
using vtype = typename ff_t::vtype;
// Return constant value
static constexpr vtype extract(const type& data)
static constexpr vtype extract(const type&)
{
static_assert((V & ff_t::vmask) == V, "ff_t<> error: V out of bounds");
return V;
@@ -250,10 +255,14 @@ struct ff_t : bf_base<T, N>
}
};
#ifndef _MSC_VER
#pragma GCC diagnostic pop
#endif
template<typename T, uint I, uint N>
struct fmt_unveil<bf_t<T, I, N>, void>
{
using type = typename fmt_unveil<simple_t<T>>::type;
using type = typename fmt_unveil<std::common_type_t<T>>::type;
static inline auto get(const bf_t<T, I, N>& bf)
{
@@ -264,7 +273,7 @@ struct fmt_unveil<bf_t<T, I, N>, void>
template<typename F, typename... Fields>
struct fmt_unveil<cf_t<F, Fields...>, void>
{
using type = typename fmt_unveil<simple_t<typename F::type>>::type;
using type = typename fmt_unveil<std::common_type_t<typename F::type>>::type;
static inline auto get(const cf_t<F, Fields...>& cf)
{
@@ -275,7 +284,7 @@ struct fmt_unveil<cf_t<F, Fields...>, void>
template<typename T, T V, uint N>
struct fmt_unveil<ff_t<T, V, N>, void>
{
using type = typename fmt_unveil<simple_t<T>>::type;
using type = typename fmt_unveil<std::common_type_t<T>>::type;
static inline auto get(const ff_t<T, V, N>& ff)
{
+1 -3
View File
@@ -295,7 +295,7 @@ namespace CRCPP
static CRCType Finalize(CRCType remainder, CRCType finalXOR, bool reflectOutput);
template <typename CRCType, crcpp_uint16 CRCWidth>
static CRCType UndoFinalize(CRCType remainder, CRCType finalXOR, bool reflectOutput);
static CRCType UndoFinalize(CRCType crc, CRCType finalXOR, bool reflectOutput);
template <typename CRCType, crcpp_uint16 CRCWidth>
static CRCType CalculateRemainder(const void * data, crcpp_size size, const Parameters<CRCType, CRCWidth> & parameters, CRCType remainder);
@@ -771,8 +771,6 @@ namespace CRCPP
in a function even in a branch will never be executed. This also means we don't need pragmas
to get rid of warnings, but it still can be computed at compile-time. Win-win!
@param[in] x Compile-time expression to bound
@tparam CRCType Integer type for storing the CRC result
@tparam CRCWidth Number of bits in the CRC
@return Non-negative compile-time expression
*/
template <typename IntegerType>
+16 -14
View File
@@ -20,27 +20,29 @@ namespace cfg
}
_base::_base(type _type, node* owner, const std::string& name, bool dynamic)
: m_type(_type), m_dynamic(dynamic)
: m_type(_type), m_dynamic(dynamic), m_name(name)
{
for (const auto& pair : owner->m_nodes)
for (const auto& node : owner->m_nodes)
{
if (pair.first == name)
if (node->get_name() == name)
{
cfg_log.fatal("Node already exists: %s", name);
}
}
owner->m_nodes.emplace_back(name, this);
owner->m_nodes.emplace_back(this);
}
bool _base::from_string(const std::string&, bool)
{
fmt::throw_exception("from_string() purecall");
cfg_log.fatal("cfg::_base::from_string() purecall");
return false;
}
bool _base::from_list(std::vector<std::string>&&)
{
fmt::throw_exception("from_list() purecall");
cfg_log.fatal("cfg::_base::from_list() purecall");
return false;
}
// Emit YAML
@@ -136,7 +138,7 @@ bool cfg::try_to_uint64(u64* out, const std::string& value, u64 min, u64 max)
bool cfg::try_to_enum_value(u64* out, decltype(&fmt_class_string<int>::format) func, const std::string& value)
{
u64 max = -1;
u64 max = umax;
for (u64 i = 0;; i++)
{
@@ -218,11 +220,11 @@ void cfg::encode(YAML::Emitter& out, const cfg::_base& rhs)
case type::node:
{
out << YAML::BeginMap;
for (const auto& np : static_cast<const node&>(rhs).get_nodes())
for (const auto& node : static_cast<const node&>(rhs).get_nodes())
{
out << YAML::Key << np.first;
out << YAML::Key << node->get_name();
out << YAML::Value;
encode(out, *np.second);
encode(out, *node);
}
out << YAML::EndMap;
@@ -281,11 +283,11 @@ void cfg::decode(const YAML::Node& data, cfg::_base& rhs, bool dynamic)
if (!pair.first.IsScalar()) continue;
// Find the key among existing nodes
for (const auto& _pair : static_cast<node&>(rhs).get_nodes())
for (const auto& node : static_cast<node&>(rhs).get_nodes())
{
if (_pair.first == pair.first.Scalar())
if (node->get_name() == pair.first.Scalar())
{
decode(pair.second, *_pair.second, dynamic);
decode(pair.second, *node, dynamic);
}
}
}
@@ -366,7 +368,7 @@ void cfg::node::from_default()
{
for (auto& node : m_nodes)
{
node.second->from_default();
node->from_default();
}
}
+10 -13
View File
@@ -48,10 +48,11 @@ namespace cfg
// Config tree entry abstract base class
class _base
{
const type m_type;
const type m_type{};
protected:
bool m_dynamic = true;
const std::string m_name{};
// Ownerless entry constructor
_base(type _type);
@@ -64,11 +65,15 @@ namespace cfg
_base& operator=(const _base&) = delete;
virtual ~_base() = default;
// Get type
type get_type() const { return m_type; }
const std::string& get_name() const { return m_name; }
// Get dynamic property for reloading configs during games
bool get_is_dynamic() const { return m_dynamic; };
bool get_is_dynamic() const { return m_dynamic; }
// Reset defaults
virtual void from_default() = 0;
@@ -95,7 +100,7 @@ namespace cfg
// Config tree node which contains another nodes
class node : public _base
{
std::vector<std::pair<std::string, _base*>> m_nodes;
std::vector<_base*> m_nodes{};
friend class _base;
@@ -391,8 +396,6 @@ namespace cfg
// Simple string entry with mutex
class string : public _base
{
const std::string m_name;
atomic_ptr<std::string> m_value;
public:
@@ -400,7 +403,6 @@ namespace cfg
string(node* owner, std::string name, std::string def = {}, bool dynamic = false)
: _base(type::string, owner, name, dynamic)
, m_name(std::move(name))
, m_value(def)
, def(std::move(def))
{
@@ -426,11 +428,6 @@ namespace cfg
}
}
const std::string& get_name() const
{
return m_name;
}
void from_default() override;
std::string to_string() const override
@@ -448,7 +445,7 @@ namespace cfg
// Simple set entry (TODO: template for various types)
class set_entry final : public _base
{
std::set<std::string> m_set;
std::set<std::string> m_set{};
public:
// Default value is empty list in current implementation
@@ -484,7 +481,7 @@ namespace cfg
class log_entry final : public _base
{
std::map<std::string, logs::level> m_map;
std::map<std::string, logs::level> m_map{};
public:
log_entry(node* owner, const std::string& name)
+141 -149
View File
@@ -6,7 +6,6 @@
#include <unordered_map>
#include <algorithm>
#include <cstring>
#include <cerrno>
#include <map>
#include "util/asm.hpp"
@@ -18,11 +17,6 @@ using namespace std::literals::string_literals;
#include <cwchar>
#include <Windows.h>
namespace utils
{
u64 get_unique_tsc();
}
static std::unique_ptr<wchar_t[]> to_wchar(const std::string& source)
{
// String size + null terminator
@@ -65,7 +59,7 @@ static void to_utf8(std::string& out, const wchar_t* source)
// Resize buffer
out.resize(buf_size - 1);
const int result = WideCharToMultiByte(CP_UTF8, 0, source, static_cast<int>(length) + 1, &out.front(), buf_size, NULL, NULL);
const int result = WideCharToMultiByte(CP_UTF8, 0, source, static_cast<int>(length) + 1, &out.front(), buf_size, nullptr, nullptr);
// Fix the size
out.resize(ensure(result) - 1);
@@ -210,13 +204,13 @@ namespace fs
class device_manager final
{
mutable shared_mutex m_mutex;
mutable shared_mutex m_mutex{};
std::unordered_map<std::string, std::shared_ptr<device_base>> m_map;
std::unordered_map<std::string, shared_ptr<device_base>> m_map{};
public:
std::shared_ptr<device_base> get_device(const std::string& path);
std::shared_ptr<device_base> set_device(const std::string& name, const std::shared_ptr<device_base>&);
shared_ptr<device_base> get_device(const std::string& path);
shared_ptr<device_base> set_device(const std::string& name, shared_ptr<device_base>);
};
static device_manager& get_device_manager()
@@ -230,7 +224,7 @@ namespace fs
{
}
stat_t file_base::stat()
[[noreturn]] stat_t file_base::stat()
{
fmt::throw_exception("fs::file::stat() not supported.");
}
@@ -281,48 +275,112 @@ namespace fs
{
}
device_base::device_base()
: fs_prefix(fmt::format("/vfsv0_%s%s_", fmt::base57(reinterpret_cast<u64>(this)), fmt::base57(utils::get_unique_tsc())))
{
}
device_base::~device_base()
{
}
bool device_base::remove_dir(const std::string&)
{
g_tls_error = error::readonly;
return false;
}
bool device_base::create_dir(const std::string&)
{
g_tls_error = error::readonly;
return false;
}
bool device_base::rename(const std::string&, const std::string&)
{
g_tls_error = error::readonly;
return false;
}
bool device_base::remove(const std::string&)
{
g_tls_error = error::readonly;
return false;
}
bool device_base::trunc(const std::string&, u64)
{
g_tls_error = error::readonly;
return false;
}
bool device_base::utime(const std::string&, s64, s64)
{
g_tls_error = error::readonly;
return false;
}
}
std::shared_ptr<fs::device_base> fs::device_manager::get_device(const std::string& path)
shared_ptr<fs::device_base> fs::device_manager::get_device(const std::string& path)
{
reader_lock lock(m_mutex);
const auto found = m_map.find(path.substr(0, path.find_first_of('/', 2)));
const usz prefix = path.find_first_of('_', 7) + 1;
if (found == m_map.end())
const auto found = m_map.find(path.substr(prefix, path.find_first_of('/', 1) - prefix));
if (found == m_map.end() || !path.starts_with(found->second->fs_prefix))
{
return nullptr;
return null_ptr;
}
return found->second;
}
std::shared_ptr<fs::device_base> fs::device_manager::set_device(const std::string& name, const std::shared_ptr<device_base>& device)
shared_ptr<fs::device_base> fs::device_manager::set_device(const std::string& name, shared_ptr<device_base> device)
{
std::lock_guard lock(m_mutex);
return m_map[name] = device;
if (device)
{
// Adding
if (auto [it, ok] = m_map.try_emplace(name, std::move(device)); ok)
{
return it->second;
}
g_tls_error = error::exist;
}
else
{
// Removing
if (auto found = m_map.find(name); found != m_map.end())
{
device = std::move(found->second);
m_map.erase(found);
return device;
}
g_tls_error = error::noent;
}
return null_ptr;
}
std::shared_ptr<fs::device_base> fs::get_virtual_device(const std::string& path)
shared_ptr<fs::device_base> fs::get_virtual_device(const std::string& path)
{
// Every virtual device path must have "//" at the beginning
if (path.starts_with("//"))
// Every virtual device path must have specific name at the beginning
if (path.starts_with("/vfsv0_") && path.size() >= 8 + 22 && path[29] == '_' && path.find_first_of('/', 1) > 29)
{
return get_device_manager().get_device(path);
}
return nullptr;
return null_ptr;
}
std::shared_ptr<fs::device_base> fs::set_virtual_device(const std::string& name, const std::shared_ptr<device_base>& device)
shared_ptr<fs::device_base> fs::set_virtual_device(const std::string& name, shared_ptr<device_base> device)
{
ensure(name.starts_with("//") && name[2] != '/');
return get_device_manager().set_device(name, device);
return get_device_manager().set_device(name, std::move(device));
}
std::string fs::get_parent_dir(const std::string& path)
@@ -593,9 +651,17 @@ bool fs::create_dir(const std::string& path)
}
#ifdef _WIN32
if (!CreateDirectoryW(to_wchar(path).get(), NULL))
if (!CreateDirectoryW(to_wchar(path).get(), nullptr))
{
g_tls_error = to_error(GetLastError());
int res = GetLastError();
if (res == ERROR_ACCESS_DENIED && is_dir(path))
{
// May happen on drives
res = ERROR_ALREADY_EXISTS;
}
g_tls_error = to_error(res);
return false;
}
@@ -705,7 +771,7 @@ bool fs::rename(const std::string& from, const std::string& to, bool overwrite)
}
error1 = GetLastError();
CreateDirectoryW(ws2.get(), NULL); // TODO
CreateDirectoryW(ws2.get(), nullptr); // TODO
}
else
{
@@ -874,7 +940,7 @@ bool fs::truncate_file(const std::string& path, u64 length)
#ifdef _WIN32
// Open the file
const auto handle = CreateFileW(to_wchar(path).get(), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
const auto handle = CreateFileW(to_wchar(path).get(), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
if (handle == INVALID_HANDLE_VALUE)
{
g_tls_error = to_error(GetLastError());
@@ -913,7 +979,7 @@ bool fs::utime(const std::string& path, s64 atime, s64 mtime)
#ifdef _WIN32
// Open the file
const auto handle = CreateFileW(to_wchar(path).get(), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_NORMAL, NULL);
const auto handle = CreateFileW(to_wchar(path).get(), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_NORMAL, NULL);
if (handle == INVALID_HANDLE_VALUE)
{
g_tls_error = to_error(GetLastError());
@@ -1025,7 +1091,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
share |= FILE_SHARE_WRITE;
}
const HANDLE handle = CreateFileW(to_wchar(path).get(), access, share, NULL, disp, FILE_ATTRIBUTE_NORMAL, NULL);
const HANDLE handle = CreateFileW(to_wchar(path).get(), access, share, nullptr, disp, FILE_ATTRIBUTE_NORMAL, NULL);
if (handle == INVALID_HANDLE_VALUE)
{
@@ -1092,7 +1158,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
const int size = narrow<int>(count);
DWORD nread;
ensure(ReadFile(m_handle, buffer, size, &nread, NULL)); // "file::read"
ensure(ReadFile(m_handle, buffer, size, &nread, nullptr)); // "file::read"
return nread;
}
@@ -1103,7 +1169,7 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
const int size = narrow<int>(count);
DWORD nwritten;
ensure(WriteFile(m_handle, buffer, size, &nwritten, NULL)); // "file::write"
ensure(WriteFile(m_handle, buffer, size, &nwritten, nullptr)); // "file::write"
return nwritten;
}
@@ -1301,8 +1367,19 @@ fs::file::file(const std::string& path, bs_t<open_mode> mode)
static_assert(sizeof(iovec) == sizeof(iovec_clone), "Weird iovec size");
static_assert(offsetof(iovec, iov_len) == offsetof(iovec_clone, iov_len), "Weird iovec::iov_len offset");
const auto result = ::writev(m_fd, reinterpret_cast<const iovec*>(buffers), buf_count);
ensure(result != -1); // "file::write_gather"
u64 result = 0;
while (buf_count)
{
iovec arg[256];
const auto count = std::min<u64>(buf_count, 256);
std::memcpy(&arg, buffers, sizeof(iovec) * count);
const auto added = ::writev(m_fd, arg, count);
ensure(added != -1); // "file::write_gather"
result += added;
buf_count -= count;
buffers += count;
}
return result;
}
@@ -1328,7 +1405,11 @@ fs::file::file(const void* ptr, usz size)
{
}
bool trunc(u64 length) override
memory_stream(const memory_stream&) = delete;
memory_stream& operator=(const memory_stream&) = delete;
bool trunc(u64) override
{
return false;
}
@@ -1349,7 +1430,7 @@ fs::file::file(const void* ptr, usz size)
return 0;
}
u64 write(const void* buffer, u64 count) override
u64 write(const void*, u64) override
{
return 0;
}
@@ -1416,7 +1497,7 @@ bool fs::dir::open(const std::string& path)
#ifdef _WIN32
WIN32_FIND_DATAW found;
const auto handle = FindFirstFileExW(to_wchar(path + "/*").get(), FindExInfoBasic, &found, FindExSearchNameMatch, NULL, FIND_FIRST_EX_CASE_SENSITIVE | FIND_FIRST_EX_LARGE_FETCH);
const auto handle = FindFirstFileExW(to_wchar(path + "/*").get(), FindExInfoBasic, &found, FindExSearchNameMatch, nullptr, FIND_FIRST_EX_CASE_SENSITIVE | FIND_FIRST_EX_LARGE_FETCH);
if (handle == INVALID_HANDLE_VALUE)
{
@@ -1498,6 +1579,10 @@ bool fs::dir::open(const std::string& path)
{
}
unix_dir(const unix_dir&) = delete;
unix_dir& operator=(const unix_dir&) = delete;
~unix_dir() override
{
::closedir(m_dd);
@@ -1545,6 +1630,17 @@ bool fs::dir::open(const std::string& path)
return true;
}
bool fs::file::strict_read_check(u64 _size, u64 type_size) const
{
if (usz pos0 = pos(), size0 = size(); pos0 >= size0 || (size0 - pos0) / type_size < _size)
{
fs::g_tls_error = fs::error::inval;
return false;
}
return true;
}
const std::string& fs::get_config_dir()
{
// Use magic static
@@ -1556,9 +1652,9 @@ const std::string& fs::get_config_dir()
wchar_t buf[32768];
constexpr DWORD size = static_cast<DWORD>(std::size(buf));
if (GetEnvironmentVariable(L"RPCS3_CONFIG_DIR", buf, size) - 1 >= size - 1 &&
GetModuleFileName(NULL, buf, size) - 1 >= size - 1)
GetModuleFileName(nullptr, buf, size) - 1 >= size - 1)
{
MessageBoxA(0, fmt::format("GetModuleFileName() failed: error %u.", GetLastError()).c_str(), "fs::get_config_dir()", MB_ICONERROR);
MessageBoxA(nullptr, fmt::format("GetModuleFileName() failed: error %u.", GetLastError()).c_str(), "fs::get_config_dir()", MB_ICONERROR);
return dir; // empty
}
@@ -1673,110 +1769,6 @@ bool fs::remove_all(const std::string& path, bool remove_root)
return true;
}
std::string fs::escape_path(std::string_view path)
{
std::string real; real.resize(path.size());
auto get_char = [&](usz& from, usz& to, usz count)
{
std::memcpy(&real[to], &path[from], count);
from += count, to += count;
};
usz i = 0, j = -1, pos_nondelim = 0, after_delim = 0;
if (i < path.size())
{
j = 0;
}
for (; i < path.size();)
{
real[j] = path[i];
#ifdef _Win32
if (real[j] == '\\')
{
real[j] = '/';
}
#endif
// If the current character was preceeded by a delimiter special treatment is required:
// If another deleimiter is encountered, remove it (do not write it to output string)
// Otherwise test if it is a "." or ".." sequence.
if (std::exchange(after_delim, path[i] == delim[0] || path[i] == delim[1]))
{
if (!after_delim)
{
if (real[j] == '.')
{
if (i + 1 == path.size())
{
break;
}
get_char(i, j, 1);
switch (real[j])
{
case '.':
{
bool remove_element = true;
usz k = 1;
for (; k + i != path.size(); k++)
{
switch (path[i + k])
{
case '.': continue;
case delim[0]: case delim[1]: break;
default: remove_element = false; break;
}
}
if (remove_element)
{
if (i == 1u)
{
j = pos_nondelim;
real[j] = '\0';// Ensure termination at this posistion
after_delim = true;
i += k;
continue;
}
}
get_char(i, j, k);
continue;
}
case '/':
{
i++;
after_delim = true;
continue;
}
default: get_char(i, j, 1); continue;
}
}
pos_nondelim = j;
get_char(i, j, 1);
}
else
{
i++;
}
}
else
{
get_char(i, j, 1);
}
}
if (j != umax && (real[j] == delim[0] || real[j] == delim[1])) j--; // Do not include a delmiter at the end
real.resize(j + 1);
return real;
}
u64 fs::get_dir_size(const std::string& path, u64 rounding_alignment)
{
u64 result = 0;
@@ -1821,8 +1813,8 @@ fs::file fs::make_gather(std::vector<fs::file> files)
{
u64 pos = 0;
u64 end = 0;
std::vector<file> files;
std::map<u64, u64> ends; // Fragment End Offset -> Index
std::vector<file> files{};
std::map<u64, u64> ends{}; // Fragment End Offset -> Index
gather_stream(std::vector<fs::file> arg)
: files(std::move(arg))
@@ -1854,7 +1846,7 @@ fs::file fs::make_gather(std::vector<fs::file> files)
return result;
}
bool trunc(u64 length) override
bool trunc(u64) override
{
return false;
}
@@ -1897,7 +1889,7 @@ fs::file fs::make_gather(std::vector<fs::file> files)
return 0;
}
u64 write(const void* buffer, u64 size) override
u64 write(const void*, u64) override
{
return 0;
}
+59 -28
View File
@@ -1,6 +1,7 @@
#pragma once // No BOM and only basic ASCII in this header, or a neko will die
#include "util/types.hpp"
#include "util/shared_ptr.hpp"
#include "bit_set.h"
#include <memory>
@@ -81,7 +82,7 @@ namespace fs
{
virtual ~file_base();
virtual stat_t stat();
[[noreturn]] virtual stat_t stat();
virtual void sync();
virtual bool trunc(u64 length) = 0;
virtual u64 read(void* buffer, u64 size) = 0;
@@ -95,7 +96,7 @@ namespace fs
// Directory entry (TODO)
struct dir_entry : stat_t
{
std::string name;
std::string name{};
dir_entry()
: stat_t{}
@@ -124,16 +125,19 @@ namespace fs
// Virtual device
struct device_base
{
const std::string fs_prefix;
device_base();
virtual ~device_base();
virtual bool stat(const std::string& path, stat_t& info) = 0;
virtual bool statfs(const std::string& path, device_stat& info) = 0;
virtual bool remove_dir(const std::string& path) = 0;
virtual bool create_dir(const std::string& path) = 0;
virtual bool rename(const std::string& from, const std::string& to) = 0;
virtual bool remove(const std::string& path) = 0;
virtual bool trunc(const std::string& path, u64 length) = 0;
virtual bool utime(const std::string& path, s64 atime, s64 mtime) = 0;
virtual bool remove_dir(const std::string& path);
virtual bool create_dir(const std::string& path);
virtual bool rename(const std::string& from, const std::string& to);
virtual bool remove(const std::string& path);
virtual bool trunc(const std::string& path, u64 length);
virtual bool utime(const std::string& path, s64 atime, s64 mtime);
virtual std::unique_ptr<file_base> open(const std::string& path, bs_t<open_mode> mode) = 0;
virtual std::unique_ptr<dir_base> open_dir(const std::string& path) = 0;
@@ -146,10 +150,10 @@ namespace fs
constexpr struct pod_tag_t{} pod_tag;
// Get virtual device for specified path (nullptr for real path)
std::shared_ptr<device_base> get_virtual_device(const std::string& path);
shared_ptr<device_base> get_virtual_device(const std::string& path);
// Set virtual device with specified name (nullptr for deletion)
std::shared_ptr<device_base> set_virtual_device(const std::string& root_name, const std::shared_ptr<device_base>&);
shared_ptr<device_base> set_virtual_device(const std::string& name, shared_ptr<device_base> device);
// Try to get parent directory (returns empty string on failure)
std::string get_parent_dir(const std::string& path);
@@ -198,7 +202,9 @@ namespace fs
class file final
{
std::unique_ptr<file_base> m_file;
std::unique_ptr<file_base> m_file{};
bool strict_read_check(u64 size, u64 type_size) const;
public:
// Default constructor
@@ -377,15 +383,24 @@ namespace fs
}
// Read std::basic_string
template <typename T>
std::enable_if_t<std::is_trivially_copyable_v<T> && !std::is_pointer_v<T>, bool> read(std::basic_string<T>& str, usz size,
template <bool IsStrict = false, typename T>
std::enable_if_t<std::is_trivially_copyable_v<T> && !std::is_pointer_v<T>, bool> read(std::basic_string<T>& str, usz _size,
const char* file = __builtin_FILE(),
const char* func = __builtin_FUNCTION(),
u32 line = __builtin_LINE(),
u32 col = __builtin_COLUMN()) const
{
str.resize(size);
return read(&str[0], size * sizeof(T), line, col, file, func) == size * sizeof(T);
if (!m_file) xnull({line, col, file, func});
if (!_size) return true;
if constexpr (IsStrict)
{
// If _size arg is too high std::bad_alloc may happen in resize and then we cannot error check
if (!strict_read_check(_size, sizeof(T))) return false;
}
str.resize(_size);
return read(str.data(), sizeof(T) * _size, line, col, file, func) == sizeof(T) * _size;
}
// Read POD, sizeof(T) is used
@@ -412,15 +427,23 @@ namespace fs
}
// Read POD std::vector
template <typename T>
std::enable_if_t<std::is_trivially_copyable_v<T> && !std::is_pointer_v<T>, bool> read(std::vector<T>& vec, usz size,
template <bool IsStrict = false, typename T>
std::enable_if_t<std::is_trivially_copyable_v<T> && !std::is_pointer_v<T>, bool> read(std::vector<T>& vec, usz _size,
const char* file = __builtin_FILE(),
const char* func = __builtin_FUNCTION(),
u32 line = __builtin_LINE(),
u32 col = __builtin_COLUMN()) const
{
vec.resize(size);
return read(vec.data(), sizeof(T) * size, line, col, file, func) == sizeof(T) * size;
if (!m_file) xnull({line, col, file, func});
if (!_size) return true;
if constexpr (IsStrict)
{
if (!strict_read_check(_size, sizeof(T))) return false;
}
vec.resize(_size);
return read(vec.data(), sizeof(T) * _size, line, col, file, func) == sizeof(T) * _size;
}
// Read POD (experimental)
@@ -482,7 +505,7 @@ namespace fs
class dir final
{
std::unique_ptr<dir_base> m_dir;
std::unique_ptr<dir_base> m_dir{};
public:
dir() = default;
@@ -543,7 +566,7 @@ namespace fs
class iterator
{
const dir* m_parent;
dir_entry m_entry;
dir_entry m_entry{};
public:
enum class mode
@@ -571,6 +594,14 @@ namespace fs
}
}
iterator(const iterator&) = default;
iterator(iterator&&) = default;
iterator& operator=(const iterator&) = default;
iterator& operator=(iterator&&) = default;
dir_entry& operator *()
{
return m_entry;
@@ -608,7 +639,7 @@ namespace fs
// Unique pending file creation destined to be renamed to the destination file
struct pending_file
{
fs::file file;
fs::file file{};
// This is meant to modify files atomically, overwriting is likely
bool commit(bool overwrite = true);
@@ -617,13 +648,10 @@ namespace fs
~pending_file();
private:
std::string m_path; // Pending file path
std::string m_dest; // Destination file path
std::string m_path{}; // Pending file path
std::string m_dest{}; // Destination file path
};
// Get real path for comparisons (TODO: investigate std::filesystem::path::compare implementation)
std::string escape_path(std::string_view path);
// Delete directory and all its contents recursively
bool remove_all(const std::string& path, bool remove_root = true);
@@ -696,13 +724,16 @@ namespace fs
{
const u64 old_size = obj.size();
if (old_size + size < old_size)
if (old_size + size < old_size || pos + size < pos)
{
xovfl();
}
if (pos > old_size)
{
// Reserve memory
obj.reserve(pos + size);
// Fill gap if necessary (default-initialized)
obj.resize(pos);
}
+27 -19
View File
@@ -8,7 +8,6 @@
#include "util/vm.hpp"
#include "util/asm.hpp"
#include <charconv>
#include <immintrin.h>
#include <zlib.h>
#ifdef __linux__
@@ -143,7 +142,7 @@ asmjit::Error jit_runtime::_add(void** dst, asmjit::CodeHolder* code) noexcept
return asmjit::kErrorOk;
}
asmjit::Error jit_runtime::_release(void* ptr) noexcept
asmjit::Error jit_runtime::_release(void*) noexcept
{
return asmjit::kErrorOk;
}
@@ -218,6 +217,10 @@ asmjit::Runtime& asmjit::get_global_runtime()
utils::memory_commit(m_pos, size, utils::protection::wx);
}
custom_runtime(const custom_runtime&) = delete;
custom_runtime& operator=(const custom_runtime&) = delete;
asmjit::Error _add(void** dst, asmjit::CodeHolder* code) noexcept override
{
usz codeSize = code->getCodeSize();
@@ -249,7 +252,7 @@ asmjit::Runtime& asmjit::get_global_runtime()
return asmjit::kErrorOk;
}
asmjit::Error _release(void* ptr) noexcept override
asmjit::Error _release(void*) noexcept override
{
return asmjit::kErrorOk;
}
@@ -268,10 +271,7 @@ asmjit::Runtime& asmjit::get_global_runtime()
#ifdef LLVM_AVAILABLE
#include <unordered_map>
#include <map>
#include <unordered_set>
#include <set>
#include <array>
#include <deque>
#ifdef _MSC_VER
@@ -281,6 +281,11 @@ asmjit::Runtime& asmjit::get_global_runtime()
#pragma GCC diagnostic ignored "-Wall"
#pragma GCC diagnostic ignored "-Wextra"
#pragma GCC diagnostic ignored "-Wold-style-cast"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#pragma GCC diagnostic ignored "-Wredundant-decls"
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wmissing-noreturn"
#endif
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/FormattedStream.h"
@@ -294,12 +299,6 @@ asmjit::Runtime& asmjit::get_global_runtime()
#pragma GCC diagnostic pop
#endif
#ifdef _WIN32
#include <Windows.h>
#else
#include <sys/mman.h>
#endif
const bool jit_initialize = []() -> bool
{
llvm::InitializeNativeTarget();
@@ -386,6 +385,10 @@ struct MemoryManager1 : llvm::RTDyldMemoryManager
MemoryManager1() = default;
MemoryManager1(const MemoryManager1&) = delete;
MemoryManager1& operator=(const MemoryManager1&) = delete;
~MemoryManager1() override
{
utils::memory_release(ptr, c_max_size * 2);
@@ -439,12 +442,12 @@ struct MemoryManager1 : llvm::RTDyldMemoryManager
return this->ptr + olda;
}
u8* allocateCodeSection(uptr size, uint align, uint sec_id, llvm::StringRef sec_name) override
u8* allocateCodeSection(uptr size, uint align, uint /*sec_id*/, llvm::StringRef /*sec_name*/) override
{
return allocate(code_ptr, size, align, utils::protection::wx);
}
u8* allocateDataSection(uptr size, uint align, uint sec_id, llvm::StringRef sec_name, bool is_ro) override
u8* allocateDataSection(uptr size, uint align, uint /*sec_id*/, llvm::StringRef /*sec_name*/, bool /*is_ro*/) override
{
return allocate(data_ptr, size, align, utils::protection::rw);
}
@@ -454,7 +457,7 @@ struct MemoryManager1 : llvm::RTDyldMemoryManager
return false;
}
void registerEHFrames(u8* addr, u64 load_addr, usz size) override
void registerEHFrames(u8*, u64, usz) override
{
}
@@ -489,12 +492,12 @@ struct MemoryManager2 : llvm::RTDyldMemoryManager
return {addr, llvm::JITSymbolFlags::Exported};
}
u8* allocateCodeSection(uptr size, uint align, uint sec_id, llvm::StringRef sec_name) override
u8* allocateCodeSection(uptr size, uint align, uint /*sec_id*/, llvm::StringRef /*sec_name*/) override
{
return jit_runtime::alloc(size, align, true);
}
u8* allocateDataSection(uptr size, uint align, uint sec_id, llvm::StringRef sec_name, bool is_ro) override
u8* allocateDataSection(uptr size, uint align, uint /*sec_id*/, llvm::StringRef /*sec_name*/, bool /*is_ro*/) override
{
return jit_runtime::alloc(size, align, false);
}
@@ -504,7 +507,7 @@ struct MemoryManager2 : llvm::RTDyldMemoryManager
return false;
}
void registerEHFrames(u8* addr, u64 load_addr, usz size) override
void registerEHFrames(u8*, u64, usz) override
{
}
@@ -565,7 +568,12 @@ public:
}
}
fs::file(name, fs::rewrite).write(zbuf.get(), zsz - zs.avail_out);
if (!fs::write_file(name, fs::rewrite, zbuf.get(), zsz - zs.avail_out))
{
jit_log.error("LLVM: Failed to create module file: %s (%s)", name, fs::g_tls_error);
return;
}
jit_log.notice("LLVM: Created module: %s", _module->getName().data());
}
+15 -4
View File
@@ -13,6 +13,14 @@
#pragma GCC diagnostic ignored "-Wall"
#pragma GCC diagnostic ignored "-Wextra"
#pragma GCC diagnostic ignored "-Wold-style-cast"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#pragma GCC diagnostic ignored "-Wredundant-decls"
#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
#pragma GCC diagnostic ignored "-Weffc++"
#ifndef __clang__
#pragma GCC diagnostic ignored "-Wduplicated-branches"
#endif
#include <asmjit/asmjit.h>
#pragma GCC diagnostic pop
#endif
@@ -168,7 +176,6 @@ inline FT build_function_asm(F&& builder)
#include <unordered_map>
#include "util/types.hpp"
#include "mutex.h"
#ifdef _MSC_VER
#pragma warning(push, 0)
@@ -178,6 +185,10 @@ inline FT build_function_asm(F&& builder)
#pragma GCC diagnostic ignored "-Wextra"
#pragma GCC diagnostic ignored "-Wold-style-cast"
#pragma GCC diagnostic ignored "-Wsuggest-override"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wmissing-noreturn"
#ifdef __clang__
#pragma clang diagnostic ignored "-Winconsistent-missing-override"
#endif
@@ -195,13 +206,13 @@ inline FT build_function_asm(F&& builder)
class jit_compiler final
{
// Local LLVM context
llvm::LLVMContext m_context;
llvm::LLVMContext m_context{};
// Execution instance
std::unique_ptr<llvm::ExecutionEngine> m_engine;
std::unique_ptr<llvm::ExecutionEngine> m_engine{};
// Arch
std::string m_cpu;
std::string m_cpu{};
public:
jit_compiler(const std::unordered_map<std::string, u64>& _link, const std::string& _cpu, u32 flags = 0);
+5 -7
View File
@@ -29,24 +29,22 @@
#include <algorithm>
#include <cstring>
#include <stdlib.h>
#include <cstdlib>
// check if the scheme name is valid
static bool IsSchemeValid( const std::string& SchemeName )
{
for ( auto c : SchemeName )
return std::all_of(SchemeName.cbegin(), SchemeName.cend(), [](const auto& c)
{
if ( !isalpha( c ) && c != '+' && c != '-' && c != '.' ) return false;
}
return true;
return isalpha(c) || c == '+' || c == '-' || c == '.';
});
}
bool LUrlParser::clParseURL::GetPort( int* OutPort ) const
{
if ( !IsValid() ) { return false; }
int Port = atoi( m_Port.c_str() );
const int Port = atoi( m_Port.c_str() );
if ( Port <= 0 || Port > 65535 ) { return false; }
+13 -13
View File
@@ -1,21 +1,21 @@
/*
* Lightweight URL & URI parser (RFC 1738, RFC 3986)
* https://github.com/corporateshark/LUrlParser
*
*
* The MIT License (MIT)
*
*
* Copyright (C) 2015 Sergey Kosarevsky (sk@linderdaum.com)
*
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -47,14 +47,14 @@ namespace LUrlParser
{
public:
LUrlParserError m_ErrorCode;
std::string m_Scheme;
std::string m_Host;
std::string m_Port;
std::string m_Path;
std::string m_Query;
std::string m_Fragment;
std::string m_UserName;
std::string m_Password;
std::string m_Scheme{};
std::string m_Host{};
std::string m_Port{};
std::string m_Path{};
std::string m_Query{};
std::string m_Fragment{};
std::string m_UserName{};
std::string m_Password{};
clParseURL()
: m_ErrorCode( LUrlParserError_Uninitialized )
+41 -17
View File
@@ -254,6 +254,13 @@ void fmt_class_string<u128>::format(std::string& out, u64 arg)
{
// TODO: it should be supported as full-fledged integral type (with %u, %d, etc, fmt)
const u128& num = get_object(arg);
if (!num)
{
out += '0';
return;
}
#ifdef _MSC_VER
fmt::append(out, "0x%016llx%016llx", num.hi, num.lo);
#else
@@ -261,6 +268,12 @@ void fmt_class_string<u128>::format(std::string& out, u64 arg)
#endif
}
template <>
void fmt_class_string<s128>::format(std::string& out, u64 arg)
{
return fmt_class_string<u128>::format(out, arg);
}
template <>
void fmt_class_string<src_loc>::format(std::string& out, u64 arg)
{
@@ -344,7 +357,9 @@ struct fmt::cfmt_src
template <typename T>
T get(usz index) const
{
return *reinterpret_cast<const T*>(reinterpret_cast<const u8*>(args + index));
T res{};
std::memcpy(&res, reinterpret_cast<const u8*>(args + index), sizeof(res));
return res;
}
void skip(usz extra)
@@ -373,6 +388,8 @@ struct fmt::cfmt_src
TYPE(short);
if (std::is_signed<char>::value) TYPE(char);
TYPE(long);
TYPE(u128);
TYPE(s128);
#undef TYPE
@@ -394,25 +411,28 @@ void fmt::raw_append(std::string& out, const char* fmt, const fmt_type_info* sup
cfmt_append(out, fmt, cfmt_src{sup, args});
}
std::string fmt::replace_first(const std::string& src, const std::string& from, const std::string& to)
std::string fmt::replace_all(std::string_view src, std::string_view from, std::string_view to, usz count)
{
auto pos = src.find(from);
std::string target;
target.reserve(src.size() + to.size());
if (pos == umax)
for (usz i = 0, replaced = 0; i < src.size();)
{
return src;
}
const usz pos = src.find(from, i);
return (pos ? src.substr(0, pos) + to : to) + std::string(src.c_str() + pos + from.length());
}
if (pos == umax || replaced++ >= count)
{
// No match or too many encountered, append the rest of the string as is
target.append(src.substr(i));
break;
}
std::string fmt::replace_all(const std::string& src, const std::string& from, const std::string& to)
{
std::string target = src;
for (auto pos = target.find(from); pos != umax; pos = target.find(from, pos + 1))
{
target = (pos ? target.substr(0, pos) + to : to) + std::string(target.c_str() + pos + from.length());
pos += to.length();
// Append source until the matched string position
target.append(src.substr(i, pos - i));
// Replace string
target.append(to);
i = pos + from.size();
}
return target;
@@ -429,11 +449,10 @@ std::vector<std::string> fmt::split(std::string_view source, std::initializer_li
for (auto& separator : separators)
{
if (usz pos0 = source.find(separator, index); pos0 != umax)
if (usz pos0 = source.find(separator, index); pos0 < pos)
{
pos = pos0;
sep_size = separator.size();
break;
}
}
@@ -455,6 +474,11 @@ std::vector<std::string> fmt::split(std::string_view source, std::initializer_li
result.emplace_back(std::string(piece));
}
if (result.empty() && !is_skip_empty)
{
result.emplace_back();
}
return result;
}
+1 -3
View File
@@ -1,6 +1,5 @@
#pragma once
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
@@ -24,8 +23,7 @@ inline void strcpy_trunc(D& dst, const T& src)
namespace fmt
{
std::string replace_first(const std::string& src, const std::string& from, const std::string& to);
std::string replace_all(const std::string& src, const std::string& from, const std::string& to);
std::string replace_all(std::string_view src, std::string_view from, std::string_view to, usz count = -1);
template <usz list_size>
std::string replace_all(std::string src, const std::pair<std::string, std::string> (&list)[list_size])
+101 -59
View File
@@ -2,7 +2,6 @@
#include "Emu/System.h"
#include "Emu/Cell/SPUThread.h"
#include "Emu/Cell/PPUThread.h"
#include "Emu/Cell/RawSPUThread.h"
#include "Emu/Cell/lv2/sys_mmapper.h"
#include "Emu/Cell/lv2/sys_event.h"
#include "Emu/RSX/RSXThread.h"
@@ -10,6 +9,7 @@
#include "Utilities/JIT.h"
#include <thread>
#include <sstream>
#include <cfenv>
#ifdef _WIN32
#include <Windows.h>
@@ -94,7 +94,7 @@ thread_local bool g_tls_access_violation_recovered = false;
extern thread_local std::string(*g_tls_log_prefix)();
// Report error and call std::abort(), defined in main.cpp
[[noreturn]] void report_fatal_error(const std::string&);
[[noreturn]] void report_fatal_error(std::string_view);
template <>
void fmt_class_string<std::thread::id>::format(std::string& out, u64 arg)
@@ -450,7 +450,7 @@ void decode_x64_reg_op(const u8* code, x64_op_t& out_op, x64_reg_t& out_reg, usz
}
case 0x7f:
{
if ((repe && !oso) || (!repe && oso)) // MOVDQU/MOVDQA xmm/m, xmm
if (repe != oso) // MOVDQU/MOVDQA xmm/m, xmm
{
out_op = X64OP_STORE;
out_reg = get_modRM_reg_xmm(code, rex);
@@ -1261,7 +1261,9 @@ bool handle_access_violation(u32 addr, bool is_writing, x64_context* context) no
{
if (op == X64OP_NONE)
{
sig_log.error("decode_x64_reg_op(%p): unsupported opcode: %s", code, *reinterpret_cast<const be_t<v128, 1>*>(code));
be_t<v128> dump;
std::memcpy(&dump, code, sizeof(dump));
sig_log.error("decode_x64_reg_op(%p): unsupported opcode: %s", code, dump);
}
};
@@ -1407,9 +1409,9 @@ bool handle_access_violation(u32 addr, bool is_writing, x64_context* context) no
return false;
}
if (area->flags & 0x100 || (is_writing && vm::check_addr(addr)))
if (vm::reader_lock rlock; vm::check_addr(addr, 0))
{
// For 4kb pages or read only memory
// 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);
return true;
}
@@ -1423,13 +1425,13 @@ bool handle_access_violation(u32 addr, bool is_writing, x64_context* context) no
vm::temporary_unlock(*cpu);
u32 pf_port_id = 0;
if (auto pf_entries = g_fxo->get<page_fault_notification_entries>(); true)
if (auto& pf_entries = g_fxo->get<page_fault_notification_entries>(); true)
{
if (auto mem = vm::get(vm::any, addr))
{
reader_lock lock(pf_entries->mutex);
reader_lock lock(pf_entries.mutex);
for (const auto& entry : pf_entries->entries)
for (const auto& entry : pf_entries.entries)
{
if (entry.start_addr == mem->addr)
{
@@ -1489,10 +1491,10 @@ bool handle_access_violation(u32 addr, bool is_writing, x64_context* context) no
// Now, place the page fault event onto table so that other functions [sys_mmapper_free_address and pagefault recovery funcs etc]
// know that this thread is page faulted and where.
auto pf_events = g_fxo->get<page_fault_event_entries>();
auto& pf_events = g_fxo->get<page_fault_event_entries>();
{
std::lock_guard pf_lock(pf_events->pf_mutex);
pf_events->events.emplace(cpu, addr);
std::lock_guard pf_lock(pf_events.pf_mutex);
pf_events.events.emplace(cpu, addr);
}
sig_log.warning("Page_fault %s location 0x%x because of %s memory", is_writing ? "writing" : "reading",
@@ -1607,6 +1609,22 @@ bool handle_access_violation(u32 addr, bool is_writing, x64_context* context) no
return true;
}
static void append_thread_name(std::string& msg)
{
if (thread_ctrl::get_current())
{
fmt::append(msg, "Emu Thread Name: '%s'.\n", thread_ctrl::get_name());
}
else if (thread_ctrl::is_main())
{
fmt::append(msg, "Thread: Main Thread.\n");
}
else
{
fmt::append(msg, "Thread id = %s.\n", std::this_thread::get_id());
}
}
#ifdef _WIN32
static LONG exception_handler(PEXCEPTION_POINTERS pExp) noexcept
@@ -1668,14 +1686,7 @@ static LONG exception_filter(PEXCEPTION_POINTERS pExp) noexcept
}
}
if (thread_ctrl::get_current())
{
fmt::append(msg, "Emu Thread Name: '%s'.\n", thread_ctrl::get_name());
}
// TODO: Report full thread name if not an emu thread
fmt::append(msg, "Thread id = %s.\n", std::this_thread::get_id());
append_thread_name(msg);
std::vector<HMODULE> modules;
for (DWORD size = 256; modules.size() != size; size /= sizeof(HMODULE))
@@ -1752,7 +1763,7 @@ const bool s_exception_handler_set = []() -> bool
#else
static void signal_handler(int sig, siginfo_t* info, void* uct) noexcept
static void signal_handler(int /*sig*/, siginfo_t* info, void* uct) noexcept
{
x64_context* context = static_cast<ucontext_t*>(uct);
@@ -1793,19 +1804,11 @@ static void signal_handler(int sig, siginfo_t* info, void* uct) noexcept
std::string msg = fmt::format("Segfault %s location %p at %p.\n", cause, info->si_addr, RIP(context));
if (thread_ctrl::get_current())
{
fmt::append(msg, "Emu Thread Name: '%s'.\n", thread_ctrl::get_name());
}
// TODO: Report full thread name if not an emu thread
fmt::append(msg, "Thread id = %s.\n", std::this_thread::get_id());
append_thread_name(msg);
if (IsDebuggerPresent())
{
sys_log.fatal("\n%s", msg);
std::fprintf(stderr, "%s\n", msg.c_str());
sys_log.notice("\n%s", dump_useful_thread_info());
@@ -2078,6 +2081,8 @@ thread_base::native_entry thread_base::finalize(u64 _self) noexcept
thread_ctrl::set_thread_affinity_mask(0);
std::fesetround(FE_TONEAREST);
static constexpr u64 s_stop_bit = 0x8000'0000'0000'0000ull;
static atomic_t<u64> s_pool_ctr = []
@@ -2211,8 +2216,16 @@ thread_state thread_ctrl::state()
{
auto _this = g_tls_this_thread;
// Guard for recursive calls (TODO: may be more effective to reuse one of m_sync bits)
static thread_local bool s_tls_exec = false;
// Drain execution queue
_this->exec();
if (!s_tls_exec)
{
s_tls_exec = true;
_this->exec();
s_tls_exec = false;
}
return static_cast<thread_state>(_this->m_sync & 3);
}
@@ -2496,12 +2509,9 @@ void thread_base::exec()
sig_log.fatal("Thread terminated due to fatal error: %s", reason);
std::fprintf(stderr, "Thread '%s' terminated due to fatal error: %s\n", g_tls_log_prefix().c_str(), std::string(reason).c_str());
#ifdef _WIN32
if (IsDebuggerPresent())
{
OutputDebugStringA(fmt::format("Thread '%s' terminated due to fatal error: %s\n", g_tls_log_prefix(), reason).c_str());
__debugbreak();
}
#else
@@ -2532,8 +2542,7 @@ void thread_base::exec()
#endif
}
// Assume main thread
report_fatal_error(std::string(reason));
report_fatal_error(reason);
}
void thread_ctrl::detect_cpu_layout()
@@ -2698,9 +2707,18 @@ u64 thread_ctrl::get_affinity_mask(thread_class group)
break;
case 16:
// 1700, 1800, 2700, TR 1900X family
ppu_mask = 0b1111111100000000;
spu_mask = ppu_mask;
rsx_mask = 0b0000000000111100;
if (g_cfg.core.thread_scheduler == thread_scheduler_mode::alt)
{
ppu_mask = 0b0010000010000000;
spu_mask = 0b0000101010101010;
rsx_mask = 0b1000000000000000;
}
else
{
ppu_mask = 0b1111111100000000;
spu_mask = ppu_mask;
rsx_mask = 0b0000000000111100;
}
break;
case 12:
// 1600, 2600 family, Assign threads 3-12
@@ -2728,17 +2746,39 @@ u64 thread_ctrl::get_affinity_mask(thread_class group)
spu_mask = 0b000000111111000000000000;
rsx_mask = 0b000000000000111111000000;
break;
default:
if (thread_count >= 16)
case 16:
// 5800X
if (g_cfg.core.thread_scheduler == thread_scheduler_mode::alt)
{
ppu_mask = 0b0000000011110000;
spu_mask = 0b1111111100000000;
rsx_mask = 0b0000000000001111;
}
else
{
// Verified by more than one windows user on 16-thread CPU
ppu_mask = spu_mask = rsx_mask = (0b10101010101010101010101010101010 & all_cores_mask);
}
break;
case 12:
// 5600X
if (g_cfg.core.thread_scheduler == thread_scheduler_mode::alt)
{
ppu_mask = 0b000000001100;
spu_mask = 0b111111110000;
rsx_mask = 0b000000000011;
}
else
{
ppu_mask = spu_mask = rsx_mask = all_cores_mask;
}
break;
default:
if (thread_count > 24)
{
ppu_mask = spu_mask = rsx_mask = (0b10101010101010101010101010101010 & all_cores_mask);
}
break;
}
break;
}
@@ -2763,23 +2803,8 @@ u64 thread_ctrl::get_affinity_mask(thread_class group)
}
case native_core_arrangement::intel_ht:
{
/* This has been disabled as it seems to degrade performance instead of improving it.
if (thread_count <= 4)
{
//i3 or worse
switch (group)
{
case thread_class::rsx:
case thread_class::ppu:
return (0b0101 & all_cores_mask);
case thread_class::spu:
return (0b1010 & all_cores_mask);
case thread_class::general:
return all_cores_mask;
}
}
*/
if (thread_count >= 12 && g_cfg.core.thread_scheduler == thread_scheduler_mode::alt)
return (0b10101010101010101010101010101010 & all_cores_mask); // Potentially improves performance by mimicking HT off
return all_cores_mask;
}
}
@@ -2959,9 +2984,12 @@ std::pair<void*, usz> thread_ctrl::get_thread_stack()
void* saddr = 0;
usz ssize = 0;
pthread_attr_t attr;
#ifdef __linux__
#if defined(__linux__)
pthread_getattr_np(pthread_self(), &attr);
pthread_attr_getstack(&attr, &saddr, &ssize);
#elif defined(__APPLE__)
saddr = pthread_get_stackaddr_np(pthread_self());
ssize = pthread_get_stacksize_np(pthread_self());
#else
pthread_attr_get_np(pthread_self(), &attr);
pthread_attr_getstackaddr(&attr, &saddr);
@@ -2970,3 +2998,17 @@ std::pair<void*, usz> thread_ctrl::get_thread_stack()
#endif
return {saddr, ssize};
}
u64 thread_ctrl::get_tid()
{
#ifdef _WIN32
return GetCurrentThreadId();
#else
return reinterpret_cast<u64>(pthread_self());
#endif
}
bool thread_ctrl::is_main()
{
return get_tid() == utils::main_tid;
}
+104 -219
View File
@@ -5,8 +5,6 @@
#include "util/shared_ptr.hpp"
#include <string>
#include <memory>
#include <string_view>
#include "mutex.h"
#include "lockless.h"
@@ -44,7 +42,7 @@ class named_thread;
class thread_base;
template <typename Ctx, typename X = void, typename... Args>
template <typename Ctx, typename... Args>
struct result_storage
{
static constexpr bool empty = true;
@@ -52,8 +50,8 @@ struct result_storage
using type = void;
};
template <typename Ctx, typename... Args>
struct result_storage<Ctx, std::enable_if_t<!std::is_void_v<std::invoke_result_t<Ctx, Args&&...>>>, Args...>
template <typename Ctx, typename... Args> requires (!std::is_void_v<std::invoke_result_t<Ctx, Args&&...>>)
struct result_storage<Ctx, Args...>
{
using T = std::invoke_result_t<Ctx, Args&&...>;
@@ -86,6 +84,12 @@ struct result_storage<Ctx, std::enable_if_t<!std::is_void_v<std::invoke_result_t
}
};
template <typename T>
concept NamedThreadName = requires (T& t)
{
std::string_view(t.thread_name);
};
// Base class for task queue (linked list)
class thread_future
{
@@ -112,12 +116,6 @@ public:
}
};
template <typename T, typename = void>
struct thread_thread_name : std::bool_constant<false> {};
template <typename T>
struct thread_thread_name<T, std::void_t<decltype(named_thread<T>::thread_name)>> : std::bool_constant<true> {};
// Thread base class
class thread_base
{
@@ -339,11 +337,95 @@ public:
}
};
// Get thread ID (works for all threads)
static u64 get_tid();
// Check whether current thread is main thread (usually Qt GUI)
static bool is_main();
private:
// Miscellaneous
static const u64 process_affinity_mask;
};
// 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]] Ctx m_func;
using future = thread_future_t;
public:
thread_future_t(Ctx&& func, Args&&... args)
: m_args(std::forward<Args>(args)...)
, m_func(std::forward<Ctx>(func))
{
thread_future::exec.raw() = +[](thread_base* tb, thread_future* tf)
{
const auto _this = static_cast<future*>(tf);
if (!tb) [[unlikely]]
{
if constexpr (!future::empty && !Discard)
{
_this->init();
}
return;
}
if constexpr (future::empty || Discard)
{
std::apply(_this->m_func, std::move(_this->m_args));
}
else
{
new (_this->_get()) decltype(auto)(std::apply(_this->m_func, std::move(_this->m_args)));
}
};
}
~thread_future_t()
{
if constexpr (!future::empty && !Discard)
{
if (!this->exec)
{
this->destroy();
}
}
}
decltype(auto) get()
{
while (this->exec)
{
this->wait();
}
if constexpr (!future::empty && !Discard)
{
return *this->_get();
}
}
decltype(auto) get() const
{
while (this->exec)
{
this->wait();
}
if constexpr (!future::empty && !Discard)
{
return *this->_get();
}
}
};
// Derived from the callable object Context, possibly a lambda
template <class Context>
class named_thread final : public Context, result_storage<Context>, thread_base
@@ -397,17 +479,17 @@ class named_thread final : public Context, result_storage<Context>, thread_base
friend class thread_ctrl;
public:
// Default constructor
template <bool Valid = std::is_default_constructible_v<Context> && thread_thread_name<Context>(), typename = std::enable_if_t<Valid>>
named_thread()
: Context()
// Forwarding constructor with default name (also potentially the default constructor)
template <typename... Args> requires (std::is_constructible_v<Context, Args&&...>) && (NamedThreadName<Context>)
named_thread(Args&&... args)
: Context(std::forward<Args>(args)...)
, thread(trampoline, Context::thread_name)
{
thread::start();
}
// Normal forwarding constructor
template <typename... Args, typename = std::enable_if_t<std::is_constructible_v<Context, Args&&...>>>
template <typename... Args> requires (std::is_constructible_v<Context, Args&&...>) && (!NamedThreadName<Context>)
named_thread(std::string_view name, Args&&... args)
: Context(std::forward<Args>(args)...)
, thread(trampoline, name)
@@ -467,74 +549,9 @@ public:
if constexpr (v1)
{
class future : public thread_future, result_storage<Context, void, Arg, Args...>
{
// A tuple to store arguments
decltype(std::make_tuple(std::forward<Arg, Args...>(arg, args...))) m_args;
using future = thread_future_t<Discard, Context&, Arg, Args...>;
public:
future(Arg&& arg, Args&&... args)
: m_args(std::forward<Arg, Args...>(arg, args...))
{
thread_future::exec.raw() = +[](thread_base* tb, thread_future* tf)
{
const auto _this = static_cast<future*>(tf);
if (!tb) [[unlikely]]
{
if constexpr (!future::empty && !Discard)
{
_this->init();
}
return;
}
if constexpr (future::empty || Discard)
{
std::apply(*static_cast<Context*>(static_cast<named_thread*>(tb)), _this->m_args);
}
else
{
new (_this->_get()) decltype(auto)(std::apply(*static_cast<Context*>(static_cast<named_thread*>(tb)), _this->m_args));
}
};
}
future(const future&) = delete;
future& operator=(const future&) = delete;
~future()
{
if constexpr (!future::empty && !Discard)
{
// Should be set to null if executed
if (!this->exec)
{
this->destroy();
}
}
}
decltype(auto) get()
{
if constexpr (!future::empty && !Discard)
{
return *this->_get();
}
}
decltype(auto) get() const
{
if constexpr (!future::empty && !Discard)
{
return *this->_get();
}
}
};
single_ptr<future> target = make_single<future>(std::forward<Arg, Args...>(arg, args...));
single_ptr<future> target = make_single<future>(*static_cast<Context*>(this), std::forward<Arg>(arg), std::forward<Args>(args)...);
if constexpr (!Discard)
{
@@ -553,75 +570,9 @@ public:
}
else if constexpr (v2)
{
class future : public thread_future, result_storage<std::decay_t<Arg>, void, Args...>
{
decltype(std::make_tuple(std::forward<Args...>(args...))) m_args;
using future = thread_future_t<Discard, Arg, Args...>;
std::decay_t<Arg> m_func;
public:
future(Arg func, Args&&... args)
: m_args(std::forward<Args...>(args...))
, m_func(func)
{
thread_future::exec.raw() = +[](thread_base* tb, thread_future* tf)
{
const auto _this = static_cast<future*>(tf);
if (!tb) [[unlikely]]
{
if constexpr (!future::empty && !Discard)
{
_this->init();
}
return;
}
if constexpr (future::empty || Discard)
{
std::apply(_this->m_func, _this->m_args);
}
else
{
new (_this->_get()) decltype(auto)(std::apply(_this->m_func, _this->m_args));
}
};
}
future(const future&) = delete;
future& operator=(const future&) = delete;
~future()
{
if constexpr (!future::empty && !Discard)
{
if (!this->exec)
{
this->destroy();
}
}
}
decltype(auto) get()
{
if constexpr (!future::empty && !Discard)
{
return *this->_get();
}
}
decltype(auto) get() const
{
if constexpr (!future::empty && !Discard)
{
return *this->_get();
}
}
};
single_ptr<future> target = make_single<future>(std::forward<Arg, Args...>(arg, args...));
single_ptr<future> target = make_single<future>(std::forward<Arg>(arg), std::forward<Args>(args)...);
if constexpr (!Discard)
{
@@ -637,75 +588,9 @@ public:
}
else if constexpr (v3)
{
class future : public thread_future, result_storage<std::decay_t<Arg>, void, Context&, Args...>
{
decltype(std::make_tuple(std::forward<Args...>(args...))) m_args;
using future = thread_future_t<Discard, Arg, Context&, Args...>;
std::decay_t<Arg> m_func;
public:
future(Arg func, Args&&... args)
: m_args(std::forward<Args...>(args...))
, m_func(func)
{
thread_future::exec.raw() = +[](thread_base* tb, thread_future* tf)
{
const auto _this = static_cast<future*>(tf);
if (!tb) [[unlikely]]
{
if constexpr (!future::empty && !Discard)
{
_this->init();
}
return;
}
if constexpr (future::empty || Discard)
{
std::apply(_this->m_func, *static_cast<Context*>(static_cast<named_thread*>(tb)), _this->m_args);
}
else
{
new (_this->_get()) decltype(auto)(std::apply(_this->m_func, *static_cast<Context*>(static_cast<named_thread*>(tb)), _this->m_args));
}
};
}
future(const future&) = delete;
future& operator=(const future&) = delete;
~future()
{
if constexpr (!future::empty && !Discard)
{
if (!this->exec)
{
this->destroy();
}
}
}
decltype(auto) get()
{
if constexpr (!future::empty && !Discard)
{
return *this->_get();
}
}
decltype(auto) get() const
{
if constexpr (!future::empty && !Discard)
{
return *this->_get();
}
}
};
single_ptr<future> target = make_single<future>(std::forward<Arg, Args...>(arg, args...));
single_ptr<future> target = make_single<future>(std::forward<Arg>(arg), std::ref(*static_cast<Context*>(this)), std::forward<Args>(args)...);
if constexpr (!Discard)
{
+6 -6
View File
@@ -30,31 +30,31 @@ public:
double GetElapsedTimeInSec() const
{
return double(GetElapsedTimeInMicroSec()) / 1000000.0;
return static_cast<double>(GetElapsedTimeInMicroSec()) / 1000000.0;
}
double GetElapsedTimeInMilliSec() const
{
return double(GetElapsedTimeInMicroSec()) / 1000.0;
return static_cast<double>(GetElapsedTimeInMicroSec()) / 1000.0;
}
u64 GetElapsedTimeInMicroSec() const
{
steady_clock::time_point now = m_stopped ? m_end : steady_clock::now();
const steady_clock::time_point now = m_stopped ? m_end : steady_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(now - m_start).count();
}
u64 GetElapsedTimeInNanoSec() const
{
steady_clock::time_point now = m_stopped ? m_end : steady_clock::now();
const steady_clock::time_point now = m_stopped ? m_end : steady_clock::now();
return std::chrono::duration_cast<std::chrono::nanoseconds>(now - m_start).count();
}
u64 GetMsSince(steady_clock::time_point timestamp)
u64 GetMsSince(steady_clock::time_point timestamp) const
{
steady_clock::time_point now = m_stopped ? m_end : steady_clock::now();
const steady_clock::time_point now = m_stopped ? m_end : steady_clock::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(now - timestamp).count();
}
+16 -49
View File
@@ -3,6 +3,7 @@
#include "util/types.hpp"
#include "StrFmt.h"
#include <vector>
#include <algorithm>
namespace utils
@@ -65,7 +66,6 @@ namespace utils
public:
// Constructors
constexpr address_range() = default;
constexpr address_range(const address_range &other) : start(other.start), end(other.end) {}
static constexpr address_range start_length(u32 _start, u32 _length)
{
@@ -239,16 +239,11 @@ namespace utils
}
// Comparison Operators
bool operator ==(const address_range &other) const
bool operator ==(const address_range& other) const
{
return (start == other.start && end == other.end);
}
bool operator !=(const address_range &other) const
{
return (start != other.start || end != other.end);
}
/**
* Debug
*/
@@ -272,10 +267,10 @@ namespace utils
class address_range_vector
{
public:
using vector_type = typename std::vector<address_range>;
using iterator = typename vector_type::iterator;
using const_iterator = typename vector_type::const_iterator;
using size_type = typename vector_type::size_type;
using vector_type = std::vector<address_range>;
using iterator = vector_type::iterator;
using const_iterator = vector_type::const_iterator;
using size_type = vector_type::size_type;
private:
vector_type data;
@@ -456,7 +451,7 @@ namespace utils
// Will fail if ranges within the vector overlap our touch each-other
bool check_consistency() const
{
usz _size = data.size();
const usz _size = data.size();
for (usz i = 0; i < _size; ++i)
{
@@ -486,20 +481,10 @@ namespace utils
// Test for overlap with a given range
bool overlaps(const address_range &range) const
{
for (const address_range &current : data)
return std::any_of(data.cbegin(), data.cend(), [&range](const address_range& cur)
{
if (!current.valid())
{
continue;
}
if (current.overlaps(range))
{
return true;
}
}
return false;
return cur.valid() && cur.overlaps(range);
});
}
// Test for overlap with a given address_range vector
@@ -531,37 +516,19 @@ namespace utils
// Test if a given range is fully contained inside this vector
bool contains(const address_range &range) const
{
for (const address_range &cur : *this)
return std::any_of(this->begin(), this->end(), [&range](const address_range& cur)
{
if (!cur.valid())
{
continue;
}
if (range.inside(cur))
{
return true;
}
}
return false;
return cur.valid() && cur.inside(range);
});
}
// Test if all ranges in this vector are full contained inside a specific range
bool inside(const address_range &range) const
{
for (const address_range &cur : *this)
return std::all_of(this->begin(), this->end(), [&range](const address_range& cur)
{
if (!cur.valid())
{
continue;
}
if (!cur.inside(range))
{
return false;
}
}
return true;
return !cur.valid() || cur.inside(range);
});
}
};
+30 -17
View File
@@ -530,7 +530,7 @@ static std::basic_string<u32> apply_modification(const patch_engine::patch_info&
auto ptr = dst + offset;
u32 resval = -1;
u32 resval = umax;
switch (p.type)
{
@@ -547,58 +547,70 @@ static std::basic_string<u32> apply_modification(const patch_engine::patch_info&
}
case patch_type::le16:
{
*reinterpret_cast<le_t<u16, 1>*>(ptr) = static_cast<u16>(p.value.long_value);
le_t<u16> val = static_cast<u16>(p.value.long_value);
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::le32:
{
*reinterpret_cast<le_t<u32, 1>*>(ptr) = static_cast<u32>(p.value.long_value);
le_t<u32> val = static_cast<u32>(p.value.long_value);
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::lef32:
{
*reinterpret_cast<le_t<u32, 1>*>(ptr) = std::bit_cast<u32, f32>(static_cast<f32>(p.value.double_value));
le_t<f32> val = static_cast<f32>(p.value.double_value);
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::le64:
{
*reinterpret_cast<le_t<u64, 1>*>(ptr) = static_cast<u64>(p.value.long_value);
le_t<u64> val = static_cast<u64>(p.value.long_value);
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::lef64:
{
*reinterpret_cast<le_t<u64, 1>*>(ptr) = std::bit_cast<u64, f64>(p.value.double_value);
le_t<f64> val = p.value.double_value;
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::be16:
{
*reinterpret_cast<be_t<u16, 1>*>(ptr) = static_cast<u16>(p.value.long_value);
be_t<u16> val = static_cast<u16>(p.value.long_value);
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::bd32:
{
*reinterpret_cast<be_t<u32, 1>*>(ptr) = static_cast<u32>(p.value.long_value);
be_t<u32> val = static_cast<u32>(p.value.long_value);
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::be32:
{
*reinterpret_cast<be_t<u32, 1>*>(ptr) = static_cast<u32>(p.value.long_value);
if (offset % 4 == 0) resval = offset;
be_t<u32> val = static_cast<u32>(p.value.long_value);
std::memcpy(ptr, &val, sizeof(val));
if (offset % 4 == 0)
resval = offset;
break;
}
case patch_type::bef32:
{
*reinterpret_cast<be_t<u32, 1>*>(ptr) = std::bit_cast<u32, f32>(static_cast<f32>(p.value.double_value));
be_t<f32> val = static_cast<f32>(p.value.double_value);
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::bd64:
{
*reinterpret_cast<be_t<u64, 1>*>(ptr) = static_cast<u64>(p.value.long_value);
be_t<u64> val = static_cast<u64>(p.value.long_value);
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::be64:
{
*reinterpret_cast<be_t<u64, 1>*>(ptr) = static_cast<u64>(p.value.long_value);
be_t<u64> val = static_cast<u64>(p.value.long_value);
std::memcpy(ptr, &val, sizeof(val));
if (offset % 4)
{
@@ -611,7 +623,8 @@ static std::basic_string<u32> apply_modification(const patch_engine::patch_info&
}
case patch_type::bef64:
{
*reinterpret_cast<be_t<u64, 1>*>(ptr) = std::bit_cast<u64, f64>(p.value.double_value);
be_t<f64> val = p.value.double_value;
std::memcpy(ptr, &val, sizeof(val));
break;
}
case patch_type::utf8:
@@ -637,8 +650,8 @@ std::basic_string<u32> patch_engine::apply(const std::string& name, u8* dst, u32
std::basic_string<u32> applied_total;
const auto& container = m_map.at(name);
const auto serial = Emu.GetTitleID();
const auto app_version = Emu.GetAppVersion();
const auto& serial = Emu.GetTitleID();
const auto& app_version = Emu.GetAppVersion();
// Different containers in order to seperate the patches
std::vector<patch_engine::patch_info> patches_for_this_serial_and_this_version;
@@ -780,7 +793,7 @@ void patch_engine::save_config(const patch_map& patches_map)
}
}
if (const auto& enabled_patches = config_map[hash].patch_info_map; enabled_patches.size() > 0)
if (const auto& enabled_patches = config_map[hash].patch_info_map; !enabled_patches.empty())
{
out << hash << YAML::BeginMap;
+22 -18
View File
@@ -20,7 +20,7 @@ namespace patch_key
static const std::string version = "Version";
}
static const std::string patch_engine_version = "1.2";
inline static const std::string patch_engine_version = "1.2";
enum class patch_type
{
@@ -49,12 +49,12 @@ public:
{
patch_type type = patch_type::load;
u32 offset = 0;
std::string original_value; // Used for import consistency (avoid rounding etc.)
std::string original_value{}; // Used for import consistency (avoid rounding etc.)
union
{
u64 long_value;
f64 double_value;
} value { 0 };
} value{0};
};
using patch_app_versions = std::unordered_map<std::string /*app_version*/, bool /*enabled*/>;
@@ -64,31 +64,35 @@ public:
struct patch_info
{
// Patch information
std::vector<patch_data> data_list;
patch_titles titles;
std::string description;
std::string patch_version;
std::string patch_group;
std::string author;
std::string notes;
std::string source_path;
std::vector<patch_data> data_list{};
patch_titles titles{};
std::string description{};
std::string patch_version{};
std::string patch_group{};
std::string author{};
std::string notes{};
std::string source_path{};
// Redundant information for accessibility (see patch_container)
std::string hash;
std::string version;
std::string hash{};
std::string version{};
};
struct patch_container
{
std::unordered_map<std::string /*description*/, patch_info> patch_info_map;
std::string hash;
std::string version;
std::unordered_map<std::string /*description*/, patch_info> patch_info_map{};
std::string hash{};
std::string version{};
};
using patch_map = std::unordered_map<std::string /*hash*/, patch_container>;
patch_engine();
patch_engine(const patch_engine&) = delete;
patch_engine& operator=(const patch_engine&) = delete;
// Returns the directory in which patch_config.yml is located
static std::string get_patch_config_path();
@@ -136,8 +140,8 @@ public:
private:
// Database
patch_map m_map;
patch_map m_map{};
// Only one patch per patch group can be applied
std::set<std::string> m_applied_groups;
std::set<std::string> m_applied_groups{};
};
+56 -94
View File
@@ -26,10 +26,16 @@ Intersection (&) and symmetric difference (^) is also available.
#include "Utilities/StrFmt.h"
template <typename T>
concept BitSetEnum = std::is_enum_v<T> && requires(T x)
{
T::__bitset_enum_max;
};
template <BitSetEnum T>
class atomic_bs_t;
// Bitset type for enum class with available bits [0, T::__bitset_enum_max)
template <typename T>
template <BitSetEnum T>
class bs_t final
{
public:
@@ -112,24 +118,24 @@ public:
return *this;
}
constexpr bs_t operator +(bs_t rhs) const
friend constexpr bs_t operator +(bs_t lhs, bs_t rhs)
{
return bs_t(0, m_data | rhs.m_data);
return bs_t(0, lhs.m_data | rhs.m_data);
}
constexpr bs_t operator -(bs_t rhs) const
friend constexpr bs_t operator -(bs_t lhs, bs_t rhs)
{
return bs_t(0, m_data & ~rhs.m_data);
return bs_t(0, lhs.m_data & ~rhs.m_data);
}
constexpr bs_t operator &(bs_t rhs) const
friend constexpr bs_t operator &(bs_t lhs, bs_t rhs)
{
return bs_t(0, m_data & rhs.m_data);
return bs_t(0, lhs.m_data & rhs.m_data);
}
constexpr bs_t operator ^(bs_t rhs) const
friend constexpr bs_t operator ^(bs_t lhs, bs_t rhs)
{
return bs_t(0, m_data ^ rhs.m_data);
return bs_t(0, lhs.m_data ^ rhs.m_data);
}
constexpr bool operator ==(bs_t rhs) const
@@ -137,16 +143,6 @@ public:
return m_data == rhs.m_data;
}
constexpr bool operator !=(bs_t rhs) const
{
return m_data != rhs.m_data;
}
constexpr bool test(bs_t rhs) const
{
return (m_data & rhs.m_data) != 0;
}
constexpr bool test_and_set(T bit)
{
bool r = (m_data & shift(bit)) != 0;
@@ -170,42 +166,70 @@ public:
};
// Unary '+' operator: promote plain enum value to bitset value
template <typename T, typename = decltype(T::__bitset_enum_max)>
template <BitSetEnum T>
constexpr bs_t<T> operator +(T bit)
{
return bit;
return bs_t<T>(bit);
}
// Binary '+' operator: bitset union
template <typename T, typename = decltype(T::__bitset_enum_max)>
constexpr bs_t<T> operator +(T lhs, T rhs)
template <BitSetEnum T, typename U> requires (std::is_constructible_v<bs_t<T>, U>)
constexpr bs_t<T> operator +(T lhs, const U& rhs)
{
return bs_t<T>(lhs) + bs_t<T>(rhs);
}
// Binary '+' operator: bitset union
template <typename U, BitSetEnum T> requires (std::is_constructible_v<bs_t<T>, U> && !std::is_enum_v<U>)
constexpr bs_t<T> operator +(const U& lhs, T rhs)
{
return bs_t<T>(lhs) + bs_t<T>(rhs);
}
// Binary '-' operator: bitset difference
template <typename T, typename = decltype(T::__bitset_enum_max)>
constexpr bs_t<T> operator -(T lhs, T rhs)
template <BitSetEnum T, typename U> requires (std::is_constructible_v<bs_t<T>, U>)
constexpr bs_t<T> operator -(T lhs, const U& rhs)
{
return bs_t<T>(lhs) - bs_t<T>(rhs);
}
// Binary '-' operator: bitset difference
template <typename U, BitSetEnum T> requires (std::is_constructible_v<bs_t<T>, U> && !std::is_enum_v<U>)
constexpr bs_t<T> operator -(const U& lhs, T rhs)
{
return bs_t<T>(lhs) - bs_t<T>(rhs);
}
// Binary '&' operator: bitset intersection
template <typename T, typename = decltype(T::__bitset_enum_max)>
constexpr bs_t<T> operator &(T lhs, T rhs)
template <BitSetEnum T, typename U> requires (std::is_constructible_v<bs_t<T>, U>)
constexpr bs_t<T> operator &(T lhs, const U& rhs)
{
return bs_t<T>(lhs) & bs_t<T>(rhs);
}
// Binary '&' operator: bitset intersection
template <typename U, BitSetEnum T> requires (std::is_constructible_v<bs_t<T>, U> && !std::is_enum_v<U>)
constexpr bs_t<T> operator &(const U& lhs, T rhs)
{
return bs_t<T>(lhs) & bs_t<T>(rhs);
}
// Binary '^' operator: bitset symmetric difference
template <typename T, typename = decltype(T::__bitset_enum_max)>
constexpr bs_t<T> operator ^(T lhs, T rhs)
template <BitSetEnum T, typename U> requires (std::is_constructible_v<bs_t<T>, U>)
constexpr bs_t<T> operator ^(T lhs, const U& rhs)
{
return bs_t<T>(lhs) ^ bs_t<T>(rhs);
}
// Binary '^' operator: bitset symmetric difference
template <typename U, BitSetEnum T> requires (std::is_constructible_v<bs_t<T>, U> && !std::is_enum_v<U>)
constexpr bs_t<T> operator ^(const U& lhs, T rhs)
{
return bs_t<T>(lhs) ^ bs_t<T>(rhs);
}
// Atomic bitset specialization with optimized operations
template <typename T>
template <BitSetEnum T>
class atomic_bs_t : public atomic_t<::bs_t<T>>
{
// Corresponding bitset type
@@ -237,6 +261,8 @@ public:
{
}
using base::operator bs_t;
explicit operator bool() const
{
return static_cast<bool>(base::load());
@@ -315,70 +341,6 @@ public:
auto fetch_or(const bs_t&) = delete;
auto or_fetch(const bs_t&) = delete;
auto operator |=(const bs_t&) = delete;
auto operator ++() = delete;
auto operator --() = delete;
auto operator ++(int) = delete;
auto operator --(int) = delete;
bs_t operator +(bs_t rhs) const
{
return bs_t(0, base::load().m_data | rhs.m_data);
}
bs_t operator -(bs_t rhs) const
{
return bs_t(0, base::load().m_data & ~rhs.m_data);
}
bs_t operator &(bs_t rhs) const
{
return bs_t(0, base::load().m_data & rhs.m_data);
}
bs_t operator ^(bs_t rhs) const
{
return bs_t(0, base::load().m_data ^ rhs.m_data);
}
bs_t operator ==(bs_t rhs) const
{
return base::load().m_data == rhs.m_data;
}
bs_t operator !=(bs_t rhs) const
{
return base::load().m_data != rhs.m_data;
}
friend bs_t operator +(bs_t lhs, const atomic_bs_t& rhs)
{
return bs_t(0, lhs.m_data | rhs.load().m_data);
}
friend bs_t operator -(bs_t lhs, const atomic_bs_t& rhs)
{
return bs_t(0, lhs.m_data & ~rhs.load().m_data);
}
friend bs_t operator &(bs_t lhs, const atomic_bs_t& rhs)
{
return bs_t(0, lhs.m_data & rhs.load().m_data);
}
friend bs_t operator ^(bs_t lhs, const atomic_bs_t& rhs)
{
return bs_t(0, lhs.m_data ^ rhs.load().m_data);
}
friend bs_t operator ==(bs_t lhs, const atomic_bs_t& rhs)
{
return lhs.m_data == rhs.load().m_data;
}
friend bs_t operator !=(bs_t lhs, const atomic_bs_t& rhs)
{
return lhs.m_data != rhs.load().m_data;
}
bool test_and_set(T rhs)
{
+88 -26
View File
@@ -5,8 +5,7 @@
#include <string>
#include <vector>
#include <algorithm>
static const usz size_dropped = -1;
#include "util/asm.hpp"
/*
C-style format parser. Appends formatted string to `out`, returns number of characters written.
@@ -42,7 +41,7 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
const auto drop_sequence = [&]
{
out.insert(out.end(), fmt - ctx.size, fmt);
ctx.size = size_dropped;
ctx.size = umax;
};
const auto read_decimal = [&](uint result) -> uint
@@ -56,36 +55,65 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
return result;
};
const auto write_octal = [&](u64 value, u64 min_num)
const auto write_octal = [&](auto value, u64 min_num)
{
out.resize(out.size() + std::max<u64>(min_num, 66 / 3 - (std::countl_zero<u64>(value | 1) + 2) / 3), '0');
if constexpr (sizeof(value) == 16)
{
out.resize(out.size() + std::max<u64>(min_num, 129 / 3 - (utils::clz128(value | 1) + 1) / 3), '0');
}
else
{
out.resize(out.size() + std::max<u64>(min_num, 66 / 3 - (std::countl_zero<u64>(value | 1) + 2) / 3), '0');
}
// Write in reversed order
for (auto i = out.rbegin(); value; i++, value /= 8)
for (auto i = out.rbegin(); value; i++, value >>= 3)
{
*i = value % 8 + '0';
*i = static_cast<char>(static_cast<u64>(value) & 7) + '0';
}
};
const auto write_hex = [&](u64 value, bool upper, u64 min_num)
const auto write_hex = [&](auto value, bool upper, u64 min_num)
{
out.resize(out.size() + std::max<u64>(min_num, 64 / 4 - std::countl_zero<u64>(value | 1) / 4), '0');
if constexpr (sizeof(value) == 16)
{
out.resize(out.size() + std::max<u64>(min_num, 128 / 4 - utils::clz128(value | 1) / 4), '0');
}
else
{
out.resize(out.size() + std::max<u64>(min_num, 64 / 4 - std::countl_zero<u64>(value | 1) / 4), '0');
}
// Write in reversed order
for (auto i = out.rbegin(); value; i++, value /= 16)
for (auto i = out.rbegin(); value; i++, value >>= 4)
{
*i = (upper ? "0123456789ABCDEF" : "0123456789abcdef")[value % 16];
*i = (upper ? "0123456789ABCDEF" : "0123456789abcdef")[static_cast<usz>(value & 0xf)];
}
};
const auto write_decimal = [&](u64 value, s64 min_size)
const auto write_decimal = [&](auto value, s64 min_size)
{
const usz start = out.size();
do
{
out.push_back(value % 10 + '0');
value /= 10;
if constexpr (sizeof(value) == 16)
{
const u128 v0 = value;
value >>= 1;
constexpr u128 by_five = 0x3333'3333'3333'3333;
const u128 v1 = (value >> 64) * by_five;
const u128 v2 = ((value >> 64) * by_five) >> 64;
const u128 v3 = (static_cast<u64>(value) * by_five) >> 64;
value = v1 + v2 + v3;
out.push_back(static_cast<char>(static_cast<u64>(v0 - (value * 10))) + '0');
}
else
{
out.push_back(value % 10 + '0');
value /= 10;
}
}
while (0 < --min_size || value);
@@ -113,7 +141,7 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
ctx = {0};
out.push_back(ch);
}
else if (ctx.size == size_dropped)
else if (ctx.size == umax)
{
out.push_back(ch);
}
@@ -369,7 +397,16 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
out.push_back(' ');
}
write_decimal(negative ? 0 - val : val, ctx.prec);
if (ctx.type == 16)
{
// TODO: support negative values (s128)
u128 val2 = *reinterpret_cast<u128*>(val);
write_decimal(val2, ctx.prec);
}
else
{
write_decimal(negative ? 0 - val : val, ctx.prec);
}
}
const usz size2 = out.size() - start;
@@ -425,14 +462,23 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
{
out.push_back('0');
if (val)
if (ctx.prec)
{
write_octal(val, ctx.prec ? ctx.prec - 1 : 0);
ctx.prec--;
}
}
else if (!ctx.dot || ctx.prec)
if ((ctx.alter && val) || !ctx.dot || ctx.prec)
{
write_octal(val, ctx.prec);
if (ctx.type == 16)
{
u128 val2 = *reinterpret_cast<u128*>(val);
write_octal(val2, ctx.prec);
}
else
{
write_octal(val, ctx.prec);
}
}
const usz size2 = out.size() - start;
@@ -485,12 +531,20 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
if (val)
{
out.push_back(ch); // Prepend 0x or 0X
write_hex(val, ch == 'X', ctx.prec);
}
}
else if (!ctx.dot || ctx.prec)
if ((ctx.alter && val) || !ctx.dot || ctx.prec)
{
write_hex(val, ch == 'X', ctx.prec);
if (ctx.type == 16)
{
u128 val2 = *reinterpret_cast<u128*>(val);
write_hex(val2, ch == 'X', ctx.prec);
}
else
{
write_hex(val, ch == 'X', ctx.prec);
}
}
const usz size2 = out.size() - start;
@@ -544,7 +598,15 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
if (!ctx.dot || ctx.prec)
{
write_decimal(val, ctx.prec);
if (ctx.type == 16)
{
u128 val2 = *reinterpret_cast<u128*>(val);
write_decimal(val2, ctx.prec);
}
else
{
write_decimal(val, ctx.prec);
}
}
const usz size2 = out.size() - start;
@@ -610,7 +672,7 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
const u64 arg1 = ctx.args >= 1 ? src.template get<u64>(1) : 0;
const u64 arg2 = ctx.args >= 2 ? src.template get<u64>(2) : 0;
if (const usz _size = std::snprintf(0, 0, _fmt.c_str(), arg0, arg1, arg2))
if (const usz _size = std::snprintf(nullptr, 0, _fmt.c_str(), arg0, arg1, arg2))
{
out.resize(out.size() + _size);
std::snprintf(&out.front() + out.size() - _size, _size + 1, _fmt.c_str(), arg0, arg1, arg2);
@@ -630,7 +692,7 @@ usz cfmt_append(Dst& out, const Char* fmt, Src&& src)
}
// Handle unfinished sequence
if (ctx.size && ctx.size != size_dropped)
if (ctx.size && ctx.size != umax)
{
fmt--, drop_sequence();
}
+3 -3
View File
@@ -21,11 +21,11 @@ constexpr u8 cheat_type_max = static_cast<u8>(cheat_type::max);
struct cheat_info
{
std::string game;
std::string description;
std::string game{};
std::string description{};
cheat_type type = cheat_type::max;
u32 offset{};
std::string red_script;
std::string red_script{};
bool from_str(const std::string& cheat_line);
std::string to_str() const;
-3
View File
@@ -1,8 +1,5 @@
#include "cond.h"
#include "sync.h"
#include "lockless.h"
#include <climits>
// use constants, increase signal space
+16 -2
View File
@@ -17,10 +17,24 @@ namespace date_time
return buf;
}
static inline std::string fmt_time(const char* fmt, const s64 time)
{
tm buf;
time_t t = time;
#ifdef _MSC_VER
localtime_s(&buf, &t);
#else
buf = *localtime(&t);
#endif
char str[80];
strftime(str, sizeof(str), fmt, &buf);
return str;
}
static inline std::string current_time()
{
char str[80];
tm now = get_time(0);
tm now = get_time(nullptr);
strftime(str, sizeof(str), "%c", &now);
return str;
}
@@ -29,7 +43,7 @@ namespace date_time
static inline std::string current_time_narrow()
{
char str[80];
tm now = get_time(0);
tm now = get_time(nullptr);
std::string parse_buf;
+4 -110
View File
@@ -102,14 +102,6 @@ struct size2_base
return width == rhs.width && height == rhs.height;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator !=(const size2_base& rhs) const
{
return width != rhs.width || height != rhs.height;
}
#endif
template<typename NT>
explicit constexpr operator size2_base<NT>() const
{
@@ -211,19 +203,6 @@ struct position1_base
return x == rhs;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
bool operator !=(const position1_base& rhs) const
{
return !(*this == rhs);
}
bool operator !=(T rhs) const
{
return !(*this == rhs);
}
#endif
template<typename NT>
explicit operator position1_base<NT>() const
{
@@ -383,19 +362,6 @@ struct position2_base
return x == rhs && y == rhs;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator !=(const position2_base& rhs) const
{
return !(*this == rhs);
}
constexpr bool operator !=(T rhs) const
{
return !(*this == rhs);
}
#endif
template<typename NT>
explicit constexpr operator position2_base<NT>() const
{
@@ -478,19 +444,6 @@ struct position3_base
return x == rhs && y == rhs && z == rhs;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
bool operator !=(const position3_base& rhs) const
{
return !(*this == rhs);
}
bool operator !=(T rhs) const
{
return !(*this == rhs);
}
#endif
template<typename NT>
explicit operator position3_base<NT>() const
{
@@ -571,19 +524,6 @@ struct position4_base
return x == rhs && y == rhs && z == rhs && w == rhs;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator !=(const position4_base& rhs) const
{
return !(*this == rhs);
}
constexpr bool operator !=(T rhs) const
{
return !(*this == rhs);
}
#endif
template<typename NT>
explicit constexpr operator position4_base<NT>() const
{
@@ -639,14 +579,6 @@ struct coord_base
return position == rhs.position && size == rhs.size;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator != (const coord_base& rhs) const
{
return position != rhs.position || size != rhs.size;
}
#endif
template<typename NT>
explicit constexpr operator coord_base<NT>() const
{
@@ -718,14 +650,6 @@ struct area_base
return x1 == rhs.x1 && x2 == rhs.x2 && y1 == rhs.y1 && y2 == rhs.y2;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator != (const area_base& rhs) const
{
return !(*this == rhs);
}
#endif
constexpr area_base operator - (const size2_base<T>& size) const
{
return{ x1 - size.width, y1 - size.height, x2 - size.width, y2 - size.height };
@@ -864,17 +788,10 @@ struct color4_base
{
}
constexpr bool operator == (const color4_base& rhs) const
constexpr bool operator ==(const color4_base& rhs) const
{
return r == rhs.r && g == rhs.g && b == rhs.b && a == rhs.a;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator != (const color4_base& rhs) const
{
return !(*this == rhs);
}
#endif
void operator *= (const color4_base<T>& rhs)
{
@@ -940,17 +857,10 @@ struct color3_base
{
}
constexpr bool operator == (const color3_base& rhs) const
constexpr bool operator ==(const color3_base& rhs) const
{
return r == rhs.r && g == rhs.g && b == rhs.b;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator != (const color3_base& rhs) const
{
return !(*this == rhs);
}
#endif
template<typename NT>
explicit constexpr operator color3_base<NT>() const
@@ -984,19 +894,11 @@ struct color2_base
{
}
constexpr bool operator == (const color2_base& rhs) const
constexpr bool operator ==(const color2_base& rhs) const
{
return r == rhs.r && g == rhs.g;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator != (const color2_base& rhs) const
{
return !(*this == rhs);
}
#endif
template<typename NT>
explicit constexpr operator color2_base<NT>() const
{
@@ -1018,19 +920,11 @@ struct color1_base
{
}
constexpr bool operator == (const color1_base& rhs) const
constexpr bool operator ==(const color1_base& rhs) const
{
return r == rhs.r;
}
#if __cpp_impl_three_way_comparison >= 201711
#else
constexpr bool operator != (const color1_base& rhs) const
{
return !(*this == rhs);
}
#endif
template<typename NT>
explicit constexpr operator color1_base<NT>() const
{
+1 -6
View File
@@ -161,11 +161,6 @@ public:
return m_ptr == rhs.m_ptr;
}
bool operator !=(const lf_queue_iterator& rhs) const
{
return m_ptr != rhs.m_ptr;
}
T& operator *() const
{
return m_ptr->m_data;
@@ -308,7 +303,7 @@ public:
}
template <atomic_wait::op Flags = atomic_wait::op::eq>
void wait(std::nullptr_t null = nullptr) noexcept
void wait(std::nullptr_t /*null*/ = nullptr) noexcept
{
if (m_head == nullptr)
{
+2 -2
View File
@@ -1,7 +1,7 @@
#include "stdafx.h"
#include "Utilities/rXml.h"
rXmlNode::rXmlNode() : handle()
rXmlNode::rXmlNode()
{
}
@@ -55,7 +55,7 @@ std::string rXmlNode::GetNodeContent()
return handle.text().get();
}
rXmlDocument::rXmlDocument() : handle()
rXmlDocument::rXmlDocument()
{
}
+15 -2
View File
@@ -1,6 +1,19 @@
#pragma once
#ifdef _MSC_VER
#pragma warning(push, 0)
#include <pugixml.hpp>
#pragma warning(pop)
#else
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wall"
#pragma GCC diagnostic ignored "-Wextra"
#pragma GCC diagnostic ignored "-Wold-style-cast"
#pragma GCC diagnostic ignored "-Weffc++"
#include <pugixml.hpp>
#pragma GCC diagnostic pop
#endif
#include <memory>
struct rXmlNode
@@ -13,7 +26,7 @@ struct rXmlNode
std::string GetAttribute( const std::string &name);
std::string GetNodeContent();
pugi::xml_node handle;
pugi::xml_node handle{};
};
struct rXmlDocument
@@ -24,5 +37,5 @@ struct rXmlDocument
void Read(const std::string& data);
std::shared_ptr<rXmlNode> GetRoot();
pugi::xml_document handle;
pugi::xml_document handle{};
};
-1
View File
@@ -1,6 +1,5 @@
#pragma once
#include <mutex>
#include "util/types.hpp"
#include "util/atomic.hpp"
+1 -3
View File
@@ -3,7 +3,6 @@
/* For internal use. Don't include. */
#include "util/types.hpp"
#include "util/atomic.hpp"
#include "util/dyn_lib.hpp"
#ifdef _WIN32
@@ -11,7 +10,7 @@
#define NOMINMAX
#endif
#include <Windows.h>
#include <time.h>
#include <ctime>
#elif __linux__
#include <errno.h>
#include <sys/syscall.h>
@@ -21,7 +20,6 @@
#include <fcntl.h>
#endif
#include <algorithm>
#include <ctime>
#include <chrono>
#include <mutex>
#include <condition_variable>
+1
View File
@@ -1,3 +1,4 @@
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)
+8 -7
View File
@@ -38,24 +38,25 @@
</ImportGroup>
<PropertyGroup Label="UserMacros">
<CmakeGenerator>"Visual Studio $(VisualStudioVersion.Substring(0,2))"</CmakeGenerator>
<CmakeCLI>cmake -G $(CmakeGenerator) -A x64 -DCMAKE_CONFIGURATION_TYPES="Debug;Release" -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../glslang</CmakeCLI>
<CmakeReleaseCLI>cmake -G $(CmakeGenerator) -A x64 -DCMAKE_BUILD_TYPE="Release" -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../glslang</CmakeReleaseCLI>
<CmakeDebugCLI>cmake -G $(CmakeGenerator) -A x64 -DCMAKE_BUILD_TYPE="Debug" -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT ../glslang</CmakeDebugCLI>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<NMakeBuildCommandLine>$(CmakeCLI)
<NMakeBuildCommandLine>$(CmakeReleaseCLI)
msbuild.exe ALL_BUILD.vcxproj /t:build /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>$(CmakeCLI)
<NMakeReBuildCommandLine>$(CmakeReleaseCLI)
msbuild.exe ALL_BUILD.vcxproj /t:rebuild /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>$(CmakeCLI)
<NMakeCleanCommandLine>$(CmakeReleaseCLI)
msbuild.exe ALL_BUILD.vcxproj /t:clean /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m</NMakeCleanCommandLine>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<NMakeBuildCommandLine>$(CmakeCLI)
<NMakeBuildCommandLine>$(CmakeDebugCLI)
msbuild.exe ALL_BUILD.vcxproj /t:build /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m
</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>$(CmakeCLI)
<NMakeReBuildCommandLine>$(CmakeDebugCLI)
msbuild.exe ALL_BUILD.vcxproj /t:rebuild /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m
</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>$(CmakeCLI)
<NMakeCleanCommandLine>$(CmakeDebugCLI)
msbuild.exe ALL_BUILD.vcxproj /t:clean /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(SolutionDir)common_default.props /m
</NMakeCleanCommandLine>
</PropertyGroup>
@@ -38,25 +38,26 @@
</ImportGroup>
<PropertyGroup Label="UserMacros">
<CmakeGenerator>"Visual Studio $(VisualStudioVersion.Substring(0,2))"</CmakeGenerator>
<CmakeCLI>cmake -G $(CmakeGenerator) -A x64 -DCMAKE_CONFIGURATION_TYPES="Debug;Release" -DLLVM_USE_CRT_DEBUG=MTd -DLLVM_USE_CRT_RELEASE=MT -DSPIRV-Headers_SOURCE_DIR=$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)../spirv-headers')) ../spirv-tools</CmakeCLI>
<CmakeReleaseCLI>cmake -G $(CmakeGenerator) -A x64 -DCMAKE_BUILD_TYPE="Release" -DSPIRV_WERROR=OFF -DSPIRV-Headers_SOURCE_DIR=$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)../spirv-headers')) ../spirv-tools</CmakeReleaseCLI>
<CmakeDebugCLI>cmake -G $(CmakeGenerator) -A x64 -DCMAKE_BUILD_TYPE="Debug" -DSPIRV_WERROR=OFF -DSPIRV-Headers_SOURCE_DIR=$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)../spirv-headers')) ../spirv-tools</CmakeDebugCLI>
<PropsAbsPath>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\..\common_default.props'))</PropsAbsPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<NMakeBuildCommandLine>$(CmakeCLI)
<NMakeBuildCommandLine>$(CmakeReleaseCLI)
msbuild.exe ALL_BUILD.vcxproj /t:build /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(PropsAbsPath) /m</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>$(CmakeCLI)
<NMakeReBuildCommandLine>$(CmakeReleaseCLI)
msbuild.exe ALL_BUILD.vcxproj /t:rebuild /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(PropsAbsPath) /m</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>$(CmakeCLI)
<NMakeCleanCommandLine>$(CmakeReleaseCLI)
msbuild.exe ALL_BUILD.vcxproj /t:clean /p:Configuration=Release /p:ForceImportBeforeCppTargets=$(PropsAbsPath) /m</NMakeCleanCommandLine>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<NMakeBuildCommandLine>$(CmakeCLI)
<NMakeBuildCommandLine>$(CmakeDebugCLI)
msbuild.exe ALL_BUILD.vcxproj /t:build /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(PropsAbsPath) /m
</NMakeBuildCommandLine>
<NMakeReBuildCommandLine>$(CmakeCLI)
<NMakeReBuildCommandLine>$(CmakeDebugCLI)
msbuild.exe ALL_BUILD.vcxproj /t:rebuild /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(PropsAbsPath) /m
</NMakeReBuildCommandLine>
<NMakeCleanCommandLine>$(CmakeCLI)
<NMakeCleanCommandLine>$(CmakeDebugCLI)
msbuild.exe ALL_BUILD.vcxproj /t:clean /p:Configuration=Debug /p:ForceImportBeforeCppTargets=$(PropsAbsPath) /m
</NMakeCleanCommandLine>
</PropertyGroup>
+1 -17
View File
@@ -1,18 +1,10 @@
<?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 - LLVM|x64">
<Configuration>Debug - LLVM</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release - LLVM|x64">
<Configuration>Release - LLVM</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
@@ -104,23 +96,15 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="..\rpcs3_debug.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'" Label="PropertySheets">
<Import Project="..\rpcs3_debug.props" />
<Import Project="..\rpcs3_llvm.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="..\rpcs3_release.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'" Label="PropertySheets">
<Import Project="..\rpcs3_release.props" />
<Import Project="..\rpcs3_llvm.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PreprocessorDefinitions>ASMJIT_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">MaxSpeed</Optimization>
<Optimization Condition="'$(Configuration)|$(Platform)'=='Release'">MaxSpeed</Optimization>
</ClCompile>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+10 -8
View File
@@ -5,10 +5,7 @@ trigger:
tags:
exclude:
- '*'
pr:
branches:
include:
- master
pr: none
jobs:
- job: Linux_Build
strategy:
@@ -19,12 +16,17 @@ jobs:
COMPILER: gcc
variables:
CCACHE_DIR: $(Pipeline.Workspace)/ccache
IS_AZURE: true
CI_HAS_ARTIFACTS: true
UPLOAD_COMMIT_HASH: d812f1254a1157c80fd402f94446310560f54e5f
UPLOAD_REPO_FULL_NAME: "RPCS3/rpcs3-binaries-linux"
DEPLOY_APPIMAGE: true
APPDIR: "/rpcs3/build/appdir"
ARTDIR: "/root/artifacts"
RELEASE_MESSAGE: "/rpcs3/GitHubReleaseMessage.txt"
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Cache@2
inputs:
@@ -33,13 +35,13 @@ jobs:
displayName: ccache
- bash: |
docker pull --quiet rpcs3/rpcs3-travis-xenial:1.7
docker pull --quiet rpcs3/rpcs3-ci-bionic:1.0
docker run \
-v $(pwd):/rpcs3 \
--env-file .ci/docker.env \
-v $CCACHE_DIR:/root/.ccache \
-v $BUILD_ARTIFACTSTAGINGDIRECTORY:/root/artifacts \
rpcs3/rpcs3-travis-xenial:1.7 \
rpcs3/rpcs3-ci-bionic:1.0 \
/rpcs3/.ci/build-linux.sh
displayName: Docker setup and build
@@ -102,7 +104,7 @@ jobs:
solution: 'rpcs3.sln'
maximumCpuCount: true
platform: x64
configuration: 'Release - LLVM'
configuration: 'Release'
displayName: Compile RPCS3
- bash: .ci/deploy-windows.sh
@@ -340,3 +340,28 @@ QLabel#debugger_frame_pc {
color: #000; /* Font Color: Black */
background-color: #00ff00; /* Green */
}
/* Tree view changes*/
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_white.png");
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_down_white.png");
}
QTreeView::branch:has-children:!has-siblings:closed:hover,
QTreeView::branch:closed:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_blue.png");
}
QTreeView::branch:open:has-children:!has-siblings:hover,
QTreeView::branch:open:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_down_blue.png");
}
+36 -2
View File
@@ -159,12 +159,12 @@ QCheckBox::indicator:disabled {
/* Scrollbars */
QScrollBar {
width: 5px;
width: 10px;
background: #23262d;
}
QTableView QScrollBar {
width: 3px;
width: 10px;
height: 3px;
}
@@ -628,3 +628,37 @@ QLabel#tty_text {
color: #f8f8f8;
}
/* Debugger colors */
QLabel#debugger_frame_breakpoint {
color: #000; /* Font Color: Black */
background-color: #ffff00; /* Yellow */
}
QLabel#debugger_frame_pc {
color: #000; /* Font Color: Black */
background-color: #00ff00; /* Green */
}
/* Tree view changes*/
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_white.png");
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_down_white.png");
}
QTreeView::branch:has-children:!has-siblings:closed:hover,
QTreeView::branch:closed:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_green.png");
}
QTreeView::branch:open:has-children:!has-siblings:hover,
QTreeView::branch:open:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_down_green.png");
}
+25
View File
@@ -343,3 +343,28 @@ QTextEdit#tty_frame {
QLabel#tty_text {
color: #ffffff; /* White */
}
/* Tree view changes*/
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_white.png");
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_down_white.png");
}
QTreeView::branch:has-children:!has-siblings:closed:hover,
QTreeView::branch:closed:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_blue.png");
}
QTreeView::branch:open:has-children:!has-siblings:hover,
QTreeView::branch:open:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_down_blue.png");
}
@@ -337,3 +337,28 @@ QLabel#debugger_frame_pc {
color: #000; /* Font Color: Black */
background-color: #333b44; /* Green */
}
/* Tree view changes*/
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_white.png");
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_down_white.png");
}
QTreeView::branch:has-children:!has-siblings:closed:hover,
QTreeView::branch:closed:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_blue.png");
}
QTreeView::branch:open:has-children:!has-siblings:hover,
QTreeView::branch:open:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_down_blue.png");
}
+36 -2
View File
@@ -189,11 +189,11 @@ QSlider#sizeSlider::handle:hover {
/* Scrollbars */
QScrollBar {
width: 5px;
width: 10px;
}
QTableView QScrollBar {
width: 3px;
width: 10px;
height: 3px;
}
@@ -650,3 +650,37 @@ QLabel#thumbnail_icon_color {
color: #370048;
}
/* Debugger colors */
QLabel#debugger_frame_breakpoint {
color: #000; /* Font Color: Black */
background-color: #ffff00; /* Yellow */
}
QLabel#debugger_frame_pc {
color: #000; /* Font Color: Black */
background-color: #00ff00; /* Green */
}
/* Tree view changes*/
QTreeView::branch:has-children:!has-siblings:closed,
QTreeView::branch:closed:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_white.png");
}
QTreeView::branch:open:has-children:!has-siblings,
QTreeView::branch:open:has-children:has-siblings {
border-image: none;
image: url("GuiConfigs/list_arrow_down_white.png");
}
QTreeView::branch:has-children:!has-siblings:closed:hover,
QTreeView::branch:closed:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_blue.png");
}
QTreeView::branch:open:has-children:!has-siblings:hover,
QTreeView::branch:open:has-children:has-siblings:hover {
border-image: none;
image: url("GuiConfigs/list_arrow_down_blue.png");
}
+12 -3
View File
@@ -193,7 +193,7 @@ QSlider#sizeSlider::handle:hover {
/* Scrollbars */
QScrollBar {
width: 5px;
width: 10px;
}
QScrollArea {
@@ -201,7 +201,7 @@ QScrollArea {
}
QTableView QScrollBar {
width: 3px;
width: 10px;
height: 3px;
}
@@ -648,7 +648,7 @@ QLabel#log_level_warning {
}
QLabel#log_level_notice {
color: #FFFFFF;
color: #455971;
}
QLabel#log_level_trace {
@@ -669,3 +669,12 @@ QLabel#thumbnail_icon_color {
color: #8500ae;
}
/* Debugger colors */
QLabel#debugger_frame_breakpoint {
color: #000; /* Font Color: Black */
background-color: #ffff00; /* Yellow */
}
QLabel#debugger_frame_pc {
color: #000; /* Font Color: Black */
background-color: #00ff00; /* Green */
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

+253
View File
@@ -11774,3 +11774,256 @@
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-22T08:52:36Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-22T09:45:40Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"evdev: fix build","sha":"2e5f321583be9aa95c53b4dd8fcfeec190dd2f81"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-21T14:16:06Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T09:47:45Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Remove cpu_thread destructor","sha":"96400234a8861aed30112f39bf320e73f5fc359c"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-22T09:36:52Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T09:47:45Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Remove vm::cleanup_unlock","sha":"73d45f3bf0cbde4b1d2547b34960598f04083086"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-19T13:18:09Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T10:00:01Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Simplify utils::align() a bit\n\nstd::is_unsigned implies std::is_integral I believe.","sha":"9dc238187f0c0e45276b2104e4b4ec125c542e0b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T09:43:40Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T10:00:01Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Fix minor inconsistency in utils::memory_reset (Linux)","sha":"ad1027455aac982fe6e3ae6288cfa3f1eff2ae31"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T10:32:35Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T10:35:01Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"JIT.cpp: fix overcommit bug (should have been Linux-specific)\n\nCloses #9820\n\nCo-authored-by: Eladash <elad3356p@gmail.com>","sha":"980be9e0e821d66d78684b4e641b750b80592524"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T16:37:32Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T16:37:32Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add commits","sha":"85bebebb36621e7c6a14a0fb596d84284333a983"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T16:37:42Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-22T16:37:42Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add supporters","sha":"4b858648e51e508d61168285507c7e5afa5e8793"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-22T19:18:06Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-22T21:04:53Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk/dma: Simplify map_dma interface","sha":"3632412c481eb11591ff9821f92b4341f215167a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-22T19:44:01Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-22T21:04:53Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Move queue family management from swapchain to logical device","sha":"cb7cf40b5e70777e77b293cb02ef3d644a8c9492"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-22T17:22:55Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-23T04:03:38Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"fix no-gui crash if no firmware was installed\n\nIt's a bit mysterious, but the confirmation box doesn't like being called in this mode.\nSo let's just return false.","sha":"037586d7bb3a39885f5db4d0a821056efcb75543"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-23T03:34:09Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-23T04:03:38Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"remove unused variable","sha":"0878db4e170d20418eb2133ec75499f74d5a0037"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-21T19:55:07Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T08:29:23Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Atomic PARAM.SFO writes","sha":"932f31e37bead478d1375ba447d7f02cab9643e4"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-22T12:36:35Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T08:29:23Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix atomicity of savedata/trophy data writes","sha":"d4af8dd89abb7b2f13ff67444dbf615ada63bd14"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-23T04:29:11Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T08:29:23Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Atomic SPU LS capture writes","sha":"9ccf39b27f01ea0788b1aeff4e2594fb68521dcb"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-23T04:35:35Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T08:29:23Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Atomic RSX capture writes","sha":"447d2b6f9330876b06e2d02031f028ce37dc7fbf"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6031700?v=4","date":"2021-02-22T19:27:43Z","email":"RipleyTom@users.noreply.github.com","login":"RipleyTom","name":"RipleyTom"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T10:17:49Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix rpcn registration","sha":"801467e565ce18dadcd90c3042477e6841ae3b7f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-22T21:04:59Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T10:27:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"overlays: Fix frametime graph spikes\n\nThe frametime_timer was restarted at the end of the update method, instead of immediately after reading its value.\nThis means that the frametime was lower than expected when an expensive task was executed in-between.","sha":"663b2c9c5e9e58e1a97f665044983179a1b08fd2"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-22T22:00:52Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T10:27:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"overlays: Fix perf_metrics_overlay visibility\n\nAlso change auto type to compiled_resource in order to silence a warning about accidental copy by value","sha":"e91df31f8c97907f4fcf820f8ce4ea795df726fa"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-22T22:25:13Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T10:27:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"overlays: fix perf_metrics_overlay division by 0","sha":"7cc8380330e0091253f37524fa8648fb94085ab5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-22T23:43:30Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T10:27:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"overlays: fix initial size of perf_overlay body\n\nYou could see that it was not properly adjusted in the first frame in high detail mode.","sha":"79b5b79de1b206e04cfa44ab3590131ab5ebcfbb"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-22T23:56:24Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T10:27:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"overlays: fix perf overlay switching detail levels\n\nThe body was lagging behind the text. This was fixed by calling an updated version of init() on settings change.\nThis introduced spikes in the frametime graph, so the data had to become members and m_force_update was adjusted to not interfere with data aquisition.","sha":"a771f168eb13d24a1f3f19421fad97e96839a71d"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-23T14:09:23Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T14:35:45Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Minor GUI fix for PPU interpreter at \"precompilation\"","sha":"68a878264ca203be07ee9acc80517abee790af46"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-13T16:05:31Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T14:55:36Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix Emulation::CallAfter\n\nMost CallAfter usages were extremely wrong when ordered after Emu.Stop(). could result in anywhere from emulation stopping hangs to even segfaults.\ntrack_emu_state = true is now the default, I haven't found cases which need need it disabled.","sha":"112b7f65719b2034952d2cda51d2f0d0d5a7bf15"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-23T15:23:53Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-02-23T15:23:53Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"product_info: add Harmonix Pro-Drum Kit (#9822)\n\nCo-authored-by: DrGeelfood <79338929+DrGeelfood@users.noreply.github.com>","sha":"b83cb2dbf53490d060580b6f33582508ad5816d5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T09:08:22Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T15:24:50Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"cellSaveData: fix minor issues","sha":"014846cf318aacb62af9ea6bf29c692d068ea708"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T10:09:20Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T15:24:50Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Implement fs::sync (Linux/POSIX)","sha":"090a769bf60326cd4db834d587c95895726e577f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T10:52:07Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T15:24:50Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Move CPUStats.h -> util/cpu_stats.cpp","sha":"cd01a1eb09fd3992efce61db698c3e2b0b56ea24"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T11:19:45Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T15:24:50Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Remove garbage SPUW perf report","sha":"a90ad62fc0dc29f720183dab005a99d79f7f1071"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T11:22:55Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-23T16:46:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"vk::render_device::create: try to remove failing assertion","sha":"3063369322fe2cc23da664bbc684602c0ac6783b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-22T19:54:25Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-23T20:22:41Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"Formatting fixes only\n\n- Mostly remove camelcase usage in old code.\n- Properly annotate vulkan API imports with _vk prefix to make it clear they are not regular variables.","sha":"d459da137852ea6843812ba00b642428fa32bc44"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-23T19:38:39Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-23T20:22:41Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Handle old GPUs without proper async queues","sha":"0e7e5b59ae699bf516e6a45a789a97f31d665e3e"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-23T18:47:00Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-24T13:42:39Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix TTY handling of control characters","sha":"0012f39384099eca8859f5d4cf5d325ccbd4f98a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-24T19:35:04Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-25T10:08:27Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"overlays: Fix cpu usage in low detail mode","sha":"6db25aa7facbed5451c87b20c39cc85eb9e01ee5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-24T22:20:32Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-25T10:08:27Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix Nan in cpu_stats::get_usage\n\nAnd apply same logic to linux and windows","sha":"e940632d9305818f38e0d6bc32655da98d2bb7ab"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-25T11:37:31Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-02-25T11:37:31Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Fix stop count incremention in Emu.Stop (#9843)\n\nUntil emulation is completely stopped, further CallAfter callbacks may be issued with incorrect stop count memorized.","sha":"c13039396c00b9b2dc6e15059da264b89066d239"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6031700?v=4","date":"2021-02-25T19:17:03Z","email":"RipleyTom@users.noreply.github.com","login":"RipleyTom","name":"RipleyTom"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-26T08:58:42Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Add CELL_NET_CTL_INFO_DHCP_HOSTNAME impl","sha":"67378c7dea3790fe60869f377ef4ee4623594d43"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-25T18:57:10Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-26T12:08:14Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Add support for queue family migration and refactor some texture upload code","sha":"be1238cc95952611511bf95645be52275f686046"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-25T19:11:20Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-26T12:08:14Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Add per-queue-family scratch resources and double buffer them","sha":"12cad7c39347f1c0a71766995db46fe0f7d0b460"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-25T19:23:22Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-26T12:08:14Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Explicit initialization of command pool queue family","sha":"d2de8a87bf15581900b3734356fa16dd6c02db33"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-28T13:59:12Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-28T15:00:20Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Fix inadvertent self-assign","sha":"4bef176e9b3924523df4b51eb6efc65ddd36b90a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-27T21:36:03Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T15:48:34Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"remove unused variable","sha":"a4d4ab1df91b7a201574cc499994528399f9c188"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-27T21:37:01Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T15:48:34Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Qt: set parent for QThread\n\nThis may or may not have caused a leak","sha":"7cb32a3680b2075967b0bd4505c2587f66920922"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-24T10:45:10Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T17:16:13Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"named_thread: rewrite result_storage\n\nUse SFINAE as permitted by std::invoke_result_t<>","sha":"29e7eda887243cf0df0fdc07a8c7c9730a2149ab"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-24T10:56:02Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T17:16:13Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"named_thread: implement \"default\" event loop\n\nFixup \"sleepy\" thread at startup on Windows.\nPermit threads which lack operator()() overload.","sha":"3aaa0172d54f2e7082e337fe83840effc32421e0"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T11:39:04Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T17:20:17Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"named_thread: implement task queue\n\natomic_ptr: implement push_head()\n\nthread_ctrl::state() triggers task queue execution.","sha":"de9d859f4ac4e4272f21f803f7e6671db9347540"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T14:25:53Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T17:20:17Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Rewrite cellNetCtlNetStartDialogLoadAsync hack","sha":"f580bee32ca2d57facfe6565852a17840f430d4a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-28T19:05:04Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-02-28T19:05:04Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Improve cellScreenshot (#9851)\n\n* Fix screenshot logging\r\n\r\n* Update libpng to 1.6.37\r\n\r\n* cellScreenshot: Write text chunks\r\n* cellScreenshot: add overlay image\r\n* screenshot_manager: add /dev_hdd0/photo/\r\n\r\n* read_png_file: use deleter instead of manual close\r\n\r\n* cellScreenshot: use Qt for overlays\r\n* cellScreenshot: don't apply overlay to regular img\r\n* screenshot_manager: add mount hack for VFS\r\n* cellScreenshot: escape the whole path","sha":"a7c9827ad48bcfb31239290c34eee7e60d22e977"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/2995486?v=4","date":"2020-12-27T14:51:55Z","email":"Florin9doi@users.noreply.github.com","login":"Florin9doi","name":"Florin9doi"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T19:36:47Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Buzz settings","sha":"dfee46604af8a1c5d0e43f43beba809993f350c8"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-28T19:59:27Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-02-28T19:59:27Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Firmware installation bugfixes (#9855)\n\n* Fix race condition in PUP installation abortion.\r\n* Fix freezes of emulator in case the PUP installation failed due to filesystem errors.\r\n* Use fs::create_path as opposed to fs::create_dir as it is can create upper directories in case they are missing and is better in error handling.\r\n* Report TAR errors on failure to create directories.\r\n* Fix pup_object constructor to not crash on invalid PUP file header. (report an error)\r\n* Fix pup_object::validate_hashes to not crash on invalid PUP file entries. (report an error)\r\n* Do not call Qt functions inside a named_thread because it is wrong.","sha":"461fa6a88a17f823dd405615a36295c710823c04"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T21:22:32Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T21:22:32Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Tentative fix for -Wattributes\n\nThese warnings enabled conditionally for GCC 10.1+.","sha":"b7c579adf9e70f7504cb5804caddb79c5ca5c873"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T21:28:28Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-28T21:28:28Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"shared_ptr.hpp: minor fixup","sha":"71e16bfac3790c462d830f03f735a0f2e6ddd76e"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-28T22:06:48Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-02-28T22:06:48Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Report deadlocked thread names in failures to stop emulation (#9865)\n\n* Report deadlocked thread names in failures to stop emulation\r\n\r\nCo-authored-by: Nekotekina <nekotekina@gmail.com>","sha":"48cd56acc2c55e80d7ae0943d4194ab43e009809"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-28T23:00:49Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-02-28T23:00:49Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"cellScreenshot: fix overlay scaling (#9867)\n\n* cellScreenshot: fix overlay scaling","sha":"0b5c6350aeba9547dfaad0899a477447564926e6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/10283761?v=4","date":"2021-02-28T23:32:23Z","email":"ani-leo@outlook.com","login":"AniLeo","name":"Ani"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-02-28T23:32:23Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"rpcs3_version: Bump to 0.0.15 (#9866)","sha":"8e4451d1ab2f973240a1547623a955a2fc3d6611"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-28T00:05:10Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T13:37:49Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"DS3: implement player LEDs","sha":"10a55f16cc7a4506a8e1aa86097f7792ac1b1a98"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-28T03:32:08Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T13:37:49Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"input: add some sanity checks","sha":"22b8cfd0bac6bb19f83c531bc2a7838c798d150d"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-28T03:50:23Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T13:37:49Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"ds3: add led battery indicators (Linux only atm)\n\nneeds testing. maybe doesn't work","sha":"c2467b7b3818916fb39c505754e495da12b486b4"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-02-28T04:14:01Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T13:37:49Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt/Input: set player LED in pad settings","sha":"805d52987f1d99008cfb4550b0dda8d8cd444d75"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T08:24:30Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T13:37:49Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"DS3: fix battery_level aquisition","sha":"2dc798d539ced803430dcaf55e7d5a06edff729b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T12:49:30Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T13:37:49Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"DS3: fix regression: pad data is cleared even if there is no new data","sha":"b5d4b5a21c7e4ca7167c6784079e6699b186891c"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T22:58:38Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T23:45:42Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"DS3: fix linux output report","sha":"3452e18da1f9bac904b94ac9e2294269a5164419"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T23:54:38Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T00:29:28Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"DS3: fix LED battery status","sha":"930895a218100e81db2ab85b3a131cc4047c907a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-01T13:11:01Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T13:07:51Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"LLVM: Do not crash on failure to create cache file","sha":"ff211a9508bfd8909d464316ed02e70b9f3682a4"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-03T19:01:30Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T13:08:14Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"shared_ptr.hpp: minor fixup for arrays","sha":"aa7e2376ec62f1920f20a6cb6fad816604a96bfe"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-03T14:05:31Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T13:08:14Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"typeindices.hpp: upgrade with size and align info\n\nThis allows contiguous allocation (as in an aggregate).","sha":"5cc9bd770284a74fd85cf45a2412b34cf137b212"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-03T14:51:52Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T13:08:14Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"auto_typemap.hpp: reduce indirection\n\nImplement is_init() method.\nImplement optional Size template arg for further optimization.","sha":"8a9320c4efdb90e1cf855220022d47ab36234321"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-02-03T18:14:31Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T13:08:14Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"fixed_typemap.hpp: reduce indirection\n\nBackported some changes from auto_typemap.hpp\nImplemented methods init(), reset(), clear()\nDisabled recreation support.","sha":"d788b12a8eba7266861d6df3a11c2743b6725dac"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-01T15:02:25Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T13:08:14Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"named_thread: fix bugs in std::forward usage\n\nFix few misused threads and other bugs.","sha":"bbf52f3cead888fa682d311018fa5bf9477a6b32"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T11:59:19Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T13:08:14Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"fixed_typemap.hpp: return reference","sha":"ea5e837bd63d6cc6595bf4833e4122deec63f1c2"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-02T15:13:15Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T16:19:27Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Atomic trophy status updates","sha":"d0edd44a6994454a8b03e48bc79941af8b55f5d7"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-02-26T09:20:25Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T18:57:51Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"SPU debugger: Implement MFC journal\n\n* Allow to dump up to 1820 commands with up 128 bytes of data each, using key D with the debugger.","sha":"004ebfdaee385e80da65101eb2b3b7bd8385d0a4"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T16:22:39Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T18:58:49Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"fixed_typemap.hpp: make it a bit fool-proof\n\nRequire objects to be non-copyable (move is still allowed).","sha":"52fe86b56c7eb5cadf059a54646215eab8547d06"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T18:07:24Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-02T18:58:49Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"PPU: remove artificial 0x20000000 barrier for debug stats\n\nChange it to 0xE0000000 (SPU demarcation line)","sha":"c71bc25090656162e3727434aadbed3e9d206892"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T19:37:32Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T23:33:46Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"perf overlays: add detail level none (hides FPS)","sha":"038c708a0accecfda9cd93210e9ab58faf4e906e"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T19:38:04Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T23:33:46Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"perf overlays: fix dynamic font resize of graphs","sha":"e1e370999eee2d7faad94aa7f6389abaaed08c48"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T19:59:05Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T23:33:46Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"perf overlay: add datapoint count config settings","sha":"86dbb859b7afe16327c10871443bf56e193fadb2"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T21:44:47Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T23:33:46Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"perf overlay: add datapoint settings to GUI","sha":"73ca2119ed6fbb2a094c1dcf7b1073936ff49ff0"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T22:02:03Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T23:33:46Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"perf overlay: add missing graph vertex\n\nAnd fix potential division by 0","sha":"fa852c7dbe6c482c30215be366b99d6396c79544"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-01T22:05:38Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T23:33:46Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"perf overlay: Don't allow 0 or 1 datapoint count\n\nDoesn't render anyway","sha":"7c0b93f8150a47e57bd7674dd0ea019c85b3c83d"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-02T21:49:11Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-03T10:17:04Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Remove redundant double barrier\n\n- Luckily it was not too harmful in single queue submissions","sha":"1becd2f788b7c014ff2cdc2e6efaf5fdfb2f3caf"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6031700?v=4","date":"2021-02-09T16:05:09Z","email":"RipleyTom@users.noreply.github.com","login":"RipleyTom","name":"RipleyTom"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-03T14:30:16Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Add some GT6 devices to whitelist","sha":"0eb0b1e1c98466d46a0ee7512fcc541ef7db1d6c"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-03T14:37:51Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-03T14:37:51Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"endian.hpp: simplify be_t/le_t constructors","sha":"e6a3b59229fa3b538831b1ce3a8d5ec86e24c3a6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-03T14:38:36Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-03T14:38:36Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add commits","sha":"8b8120cfb77a8a8fb5510d55b501cd6cb7b84f34"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/211316?v=4","date":"2021-03-03T19:50:14Z","email":"tredaelli@redhat.com","login":"drizzt","name":"Timothy Redaelli"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-04T09:17:27Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"SPUThread.cpp: remove \"__attribute__((always_inline))\"\n\ncmp_rdata and mov_rdata are using __attribute__((always_inline)),\nwithout inline, that is not supported on current g++ (see RPCS3#1546).\n\nMoreover __attribute__((always_inline)) is a noop if used without inline so\njust remove it.\n\nA proper fix is to move the 2 functions in an header file as static\n(with FORCE_INLINE) so it can be correctly inlined by the compiler.","sha":"fa5a2b6a8523b25152564ac641c1f7cd873a5e5a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/211316?v=4","date":"2021-03-03T21:01:34Z","email":"tredaelli@redhat.com","login":"drizzt","name":"Timothy Redaelli"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-04T09:22:19Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix linking with system curl","sha":"826dc7d5a6b51c5c2272ec52c607565aee2e6c5b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-04T10:44:24Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-05T11:46:52Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"VS 16.9.0 compilation workaround","sha":"b09ac19e61d6f7d090fa7ac7e86dbcca1941c01f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-04T10:44:36Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-05T11:46:52Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Qt: fix settings_dialog layout. Add stretches.","sha":"f88c3ae417101112589b8041616041b796942643"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T22:23:24Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T01:07:02Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: reset battery progress bar when not supported.","sha":"bdd94f053c973989b7da7a945f8ff9a92a0110ac"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T22:24:05Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T01:07:02Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"dualsense: minor cleanup","sha":"b836d2497d9a70e76adc01cfcdc0fdefc257e82a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-02T23:33:10Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T01:07:02Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"dualsense: implement battery level","sha":"cdffaa1598855341a12cdc6079b44726d7efad78"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-05T18:14:50Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T01:07:02Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"dualsense: get hardware and firmware version","sha":"c8e7530e372a014883e4bbaaf1c91e9f3430a881"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-05T19:32:58Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T01:07:02Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"dualsense: fix LED updates","sha":"06d2c5357b150ca28bc94a2000c3e9ebc5cbf304"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-05T21:08:13Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T01:07:02Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"dualsense: implement lightbar pulse (low battery)","sha":"dbb03ae2d710987d0adec5f7fc7e04d81a11ac9a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-05T21:09:28Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T01:07:02Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"DS3/DS4: fix battery LED update","sha":"3e7e077fad94df1510904e67bd13923e50381980"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-01-27T16:22:06Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T09:34:49Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"GUI: Improve missing firmware handling\n\n* Install PS3UPDAT.PUP at the spot when booting games whenever firmware is missing. The option to boot games without firmware is still supported when all firmware SPRX are HLEd in firmware settings.\n* Pop-up a confirmation dialog in firmware installation if firmware is already installed.","sha":"a5d74c5e96468fd10c4c95436d815727b115b21a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T09:43:01Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T10:15:54Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"DualSense: Fix initial ingame LED update","sha":"d2b0b019ec99ca81dff4b7987a078bd70a85ad12"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-05T14:18:17Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T11:53:40Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix utils::get_firmware_version()\n\n* Do not crash on invalid file contents.\n* Do not crash on unexpected file.open() error.","sha":"228988ca2b2ecfa71721e7b91d598b5016c7a1b5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/12022598?v=4","date":"2021-03-06T13:01:04Z","email":"arus@poczta.onet.pl","login":"GitArUs","name":"GitArUs"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-06T13:01:04Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Allow games to list all savedata (#9547)\n\n* cellSaveData - allow games to list all savedata, not only those they own.\r\n\r\nCo-authored-by: Megamouse <studienricky89@googlemail.com>","sha":"f8097a428c851e1b35b0962e47bdda1bce5b0092"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T14:23:26Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T15:06:21Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"add some log messages for debugging","sha":"7205a937511350dca1c31e660f4a2488171b9c59"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-05T19:05:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T15:07:08Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Enable -Wunused-parameter","sha":"87af90501811b7d3432ce5bafa70d7eaac4f5cb6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T16:26:41Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T16:26:41Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Minor fix for fmt::split with empty string\n\nDoesn't affect existing code, I believe.\nReturn at least 1 empty string if is_skip_empty=false.","sha":"7cd79714facb8e42c7279d5504c9df0b9fe09741"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T16:30:09Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T16:30:09Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Another minor fix for fmt::split\n\nDoesn't affect existing code.\nIf there are 2 or more separator, choose closest.","sha":"c69c70cf5fc6a10d3c03b6e0f581ac9b0b0885b4"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T17:02:16Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T20:10:31Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"sysinfo.cpp: Implement utils::main_tid (main thread id)\n\nCareful.","sha":"ded828dfc94f947a64ce2f0760e50b70dae418a0"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T17:10:48Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T20:10:31Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Implement thread_ctrl::get_tid()","sha":"55c75d2c873885cfda9b21cfc011855ef1f68520"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T18:02:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T20:10:31Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Implement thread_ctrl::is_main()","sha":"3609eb25c95624368e9da36824136dc01330aa5e"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T15:40:56Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T22:56:25Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix auto updates. Don't pass exe as arg0 to execl","sha":"9da7910fc90825e4260cae065ee2b29204048f6c"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T20:10:35Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T22:56:25Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Cleanup Emu before the update reboot","sha":"dab53f4e41c0812847329c943ebcd2e1c00e4605"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T20:32:36Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-06T22:56:25Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Qt: Do not allow updates during emulation","sha":"3ae7debc17371e6b0d4825a6b8365d8fbe4513b0"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T10:51:21Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-06T23:52:11Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"overlays: don't count initial garbage values.\n\nThis might also shave off some microseconds.","sha":"a3a4c0a9062ea9f5b708cd2d35647fb1698f2dc6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-07T00:53:27Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-07T10:48:19Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Input/Qt: implement XInput battery level","sha":"1b5cf118e7a4747b3e64aa20f0abaece6cbc9dd5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-07T16:59:37Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-07T16:59:37Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"GUI: Implement MSELF extraction tool (#9909)\n\n* MSELF: fix overflow\r\n\r\n* GUI: Implement MSELF extraction tool\r\n\r\n* VS: fix mself files in vcxproj\r\n\r\n* fix\r\n\r\n* Update mself.cpp\r\n\r\n* fixed","sha":"2afc7cbaaab7962e9623a0666683b70628297f6b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-07T18:55:40Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-08T11:05:00Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"patch_manager: expand first search results","sha":"935e398930f43ccaf68da682808f30bc5e4beed4"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/1712979?v=4","date":"2021-03-06T19:56:58Z","email":"dsdominykas@gmail.com","login":"xddxd","name":"xddxd"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-08T12:46:03Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Possible workaround for mobile Kepler chips","sha":"6d91a9fe6f9b9c850266df3bf06e88b28952d480"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/26352541?v=4","date":"2021-03-04T17:16:12Z","email":"MalcolmJestadt@gmail.com","login":"Whatcookie","name":"Malcolm Jestadt"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-08T12:48:36Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"SPU LLVM: Rearange FM instruction for better performance\n- Doesn't eliminate any instructions, but allows for better out of order execution.","sha":"e5d0e035d0b6358b154242ffd3a5d7b5622ff496"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/1712979?v=4","date":"2021-03-08T15:28:07Z","email":"dsdominykas@gmail.com","login":"xddxd","name":"xddxd"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-08T19:57:35Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Move sys_crashdump to it's own file and make it a module itself","sha":"df338f05526c9e7c4f0dcdb0c223d2902eb6cef6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-07T20:42:38Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-08T19:58:19Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"make from_hdd0_game check lowercase","sha":"1a3c01154ac2d13d14166221bf0fcad946d3a216"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/10439488?v=4","date":"2021-03-08T21:29:56Z","email":"10439488+dio-gh@users.noreply.github.com","login":"dio-gh","name":"dio-gh"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-09T00:07:32Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"fix debugger instr coloring\n\nFixes the missing color highlights from the currently executing instruction and the breakpoints.","sha":"aad06faf1f0a4282010481ac8df8004c269d00a6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/10439488?v=4","date":"2021-03-08T22:06:15Z","email":"10439488+dio-gh@users.noreply.github.com","login":"dio-gh","name":"dio-gh"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-09T00:07:32Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"fix colors for skyline (bright)\n\nFixes debugger colors and the notice-level log message colors, the latter to the gray that is noted in the color palette.","sha":"324fa10918572f7569f4d7281255f7c3641c11f1"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/10439488?v=4","date":"2021-03-08T22:07:01Z","email":"10439488+dio-gh@users.noreply.github.com","login":"dio-gh","name":"dio-gh"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-09T00:07:32Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"fix colors for skyline (dark)\n\nFixes debugger colors in the dark Skyline stylesheet.","sha":"5dfe3f414d649ad9d7bcef6e71fabe5a8b3b2d40"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-07T15:48:43Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T00:09:50Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Remove some redundant code\n\nPotential fix for future warnings.","sha":"5bdd1cf837ffa3a7f31334249ac5d9a850b35f98"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-07T15:49:42Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T00:09:50Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add/fix warning -Wignored-qualifiers (GCC/clang)\n\nFix simple_array::const_iterator as a part of it.","sha":"53af2dbb3f517ac254a8809d89f54d07e48d02f8"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-07T16:47:29Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T00:10:15Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add -Wclobbered and -Wcast-function-type (no effect)","sha":"3990e2d3e62ec83f197084da36318bc153ba85d5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-08T20:41:23Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T00:10:15Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Enable -Wstrict-aliasing=1 (GCC)\n\nFixed partially.","sha":"a4fdbf0a8879abead165f350b286409da5d8c8a3"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-09T12:50:58Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-09T12:50:58Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Workaround segfaults in Vulkan enumeration thread (#9935)\n\n* Workaround segfaults in Vulkan enumeration thread","sha":"52a0b38379718fbda3fb47d6fbeb22ab4b33f2b5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-01T12:03:00Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T12:54:04Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add -Wnull-dereference (commented out)","sha":"19b5b47b26e7f68b2a6ee83b862001c386eeebbd"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T11:02:07Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T12:54:04Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Fixup write_gather (Linux, BSD)\n\nSplit iovec into small portions (256 for now)","sha":"a6350d5dd1aa4e9f0ad5645b56ebbd268b53d3e1"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T16:19:24Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-09T16:19:24Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Revert changes in BufferUtils.cpp\n\nShould fix #9933","sha":"9cbe77904def228097cb5488a25a046e83aa7686"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-09T23:58:08Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-09T23:58:08Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Move code to cpp (#9938)\n\n* GL: move GLOverlays code to cpp\r\n* GL: move GLCompute code to cpp\r\n* VK: move VKOverlays code to cpp\r\n* VK: move VKCompute code to cpp","sha":"cbd895a29c86f4e044ca00d55dff12e3705897ee"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-10T08:43:23Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-10T10:41:13Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"PPU interpreter hotfix","sha":"63ecb56b51fecac82d3748a6e09a4372b8bda0ef"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-10T12:54:32Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-10T13:02:00Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Implement utils::bless (pointer cast)\n\nTries to workaround strict aliasing troubles.\nDon't confuse with std::bless which works differently.","sha":"03332c340d9e5487bf7f3727abef553235e47f1a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-10T13:11:30Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-10T13:11:30Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Fix std::bit_cast misuse","sha":"4adf4120495cd6a866a8bfb0a72cfb1fe183764d"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-10T23:26:39Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-10T23:26:39Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Improve TAR loader (#9908)\n\n* Fix header magic test.\r\n* Rewrite code to not use so many filesystem calls.\r\n* Add many more error checks.\r\n* Add missing NUL filetype.\r\n* octalToDecimal(header.size) has been fixed to use fixed 12 characters range instead of endless string.\r\n* Add many optimizations.\r\n* Fix possible signed overflows with int, use the unisgned u64 type instead which allows for greater files as well.\r\n* Log errors.","sha":"0958c10f88de148931576315e6e46d6dd2d24dbd"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/2504890?v=4","date":"2021-03-11T10:56:17Z","email":"arabek@users.noreply.github.com","login":"arabek","name":"arabek"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-11T11:33:04Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Use maybe_unused macro for chip var\n\nVar chip is only used in the WIN32 ifdef block - use maybe_unused to silence the compiler warning about unused variable.","sha":"bdefeaf6f96fe6da9a48508c3590c22a14699900"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-08T16:43:35Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-11T12:23:58Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Loader: Log FNID of imported/exported functions","sha":"cfa2d4aaa8a675fd315bcd532d1f890d385ce2ec"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-09T19:40:14Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-11T19:48:12Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Overlays: Implement individual pulse","sha":"40f3adc45f328825dbc8f4da616a68cfd39b7c2b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-01T11:58:13Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-11T19:55:06Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Add information about unnamed/main threads in logs and fatal dialog\n\n* If thread is unnamed, keep log name empty for main thread, otherwise print thread id. In fatal dialog, main thread can be handled differently (with special remark that it's main thread).\n* Always print thread id in fatal dialog, regardless of thread type.\n\nCo-authored-by: Nekotekina <nekotekina@gmail.com>","sha":"cd6ef2958b7e70de0c6e7a23e303c1ecf0768ba0"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-28T18:11:33Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Add the async task scheduler","sha":"77e312fb9993a363ff22d8de90ca29fc42ab8c15"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-28T18:42:18Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Lazy-initialize image resource on first use when owned by a separate queue","sha":"d2993474fbc8855cc62c0f79aab47a7e945629f3"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-28T19:00:46Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Sync main pipe with async jobs if any","sha":"41f5158247a9bcf087b397501b5a0619d665026b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-28T19:18:14Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Properly clean up async scheduler","sha":"c9e8b87c6013ff219b08e511ff79c9f08c197ac6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-02-28T19:34:01Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Optimization - avoid touching the mutex at all if possible even when there is no contention","sha":"589ac1c5d4184f7e7a3193c05599e01d560ffbaa"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-02T21:52:04Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Flip on async texture uploads","sha":"b4e821c28d82e0ef0575a8c69bbab6abcf2058c6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-03T21:23:23Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Support new fxo usage pattern","sha":"585837a3f0721efc95c8f9fa0af47ea9b916de8e"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-03T21:23:52Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Tune event polling for higher throughput","sha":"bd6c187fcdd3e53fd7010413efc2b900692ec1fe"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-08T17:22:02Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Add an alternate async queue scheduler\n\n- This version violates spec but does not rely on CPU threads to keep the GPU from hanging. It's ironically much safer to use.","sha":"48d0f80a865a15aa6618da550259fc59c990e37d"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-08T17:47:37Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Add options to system configuration","sha":"7d5a72c9e08e5bb3ec47382a6513eb61cfc1d765"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-08T19:57:28Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"Basic fixups","sha":"3e8a00d2641bd0b308929c907f6947232cc48099"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-09T21:46:03Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Solve GPU hang/reset due to waiting on events that are never signaled\n\n- TODO: Some refactoring may be required to pair the primary and secondary CB and avoid such blunders","sha":"608f8de347501c9bfbf4ef875ec0c01243ac3473"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-10T20:30:39Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Check for uninitialized target before going into any scaling op","sha":"a5f0faefc36848a9afad54776bb63feaeb39a51f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T19:40:33Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-11T23:27:05Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"Add asynchronous streaming to the GUI and auto-enable it\n\n- Hopefully not many users are on very weak GPUs","sha":"140c5bfc3e3b8547773eb147713ad9b7bb95ea17"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-12T08:18:50Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-12T10:01:12Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"debugger: Fix PPU threads pausing","sha":"729cd9284edbac224cff603b66f5115e0000d924"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-12T08:15:24Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-12T18:01:48Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix sysutil_send_system_cmd at Emu.Stop()","sha":"923ba6f3bb413f13076863821efd730b36c32094"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/154165?v=4","date":"2021-03-12T23:11:02Z","email":"154165+jtscott@users.noreply.github.com","login":"jtscott","name":"jtscott"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T00:16:01Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Resolve minor typo 'verion'","sha":"e3a7fddddfb0142645405735419deb7c56905b29"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-12T17:52:22Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T09:19:39Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Import Custom Icons","sha":"8c139206d7cfdccc9c2dd4b9eddd4ca2c2d781cf"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-12T20:10:11Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T09:19:39Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Center Custom Icons","sha":"161d8ef47a393d7d47929112779db30c8cfcd06b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-12T21:24:35Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T09:19:39Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Option for Custom Icons","sha":"8d0947f07f4c2f434281f97df81c49f307c07014"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-12T22:16:41Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T09:19:39Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Fix square custom icons","sha":"c0d823f1d842cc4ad2bb71ff55fddcaa33dd4be9"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-13T01:51:40Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T10:51:40Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"GUI: Handle uppercase RAP file extension","sha":"d1e07434a163b639908f5cb05aece1e2f3969c16"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-13T05:51:35Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T10:51:40Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"GUI: Handle all PUP files in drag-and-drop","sha":"bdf6a1c70e3f9247f6a07cafdbfcde7b9db2938f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-13T06:19:22Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T10:51:40Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"GUI: Atomic RAP file installation","sha":"7a7b168af312d2d7f841b99a10602e8168f28851"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-13T06:21:18Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T10:51:40Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"SCE Decryption: Detect illegal RAP files","sha":"aff63028d4f493066580fc4727132374eaeeb28f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-13T15:02:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-13T15:02:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Continue fixing strict aliasing warnings","sha":"c22e1e71f0bb5f9e77f0e136bd97089c1b301643"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-13T15:03:08Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-13T15:03:08Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Enable -Wduplicated-branches (GCC)","sha":"ccdea1c4ad67431d3ba2460d8aab49f27d110da3"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-13T15:46:59Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-13T15:46:59Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Enable -Wduplicated-cond (GCC)","sha":"0327ecc5c108189c939a63ae2112b396668ef82a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-13T20:01:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-13T20:01:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Enable -Wtautological-compare","sha":"bb9b5e6affff63b5b9aaaeb6dcd59a20c1840baf"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-14T12:20:40Z","email":"karokidii@gmail.com","login":"kd-11","name":"kd-11"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/15904127?v=4","date":"2021-03-14T13:39:55Z","email":"15904127+kd-11@users.noreply.github.com","login":"kd-11","name":"kd-11"},"msg":"vk: Disable async streaming by default","sha":"c9214ce6c002bb62fac80afd44cb3b36c3822ecb"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-13T15:46:22Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T15:46:16Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Import Custom Shader Loading Icons\n\nand refactor icon import","sha":"2239a52e9be4ffb0431a5b84eb1d73a0599f7278"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T09:24:14Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T15:46:16Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Fix game icon canvas size","sha":"8b0cd60be99ab481b7205b4760b97445f0152a56"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T10:38:01Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T15:46:16Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"overlays: Fix aspect ratio of custom bakground images","sha":"1a5a0f5eca8f665402a8884621460ebb0e23fb3f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T11:13:20Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T15:46:16Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"workaround for clang compilation","sha":"c1de0bc28c5e1d03ad6d5a807288283598d31ed1"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T17:42:25Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T18:56:11Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Fix PaintedPixmap crash if icon is null","sha":"1e09be19f57c0dcedc718e5299889fa30d929bc1"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T17:53:55Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T18:56:11Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Fix wide game icons (weird copy pasta error)","sha":"f83b19cecf5560d4ffcdec2e526a5e463a607459"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T18:27:02Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-14T18:56:11Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: dont scale small icons, deal with size instead","sha":"f93dbb8f49e1c5f1ad83277c67c2f787a87d2fa1"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/27760396?v=4","date":"2021-03-14T20:48:50Z","email":"shockdudex@gmail.com","login":"shockdude","name":"shockdude"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-14T20:48:50Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"sys_usbd: DJ Hero Turntable Emulation (#9965)\n\n* Initial Turntable Emulation","sha":"6a14849381ffdc7ad954812cc095c2681d9c4fdc"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-15T15:38:07Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-15T17:41:33Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Thread.cpp: Add missing newline","sha":"a5bb925a3d909342dbfe388a70f5aff06030739b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-15T19:31:05Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-15T19:31:05Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"SPIRV: disable error on warnings","sha":"1b6c14be8da691cc9f3252a6f5da50764973474d"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-15T20:25:46Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-15T21:41:00Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: add bright arrows for tree views","sha":"f8e9ea45ba115c55a24f7977855211a91509e132"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-16T11:03:58Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-16T11:03:58Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Improve fs::container_stream::write (#9976)\n\nAdd overflow condition.","sha":"4c7fc8a70a9f14d4faaa8d489429cfefd5cdff1f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-16T13:20:45Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-16T13:20:45Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"PPU Debugger: Fixup for syscall arguments (#9932)","sha":"a9b0d25c01a5aa351d8154cc367253ddb84851b3"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-12T14:25:03Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-16T16:31:52Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Make gamedata installation atomic as real PS3","sha":"d7b47530070db9855db5ef33351a3cfdd23a00a2"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-16T13:25:31Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-16T16:31:52Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix sys_raw_spu_destroy","sha":"8716ac554fcbab9afa15996f2f71807f45cf21d0"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-16T13:41:32Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-16T16:33:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Save all 8 syscall_args","sha":"f801dc65585056dab67bd477662ba4b7f4e1e0d9"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-16T16:37:00Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-16T16:37:03Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Implement lv2_mp_flag::cache\n\nIdentify /dev_hdd1 without unsafe path comparison.","sha":"8fcebebae35595d26d4453f3519ed91779a6e0e3"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-16T23:39:25Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-17T07:49:03Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: make some scrollbars thicker.\n\nHow are we supposed to grab them if they are so tiny?","sha":"6cc5428d5e000d9ad4b802cd00ed506b35f904f2"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-17T14:19:35Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-17T14:19:35Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Replace some log errors (#9980)","sha":"1213708b72e7d29b4461ec0fd4efffd926772315"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-12T06:33:38Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-17T19:31:57Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix sceNpTrophyGet(Trophy/Game)Icon","sha":"1d7fbd6a9a519a235dbd4d8018b86e1ee2407af6"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-17T20:49:43Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-17T20:49:48Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Rename and move g_tls_current_cpu_thread inside cpu_thread\n\nDon't declare extern inside get_current_cpu_thread().\nPossible workaround for gcc-11.","sha":"2decf1ecda937c4741e35976abbde066029f65c3"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-17T20:53:10Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-17T20:53:10Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add supporters","sha":"ee4009e1239e3fb9d17f07dadab2557af4b5fa40"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-17T20:53:31Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-17T20:53:31Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add commits","sha":"83fdcff178d91ca8eff0881fa7b768cb41d4e03a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-17T07:48:07Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-18T08:11:34Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"cellSaveDataEnableOverlay","sha":"43ac33c2b46198c6e8bde9ed9e7fb2d72bb8dc57"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-18T09:09:42Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-18T09:09:42Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Fix race in render_creator (#9939)","sha":"ad49c54531d308f04f69e37ee7b3ba3f71991768"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-05T14:34:17Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-19T16:51:09Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Improve firmware installation error handling\n\n* Add new error types and descriptions.\n* Do not crash on missing 0x100 and 0x300 PUP file entries.\n* Report an error on missing PUP package inner files.\n* Fix overflow in file-size against header check.\n* Move all header errors to pup_object class.\n* Move verbose error descriptions to pup_object class.\n* Minor optimizations.","sha":"314670a34755869c57ced92ac19ca195ec492949"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-05T16:07:36Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-19T16:51:09Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"GUI: Implement full extraction of PUP\n\n* Implement full extraction of PS3UPDAT.PUP.\n* Implement TAR extraction via GUI.\n* Use VFS to implement missing PS3 filesystem characters escaping.\n* Use VFS to error on illegal paths. (illegal paths such as malware pointing to \"/../../..and so on../C:/Windows\")","sha":"a9ddb1d3b3bd38e8959a20202e5336c6a092a994"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-19T14:39:44Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-19T16:52:51Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"VS: move projects to 3rdParty","sha":"c4a8bb26fb2f7761478ec7dcf2befde61750e643"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-19T18:07:35Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-19T19:25:08Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix SPU mapped memory page size","sha":"18644195615ed4ddf31361c9cc6825cc078059a7"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-19T14:54:18Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-19T19:26:48Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Fix NtSetTimerResolution in no-gui mode (Win32)\n\nAdd dummy persistent timer with 10ms period.\nReplace QTimer invocation with Emu.CallAfter().\nThis way, headless and no-gui modes should be affected by it.","sha":"379138af2785a571da82ce787c2892a45487456b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/3001093?v=4","date":"2020-11-26T13:22:59Z","email":"romain.tisserand@gmail.com","login":"rtissera","name":"Romain TISSERAND"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-20T10:57:04Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Add command-line option to install firmware","sha":"b5698ee101bdc9a2f5d2b60f1071f10ed9864e2c"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-20T10:17:26Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-20T10:57:04Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Make cli fw installation more foolproof","sha":"70c98fff1951bce91984052d2d72199efa637777"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/9814000?v=4","date":"2021-03-20T06:11:37Z","email":"zionnimchuk@gmail.com","login":"hcorion","name":"Zion Nimchuk"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-20T12:09:48Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Run shellcheck on all build scripts to ensure quality","sha":"ca0c4f2cc0be650824d8672c1b074fd4b5e1895b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/9814000?v=4","date":"2021-03-20T06:13:40Z","email":"zionnimchuk@gmail.com","login":"hcorion","name":"Zion Nimchuk"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-20T12:09:48Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix some minor shellcheck errors in github upload and windows build scripts","sha":"2766e5ca6f75c0fc5682b3b2a62ecf63e3b64025"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-20T16:06:43Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-20T17:54:26Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"cfg: move get_name to _base","sha":"ae01e1d2c3942a741ff061aefb9f8ceb01f8af45"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-20T13:19:00Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-20T17:54:26Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"cfg: log unused config entries","sha":"cb9e7358d2c77e62b7f61d64da4fa32df61eaed5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-20T17:06:45Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-20T17:54:26Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"cfg: simplify get_nodes","sha":"2c05e9719db6d30498c9009631723a1344a90463"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-21T16:18:25Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-21T17:44:11Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Allow package installation through cli\n\nAdds --installpkg cli option","sha":"554ba9d6a673f2760c0c2ce7b41ddd83fa61456a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-21T19:33:30Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T09:44:30Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Fix debugger step shortcuts","sha":"399f20ae54d668a1291fce6af5c138b19fd5861f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-19T15:25:32Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-22T15:37:26Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Memory string searcher improvements\n\n* Search the entire PS3 4GB address space instead of a small area of memory which is meant mostly for PRX/SELF memory aka vm::main segment. This limitation rendered string searcher nearly useless.\n* Implement hexadecimal byte-string, hexadecimal integer, float and double value search formats.\n* Multi-thread searching.\n* Optimize searching algorithm vastly.\n* Fix crash on empty string, report an error.\n* Implement case-insensitive string search.","sha":"b0a0533a4fd0798943455c76b5b5b2aea0729d7f"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T18:05:48Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T19:19:36Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"VS: fix AdditionalIncludeDirectories","sha":"54d078f379d8d53325ce9009ba9d47a9cca0baac"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T18:11:45Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T19:19:36Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"VS: fix release Optimization","sha":"b518a9a33877150e35693e3cbd657f6e2c2c03fd"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T20:08:29Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T22:47:11Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: prepare for removal of deprecated GUI settings\n\nIf you remove a custom name and already had a deprecated name before, you'll never get rid of it.\nThis applies to all of the deprecated settings.","sha":"6892cb1c7ef3f2d67e43c538549913f7e0b9668a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T22:49:18Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T23:46:26Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"VS: fix release build","sha":"cd07ab5b5fb4dcf31fdace0e66cf43a9c013c78a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-22T23:25:51Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-23T08:11:04Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"VS: try to unbreak debug builds","sha":"dedf09017ac851e2111e9a685dbe21e0cc20c17d"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-23T10:33:07Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-23T10:33:07Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"debugger: Fix SPU memory viewing (#10007)\n\n* debugger: Fix SPU memory viewing\r\n\r\n* Fix terminal recovery from page faults (hack allocation)","sha":"a67b3479664de7d5b708bd69fb327e81c3ed5fe0"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-21T05:03:21Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T13:05:23Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Improve ELF/Trophy loader's error checking","sha":"2f333424a67084fab02e7550930ca55b36911566"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-21T15:02:21Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T13:40:44Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add some warnings (GCC, clang)","sha":"e0790f758e1759e71e3b7a500f84e169205a9623"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T17:19:10Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T17:19:10Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"atomic.cpp: remove raw_notify and simplify internal logic\n\nAlso permit zero size in waiters.","sha":"820390b7eddd1d05bbd1a0e8c7773b0d35d54622"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T17:52:56Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T17:52:56Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"atomic.cpp: allow non-standard sizes in atomic wait (>16)","sha":"393f9d329dfa7de5837ac6663a2d639ad2b01cb9"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T17:58:42Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T17:58:42Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"atomic.hpp: allow raw notify_all by pointer","sha":"729757b1ddacd9de90e6688843d38167d2266c24"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T18:09:31Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T18:09:37Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"vm: fix reservation_update notification\n\nRare function.","sha":"5dc3467337162d2327cfc0544fc16a360bf54d4c"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T19:32:50Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-23T19:48:57Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Add and fix -Wredundant-decls (GCC)","sha":"b3fb6d7d1874f0d874fa267518ab7020260916a1"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-23T19:39:39Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-24T19:47:51Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: some cleanup in debugger","sha":"ba45daff354a7f328bbfe961d54458244f547433"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-23T19:51:39Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-24T19:47:51Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: select target item in debugger list\n\nThis should make it easier to spot the item","sha":"452fb59c7472cebd191f357641f38b6c9049207b"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-23T22:23:37Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-24T19:47:51Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Fix debugger breakpoint deletion","sha":"8d5445398143757af4475ebf6e07c1bcc6031fbb"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-20T17:58:14Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-25T19:34:00Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Remove unused GUI entries when saving a config","sha":"a7acb84b8b76e8b3adc01e7e0e11badd17166442"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/1712979?v=4","date":"2021-03-17T16:28:03Z","email":"dsdominykas@gmail.com","login":"xddxd","name":"xddxd"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-25T21:29:44Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Scheduler overhaul","sha":"9d895e6b15607826e00ce12877a78094377dd2a7"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-25T21:55:06Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-25T22:39:42Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: don't show updater if booted with cli arg","sha":"9f80a55652f1ec84c0c4bc973588e00ce1923f5e"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-25T22:52:14Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-26T08:08:30Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: clean global cfg before adding custom cfgs","sha":"6565855005a803510875a5c428418b65ff04bf11"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/1712979?v=4","date":"2021-03-26T10:36:04Z","email":"dsdominykas@gmail.com","login":"xddxd","name":"xddxd"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-26T17:56:16Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Wording changes and tooltip fix for unsupported CPUs","sha":"b978aa6dca7d077cbf43fae4246726bdb18c4033"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/1712979?v=4","date":"2021-03-26T18:53:37Z","email":"dsdominykas@gmail.com","login":"xddxd","name":"xddxd"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-28T14:24:48Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"LLVM Clang-cl support and ninja build\nAlso update the submodule","sha":"916ce7899ba431dd6914176e56be74b907dfddae"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T12:04:21Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T17:19:24Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: add option to hide the log prefix","sha":"0b2ba9823818576eae7ff211ab2355a83b826da5"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T14:12:41Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T17:19:24Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: set find_dialog \"next\" button to default","sha":"90ac24e524a3da38ae8dafddc7e8788d9bb3b438"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T17:20:51Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T18:37:33Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Properly set QT_SCALE_FACTOR_ROUNDING_POLICY","sha":"d62983e1a255fc483fb9376bf1b820d13b0f2932"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T17:43:00Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T18:37:33Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: Drop int for QT_SCALE_FACTOR_ROUNDING_POLICY","sha":"a982280400423427ba25cbd6c9ae3135b1845d28"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/10439488?v=4","date":"2021-03-27T22:07:16Z","email":"10439488+dio-gh@users.noreply.github.com","login":"dio-gh","name":"dio-gh"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-29T19:24:40Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"upgrade icons to a modern design\n\nCredits go to @DAGINATSUKO, and @hcorion for the svg version.","sha":"3e48c9744b48d0e4faa61246c9856369b9b035a9"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/1712979?v=4","date":"2021-03-29T19:45:48Z","email":"dsdominykas@gmail.com","login":"xddxd","name":"xddxd"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/19864447?v=4","date":"2021-03-29T19:45:48Z","email":"noreply@github.com","login":"web-flow","name":"GitHub"},"msg":"Get rid of non-LLVM build configurations (#10030)\n\nCo-authored-by: Megamouse <studienricky89@googlemail.com>","sha":"7cbafd603a3ee1078569d9088c0c65bed8439be3"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T20:21:29Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T21:32:15Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"add AppIcon to fatal_error_dialog","sha":"66df38957b9eb2beb38ea2b0fe16921ccfe53a97"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-02T14:56:23Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-30T07:21:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix Emulator::IsPaused()","sha":"aad52837869641f0252c52f7b7155e3b8cf30f19"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-02T15:00:16Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-30T07:21:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix Emulator::Pause race with IDM","sha":"d51bb8b1cc7972a399adfb3eaadf8d602a41f386"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-02T19:51:45Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-30T07:21:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Emu: Do not obey auto-exit setting after creating firmware cache","sha":"e9bea1c742afe273cff9ce0364248d9b4799f773"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-03T04:05:21Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-30T07:21:54Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix Emulator::Stop race with IDM\n\nNewly created threads' state could have not been flagged with exit.","sha":"dea1d01de2051a99a2a811e551fe9f427be36129"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-21T16:55:47Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-30T08:13:47Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"rsx: Compile shaders when CELL is not running","sha":"1e71deb0db481761db96ba495b88e4beab756387"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-29T20:05:24Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-30T08:13:47Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"thread-pool: Fix default rounding mode","sha":"5a3c218239516957502c3eae048a2447c9985702"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-29T22:24:47Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-30T17:09:01Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Qt: gs_frame position updates","sha":"e557c962fbeb319dddf7652fde9f0bea235e469e"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2019-12-04T22:17:57Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-31T07:38:30Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Emu/overlay: ingame native overlay PPU compilation","sha":"870224cde007d65edc335d5211b8391883b59115"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-29T13:20:10Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-31T08:27:09Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Enable -Wdeprecated-copy\n\nSome classes violated the Rule of 3(5) in their special operator definitions.","sha":"deacf057698d9fc5746333bf01f26e7de6a3c569"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-30T15:31:46Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-31T08:27:09Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"msg":"Fix some -Weffc++ warnings (part 1)","sha":"2212a131ef049d261f901b412c76a0790830a4c2"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-03-31T13:31:21Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Nekotekina"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-03-31T21:40:09Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Implement scoped_progress_dialog\n\nCreate Emu/system_progress.hpp\nRemove atomic g_progr_show","sha":"e9a45a2f45e32bda9102cb18c8c99da2b98e22cb"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-31T18:17:40Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-04-01T11:09:02Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Fix #9879 and fix firmware confirmation dialog when auto-start is disabled","sha":"55c98bfaefa62eeaceb4234088c2c38ba583a8f7"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-03-31T17:08:01Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-04-01T16:11:55Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"debugger: Implement ability to pause entire emulation on breakpoint","sha":"7b57b8f2cac6d00136b457e554ff33b069d1bf6a"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-04-02T00:46:07Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-04-02T05:14:23Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Move system info to extra line","sha":"98687d474b51a00316e89b0ecc1a7e0966e09965"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-04-01T22:54:32Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-04-02T09:50:28Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"cli: set user-id per command line","sha":"9c7230e79faf26b903c9d632bdbef0f3929de740"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-04-02T16:09:52Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-04-02T18:54:33Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Set userland firmware SPRX directory as the default PS3 decryption tool path","sha":"a1d31f640ac75c78cf304a7f697c0565c45e2993"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-04-02T04:52:55Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/23019877?v=4","date":"2021-04-03T06:47:58Z","email":"studienricky89@googlemail.com","login":"Megamouse","name":"Megamouse"},"msg":"Output all fatal log messages to Console/debugger as well","sha":"73320d4180b7210226ecba048a80232f5453a00e"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-04-02T17:39:47Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-04-03T14:23:40Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Implement get_cellos_appname()\n\nIdentifying vsh.self and possibly other operating system executables in the future.","sha":"878da3b474f19a976b9afc52011a547cb192458c"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-04-02T15:33:22Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-04-03T14:23:40Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Implement _sys_prx_register_module loading imports/exports functionality","sha":"32116086b3164529bc769cdc59b2391886c919c9"}
{"author":{"avatar":"https://avatars.githubusercontent.com/u/18193363?v=4","date":"2021-04-02T16:00:09Z","email":"elad3356p@gmail.com","login":"elad335","name":"Eladash"},"committer":{"avatar":"https://avatars.githubusercontent.com/u/6028184?v=4","date":"2021-04-03T14:23:40Z","email":"nekotekina@gmail.com","login":"Nekotekina","name":"Ivan"},"msg":"Quick sys_sm_get_params implementation","sha":"e57f36fc5bdddaab049700f1f06a74d564674158"}
Binary file not shown.
@@ -1,7 +1,7 @@
# Check and configure compiler options for RPCS3
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:throwingNew /constexpr:steps16777216 /D _CRT_SECURE_NO_DEPRECATE=1 /D _CRT_NON_CONFORMING_SWPRINTFS=1 /D _SCL_SECURE_NO_WARNINGS=1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:throwingNew- /constexpr:steps16777216 /D _CRT_SECURE_NO_DEPRECATE=1 /D _CRT_NON_CONFORMING_SWPRINTFS=1 /D _SCL_SECURE_NO_WARNINGS=1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D NOMINMAX /D _ENABLE_EXTENDED_ALIGNED_STORAGE=1 /D _HAS_EXCEPTIONS=0 /MT")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /DYNAMICBASE:NO /BASE:0x10000 /FIXED")
@@ -27,20 +27,44 @@ else()
add_compile_options(-fstack-protector)
add_compile_options(-msse -msse2 -mcx16)
if ((${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.1))
add_compile_options(-fconcepts)
endif()
add_compile_options(-Werror=old-style-cast)
add_compile_options(-Werror=sign-compare)
add_compile_options(-Werror=reorder)
add_compile_options(-Werror=return-type)
add_compile_options(-Werror=overloaded-virtual)
add_compile_options(-Werror=missing-noreturn)
add_compile_options(-Wunused-parameter)
add_compile_options(-Wignored-qualifiers)
add_compile_options(-Wredundant-move)
add_compile_options(-Wcast-qual)
add_compile_options(-Wdeprecated-copy)
add_compile_options(-Wtautological-compare)
#add_compile_options(-Wshadow)
#add_compile_options(-Wconversion)
#add_compile_options(-Wpadded)
add_compile_options(-Wempty-body)
add_compile_options(-Wredundant-decls)
#add_compile_options(-Weffc++)
add_compile_options(-Wstrict-aliasing=1)
#add_compile_options(-Wnull-dereference)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Werror=inconsistent-missing-override)
elseif(CMAKE_COMPILER_IS_GNUCXX)
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
add_compile_options(-Werror=suggest-override)
add_compile_options(-Wclobbered)
add_compile_options(-Wcast-function-type)
add_compile_options(-Wduplicated-branches)
add_compile_options(-Wduplicated-cond)
endif()
#TODO Clean the code so these are removed
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.1 OR NOT CMAKE_COMPILER_IS_GNUCXX)
if (NOT (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") OR (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.1))
add_compile_options(-Wno-attributes)
endif()
@@ -50,7 +74,7 @@ else()
add_compile_options(-Wno-unused-private-field)
add_compile_options(-Wno-delete-non-virtual-dtor)
add_compile_options(-Wno-unused-command-line-argument)
elseif(CMAKE_COMPILER_IS_GNUCXX)
elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
add_compile_options(-Wno-class-memaccess)
endif()
+27
View File
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Common default props for defining properties without macros. Import right before Microsoft.Cpp.Default.props -->
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup Label="Globals">
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<PropertyGroup Label="Configuration">
<!-- Spectre mitigation is disabled by default unless WDK is installed -->
<SpectreMitigation>false</SpectreMitigation>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<LanguageStandard>stdcpplatest</LanguageStandard>
<PreprocessorDefinitions>_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>false</ExceptionHandling>
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
<RuntimeLibrary Condition = "$(Configuration.Contains('Release'))">MultiThreaded</RuntimeLibrary>
<RuntimeLibrary Condition = "$(Configuration.Contains('Debug'))">MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>
+1 -1
Submodule llvm updated: 716bb292ba...4d88105d4a

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