Commit Graph

661 Commits

Author SHA1 Message Date
Herman S.
c7f041ced0 [Base] Fix from_chars float parsing assertion on MSVC 2026-03-15 16:34:34 +09:00
Herman S.
6f18c98502 [Thread/Posix] Fix thread suspend deadlock
Replace std::mutex/condition_variable with sem_wait/sem_post for thread
suspension, as WaitSuspended is called from the SIGRTMIN signal handler
where pthread_mutex_lock is not async-signal-safe.
2026-03-10 23:55:27 +09:00
Herman S.
4f1394bbaa [Kernel/Threading] Fix some kernel threading issues
- broken atomic exchange on linux
- spinlock release memory buffer
- race in thread suspension
- removed misleading volatile qualifiers
2026-03-10 23:53:03 +09:00
Herman S.
c4bd0c3f33 [Testing] Inclrease timer test timeout and update default test targets
The threading test is verifying that the timer fires, not that it fires
within a specific timeout, so increasing to 100 to keep it from failing
randomly. Also removing xenia-cpu-ppc-tests from list of default targets
as they take forever to run, they can still be run run using xb test
with --target xenia-cpu-ppc-tests explicitly.
2026-03-10 16:49:41 +09:00
Gliniak
ce94f7fc03 [Base] Win-Style assertion on linux. No more forced termination while debugging 2026-03-09 19:40:20 +01:00
Herman S.
bf6e1a81eb [Posix] Fix DeallocFixed crashes / memory leaks
BaseHeap::Dispose() walks the page table and calls
DeallocFixed(addr, 0, kRelease) for every allocated page region.
These addresses are within file-backed view mappings (i.e. guest memory).
On Windows, VirtualFree on file-mapped pages silently returns FALSE.
On POSIX, the code hit assert_always() and crashed. Changed to return false
to match Windows behavior.

Memory leaks from munmap(addr, 0):

Callers passed length=0 to DeallocFixed(kRelease). On Windows this works because
VirtualFree(addr, 0, MEM_RELEASE) means "release the entire region" — Windows
ignores the length parameter for MEM_RELEASE and always frees the whole
allocation. On POSIX, munmap(addr, 0) fails with EINVAL, so the memory was
silently leaked every time.
2026-03-09 13:43:56 +09:00
Herman S.
52297ea8f8 [Linux] Implement fast mutex similar to Windows version 2026-03-09 13:43:56 +09:00
Herman S.
15483b02af [Memory] Linux cleanup shm files on exit
Prevents running out of /dev/shm space and crashing the whole system.
2026-03-09 13:43:56 +09:00
Herman S.
ae1706d1dc [Threads] Ensure proper RTTI/vtable emission for PosixWaitHandle 2026-03-09 13:43:56 +09:00
Herman S.
174d2d4205 [Posix Threading] Robust mutexes 2026-03-09 13:43:56 +09:00
Herman S.
1ae82023ea [Posix Threads] Refactored condition variables from static to per-instance members and replaced deadlock-prone predicate-based WaitMultiple with polling using try_lock. 2026-03-09 13:43:56 +09:00
Herman S.
c9eba5daf8 [Threading] Signal handler / self-suspension improvements 2026-03-09 13:43:56 +09:00
Herman S.
81dd887e74 [Kernel] Thread suspend for posix to match windows semantics 2026-03-09 13:43:56 +09:00
Herman S.
32b8c341ee [Kernel] ReleaseSemaphore for Posix to match Windows semantics 2026-03-09 13:43:56 +09:00
Herman S.
28e48410c5 Fix potential buffer overflow in posix memory handling 2026-03-09 13:43:56 +09:00
Herman S.
77535b7cec [Base] Replace CRITICAL_SECTION with SRWLOCK based mutexes
xe_fast_mutex now also asserts on recursive lock attempts
2026-03-09 00:19:32 +09:00
Herman S.
de63bb18a6 [Base] Use function-local static for global_mutex
File-scope static initialization order is undefined across translation
units. Code that acquires the global critical region during early startup
could run before the mutex constructor, operating on uninitialized state.
A function-local static is constructed on first use, guaranteeing the
mutex is initialized before any caller can access it.
2026-03-09 00:18:08 +09:00
Gliniak
6446150a5e [Cmake] Moved tests to separate folders 2026-03-06 19:59:38 +01:00
Herman S.
71c5702ee8 [Build] Convert build system to raw cmake and remove premake layer 2026-03-04 17:37:36 +09:00
Adrian
8d5565da8a [Misc] Fixed missing guard header (#887) 2026-02-23 17:07:23 +09:00
Herman S.
434644c301 Merge commit 'f2fabfdf0' into canary_experimental
Sync changes from master up to before the recent GPU changes, those will be
merged later
2026-02-17 16:59:38 +09:00
Herman S.
09a15fbedc [Testing] Get tests running (dirty hack for linux) 2026-02-13 13:32:39 +09:00
Adrian
ac66db337b [XAM] Fixed size used in read_u16string_and_swap 2025-12-22 19:33:47 +01:00
oltolm
492fa7c632 use concepts instead of SFINAE 2025-12-22 10:00:52 +01:00
Gliniak
90a7cc4fee [GPU] Changed default readback_resolve to none 2025-12-04 20:12:34 +01:00
Gliniak
dd29365970 [APU] Switched to New XMA decoder as default
- Added codepath for "consume only" pass. This should resolve constant clicking in Source engine games.
- Added smaller performance improvements to decoder
2025-12-01 23:58:33 +01:00
Herman S.
93adb2bb95 [Config] Gracefully handle type mismatches in cvars.
Detect cvar type mismatch and reset to default value, as well
as show message to the user that the cvar from the config has
been updated.
2025-12-01 17:38:34 +01:00
Gliniak
892aa85913 [Premake] Remove AVX2 requirement from linux build
Co-authored-by: has207 <429230+has207@users.noreply.github.com>
2025-11-03 22:17:45 +01:00
Gliniak
e6828af5e7 [Base] Fixed issue with unnecessary null terminator after reading u16string 2025-10-30 21:57:08 +01:00
Adrian
299ba08983 [APP] Detect PR builds with XE_BUILD_IS_PR 2025-10-30 08:19:28 +01:00
Gliniak
51414f3e1e [Logging] Added ability to disable GPU related logs 2025-10-29 21:16:40 +01:00
Gliniak
2e9c459846 [Kernel] Fixed issue with WINE crash while opening played titles or achievements tab 2025-10-08 11:16:07 +02:00
guccigang420
01ae24e46e [Base/Memory] Fix VirtualQuery length parameter 2025-08-20 13:34:39 +03:00
Gliniak
419c0149c9 [Base] Post merge fixes 2025-08-15 18:06:57 +02:00
Gliniak
c4bd676c5e Merge branch 'master' of https://github.com/xenia-project/xenia into canary_experimental 2025-08-15 15:37:50 +02:00
Triang3l
b5432ab83f [Vulkan] Refactoring and fixes for VulkanProvider and related areas
Enable portability subset physical device enumeration.

Don't use Vulkan 1.1+ logical devices on Vulkan 1.0 instances due to the
VkApplicationInfo::apiVersion specification.

Make sure all extension dependencies are enabled when creating a device.

Prefer exposing feature support over extension support via the device
interface to avoid causing confusion with regard to promoted extensions
(especially those that required some features as extensions, but had those
features made optional when they were promoted).

Allow creating presentation-only devices, not demanding any optional
features beyond the basic Vulkan 1.0, for use cases such as internal tools
or CPU rendering.

Require the independentBlend feature for GPU emulation as working around is
complicated, while support is almost ubiquitous.

Move the graphics system initialization fatal error message to xenia_main
after attempting to initialize all implementations, for automatic fallback
to other implementations in the future.

Log Vulkan driver info.

Improve Vulkan debug message logging, enabled by default.

Refactor code, with simplified logic for enabling extensions and layers.
2025-08-14 23:44:21 +03:00
Margen67
8b6cb9c287 [Premake, 3PP] Formatting/cleanup 2025-08-11 21:03:31 -07:00
Margen67
81b972f329 [Base, premake] Cleanup
date has detected _MSVC_LANG for a while, so HAS_UNCAUGHT_EXCEPTIONS isn't needed.
2025-08-10 06:06:59 -07:00
Margen67
995c105c1c [Base] Don't hardcode UTF_CPP_CPLUSPLUS 2025-08-10 06:01:43 -07:00
Margen67
6941b69691 [Base] Remove unneeded if
C++20 is required to build and this didn't work for Windows since it didn't account for _MSVC_LANG.
2025-08-10 04:38:33 -07:00
Gliniak
e9b2464254 [XAM] Fixed issue with Content not being close due to upper-lower characters difference.
- Added string_key_insensitive
2025-08-06 22:46:20 +02:00
Margen67
25d6f8269a [premake] Cleanup 2025-07-27 02:46:43 -07:00
Margen67
3eef564ff8 [format] Require EOF newline 2025-07-19 14:42:21 -07:00
Margen67
4cb783bf22 Header cleanup 2025-07-19 14:42:21 -07:00
Margen67
0aeac841b8 Fix building with Clang 20
date: 3.0.4
tomlplusplus: Latest master as of writing since there's no stable release with the build fixes.
2025-07-07 04:27:38 -07:00
Adrian
fd1abfe6aa [Lint/CI] Use LLVM v19 for Linux & Lint 2025-06-21 00:25:27 +02:00
Gliniak
50492a951e [Misc] Moved pe_image to base from 3pp and cut unnecessary parts 2025-05-31 10:05:00 +02:00
Gliniak
e601b5ab87 [UI] Added modify profile UI
- Changed default icons size from 75x75 to 64x64 to match console icons size
- Added png_utils
- Removed all dialogs from xam_ui.cc into separate entities under xam/ui
- Added option to return INT32 and WSTRING type settings to host
- Added multiple enums related to user settings
- Added code to handle changing user pfp
- Fixed bug with system app being added to GPD played list
- Changed logic in: XamUserGetUserFlagsFromXUID
- Implemented: XamUserIsOnlineEnabled
- Implemented: XamUserGetMembershipTier
- Implemented: XamUserGetMembershipTierFromXUID
- Implemented: XamUserGetUserTenure
- Partially Implemented: XamUserGetSubscriptionType
2025-05-29 09:00:14 +02:00
Peter Wright
63c2d94a98 Implement LaunchFileExplorer the same as LaunchWebBrowser. 2025-05-20 20:37:26 +02:00
Gliniak
56703e52e2 [UI] Redesigned "Install Content" window
- Added ID for each ImGui window
- Added filesystem::CreateFolder function
2025-04-18 21:55:58 +02:00