diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin index ff27cf79541..9fb862815e9 100644 --- a/core/sys/windows/kernel32.odin +++ b/core/sys/windows/kernel32.odin @@ -213,6 +213,16 @@ foreign kernel32 { ) -> BOOL --- WaitForSingleObject :: proc(hHandle: HANDLE, dwMilliseconds: DWORD) -> DWORD --- WaitForSingleObjectEx :: proc(hHandle: HANDLE, dwMilliseconds: DWORD, bAlterable: BOOL) -> DWORD --- + EnterSynchronizationBarrier :: proc( + lpBarrier: ^SYNCHRONIZATION_BARRIER, + dwFlags: SYNCHRONIZATION_BARRIER_FLAGS, + ) -> BOOL --- + InitializeSynchronizationBarrier :: proc( + lpBarrier: ^SYNCHRONIZATION_BARRIER, + lTotalThreads: LONG, + lSpinCount: LONG, + ) -> BOOL --- + DeleteSynchronizationBarrier :: proc(lpBarrier: ^SYNCHRONIZATION_BARRIER) -> BOOL --- Sleep :: proc(dwMilliseconds: DWORD) --- GetProcessId :: proc(handle: HANDLE) -> DWORD --- CopyFileW :: proc( diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index 904970589c2..61e5d7820c3 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -2991,6 +2991,21 @@ CRITICAL_SECTION :: struct { SpinCount: ULONG_PTR, } +SYNCHRONIZATION_BARRIER :: struct { + Reserved1: DWORD, + Reserved2: DWORD, + Reserved3: [2]ULONG_PTR, + Reserved4: DWORD, + Reserved5: DWORD, +} + +SYNCHRONIZATION_BARRIER_FLAG :: enum { + SPIN_ONLY = 0, + BLOCK_ONLY = 1, + NO_DELETE = 2, +} +SYNCHRONIZATION_BARRIER_FLAGS :: distinct bit_set[SYNCHRONIZATION_BARRIER_FLAG; DWORD] + REPARSE_MOUNTPOINT_DATA_BUFFER :: struct { ReparseTag: DWORD, ReparseDataLength: DWORD, diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index 49ebb49cbd1..4eb389f6b11 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -398,6 +398,14 @@ MAKEINTRESOURCEW :: #force_inline proc "contextless" (#any_int i: int) -> LPWSTR return cast(LPWSTR)uintptr(WORD(i)) } +RAWINPUT_ALIGN :: proc(x: uintptr) -> uintptr { + return (x + size_of(uintptr) - 1) & ~uintptr(size_of(uintptr) - 1) +} + +NEXTRAWINPUTBLOCK :: proc(ptr: ^RAWINPUT) -> ^RAWINPUT { + return cast(^RAWINPUT)RAWINPUT_ALIGN(uintptr(ptr) + uintptr(ptr.header.dwSize)) +} + Monitor_From_Flags :: enum DWORD { MONITOR_DEFAULTTONULL = 0x00000000, // Returns NULL MONITOR_DEFAULTTOPRIMARY = 0x00000001, // Returns a handle to the primary display monitor