Commit Graph

5436 Commits

Author SHA1 Message Date
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
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 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
gibbed 35e79d1979 [Base] Fix checks in cvar string escaping. 2019-08-04 21:55:06 -05:00
Rick Gibbed ce8d3cb978
Merge pull request #1392 from Margen67/update-documentation
Update and move documentation from website to GitHub Wiki.
2019-08-04 20:39:30 -05:00
Margen67 dd46e30be5 [building.md+README.md] Move building instructions+xb to building, make Quickstart link to wiki
Also update and remove outdated information.
2019-08-05 08:24:52 +07:00
Rick Gibbed 483d5e8ff4
Merge pull request #1409 from Margen67/appveyor-cleanup
Clean up .appveyor.yml.
2019-08-04 18:34:29 -05:00
Rick Gibbed 9f24d61268
Merge pull request #1401 from Margen67/upgrade-travis
[Travis] Use newer clang+llvm and libvulkan, remove outdated comments.
2019-08-04 18:29:00 -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