Commit Graph

4476 Commits

Author SHA1 Message Date
Sandy Carter 546b21819b [fs linux] Specify NT style step 2019-08-23 08:19:50 +02:00
Sandy Carter 6e5f1fd610 [kernel] Add demangling of type_id for linux 2019-08-23 08:19:50 +02:00
Sandy Carter e22cc86067 [fs linux] Fix sep of absolute paths of entries 2019-08-23 08:19:43 +02:00
Sandy Carter 0ac572a28b [fs linux] Fix ListFiles
Skip recursive "." and ".." paths.
Join paths instead of concatenating them.
Assert stat return code.
2019-08-23 08:19:34 +02:00
Sandy Carter 3d21577163 [linux graphics] Remove GLEW
OpenGL is not used in the whole stack.
All references are removed.
2019-08-22 07:41:32 +02:00
Sandy Carter dc0c8b781b [linux vulkan] Remove linking directly with vulkan
Using volk means vulkan linking is done at runtime with the dl library.
2019-08-22 07:41:19 +02:00
Sandy Carter c0acb26142 [ui gtk] Fix init, resize and destroy
Prevent Vulkan Swap before display context is assigned.
Prevent resize while fullscreen (like in windows impl).
Use superclass Resize implementation to reduce code duplication.
Remove recursive call to GTKWindow::Close().
Destroy xcb window after superclass Close().
Set hwnd to null after closing on windows implementation.
2019-08-21 22:51:58 +02:00
Sandy Carter f0bc0a8088 [ui gtk] Fix file dialog
Use drawing area for vulkan but window for dialogs
2019-08-21 22:51:58 +02:00
Doug Johnson d92cd9f6a1 UI: Improve GTK GUI Abstractions for Linux 2019-08-21 22:51:58 +02:00
Sandy Carter 10e5425155 [vulkan] Fix typos and cast types 2019-08-21 22:51:58 +02:00
Sandy Carter 4a9d6744ec [vulkan] Add Report Callback to instance create 2019-08-21 22:51:58 +02:00
Sandy Carter 94c1bca8c3 [vulkan linux] Add extension requirement for XCB 2019-08-21 22:51:36 +02:00
illusion98 ad6448cd29 Merge remote-tracking branch 'upstream/master' into canary 2019-08-21 07:00:47 -05:00
Radosław Gliński 765c1cc4e7 Disable debugging break on KeBugCheck 2019-08-21 06:59:36 -05:00
emoose f46e3c7e39 [Kernel/VFS] Ensure vfs::Entry is up-to-date before retrieving file information
Games like Forza use NtQueryInformationFile to get the size of the file, to make sure that there's enough room inside it to write data.

Previously, updating the file size (via SetInfoFile(EndOfFile) or WriteFile) wouldn't update the vfs::Entry size field, which NtQueryInfo uses to return the size of the file.

This resulted in the game thinking that the file was smaller than it actually is, and trying to correct that by using SetInfoFile(EndOfFile), which then truncated the file and deleted important data that was written to it.
2019-08-21 02:00:57 -05:00
emoose 06cacbb9af [Kernel] Implement XeKeysObscureKey & XeKeysAesCbcUsingKey 2019-08-21 02:00:57 -05:00
emoose b22d76f0f9 [Kernel] Add XLiveBase 0x58046 stub 2019-08-21 02:00:57 -05:00
0x8081 071e4dce37 Merge remote-tracking branch 'emoose/ntwritefile-apc' 2019-08-20 17:29:24 -06:00
0x8081 974123d9c3 Merge remote-tracking branch 'emoose/import-fixes' 2019-08-20 16:21:23 -06:00
0x8081 e2456f662a Merge remote-tracking branch 'randprint/XBLAfixes' 2019-08-20 15:44:23 -06:00
0x8081 e0ea242b35 Merge remote-tracking branch 'canary/canary' 2019-08-20 15:42:19 -06:00
0x8081 7091177142 Merge remote-tracking branch 'canary/systemlink' 2019-08-20 15:41:16 -06:00
0x8081 c9631fb73d Fix STFS stuff 2019-08-20 15:37:51 -06:00
0x8081 97325d286f Fix Emoose Dashboard merge 2019-08-20 14:12:59 -06:00
0x8081 134ea59e9a Merge remote-tracking branch 'emoose/dashboard' 2019-08-20 13:38:26 -06:00
0x8081 3edc563bac Merge remote-tracking branch 'emoose/title-updates' 2019-08-20 13:34:30 -06:00
illusion98 8c2f0377c4 Merge remote-tracking branch 'upstream/master' into canary 2019-08-20 01:34:45 -05:00
Triang3l 4731ae026b [D3D12] 3D/stacked texture layer addressing 2019-08-19 23:24:58 +03:00
Cancerous 807fceefc1 add missed part of PR #1150 2019-08-19 14:41:43 -04:00
Cancerous 61eb3a7c2d [kernel] Updated PR from Permanulled https://github.com/xenia-project/xenia/pull/1150/files#diff-358a33abb42660137d33300bbc8188c8R51
plus xgimessages to fix Jetpac XBLA
gets AegisWings, Jetpac, and MetalSlug 3 in game
2019-08-19 12:35:01 -04:00
0x8081 61a325ae09 Update to Master and merge inital syslink implementation 2019-08-19 10:13:25 -05:00
illusion98 4a39af2a8f Merge branch 'systemlink' 2019-08-19 09:43:00 -05:00
chss95cs@gmail.com 2655195ee6 Reuse flag results in OPCODE_BRANCH_TRUE codegen if the preceding instruction was a comparison that already set the cpu flags 2019-08-19 09:41:48 -05:00
chss95cs@gmail.com 030a879cf8 Add constant folding for OPCODE_ROTATE_LEFT 2019-08-19 09:41:36 -05:00
Triang3l bc4b68db45 [CPU] Data cache control instructions 2019-08-18 16:22:32 +03:00
Triang3l b25c50164f [APU] Physical address in XE_XMA_REG_CONTEXT_ARRAY_ADDRESS 2019-08-16 21:20:10 +03:00
Triang3l e35c609224 Revert "[APU] Temp XMA context allocation region workaround"
This reverts commit 968c337d22.
2019-08-16 21:11:55 +03:00
Triang3l 968c337d22 [APU] Temp XMA context allocation region workaround 2019-08-16 09:47:28 +03:00
Triang3l 126978d960 [Memory] Fix memory watch addresses 2019-08-16 08:49:48 +03:00
Triang3l 834ced0d63 [Memory] 0xE0000000: Fix a typo, re-enable and cleanup 2019-08-15 23:55:33 +03:00
Doug Johnson d8eb24f495 base: clock_posix: Fix implementation to match windows semantics 2019-08-15 08:33:36 -04:00
Sandy Carter ac78acbea1 [debugging linux] Implement functions
Check TracerPid in /proc/self/status for attached debugger.
Add SIGTRAP handler to prevent signal from halting app while not running
in a debugger.
Log DebugPrint in clog (stderr).
2019-08-15 08:30:38 -04:00
Triang3l e862169156 [Memory] BaseHeap::TranslateRelative including host address offset 2019-08-15 00:31:21 +03:00
Triang3l 0451153760 [Memory] Temporarily disable allocation in 0xE0000000 2019-08-15 00:06:27 +03:00
gibbed 6ab7720951 [Kernel] Fix stray whitespace in license_mask definition. 2019-08-14 14:15:56 -05:00
Triang3l 003c02c640 [CPU, Memory] 0xE0000000 adjustment by @elad335 and mapping 2019-08-14 21:37:52 +03:00
illusion98 c021c7741d [Kernel] Add license mask as a config variable 2019-08-14 10:25:24 -05:00
Sandy Carter 3c3709dbe7 [CPU] Use c++ style cast 2019-08-14 06:42:30 -05:00
Doug Johnson 959ad9f0cc base: main_posix: Print build version and date, like the windows main 2019-08-14 07:07:35 -04:00
Doug Johnson e092c8c187 base: logging: Add Linux support, add stderr output support 2019-08-14 07:07:35 -04:00
Sandy Carter 2970b84bc1 [string] Remove reuse of va_list in AppendVarargs
va_list are not guarenteed to maintain their values after being used.
With clang on Linux, args is undefined after fetching length and will print
"(null)".
Copy args into another va_list before getting length to prevent this.
Add tests.
2019-08-14 07:07:35 -04:00
Sandy Carter 6cde4f9e12 [logging] Fix log folder creation from same directory
Expand find_base_path to support unix-style and local files.
Remove trailing path separators from find_base_path output.
Fix cases of local files such as `find_base_path("local_file")`
Fix logger creating directories such as xenia.log/ when run from a local
directory such as with ./build/bin/xenia under linux creating a directory
called xenia.log/ and then being unable to create a log of the same name.

Add tests to validate find_base_path.
2019-08-14 07:07:35 -04:00
Sandy Carter 738eb65643 [string] Combine string and wstring in template
Merge kPathSeparator and kWPathSeparator to template variable.
Generalize /, and \ in kAllPathSeparators.
2019-08-14 07:07:35 -04:00
Sandy Carter 221c9739cb [string] Add base string tests 2019-08-14 07:07:35 -04:00
Triang3l 2507f1a819 [Memory] TranslateVirtual in shim and strings 2019-08-14 10:31:11 +03:00
Triang3l 0067f5561d [Kernel] More TranslateVirtual/HostToGuestVirtual usage 2019-08-14 08:28:30 +03:00
Triang3l 2152c79965 [Memory] 0xE… adjustment in TranslateVirtual 2019-08-14 00:07:27 +03:00
Sandy Carter 02c17f086e [threading linux] Implement native_handle
Move wait implementation to not use native_handle.
Implement native_handle for each primitive using posix natives.
2019-08-13 16:50:28 -04:00
Sandy Carter 24d210f07f [threading linux] Implement suspend count
Add suspend count to thread implementation.
Increment suspend count on suspend and decrement on resume.
Wait on suspend count to be decremented to 0.
Return suspend count on suspend and on resume before incr/decr.
Fix naming of resume suspend count to make clear that suspend count is
before incr/decr.
Add test.
2019-08-13 16:50:28 -04:00
Sandy Carter 49f8a519af [threading] Change thread names to suit pthread
Shorten names to 16.
Rename Win32 to Windowing.
Shorten GraphicsSystem thread names due to 16 length limit of pthread.
Without this change, both show up as GraphicsSystem.
Remove redundant "Worker" and "Thread" from names.
Remove redundant thread handle from thread name.
2019-08-13 16:50:28 -04:00
Sandy Carter 5575bd9b6f [threads linux] Free and signal suspended threads
Give other threads access to initially suspended threads by signalling
conditional variable before waiting for state to be changed again.
2019-08-13 16:50:28 -04:00
Sandy Carter d1b3c858e9 [threading linux] Implement Signal and Wait
Add Signal abstract function to handles.
Test SignalAndWait.
2019-08-13 16:50:28 -04:00
Sandy Carter 1ac9ac7cab [threading] Add complex wait on multiple test 2019-08-13 16:50:28 -04:00
Sandy Carter e2bf48ac1d [threading linux] Implement TLS
Implement TLSHandle with pthread_key_t.

Test Alloc, Free, Get and Set.
2019-08-13 16:50:28 -04:00
Sandy Carter 41ba1eb1c1 [threading linux] Implement Callback Queuing
Add thread local bool for alertable state.
Use real-time event interrupt to run callback.
Fix sleep duration from miliseconds (microseconds / 1000) to seconds in sleep
command.
Add note for future implementation.

Ignore real-time event 37 in .gdbinit which is used to signal callback.

Test AlertableSleep
Test Thread QueueUserCallback.
TODO: Test alerted wait result when using IO functions.
2019-08-13 16:50:28 -04:00
Sandy Carter 00f223e737 [threading linux] Implement suspendable pthreads
Use real-time event interrupt to communicate suspend in timely manner.
Use conditional_variable to implement suspend wait and resume trigger.

Ignore real-time event 36 in .gdbinit which is used to signal suspend.

Test suspending threads.
2019-08-13 16:50:28 -04:00
Sandy Carter c02f0e9219 [threading linux] Wait for thread start 2019-08-13 16:50:28 -04:00
Sandy Carter 82cbb11ff2 [threading linux] Implement basic Thread function
Add Basic Tests on Threads
2019-08-13 16:50:28 -04:00
Sandy Carter fb3533ec45 [threading linux] Implement Timer
Test Manual Reset and Synchronization timers single threaded.
Test Cancelling timers.
Test WaitMultiple.
Ignore real-time event 35 in .gdbinit which is used to signal timer.

Callbacks don't seem to be called so testing them is difficult.
2019-08-13 16:50:28 -04:00
Sandy Carter 996d629538 [threading linux] Implement Mutant
Keep track of recursive locks with owner and count of locks.
Only allow recursive locks from same thread and increment count.
Only allow first locks from when count is zero.

Test acquiring and releasing mutant on same and on different threads.
Test Release return values.
Test WaitAll and WaitAny.
2019-08-13 16:50:28 -04:00
Sandy Carter 01f1ca283f [threading linux] Implement Semaphore
Test acquiring and releasing semaphores on same and on different threads.
Test previous_count values.
Test WaitAll and WaitAny.

Add tests for invalid semaphore creation parameters but disactivated as
they do not pass on any platform. These should be enabled and the
implementations fixed to match documentation.
2019-08-13 16:50:28 -04:00
Sandy Carter 4289349654 [threading linux] Make PosixCondition base class
Add PosixConditionBase as base class for Waitables to use common
primitives mutex and conditional variable
Add abstract signaled() and post_execution() to use single WaitMultiple
implementation.
2019-08-13 16:50:28 -04:00
Sandy Carter fb505eaed1 [threading linux] Implement WaitMultiple
Make conditional_variable and mutex static and create generalisation of
Wait for vector of handles.
Use std::any for waitany and std::all for waitall
2019-08-13 16:50:28 -04:00
Sandy Carter 0f7b48618e [threading] Test WaitAll and WaitAny with Events 2019-08-13 16:50:26 -04:00
Triang3l 741b5ae2ec [Memory] Add HostToGuestVirtual and use it in a couple of places 2019-08-13 23:49:49 +03:00
Sandy Carter dedf7cb184 [threading linux] Implement Events
Remove file-descriptor specific wait implementation to PosixFdHandle class
which breaks on waits of non-fd handles.
Replace with PosixConditionHandle and extend to support auto reset and
initial values.
Simplify mutex and conditional variable use with stdlib versions which
wrap these primitives but provide better C++ interface.
Test Event and Reset
2019-08-13 16:49:48 -04:00
Sandy Carter d146e31921 [vulkan linux] Fix native_platform_handle with gtk
Use gtk connection as handle and use it when creating surface.
2019-08-13 15:59:33 -04:00
Sandy Carter 05b3680b22 [kernel] Define param order between compilers
Fix issue in clang where args were inverted last to first due to the way
c++ implements function calls.
The function make_tuple, being a function, has undefined ordering of
resolution of the values of its parameters `Ps(init)` and would vary
between compilers. Namely clang would resolve them in order and msvc would
resolve them in reverse order.
This normally would not matter except for the fact that init maintains a
mutable state which is affected my the order of operations: init.ordinal
is a counter and also defines where in memory a value is stored.
The C++ standard doesn't define an order of resolution of parameters in a
function but it will define an order in a brace-initializer.
Switching make_tuple for a brace-initializer enforces an order which is the
same between all compilers (tested gcc, clang and msvc).
Prior code was written to decrement ordinal due to the reverse traversal.
This has been switched to incrementing thanks to the in-order traversal.
2019-08-13 15:59:08 -04:00
Sandy Carter fe2bb74d7c [memory] Add Memory mapping view tests
Add test for mapping and for mapping with access.
2019-08-13 15:59:08 -04:00
Sandy Carter 220c657823 [memory linux] Properly unlink shared memory
shm_unlink(name) is the proper way to close a shared memory in linux.
Prior to this, xenia was creating and not cleaning up shared memory handle
which would accumulate in /dev/shm. shm_unlink is the proper way of doing
this.
Add filename to CloseFileMappingHandle signature.
Add simple test to open and close.
2019-08-13 15:59:07 -04:00
Sandy Carter cbbb69273c [memory] Move "Local\\" prefix to win impl
CreateFileMappingHandle now takes shared memory name without a prefix.
The doc of shm_open recommends not using slashes and prefixing with "/".
The prefixing has been moved to the os implementation layer.
Invocations of CreateFileMappingHandle were all using "Local\\" so these
prefixes were removed.
2019-08-13 15:59:07 -04:00
uytvbn 0beed6a9b6 [Linux] Implement virtual memory allocation 2019-08-13 15:59:07 -04:00
Sandy Carter 9137e56381 [threading linux] Fix events with closed handles
Linux: Remove copy and destroy call in make_unique invokation which closes
handles on all events.
Testing: Add Wait test for Events set and unset.
2019-08-13 15:56:42 -04:00
Sandy Carter a0bdb3d3c2 [threading] Simplify and test Fence
Remove atomic boolean in fence. Variable signaled_ is already protected
by mutex.
Remove wait loop with single predicate wait protected with mutex.

Add Fence Signal and Wait tests
Test signaling without waiting.
Test signaling before waiting.
Test signaling twice before waiting.
Test synchronizing threads with fence.

Few REQUIRES were used to test as there are no return codes.
A failing test may hang indefinitely or cause a segfault which would still
register as a fail.
2019-08-13 15:56:42 -04:00
Sandy Carter 8087b5a58b [threading] Implement Posix HighResolutionTimer
Implement HighResolutionTimer for Posix by using native timers.
Callbacks are triggered with realtime interrupts if they are supported.
Create an enum to track user-defined interrupts as well as an initializer and
handler to register these interrupts per thread.
Add test cases for timers for both single and multiple.
Fix Sleep function to continue sleeping if interrupted by system.
Add local .gdbinit to ignore signal 34 which is used by high res timer
2019-08-13 15:56:42 -04:00
Sandy Carter bc2bb4391b [threading linux] Fix nanosleep using microseconds
Add Sleep Test for 50ms.
Fix Sleep under linux that was using microseconds as nanoseconds.
Factor timespec creation to template function using div/mod and nanoseconds
from duration cast.
2019-08-13 15:56:42 -04:00
Sandy Carter 5e2502b868 [threading] Add basic threading tests
Test logical_processor_count() 3 times to test static return value stays
correct.
Run EnableAffinityConfiguration(). No asserts possible.
Test setting thread id, test using uint32_t max to reset.
Test setting thread name. No asserts possible.
Test running MaybeYield(). No obvious more complex test case.
Test running SyncMemory(). No obvious more complex test case.
2019-08-13 15:56:42 -04:00
Triang3l f1b9e1afce [CPU] Remove unused access violation handler variables 2019-08-13 00:06:29 +03:00
Triang3l 470f9946d6 [Vulkan v2] Present framebuffer clearing 2019-08-11 23:53:24 +03:00
Triang3l 490f3de853 [Vulkan v2] Swapchain ImageViews, error messages 2019-08-11 19:29:44 +03:00
Triang3l be6fa2b577 [Vulkan v2] Present loop 2019-08-11 17:49:01 +03:00
Triang3l 675034670e [Vulkan v2] Surface queries 2019-08-10 20:41:37 +03:00
Triang3l db2898e386 Merge branch 'master' of github.com:xenia-project/xenia 2019-08-10 14:52:54 +03:00
Triang3l fb656f3493 [Vulkan v2] GDK VkSurface 2019-08-10 14:52:33 +03:00
Jonathan Goyvaerts c621e01dd2 Add game_language as a config variable 2019-08-10 06:51:36 -05:00
Triang3l af93986c8f [Vulkan v2] VkSurface 2019-08-10 00:23:31 +03:00
Triang3l 30ba2619f3 [Vulkan v2] Properly include, clean up queue families 2019-08-09 22:40:55 +03:00
Triang3l 001120605b [Vulkan v2] Frames and fences 2019-08-08 23:58:02 +03:00
Triang3l 5744e6ba38 [Vulkan v2] Device and queue creation 2019-08-08 23:03:36 +03:00
Triang3l 940ef4ad7a [UI/GPU] Fix include order 2019-08-08 22:11:51 +03:00
gibbed 39c3f72c41 [Kernel] Implement RtlComputeCrc32. 2019-08-07 19:50:17 -05:00
Triang3l 2334e475de [Vulkan v2] Physical device, [D3D12] Small cleanup 2019-08-08 00:08:20 +03:00
Triang3l 40471dff32 [D3D12] Remove gflags from premake5.lua 2019-08-06 23:16:51 +03:00
emoose e68057affb
[Kernel] Update profile-gpds to work with latest master 2019-08-05 18:26:07 +01:00
emoose ad47cd7022
[Kernel] Allow loading info from "Account" file (gamertag etc)
This should let Xenia load in Account files from an actual 360, one step closer to fully supporting 360 profiles!

Only decrypts/reads atm, but the code is there for re-encrypting, maybe once new UI is ready we can make use of that for creating new 360-compatible profiles?
2019-08-05 18:26:06 +01:00
emoose 981eff5902
[Kernel] Move HmacSha function to seperate file, add RC4 2019-08-05 18:26:05 +01:00
emoose fa61106984
[Kernel] Remove redundant 'Xdbf' from names 2019-08-05 18:26:04 +01:00
emoose c1eaf6879a
[Kernel] Move XDBF code to its own namespace 2019-08-05 18:26:03 +01:00
emoose 8f5a82b444
[Kernel] Fix GpdFile missing default constructor & init dash with proper ID 2019-08-05 18:26:01 +01:00
emoose fa2cd63b1f
[Kernel] Add UserProfile::GetTitles, add title_id param to UpdateTitleGpd
Also changed GetTItleGpd to check for -1 to use current GPD (some games might be using 00... as title id, eg. protos)
2019-08-05 18:26:00 +01:00
emoose 00cffcacbb
[Kernel] Add GpdFile::GetTitleId() member 2019-08-05 18:25:59 +01:00
emoose 69eca79402
[Kernel] Format XdbfFile class members like rest of project
Oops, holdover from when this was XbdfWrapper :P
2019-08-05 18:25:58 +01:00
emoose 9b8ebcfe7b
[Kernel] Fix achievement iterator inside XGIUserWriteAchievements
Thanks to jgoyvaerts for noticing it!
2019-08-05 18:25:56 +01:00
emoose 40145b8dbb
[Kernel] Implement XamProfileEnumerate functions 2019-08-05 18:25:55 +01:00
emoose be8d85b168
[Kernel] Add --profile_directory flag, print achievements to log
Also added more error checking, and changed XELOG statements that use %ws to use %s & xe::to_string instead, seems to_string handles some non-latin strings better than %ws does.
2019-08-05 18:25:54 +01:00
emoose 66fca40b04
[Kernel] Update CreateAchEnum to actually use the title_id parameter 2019-08-05 18:25:53 +01:00
emoose 04fcdeb24d
[Kernel] GPD: Set unlock/played times, add missing SPA achievements to existing GPDs...
For example if a user applies a TU that adds achievements after already running the non-patched game, this should add any new achievements it finds.

Will also update the last_played time of a title when the SPA gets loaded in (on game launch), and also set the unlock_time when unlocking achievements.

Unlocking also only updates the title GPD (+ dash GPD) now, instead of needing to rewrite every GPD.
2019-08-05 18:25:52 +01:00
emoose faeddbd34d
[Kernel] Copy title image/name from SPA->GPD, fix XDBF free data...
Velocity should now load Xenia-created GPDs fine :D

To try it just make a new profile package in Velocity, inject GPDs from Xenia, and inject random Account file from a 360 profile.
Then close created package, use Tools -> Profile Tools -> Profile Editor to open the package you just created, and if all goes well the profile should load up fine.
2019-08-05 18:25:51 +01:00
emoose e510972691
[Kernel] Update XamUserCreateAchievementEnumerator to work with GPDs
Seems to work fine, tested with Tetris TGM ACE which uses achievements to track progression & unlock things in the game, and unlocking achievements in the GPDs does unlock things in game as intended.
Haven't actually tested unlocking the achievements in-game and then checking though (my tetris skills are awful :P), but I think it should work fine.

Strings aren't copied into it yet since I didn't want to alloc guest memory for every CreateEnumerator call...
Not many games actually have in-game achievement lists though, but I've added a placeholder string for any that might.

Like said in the comment, maybe we should alloc those strings in guest mem when the game GPD/SPA is first loaded in?
2019-08-05 18:25:49 +01:00
emoose 8368e8ce06
[Kernel] Let XGIUserWriteAchievements unlock achievements
XGIUserWriteAchievements seems to be the main (only?) way achievements are unlocked, when used that'll now try getting the GPD from UserProfile and unlock the achievements passed to it.

Dash GPD info is recalced and GPDs get written to disk whenever achievements are unlocked, letting achievements persist across instances.

TODO:
- "Achievement Unlocked!" UI, writing to log isn't much of an indicator :P
- XamUserCreateAchievementEnumerator, needs to return XACHIEVEMENT_DETAILS structs, which also contain pointers to strings in guest memory...
- Copy over more data from SPA? (need to check what data 360 copies to it)
- Optimize GPD writing, atm every GPD gets rewritten even if it hasn't been changed...
- Change profile folder path? Maybe allow using 360 profiles eventually?
- GPD settings
2019-08-05 18:25:48 +01:00
emoose 2a5ab07024
[Kernel] Let UserProfile load/save GPDs, convert SPA -> GPD on XEX load
UserProfile will now try loading dash GPD + any game GPDs from the "profile" folder when initialized.

After loading an XEX the title's SPA data gets passed to UserProfile, which will then either set current GPD based on title ID in the SPA, or create new GPD and copy achievements/images over to it.
2019-08-05 18:25:46 +01:00
emoose 734bbc7515
[Kernel] Add XdbfTitlePlayed support to GpdFile, used by dash GPD
Eventually user_profile would read dash GPD, loop through XdbfTitlePlayed entries, load GPD for each one...
Also eventually settings will be stored in dash GPD (eg. the ones currently defined in user_profile.cc)
2019-08-05 18:25:44 +01:00
emoose 00f3627715
[Base] Make Emulator::CompleteLaunch use SpaFile instead 2019-08-05 18:25:43 +01:00
emoose 52984280c3
[Kernel] Add achievement stuff to XdbfWrapper, convert it to a full XDBF parser...
XdbfWrapper would only wrap existing in-memory data, making modifying data (or creating new data) non-trivial.
The new XdbfFile class parses all the XDBF stuff into different vectors, making modifications a lot easier.

GpdFile and SpaFile are both children of XdbfWrapper, SpaFile has the same functions as the older XdbfGameData class, but now includes support for parsing achievements too.
The GpdFile class also supports achievements, and both classes parse into a common XdbfAchievement struct, which makes it simple to eg. copy achievements from a SPA file into a new GPD file.

TODO:
- images?
- GPD settings (user_profile has some code for this, not sure how much we can use here though...)
- modify user_profile to make use of this
2019-08-05 18:25:41 +01:00
gibbed 35e79d1979 [Base] Fix checks in cvar string escaping. 2019-08-04 21:55:06 -05:00
Triang3l cb0e18c7dc [Memory] BaseHeap::host_address_offset 2019-08-04 23:55:54 +03:00
Triang3l 25675cb8b8 [Memory] E0000000 adjustment in watches only for Windows 2019-08-04 23:10:59 +03:00
gibbed bbe4d416ff [Core] Fix writing of multiline values in config. 2019-08-04 13:00:15 -05:00
gibbed 41b8dbdd76 [Core] Fix SaveConfig on non-Windows. 2019-08-04 12:48:41 -05:00
gibbed 13a67d64a9 [Core] Fix ParseFile on non-Windows. 2019-08-04 12:20:51 -05:00
gibbed 306f358c07 [Base] Drop inline on string_util/vec128 implementations for now because clang is whining. 2019-08-04 12:00:04 -05:00
gibbed 7d6d732999 [Kernel] Of course I forget to commit another local change. 2019-08-04 11:44:18 -05:00
gibbed 36bd0df586 [Base] Move float/double to_hex_string implementation out of header. Maybe fix Travis complaining. 2019-08-04 11:38:01 -05:00
gibbed 1ebf7bb484 [Kernel] Implement KeTryToAcquireSpinLockAtRaisedIrql. Maybe correctly. 2019-08-04 11:36:49 -05:00
Triang3l 68017eadea [Vulkan] Add missing line to mark a texture as watched 2019-08-04 18:29:20 +03:00
gibbed 4248f9ed19 [Base] Fix formatting in string_util.cc. 2019-08-04 07:32:24 -05:00
gibbed 693958f8b7 [Base] Fix escaping quote runs. 2019-08-04 07:29:29 -05:00
gibbed bee55ce5bb [Base/Core] Work on config/cvars. Properly escape string values when saving config. 2019-08-04 07:09:05 -05:00
gibbed 82f85c98f0 [Base] Add wide version of split_path. 2019-08-04 06:47:09 -05:00
gibbed 01c656b77b [Base] Add split_string. 2019-08-04 06:46:07 -05:00
emoose 70df4f42ae
Merge branch 'master' into dashboard 2019-08-04 12:41:39 +01:00
gibbed 2048239f30 [Base] Move implementation out of header where appropriate, and qualify std namespace. 2019-08-04 04:40:19 -05:00
gibbed 40cc8c52d7 [Base] Qualify std namespace. 2019-08-04 04:39:22 -05:00
gibbed 8b1f728d85 [Base] Use vwsprintf instead of _vsnwprintf. 2019-08-04 03:44:08 -05:00
gibbed 5ea54d9326 [Core] Fix config load/save not using wide strings for path. 2019-08-04 03:30:57 -05:00
gibbed b685211b96 [Base] Add wide versions of FatalError. 2019-08-04 03:26:18 -05:00
gibbed 85b4b561bf [Base] Fix Travis complaints with cvar code. 2019-08-04 02:52:28 -05:00
gibbed a1c9d57afc [App] Make target into a transient cvar. 2019-08-04 02:18:03 -05:00
gibbed f360053198 [Base/Core] Bring cvar/config code in line with the style guide. 2019-08-04 02:17:22 -05:00
gibbed 7ba460552c [Base/Core] Add support for transient cvars. 2019-08-04 02:12:46 -05:00