Commit Graph

6007 Commits

Author SHA1 Message Date
Sandy Carter b2912e7891 [threading linux] Wait for thread start 2020-11-15 11:12:05 -06:00
Sandy Carter b91203a0b5 [threading linux] Implement basic Thread function
Add Basic Tests on Threads
2020-11-15 11:12:05 -06:00
Sandy Carter c2de074d5c [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.
2020-11-15 11:12:05 -06:00
Sandy Carter 331bb0ea9a [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.
2020-11-15 11:12:05 -06:00
Sandy Carter 5d0efedaf4 [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.
2020-11-15 11:12:05 -06:00
Sandy Carter 75d54e2fa2 [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.
2020-11-15 11:12:05 -06:00
Sandy Carter 6e13a38cad [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
2020-11-15 11:12:05 -06:00
Sandy Carter 4ce9eddfb9 [threading] Test WaitAll and WaitAny with Events 2020-11-15 11:12:05 -06:00
Sandy Carter 9d20adfa77 [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
2020-11-15 11:12:05 -06:00
Sandy Carter f9d708265f [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.
2020-11-15 11:12:05 -06:00
Sandy Carter 4280a6451d [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.
2020-11-15 11:12:05 -06:00
Sandy Carter b5ea686475 [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
2020-11-15 11:12:05 -06:00
Sandy Carter d8d8a7dbb8 [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.
2020-11-15 11:12:05 -06:00
Sandy Carter 6c79c93f2b [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.
2020-11-15 11:12:05 -06:00
Triang3l c2e8d23139 [Vulkan] Scissor from draw_util 2020-11-15 17:26:41 +03:00
Triang3l 791326ff9b Merge branch 'master' into vulkan 2020-11-15 16:34:53 +03:00
Triang3l 56a07c1773 [GPU] Scissor in draw_util 2020-11-15 16:34:23 +03:00
Triang3l 715d614f5e [Vulkan] Float controls properties 2020-11-15 15:08:50 +03:00
Triang3l 8febf02a39 Merge branch 'master' into vulkan 2020-11-15 14:06:15 +03:00
Joel Linn 171c97c929 Start CLion by invoking `xb devenv` when available 2020-11-14 13:30:06 -06:00
Joel Linn 9233f85c30 [docs] CMake generation. 2020-11-14 13:30:06 -06:00
Joel Linn 06214c544a [CPU] std::sort compare: satisfy comp(a,a)==false 2020-11-14 13:30:06 -06:00
Joel Linn 8b1ebe1130 Premake: Reorder links to speed up building.
- Re-enable LTO on clang.
- Set AR on travis so it builds with LTO.
2020-11-14 13:30:06 -06:00
Joel Linn 9dea6b3f62 Add premake cmake generator.
`./build/CMakeLists.txt` is generated by `./xb.bat premake --devenv=cmake` and enables use of other IDEs like `CLion` for example.
2020-11-14 13:30:06 -06:00
Joel Linn 2a076c924f Refactor premake scripts. 2020-11-14 13:30:06 -06:00
Sandy Carter e348cacc6d [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).
2020-11-14 13:17:15 -06:00
Radosław Gliński f8d7652dc4
[Kernel] Remove remaining SHIM usage from xam_net (#1671) 2020-11-14 19:30:56 +03:00
Triang3l a319617185 [Kernel] Thread affinity cleanup 2020-11-14 18:09:47 +03:00
Gliniak 2dc6b0b2ad [Kernel/Thread] Added missing paramteter to KeSetAffinityThread 2020-11-14 17:48:30 +03:00
Triang3l fe9b5b4a8f [D3D12] Cleanup: remove inline 2020-11-14 17:02:09 +03:00
Triang3l 6b988d43c7 [D3D12] Cleanup: pipeline state -> pipeline, other things 2020-11-14 16:43:18 +03:00
Triang3l 0ec215a8a0 Merge branch 'master' into vulkan 2020-11-14 14:17:54 +03:00
Triang3l 65c8d2b28e [Vulkan] Basic draw call architecture + [D3D12] Some cleanup 2020-11-14 14:16:04 +03:00
Gliniak 87a3c5fac2 [GPU] Added Stub for Packet: PM4_WAIT_FOR_IDLE 2020-11-10 22:48:00 +03:00
Triang3l 08c50af7b8 Merge branch 'master' into vulkan 2020-11-08 19:51:49 +03:00
Triang3l e196edc989 [Base] Use the original XEPACKEDSTRUCT/UNION names on MSVC 2020-11-08 19:41:41 +03:00
Triang3l 93f6a00201 [Vulkan] Transient descriptor pool + other cleanup for future drawing 2020-11-07 23:18:28 +03:00
Triang3l afe304b328 [Vulkan] Shared memory descriptor set 2020-11-07 20:43:45 +03:00
Triang3l d7341f9873 [Vulkan] Internal descriptor set layouts 2020-11-07 14:03:31 +03:00
Triang3l 8ef538a68f Merge branch 'master' into vulkan 2020-11-06 13:00:56 +03:00
Triang3l 6ac4d3e0c9 [DXBC] Fix texture binding reference use-after-grow 2020-11-06 13:00:22 +03:00
Triang3l d926e37f95 [SPIR-V] vfetch: packed formats 2020-11-05 23:49:39 +03:00
Triang3l 45d3dc4806 [SPIR-V] vfetch: 16-bit float 2020-11-05 21:49:36 +03:00
Triang3l a82b85a8ac [SPIR-V] vfetch: 32_* and 32_*_FLOAT formats 2020-11-04 23:56:12 +03:00
Triang3l 533bdf2114 [SPIR-V] Shared memory SSBOs 2020-11-04 18:57:08 +03:00
Triang3l 8665fa7517 [SPIR-V] Vertex index writing to r0.x 2020-11-03 23:31:52 +03:00
Triang3l 6030a4cf72 [SPIR-V] Add missing EnsureBuildPointAvailable in ALU 2020-11-02 12:17:47 +03:00
Triang3l de8b0a85ac [SPIR-V] Remaining scalar ALU instructions 2020-11-01 22:30:05 +03:00
Triang3l cb35aaf13b [SPIR-V] Scalar kill instructions 2020-11-01 22:22:34 +03:00
Triang3l 7512560416 [SPIR-V] SALU address and predicate 2020-11-01 22:17:12 +03:00