From 7d9f915ff985786e6068ef62f98be2d00540262a Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 16 Oct 2025 15:59:22 +0200 Subject: [PATCH] barriers, rawinput macros --- core/sys/windows/kernel32.odin | 10 ++++++++++ core/sys/windows/types.odin | 15 +++++++++++++++ core/sys/windows/user32.odin | 8 ++++++++ test.odin | 9 +++++++++ 4 files changed, 42 insertions(+) create mode 100644 test.odin 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 diff --git a/test.odin b/test.odin new file mode 100644 index 000000000..e0c1d9371 --- /dev/null +++ b/test.odin @@ -0,0 +1,9 @@ +package min_max_test + +import "core:fmt" + +main :: proc() { + a: f32 = max(1) + b: f32 = min(2) + fmt.println(a, b) +} \ No newline at end of file