From 36ed8fe55de0601ad4e711b1ef631f22055e572d Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Mon, 29 Jan 2024 05:54:14 +0200 Subject: [PATCH 1/8] vendor/x11: change display to be a ^Display in XGenericEventCookie struct --- vendor/x11/xlib/xlib_types.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/x11/xlib/xlib_types.odin b/vendor/x11/xlib/xlib_types.odin index 2411c038c..d333c3c79 100644 --- a/vendor/x11/xlib/xlib_types.odin +++ b/vendor/x11/xlib/xlib_types.odin @@ -708,7 +708,7 @@ XGenericEventCookie :: struct { type: EventType, serial: uint, send_event: b32, - display: Display, + display: ^Display, extension: i32, evtype: i32, cookie: u32, From 301b9eef31b508afc1b0b2b2eca93005315311ff Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Mon, 29 Jan 2024 06:22:33 +0200 Subject: [PATCH 2/8] vendor/x11: added XQueryExtension, XGetEventData, and XFreeEventData --- vendor/x11/xlib/xlib_procs.odin | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/vendor/x11/xlib/xlib_procs.odin b/vendor/x11/xlib/xlib_procs.odin index 47093d5e9..5e999519b 100644 --- a/vendor/x11/xlib/xlib_procs.odin +++ b/vendor/x11/xlib/xlib_procs.odin @@ -520,6 +520,13 @@ foreign xlib { colors: [^]XColor, ncolors: i32, ) --- + XQueryExtension :: proc( + display: ^Display, + name: cstring, + major_opcode_return: ^i32, + first_event_return: ^i32, + first_error_return: ^i32, + ) -> b32 --- XcmsQueryColor :: proc( display: ^Display, colormap: Colormap, @@ -1278,13 +1285,15 @@ foreign xlib { XEnableAccessControl :: proc(display: ^Display) --- XDisableAccessControl :: proc(display: ^Display) --- // Events - XSelectInput :: proc(display: ^Display, window: Window, mask: EventMask) --- - XFlush :: proc(display: ^Display) --- - XSync :: proc(display: ^Display) --- - XEventsQueued :: proc(display: ^Display, mode: EventQueueMode) -> i32 --- - XPending :: proc(display: ^Display) -> i32 --- - XNextEvent :: proc(display: ^Display, event: ^XEvent) --- - XPeekEvent :: proc(display: ^Display, event: ^XEvent) --- + XSelectInput :: proc(display: ^Display, window: Window, mask: EventMask) --- + XFlush :: proc(display: ^Display) --- + XSync :: proc(display: ^Display) --- + XEventsQueued :: proc(display: ^Display, mode: EventQueueMode) -> i32 --- + XPending :: proc(display: ^Display) -> i32 --- + XNextEvent :: proc(display: ^Display, event: ^XEvent) --- + XPeekEvent :: proc(display: ^Display, event: ^XEvent) --- + XGetEventData :: proc(display: ^Display, cookie: ^XGenericEventCookie) -> b32 --- + XFreeEventData :: proc(display: ^Display, cookie: ^XGenericEventCookie) --- // Selecting events using a predicate procedure XIfEvent :: proc( display: ^Display, From a4d3777ab23787e93b83259a984b3aad70cbb740 Mon Sep 17 00:00:00 2001 From: James Duran Date: Wed, 14 Feb 2024 16:51:09 -0800 Subject: [PATCH 3/8] Added into_dynamic_soa, unordered_remove_soa, and ordered_remove_soa --- base/runtime/core_builtin_soa.odin | 99 +++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/base/runtime/core_builtin_soa.odin b/base/runtime/core_builtin_soa.odin index 94f5be1d4..027c680fa 100644 --- a/base/runtime/core_builtin_soa.odin +++ b/base/runtime/core_builtin_soa.odin @@ -425,4 +425,101 @@ clear_soa_dynamic_array :: proc(array: ^$T/#soa[dynamic]$E) { @builtin clear_soa :: proc{ clear_soa_dynamic_array, -} \ No newline at end of file +} + +// Converts soa slice into a soa dynamic array without cloning or allocating memory +@(builtin, require_results) +into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E { + d: #soa[dynamic]E + footer := raw_soa_footer_dynamic_array(&d) + footer^ = { + cap = len(array), + len = 0, + allocator = nil_allocator(), + } + + field_count: uintptr + when intrinsics.type_is_array(E) { + field_count = len(E) + } else { + field_count = uintptr(intrinsics.type_struct_field_count(E)) + } + + array := array + dynamic_data := uintptr(&d) + slice_data := uintptr(&array) + for _ in 0.. Date: Fri, 16 Feb 2024 10:46:46 -0800 Subject: [PATCH 4/8] Make into_dynamic_soa more concise and remove builtin tag from it --- base/runtime/core_builtin_soa.odin | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/base/runtime/core_builtin_soa.odin b/base/runtime/core_builtin_soa.odin index 027c680fa..0fe6480aa 100644 --- a/base/runtime/core_builtin_soa.odin +++ b/base/runtime/core_builtin_soa.odin @@ -428,7 +428,7 @@ clear_soa :: proc{ } // Converts soa slice into a soa dynamic array without cloning or allocating memory -@(builtin, require_results) +@(require_results) into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E { d: #soa[dynamic]E footer := raw_soa_footer_dynamic_array(&d) @@ -446,13 +446,9 @@ into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E { } array := array - dynamic_data := uintptr(&d) - slice_data := uintptr(&array) - for _ in 0.. Date: Fri, 16 Feb 2024 10:50:54 -0800 Subject: [PATCH 5/8] Fix Syntax Mistake --- base/runtime/core_builtin_soa.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/runtime/core_builtin_soa.odin b/base/runtime/core_builtin_soa.odin index 0fe6480aa..63a426888 100644 --- a/base/runtime/core_builtin_soa.odin +++ b/base/runtime/core_builtin_soa.odin @@ -446,7 +446,7 @@ into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E { } array := array - dynamic_data := ([^rawptr])(&d)[:field_count] + dynamic_data := ([^]rawptr])(&d)[:field_count] slice_data := ([^]rawptr)(&array)[:field_count] copy(dynamic_data, slice_data) From 44aae762946f33b354634d4b3c3f9ebdcd1ad104 Mon Sep 17 00:00:00 2001 From: James Duran Date: Fri, 16 Feb 2024 10:55:55 -0800 Subject: [PATCH 6/8] Fix syntax mistake again Sorry for being blind --- base/runtime/core_builtin_soa.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/runtime/core_builtin_soa.odin b/base/runtime/core_builtin_soa.odin index 63a426888..23f879791 100644 --- a/base/runtime/core_builtin_soa.odin +++ b/base/runtime/core_builtin_soa.odin @@ -446,7 +446,7 @@ into_dynamic_soa :: proc(array: $T/#soa[]$E) -> #soa[dynamic]E { } array := array - dynamic_data := ([^]rawptr])(&d)[:field_count] + dynamic_data := ([^]rawptr)(&d)[:field_count] slice_data := ([^]rawptr)(&array)[:field_count] copy(dynamic_data, slice_data) From a974c08aff9b04806e73040c27b710ca72f8c58f Mon Sep 17 00:00:00 2001 From: Ralph Caraveo Date: Fri, 8 Mar 2024 16:19:59 -0800 Subject: [PATCH 7/8] Incorrect write syscall on Darwin - fixes stderr output. On macos, Odin was previously swallowing errors that would be reported via stderr. I've confirmed with @laytan on Discord that this fixes the issue. --- base/runtime/os_specific_darwin.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/runtime/os_specific_darwin.odin b/base/runtime/os_specific_darwin.odin index 84de03f0f..61c17a597 100644 --- a/base/runtime/os_specific_darwin.odin +++ b/base/runtime/os_specific_darwin.odin @@ -5,7 +5,7 @@ package runtime import "base:intrinsics" _stderr_write :: proc "contextless" (data: []byte) -> (int, _OS_Errno) { - WRITE :: 0x20000004 + WRITE :: 0x2000004 STDERR :: 2 ret := intrinsics.syscall(WRITE, STDERR, uintptr(raw_data(data)), uintptr(len(data))) if ret < 0 { From b2e7eb4db4bc6e1849b5d1b5d903132ca1f2d05e Mon Sep 17 00:00:00 2001 From: spindlebink Date: Sat, 9 Mar 2024 09:10:25 -0600 Subject: [PATCH 8/8] Properly initialize return matrices in linalg.orthonormalize --- core/math/linalg/specific.odin | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/math/linalg/specific.odin b/core/math/linalg/specific.odin index d51a034d1..41d0e5344 100644 --- a/core/math/linalg/specific.odin +++ b/core/math/linalg/specific.odin @@ -2711,6 +2711,7 @@ to_quaternion :: proc{ @(require_results) matrix2_orthonormalize_f16 :: proc "contextless" (m: Matrix2f16) -> (r: Matrix2f16) #no_bounds_check { + r = m r[0] = normalize(m[0]) d0 := dot(r[0], r[1]) @@ -2721,6 +2722,7 @@ matrix2_orthonormalize_f16 :: proc "contextless" (m: Matrix2f16) -> (r: Matrix2f } @(require_results) matrix2_orthonormalize_f32 :: proc "contextless" (m: Matrix2f32) -> (r: Matrix2f32) #no_bounds_check { + r = m r[0] = normalize(m[0]) d0 := dot(r[0], r[1]) @@ -2731,6 +2733,7 @@ matrix2_orthonormalize_f32 :: proc "contextless" (m: Matrix2f32) -> (r: Matrix2f } @(require_results) matrix2_orthonormalize_f64 :: proc "contextless" (m: Matrix2f64) -> (r: Matrix2f64) #no_bounds_check { + r = m r[0] = normalize(m[0]) d0 := dot(r[0], r[1]) @@ -2748,6 +2751,7 @@ matrix2_orthonormalize :: proc{ @(require_results) matrix3_orthonormalize_f16 :: proc "contextless" (m: Matrix3f16) -> (r: Matrix3f16) #no_bounds_check { + r = m r[0] = normalize(m[0]) d0 := dot(r[0], r[1]) @@ -2763,6 +2767,7 @@ matrix3_orthonormalize_f16 :: proc "contextless" (m: Matrix3f16) -> (r: Matrix3f } @(require_results) matrix3_orthonormalize_f32 :: proc "contextless" (m: Matrix3f32) -> (r: Matrix3f32) #no_bounds_check { + r = m r[0] = normalize(m[0]) d0 := dot(r[0], r[1]) @@ -2778,6 +2783,7 @@ matrix3_orthonormalize_f32 :: proc "contextless" (m: Matrix3f32) -> (r: Matrix3f } @(require_results) matrix3_orthonormalize_f64 :: proc "contextless" (m: Matrix3f64) -> (r: Matrix3f64) #no_bounds_check { + r = m r[0] = normalize(m[0]) d0 := dot(r[0], r[1])