aboutsummaryrefslogtreecommitdiff
path: root/core/sys/windows
diff options
context:
space:
mode:
authorjakubtomsu <66876057+jakubtomsu@users.noreply.github.com>2025-10-16 15:59:22 +0200
committerjakubtomsu <66876057+jakubtomsu@users.noreply.github.com>2025-10-16 15:59:22 +0200
commit7d9f915ff985786e6068ef62f98be2d00540262a (patch)
treea536db98aa8a4b24687a103b20078fed4713d320 /core/sys/windows
parent4b8751bebdbf40528c2af8ff5a4ef38c1ab429cc (diff)
barriers, rawinput macros
Diffstat (limited to 'core/sys/windows')
-rw-r--r--core/sys/windows/kernel32.odin10
-rw-r--r--core/sys/windows/types.odin15
-rw-r--r--core/sys/windows/user32.odin8
3 files changed, 33 insertions, 0 deletions
diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin
index ff27cf795..9fb862815 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 904970589..a838fa359 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 49ebb49cb..51cbde4ae 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