From 8050622fe62522b694f212f06ee902de99c42363 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Thu, 28 Nov 2024 20:07:54 +0100 Subject: [PATCH 01/91] add `map_entry` procedure --- base/runtime/core_builtin.odin | 26 ++++++++++++++++++++++++++ base/runtime/dynamic_map_internal.odin | 23 +++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index d28dadd02..e7c2c0b1f 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -936,6 +936,32 @@ map_upsert :: proc(m: ^$T/map[$K]$V, key: K, value: V, loc := #caller_location) return } +/* +Retrieves a pointer to the key and value for a possibly just inserted entry into the map. + +If the `key` was not in the map `m`, an entry is inserted with the zero value and `just_inserted` will be `true`. +Otherwise the existing entry is left untouched and pointers to its key and value are returned. + +If the map has to grow in order to insert the entry and the allocation fails, `err` is set and returned. + +If `err` is `nil`, `key_ptr` and `value_ptr` are valid pointers and will not be `nil`. + +WARN: User modification of the key pointed at by `key_ptr` should only be done if the new key is equal to (in hash) the old key. +If that is not the case you will corrupt the map. +*/ +@(builtin, require_results) +map_entry :: proc(m: ^$T/map[$K]$V, key: K, loc := #caller_location) -> (key_ptr: ^K, value_ptr: ^V, just_inserted: bool, err: Allocator_Error) { + key := key + zero: V + + _key_ptr, _value_ptr: rawptr + _key_ptr, _value_ptr, just_inserted, err = __dynamic_map_entry((^Raw_Map)(m), map_info(T), &key, &zero, loc) + + key_ptr = (^K)(_key_ptr) + value_ptr = (^V)(_value_ptr) + return +} + @builtin card :: proc "contextless" (s: $S/bit_set[$E; $U]) -> int { diff --git a/base/runtime/dynamic_map_internal.odin b/base/runtime/dynamic_map_internal.odin index 3dded7716..c9d264c6a 100644 --- a/base/runtime/dynamic_map_internal.odin +++ b/base/runtime/dynamic_map_internal.odin @@ -941,6 +941,29 @@ __dynamic_map_set_extra :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^ return nil, rawptr(result) } +__dynamic_map_entry :: proc "odin" (#no_alias m: ^Raw_Map, #no_alias info: ^Map_Info, key: rawptr, zero: rawptr, loc := #caller_location) -> (key_ptr: rawptr, value_ptr: rawptr, just_inserted: bool, err: Allocator_Error) { + hash := info.key_hasher(key, map_seed(m^)) + + if key_ptr, value_ptr = __dynamic_map_get_key_and_value(m, info, hash, key); value_ptr != nil { + return + } + + has_grown: bool + if err, has_grown = __dynamic_map_check_grow(m, info, loc); err != nil { + return + } else if has_grown { + hash = info.key_hasher(key, map_seed(m^)) + } + + value_ptr = rawptr(map_insert_hash_dynamic(m, info, hash, uintptr(key), uintptr(zero))) + assert(value_ptr != nil) + key_ptr = rawptr(map_cell_index_dynamic(map_data(m^), info.ks, map_desired_position(m^, hash))) + + m.len += 1 + just_inserted = true + return +} + // IMPORTANT: USED WITHIN THE COMPILER @(private) From b73275cf423186c558e637f629a846eb21c45f24 Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 19 Dec 2024 17:12:07 -0500 Subject: [PATCH 02/91] Get arm64 up to speed in os2 linux Readded open flags for arm64 to sys/linux/bits.odin. Make process_start name based instead of descriptor based to allow running of scripts. Fix bug in heap_linux. Fix and simplify os2.remove. --- core/os/os2/file_linux.odin | 22 ++------ core/os/os2/heap_linux.odin | 2 +- core/os/os2/process_linux.odin | 47 ++++------------- core/sys/linux/bits.odin | 94 +++++++++++++++++++++------------- 4 files changed, 73 insertions(+), 92 deletions(-) diff --git a/core/os/os2/file_linux.odin b/core/os/os2/file_linux.odin index e9ce13447..20f179f77 100644 --- a/core/os/os2/file_linux.odin +++ b/core/os/os2/file_linux.odin @@ -272,28 +272,12 @@ _truncate :: proc(f: ^File, size: i64) -> Error { } _remove :: proc(name: string) -> Error { - is_dir_fd :: proc(fd: linux.Fd) -> bool { - s: linux.Stat - if linux.fstat(fd, &s) != .NONE { - return false - } - return linux.S_ISDIR(s.mode) - } - TEMP_ALLOCATOR_GUARD() name_cstr := temp_cstring(name) or_return - fd, errno := linux.open(name_cstr, {.NOFOLLOW}) - #partial switch (errno) { - case .ELOOP: - /* symlink */ - case .NONE: - defer linux.close(fd) - if is_dir_fd(fd) { - return _get_platform_error(linux.rmdir(name_cstr)) - } - case: - return _get_platform_error(errno) + if fd, errno := linux.open(name_cstr, _OPENDIR_FLAGS); errno == .NONE { + linux.close(fd) + return _get_platform_error(linux.rmdir(name_cstr)) } return _get_platform_error(linux.unlink(name_cstr)) diff --git a/core/os/os2/heap_linux.odin b/core/os/os2/heap_linux.odin index ede5eb2ac..8819dfac7 100644 --- a/core/os/os2/heap_linux.odin +++ b/core/os/os2/heap_linux.odin @@ -415,7 +415,7 @@ _region_resize :: proc(alloc: ^Allocation_Header, new_size: int, alloc_is_free_l back_idx := -1 idx: u16 infinite: for { - for i := 0; i < len(region_iter.hdr.free_list); i += 1 { + for i := 0; i < int(region_iter.hdr.free_list_len); i += 1 { idx = region_iter.hdr.free_list[i] if _get_block_count(region_iter.memory[idx]) >= new_block_count { break infinite diff --git a/core/os/os2/process_linux.odin b/core/os/os2/process_linux.odin index 7eb4dfa44..936fbfc40 100644 --- a/core/os/os2/process_linux.odin +++ b/core/os/os2/process_linux.odin @@ -384,14 +384,6 @@ _Sys_Process_Attributes :: struct {} @(private="package") _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { - has_executable_permissions :: proc(fd: linux.Fd) -> bool { - backing: [48]u8 - b := strings.builder_from_bytes(backing[:]) - strings.write_string(&b, "/proc/self/fd/") - strings.write_int(&b, int(fd)) - return linux.access(strings.to_cstring(&b), linux.X_OK) == .NONE - } - TEMP_ALLOCATOR_GUARD() if len(desc.command) == 0 { @@ -411,7 +403,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { } // search PATH if just a plain name is provided - exe_fd: linux.Fd + exe_path: cstring executable_name := desc.command[0] if strings.index_byte(executable_name, '/') < 0 { path_env := get_env("PATH", temp_allocator()) @@ -426,16 +418,11 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { strings.write_byte(&exe_builder, '/') strings.write_string(&exe_builder, executable_name) - exe_path := strings.to_cstring(&exe_builder) - if exe_fd, errno = linux.openat(dir_fd, exe_path, {.PATH, .CLOEXEC}); errno != .NONE { - continue + exe_path = strings.to_cstring(&exe_builder) + if linux.access(exe_path, linux.X_OK) == .NONE { + found = true + break } - if !has_executable_permissions(exe_fd) { - linux.close(exe_fd) - continue - } - found = true - break } if !found { // check in cwd to match windows behavior @@ -443,29 +430,18 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { strings.write_string(&exe_builder, "./") strings.write_string(&exe_builder, executable_name) - exe_path := strings.to_cstring(&exe_builder) - if exe_fd, errno = linux.openat(dir_fd, exe_path, {.PATH, .CLOEXEC}); errno != .NONE { + exe_path = strings.to_cstring(&exe_builder) + if linux.access(exe_path, linux.X_OK) != .NONE { return process, .Not_Exist } - if !has_executable_permissions(exe_fd) { - linux.close(exe_fd) - return process, .Permission_Denied - } } } else { - exe_path := temp_cstring(executable_name) or_return - if exe_fd, errno = linux.openat(dir_fd, exe_path, {.PATH, .CLOEXEC}); errno != .NONE { - return process, _get_platform_error(errno) - } - if !has_executable_permissions(exe_fd) { - linux.close(exe_fd) - return process, .Permission_Denied + exe_path = temp_cstring(executable_name) or_return + if linux.access(exe_path, linux.X_OK) != .NONE { + return process, .Not_Exist } } - // At this point, we have an executable. - defer linux.close(exe_fd) - // args and environment need to be a list of cstrings // that are terminated by a nil pointer. cargs := make([]cstring, len(desc.command) + 1, temp_allocator()) or_return @@ -492,7 +468,6 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { } defer linux.close(child_pipe_fds[READ]) - // TODO: This is the traditional textbook implementation with fork. // A more efficient implementation with vfork: // @@ -573,7 +548,7 @@ _process_start :: proc(desc: Process_Desc) -> (process: Process, err: Error) { write_errno_to_parent_and_abort(child_pipe_fds[WRITE], errno) } - errno = linux.execveat(exe_fd, "", &cargs[0], env, {.AT_EMPTY_PATH}) + errno = linux.execveat(dir_fd, exe_path, &cargs[0], env) assert(errno != nil) write_errno_to_parent_and_abort(child_pipe_fds[WRITE], errno) } diff --git a/core/sys/linux/bits.odin b/core/sys/linux/bits.odin index 9ce2e206e..c304397de 100644 --- a/core/sys/linux/bits.odin +++ b/core/sys/linux/bits.odin @@ -152,43 +152,65 @@ Errno :: enum i32 { RDONLY flag is not present, because it has the value of 0, i.e. it is the default, unless WRONLY or RDWR is specified. */ -Open_Flags_Bits :: enum { - WRONLY = 0, - RDWR = 1, - CREAT = 6, - EXCL = 7, - NOCTTY = 8, - TRUNC = 9, - APPEND = 10, - NONBLOCK = 11, - DSYNC = 12, - ASYNC = 13, - DIRECT = 14, - LARGEFILE = 15, - DIRECTORY = 16, - NOFOLLOW = 17, - NOATIME = 18, - CLOEXEC = 19, - PATH = 21, +when ODIN_ARCH != .arm64 && ODIN_ARCH != .arm32 { + Open_Flags_Bits :: enum { + WRONLY = 0, + RDWR = 1, + CREAT = 6, + EXCL = 7, + NOCTTY = 8, + TRUNC = 9, + APPEND = 10, + NONBLOCK = 11, + DSYNC = 12, + ASYNC = 13, + DIRECT = 14, + LARGEFILE = 15, + DIRECTORY = 16, + NOFOLLOW = 17, + NOATIME = 18, + CLOEXEC = 19, + PATH = 21, + } + // https://github.com/torvalds/linux/blob/7367539ad4b0f8f9b396baf02110962333719a48/include/uapi/asm-generic/fcntl.h#L19 + #assert(1 << uint(Open_Flags_Bits.WRONLY) == 0o0000000_1) + #assert(1 << uint(Open_Flags_Bits.RDWR) == 0o0000000_2) + #assert(1 << uint(Open_Flags_Bits.CREAT) == 0o00000_100) + #assert(1 << uint(Open_Flags_Bits.EXCL) == 0o00000_200) + #assert(1 << uint(Open_Flags_Bits.NOCTTY) == 0o00000_400) + #assert(1 << uint(Open_Flags_Bits.TRUNC) == 0o0000_1000) + #assert(1 << uint(Open_Flags_Bits.APPEND) == 0o0000_2000) + #assert(1 << uint(Open_Flags_Bits.NONBLOCK) == 0o0000_4000) + #assert(1 << uint(Open_Flags_Bits.DSYNC) == 0o000_10000) + #assert(1 << uint(Open_Flags_Bits.ASYNC) == 0o000_20000) + #assert(1 << uint(Open_Flags_Bits.DIRECT) == 0o000_40000) + #assert(1 << uint(Open_Flags_Bits.LARGEFILE) == 0o00_100000) + #assert(1 << uint(Open_Flags_Bits.DIRECTORY) == 0o00_200000) + #assert(1 << uint(Open_Flags_Bits.NOFOLLOW) == 0o00_400000) + #assert(1 << uint(Open_Flags_Bits.NOATIME) == 0o0_1000000) + #assert(1 << uint(Open_Flags_Bits.CLOEXEC) == 0o0_2000000) + #assert(1 << uint(Open_Flags_Bits.PATH) == 0o_10000000) +} else { + Open_Flags_Bits :: enum { + WRONLY = 0, + RDWR = 1, + CREAT = 6, + EXCL = 7, + NOCTTY = 8, + TRUNC = 9, + APPEND = 10, + NONBLOCK = 11, + DSYNC = 12, + ASYNC = 13, + DIRECTORY = 14, + NOFOLLOW = 15, + DIRECT = 16, + LARGEFILE = 17, + NOATIME = 18, + CLOEXEC = 19, + PATH = 21, + } } -// https://github.com/torvalds/linux/blob/7367539ad4b0f8f9b396baf02110962333719a48/include/uapi/asm-generic/fcntl.h#L19 -#assert(1 << uint(Open_Flags_Bits.WRONLY) == 0o0000000_1) -#assert(1 << uint(Open_Flags_Bits.RDWR) == 0o0000000_2) -#assert(1 << uint(Open_Flags_Bits.CREAT) == 0o00000_100) -#assert(1 << uint(Open_Flags_Bits.EXCL) == 0o00000_200) -#assert(1 << uint(Open_Flags_Bits.NOCTTY) == 0o00000_400) -#assert(1 << uint(Open_Flags_Bits.TRUNC) == 0o0000_1000) -#assert(1 << uint(Open_Flags_Bits.APPEND) == 0o0000_2000) -#assert(1 << uint(Open_Flags_Bits.NONBLOCK) == 0o0000_4000) -#assert(1 << uint(Open_Flags_Bits.DSYNC) == 0o000_10000) -#assert(1 << uint(Open_Flags_Bits.ASYNC) == 0o000_20000) -#assert(1 << uint(Open_Flags_Bits.DIRECT) == 0o000_40000) -#assert(1 << uint(Open_Flags_Bits.LARGEFILE) == 0o00_100000) -#assert(1 << uint(Open_Flags_Bits.DIRECTORY) == 0o00_200000) -#assert(1 << uint(Open_Flags_Bits.NOFOLLOW) == 0o00_400000) -#assert(1 << uint(Open_Flags_Bits.NOATIME) == 0o0_1000000) -#assert(1 << uint(Open_Flags_Bits.CLOEXEC) == 0o0_2000000) -#assert(1 << uint(Open_Flags_Bits.PATH) == 0o_10000000) /* Bits for FD_Flags bitset From 5f46b5ca50b48395edf08583278aa4bcd2c54ed9 Mon Sep 17 00:00:00 2001 From: Barinzaya Date: Thu, 19 Dec 2024 17:52:09 -0500 Subject: [PATCH 03/91] Fixed zeroing in resize_dynamic_array. When a dynamic array has unused capacity and is resized to a size greater than its capacity, the unused part of its capacity wasn't being zeroed. --- base/runtime/core_builtin.odin | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index d28dadd02..8184c0e74 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -826,10 +826,12 @@ _resize_dynamic_array :: #force_inline proc(a: ^Raw_Dynamic_Array, size_of_elem, return nil } + if should_zero && a.len < length { + num_reused := min(a.cap, length) - a.len + intrinsics.mem_zero(([^]byte)(a.data)[a.len*size_of_elem:], num_reused*size_of_elem) + } + if length <= a.cap { - if should_zero && a.len < length { - intrinsics.mem_zero(([^]byte)(a.data)[a.len*size_of_elem:], (length-a.len)*size_of_elem) - } a.len = max(length, 0) return nil } From 14216ebf5169581a738e9c235ef8119a95271b12 Mon Sep 17 00:00:00 2001 From: Barinzaya Date: Thu, 19 Dec 2024 20:07:04 -0500 Subject: [PATCH 04/91] Added some implicit broadcasting for #simd arrays. This covers broadcasting from untyped numbers when assigning, as well as when performing binary operations. SIMD intrinsics have not been adjusted --- src/check_expr.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index cc9483187..81e33a8e8 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -3672,6 +3672,13 @@ gb_internal bool check_binary_array_expr(CheckerContext *c, Token op, Operand *x } } } + if (is_type_simd_vector(x->type) && !is_type_simd_vector(y->type)) { + if (check_is_assignable_to(c, y, x->type)) { + if (check_binary_op(c, x, op)) { + return true; + } + } + } return false; } @@ -4556,6 +4563,19 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar break; } + case Type_SimdVector: { + Type *elem = base_array_type(t); + if (check_is_assignable_to(c, operand, elem)) { + operand->mode = Addressing_Value; + } else { + operand->mode = Addressing_Invalid; + convert_untyped_error(c, operand, target_type); + return; + } + + break; + } + case Type_Matrix: { Type *elem = base_array_type(t); if (check_is_assignable_to(c, operand, elem)) { From c06f79bb360bc27353f5139a6c763828b3a16ba2 Mon Sep 17 00:00:00 2001 From: chris-montero Date: Sat, 21 Dec 2024 15:53:55 +0200 Subject: [PATCH 05/91] fixed memory leak in core/prof/spall/doc.odin example code --- core/prof/spall/doc.odin | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/prof/spall/doc.odin b/core/prof/spall/doc.odin index c81bad05f..b007ad4cb 100644 --- a/core/prof/spall/doc.odin +++ b/core/prof/spall/doc.odin @@ -18,6 +18,8 @@ Example: defer spall.context_destroy(&spall_ctx) buffer_backing := make([]u8, spall.BUFFER_DEFAULT_SIZE) + defer delete(buffer_backing) + spall_buffer = spall.buffer_create(buffer_backing, u32(sync.current_thread_id())) defer spall.buffer_destroy(&spall_ctx, &spall_buffer) From f2f952b344b076c17281e0e77195a27d94f58919 Mon Sep 17 00:00:00 2001 From: Roland Kovacs Date: Sun, 22 Dec 2024 01:52:57 +0100 Subject: [PATCH 06/91] Fix crash when proc return type is undeclared parapoly variable Disallow the declaration of new parapoly variables in return types, when the procedure's parapoly scope is itself. This happens if e.g.: `foo :: proc() -> $T`. Closes #3949, #4294, #4563 --- src/check_type.cpp | 9 ++++++++- src/checker.hpp | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index 13a6125ca..44108ccbe 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2440,8 +2440,12 @@ gb_internal bool check_procedure_type(CheckerContext *ctx, Type *type, Ast *proc bool success = true; isize specialization_count = 0; Type *params = check_get_params(c, c->scope, pt->params, &variadic, &variadic_index, &success, &specialization_count, operands); - Type *results = check_get_results(c, c->scope, pt->results); + bool no_poly_return = c->disallow_polymorphic_return_types; + c->disallow_polymorphic_return_types = c->scope == c->polymorphic_scope; + // NOTE(zen3ger): if the parapoly scope is the current proc's scope, then the return types shall not declare new poly vars + Type *results = check_get_results(c, c->scope, pt->results); + c->disallow_polymorphic_return_types = no_poly_return; isize param_count = 0; isize result_count = 0; @@ -3383,6 +3387,9 @@ gb_internal bool check_type_internal(CheckerContext *ctx, Ast *e, Type **type, T } Type *t = alloc_type_generic(ctx->scope, 0, token.string, specific); if (ctx->allow_polymorphic_types) { + if (ctx->disallow_polymorphic_return_types) { + error(ident, "Undeclared polymorphic parameter '%.*s' in return type", LIT(token.string)); + } Scope *ps = ctx->polymorphic_scope; Scope *s = ctx->scope; Scope *entity_scope = s; diff --git a/src/checker.hpp b/src/checker.hpp index 438156f18..a4cb47521 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -521,6 +521,7 @@ struct CheckerContext { bool in_enum_type; bool collect_delayed_decls; bool allow_polymorphic_types; + bool disallow_polymorphic_return_types; // NOTE(zen3ger): no poly type decl in return types bool no_polymorphic_errors; bool hide_polymorphic_errors; bool in_polymorphic_specialization; From 9f77f7c4175a6202b01a984a692c0288ac6077ec Mon Sep 17 00:00:00 2001 From: Roland Kovacs Date: Sun, 22 Dec 2024 12:38:37 +0100 Subject: [PATCH 07/91] Fix crash on assignment of parapoly proc to variable --- src/check_decl.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 60eb030ff..d541426d3 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -94,12 +94,14 @@ gb_internal Type *check_init_variable(CheckerContext *ctx, Entity *e, Operand *o return nullptr; } if (e2->state.load() != EntityState_Resolved) { - gbString str = type_to_string(t); - defer (gb_string_free(str)); - error(e->token, "Invalid use of a polymorphic type '%s' in %.*s", str, LIT(context_name)); - e->type = t_invalid; + e->type = t; return nullptr; } + gbString str = type_to_string(t); + defer (gb_string_free(str)); + error(operand->expr, "Invalid use of a non-specialized polymorphic type '%s' in %.*s", str, LIT(context_name)); + e->type = t_invalid; + return nullptr; } else if (is_type_empty_union(t)) { gbString str = type_to_string(t); defer (gb_string_free(str)); From f07a6f463c16c3dc5cdadd6ce4e77a855ac6816d Mon Sep 17 00:00:00 2001 From: blob1807 <12388588+blob1807@users.noreply.github.com> Date: Sun, 22 Dec 2024 23:10:42 +1000 Subject: [PATCH 08/91] Fix io.write_escaped_rune not writing full value --- core/io/util.odin | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/io/util.odin b/core/io/util.odin index 296be7bc0..fdbbd5b9f 100644 --- a/core/io/util.odin +++ b/core/io/util.odin @@ -132,9 +132,13 @@ write_encoded_rune :: proc(w: Writer, r: rune, write_quote := true, n_written: ^ buf: [2]byte s := strconv.append_bits(buf[:], u64(r), 16, true, 64, strconv.digits, nil) switch len(s) { - case 0: write_string(w, "00", &n) or_return - case 1: write_byte(w, '0', &n) or_return - case 2: write_string(w, s, &n) or_return + case 0: + write_string(w, "00", &n) or_return + case 1: + write_byte(w, '0', &n) or_return + fallthrough + case 2: + write_string(w, s, &n) or_return } } else { write_rune(w, r, &n) or_return From fdf510b7b35119739d6e41170abd46204356d58b Mon Sep 17 00:00:00 2001 From: misomosi Date: Sat, 21 Dec 2024 19:59:31 -0500 Subject: [PATCH 09/91] Pack struct when needed, use field_align metadata --- src/llvm_backend.hpp | 2 ++ src/llvm_backend_general.cpp | 18 +++++++++++++++++- src/llvm_backend_utility.cpp | 19 ++++++++++++++++--- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index e84ffd1cd..3bbd97e4b 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -742,3 +742,5 @@ gb_global char const *llvm_linkage_strings[] = { }; #define ODIN_METADATA_IS_PACKED str_lit("odin-is-packed") +#define ODIN_METADATA_MIN_ALIGN str_lit("odin-min-align") +#define ODIN_METADATA_MAX_ALIGN str_lit("odin-max-align") diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index bab330da7..762256258 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -734,6 +734,17 @@ gb_internal LLVMValueRef OdinLLVMBuildLoad(lbProcedure *p, LLVMTypeRef type, LLV if (is_packed != 0) { LLVMSetAlignment(result, 1); } + u64 align = LLVMGetAlignment(result); + u64 align_min = lb_get_metadata_custom_u64(p->module, value, ODIN_METADATA_MIN_ALIGN); + u64 align_max = lb_get_metadata_custom_u64(p->module, value, ODIN_METADATA_MAX_ALIGN); + if (align_min != 0 && align < align_min) { + align = align_min; + } + if (align_max != 0 && align > align_max) { + align = align_max; + } + GB_ASSERT(align <= UINT_MAX); + LLVMSetAlignment(result, (unsigned int)align); } return result; @@ -2121,6 +2132,7 @@ gb_internal LLVMTypeRef lb_type_internal(lbModule *m, Type *type) { } i64 prev_offset = 0; + bool requires_packing = type->Struct.is_packed; for (i32 field_index : struct_fields_index_by_increasing_offset(temporary_allocator(), type)) { Entity *field = type->Struct.fields[field_index]; i64 offset = type->Struct.offsets[field_index]; @@ -2141,6 +2153,10 @@ gb_internal LLVMTypeRef lb_type_internal(lbModule *m, Type *type) { field_type = t_rawptr; } + // max_field_align might misalign items in a way that requires packing + // so check the alignment of all fields to see if packing is required. + requires_packing = requires_packing || ((offset % type_align_of(field_type)) != 0); + array_add(&fields, lb_type(m, field_type)); prev_offset = offset + type_size_of(field->type); @@ -2155,7 +2171,7 @@ gb_internal LLVMTypeRef lb_type_internal(lbModule *m, Type *type) { GB_ASSERT(fields[i] != nullptr); } - LLVMTypeRef struct_type = LLVMStructTypeInContext(ctx, fields.data, cast(unsigned)fields.count, type->Struct.is_packed); + LLVMTypeRef struct_type = LLVMStructTypeInContext(ctx, fields.data, cast(unsigned)fields.count, requires_packing); map_set(&m->struct_field_remapping, cast(void *)struct_type, field_remapping); map_set(&m->struct_field_remapping, cast(void *)type, field_remapping); #if 0 diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index a2a0ba4cc..b86d0773b 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -1200,9 +1200,22 @@ gb_internal lbValue lb_emit_struct_ep(lbProcedure *p, lbValue s, i32 index) { lbValue gep = lb_emit_struct_ep_internal(p, s, index, result_type); Type *bt = base_type(t); - if (bt->kind == Type_Struct && bt->Struct.is_packed) { - lb_set_metadata_custom_u64(p->module, gep.value, ODIN_METADATA_IS_PACKED, 1); - GB_ASSERT(lb_get_metadata_custom_u64(p->module, gep.value, ODIN_METADATA_IS_PACKED) == 1); + if (bt->kind == Type_Struct) { + if (bt->Struct.is_packed) { + lb_set_metadata_custom_u64(p->module, gep.value, ODIN_METADATA_IS_PACKED, 1); + GB_ASSERT(lb_get_metadata_custom_u64(p->module, gep.value, ODIN_METADATA_IS_PACKED) == 1); + } + u64 align_max = bt->Struct.custom_max_field_align; + u64 align_min = bt->Struct.custom_min_field_align; + GB_ASSERT(align_min == 0 || align_max == 0 || align_min <= align_max); + if (align_max) { + lb_set_metadata_custom_u64(p->module, gep.value, ODIN_METADATA_MAX_ALIGN, align_max); + GB_ASSERT(lb_get_metadata_custom_u64(p->module, gep.value, ODIN_METADATA_MAX_ALIGN) == align_max); + } + if (align_min) { + lb_set_metadata_custom_u64(p->module, gep.value, ODIN_METADATA_MIN_ALIGN, align_min); + GB_ASSERT(lb_get_metadata_custom_u64(p->module, gep.value, ODIN_METADATA_MIN_ALIGN) == align_min); + } } return gep; From 0a2200fa12c2255d03f366fe301228a147ed79e5 Mon Sep 17 00:00:00 2001 From: Joao Fukuda Date: Sun, 22 Dec 2024 15:53:54 -0300 Subject: [PATCH 10/91] Fix issue #4612 --- core/sys/linux/types.odin | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/sys/linux/types.odin b/core/sys/linux/types.odin index 42d5cc988..dc3e4018d 100644 --- a/core/sys/linux/types.odin +++ b/core/sys/linux/types.odin @@ -684,6 +684,15 @@ Address_Family :: distinct Protocol_Family */ Socket_Msg :: bit_set[Socket_Msg_Bits; i32] + +/* + Struct representing a generic socket address. +*/ +Sock_Addr :: struct #packed { + sa_family: Address_Family, + sa_data: [14]u8, +} + /* Struct representing IPv4 socket address. */ @@ -691,6 +700,7 @@ Sock_Addr_In :: struct #packed { sin_family: Address_Family, sin_port: u16be, sin_addr: [4]u8, + sin_zero: [size_of(Sock_Addr) - size_of(Address_Family) - size_of(u16be) - size_of([4]u8)]u8, } /* @@ -720,6 +730,7 @@ Sock_Addr_Any :: struct #raw_union { family: Address_Family, port: u16be, }, + using generic: Sock_Addr, using ipv4: Sock_Addr_In, using ipv6: Sock_Addr_In6, using uds: Sock_Addr_Un, From 28e226381d3ebe20b70d13c0ea46a7183d59d65e Mon Sep 17 00:00:00 2001 From: Joao Fukuda Date: Sun, 22 Dec 2024 16:09:51 -0300 Subject: [PATCH 11/91] Remove extra white space Got in on 0a2200f without me noticing, mb. --- core/sys/linux/types.odin | 1 - 1 file changed, 1 deletion(-) diff --git a/core/sys/linux/types.odin b/core/sys/linux/types.odin index dc3e4018d..08a443bcc 100644 --- a/core/sys/linux/types.odin +++ b/core/sys/linux/types.odin @@ -684,7 +684,6 @@ Address_Family :: distinct Protocol_Family */ Socket_Msg :: bit_set[Socket_Msg_Bits; i32] - /* Struct representing a generic socket address. */ From 6ff81b6e4c1f9880d92ee5a2ccae241431afb6ee Mon Sep 17 00:00:00 2001 From: fleandro <3987005+flga@users.noreply.github.com> Date: Mon, 23 Dec 2024 01:03:51 +0000 Subject: [PATCH 12/91] make -export-dependencies:json emit valid json --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 4d85a9e72..0450c61ec 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2120,7 +2120,7 @@ gb_internal void export_dependencies(Checker *c) { for_array(i, files) { AstFile *file = files[i]; gb_fprintf(&f, "\t\t\"%.*s\"", LIT(file->fullpath)); - if (i+1 == files.count) { + if (i+1 < files.count) { gb_fprintf(&f, ","); } gb_fprintf(&f, "\n"); @@ -2133,7 +2133,7 @@ gb_internal void export_dependencies(Checker *c) { for_array(i, load_files) { LoadFileCache *cache = load_files[i]; gb_fprintf(&f, "\t\t\"%.*s\"", LIT(cache->path)); - if (i+1 == load_files.count) { + if (i+1 < load_files.count) { gb_fprintf(&f, ","); } gb_fprintf(&f, "\n"); From e82a0c8fc7db1f3eaa50e147c1cc0a3d2d482d9a Mon Sep 17 00:00:00 2001 From: "dmitriy.gorevoy" Date: Mon, 23 Dec 2024 09:25:18 +0100 Subject: [PATCH 13/91] Fixed crash in arena_free_all() for bootstrapped growing arenas. When trying to set arena.curr_block.used = 0 after mem.zero() caused a crash because if the arena is bootstrapped its memory will be zeroed out after mem.zero() thus making arena.cur_block point to zero. --- core/mem/virtual/arena.odin | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/mem/virtual/arena.odin b/core/mem/virtual/arena.odin index 79407d80d..4a0fff241 100644 --- a/core/mem/virtual/arena.odin +++ b/core/mem/virtual/arena.odin @@ -204,8 +204,9 @@ arena_free_all :: proc(arena: ^Arena, loc := #caller_location) { } // Zero the first block's memory if arena.curr_block != nil { - mem.zero(arena.curr_block.base, int(arena.curr_block.used)) + curr_block_used := int(arena.curr_block.used) arena.curr_block.used = 0 + mem.zero(arena.curr_block.base, curr_block_used) } arena.total_used = 0 case .Static, .Buffer: From ad99d20d292ab4708996c935315c36aef58796a8 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Mon, 23 Dec 2024 16:33:23 +0100 Subject: [PATCH 14/91] Remove outdated PNG save helpers --- core/image/png/helpers.odin | 130 +----------------------------------- 1 file changed, 1 insertion(+), 129 deletions(-) diff --git a/core/image/png/helpers.odin b/core/image/png/helpers.odin index f094b54a9..a9495ed4d 100644 --- a/core/image/png/helpers.odin +++ b/core/image/png/helpers.odin @@ -396,132 +396,4 @@ exif :: proc(c: image.PNG_Chunk) -> (res: Exif, ok: bool) { General helper functions */ -compute_buffer_size :: image.compute_buffer_size - -/* - PNG save helpers -*/ - -when false { - - make_chunk :: proc(c: any, t: Chunk_Type) -> (res: Chunk) { - - data: []u8 - if v, ok := c.([]u8); ok { - data = v - } else { - data = mem.any_to_bytes(c) - } - - res.header.length = u32be(len(data)) - res.header.type = t - res.data = data - - // CRC the type - crc := hash.crc32(mem.any_to_bytes(res.header.type)) - // Extend the CRC with the data - res.crc = u32be(hash.crc32(data, crc)) - return - } - - write_chunk :: proc(fd: os.Handle, chunk: Chunk) { - c := chunk - // Write length + type - os.write_ptr(fd, &c.header, 8) - // Write data - os.write_ptr(fd, mem.raw_data(c.data), int(c.header.length)) - // Write CRC32 - os.write_ptr(fd, &c.crc, 4) - } - - write_image_as_png :: proc(filename: string, image: Image) -> (err: Error) { - profiler.timed_proc() - using image - using os - flags: int = O_WRONLY|O_CREATE|O_TRUNC - - if len(image.pixels) == 0 || len(image.pixels) < image.width * image.height * int(image.channels) { - return .Invalid_Image_Dimensions - } - - mode: int = 0 - when ODIN_OS == .Linux || ODIN_OS == .Darwin { - // NOTE(justasd): 644 (owner read, write; group read; others read) - mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH - } - - fd, fderr := open(filename, flags, mode) - if fderr != nil { - return .Cannot_Open_File - } - defer close(fd) - - magic := Signature - - write_ptr(fd, &magic, 8) - - ihdr := IHDR{ - width = u32be(width), - height = u32be(height), - bit_depth = depth, - compression_method = 0, - filter_method = 0, - interlace_method = .None, - } - - switch channels { - case 1: ihdr.color_type = Color_Type{} - case 2: ihdr.color_type = Color_Type{.Alpha} - case 3: ihdr.color_type = Color_Type{.Color} - case 4: ihdr.color_type = Color_Type{.Color, .Alpha} - case:// Unhandled - return .Unknown_Color_Type - } - h := make_chunk(ihdr, .IHDR) - write_chunk(fd, h) - - bytes_needed := width * height * int(channels) + height - filter_bytes := mem.make_dynamic_array_len_cap([dynamic]u8, bytes_needed, bytes_needed, context.allocator) - defer delete(filter_bytes) - - i := 0; j := 0 - // Add a filter byte 0 per pixel row - for y := 0; y < height; y += 1 { - filter_bytes[j] = 0; j += 1 - for x := 0; x < width; x += 1 { - for z := 0; z < channels; z += 1 { - filter_bytes[j+z] = image.pixels[i+z] - } - i += channels; j += channels - } - } - assert(j == bytes_needed) - - a: []u8 = filter_bytes[:] - - out_buf: ^[dynamic]u8 - defer free(out_buf) - - ctx := zlib.ZLIB_Context{ - in_buf = &a, - out_buf = out_buf, - } - err = zlib.write_zlib_stream_from_memory(&ctx) - - b: []u8 - if err == nil { - b = ctx.out_buf[:] - } else { - return err - } - - idat := make_chunk(b, .IDAT) - - write_chunk(fd, idat) - - iend := make_chunk([]u8{}, .IEND) - write_chunk(fd, iend) - - return nil - } -} +compute_buffer_size :: image.compute_buffer_size \ No newline at end of file From 8c761627c84847bae3ec5e77a1408c542d9460b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 24 Dec 2024 02:17:57 +0100 Subject: [PATCH 15/91] encoding/base32: Replace assertions with error returns Replace assertions with proper error handling in base32.decode() to allow programs to handle invalid input gracefully rather than crashing. The function now returns ([]byte, Error) instead of just []byte. --- core/encoding/base32/base32.odin | 40 +++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index f3320428d..688b27544 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -7,6 +7,15 @@ package encoding_base32 // Incase your specific version does not use padding, you may // truncate it from the encoded output. +// Error represents errors that can occur during base32 decoding operations. +// See RFC 4648 sections 3.2, 4 and 6. +Error :: enum { + None, + Invalid_Character, // Input contains characters outside of base32 alphabet (A-Z, 2-7) + Invalid_Length, // Input length is not valid for base32 (must be a multiple of 8 with proper padding) + Malformed_Input, // Input has improper structure (wrong padding position or incomplete groups) +} + ENC_TABLE := [32]byte { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', @@ -91,9 +100,9 @@ _encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.al } } -decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocator) -> []byte #no_bounds_check{ +decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocator) -> ([]byte, Error) #no_bounds_check { if len(data) == 0 { - return nil + return nil, .None } outi := 0 @@ -113,16 +122,29 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato input := data[0] data = data[1:] if input == byte(PADDING) && j >= 2 && len(data) < 8 { - assert(!(len(data) + j < 8 - 1), "Corrupted input") - for k := 0; k < 8-1-j; k +=1 { - assert(len(data) < k || data[k] == byte(PADDING), "Corrupted input") + // assert(!(len(data) + j < 8 - 1), "Corrupted input") + if len(data) + j < 8 - 1 { + return nil, .Malformed_Input + } + // assert(len(data) < k || data[k] == byte(PADDING), "Corrupted input") + for k := 0; k < 8-1-j; k += 1 { + if len(data) < k || data[k] != byte(PADDING) { + return nil, .Malformed_Input + } } dlen, end = j, true - assert(dlen != 1 && dlen != 3 && dlen != 6, "Corrupted input") + // assert(dlen != 1 && dlen != 3 && dlen != 6, "Corrupted input") + if dlen == 1 || dlen == 3 || dlen == 6 { + return nil, .Invalid_Length + } break } - dbuf[j] = DEC_TABLE[input] - assert(dbuf[j] != 0xff, "Corrupted input") + decoded := DEC_TBL[input] + // assert(dbuf[j] != 0xff, "Corrupted input") + if decoded == 0 && input != byte(ENC_TABLE[0]) { + return nil, .Invalid_Character + } + dbuf[j] = decoded j += 1 } @@ -144,5 +166,5 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato } outi += 5 } - return out + return out, .None } From b9338777e34006b40b9315e795232e0608caa499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 24 Dec 2024 02:20:32 +0100 Subject: [PATCH 16/91] encoding/base32: Fix buffer allocation and bounds checking Fix buffer allocation size calculation and add proper bounds checking to ensure output buffer has sufficient space. This fixes crashes that could occur with inputs like "AA" and other edge cases where the output buffer was too small. Remove #no_bounds_check as proper bounds checking is necessary for safe error handling. The small performance trade-off is worth the improved robustness. --- core/encoding/base32/base32.odin | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 688b27544..8e3499dce 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -100,15 +100,18 @@ _encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.al } } -decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocator) -> ([]byte, Error) #no_bounds_check { +decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocator) -> ([]byte, Error) { if len(data) == 0 { return nil, .None } + // Calculate maximum possible output size and allocate buffer + out_len := (len(data) * 5 + 7) / 8 // Ceiling division to ensure enough space + out := make([]byte, out_len, allocator) + outi := 0 data := data - out := make([]byte, len(data) / 8 * 5, allocator) end := false for len(data) > 0 && !end { dbuf : [8]byte @@ -122,25 +125,22 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato input := data[0] data = data[1:] if input == byte(PADDING) && j >= 2 && len(data) < 8 { - // assert(!(len(data) + j < 8 - 1), "Corrupted input") if len(data) + j < 8 - 1 { return nil, .Malformed_Input } - // assert(len(data) < k || data[k] == byte(PADDING), "Corrupted input") for k := 0; k < 8-1-j; k += 1 { if len(data) < k || data[k] != byte(PADDING) { return nil, .Malformed_Input } } dlen, end = j, true - // assert(dlen != 1 && dlen != 3 && dlen != 6, "Corrupted input") if dlen == 1 || dlen == 3 || dlen == 6 { return nil, .Invalid_Length } break } + decoded := DEC_TBL[input] - // assert(dbuf[j] != 0xff, "Corrupted input") if decoded == 0 && input != byte(ENC_TABLE[0]) { return nil, .Invalid_Character } @@ -148,23 +148,41 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato j += 1 } + // Ensure we have enough space in output buffer + needed := 5 // Each full 8-char block produces 5 bytes + if outi + needed > len(out) { + return nil, .Invalid_Length + } + + // Process complete input blocks switch dlen { case 8: + if len(dbuf) < 8 { return nil, .Invalid_Length } out[outi + 4] = dbuf[6] << 5 | dbuf[7] fallthrough case 7: + if len(dbuf) < 7 { return nil, .Invalid_Length } out[outi + 3] = dbuf[4] << 7 | dbuf[5] << 2 | dbuf[6] >> 3 fallthrough case 5: + if len(dbuf) < 5 { return nil, .Invalid_Length } out[outi + 2] = dbuf[3] << 4 | dbuf[4] >> 1 fallthrough case 4: + if len(dbuf) < 4 { return nil, .Invalid_Length } out[outi + 1] = dbuf[1] << 6 | dbuf[2] << 1 | dbuf[3] >> 4 fallthrough case 2: + if len(dbuf) < 2 { return nil, .Invalid_Length } out[outi + 0] = dbuf[0] << 3 | dbuf[1] >> 2 } outi += 5 } + + // Trim output buffer to actual size + if outi < len(out) { + out = out[:outi] + } + return out, .None } From 7672ac945a7b8e35b600a9d2a2421caf16a5a364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 24 Dec 2024 15:28:34 +0100 Subject: [PATCH 17/91] encoding/base32: Add RFC 4648 test suite Add test suite based on RFC 4648 test vectors and validation rules: - Add section 10 test vectors for valid encoding/decoding - Add test cases for invalid character handling (section 3.2) - Add test cases for padding validation (section 4) - Add test cases for length requirements (section 6) The test vectors verify that: - Empty string encodes/decodes correctly - Standard cases like "foo" -> "MZXW6===" work - Invalid characters are rejected - Missing or malformed padding is detected - Invalid lengths are caught --- core/encoding/base32/base32.odin | 104 +++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 8e3499dce..54737c9ce 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -1,5 +1,8 @@ package encoding_base32 +import "core:testing" +import "core:bytes" + // @note(zh): Encoding utility for Base32 // A secondary param can be used to supply a custom alphabet to // @link(encode) and a matching decoding table to @link(decode). @@ -186,3 +189,104 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato return out, .None } + +@(test) +test_base32_decode_valid :: proc(t: ^testing.T) { + // RFC 4648 Section 10 - Test vectors + cases := [?]struct { + input, expected: string, + }{ + {"", ""}, + {"MY======", "f"}, + {"MZXQ====", "fo"}, + {"MZXW6===", "foo"}, + {"MZXW6YQ=", "foob"}, + {"MZXW6YTB", "fooba"}, + {"MZXW6YTBOI======", "foobar"}, + } + + + for c in cases { + output, err := decode(c.input) + testing.expect_value(t, err, Error.None) + expected := transmute([]u8)c.expected + + if output != nil { + testing.expect(t, bytes.equal(output, expected)) + } else { + testing.expect(t, len(c.expected) == 0) + } + } +} + +@(test) +test_base32_encode :: proc(t: ^testing.T) { + // RFC 4648 Section 10 - Test vectors + cases := [?]struct { + input, expected: string, + }{ + {"", ""}, + {"f", "MY======"}, + {"fo", "MZXQ===="}, + {"foo", "MZXW6==="}, + {"foob", "MZXW6YQ="}, + {"fooba", "MZXW6YTB"}, + {"foobar", "MZXW6YTBOI======"}, + } + + for c in cases { + output := encode(transmute([]byte)c.input) + testing.expect(t, output == c.expected) + } +} + +@(test) +test_base32_decode_invalid :: proc(t: ^testing.T) { + // Section 3.2 - Alphabet check + { + // Characters outside alphabet + input := "MZ1W6YTB" // '1' not in alphabet (A-Z, 2-7) + _, err := decode(input) + testing.expect_value(t, err, Error.Invalid_Character) + } + { + // Lowercase not allowed + input := "mzxq====" + _, err := decode(input) + testing.expect_value(t, err, Error.Invalid_Character) + } + + // Section 4 - Padding requirements + { + // Padding must only be at end + input := "MZ=Q====" + _, err := decode(input) + testing.expect_value(t, err, Error.Malformed_Input) + } + { + // Missing padding + input := "MZXQ" // Should be MZXQ==== + _, err := decode(input) + testing.expect_value(t, err, Error.Malformed_Input) + } + { + // Incorrect padding length + input := "MZXQ=" // Needs 4 padding chars + _, err := decode(input) + testing.expect_value(t, err, Error.Malformed_Input) + } + { + // Too much padding + input := "MY=========" // Extra padding chars + _, err := decode(input) + testing.expect_value(t, err, Error.Malformed_Input) + } + + // Section 6 - Block size requirements + { + // Single character (invalid block) + input := "M" + _, err := decode(input) + testing.expect_value(t, err, Error.Invalid_Length) + } +} From f1f2ed31940d02728ce55e591743834968dd5994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 24 Dec 2024 15:52:33 +0100 Subject: [PATCH 18/91] encoding/base32: Fix decode implementation per RFC 4648 Rework base32.decode() to properly handle all cases per RFC 4648: - Fix error detection order: - Check minimum length first (Invalid_Length) - Check character validity (Invalid_Character) - Check padding and structure (Malformed_Input) - Fix padding validation: - Add required padding length checks (2=6, 4=4, 5=3, 7=1 chars) - Ensure padding only appears at end - Fix handling of unpadded inputs - Fix buffer handling: - Proper output buffer size calculation - Add bounds checking for buffer access - Add proper buffer validation For example: - "M" correctly returns Invalid_Length (too short) - "mzxq====" correctly returns Invalid_Character (lowercase) - "MZXQ=" correctly returns Malformed_Input (wrong padding) - Unpadded input lengths must be multiples of 8 These changes make the decode function fully compliant with RFC 4648 requirements while providing proper error handling. --- core/encoding/base32/base32.odin | 173 +++++++++++++++++-------------- 1 file changed, 97 insertions(+), 76 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 54737c9ce..d940c856b 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -103,88 +103,109 @@ _encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.al } } -decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocator) -> ([]byte, Error) { +decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocator) -> (out: []byte, err: Error) { if len(data) == 0 { return nil, .None } - // Calculate maximum possible output size and allocate buffer - out_len := (len(data) * 5 + 7) / 8 // Ceiling division to ensure enough space - out := make([]byte, out_len, allocator) - - outi := 0 - data := data - - end := false - for len(data) > 0 && !end { - dbuf : [8]byte - dlen := 8 - - for j := 0; j < 8; { - if len(data) == 0 { - dlen, end = j, true - break - } - input := data[0] - data = data[1:] - if input == byte(PADDING) && j >= 2 && len(data) < 8 { - if len(data) + j < 8 - 1 { - return nil, .Malformed_Input - } - for k := 0; k < 8-1-j; k += 1 { - if len(data) < k || data[k] != byte(PADDING) { - return nil, .Malformed_Input - } - } - dlen, end = j, true - if dlen == 1 || dlen == 3 || dlen == 6 { - return nil, .Invalid_Length - } - break - } - - decoded := DEC_TBL[input] - if decoded == 0 && input != byte(ENC_TABLE[0]) { - return nil, .Invalid_Character - } - dbuf[j] = decoded - j += 1 - } - - // Ensure we have enough space in output buffer - needed := 5 // Each full 8-char block produces 5 bytes - if outi + needed > len(out) { - return nil, .Invalid_Length - } - - // Process complete input blocks - switch dlen { - case 8: - if len(dbuf) < 8 { return nil, .Invalid_Length } - out[outi + 4] = dbuf[6] << 5 | dbuf[7] - fallthrough - case 7: - if len(dbuf) < 7 { return nil, .Invalid_Length } - out[outi + 3] = dbuf[4] << 7 | dbuf[5] << 2 | dbuf[6] >> 3 - fallthrough - case 5: - if len(dbuf) < 5 { return nil, .Invalid_Length } - out[outi + 2] = dbuf[3] << 4 | dbuf[4] >> 1 - fallthrough - case 4: - if len(dbuf) < 4 { return nil, .Invalid_Length } - out[outi + 1] = dbuf[1] << 6 | dbuf[2] << 1 | dbuf[3] >> 4 - fallthrough - case 2: - if len(dbuf) < 2 { return nil, .Invalid_Length } - out[outi + 0] = dbuf[0] << 3 | dbuf[1] >> 2 - } - outi += 5 + // Check minimum length requirement first + if len(data) < 2 { + return nil, .Invalid_Length } - // Trim output buffer to actual size - if outi < len(out) { - out = out[:outi] + // Validate characters - only A-Z and 2-7 allowed before padding + for i := 0; i < len(data); i += 1 { + c := data[i] + if c == byte(PADDING) { + break + } + if !((c >= 'A' && c <= 'Z') || (c >= '2' && c <= '7')) { + return nil, .Invalid_Character + } + } + + // Validate padding and length + data_len := len(data) + padding_count := 0 + for i := data_len - 1; i >= 0; i -= 1 { + if data[i] != byte(PADDING) { + break + } + padding_count += 1 + } + + // Check for proper padding and length combinations + if padding_count > 0 { + // Verify no padding in the middle + for i := 0; i < data_len - padding_count; i += 1 { + if data[i] == byte(PADDING) { + return nil, .Malformed_Input + } + } + + // Required padding for each content length mod 8 + content_len := data_len - padding_count + required_padding := map[int]int{ + 2 = 6, // 2 chars need 6 padding chars + 4 = 4, // 4 chars need 4 padding chars + 5 = 3, // 5 chars need 3 padding chars + 7 = 1, // 7 chars need 1 padding char + } + + mod8 := content_len % 8 + if req_pad, ok := required_padding[mod8]; ok { + if padding_count != req_pad { + return nil, .Malformed_Input + } + } else if mod8 != 0 { + // If not in the map and not a multiple of 8, it's invalid + return nil, .Malformed_Input + } + } else { + // No padding - must be multiple of 8 + if data_len % 8 != 0 { + return nil, .Malformed_Input + } + } + + // Calculate decoded length: 5 bytes for every 8 input chars + input_chars := data_len - padding_count + out_len := input_chars * 5 / 8 + out = make([]byte, out_len, allocator) + defer if err != .None { + delete(out) + } + + // Process input in 8-byte blocks + outi := 0 + for i := 0; i < input_chars; i += 8 { + buf: [8]byte + block_size := min(8, input_chars - i) + + // Decode block + for j := 0; j < block_size; j += 1 { + buf[j] = DEC_TBL[data[i + j]] + } + + // Convert to output bytes based on block size + bytes_to_write := block_size * 5 / 8 + switch block_size { + case 8: + out[outi + 4] = (buf[6] << 5) | buf[7] + fallthrough + case 7: + out[outi + 3] = (buf[4] << 7) | (buf[5] << 2) | (buf[6] >> 3) + fallthrough + case 5: + out[outi + 2] = (buf[3] << 4) | (buf[4] >> 1) + fallthrough + case 4: + out[outi + 1] = (buf[1] << 6) | (buf[2] << 1) | (buf[3] >> 4) + fallthrough + case 2: + out[outi] = (buf[0] << 3) | (buf[1] >> 2) + } + outi += bytes_to_write } return out, .None From 93238db202c6648d11d4a78a83b1a29751ac77a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 24 Dec 2024 16:00:00 +0100 Subject: [PATCH 19/91] encoding/base32: Use consistent allocator and add proper cleanup Fix memory handling throughout base32 package: - Make padding map package-level constant (to avoid repeated allocs) - Use passed allocator in encode's make() call - Add defer delete for allocated memory in encode - Add proper cleanup in test cases - Fix memory cleanup of output buffers The changes ensure consistent allocator usage and cleanup in both implementation and tests. --- core/encoding/base32/base32.odin | 65 +++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index d940c856b..72e20e427 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -45,11 +45,19 @@ DEC_TABLE := [?]u8 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } +REQUIRED_PADDING := map[int]int{ + 2 = 6, // 2 chars need 6 padding chars + 4 = 4, // 4 chars need 4 padding chars + 5 = 3, // 5 chars need 3 padding chars + 7 = 1, // 7 chars need 1 padding char +} + encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> string { out_length := (len(data) + 4) / 5 * 8 - out := make([]byte, out_length) + out := make([]byte, out_length, allocator) + defer delete(out) _encode(out, data) - return string(out) + return string(out[:]) } @private @@ -143,22 +151,13 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato } } - // Required padding for each content length mod 8 content_len := data_len - padding_count - required_padding := map[int]int{ - 2 = 6, // 2 chars need 6 padding chars - 4 = 4, // 4 chars need 4 padding chars - 5 = 3, // 5 chars need 3 padding chars - 7 = 1, // 7 chars need 1 padding char - } - mod8 := content_len % 8 - if req_pad, ok := required_padding[mod8]; ok { + if req_pad, ok := REQUIRED_PADDING[mod8]; ok { if padding_count != req_pad { return nil, .Malformed_Input } } else if mod8 != 0 { - // If not in the map and not a multiple of 8, it's invalid return nil, .Malformed_Input } } else { @@ -208,7 +207,7 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato outi += bytes_to_write } - return out, .None + return } @(test) @@ -226,12 +225,13 @@ test_base32_decode_valid :: proc(t: ^testing.T) { {"MZXW6YTBOI======", "foobar"}, } - for c in cases { output, err := decode(c.input) + if output != nil { + defer delete(output) + } testing.expect_value(t, err, Error.None) expected := transmute([]u8)c.expected - if output != nil { testing.expect(t, bytes.equal(output, expected)) } else { @@ -267,13 +267,19 @@ test_base32_decode_invalid :: proc(t: ^testing.T) { { // Characters outside alphabet input := "MZ1W6YTB" // '1' not in alphabet (A-Z, 2-7) - _, err := decode(input) + output, err := decode(input) + if output != nil { + defer delete(output) + } testing.expect_value(t, err, Error.Invalid_Character) } { // Lowercase not allowed input := "mzxq====" - _, err := decode(input) + output, err := decode(input) + if output != nil { + defer delete(output) + } testing.expect_value(t, err, Error.Invalid_Character) } @@ -281,25 +287,37 @@ test_base32_decode_invalid :: proc(t: ^testing.T) { { // Padding must only be at end input := "MZ=Q====" - _, err := decode(input) + output, err := decode(input) + if output != nil { + defer delete(output) + } testing.expect_value(t, err, Error.Malformed_Input) } { // Missing padding input := "MZXQ" // Should be MZXQ==== - _, err := decode(input) + output, err := decode(input) + if output != nil { + defer delete(output) + } testing.expect_value(t, err, Error.Malformed_Input) } { // Incorrect padding length input := "MZXQ=" // Needs 4 padding chars - _, err := decode(input) + output, err := decode(input) + if output != nil { + defer delete(output) + } testing.expect_value(t, err, Error.Malformed_Input) } { // Too much padding input := "MY=========" // Extra padding chars - _, err := decode(input) + output, err := decode(input) + if output != nil { + defer delete(output) + } testing.expect_value(t, err, Error.Malformed_Input) } @@ -307,7 +325,10 @@ test_base32_decode_invalid :: proc(t: ^testing.T) { { // Single character (invalid block) input := "M" - _, err := decode(input) + output, err := decode(input) + if output != nil { + defer delete(output) + } testing.expect_value(t, err, Error.Invalid_Length) } } From e75a49f095ed7ecd72b4caccf550545a980163ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 24 Dec 2024 16:07:01 +0100 Subject: [PATCH 20/91] encoding/base32: Set optimization mode for decode() --- core/encoding/base32/base32.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 72e20e427..53d31fb30 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -111,6 +111,7 @@ _encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.al } } +@(optimization_mode="favor_size") decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocator) -> (out: []byte, err: Error) { if len(data) == 0 { return nil, .None From 3a5440e4eddea3735b26689e576ba4e1102a6a3a Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Mon, 23 Dec 2024 14:15:59 +0900 Subject: [PATCH 21/91] base/runtime: Add `ensure` and `ensure_contextless` This provides an equivalent to `assert` and `assert_contextless` that are always evaluated, ignoring `ODIN_DISABLE_ASSERT`, which is useful for enforcing API contracts or "asserting" on conditionals with side-effects. --- base/runtime/core_builtin.odin | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index d28dadd02..f06dcb478 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -964,6 +964,24 @@ assert :: proc(condition: bool, message := #caller_expression(condition), loc := } } +// Evaluates the condition and aborts the program iff the condition is +// false. This routine ignores `ODIN_DISABLE_ASSERT`, and will always +// execute. +@builtin +ensure :: proc(condition: bool, message := #caller_expression(condition), loc := #caller_location) { + if !condition { + @(cold) + internal :: proc(message: string, loc: Source_Code_Location) { + p := context.assertion_failure_proc + if p == nil { + p = default_assertion_failure_proc + } + p("unsatisfied ensure", message, loc) + } + internal(message, loc) + } +} + @builtin panic :: proc(message: string, loc := #caller_location) -> ! { p := context.assertion_failure_proc @@ -999,6 +1017,17 @@ assert_contextless :: proc "contextless" (condition: bool, message := #caller_ex } } +@builtin +ensure_contextless :: proc "contextless" (condition: bool, message := #caller_expression(condition), loc := #caller_location) { + if !condition { + @(cold) + internal :: proc "contextless" (message: string, loc: Source_Code_Location) { + default_assertion_contextless_failure_proc("unsatisfied ensure", message, loc) + } + internal(message, loc) + } +} + @builtin panic_contextless :: proc "contextless" (message: string, loc := #caller_location) -> ! { default_assertion_contextless_failure_proc("panic", message, loc) From 8211a911dbf75b683da4f5c1c3f2970d56103497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 24 Dec 2024 20:46:38 +0100 Subject: [PATCH 22/91] encoding/base32: Replace padding map with switch statement Replace package-level map with a simple switch statement for padding validation. This eliminates allocations we can't properly free while maintaining the same validation logic. --- core/encoding/base32/base32.odin | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 53d31fb30..68b8b7a5e 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -45,13 +45,6 @@ DEC_TABLE := [?]u8 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } -REQUIRED_PADDING := map[int]int{ - 2 = 6, // 2 chars need 6 padding chars - 4 = 4, // 4 chars need 4 padding chars - 5 = 3, // 5 chars need 3 padding chars - 7 = 1, // 7 chars need 1 padding char -} - encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> string { out_length := (len(data) + 4) / 5 * 8 out := make([]byte, out_length, allocator) @@ -154,8 +147,17 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato content_len := data_len - padding_count mod8 := content_len % 8 - if req_pad, ok := REQUIRED_PADDING[mod8]; ok { - if padding_count != req_pad { + required_padding: int + switch mod8 { + case 2: required_padding = 6 // 2 chars need 6 padding chars + case 4: required_padding = 4 // 4 chars need 4 padding chars + case 5: required_padding = 3 // 5 chars need 3 padding chars + case 7: required_padding = 1 // 7 chars need 1 padding char + case: required_padding = 0 + } + + if required_padding > 0 { + if padding_count != required_padding { return nil, .Malformed_Input } } else if mod8 != 0 { From e7fb02a84a24f5430199249934a3dc37b10a4d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Wed, 25 Dec 2024 16:15:41 +0100 Subject: [PATCH 23/91] encoding/base32: Add custom validation support Add support for custom alphabet validation through an optional validation function parameter. The default validation follows RFC 4648 base32 alphabet rules (A-Z, 2-7). This properly supports the documented ability to use custom alphabets. --- core/encoding/base32/base32.odin | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 68b8b7a5e..7c70b7e9a 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -7,18 +7,25 @@ import "core:bytes" // A secondary param can be used to supply a custom alphabet to // @link(encode) and a matching decoding table to @link(decode). // If none is supplied it just uses the standard Base32 alphabet. -// Incase your specific version does not use padding, you may +// In case your specific version does not use padding, you may // truncate it from the encoded output. // Error represents errors that can occur during base32 decoding operations. // See RFC 4648 sections 3.2, 4 and 6. Error :: enum { None, - Invalid_Character, // Input contains characters outside of base32 alphabet (A-Z, 2-7) + Invalid_Character, // Input contains characters outside the specified alphabet Invalid_Length, // Input length is not valid for base32 (must be a multiple of 8 with proper padding) Malformed_Input, // Input has improper structure (wrong padding position or incomplete groups) } +Validate_Proc :: #type proc(c: byte) -> bool + +@private +_validate_default :: proc(c: byte) -> bool { + return (c >= 'A' && c <= 'Z') || (c >= '2' && c <= '7') +} + ENC_TABLE := [32]byte { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', @@ -105,7 +112,11 @@ _encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.al } @(optimization_mode="favor_size") -decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocator) -> (out: []byte, err: Error) { +decode :: proc( + data: string, + DEC_TBL := DEC_TABLE, + validate: Validate_Proc = _validate_default, + allocator := context.allocator) -> (out: []byte, err: Error) { if len(data) == 0 { return nil, .None } @@ -115,13 +126,13 @@ decode :: proc(data: string, DEC_TBL := DEC_TABLE, allocator := context.allocato return nil, .Invalid_Length } - // Validate characters - only A-Z and 2-7 allowed before padding + // Validate characters using provided validation function for i := 0; i < len(data); i += 1 { c := data[i] if c == byte(PADDING) { break } - if !((c >= 'A' && c <= 'Z') || (c >= '2' && c <= '7')) { + if !validate(c) { return nil, .Invalid_Character } } From 88c0e62095730354d139af3b90b7d91fa19f5e1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Thu, 26 Dec 2024 14:48:02 +0100 Subject: [PATCH 24/91] encoding/base32: Use `ENC_TBL` parameter consistently in encode() Fix encoding to properly use provided encoding table parameter instead of hardcoded `ENC_TABLE`. This makes encode properly support custom alphabets as documented. --- core/encoding/base32/base32.odin | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 7c70b7e9a..ea529ed63 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -56,7 +56,7 @@ encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocato out_length := (len(data) + 4) / 5 * 8 out := make([]byte, out_length, allocator) defer delete(out) - _encode(out, data) + _encode(out, data, ENC_TBL) return string(out[:]) } @@ -69,26 +69,26 @@ _encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.al carry: byte switch len(data) { case: - out[7] = ENC_TABLE[data[4] & 0x1f] + out[7] = ENC_TBL[data[4] & 0x1f] carry = data[4] >> 5 fallthrough case 4: - out[6] = ENC_TABLE[carry | (data[3] << 3) & 0x1f] - out[5] = ENC_TABLE[(data[3] >> 2) & 0x1f] + out[6] = ENC_TBL[carry | (data[3] << 3) & 0x1f] + out[5] = ENC_TBL[(data[3] >> 2) & 0x1f] carry = data[3] >> 7 fallthrough case 3: - out[4] = ENC_TABLE[carry | (data[2] << 1) & 0x1f] + out[4] = ENC_TBL[carry | (data[2] << 1) & 0x1f] carry = (data[2] >> 4) & 0x1f fallthrough case 2: - out[3] = ENC_TABLE[carry | (data[1] << 4) & 0x1f] - out[2] = ENC_TABLE[(data[1] >> 1) & 0x1f] + out[3] = ENC_TBL[carry | (data[1] << 4) & 0x1f] + out[2] = ENC_TBL[(data[1] >> 1) & 0x1f] carry = (data[1] >> 6) & 0x1f fallthrough case 1: - out[1] = ENC_TABLE[carry | (data[0] << 2) & 0x1f] - out[0] = ENC_TABLE[data[0] >> 3] + out[1] = ENC_TBL[carry | (data[0] << 2) & 0x1f] + out[0] = ENC_TBL[data[0] >> 3] } if len(data) < 5 { From 490f52700533bdda725fd90fc19cb248d38b2ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Thu, 26 Dec 2024 19:20:46 +0100 Subject: [PATCH 25/91] encoding/base32: Expand `DEC_TABLE` to full 256 bytes The decoding table was only 224 bytes which caused type mismatches when using custom alphabets, so expand with zeroes to cover full byte range while maintaining the same decoding logic. --- core/encoding/base32/base32.odin | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index ea529ed63..12b6a426b 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -35,21 +35,23 @@ ENC_TABLE := [32]byte { PADDING :: '=' -DEC_TABLE := [?]u8 { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, +DEC_TABLE := [256]u8 { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> string { From 8a91e0bb19c013d0b088c90f3d1a09560dffac5c Mon Sep 17 00:00:00 2001 From: Sebastian Pahnke Date: Sat, 28 Dec 2024 08:51:54 +0100 Subject: [PATCH 26/91] Add regression tests reproducing the issue --- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_4584.odin | 56 +++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 tests/issues/test_issue_4584.odin diff --git a/tests/issues/run.bat b/tests/issues/run.bat index dcea3d483..7ed43205d 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -16,6 +16,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style ..\..\..\odin test ..\test_issue_2637.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_2666.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_4210.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_4584.odin %COMMON% || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index c3bc00e24..54543980e 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -17,6 +17,7 @@ $ODIN test ../test_issue_2615.odin $COMMON $ODIN test ../test_issue_2637.odin $COMMON $ODIN test ../test_issue_2666.odin $COMMON $ODIN test ../test_issue_4210.odin $COMMON +$ODIN test ../test_issue_4584.odin $COMMON if [[ $($ODIN build ../test_issue_2395.odin $COMMON 2>&1 >/dev/null | grep -c "Error:") -eq 2 ]] ; then echo "SUCCESSFUL 1/1" else diff --git a/tests/issues/test_issue_4584.odin b/tests/issues/test_issue_4584.odin new file mode 100644 index 000000000..b80ecb3d9 --- /dev/null +++ b/tests/issues/test_issue_4584.odin @@ -0,0 +1,56 @@ +// Tests issue #4584 https://github.com/odin-lang/Odin/issues/4584 +package test_issues + +import "core:testing" +import "core:math/linalg" + +@test +test_adjugate_2x2 :: proc(t: ^testing.T) { + m := matrix[2,2]int { + -3, 2, + -1, 0, + } + expected := matrix[2,2]int { + 0, -2, + 1, -3, + } + testing.expect_value(t, linalg.adjugate(m), expected) + testing.expect_value(t, linalg.determinant(m), 2) + testing.expect_value(t, linalg.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) +} + +@test +test_adjugate_3x3 :: proc(t: ^testing.T) { + m := matrix[3,3]int { + -3, 2, -5, + -1, 0, -2, + 3, -4, 1, + } + expected := matrix[3,3]int { + -8, 18, -4, + -5, 12, -1, + 4, -6, 2, + } + testing.expect_value(t, linalg.adjugate(m), expected) + testing.expect_value(t, linalg.determinant(m), -6) + testing.expect_value(t, linalg.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) +} + +@test +test_adjugate_4x4 :: proc(t: ^testing.T) { + m := matrix[4,4]int { + -3, 2, -5, 1, + -1, 0, -2, 2, + 3, -4, 1, 3, + 4, 5, 6, 7, + } + expected := matrix[4,4]int { + -144, 266, -92, -16, + 57, 92, -5, -16, + 105, -142, 55, 2, + 33, -96, 9, -6, + } + testing.expect_value(t, linalg.adjugate(m), expected) + testing.expect_value(t, linalg.determinant(m), -174) + testing.expect_value(t, linalg.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) +} \ No newline at end of file From e8a202f0a27256162f8fe20f4d92cdb63ec1e967 Mon Sep 17 00:00:00 2001 From: Sebastian Pahnke Date: Sat, 28 Dec 2024 08:56:09 +0100 Subject: [PATCH 27/91] Add tests for glsl and hlsl variants --- tests/issues/test_issue_4584.odin | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/issues/test_issue_4584.odin b/tests/issues/test_issue_4584.odin index b80ecb3d9..176daf6af 100644 --- a/tests/issues/test_issue_4584.odin +++ b/tests/issues/test_issue_4584.odin @@ -3,6 +3,8 @@ package test_issues import "core:testing" import "core:math/linalg" +import glm "core:math/linalg/glsl" +import hlm "core:math/linalg/hlsl" @test test_adjugate_2x2 :: proc(t: ^testing.T) { @@ -17,6 +19,12 @@ test_adjugate_2x2 :: proc(t: ^testing.T) { testing.expect_value(t, linalg.adjugate(m), expected) testing.expect_value(t, linalg.determinant(m), 2) testing.expect_value(t, linalg.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) + + testing.expect_value(t, glm.adjugate(m), expected) + testing.expect_value(t, glm.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) + + testing.expect_value(t, hlm.adjugate(m), expected) + testing.expect_value(t, hlm.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) } @test @@ -34,6 +42,12 @@ test_adjugate_3x3 :: proc(t: ^testing.T) { testing.expect_value(t, linalg.adjugate(m), expected) testing.expect_value(t, linalg.determinant(m), -6) testing.expect_value(t, linalg.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) + + testing.expect_value(t, glm.adjugate(m), expected) + testing.expect_value(t, glm.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) + + testing.expect_value(t, hlm.adjugate(m), expected) + testing.expect_value(t, hlm.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) } @test @@ -53,4 +67,10 @@ test_adjugate_4x4 :: proc(t: ^testing.T) { testing.expect_value(t, linalg.adjugate(m), expected) testing.expect_value(t, linalg.determinant(m), -174) testing.expect_value(t, linalg.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) + + testing.expect_value(t, glm.adjugate(m), expected) + testing.expect_value(t, glm.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) + + testing.expect_value(t, hlm.adjugate(m), expected) + testing.expect_value(t, hlm.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) } \ No newline at end of file From 0d955e55dbe9aaefebddde222d8bd62c59236eae Mon Sep 17 00:00:00 2001 From: Sebastian Pahnke Date: Sat, 28 Dec 2024 09:05:26 +0100 Subject: [PATCH 28/91] Add tests for determinants because their calculation depends on the adjugate --- tests/issues/test_issue_4584.odin | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/issues/test_issue_4584.odin b/tests/issues/test_issue_4584.odin index 176daf6af..f14f1f1d3 100644 --- a/tests/issues/test_issue_4584.odin +++ b/tests/issues/test_issue_4584.odin @@ -21,9 +21,11 @@ test_adjugate_2x2 :: proc(t: ^testing.T) { testing.expect_value(t, linalg.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) testing.expect_value(t, glm.adjugate(m), expected) + testing.expect_value(t, glm.determinant(m), 2) testing.expect_value(t, glm.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) testing.expect_value(t, hlm.adjugate(m), expected) + testing.expect_value(t, hlm.determinant(m), 2) testing.expect_value(t, hlm.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) } @@ -44,9 +46,11 @@ test_adjugate_3x3 :: proc(t: ^testing.T) { testing.expect_value(t, linalg.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) testing.expect_value(t, glm.adjugate(m), expected) + testing.expect_value(t, glm.determinant(m), -6) testing.expect_value(t, glm.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) testing.expect_value(t, hlm.adjugate(m), expected) + testing.expect_value(t, hlm.determinant(m), -6) testing.expect_value(t, hlm.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) } @@ -60,7 +64,7 @@ test_adjugate_4x4 :: proc(t: ^testing.T) { } expected := matrix[4,4]int { -144, 266, -92, -16, - 57, 92, -5, -16, + -57, 92, -5, -16, 105, -142, 55, 2, 33, -96, 9, -6, } @@ -69,8 +73,10 @@ test_adjugate_4x4 :: proc(t: ^testing.T) { testing.expect_value(t, linalg.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) testing.expect_value(t, glm.adjugate(m), expected) + testing.expect_value(t, glm.determinant(m), -174) testing.expect_value(t, glm.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) testing.expect_value(t, hlm.adjugate(m), expected) + testing.expect_value(t, hlm.determinant(m), -174) testing.expect_value(t, hlm.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) } \ No newline at end of file From f23e226854c6777a27f13f70759fb022acafd532 Mon Sep 17 00:00:00 2001 From: Sebastian Pahnke Date: Sat, 28 Dec 2024 09:23:43 +0100 Subject: [PATCH 29/91] Rename adjugate to cofactor to keep existing usages for inverse and determinant correct and add new adjugate procedures --- core/math/linalg/general.odin | 84 ++++++++++++++++++++------ core/math/linalg/glsl/linalg_glsl.odin | 84 ++++++++++++++++++++------ core/math/linalg/hlsl/linalg_hlsl.odin | 84 ++++++++++++++++++++------ 3 files changed, 198 insertions(+), 54 deletions(-) diff --git a/core/math/linalg/general.odin b/core/math/linalg/general.odin index 8c4f2954a..4a0150972 100644 --- a/core/math/linalg/general.odin +++ b/core/math/linalg/general.odin @@ -417,6 +417,13 @@ adjugate :: proc{ matrix4x4_adjugate, } +cofactor :: proc{ + matrix1x1_cofactor, + matrix2x2_cofactor, + matrix3x3_cofactor, + matrix4x4_cofactor, +} + inverse_transpose :: proc{ matrix1x1_inverse_transpose, matrix2x2_inverse_transpose, @@ -479,9 +486,9 @@ matrix3x3_determinant :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (det: T) # } @(require_results) matrix4x4_determinant :: proc "contextless" (m: $M/matrix[4, 4]$T) -> (det: T) #no_bounds_check { - a := adjugate(m) + c := cofactor(m) for i in 0..<4 { - det += m[0, i] * a[0, i] + det += m[0, i] * c[0, i] } return } @@ -497,6 +504,47 @@ matrix1x1_adjugate :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: M) #no_bo @(require_results) matrix2x2_adjugate :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) #no_bounds_check { + y[0, 0] = +x[1, 1] + y[0, 1] = -x[0, 1] + y[1, 0] = -x[1, 0] + y[1, 1] = +x[0, 0] + return +} + +@(require_results) +matrix3x3_adjugate :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { + y[0, 0] = +(m[1, 1] * m[2, 2] - m[2, 1] * m[1, 2]) + y[1, 0] = -(m[1, 0] * m[2, 2] - m[2, 0] * m[1, 2]) + y[2, 0] = +(m[1, 0] * m[2, 1] - m[2, 0] * m[1, 1]) + y[0, 1] = -(m[0, 1] * m[2, 2] - m[2, 1] * m[0, 2]) + y[1, 1] = +(m[0, 0] * m[2, 2] - m[2, 0] * m[0, 2]) + y[2, 1] = -(m[0, 0] * m[2, 1] - m[2, 0] * m[0, 1]) + y[0, 2] = +(m[0, 1] * m[1, 2] - m[1, 1] * m[0, 2]) + y[1, 2] = -(m[0, 0] * m[1, 2] - m[1, 0] * m[0, 2]) + y[2, 2] = +(m[0, 0] * m[1, 1] - m[1, 0] * m[0, 1]) + return +} + +@(require_results) +matrix4x4_adjugate :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { + for i in 0..<4 { + for j in 0..<4 { + sign: T = 1 if (i + j) % 2 == 0 else -1 + y[i, j] = sign * matrix_minor(x, j, i) + } + } + return +} + + +@(require_results) +matrix1x1_cofactor :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: M) #no_bounds_check { + y = x + return +} + +@(require_results) +matrix2x2_cofactor :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) #no_bounds_check { y[0, 0] = +x[1, 1] y[0, 1] = -x[1, 0] y[1, 0] = -x[0, 1] @@ -505,7 +553,7 @@ matrix2x2_adjugate :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) #no_bo } @(require_results) -matrix3x3_adjugate :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { +matrix3x3_cofactor :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { y[0, 0] = +(m[1, 1] * m[2, 2] - m[2, 1] * m[1, 2]) y[0, 1] = -(m[1, 0] * m[2, 2] - m[2, 0] * m[1, 2]) y[0, 2] = +(m[1, 0] * m[2, 1] - m[2, 0] * m[1, 1]) @@ -520,7 +568,7 @@ matrix3x3_adjugate :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) #no_bo @(require_results) -matrix4x4_adjugate :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { +matrix4x4_cofactor :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { for i in 0..<4 { for j in 0..<4 { sign: T = 1 if (i + j) % 2 == 0 else -1 @@ -556,19 +604,19 @@ matrix2x2_inverse_transpose :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: @(require_results) matrix3x3_inverse_transpose :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d := determinant(x) when intrinsics.type_is_integer(T) { for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[i, j] / d + y[i, j] = c[i, j] / d } } } else { id := 1/d for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[i, j] * id + y[i, j] = c[i, j] * id } } } @@ -577,22 +625,22 @@ matrix3x3_inverse_transpose :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: @(require_results) matrix4x4_inverse_transpose :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d: T for i in 0..<4 { - d += x[0, i] * a[0, i] + d += x[0, i] * c[0, i] } when intrinsics.type_is_integer(T) { for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[i, j] / d + y[i, j] = c[i, j] / d } } } else { id := 1/d for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[i, j] * id + y[i, j] = c[i, j] * id } } } @@ -625,19 +673,19 @@ matrix2x2_inverse :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) #no_bou @(require_results) matrix3x3_inverse :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d := determinant(x) when intrinsics.type_is_integer(T) { for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[j, i] / d + y[i, j] = c[j, i] / d } } } else { id := 1/d for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[j, i] * id + y[i, j] = c[j, i] * id } } } @@ -646,22 +694,22 @@ matrix3x3_inverse :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bou @(require_results) matrix4x4_inverse :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d: T for i in 0..<4 { - d += x[0, i] * a[0, i] + d += x[0, i] * c[0, i] } when intrinsics.type_is_integer(T) { for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[j, i] / d + y[i, j] = c[j, i] / d } } } else { id := 1/d for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[j, i] * id + y[i, j] = c[j, i] * id } } } diff --git a/core/math/linalg/glsl/linalg_glsl.odin b/core/math/linalg/glsl/linalg_glsl.odin index ca61891cb..bd2cf416a 100644 --- a/core/math/linalg/glsl/linalg_glsl.odin +++ b/core/math/linalg/glsl/linalg_glsl.odin @@ -1882,6 +1882,13 @@ adjugate :: proc{ adjugate_matrix4x4, } +cofactor :: proc{ + cofactor_matrix1x1, + cofactor_matrix2x2, + cofactor_matrix3x3, + cofactor_matrix4x4, +} + inverse_transpose :: proc{ inverse_transpose_matrix1x1, inverse_transpose_matrix2x2, @@ -1944,9 +1951,9 @@ determinant_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (det: T) { } @(require_results) determinant_matrix4x4 :: proc "contextless" (m: $M/matrix[4, 4]$T) -> (det: T) { - a := adjugate(m) + c := cofactor(m) #no_bounds_check for i in 0..<4 { - det += m[0, i] * a[0, i] + det += m[0, i] * c[0, i] } return } @@ -1962,6 +1969,47 @@ adjugate_matrix1x1 :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: M) { @(require_results) adjugate_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) { + y[0, 0] = +x[1, 1] + y[0, 1] = -x[0, 1] + y[1, 0] = -x[1, 0] + y[1, 1] = +x[0, 0] + return +} + +@(require_results) +adjugate_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) { + y[0, 0] = +(m[1, 1] * m[2, 2] - m[2, 1] * m[1, 2]) + y[1, 0] = -(m[1, 0] * m[2, 2] - m[2, 0] * m[1, 2]) + y[2, 0] = +(m[1, 0] * m[2, 1] - m[2, 0] * m[1, 1]) + y[0, 1] = -(m[0, 1] * m[2, 2] - m[2, 1] * m[0, 2]) + y[1, 1] = +(m[0, 0] * m[2, 2] - m[2, 0] * m[0, 2]) + y[2, 1] = -(m[0, 0] * m[2, 1] - m[2, 0] * m[0, 1]) + y[0, 2] = +(m[0, 1] * m[1, 2] - m[1, 1] * m[0, 2]) + y[1, 2] = -(m[0, 0] * m[1, 2] - m[1, 0] * m[0, 2]) + y[2, 2] = +(m[0, 0] * m[1, 1] - m[1, 0] * m[0, 1]) + return +} + +@(require_results) +adjugate_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) { + for i in 0..<4 { + for j in 0..<4 { + sign: T = 1 if (i + j) % 2 == 0 else -1 + y[i, j] = sign * matrix_minor(x, j, i) + } + } + return +} + + +@(require_results) +cofactor_matrix1x1 :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: M) { + y = x + return +} + +@(require_results) +cofactor_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) { y[0, 0] = +x[1, 1] y[0, 1] = -x[1, 0] y[1, 0] = -x[0, 1] @@ -1970,7 +2018,7 @@ adjugate_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) { } @(require_results) -adjugate_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) { +cofactor_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) { y[0, 0] = +(m[1, 1] * m[2, 2] - m[2, 1] * m[1, 2]) y[0, 1] = -(m[1, 0] * m[2, 2] - m[2, 0] * m[1, 2]) y[0, 2] = +(m[1, 0] * m[2, 1] - m[2, 0] * m[1, 1]) @@ -1985,7 +2033,7 @@ adjugate_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) { @(require_results) -adjugate_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) { +cofactor_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) { for i in 0..<4 { for j in 0..<4 { sign: T = 1 if (i + j) % 2 == 0 else -1 @@ -2021,19 +2069,19 @@ inverse_transpose_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: @(require_results) inverse_transpose_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d := determinant(x) when intrinsics.type_is_integer(T) { for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[i, j] / d + y[i, j] = c[i, j] / d } } } else { id := 1/d for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[i, j] * id + y[i, j] = c[i, j] * id } } } @@ -2042,22 +2090,22 @@ inverse_transpose_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: @(require_results) inverse_transpose_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d: T for i in 0..<4 { - d += x[0, i] * a[0, i] + d += x[0, i] * c[0, i] } when intrinsics.type_is_integer(T) { for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[i, j] / d + y[i, j] = c[i, j] / d } } } else { id := 1/d for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[i, j] * id + y[i, j] = c[i, j] * id } } } @@ -2090,19 +2138,19 @@ inverse_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) { @(require_results) inverse_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d := determinant(x) when intrinsics.type_is_integer(T) { for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[j, i] / d + y[i, j] = c[j, i] / d } } } else { id := 1/d for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[j, i] * id + y[i, j] = c[j, i] * id } } } @@ -2111,22 +2159,22 @@ inverse_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bou @(require_results) inverse_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d: T for i in 0..<4 { - d += x[0, i] * a[0, i] + d += x[0, i] * c[0, i] } when intrinsics.type_is_integer(T) { for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[j, i] / d + y[i, j] = c[j, i] / d } } } else { id := 1/d for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[j, i] * id + y[i, j] = c[j, i] * id } } } diff --git a/core/math/linalg/hlsl/linalg_hlsl.odin b/core/math/linalg/hlsl/linalg_hlsl.odin index a89fdddd3..cca70f9c8 100644 --- a/core/math/linalg/hlsl/linalg_hlsl.odin +++ b/core/math/linalg/hlsl/linalg_hlsl.odin @@ -1514,6 +1514,13 @@ adjugate :: proc{ adjugate_matrix4x4, } +cofactor :: proc{ + cofactor_matrix1x1, + cofactor_matrix2x2, + cofactor_matrix3x3, + cofactor_matrix4x4, +} + inverse_transpose :: proc{ inverse_transpose_matrix1x1, inverse_transpose_matrix2x2, @@ -1568,9 +1575,9 @@ determinant_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (det: T) { } @(require_results) determinant_matrix4x4 :: proc "contextless" (m: $M/matrix[4, 4]$T) -> (det: T) { - a := adjugate(m) + c := cofactor(m) #no_bounds_check for i in 0..<4 { - det += m[0, i] * a[0, i] + det += m[0, i] * c[0, i] } return } @@ -1586,6 +1593,47 @@ adjugate_matrix1x1 :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: M) { @(require_results) adjugate_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) { + y[0, 0] = +x[1, 1] + y[0, 1] = -x[0, 1] + y[1, 0] = -x[1, 0] + y[1, 1] = +x[0, 0] + return +} + +@(require_results) +adjugate_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) { + y[0, 0] = +(m[1, 1] * m[2, 2] - m[2, 1] * m[1, 2]) + y[1, 0] = -(m[1, 0] * m[2, 2] - m[2, 0] * m[1, 2]) + y[2, 0] = +(m[1, 0] * m[2, 1] - m[2, 0] * m[1, 1]) + y[0, 1] = -(m[0, 1] * m[2, 2] - m[2, 1] * m[0, 2]) + y[1, 1] = +(m[0, 0] * m[2, 2] - m[2, 0] * m[0, 2]) + y[2, 1] = -(m[0, 0] * m[2, 1] - m[2, 0] * m[0, 1]) + y[0, 2] = +(m[0, 1] * m[1, 2] - m[1, 1] * m[0, 2]) + y[1, 2] = -(m[0, 0] * m[1, 2] - m[1, 0] * m[0, 2]) + y[2, 2] = +(m[0, 0] * m[1, 1] - m[1, 0] * m[0, 1]) + return +} + +@(require_results) +adjugate_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) { + for i in 0..<4 { + for j in 0..<4 { + sign: T = 1 if (i + j) % 2 == 0 else -1 + y[i, j] = sign * matrix_minor(x, j, i) + } + } + return +} + + +@(require_results) +cofactor_matrix1x1 :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: M) { + y = x + return +} + +@(require_results) +cofactor_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) { y[0, 0] = +x[1, 1] y[0, 1] = -x[1, 0] y[1, 0] = -x[0, 1] @@ -1594,7 +1642,7 @@ adjugate_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) { } @(require_results) -adjugate_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) { +cofactor_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) { y[0, 0] = +(m[1, 1] * m[2, 2] - m[2, 1] * m[1, 2]) y[0, 1] = -(m[1, 0] * m[2, 2] - m[2, 0] * m[1, 2]) y[0, 2] = +(m[1, 0] * m[2, 1] - m[2, 0] * m[1, 1]) @@ -1609,7 +1657,7 @@ adjugate_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: M) { @(require_results) -adjugate_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) { +cofactor_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) { for i in 0..<4 { for j in 0..<4 { sign: T = 1 if (i + j) % 2 == 0 else -1 @@ -1645,19 +1693,19 @@ inverse_transpose_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: @(require_results) inverse_transpose_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d := determinant(x) when intrinsics.type_is_integer(T) { for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[i, j] / d + y[i, j] = c[i, j] / d } } } else { id := 1/d for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[i, j] * id + y[i, j] = c[i, j] * id } } } @@ -1666,22 +1714,22 @@ inverse_transpose_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: @(require_results) inverse_transpose_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d: T for i in 0..<4 { - d += x[0, i] * a[0, i] + d += x[0, i] * c[0, i] } when intrinsics.type_is_integer(T) { for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[i, j] / d + y[i, j] = c[i, j] / d } } } else { id := 1/d for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[i, j] * id + y[i, j] = c[i, j] * id } } } @@ -1714,19 +1762,19 @@ inverse_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: M) { @(require_results) inverse_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d := determinant(x) when intrinsics.type_is_integer(T) { for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[j, i] / d + y[i, j] = c[j, i] / d } } } else { id := 1/d for i in 0..<3 { for j in 0..<3 { - y[i, j] = a[j, i] * id + y[i, j] = c[j, i] * id } } } @@ -1735,22 +1783,22 @@ inverse_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: M) #no_bou @(require_results) inverse_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: M) #no_bounds_check { - a := adjugate(x) + c := cofactor(x) d: T for i in 0..<4 { - d += x[0, i] * a[0, i] + d += x[0, i] * c[0, i] } when intrinsics.type_is_integer(T) { for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[j, i] / d + y[i, j] = c[j, i] / d } } } else { id := 1/d for i in 0..<4 { for j in 0..<4 { - y[i, j] = a[j, i] * id + y[i, j] = c[j, i] * id } } } From 02a9d8560fb82471ddc89154dee1e9e30afb88ab Mon Sep 17 00:00:00 2001 From: Sebastian Pahnke Date: Sat, 28 Dec 2024 09:33:58 +0100 Subject: [PATCH 30/91] Test symmetry --- tests/issues/test_issue_4584.odin | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/tests/issues/test_issue_4584.odin b/tests/issues/test_issue_4584.odin index f14f1f1d3..27e5cd789 100644 --- a/tests/issues/test_issue_4584.odin +++ b/tests/issues/test_issue_4584.odin @@ -8,6 +8,7 @@ import hlm "core:math/linalg/hlsl" @test test_adjugate_2x2 :: proc(t: ^testing.T) { + I := linalg.identity(matrix[2,2]int) m := matrix[2,2]int { -3, 2, -1, 0, @@ -18,19 +19,23 @@ test_adjugate_2x2 :: proc(t: ^testing.T) { } testing.expect_value(t, linalg.adjugate(m), expected) testing.expect_value(t, linalg.determinant(m), 2) - testing.expect_value(t, linalg.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) + testing.expect_value(t, linalg.adjugate(m) * m, 2 * I) + testing.expect_value(t, m * linalg.adjugate(m), 2 * I) testing.expect_value(t, glm.adjugate(m), expected) testing.expect_value(t, glm.determinant(m), 2) - testing.expect_value(t, glm.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) + testing.expect_value(t, glm.adjugate(m) * m, 2 * I) + testing.expect_value(t, m * glm.adjugate(m), 2 * I) testing.expect_value(t, hlm.adjugate(m), expected) testing.expect_value(t, hlm.determinant(m), 2) - testing.expect_value(t, hlm.adjugate(m) * m, 2 * linalg.identity(matrix[2,2]int)) + testing.expect_value(t, hlm.adjugate(m) * m, 2 * I) + testing.expect_value(t, m * hlm.adjugate(m), 2 * I) } @test test_adjugate_3x3 :: proc(t: ^testing.T) { + I := linalg.identity(matrix[3,3]int) m := matrix[3,3]int { -3, 2, -5, -1, 0, -2, @@ -43,19 +48,23 @@ test_adjugate_3x3 :: proc(t: ^testing.T) { } testing.expect_value(t, linalg.adjugate(m), expected) testing.expect_value(t, linalg.determinant(m), -6) - testing.expect_value(t, linalg.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) + testing.expect_value(t, linalg.adjugate(m) * m, -6 * I) + testing.expect_value(t, m * linalg.adjugate(m), -6 * I) testing.expect_value(t, glm.adjugate(m), expected) testing.expect_value(t, glm.determinant(m), -6) - testing.expect_value(t, glm.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) + testing.expect_value(t, glm.adjugate(m) * m, -6 * I) + testing.expect_value(t, m * glm.adjugate(m), -6 * I) testing.expect_value(t, hlm.adjugate(m), expected) testing.expect_value(t, hlm.determinant(m), -6) - testing.expect_value(t, hlm.adjugate(m) * m, -6 * linalg.identity(matrix[3,3]int)) + testing.expect_value(t, hlm.adjugate(m) * m, -6 * I) + testing.expect_value(t, m * hlm.adjugate(m), -6 * I) } @test test_adjugate_4x4 :: proc(t: ^testing.T) { + I := linalg.identity(matrix[4,4]int) m := matrix[4,4]int { -3, 2, -5, 1, -1, 0, -2, 2, @@ -70,13 +79,16 @@ test_adjugate_4x4 :: proc(t: ^testing.T) { } testing.expect_value(t, linalg.adjugate(m), expected) testing.expect_value(t, linalg.determinant(m), -174) - testing.expect_value(t, linalg.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) + testing.expect_value(t, linalg.adjugate(m) * m, -174 * I) + testing.expect_value(t, m * linalg.adjugate(m), -174 * I) testing.expect_value(t, glm.adjugate(m), expected) testing.expect_value(t, glm.determinant(m), -174) - testing.expect_value(t, glm.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) + testing.expect_value(t, glm.adjugate(m) * m, -174 * I) + testing.expect_value(t, m * glm.adjugate(m), -174 * I) testing.expect_value(t, hlm.adjugate(m), expected) testing.expect_value(t, hlm.determinant(m), -174) - testing.expect_value(t, hlm.adjugate(m) * m, -174 * linalg.identity(matrix[4,4]int)) + testing.expect_value(t, hlm.adjugate(m) * m, -174 * I) + testing.expect_value(t, m * hlm.adjugate(m), -174 * I) } \ No newline at end of file From ec5ee19c01c30e8fd01c9f04a2249c4d3d18b50d Mon Sep 17 00:00:00 2001 From: Sebastian Pahnke Date: Sat, 28 Dec 2024 10:24:37 +0100 Subject: [PATCH 31/91] Add regression tests for matrix inverse --- tests/issues/test_issue_4584.odin | 95 +++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/tests/issues/test_issue_4584.odin b/tests/issues/test_issue_4584.odin index 27e5cd789..a709926d2 100644 --- a/tests/issues/test_issue_4584.odin +++ b/tests/issues/test_issue_4584.odin @@ -2,6 +2,7 @@ package test_issues import "core:testing" +import "core:log" import "core:math/linalg" import glm "core:math/linalg/glsl" import hlm "core:math/linalg/hlsl" @@ -91,4 +92,98 @@ test_adjugate_4x4 :: proc(t: ^testing.T) { testing.expect_value(t, hlm.determinant(m), -174) testing.expect_value(t, hlm.adjugate(m) * m, -174 * I) testing.expect_value(t, m * hlm.adjugate(m), -174 * I) +} + +@test +test_inverse_regression_2x2 :: proc(t: ^testing.T) { + I := linalg.identity(matrix[2,2]f32) + m := matrix[2,2]f32 { + -3, 2, + -1, 0, + } + expected := matrix[2,2]f32 { + 0.0, -1.0, + 1.0/2.0, -3.0/2.0, + } + expect_float_matrix_value(t, linalg.inverse(m), expected) + expect_float_matrix_value(t, linalg.inverse(m) * m, I) + expect_float_matrix_value(t, m * linalg.inverse(m), I) + + expect_float_matrix_value(t, glm.inverse(m), expected) + expect_float_matrix_value(t, glm.inverse(m) * m, I) + expect_float_matrix_value(t, m * glm.inverse(m), I) + + expect_float_matrix_value(t, hlm.inverse(m), expected) + expect_float_matrix_value(t, hlm.inverse(m) * m, I) + expect_float_matrix_value(t, m * hlm.inverse(m), I) +} + +@test +test_inverse_regression_3x3 :: proc(t: ^testing.T) { + I := linalg.identity(matrix[3,3]f32) + m := matrix[3,3]f32 { + -3, 2, -5, + -1, 0, -2, + 3, -4, 1, + } + expected := matrix[3,3]f32 { + 4.0/3.0, -3.0, 2.0/3.0, + 5.0/6.0, -2.0, 1.0/6.0, + -2.0/3.0, 1.0, -1.0/3.0, + } + expect_float_matrix_value(t, linalg.inverse(m), expected) + expect_float_matrix_value(t, linalg.inverse(m) * m, I) + expect_float_matrix_value(t, m * linalg.inverse(m), I) + + expect_float_matrix_value(t, glm.inverse(m), expected) + expect_float_matrix_value(t, glm.inverse(m) * m, I) + expect_float_matrix_value(t, m * glm.inverse(m), I) + + expect_float_matrix_value(t, hlm.inverse(m), expected) + expect_float_matrix_value(t, hlm.inverse(m) * m, I) + expect_float_matrix_value(t, m * hlm.inverse(m), I) +} + +@test +test_inverse_regression_4x4 :: proc(t: ^testing.T) { + I := linalg.identity(matrix[4,4]f32) + m := matrix[4,4]f32 { + -3, 2, -5, 1, + -1, 0, -2, 2, + 3, -4, 1, 3, + 4, 5, 6, 7, + } + expected := matrix[4,4]f32 { + 24.0/29.0, -133.0/87.0, 46.0/87.0, 8.0/87.0, + 19.0/58.0, -46.0/87.0, 5.0/174.0, 8.0/87.0, + -35.0/58.0, 71.0/87.0, -55.0/174.0, -1.0/87.0, + -11.0/58.0, 16.0/29.0, -3.0/58.0, 1.0/29.0, + } + expect_float_matrix_value(t, linalg.inverse(m), expected) + expect_float_matrix_value(t, linalg.inverse(m) * m, I) + expect_float_matrix_value(t, m * linalg.inverse(m), I) + + expect_float_matrix_value(t, glm.inverse(m), expected) + expect_float_matrix_value(t, glm.inverse(m) * m, I) + expect_float_matrix_value(t, m * glm.inverse(m), I) + + expect_float_matrix_value(t, hlm.inverse(m), expected) + expect_float_matrix_value(t, hlm.inverse(m) * m, I) + expect_float_matrix_value(t, m * hlm.inverse(m), I) +} + +@(private="file") +expect_float_matrix_value :: proc(t: ^testing.T, value, expected: $M/matrix[$N, N]f32, loc := #caller_location, value_expr := #caller_expression(value)) -> bool { + ok := true + outer: for i in 0.. 1e-6 { + ok = false + break outer + } + } + } + if !ok do log.errorf("expected %v to be %v, got %v", value_expr, expected, value, location=loc) + return ok } \ No newline at end of file From b21fc1923307602500c696e418efa951a5658ed8 Mon Sep 17 00:00:00 2001 From: Sebastian Pahnke Date: Sat, 28 Dec 2024 10:29:05 +0100 Subject: [PATCH 32/91] Add regression tests for inverse_transpose --- tests/issues/test_issue_4584.odin | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/issues/test_issue_4584.odin b/tests/issues/test_issue_4584.odin index a709926d2..9eea23420 100644 --- a/tests/issues/test_issue_4584.odin +++ b/tests/issues/test_issue_4584.odin @@ -106,14 +106,17 @@ test_inverse_regression_2x2 :: proc(t: ^testing.T) { 1.0/2.0, -3.0/2.0, } expect_float_matrix_value(t, linalg.inverse(m), expected) + expect_float_matrix_value(t, linalg.inverse_transpose(m), linalg.transpose(expected)) expect_float_matrix_value(t, linalg.inverse(m) * m, I) expect_float_matrix_value(t, m * linalg.inverse(m), I) expect_float_matrix_value(t, glm.inverse(m), expected) + expect_float_matrix_value(t, glm.inverse_transpose(m), glm.transpose(expected)) expect_float_matrix_value(t, glm.inverse(m) * m, I) expect_float_matrix_value(t, m * glm.inverse(m), I) expect_float_matrix_value(t, hlm.inverse(m), expected) + expect_float_matrix_value(t, hlm.inverse_transpose(m), hlm.transpose(expected)) expect_float_matrix_value(t, hlm.inverse(m) * m, I) expect_float_matrix_value(t, m * hlm.inverse(m), I) } @@ -132,14 +135,17 @@ test_inverse_regression_3x3 :: proc(t: ^testing.T) { -2.0/3.0, 1.0, -1.0/3.0, } expect_float_matrix_value(t, linalg.inverse(m), expected) + expect_float_matrix_value(t, linalg.inverse_transpose(m), linalg.transpose(expected)) expect_float_matrix_value(t, linalg.inverse(m) * m, I) expect_float_matrix_value(t, m * linalg.inverse(m), I) expect_float_matrix_value(t, glm.inverse(m), expected) + expect_float_matrix_value(t, glm.inverse_transpose(m), glm.transpose(expected)) expect_float_matrix_value(t, glm.inverse(m) * m, I) expect_float_matrix_value(t, m * glm.inverse(m), I) expect_float_matrix_value(t, hlm.inverse(m), expected) + expect_float_matrix_value(t, hlm.inverse_transpose(m), hlm.transpose(expected)) expect_float_matrix_value(t, hlm.inverse(m) * m, I) expect_float_matrix_value(t, m * hlm.inverse(m), I) } @@ -160,14 +166,17 @@ test_inverse_regression_4x4 :: proc(t: ^testing.T) { -11.0/58.0, 16.0/29.0, -3.0/58.0, 1.0/29.0, } expect_float_matrix_value(t, linalg.inverse(m), expected) + expect_float_matrix_value(t, linalg.inverse_transpose(m), linalg.transpose(expected)) expect_float_matrix_value(t, linalg.inverse(m) * m, I) expect_float_matrix_value(t, m * linalg.inverse(m), I) expect_float_matrix_value(t, glm.inverse(m), expected) + expect_float_matrix_value(t, glm.inverse_transpose(m), glm.transpose(expected)) expect_float_matrix_value(t, glm.inverse(m) * m, I) expect_float_matrix_value(t, m * glm.inverse(m), I) expect_float_matrix_value(t, hlm.inverse(m), expected) + expect_float_matrix_value(t, hlm.inverse_transpose(m), hlm.transpose(expected)) expect_float_matrix_value(t, hlm.inverse(m) * m, I) expect_float_matrix_value(t, m * hlm.inverse(m), I) } From d22cb20d85e0afeb61f6ad26434dd92b9d9b2ff7 Mon Sep 17 00:00:00 2001 From: dozn <16659513+dozn@users.noreply.github.com> Date: Sat, 28 Dec 2024 07:48:09 -0800 Subject: [PATCH 33/91] Use Struct Tags For Embedded (with `using`) Structs When Unmarshalling JSON A fix for https://github.com/odin-lang/Odin/issues/4539 --- core/encoding/json/unmarshal.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index c70b8d39a..e76de2747 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -470,7 +470,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm } } - if field.name == key { + if field.name == key || (field.tag != "" && reflect.struct_tag_get(field.tag, "json") == key) { offset = field.offset type = field.type found = true From 87c159c69fd699312fa014700c03f43188dd0728 Mon Sep 17 00:00:00 2001 From: dozn <16659513+dozn@users.noreply.github.com> Date: Sat, 28 Dec 2024 08:13:38 -0800 Subject: [PATCH 34/91] Remove unnecessary string() conversion. --- core/encoding/json/unmarshal.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index e76de2747..57371e360 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -439,7 +439,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm use_field_idx := -1 for field, field_idx in fields { - tag_value := string(reflect.struct_tag_get(field.tag, "json")) + tag_value := reflect.struct_tag_get(field.tag, "json") json_name, _ := json_name_from_tag_value(tag_value) if key == json_name { use_field_idx = field_idx From 77511da195ad83c6d8e130be7249cde53d78d69c Mon Sep 17 00:00:00 2001 From: shashank Date: Sun, 29 Dec 2024 19:58:55 +0530 Subject: [PATCH 35/91] update cgltf from 1.13 to 1.14 --- vendor/cgltf/cgltf.odin | 71 +++- vendor/cgltf/src/cgltf.h | 653 ++++++++++++++++++++++----------- vendor/cgltf/src/cgltf_write.h | 67 +++- 3 files changed, 549 insertions(+), 242 deletions(-) diff --git a/vendor/cgltf/cgltf.odin b/vendor/cgltf/cgltf.odin index a24c36d64..e9dc7ef84 100644 --- a/vendor/cgltf/cgltf.odin +++ b/vendor/cgltf/cgltf.odin @@ -105,6 +105,7 @@ type :: enum c.int { } primitive_type :: enum c.int { + invalid, points, lines, line_loop, @@ -222,15 +223,6 @@ accessor_sparse :: struct { indices_component_type: component_type, values_buffer_view: ^buffer_view, values_byte_offset: uint, - extras: extras_t, - indices_extras: extras_t, - values_extras: extras_t, - extensions_count: uint, - extensions: [^]extension `fmt:"v,extensions_count"`, - indices_extensions_count: uint, - indices_extensions: [^]extension `fmt:"v,indices_extensions_count"`, - values_extensions_count: uint, - values_extensions: [^]extension `fmt:"v,values_extensions_count"`, } accessor :: struct { @@ -306,9 +298,6 @@ texture_view :: struct { scale: f32, /* equivalent to strength for occlusion_texture */ has_transform: b32, transform: texture_transform, - extras: extras_t, - extensions_count: uint, - extensions: [^]extension `fmt:"v,extensions_count"`, } pbr_metallic_roughness :: struct { @@ -381,6 +370,16 @@ iridescence :: struct { iridescence_thickness_texture: texture_view, } +anisotropy :: struct { + anisotropy_strength: f32, + anisotropy_rotation: f32, + anisotropy_texture: texture_view, +} + +dispersion :: struct { + dispersion: f32, +} + material :: struct { name: cstring, has_pbr_metallic_roughness: b32, @@ -393,6 +392,8 @@ material :: struct { has_sheen: b32, has_emissive_strength: b32, has_iridescence: b32, + has_anisotropy: b32, + has_dispersion: b32, pbr_metallic_roughness: pbr_metallic_roughness, pbr_specular_glossiness: pbr_specular_glossiness, clearcoat: clearcoat, @@ -403,6 +404,8 @@ material :: struct { volume: volume, emissive_strength: emissive_strength, iridescence: iridescence, + anisotropy: anisotropy, + dispersion: dispersion, normal_texture: texture_view, occlusion_texture: texture_view, emissive_texture: texture_view, @@ -432,7 +435,6 @@ draco_mesh_compression :: struct { } mesh_gpu_instancing :: struct { - buffer_view: ^buffer_view, attributes: []attribute, } @@ -683,6 +685,9 @@ foreign lib { node_transform_local :: proc(node: ^node, out_matrix: [^]f32) --- node_transform_world :: proc(node: ^node, out_matrix: [^]f32) --- + @(require_results) + buffer_view_data :: proc(view: ^/*const*/buffer_view) -> [^]byte --- + @(require_results) accessor_read_float :: proc(accessor: ^/*const*/accessor, index: uint, out: [^]f32, element_size: uint) -> b32 --- @(require_results) @@ -693,13 +698,53 @@ foreign lib { @(require_results) num_components :: proc(type: type) -> uint --- + @(require_results) + component_size :: proc(component_type: component_type) -> uint --- + @(require_results) + calc_size :: proc(type: type, component_type: component_type) -> uint --- + @(require_results) accessor_unpack_floats :: proc(accessor: ^/*const*/accessor, out: [^]f32, float_count: uint) -> uint --- + @(require_results) + accessor_unpack_indices :: proc(accessor: ^/*const*/accessor , out: rawptr, out_component_size: uint, index_count: uint) -> uint --- /* this function is deprecated and will be removed in the future; use cgltf_extras::data instead */ @(require_results) copy_extras_json :: proc(data: ^data, extras: ^extras_t, dest: [^]byte, dest_size: ^uint) -> result --- + @(require_results) + mesh_index :: proc(data: ^/*const*/data, object: ^/*const*/mesh) -> uint --- + @(require_results) + material_index :: proc(data: ^/*const*/data, object: ^/*const*/material) -> uint --- + @(require_results) + accessor_index :: proc(data: ^/*const*/data, object: ^/*const*/accessor) -> uint --- + @(require_results) + buffer_view_index :: proc(data: ^/*const*/data, object: ^/*const*/buffer_view) -> uint --- + @(require_results) + buffer_index :: proc(data: ^/*const*/data, object: ^/*const*/buffer) -> uint --- + @(require_results) + image_index :: proc(data: ^/*const*/data, object: ^/*const*/image) -> uint --- + @(require_results) + texture_index :: proc(data: ^/*const*/data, object: ^/*const*/texture) -> uint --- + @(require_results) + sampler_index :: proc(data: ^/*const*/data, object: ^/*const*/sampler) -> uint --- + @(require_results) + skin_index :: proc(data: ^/*const*/data, object: ^/*const*/skin) -> uint --- + @(require_results) + camera_index :: proc(data: ^/*const*/data, object: ^/*const*/camera) -> uint --- + @(require_results) + light_index :: proc(data: ^/*const*/data, object: ^/*const*/light) -> uint --- + @(require_results) + node_index :: proc(data: ^/*const*/data, object: ^/*const*/node) -> uint --- + @(require_results) + scene_index :: proc(data: ^/*const*/data, object: ^/*const*/scene) -> uint --- + @(require_results) + animation_index :: proc(data: ^/*const*/data, object: ^/*const*/animation) -> uint --- + @(require_results) + animation_sampler_index :: proc(animation: ^/*const*/animation, object: ^/*const*/animation_sampler) -> uint --- + @(require_results) + animation_channel_index :: proc(animation: ^/*const*/animation, object: ^/*const*/animation_channel) -> uint --- + @(require_results) write_file :: proc(#by_ptr options: options, path: cstring, data: ^data) -> result --- @(require_results) diff --git a/vendor/cgltf/src/cgltf.h b/vendor/cgltf/src/cgltf.h index a534cefb4..17dc0ca5d 100644 --- a/vendor/cgltf/src/cgltf.h +++ b/vendor/cgltf/src/cgltf.h @@ -1,7 +1,7 @@ /** * cgltf - a single-file glTF 2.0 parser written in C99. * - * Version: 1.13 + * Version: 1.14 * * Website: https://github.com/jkuhlmann/cgltf * @@ -63,9 +63,15 @@ * By passing null for the output pointer, users can find out how many floats are required in the * output buffer. * + * `cgltf_accessor_unpack_indices` reads in the index data from an accessor. Assumes that + * `cgltf_load_buffers` has already been called. By passing null for the output pointer, users can + * find out how many indices are required in the output buffer. Returns 0 if the accessor is + * sparse or if the output component size is less than the accessor's component size. + * * `cgltf_num_components` is a tiny utility that tells you the dimensionality of * a certain accessor type. This can be used before `cgltf_accessor_unpack_floats` to help allocate - * the necessary amount of memory. + * the necessary amount of memory. `cgltf_component_size` and `cgltf_calc_size` exist for + * similar purposes. * * `cgltf_accessor_read_float` reads a certain element from a non-sparse accessor and converts it to * floating point, assuming that `cgltf_load_buffers` has already been called. The passed-in element @@ -74,7 +80,7 @@ * * `cgltf_accessor_read_uint` is similar to its floating-point counterpart, but limited to reading * vector types and does not support matrix types. The passed-in element size is the number of uints - * in the output buffer, which should be in the range [1, 4]. Returns false if the passed-in + * in the output buffer, which should be in the range [1, 4]. Returns false if the passed-in * element_size is too small, or if the accessor is sparse. * * `cgltf_accessor_read_index` is similar to its floating-point counterpart, but it returns size_t @@ -89,6 +95,7 @@ #define CGLTF_H_INCLUDED__ #include +#include /* For uint8_t, uint32_t */ #ifdef __cplusplus extern "C" { @@ -195,6 +202,7 @@ typedef enum cgltf_type typedef enum cgltf_primitive_type { + cgltf_primitive_type_invalid, cgltf_primitive_type_points, cgltf_primitive_type_lines, cgltf_primitive_type_line_loop, @@ -326,15 +334,6 @@ typedef struct cgltf_accessor_sparse cgltf_component_type indices_component_type; cgltf_buffer_view* values_buffer_view; cgltf_size values_byte_offset; - cgltf_extras extras; - cgltf_extras indices_extras; - cgltf_extras values_extras; - cgltf_size extensions_count; - cgltf_extension* extensions; - cgltf_size indices_extensions_count; - cgltf_extension* indices_extensions; - cgltf_size values_extensions_count; - cgltf_extension* values_extensions; } cgltf_accessor_sparse; typedef struct cgltf_accessor @@ -417,9 +416,6 @@ typedef struct cgltf_texture_view cgltf_float scale; /* equivalent to strength for occlusion_texture */ cgltf_bool has_transform; cgltf_texture_transform transform; - cgltf_extras extras; - cgltf_size extensions_count; - cgltf_extension* extensions; } cgltf_texture_view; typedef struct cgltf_pbr_metallic_roughness @@ -502,6 +498,18 @@ typedef struct cgltf_iridescence cgltf_texture_view iridescence_thickness_texture; } cgltf_iridescence; +typedef struct cgltf_anisotropy +{ + cgltf_float anisotropy_strength; + cgltf_float anisotropy_rotation; + cgltf_texture_view anisotropy_texture; +} cgltf_anisotropy; + +typedef struct cgltf_dispersion +{ + cgltf_float dispersion; +} cgltf_dispersion; + typedef struct cgltf_material { char* name; @@ -515,6 +523,8 @@ typedef struct cgltf_material cgltf_bool has_sheen; cgltf_bool has_emissive_strength; cgltf_bool has_iridescence; + cgltf_bool has_anisotropy; + cgltf_bool has_dispersion; cgltf_pbr_metallic_roughness pbr_metallic_roughness; cgltf_pbr_specular_glossiness pbr_specular_glossiness; cgltf_clearcoat clearcoat; @@ -525,6 +535,8 @@ typedef struct cgltf_material cgltf_volume volume; cgltf_emissive_strength emissive_strength; cgltf_iridescence iridescence; + cgltf_anisotropy anisotropy; + cgltf_dispersion dispersion; cgltf_texture_view normal_texture; cgltf_texture_view occlusion_texture; cgltf_texture_view emissive_texture; @@ -557,7 +569,6 @@ typedef struct cgltf_draco_mesh_compression { } cgltf_draco_mesh_compression; typedef struct cgltf_mesh_gpu_instancing { - cgltf_buffer_view* buffer_view; cgltf_attribute* attributes; cgltf_size attributes_count; } cgltf_mesh_gpu_instancing; @@ -829,17 +840,39 @@ void cgltf_free(cgltf_data* data); void cgltf_node_transform_local(const cgltf_node* node, cgltf_float* out_matrix); void cgltf_node_transform_world(const cgltf_node* node, cgltf_float* out_matrix); +const uint8_t* cgltf_buffer_view_data(const cgltf_buffer_view* view); + cgltf_bool cgltf_accessor_read_float(const cgltf_accessor* accessor, cgltf_size index, cgltf_float* out, cgltf_size element_size); cgltf_bool cgltf_accessor_read_uint(const cgltf_accessor* accessor, cgltf_size index, cgltf_uint* out, cgltf_size element_size); cgltf_size cgltf_accessor_read_index(const cgltf_accessor* accessor, cgltf_size index); cgltf_size cgltf_num_components(cgltf_type type); +cgltf_size cgltf_component_size(cgltf_component_type component_type); +cgltf_size cgltf_calc_size(cgltf_type type, cgltf_component_type component_type); cgltf_size cgltf_accessor_unpack_floats(const cgltf_accessor* accessor, cgltf_float* out, cgltf_size float_count); +cgltf_size cgltf_accessor_unpack_indices(const cgltf_accessor* accessor, void* out, cgltf_size out_component_size, cgltf_size index_count); /* this function is deprecated and will be removed in the future; use cgltf_extras::data instead */ cgltf_result cgltf_copy_extras_json(const cgltf_data* data, const cgltf_extras* extras, char* dest, cgltf_size* dest_size); +cgltf_size cgltf_mesh_index(const cgltf_data* data, const cgltf_mesh* object); +cgltf_size cgltf_material_index(const cgltf_data* data, const cgltf_material* object); +cgltf_size cgltf_accessor_index(const cgltf_data* data, const cgltf_accessor* object); +cgltf_size cgltf_buffer_view_index(const cgltf_data* data, const cgltf_buffer_view* object); +cgltf_size cgltf_buffer_index(const cgltf_data* data, const cgltf_buffer* object); +cgltf_size cgltf_image_index(const cgltf_data* data, const cgltf_image* object); +cgltf_size cgltf_texture_index(const cgltf_data* data, const cgltf_texture* object); +cgltf_size cgltf_sampler_index(const cgltf_data* data, const cgltf_sampler* object); +cgltf_size cgltf_skin_index(const cgltf_data* data, const cgltf_skin* object); +cgltf_size cgltf_camera_index(const cgltf_data* data, const cgltf_camera* object); +cgltf_size cgltf_light_index(const cgltf_data* data, const cgltf_light* object); +cgltf_size cgltf_node_index(const cgltf_data* data, const cgltf_node* object); +cgltf_size cgltf_scene_index(const cgltf_data* data, const cgltf_scene* object); +cgltf_size cgltf_animation_index(const cgltf_data* data, const cgltf_animation* object); +cgltf_size cgltf_animation_sampler_index(const cgltf_animation* animation, const cgltf_animation_sampler* object); +cgltf_size cgltf_animation_channel_index(const cgltf_animation* animation, const cgltf_animation_channel* object); + #ifdef __cplusplus } #endif @@ -860,7 +893,7 @@ cgltf_result cgltf_copy_extras_json(const cgltf_data* data, const cgltf_extras* #ifdef CGLTF_IMPLEMENTATION -#include /* For uint8_t, uint32_t */ +#include /* For assert */ #include /* For strncpy */ #include /* For fopen */ #include /* For UINT_MAX etc */ @@ -870,10 +903,6 @@ cgltf_result cgltf_copy_extras_json(const cgltf_data* data, const cgltf_extras* #include /* For malloc, free, atoi, atof */ #endif -#if CGLTF_VALIDATE_ENABLE_ASSERTS -#include -#endif - /* JSMN_PARENT_LINKS is necessary to make parsing large structures linear in input size */ #define JSMN_PARENT_LINKS @@ -902,15 +931,15 @@ enum jsmnerr { }; typedef struct { jsmntype_t type; - int start; - int end; + ptrdiff_t start; + ptrdiff_t end; int size; #ifdef JSMN_PARENT_LINKS int parent; #endif } jsmntok_t; typedef struct { - unsigned int pos; /* offset in the JSON string */ + size_t pos; /* offset in the JSON string */ unsigned int toknext; /* next token to allocate */ int toksuper; /* superior token node, e.g parent object or array */ } jsmn_parser; @@ -922,8 +951,8 @@ static int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, jsmntok_t #ifndef CGLTF_CONSTS -static const cgltf_size GlbHeaderSize = 12; -static const cgltf_size GlbChunkHeaderSize = 8; +#define GlbHeaderSize 12 +#define GlbChunkHeaderSize 8 static const uint32_t GlbVersion = 2; static const uint32_t GlbMagic = 0x46546C67; static const uint32_t GlbMagicJsonChunk = 0x4E4F534A; @@ -995,7 +1024,7 @@ static cgltf_result cgltf_default_file_read(const struct cgltf_memory_options* m { fseek(file, 0, SEEK_END); -#ifdef _WIN32 +#ifdef _MSC_VER __int64 length = _ftelli64(file); #else long length = ftell(file); @@ -1017,7 +1046,7 @@ static cgltf_result cgltf_default_file_read(const struct cgltf_memory_options* m fclose(file); return cgltf_result_out_of_memory; } - + cgltf_size read_size = fread(file_data, 1, file_size, file); fclose(file); @@ -1125,7 +1154,7 @@ cgltf_result cgltf_parse(const cgltf_options* options, const void* data, cgltf_s // JSON chunk: length uint32_t json_length; memcpy(&json_length, json_chunk, 4); - if (GlbHeaderSize + GlbChunkHeaderSize + json_length > size) + if (json_length > size - GlbHeaderSize - GlbChunkHeaderSize) { return cgltf_result_data_too_short; } @@ -1139,10 +1168,10 @@ cgltf_result cgltf_parse(const cgltf_options* options, const void* data, cgltf_s json_chunk += GlbChunkHeaderSize; - const void* bin = 0; + const void* bin = NULL; cgltf_size bin_size = 0; - if (GlbHeaderSize + GlbChunkHeaderSize + json_length + GlbChunkHeaderSize <= size) + if (GlbChunkHeaderSize <= size - GlbHeaderSize - GlbChunkHeaderSize - json_length) { // We can read another chunk const uint8_t* bin_chunk = json_chunk + json_length; @@ -1150,7 +1179,7 @@ cgltf_result cgltf_parse(const cgltf_options* options, const void* data, cgltf_s // Bin chunk: length uint32_t bin_length; memcpy(&bin_length, bin_chunk, 4); - if (GlbHeaderSize + GlbChunkHeaderSize + json_length + GlbChunkHeaderSize + bin_length > size) + if (bin_length > size - GlbHeaderSize - GlbChunkHeaderSize - json_length - GlbChunkHeaderSize) { return cgltf_result_data_too_short; } @@ -1486,8 +1515,6 @@ cgltf_result cgltf_load_buffers(const cgltf_options* options, cgltf_data* data, return cgltf_result_success; } -static cgltf_size cgltf_calc_size(cgltf_type type, cgltf_component_type component_type); - static cgltf_size cgltf_calc_index_bound(cgltf_buffer_view* buffer_view, cgltf_size offset, cgltf_component_type component_type, cgltf_size count) { char* data = (char*)buffer_view->buffer->data + offset + buffer_view->offset; @@ -1538,6 +1565,9 @@ cgltf_result cgltf_validate(cgltf_data* data) { cgltf_accessor* accessor = &data->accessors[i]; + CGLTF_ASSERT_IF(data->accessors[i].component_type == cgltf_component_type_invalid, cgltf_result_invalid_gltf); + CGLTF_ASSERT_IF(data->accessors[i].type == cgltf_type_invalid, cgltf_result_invalid_gltf); + cgltf_size element_size = cgltf_calc_size(accessor->type, accessor->component_type); if (accessor->buffer_view) @@ -1551,7 +1581,7 @@ cgltf_result cgltf_validate(cgltf_data* data) { cgltf_accessor_sparse* sparse = &accessor->sparse; - cgltf_size indices_component_size = cgltf_calc_size(cgltf_type_scalar, sparse->indices_component_type); + cgltf_size indices_component_size = cgltf_component_size(sparse->indices_component_type); cgltf_size indices_req_size = sparse->indices_byte_offset + indices_component_size * sparse->count; cgltf_size values_req_size = sparse->values_byte_offset + element_size * sparse->count; @@ -1617,43 +1647,48 @@ cgltf_result cgltf_validate(cgltf_data* data) for (cgltf_size j = 0; j < data->meshes[i].primitives_count; ++j) { + CGLTF_ASSERT_IF(data->meshes[i].primitives[j].type == cgltf_primitive_type_invalid, cgltf_result_invalid_gltf); CGLTF_ASSERT_IF(data->meshes[i].primitives[j].targets_count != data->meshes[i].primitives[0].targets_count, cgltf_result_invalid_gltf); - if (data->meshes[i].primitives[j].attributes_count) + CGLTF_ASSERT_IF(data->meshes[i].primitives[j].attributes_count == 0, cgltf_result_invalid_gltf); + + cgltf_accessor* first = data->meshes[i].primitives[j].attributes[0].data; + + CGLTF_ASSERT_IF(first->count == 0, cgltf_result_invalid_gltf); + + for (cgltf_size k = 0; k < data->meshes[i].primitives[j].attributes_count; ++k) { - cgltf_accessor* first = data->meshes[i].primitives[j].attributes[0].data; + CGLTF_ASSERT_IF(data->meshes[i].primitives[j].attributes[k].data->count != first->count, cgltf_result_invalid_gltf); + } - for (cgltf_size k = 0; k < data->meshes[i].primitives[j].attributes_count; ++k) + for (cgltf_size k = 0; k < data->meshes[i].primitives[j].targets_count; ++k) + { + for (cgltf_size m = 0; m < data->meshes[i].primitives[j].targets[k].attributes_count; ++m) { - CGLTF_ASSERT_IF(data->meshes[i].primitives[j].attributes[k].data->count != first->count, cgltf_result_invalid_gltf); + CGLTF_ASSERT_IF(data->meshes[i].primitives[j].targets[k].attributes[m].data->count != first->count, cgltf_result_invalid_gltf); } + } - for (cgltf_size k = 0; k < data->meshes[i].primitives[j].targets_count; ++k) - { - for (cgltf_size m = 0; m < data->meshes[i].primitives[j].targets[k].attributes_count; ++m) - { - CGLTF_ASSERT_IF(data->meshes[i].primitives[j].targets[k].attributes[m].data->count != first->count, cgltf_result_invalid_gltf); - } - } + cgltf_accessor* indices = data->meshes[i].primitives[j].indices; - cgltf_accessor* indices = data->meshes[i].primitives[j].indices; + CGLTF_ASSERT_IF(indices && + indices->component_type != cgltf_component_type_r_8u && + indices->component_type != cgltf_component_type_r_16u && + indices->component_type != cgltf_component_type_r_32u, cgltf_result_invalid_gltf); - CGLTF_ASSERT_IF(indices && - indices->component_type != cgltf_component_type_r_8u && - indices->component_type != cgltf_component_type_r_16u && - indices->component_type != cgltf_component_type_r_32u, cgltf_result_invalid_gltf); + CGLTF_ASSERT_IF(indices && indices->type != cgltf_type_scalar, cgltf_result_invalid_gltf); + CGLTF_ASSERT_IF(indices && indices->stride != cgltf_component_size(indices->component_type), cgltf_result_invalid_gltf); - if (indices && indices->buffer_view && indices->buffer_view->buffer->data) - { - cgltf_size index_bound = cgltf_calc_index_bound(indices->buffer_view, indices->offset, indices->component_type, indices->count); + if (indices && indices->buffer_view && indices->buffer_view->buffer->data) + { + cgltf_size index_bound = cgltf_calc_index_bound(indices->buffer_view, indices->offset, indices->component_type, indices->count); - CGLTF_ASSERT_IF(index_bound >= first->count, cgltf_result_data_too_short); - } + CGLTF_ASSERT_IF(index_bound >= first->count, cgltf_result_data_too_short); + } - for (cgltf_size k = 0; k < data->meshes[i].primitives[j].mappings_count; ++k) - { - CGLTF_ASSERT_IF(data->meshes[i].primitives[j].mappings[k].variant >= data->variants_count, cgltf_result_invalid_gltf); - } + for (cgltf_size k = 0; k < data->meshes[i].primitives[j].mappings_count; ++k) + { + CGLTF_ASSERT_IF(data->meshes[i].primitives[j].mappings[k].variant >= data->variants_count, cgltf_result_invalid_gltf); } } } @@ -1710,10 +1745,15 @@ cgltf_result cgltf_validate(cgltf_data* data) cgltf_size values = channel->sampler->interpolation == cgltf_interpolation_type_cubic_spline ? 3 : 1; - CGLTF_ASSERT_IF(channel->sampler->input->count * components * values != channel->sampler->output->count, cgltf_result_data_too_short); + CGLTF_ASSERT_IF(channel->sampler->input->count * components * values != channel->sampler->output->count, cgltf_result_invalid_gltf); } } + for (cgltf_size i = 0; i < data->variants_count; ++i) + { + CGLTF_ASSERT_IF(!data->variants[i].name, cgltf_result_invalid_gltf); + } + return cgltf_result_success; } @@ -1760,12 +1800,6 @@ static void cgltf_free_extensions(cgltf_data* data, cgltf_extension* extensions, data->memory.free_func(data->memory.user_data, extensions); } -static void cgltf_free_texture_view(cgltf_data* data, cgltf_texture_view* view) -{ - cgltf_free_extensions(data, view->extensions, view->extensions_count); - cgltf_free_extras(data, &view->extras); -} - void cgltf_free(cgltf_data* data) { if (!data) @@ -1787,15 +1821,6 @@ void cgltf_free(cgltf_data* data) { data->memory.free_func(data->memory.user_data, data->accessors[i].name); - if(data->accessors[i].is_sparse) - { - cgltf_free_extensions(data, data->accessors[i].sparse.extensions, data->accessors[i].sparse.extensions_count); - cgltf_free_extensions(data, data->accessors[i].sparse.indices_extensions, data->accessors[i].sparse.indices_extensions_count); - cgltf_free_extensions(data, data->accessors[i].sparse.values_extensions, data->accessors[i].sparse.values_extensions_count); - cgltf_free_extras(data, &data->accessors[i].sparse.extras); - cgltf_free_extras(data, &data->accessors[i].sparse.indices_extras); - cgltf_free_extras(data, &data->accessors[i].sparse.values_extras); - } cgltf_free_extensions(data, data->accessors[i].extensions, data->accessors[i].extensions_count); cgltf_free_extras(data, &data->accessors[i].extras); } @@ -1897,57 +1922,13 @@ void cgltf_free(cgltf_data* data) { data->memory.free_func(data->memory.user_data, data->materials[i].name); - if(data->materials[i].has_pbr_metallic_roughness) - { - cgltf_free_texture_view(data, &data->materials[i].pbr_metallic_roughness.metallic_roughness_texture); - cgltf_free_texture_view(data, &data->materials[i].pbr_metallic_roughness.base_color_texture); - } - if(data->materials[i].has_pbr_specular_glossiness) - { - cgltf_free_texture_view(data, &data->materials[i].pbr_specular_glossiness.diffuse_texture); - cgltf_free_texture_view(data, &data->materials[i].pbr_specular_glossiness.specular_glossiness_texture); - } - if(data->materials[i].has_clearcoat) - { - cgltf_free_texture_view(data, &data->materials[i].clearcoat.clearcoat_texture); - cgltf_free_texture_view(data, &data->materials[i].clearcoat.clearcoat_roughness_texture); - cgltf_free_texture_view(data, &data->materials[i].clearcoat.clearcoat_normal_texture); - } - if(data->materials[i].has_specular) - { - cgltf_free_texture_view(data, &data->materials[i].specular.specular_texture); - cgltf_free_texture_view(data, &data->materials[i].specular.specular_color_texture); - } - if(data->materials[i].has_transmission) - { - cgltf_free_texture_view(data, &data->materials[i].transmission.transmission_texture); - } - if (data->materials[i].has_volume) - { - cgltf_free_texture_view(data, &data->materials[i].volume.thickness_texture); - } - if(data->materials[i].has_sheen) - { - cgltf_free_texture_view(data, &data->materials[i].sheen.sheen_color_texture); - cgltf_free_texture_view(data, &data->materials[i].sheen.sheen_roughness_texture); - } - if(data->materials[i].has_iridescence) - { - cgltf_free_texture_view(data, &data->materials[i].iridescence.iridescence_texture); - cgltf_free_texture_view(data, &data->materials[i].iridescence.iridescence_thickness_texture); - } - - cgltf_free_texture_view(data, &data->materials[i].normal_texture); - cgltf_free_texture_view(data, &data->materials[i].occlusion_texture); - cgltf_free_texture_view(data, &data->materials[i].emissive_texture); - cgltf_free_extensions(data, data->materials[i].extensions, data->materials[i].extensions_count); cgltf_free_extras(data, &data->materials[i].extras); } data->memory.free_func(data->memory.user_data, data->materials); - for (cgltf_size i = 0; i < data->images_count; ++i) + for (cgltf_size i = 0; i < data->images_count; ++i) { data->memory.free_func(data->memory.user_data, data->images[i].name); data->memory.free_func(data->memory.user_data, data->images[i].uri); @@ -2195,8 +2176,6 @@ static cgltf_ssize cgltf_component_read_integer(const void* in, cgltf_component_ return *((const uint16_t*) in); case cgltf_component_type_r_32u: return *((const uint32_t*) in); - case cgltf_component_type_r_32f: - return (cgltf_ssize)*((const float*) in); case cgltf_component_type_r_8: return *((const int8_t*) in); case cgltf_component_type_r_8u: @@ -2214,8 +2193,6 @@ static cgltf_size cgltf_component_read_index(const void* in, cgltf_component_typ return *((const uint16_t*) in); case cgltf_component_type_r_32u: return *((const uint32_t*) in); - case cgltf_component_type_r_32f: - return (cgltf_size)*((const float*) in); case cgltf_component_type_r_8u: return *((const uint8_t*) in); default: @@ -2251,8 +2228,6 @@ static cgltf_float cgltf_component_read_float(const void* in, cgltf_component_ty return (cgltf_float)cgltf_component_read_integer(in, component_type); } -static cgltf_size cgltf_component_size(cgltf_component_type component_type); - static cgltf_bool cgltf_element_read_float(const uint8_t* element, cgltf_type type, cgltf_component_type component_type, cgltf_bool normalized, cgltf_float* out, cgltf_size element_size) { cgltf_size num_components = cgltf_num_components(type); @@ -2355,21 +2330,41 @@ cgltf_size cgltf_accessor_unpack_floats(const cgltf_accessor* accessor, cgltf_fl cgltf_size element_count = float_count / floats_per_element; // First pass: convert each element in the base accessor. - cgltf_float* dest = out; - cgltf_accessor dense = *accessor; - dense.is_sparse = 0; - for (cgltf_size index = 0; index < element_count; index++, dest += floats_per_element) + if (accessor->buffer_view == NULL) { - if (!cgltf_accessor_read_float(&dense, index, dest, floats_per_element)) + memset(out, 0, element_count * floats_per_element * sizeof(cgltf_float)); + } + else + { + const uint8_t* element = cgltf_buffer_view_data(accessor->buffer_view); + if (element == NULL) { return 0; } + element += accessor->offset; + + if (accessor->component_type == cgltf_component_type_r_32f && accessor->stride == floats_per_element * sizeof(cgltf_float)) + { + memcpy(out, element, element_count * floats_per_element * sizeof(cgltf_float)); + } + else + { + cgltf_float* dest = out; + + for (cgltf_size index = 0; index < element_count; index++, dest += floats_per_element, element += accessor->stride) + { + if (!cgltf_element_read_float(element, accessor->type, accessor->component_type, accessor->normalized, dest, floats_per_element)) + { + return 0; + } + } + } } // Second pass: write out each element in the sparse accessor. if (accessor->is_sparse) { - const cgltf_accessor_sparse* sparse = &dense.sparse; + const cgltf_accessor_sparse* sparse = &accessor->sparse; const uint8_t* index_data = cgltf_buffer_view_data(sparse->indices_buffer_view); const uint8_t* reader_head = cgltf_buffer_view_data(sparse->values_buffer_view); @@ -2383,17 +2378,15 @@ cgltf_size cgltf_accessor_unpack_floats(const cgltf_accessor* accessor, cgltf_fl reader_head += sparse->values_byte_offset; cgltf_size index_stride = cgltf_component_size(sparse->indices_component_type); - for (cgltf_size reader_index = 0; reader_index < sparse->count; reader_index++, index_data += index_stride) + for (cgltf_size reader_index = 0; reader_index < sparse->count; reader_index++, index_data += index_stride, reader_head += accessor->stride) { size_t writer_index = cgltf_component_read_index(index_data, sparse->indices_component_type); float* writer_head = out + writer_index * floats_per_element; - if (!cgltf_element_read_float(reader_head, dense.type, dense.component_type, dense.normalized, writer_head, floats_per_element)) + if (!cgltf_element_read_float(reader_head, accessor->type, accessor->component_type, accessor->normalized, writer_head, floats_per_element)) { return 0; } - - reader_head += dense.stride; } } @@ -2487,12 +2480,165 @@ cgltf_size cgltf_accessor_read_index(const cgltf_accessor* accessor, cgltf_size return cgltf_component_read_index(element, accessor->component_type); } +cgltf_size cgltf_mesh_index(const cgltf_data* data, const cgltf_mesh* object) +{ + assert(object && (cgltf_size)(object - data->meshes) < data->meshes_count); + return (cgltf_size)(object - data->meshes); +} + +cgltf_size cgltf_material_index(const cgltf_data* data, const cgltf_material* object) +{ + assert(object && (cgltf_size)(object - data->materials) < data->materials_count); + return (cgltf_size)(object - data->materials); +} + +cgltf_size cgltf_accessor_index(const cgltf_data* data, const cgltf_accessor* object) +{ + assert(object && (cgltf_size)(object - data->accessors) < data->accessors_count); + return (cgltf_size)(object - data->accessors); +} + +cgltf_size cgltf_buffer_view_index(const cgltf_data* data, const cgltf_buffer_view* object) +{ + assert(object && (cgltf_size)(object - data->buffer_views) < data->buffer_views_count); + return (cgltf_size)(object - data->buffer_views); +} + +cgltf_size cgltf_buffer_index(const cgltf_data* data, const cgltf_buffer* object) +{ + assert(object && (cgltf_size)(object - data->buffers) < data->buffers_count); + return (cgltf_size)(object - data->buffers); +} + +cgltf_size cgltf_image_index(const cgltf_data* data, const cgltf_image* object) +{ + assert(object && (cgltf_size)(object - data->images) < data->images_count); + return (cgltf_size)(object - data->images); +} + +cgltf_size cgltf_texture_index(const cgltf_data* data, const cgltf_texture* object) +{ + assert(object && (cgltf_size)(object - data->textures) < data->textures_count); + return (cgltf_size)(object - data->textures); +} + +cgltf_size cgltf_sampler_index(const cgltf_data* data, const cgltf_sampler* object) +{ + assert(object && (cgltf_size)(object - data->samplers) < data->samplers_count); + return (cgltf_size)(object - data->samplers); +} + +cgltf_size cgltf_skin_index(const cgltf_data* data, const cgltf_skin* object) +{ + assert(object && (cgltf_size)(object - data->skins) < data->skins_count); + return (cgltf_size)(object - data->skins); +} + +cgltf_size cgltf_camera_index(const cgltf_data* data, const cgltf_camera* object) +{ + assert(object && (cgltf_size)(object - data->cameras) < data->cameras_count); + return (cgltf_size)(object - data->cameras); +} + +cgltf_size cgltf_light_index(const cgltf_data* data, const cgltf_light* object) +{ + assert(object && (cgltf_size)(object - data->lights) < data->lights_count); + return (cgltf_size)(object - data->lights); +} + +cgltf_size cgltf_node_index(const cgltf_data* data, const cgltf_node* object) +{ + assert(object && (cgltf_size)(object - data->nodes) < data->nodes_count); + return (cgltf_size)(object - data->nodes); +} + +cgltf_size cgltf_scene_index(const cgltf_data* data, const cgltf_scene* object) +{ + assert(object && (cgltf_size)(object - data->scenes) < data->scenes_count); + return (cgltf_size)(object - data->scenes); +} + +cgltf_size cgltf_animation_index(const cgltf_data* data, const cgltf_animation* object) +{ + assert(object && (cgltf_size)(object - data->animations) < data->animations_count); + return (cgltf_size)(object - data->animations); +} + +cgltf_size cgltf_animation_sampler_index(const cgltf_animation* animation, const cgltf_animation_sampler* object) +{ + assert(object && (cgltf_size)(object - animation->samplers) < animation->samplers_count); + return (cgltf_size)(object - animation->samplers); +} + +cgltf_size cgltf_animation_channel_index(const cgltf_animation* animation, const cgltf_animation_channel* object) +{ + assert(object && (cgltf_size)(object - animation->channels) < animation->channels_count); + return (cgltf_size)(object - animation->channels); +} + +cgltf_size cgltf_accessor_unpack_indices(const cgltf_accessor* accessor, void* out, cgltf_size out_component_size, cgltf_size index_count) +{ + if (out == NULL) + { + return accessor->count; + } + + index_count = accessor->count < index_count ? accessor->count : index_count; + cgltf_size index_component_size = cgltf_component_size(accessor->component_type); + + if (accessor->is_sparse) + { + return 0; + } + if (accessor->buffer_view == NULL) + { + return 0; + } + if (index_component_size > out_component_size) + { + return 0; + } + const uint8_t* element = cgltf_buffer_view_data(accessor->buffer_view); + if (element == NULL) + { + return 0; + } + element += accessor->offset; + + if (index_component_size == out_component_size && accessor->stride == out_component_size) + { + memcpy(out, element, index_count * index_component_size); + return index_count; + } + + // The component size of the output array is larger than the component size of the index data, so index data will be padded. + switch (out_component_size) + { + case 2: + for (cgltf_size index = 0; index < index_count; index++, element += accessor->stride) + { + ((uint16_t*)out)[index] = (uint16_t)cgltf_component_read_index(element, accessor->component_type); + } + break; + case 4: + for (cgltf_size index = 0; index < index_count; index++, element += accessor->stride) + { + ((uint32_t*)out)[index] = (uint32_t)cgltf_component_read_index(element, accessor->component_type); + } + break; + default: + break; + } + + return index_count; +} + #define CGLTF_ERROR_JSON -1 #define CGLTF_ERROR_NOMEM -2 #define CGLTF_ERROR_LEGACY -3 #define CGLTF_CHECK_TOKTYPE(tok_, type_) if ((tok_).type != (type_)) { return CGLTF_ERROR_JSON; } -#define CGLTF_CHECK_TOKTYPE_RETTYPE(tok_, type_, ret_) if ((tok_).type != (type_)) { return (ret_)CGLTF_ERROR_JSON; } +#define CGLTF_CHECK_TOKTYPE_RET(tok_, type_, ret_) if ((tok_).type != (type_)) { return ret_; } #define CGLTF_CHECK_KEY(tok_) if ((tok_).type != JSMN_STRING || (tok_).size == 0) { return CGLTF_ERROR_JSON; } /* checking size for 0 verifies that a value follows the key */ #define CGLTF_PTRINDEX(type, idx) (type*)((cgltf_size)idx + 1) @@ -2503,7 +2649,7 @@ static int cgltf_json_strcmp(jsmntok_t const* tok, const uint8_t* json_chunk, co { CGLTF_CHECK_TOKTYPE(*tok, JSMN_STRING); size_t const str_len = strlen(str); - size_t const name_length = tok->end - tok->start; + size_t const name_length = (size_t)(tok->end - tok->start); return (str_len == name_length) ? strncmp((const char*)json_chunk + tok->start, str, str_len) : 128; } @@ -2511,7 +2657,7 @@ static int cgltf_json_to_int(jsmntok_t const* tok, const uint8_t* json_chunk) { CGLTF_CHECK_TOKTYPE(*tok, JSMN_PRIMITIVE); char tmp[128]; - int size = (cgltf_size)(tok->end - tok->start) < sizeof(tmp) ? tok->end - tok->start : (int)(sizeof(tmp) - 1); + int size = (size_t)(tok->end - tok->start) < sizeof(tmp) ? (int)(tok->end - tok->start) : (int)(sizeof(tmp) - 1); strncpy(tmp, (const char*)json_chunk + tok->start, size); tmp[size] = 0; return CGLTF_ATOI(tmp); @@ -2519,19 +2665,20 @@ static int cgltf_json_to_int(jsmntok_t const* tok, const uint8_t* json_chunk) static cgltf_size cgltf_json_to_size(jsmntok_t const* tok, const uint8_t* json_chunk) { - CGLTF_CHECK_TOKTYPE_RETTYPE(*tok, JSMN_PRIMITIVE, cgltf_size); + CGLTF_CHECK_TOKTYPE_RET(*tok, JSMN_PRIMITIVE, 0); char tmp[128]; - int size = (cgltf_size)(tok->end - tok->start) < sizeof(tmp) ? tok->end - tok->start : (int)(sizeof(tmp) - 1); + int size = (size_t)(tok->end - tok->start) < sizeof(tmp) ? (int)(tok->end - tok->start) : (int)(sizeof(tmp) - 1); strncpy(tmp, (const char*)json_chunk + tok->start, size); tmp[size] = 0; - return (cgltf_size)CGLTF_ATOLL(tmp); + long long res = CGLTF_ATOLL(tmp); + return res < 0 ? 0 : (cgltf_size)res; } static cgltf_float cgltf_json_to_float(jsmntok_t const* tok, const uint8_t* json_chunk) { CGLTF_CHECK_TOKTYPE(*tok, JSMN_PRIMITIVE); char tmp[128]; - int size = (cgltf_size)(tok->end - tok->start) < sizeof(tmp) ? tok->end - tok->start : (int)(sizeof(tmp) - 1); + int size = (size_t)(tok->end - tok->start) < sizeof(tmp) ? (int)(tok->end - tok->start) : (int)(sizeof(tmp) - 1); strncpy(tmp, (const char*)json_chunk + tok->start, size); tmp[size] = 0; return (cgltf_float)CGLTF_ATOF(tmp); @@ -2539,7 +2686,7 @@ static cgltf_float cgltf_json_to_float(jsmntok_t const* tok, const uint8_t* json static cgltf_bool cgltf_json_to_bool(jsmntok_t const* tok, const uint8_t* json_chunk) { - int size = tok->end - tok->start; + int size = (int)(tok->end - tok->start); return size == 4 && memcmp(json_chunk + tok->start, "true", 4) == 0; } @@ -2605,7 +2752,7 @@ static int cgltf_parse_json_string(cgltf_options* options, jsmntok_t const* toke { return CGLTF_ERROR_JSON; } - int size = tokens[i].end - tokens[i].start; + int size = (int)(tokens[i].end - tokens[i].start); char* result = (char*)options->memory.alloc_func(options->memory.user_data, size + 1); if (!result) { @@ -2706,6 +2853,11 @@ static void cgltf_parse_attribute_type(const char* name, cgltf_attribute_type* o if (us && *out_type != cgltf_attribute_type_invalid) { *out_index = CGLTF_ATOI(us + 1); + if (*out_index < 0) + { + *out_type = cgltf_attribute_type_invalid; + *out_index = 0; + } } } @@ -2863,6 +3015,10 @@ static int cgltf_parse_json_draco_mesh_compression(cgltf_options* options, jsmnt out_draco_mesh_compression->buffer_view = CGLTF_PTRINDEX(cgltf_buffer_view, cgltf_json_to_int(tokens + i, json_chunk)); ++i; } + else + { + i = cgltf_skip_json(tokens, i+1); + } if (i < 0) { @@ -2888,11 +3044,9 @@ static int cgltf_parse_json_mesh_gpu_instancing(cgltf_options* options, jsmntok_ { i = cgltf_parse_json_attribute_list(options, tokens, i + 1, json_chunk, &out_mesh_gpu_instancing->attributes, &out_mesh_gpu_instancing->attributes_count); } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "bufferView") == 0) + else { - ++i; - out_mesh_gpu_instancing->buffer_view = CGLTF_PTRINDEX(cgltf_buffer_view, cgltf_json_to_int(tokens + i, json_chunk)); - ++i; + i = cgltf_skip_json(tokens, i+1); } if (i < 0) @@ -3036,6 +3190,31 @@ static int cgltf_parse_json_material_mappings(cgltf_options* options, jsmntok_t return i; } +static cgltf_primitive_type cgltf_json_to_primitive_type(jsmntok_t const* tok, const uint8_t* json_chunk) +{ + int type = cgltf_json_to_int(tok, json_chunk); + + switch (type) + { + case 0: + return cgltf_primitive_type_points; + case 1: + return cgltf_primitive_type_lines; + case 2: + return cgltf_primitive_type_line_loop; + case 3: + return cgltf_primitive_type_line_strip; + case 4: + return cgltf_primitive_type_triangles; + case 5: + return cgltf_primitive_type_triangle_strip; + case 6: + return cgltf_primitive_type_triangle_fan; + default: + return cgltf_primitive_type_invalid; + } +} + static int cgltf_parse_json_primitive(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_primitive* out_prim) { CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT); @@ -3052,9 +3231,7 @@ static int cgltf_parse_json_primitive(cgltf_options* options, jsmntok_t const* t if (cgltf_json_strcmp(tokens+i, json_chunk, "mode") == 0) { ++i; - out_prim->type - = (cgltf_primitive_type) - cgltf_json_to_int(tokens+i, json_chunk); + out_prim->type = cgltf_json_to_primitive_type(tokens+i, json_chunk); ++i; } else if (cgltf_json_strcmp(tokens+i, json_chunk, "indices") == 0) @@ -3290,7 +3467,7 @@ static cgltf_component_type cgltf_json_to_component_type(jsmntok_t const* tok, c } } -static int cgltf_parse_json_accessor_sparse(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_accessor_sparse* out_sparse) +static int cgltf_parse_json_accessor_sparse(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_accessor_sparse* out_sparse) { CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT); @@ -3304,7 +3481,7 @@ static int cgltf_parse_json_accessor_sparse(cgltf_options* options, jsmntok_t co if (cgltf_json_strcmp(tokens+i, json_chunk, "count") == 0) { ++i; - out_sparse->count = cgltf_json_to_int(tokens + i, json_chunk); + out_sparse->count = cgltf_json_to_size(tokens + i, json_chunk); ++i; } else if (cgltf_json_strcmp(tokens+i, json_chunk, "indices") == 0) @@ -3337,14 +3514,6 @@ static int cgltf_parse_json_accessor_sparse(cgltf_options* options, jsmntok_t co out_sparse->indices_component_type = cgltf_json_to_component_type(tokens + i, json_chunk); ++i; } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0) - { - i = cgltf_parse_json_extras(options, tokens, i + 1, json_chunk, &out_sparse->indices_extras); - } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensions") == 0) - { - i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_sparse->indices_extensions_count, &out_sparse->indices_extensions); - } else { i = cgltf_skip_json(tokens, i+1); @@ -3380,14 +3549,6 @@ static int cgltf_parse_json_accessor_sparse(cgltf_options* options, jsmntok_t co out_sparse->values_byte_offset = cgltf_json_to_size(tokens + i, json_chunk); ++i; } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0) - { - i = cgltf_parse_json_extras(options, tokens, i + 1, json_chunk, &out_sparse->values_extras); - } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensions") == 0) - { - i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_sparse->values_extensions_count, &out_sparse->values_extensions); - } else { i = cgltf_skip_json(tokens, i+1); @@ -3399,14 +3560,6 @@ static int cgltf_parse_json_accessor_sparse(cgltf_options* options, jsmntok_t co } } } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0) - { - i = cgltf_parse_json_extras(options, tokens, i + 1, json_chunk, &out_sparse->extras); - } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensions") == 0) - { - i = cgltf_parse_json_unprocessed_extensions(options, tokens, i, json_chunk, &out_sparse->extensions_count, &out_sparse->extensions); - } else { i = cgltf_skip_json(tokens, i+1); @@ -3464,8 +3617,7 @@ static int cgltf_parse_json_accessor(cgltf_options* options, jsmntok_t const* to else if (cgltf_json_strcmp(tokens+i, json_chunk, "count") == 0) { ++i; - out_accessor->count = - cgltf_json_to_int(tokens+i, json_chunk); + out_accessor->count = cgltf_json_to_size(tokens+i, json_chunk); ++i; } else if (cgltf_json_strcmp(tokens+i, json_chunk, "type") == 0) @@ -3520,7 +3672,7 @@ static int cgltf_parse_json_accessor(cgltf_options* options, jsmntok_t const* to else if (cgltf_json_strcmp(tokens + i, json_chunk, "sparse") == 0) { out_accessor->is_sparse = 1; - i = cgltf_parse_json_accessor_sparse(options, tokens, i + 1, json_chunk, &out_accessor->sparse); + i = cgltf_parse_json_accessor_sparse(tokens, i + 1, json_chunk, &out_accessor->sparse); } else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0) { @@ -3592,6 +3744,8 @@ static int cgltf_parse_json_texture_transform(jsmntok_t const* tokens, int i, co static int cgltf_parse_json_texture_view(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_texture_view* out_texture_view) { + (void)options; + CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT); out_texture_view->scale = 1.0f; @@ -3616,7 +3770,7 @@ static int cgltf_parse_json_texture_view(cgltf_options* options, jsmntok_t const out_texture_view->texcoord = cgltf_json_to_int(tokens + i, json_chunk); ++i; } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "scale") == 0) + else if (cgltf_json_strcmp(tokens + i, json_chunk, "scale") == 0) { ++i; out_texture_view->scale = cgltf_json_to_float(tokens + i, json_chunk); @@ -3628,28 +3782,12 @@ static int cgltf_parse_json_texture_view(cgltf_options* options, jsmntok_t const out_texture_view->scale = cgltf_json_to_float(tokens + i, json_chunk); ++i; } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "extras") == 0) - { - i = cgltf_parse_json_extras(options, tokens, i + 1, json_chunk, &out_texture_view->extras); - } else if (cgltf_json_strcmp(tokens + i, json_chunk, "extensions") == 0) { ++i; CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT); - if(out_texture_view->extensions) - { - return CGLTF_ERROR_JSON; - } - int extensions_size = tokens[i].size; - out_texture_view->extensions_count = 0; - out_texture_view->extensions = (cgltf_extension*)cgltf_calloc(options, sizeof(cgltf_extension), extensions_size); - - if (!out_texture_view->extensions) - { - return CGLTF_ERROR_NOMEM; - } ++i; @@ -3664,7 +3802,7 @@ static int cgltf_parse_json_texture_view(cgltf_options* options, jsmntok_t const } else { - i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &(out_texture_view->extensions[out_texture_view->extensions_count++])); + i = cgltf_skip_json(tokens, i + 1); } if (i < 0) @@ -3701,11 +3839,11 @@ static int cgltf_parse_json_pbr_metallic_roughness(cgltf_options* options, jsmnt if (cgltf_json_strcmp(tokens+i, json_chunk, "metallicFactor") == 0) { ++i; - out_pbr->metallic_factor = + out_pbr->metallic_factor = cgltf_json_to_float(tokens + i, json_chunk); ++i; } - else if (cgltf_json_strcmp(tokens+i, json_chunk, "roughnessFactor") == 0) + else if (cgltf_json_strcmp(tokens+i, json_chunk, "roughnessFactor") == 0) { ++i; out_pbr->roughness_factor = @@ -3718,13 +3856,11 @@ static int cgltf_parse_json_pbr_metallic_roughness(cgltf_options* options, jsmnt } else if (cgltf_json_strcmp(tokens+i, json_chunk, "baseColorTexture") == 0) { - i = cgltf_parse_json_texture_view(options, tokens, i + 1, json_chunk, - &out_pbr->base_color_texture); + i = cgltf_parse_json_texture_view(options, tokens, i + 1, json_chunk, &out_pbr->base_color_texture); } else if (cgltf_json_strcmp(tokens + i, json_chunk, "metallicRoughnessTexture") == 0) { - i = cgltf_parse_json_texture_view(options, tokens, i + 1, json_chunk, - &out_pbr->metallic_roughness_texture); + i = cgltf_parse_json_texture_view(options, tokens, i + 1, json_chunk, &out_pbr->metallic_roughness_texture); } else { @@ -4127,6 +4263,78 @@ static int cgltf_parse_json_iridescence(cgltf_options* options, jsmntok_t const* return i; } +static int cgltf_parse_json_anisotropy(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_anisotropy* out_anisotropy) +{ + CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT); + int size = tokens[i].size; + ++i; + + + for (int j = 0; j < size; ++j) + { + CGLTF_CHECK_KEY(tokens[i]); + + if (cgltf_json_strcmp(tokens + i, json_chunk, "anisotropyStrength") == 0) + { + ++i; + out_anisotropy->anisotropy_strength = cgltf_json_to_float(tokens + i, json_chunk); + ++i; + } + else if (cgltf_json_strcmp(tokens + i, json_chunk, "anisotropyRotation") == 0) + { + ++i; + out_anisotropy->anisotropy_rotation = cgltf_json_to_float(tokens + i, json_chunk); + ++i; + } + else if (cgltf_json_strcmp(tokens + i, json_chunk, "anisotropyTexture") == 0) + { + i = cgltf_parse_json_texture_view(options, tokens, i + 1, json_chunk, &out_anisotropy->anisotropy_texture); + } + else + { + i = cgltf_skip_json(tokens, i + 1); + } + + if (i < 0) + { + return i; + } + } + + return i; +} + +static int cgltf_parse_json_dispersion(jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_dispersion* out_dispersion) +{ + CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT); + int size = tokens[i].size; + ++i; + + + for (int j = 0; j < size; ++j) + { + CGLTF_CHECK_KEY(tokens[i]); + + if (cgltf_json_strcmp(tokens + i, json_chunk, "dispersion") == 0) + { + ++i; + out_dispersion->dispersion = cgltf_json_to_float(tokens + i, json_chunk); + ++i; + } + else + { + i = cgltf_skip_json(tokens, i + 1); + } + + if (i < 0) + { + return i; + } + } + + return i; +} + static int cgltf_parse_json_image(cgltf_options* options, jsmntok_t const* tokens, int i, const uint8_t* json_chunk, cgltf_image* out_image) { CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT); @@ -4134,11 +4342,11 @@ static int cgltf_parse_json_image(cgltf_options* options, jsmntok_t const* token int size = tokens[i].size; ++i; - for (int j = 0; j < size; ++j) + for (int j = 0; j < size; ++j) { CGLTF_CHECK_KEY(tokens[i]); - if (cgltf_json_strcmp(tokens + i, json_chunk, "uri") == 0) + if (cgltf_json_strcmp(tokens + i, json_chunk, "uri") == 0) { i = cgltf_parse_json_string(options, tokens, i + 1, json_chunk, &out_image->uri); } @@ -4218,7 +4426,7 @@ static int cgltf_parse_json_sampler(cgltf_options* options, jsmntok_t const* tok = cgltf_json_to_int(tokens + i, json_chunk); ++i; } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "wrapT") == 0) + else if (cgltf_json_strcmp(tokens + i, json_chunk, "wrapT") == 0) { ++i; out_sampler->wrap_t @@ -4268,7 +4476,7 @@ static int cgltf_parse_json_texture(cgltf_options* options, jsmntok_t const* tok out_texture->sampler = CGLTF_PTRINDEX(cgltf_sampler, cgltf_json_to_int(tokens + i, json_chunk)); ++i; } - else if (cgltf_json_strcmp(tokens + i, json_chunk, "source") == 0) + else if (cgltf_json_strcmp(tokens + i, json_chunk, "source") == 0) { ++i; out_texture->image = CGLTF_PTRINDEX(cgltf_image, cgltf_json_to_int(tokens + i, json_chunk)); @@ -4515,6 +4723,16 @@ static int cgltf_parse_json_material(cgltf_options* options, jsmntok_t const* to out_material->has_iridescence = 1; i = cgltf_parse_json_iridescence(options, tokens, i + 1, json_chunk, &out_material->iridescence); } + else if (cgltf_json_strcmp(tokens + i, json_chunk, "KHR_materials_anisotropy") == 0) + { + out_material->has_anisotropy = 1; + i = cgltf_parse_json_anisotropy(options, tokens, i + 1, json_chunk, &out_material->anisotropy); + } + else if (cgltf_json_strcmp(tokens + i, json_chunk, "KHR_materials_dispersion") == 0) + { + out_material->has_dispersion = 1; + i = cgltf_parse_json_dispersion(tokens, i + 1, json_chunk, &out_material->dispersion); + } else { i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &(out_material->extensions[out_material->extensions_count++])); @@ -4674,7 +4892,7 @@ static int cgltf_parse_json_meshopt_compression(cgltf_options* options, jsmntok_ else if (cgltf_json_strcmp(tokens+i, json_chunk, "count") == 0) { ++i; - out_meshopt_compression->count = cgltf_json_to_int(tokens+i, json_chunk); + out_meshopt_compression->count = cgltf_json_to_size(tokens+i, json_chunk); ++i; } else if (cgltf_json_strcmp(tokens+i, json_chunk, "mode") == 0) @@ -5963,7 +6181,7 @@ cgltf_size cgltf_num_components(cgltf_type type) { } } -static cgltf_size cgltf_component_size(cgltf_component_type component_type) { +cgltf_size cgltf_component_size(cgltf_component_type component_type) { switch (component_type) { case cgltf_component_type_r_8: @@ -5981,7 +6199,7 @@ static cgltf_size cgltf_component_size(cgltf_component_type component_type) { } } -static cgltf_size cgltf_calc_size(cgltf_type type, cgltf_component_type component_type) +cgltf_size cgltf_calc_size(cgltf_type type, cgltf_component_type component_type) { cgltf_size component_size = cgltf_component_size(component_type); if (type == cgltf_type_mat2 && component_size == 1) @@ -6366,6 +6584,8 @@ static int cgltf_fixup_pointers(cgltf_data* data) CGLTF_PTRFIXUP(data->materials[i].iridescence.iridescence_texture.texture, data->textures, data->textures_count); CGLTF_PTRFIXUP(data->materials[i].iridescence.iridescence_thickness_texture.texture, data->textures, data->textures_count); + + CGLTF_PTRFIXUP(data->materials[i].anisotropy.anisotropy_texture.texture, data->textures, data->textures_count); } for (cgltf_size i = 0; i < data->buffer_views_count; ++i) @@ -6410,7 +6630,6 @@ static int cgltf_fixup_pointers(cgltf_data* data) if (data->nodes[i].has_mesh_gpu_instancing) { - CGLTF_PTRFIXUP_REQ(data->nodes[i].mesh_gpu_instancing.buffer_view, data->buffer_views, data->buffer_views_count); for (cgltf_size m = 0; m < data->nodes[i].mesh_gpu_instancing.attributes_count; ++m) { CGLTF_PTRFIXUP_REQ(data->nodes[i].mesh_gpu_instancing.attributes[m].data, data->accessors, data->accessors_count); @@ -6499,7 +6718,7 @@ static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser, * Fills token type and boundaries. */ static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type, - int start, int end) { + ptrdiff_t start, ptrdiff_t end) { token->type = type; token->start = start; token->end = end; @@ -6512,7 +6731,7 @@ static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type, static int jsmn_parse_primitive(jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, size_t num_tokens) { jsmntok_t *token; - int start; + ptrdiff_t start; start = parser->pos; @@ -6562,7 +6781,7 @@ static int jsmn_parse_string(jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, size_t num_tokens) { jsmntok_t *token; - int start = parser->pos; + ptrdiff_t start = parser->pos; parser->pos++; diff --git a/vendor/cgltf/src/cgltf_write.h b/vendor/cgltf/src/cgltf_write.h index 033b0d1cc..aa648a479 100644 --- a/vendor/cgltf/src/cgltf_write.h +++ b/vendor/cgltf/src/cgltf_write.h @@ -1,7 +1,7 @@ /** * cgltf_write - a single-file glTF 2.0 writer written in C99. * - * Version: 1.13 + * Version: 1.14 * * Website: https://github.com/jkuhlmann/cgltf * @@ -85,6 +85,8 @@ cgltf_size cgltf_write(const cgltf_options* options, char* buffer, cgltf_size si #define CGLTF_EXTENSION_FLAG_MATERIALS_EMISSIVE_STRENGTH (1 << 13) #define CGLTF_EXTENSION_FLAG_MESH_GPU_INSTANCING (1 << 14) #define CGLTF_EXTENSION_FLAG_MATERIALS_IRIDESCENCE (1 << 15) +#define CGLTF_EXTENSION_FLAG_MATERIALS_ANISOTROPY (1 << 16) +#define CGLTF_EXTENSION_FLAG_MATERIALS_DISPERSION (1 << 17) typedef struct { char* buffer; @@ -152,7 +154,6 @@ typedef struct { context->extension_flags |= CGLTF_EXTENSION_FLAG_TEXTURE_TRANSFORM; \ cgltf_write_texture_transform(context, &info.transform); \ } \ - cgltf_write_extras(context, &info.extras); \ cgltf_write_line(context, "}"); } #define CGLTF_WRITE_NORMAL_TEXTURE_INFO(label, info) if (info.texture) { \ @@ -164,7 +165,6 @@ typedef struct { context->extension_flags |= CGLTF_EXTENSION_FLAG_TEXTURE_TRANSFORM; \ cgltf_write_texture_transform(context, &info.transform); \ } \ - cgltf_write_extras(context, &info.extras); \ cgltf_write_line(context, "}"); } #define CGLTF_WRITE_OCCLUSION_TEXTURE_INFO(label, info) if (info.texture) { \ @@ -176,12 +176,11 @@ typedef struct { context->extension_flags |= CGLTF_EXTENSION_FLAG_TEXTURE_TRANSFORM; \ cgltf_write_texture_transform(context, &info.transform); \ } \ - cgltf_write_extras(context, &info.extras); \ cgltf_write_line(context, "}"); } #ifndef CGLTF_CONSTS -static const cgltf_size GlbHeaderSize = 12; -static const cgltf_size GlbChunkHeaderSize = 8; +#define GlbHeaderSize 12 +#define GlbChunkHeaderSize 8 static const uint32_t GlbVersion = 2; static const uint32_t GlbMagic = 0x46546C67; static const uint32_t GlbMagicJsonChunk = 0x4E4F534A; @@ -360,6 +359,21 @@ static int cgltf_int_from_component_type(cgltf_component_type ctype) } } +static int cgltf_int_from_primitive_type(cgltf_primitive_type ctype) +{ + switch (ctype) + { + case cgltf_primitive_type_points: return 0; + case cgltf_primitive_type_lines: return 1; + case cgltf_primitive_type_line_loop: return 2; + case cgltf_primitive_type_line_strip: return 3; + case cgltf_primitive_type_triangles: return 4; + case cgltf_primitive_type_triangle_strip: return 5; + case cgltf_primitive_type_triangle_fan: return 6; + default: return -1; + } +} + static const char* cgltf_str_from_alpha_mode(cgltf_alpha_mode alpha_mode) { switch (alpha_mode) @@ -455,7 +469,7 @@ static void cgltf_write_asset(cgltf_write_context* context, const cgltf_asset* a static void cgltf_write_primitive(cgltf_write_context* context, const cgltf_primitive* prim) { - cgltf_write_intprop(context, "mode", (int) prim->type, 4); + cgltf_write_intprop(context, "mode", cgltf_int_from_primitive_type(prim->type), 4); CGLTF_WRITE_IDXPROP("indices", prim->indices, context->data->accessors); CGLTF_WRITE_IDXPROP("material", prim->material, context->data->materials); cgltf_write_line(context, "\"attributes\": {"); @@ -641,6 +655,16 @@ static void cgltf_write_material(cgltf_write_context* context, const cgltf_mater context->extension_flags |= CGLTF_EXTENSION_FLAG_MATERIALS_IRIDESCENCE; } + if (material->has_anisotropy) + { + context->extension_flags |= CGLTF_EXTENSION_FLAG_MATERIALS_ANISOTROPY; + } + + if (material->has_dispersion) + { + context->extension_flags |= CGLTF_EXTENSION_FLAG_MATERIALS_DISPERSION; + } + if (material->has_pbr_metallic_roughness) { const cgltf_pbr_metallic_roughness* params = &material->pbr_metallic_roughness; @@ -656,7 +680,7 @@ static void cgltf_write_material(cgltf_write_context* context, const cgltf_mater cgltf_write_line(context, "}"); } - if (material->unlit || material->has_pbr_specular_glossiness || material->has_clearcoat || material->has_ior || material->has_specular || material->has_transmission || material->has_sheen || material->has_volume || material->has_emissive_strength || material->has_iridescence) + if (material->unlit || material->has_pbr_specular_glossiness || material->has_clearcoat || material->has_ior || material->has_specular || material->has_transmission || material->has_sheen || material->has_volume || material->has_emissive_strength || material->has_iridescence || material->has_anisotropy || material->has_dispersion) { cgltf_write_line(context, "\"extensions\": {"); if (material->has_clearcoat) @@ -767,6 +791,22 @@ static void cgltf_write_material(cgltf_write_context* context, const cgltf_mater CGLTF_WRITE_TEXTURE_INFO("iridescenceThicknessTexture", params->iridescence_thickness_texture); cgltf_write_line(context, "}"); } + if (material->has_anisotropy) + { + cgltf_write_line(context, "\"KHR_materials_anisotropy\": {"); + const cgltf_anisotropy* params = &material->anisotropy; + cgltf_write_floatprop(context, "anisotropyFactor", params->anisotropy_strength, 0.f); + cgltf_write_floatprop(context, "anisotropyRotation", params->anisotropy_rotation, 0.f); + CGLTF_WRITE_TEXTURE_INFO("anisotropyTexture", params->anisotropy_texture); + cgltf_write_line(context, "}"); + } + if (material->has_dispersion) + { + cgltf_write_line(context, "\"KHR_materials_dispersion\": {"); + const cgltf_dispersion* params = &material->dispersion; + cgltf_write_floatprop(context, "dispersion", params->dispersion, 0.f); + cgltf_write_line(context, "}"); + } cgltf_write_line(context, "}"); } @@ -977,7 +1017,6 @@ static void cgltf_write_node(cgltf_write_context* context, const cgltf_node* nod cgltf_write_line(context, "\"EXT_mesh_gpu_instancing\": {"); { - CGLTF_WRITE_IDXPROP("bufferView", node->mesh_gpu_instancing.buffer_view, context->data->buffer_views); cgltf_write_line(context, "\"attributes\": {"); { for (cgltf_size i = 0; i < node->mesh_gpu_instancing.attributes_count; ++i) @@ -1044,14 +1083,11 @@ static void cgltf_write_accessor(cgltf_write_context* context, const cgltf_acces cgltf_write_sizeprop(context, "byteOffset", (int)accessor->sparse.indices_byte_offset, 0); CGLTF_WRITE_IDXPROP("bufferView", accessor->sparse.indices_buffer_view, context->data->buffer_views); cgltf_write_intprop(context, "componentType", cgltf_int_from_component_type(accessor->sparse.indices_component_type), 0); - cgltf_write_extras(context, &accessor->sparse.indices_extras); cgltf_write_line(context, "}"); cgltf_write_line(context, "\"values\": {"); cgltf_write_sizeprop(context, "byteOffset", (int)accessor->sparse.values_byte_offset, 0); CGLTF_WRITE_IDXPROP("bufferView", accessor->sparse.values_buffer_view, context->data->buffer_views); - cgltf_write_extras(context, &accessor->sparse.values_extras); cgltf_write_line(context, "}"); - cgltf_write_extras(context, &accessor->sparse.extras); cgltf_write_line(context, "}"); } cgltf_write_extras(context, &accessor->extras); @@ -1123,6 +1159,7 @@ static void cgltf_write_light(cgltf_write_context* context, const cgltf_light* l cgltf_write_floatprop(context, "outerConeAngle", light->spot_outer_cone_angle, 3.14159265358979323846f/4.0f); cgltf_write_line(context, "}"); } + cgltf_write_extras( context, &light->extras ); cgltf_write_line(context, "}"); } @@ -1249,9 +1286,15 @@ static void cgltf_write_extensions(cgltf_write_context* context, uint32_t extens if (extension_flags & CGLTF_EXTENSION_FLAG_MATERIALS_IRIDESCENCE) { cgltf_write_stritem(context, "KHR_materials_iridescence"); } + if (extension_flags & CGLTF_EXTENSION_FLAG_MATERIALS_ANISOTROPY) { + cgltf_write_stritem(context, "KHR_materials_anisotropy"); + } if (extension_flags & CGLTF_EXTENSION_FLAG_MESH_GPU_INSTANCING) { cgltf_write_stritem(context, "EXT_mesh_gpu_instancing"); } + if (extension_flags & CGLTF_EXTENSION_FLAG_MATERIALS_DISPERSION) { + cgltf_write_stritem(context, "KHR_materials_dispersion"); + } } cgltf_size cgltf_write(const cgltf_options* options, char* buffer, cgltf_size size, const cgltf_data* data) From 3e63f598a0bdeb5e7a7d4adaffa019a4a6ad99c4 Mon Sep 17 00:00:00 2001 From: shashank Date: Sun, 29 Dec 2024 20:07:36 +0530 Subject: [PATCH 36/91] build cgltf lib --- vendor/cgltf/lib/cgltf.lib | Bin 347066 -> 376502 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/vendor/cgltf/lib/cgltf.lib b/vendor/cgltf/lib/cgltf.lib index 0d7ea6f9b4a4d895c063f949e631315ef8e35e8c..6dddf3baf2b14c6bd553bd6c0228187114cb63b1 100644 GIT binary patch literal 376502 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 literal 347066 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

_Vn@3%S&=(nUlZtu+KFZSkOP|aowzs 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®~xe@gfl2Fk%$~ zQYv2nDU~dcQYq~ZEwl7$Um#6eaK%qACJ%w_u4%ox9%56-Ok7+^^XSCIuo^FJBMTFx z3dcmk8e3_r50paVb7r>*upA$Sm%Jxb(e%2vS+d;RZvw9xS7t{I!&AIw{0ujkaV2Nj z7qA{*ZZ2DYG&}_2{znxXZVL*E``%{y0MgE`N^I(J!BOV5R!fq9;}T)^&B#N%oYgTX z@=!Pa{$Avv?)<%bK zeIzsMIMe}y9Dr94G-_7|Kn<)Runrdx+@k-h9qZKPf?@u8EM>2Ee19nx@KDEqrO;@E zIx6|{S*WA$QtaeH9le%9z(f$o`FPq2D>Xa!$%t`PD;iCQXyfQgJBICOH(;GL zy2=iX{1uk}xI~~M8ia;5?Ho&w9>G_x$NBIkH@)G$ucI&1!_Tt1#ke|Kequ;(vRta1LDz%s>#KkytP z^!iY60e9-cd|pH%|9ew<(K?XVF<`Yi9cVr2j4?BPwb&ureV!dV3^id_=m_*N$!~oK zAS;_ieiyj~4LEe}2DFdeE}j90&SjZ8>)hRob?(?4v%Z={?9L^l9`vh)%#O_Zvk(4j zevQr>2v*~az3;g5(pPUnUF;6rHf3-!PhUOlJ8K6gPn9&>wVv0n#{VDo-UP6U>VEs5 zkN_bBZa~DKsDXlFK}A3Xamj@MHxd>hA{G@QgyknBF}YE2MH3ZzNpY=IZR^rnTi3dx zwGu=YwJKT{+$vUWp@_x0fwj&1Jm;A+ckX3w64Zp>`+xt_8a{XCoacPce&)k5-DbL(d0k|D@I9X&<9vqMRQ9B~dNlrOYdH5vYHRoykhX^N`!d=ZemY27 z!}%>9Z4EyMq^;pqAX&c*B@ z?oI&x)7TsVooCKX25mRz&H`1LbMrxp+hWj7=G+p{4&&~Zpr4y_{92vPJqeP{uYqLq zJ0RKoK1eoy4C-%2_Mb8oa=x_SagwnRX(Wg^(aNF|3~*i#tGKzuoT zhVxU9$_t;eC>{@hboa6fq|i2j6xw?rh4vvxq5Tu2nTxMMictedp&gEAAyOF)lFB%c zR3?F>awg~~lP+^XQdt0!%5~n=`#?&U$3aS$7eNZ+?;wTo2}ogl22vRR1u0#!@yx`X zg$F5&1t7)zB9QcM07>r_ko0Z?Nsr%oR?Hs*$!0#Gk=~~u={cEJuLnqadZ$Z*~7$m(_AnEa0jr1~6OZbJ3bSE41n4ugH zYiYXE4fMF7T+kDSdV=_Y4!mXp^hZN|Ku;O!2jcKO-5CI?H#88m+RzXXKPHgw3uYbB@oAo->p`8Ltf=$hY_4hV@O}XrfQ~ zntNoYZb75lx;Mx)8DM6h`1*eg+e~FMH4nw_JI+ca z6!TO=M!c1G+8WH4xeeg4AT@v|g46(x1gQZW57Kb%bdVarvp{M9Zv?3seE=kt$3Rkf z5+s%NAPwhU0cj}n4oE6|N4iw_wri^l@B( z3naaVK0!eQTNP5XrsO%gH@dEwW*R45&I(Ylib0U#pM?^2Sl_)ao988|#ubDhO z5BA!bg@mc0c6QRT|CmfW!+{w|%~kGfhj%vbQLo_E;KaaNq8sq$rP^Ws*u=doGgNyE zs!4DHEKHRE{%Kn;1^O?^L?Mr?T(nR}eD=2ecbmN(pTjqR4d$P|{Ieh5HrBz;lkUM3 zYGMkv%oM8HVI;1`1qlV}d(Tt6eKglL!U_FA3x#jP3Ya6v=NthBcTw}LnSs;S9E4(} zmSPx4Ek!;^EyXC1T8fDvwg1yVYAI%b)KXjzlFGdxsXPpl%HtrZtO4m82QPwj+wcKM zDqT=8rSe0NRQO^OsT>263SWlU)3mQeAlY&XNGklauCCqyk{&+}C%s2N(&H;{q{n5E zoz2w3Mv$yZM~f^y-q`mrq4CCk0S3z%4sY!Bl4#!8-)YYA#{M7X;pU#)*mp7E2Hn_y z1U*^*Uy!V4?;z{5K(c;cklOG(kW!;BNY0JSm-j6}jy8$GX&Op4N{bU4pM%#u1++3vKc7i{=GQXKi>-mHZo5@Sgs)u}ABJ^fa|^%PQkcHcn!Nh!?`RTVo=@>pw zUxQ^OZlyX3q)Iguq)NpngQ`?4wrV~ngH)-ef>fz~22vAqJE)^+67B|N8e&7*)({8M zs={x86xv@v3he`sLi+^N#`xF;(l9$6O`Ad+1(M1PkW}V?q%t2Q6*i>bm@S?*ceKWbFtFntcmnE%c16p z!)K-BYar?E#pVe&@aPA01D}PFn_E2HC;!#9?6z(L6uSiPgKLQHwa|0+YUsIpG4#4A zc{a=c?`*DCmPnEVFq)NLMq)NLHw7=1N8>9y5BakXBXW683 zEJ!N6+n35nkW|Kl4m2vf+n35rkW~2j4ykaACzU5bQdtd>%AY`aM&%8VRNez z27{z>97rmh0gwte!Q5AIgR-Pj zd=E&an9rYZICSGUo|zKg4EP}2})7RT6MC|t7Yct&-XQK*~8~Q zd?$6NmVKKo)X9T3_6>mzjPGV`f^W)g1+`YrnXMx}<<|B)-L#p99f1`RSL{Z0|Ei+c zm^{~N-&s7KsIc+;zjLJ0(v>$pFEs$wL=}s#NK(b(ONUgkI8xyjxD1CQ72WFa)=3rX zL69mh$0Dk{9E<1?JjWtB_g7G@QQ>c$+XYf3=Vmlj@U>nxe z9*v*z8kjIeyUn=Ns?~%!|KJ7FdszQtiI1MY(|q)v1sxlc89FT52h(cE5xjjrbj9CO zrop!vsY&YGv^Aw46}Czu4x2zq`3DO44b&bU5jB z&)r?4{mIjZRCl5b%tcAJ@`(xG67j{JzrgqoE6<7Uw`Z{%R^C%yY!jOl^FDzwPZ~D0 z&;xda;pAkfpDBr^SwKV4I*+9DzpqEqKS$Q;6E$~&^og4LKx#bs zAX<$lM{8<4{|r*&`4^B@+-(JE6!sZNjVE7|E0qx-sqm4sRM_-Og*T}h5zYchr3@7B z4y5ut&PnAJkW|9L~6{ zG3S2dotq7M%$z&dJ9jbY33G0VckXtOEai$NS<3ZCvXm=~Wa%rQV~qvxf@JAmL9#S6 z-CpHGY*~6Z==UbHp&(gW0D9P*o8XqMn>%Bbp!9lr>jg)Hq&E&Ey-6VHoe7fOT#)n@fTU;cVENo6 zFZNa>w(HBM)1r3sh3R&`T+@cH_*cIc(~J1OT$2%SE;Habkl&q{zGgqvQ0>|43DO?6ejx4H z8|a-o9;7{c1>QM6-qfBw&dSU0ERgo>&G*hN1ZmISV(;8CkoN5HF{u3h5~MwQzwyp- z9$$O*IFB!P&w{jP?`7{CTOaM&`ZyHIU+gpPOYaLd}(cH|ho-hw&n{$J}OPWS`~2183$@Djh3vzY8SJKuP(byWGS{w;JYtd4!h95dynNi;(K0yAmXNm zZ74_$(McdRL@dy1h$evMnhCTsKx%#-0m(1tW963*lH~UtkoFOV9suRv1a z6M6aNosayU0FvLypfclkHb_45C-cke+J8AU5^D=7Co=e%2<8{_v7V?X_Vu{fhQY7! zb3CzKDk?Fg%O-=ImyF>P_Z#uDrlQym_wts=@J-Q!xvEyXi}2+mH$#eIFTlN=x%b9y zOA18{gsL;^Mz-5p0plVKFBC1E)n{VONf>7j;fdH&58$7{&lbh*yvzJvTeCTRHotn9 zm-iG}ac5mYpWgVI?|*r&54P6y--$DaplHJK^+lnAU2q@ikFP(~<0Cqs7UB!s*t&?X zSE0qlQ&b~ zh2x#Nj1yDK%6nl{Tf^IqUz?G`5ulHtnBfcqU2JHacaHPJ<>nmchfgp*qM(K59A}F2&AA%T zxl+O3YD3dKs`Th8j~?~tS&u&U=yMQDOon-5)kTJKkW2gEzYIGk?|t7^%j7;SjBROT zr5uNjflUbSU{ymnMeP+`Z0X&7iW;w3d^*zqIc_yZ6O!Y8Fp9I2%;Lc;?N}x^(kzo> ziysgmZgL9#X!nS18<^l_Y)UVqtPi%S;m12LM3@`;QT@L{T~J+A40dbpxj8z%WeHyb z;`gIYF`GycKUj;`PvSFP;guXj2NGFUXTz9?;E zKlWEeOGoA*yP`QohvBP?>Gh@nBKzW7=?`s|bm+AD&q6<1rvl_JIVelExSMVD&$8q^ zr)~9Py|r{GEBm7OKQX|IAZ$us=Nw^n!|C?5=9&EIYtU4?8O^Rzi8~sk#2pJ#;!Xiw zV6x+EkP??W)#T$gkbLltQa*kUQU<;Nl8?5CJEt)+9Cdv5o9LKoOX&I{v0M5)0AGc% z`gk{k9?*0$gP(Q#7~Ah0;>11~7sFdsw~WI_$gaT0GXEMuzZfdmn$+h+)aN|QKId&; zpYyzFvDN3iw8wo8wsh~_=e%V5mU!o2+~wK6$P~MA*vB!6wv00turE`egKshh%c27} zPU9Vjan}cZk2$Z>oYb96WOrh|J2!0&-U;M(C>(UF19;0L4kC4~4YEnZQH`j;Bi_L4 z+-y)nV~_90x$EEl-+Md~J0ELGzWm-e!j4=hcn%A{~p+^`5(@By{uki z5m{+pk`aG6^WENN5s96T+lIZCOqf))w@3f~LmkfXwagRQL)m= zR6oH-KH4wIM?QKq#J6{<$2bP#NU89Rs#4(=6RDgDlFD4rp=NHZ3Zxiu#!f2tgEU*k zeS*?^2PC}@K+@X+lHO+^%~o-Vv2OIzz1gq$dW-m{GQ(!}3U}qXgTKTGW7xToXsJ79 zJl6~}pFvUwRz5B{!JRD!wHn{55ub?#qIkD%8r~doAxiAX+`^^%acGfcUZaEWVvfwk z>mat_p2du16$ocdzUM%ORSmu5Oa^jLWLSF+LD`=Ngn@5V=X(S6{TLlL9vceNI?I0a zyT*Qubn*6cyaj08@T#E~-JzK(JlGk^yfixd~^ZH2bW+e|NDXDgI}B;7_Qlp7Ci_bipEr> z8}F^qwB!Fqxf|SRS!)l_RtRS}c_1xt?dzT6_)SY)xrkQoIJ?o-M1hNFb#Byftb)28 zKjS6Sbi!c_h*H1RsVl+_$jGF72~0EK0ci7XT$pqAJ|n)|sW%K$rK814>H?6Gx)7wK zE(WOqm<3W&yAkr=Lgv>L7G)w@?vTFq-dLsQvg334TsANMaCRAtwVQcTzWpfiiQP8i zMYGun(`3OtkJFJYgYM)Ayi5sxb~?p-NP61awhynlBsV>D#r`bHc9JFGfp|+i z9L3&P#@#1pUbnJ6kn5?}F6idlFC$&R5)8E6+XL^3TNK*Jo5sORBAy|c@VTXn@v2m)*1W$3EF}GGR&L6 zpEc*WAy-fO_-2*Y%((--b4P+?3zx0P7CyU_EyW<&!lkyynb7_Rq*N;h$(9?utM`I7 znJ`v@6fWPVaIx{rXP0lAtFL-j`NUEd{2L?-+Mxc*g7zR;&=sVy6W>rT3wncO0iRt; zWiCi6)24R^ukCaX{k`runWy=9WVSguXWtB8{wK&J=^2m z+SLc|-u~X0hby)TE*Q3|4}aRH$_elI!^M8M7|o~|Thyjt*rnNqGC(>tLACX-SgD7V@1krUD}LnUCzj~V9s83HO*5~k&wBoXm@lU z3?y()P0W0p%nsm2yBRmj z+vvS#QQcLW;U@ezT_)-7mGT@qt-)=xtB*sK%dQ@Rzd6-M;BU|Be)yYL-5YBi#}jHyDu79HH|nR*$A`>8_*uK zcB>H3(z|w~ZWV57POHGkv}CKWk&S0itFQ?dyjI~Iy0UktbvN$x{oE^c1-YDu)NAcr z=FM z8@Bxea#?ny&gEN}R_-`F)xd2zMOreK7srk8{ zfU{SkhPJXBZl8SBs^vS8g91t~cek{5E#m%;gw71LS$3qZMO-1?WG$jdOV%R3ygaZL zEyM+{7F|SF@mjRP_j9ilH4d!m^?@+Cj0-QIvCY3-69 zIB{U?NL})|2B^uB&&af7$=?_+KZ&D+O}OBde7=_7W-4wecKUwqm7>OypU2^-dOlyt zH=ReMZuvl5P3S*@pZ;_Hun(LD_8$y|I(A4NI`XaaLN>?Tc3`hWA2qE{Yd?tzYTIvR zAKuCn_q*LNp^uRrscYKH&8cY=X~~*)7aPW)k=g^e;MKH;=_=mGZ1nxyD@6^dn~B=q z+PT~#U?d?sQs**vH{05oa`J{EEt$(XY#M`dITshaT;^tFUoH>z{oE_LY+KC?7{ZY^ zT0CESxjw#HitXi2l*yFs_gEwk$7M(AO7xfJR3eJBWF_+L-c1~oWMXd4t3+HS>#Iau7Hfa*mGXwBaw2SK z?OYCenjt$<=kj~a$z_VPWG-_pTVPW;0~fqp=IS<^tr&VP_Wj%|xx5k$9L!$65{CHa zCw%RtZ*?i#%e&w*@cFcDb)SKQ-R3(|=&9j_D#N$EojYFOc$HdS`|G_1C@H159I~Q? zZ_eE19d`ZFg*FdcI9N2lxyj8QI)Z+o+AOAwn^G-r#1E2EUt~MSRGHJlwt4x& zr3QV~Ikr;2xLZrbG|Bg;i8q0PwlsnZt=*RLW#P#^rtC=FmU0oQt%xayofK)wwsc}V z6%%{Rskq>^rDxDp{N`ez?`KjA(K>|?`Oh+8laIyWR-a7)mw(mx<-2^BQH1z?zfkQf zty=L94k$vhBXtpKXigELNJ|!>l}x*!JC}M~@QTngbQLc`n|(i9w+Q`zIkfoF$V@E5 zYVCy+T>?t5>_}aL+j5>lg(vkBPl~i;3C`h~wcScETa|9{D~Ssya&f^c+db(jUbct& zeztCDi|79g*wEVfA2gROJ5uL=yXNFSMOrfd`7zbt{GT7cl9>M$xZve~l&<3Wf3@%D zUdey%Rl;X3SFMC0tvwP7TJ|72QWpYly$NgtyzkFMVmDI6Ed*Th-v64F902fjBIbkV z-*x5tRrSoZ-5LShhHStEFRTAVSMjXg;`_N*vbrett3F&gjvGsE8Zmc8qPh_E}7mv9EWb?;SSZdB=&{&~iI?!k)pJXJ$-W(;p#fL)2)Hc8HAwX@}S( zkamcj3DW++xgc$gS^(14s5?PYSp|~HI*?SJ2TA31koNAq57OQ}Ccad9V+?zN*%5ab z=tpKp+%S;#%Z&k@Y0ganaZg`{^FID+w;z{X%7Sc+Gi3o^l_CprL9*Znphr8>?-3xy zV=zb-@Plf)%Jq-Z<3}{4w*n-+pM#{wg@=zDy@x>3TM3dLCmMD2KOpJxy&%%#jy>sd z$DZ`~F4Fru(7vG{cY`)adi*HbJ?1JOFYu(277(DFsPoK1eF(f~3MF15cVXxC$hdWgw|M=v{pkB)#n* z>3t58-Y$^zGBDm&8g%8T+$f(2l3pc9X>c(}Y49_U(ttNdN`uEh3T-1up}hf8Xzzd& z+TTG+gMWc!{Z}A`HVBR8N|WNpfm9L;L4PpkioJ6`20dlYT?^V_^5Zs;EO-JW3s!?< z!8(vEco`%M-T}#i_d&AYR5Tt^DFaER8YGnqKvKB^wA`fC)gY;1(IF}B)$DXDkc0*xk?GYAuhcoAeEBqKq@74ty03AQYm=>q|p8b zQfS*j3hiGYh4vqi@+cE+kgV?nQfLv7R7yZnnG2H20+3YrPSmv~4QfDASpt#@-wv&- z8$r_B3X&e*3oE@ZK+#@?hKGZs|G2wi$DtPGLS-B z22yA@f)v^R;H{RE`YZU8B?n?MTf*C5&a07#)d0#az(K~ialS8z(D6G$puK~gyo^rEr3 zA4n>PgQPOqyIKu$tpd4Lfn2LVu2rCyjot$w*D8?o-uABk2PD1jm^P5!fgtJi21)O5 zkV@ikkV@hlko0Z_sU+SBQb~Loq*C`XNTqHwNTKZlDKrO9ITc!4kV4A=DNPRm$@)By zLYoGXN)#lO3qev@43bI=^r}gNpMs=vGe|0{y{jL9r1uR-dg-`-l3pfAdi#Ks2E9N^ zgK;3~T?SGbECVSG?gA+d9s?;2)`1k-dmx4OH;_Wx22yBWf|LenxS^Nz?LZ1G40_I# z*g}v>?2kcP%(-hpZa)oDXitC?+G>zOTL)5TFM|}?J0OMjK1iYUz@igQRk)cl9=qYZb_~3glV^a;*ZrW%S+wxmJOs*B-O|x_TH$dLuy6 zD+EbzJV<({gOr1FK+3`EK+;*<>x_CejOy`w?R_gC)cVB07+#q zNGd}?QW*()*QD-vkW?mvq_W7ndNati3glV^a;*ZnR)IDfz1KmmRUql5VM&m#{s1Js z<3Z9J36fp}B)!QX}-fEC?>rWu%))tU*>no6Qs~t9?D71q?3hfY(LhBDw zXvct*reTn*9}QAy7lOVrxpgH-x%C`~W2X$~6_D!NUqQE-KIIdTgV9We^Cd_=+G3xq zY&i%dTl#`z%MU@a$p^`nQ6SlJF-R&u1xe-SAgSCAlFGdxj%zZUl_0775hRrl zysK@om)^Asq;)bs*{836kEuAn83wcjg}Ak09mm^C0E# zS0L&2$CD-H?=c|d?49tp6!Up?wWXHzl@Bo-NN^ zKpo7vo*75Fa-VD$`jovvR=~aNF_fzlcN|5wk21#!dNP6#r zq_+j69Q+cb9PHiO>P-PD2TMT8!HYr4!DS%j;LRX~_Ap4H{Q;!V>Ol(ad63fdb&#xo z8zk$y|G=so36jb&AgK%oNo6$XUnUJs0ZC;FNGcb3SAPMLRgZzB_Y_EaYe3R_5u`MD z2c$H}>|^zg2PqB4fRqL^K}v&4kka5XkV3l&q|j~yDYQF53hnnGrNNURS-%=2>wnnS zan_qwc@Rjg@&zD`mM-_sT?67Ba)xsYNG1DjkSur>BnvizWWj47S+E%-3$}q|!48lt zIP?&!k`I!~7?4zoKvFpk^o7ZVvq4gs1CmOecl92StXd0_-k(6ydl@9XcR)Lh-rqse z`xqp>u7}#IM}R`6P7ebq<`Iy>C;=&qxgdqH0HiP$f)w)_kiu93QW*6hsk{l2%4U#M zJ_1Q)2k76%(tm@b;`FmBhk$f-1gNXAbR0;Qo()nM7lIVVnEwNO~cV^!5j-jQ0bnj2DBXw*;gzejP|<{C<$i_){R2@fSb} z?QbAiza6B|{smHK{{bnTGk<8U?*vk4!$CD>lraL7o5fN*38WPI5onpYS^_%2Ts_yj zx(IZGxw;s1khyxbclFmG+4mGk_N@iUzUM%)?=?`GQP~Vq>V5>0eI5JTtA~T6HyR|p zaUkhU0!i;okW%*?kW%+Xko2AhDRo~5DRut^QtGA+u&J8^QfP;P6xu+LLOU9y(DFe_ z-LW89KM|zRE&)m9Mvzo~0g}ocAgSC3lFH*CsXPUe%Eut7v_0IaWP_yA1tgW8AgLS* zlF9&(ROW!BvKS;=t^!GA8AvKOf-{5TyXy*iNcV+Bb0@f(n4o*o3LB)$kz9=!`v4fq)3rpuAmf^3kRE+98uKyJE# z+;joC=>l@o1>~j+$W0fJn=YXCN*9ouE+98uysQ5Nx#=>{>V-gVx`5nt0lDb{a?=Im zrVGeT7m%ASpa(lJXC4H(=>l@o1>~j+$W51{tOeO1H(fw(x`5nt0lDb{k_GcYQn>=8 zbXf+H$~7RV+ycrn>GB(pRPF&uhN>{}o7~eFIWx?FZX5=n9hc`+*eNk3l1{nBv!hGy-@G zbecI=4=Oga0i@902Pw2IAceLaq|kPP#v32$L+q2iP9TLg0wn8C0ZH!?ko2wqN$D>TQ4&Dlq^}hy5&wMy`puWJxH!)t+XJQe)7&f&i_OC4tj^s~qy~%SyD|dok0W5{x zKXZeJr%&tKA9$Je$f4#1#f7oG_WED@KsoV^!`~*RO}(G6Gg8ki7NW*&jME$aLS0iZ(hhLHt zy8N5}HZ<_jeI&^k^Ju?i-#F}=GcGnhZyY{Gv(LELX#3q;n=6HNQ8PQsGV; zsT>ZH%23cl9ocB|8{2A>A|R=hc~@@)N$&xW^d19A?@5sK)`PUDg3EWM_XbFM{Kodz z_?6-G07;Ku)|TEdkn~OjNv{y3Mza_sJuYdG-kl(+JOh%-^B}442Cv`^;q8lns@E~ z7IE0Kj;4qoUUWZEhVL(q<0_pZeVz>8x5^#GmUSdvomie5`U%TvVQhQhsznQRgbrSe zLJV6*4vfSm;H|{nwnqA2EobYw)(qbxSpDDj5qvCf^_G(&>G&kz_ULH{qx#@xS=?6Y z?$;#(OwI9``YmJ&ypIGnng~pRaKpMt!`g!3=jVo&W#e0I3=Q9DtLH~De%n~8C&s}h zb>inPy|2M}i&D$6ndWCEY1L>ZX7le-1?YSC(S&~9GSJA>$jZBaXO17n-+!ACi9M}s z*|@YA-{r(N?A)P8qaCvCe0F>1^Eu|7&nk!8XnJ!8JnX{r_8@2!#xtVa^tA+`gdflG zh2?fJa4|88j}DBP5x8a#my6Bi`GH%;aCxe^d{Llp)WN(^?JX%Y=c(poPM()JOEyty zrF{`}Jb%91Dot29w0i%7VfSx_e6&N+u={rc&dmoBAYU180-+{p09ScgKFk3lzE6hl;6w|ca0Xtu}4ecHhM+U>jv zn!(#4+%93*8Li$+)=Y?)Te+gxn0(uhdrfpXJ`Rw&`}?@DBGd^Pi;6tK_g;S1&B)5N z<3E0e|Np+aKdgG+V1n}Bb8;-r;50u|grv^rN60E#=caSwv^BjDwr)?32kG`?BuKX> z5s+?ACWCZib{0stCo@61J-G`cmDM1rFtSp40VEX;EdFBV#6AG&)4hzoRI1SR$}hiT zBfpn|p9@O3V zI1MBp%R!18SGLRV{UG^$7$m=|K<}HlJqOZU=GP#p3`7}}N+C!p6G2ir6(p4zAl;Uq z1JZ4IHApItfVP`3{s_{oCcB$|m~-!V=RO17X>LjX?VanIVQ1R+2g&aMkgOU7l2u&e zE~`!f$*MCzADS@cfE2fzK(cBZNGe>XE|rcTspNp9asWu{u@3>M4D|;|EyRLHWy7ahJP{r6|QWT$~_?6$Ug>>RZoJX(zU%+=?{|1Adpm!1xaNDsGo`3IFM8( zfuyp~yLuByRy_og-V-3{tpZ8!Igq|{xe27WbAgP=MlFB^LFU&+p z6eOz_fn?P$y{lV5(n~`rlwKxCdYwSh%LU1naUiMO43gi6LGsJJ1@c=DlHcb+N@uPm zmMw3Cq{7uFQt1tn%3&a>908KbFpyLVKvF3LN##b6R2~3HJwU2?{XtSL07-c)NXipIQl3V4P|9#-gOpZ314)@{e>Kg-6?xKYgHj{C z4j}1u21$>feUznrK(h2Oko3$)B}bUQ-{}LB?#Om4ns$dnXnkxl52O!99tu*54Din3 zaf$mRaHx0gB#_#%0`J^dklMS6-Z_4cE0?olc~edc7l%(ZUqc;O5NpGaaqFhvy|0ex zdyR!P7xl?>3Rl_DXsC7t#O!!J`C-ZP=sxV2Blukph4|)mrZ=AFFcgzbTO-XFhHh-^ zgI4ZPjMnBjg@2s3{^os79#Ro&+}b}i%i5f{wQ~z&YZI)^`fh_}cUYF3ir@QPqx%_? z!C%H7#Z=+J%O{+ioLe{yQ#he3|A=fYihWs#p=<8RH5VPjZ&Y)NJXKb69Fa1s(T_OJ z$+4nia>mE9kJ0T$bMv`bGgu94dAm_K90fUac?35bgTK^h8=ulL;2IYoT1F%HFkVCeEZJT{Cs%zLT$drfU&T`_NbbC2R&)9`M{b{qDc*$#(I(b9{&MyUg^oVlsKNWo|YyyXK-G zeUi{!&1g=8!lf|(8@j8xd#Srp^We55d!v(NGjJ&Ge>p*oe_FG)VSh+MZEMZ2amSDl zwpv6}gb&A%0V6K+W<&cT3l6{Vtor%F^eR|?AjZNDe8E84ssf8 zf+Df;zR`UvjhC~6%_@j>wv8bl?=L8LmQuEBf z@bvJR;WMV6wFbL)oKrDvlHp*Due->Sx7eCYm<`fo!UB*c6DmQPOt=^{)%aZs(&Pl! z8fh|N7f34I&`U|>0FYGjKvL-sDl{s`f}}DNB$aDGQn?2tm4`r5SqYNL8jz-@UIb}k zlNm5V@9;p!i$ECES{tAB384N->k3y@Uq07-=pf_3$Ckn}?6fuz?RB)tPb z(mMpCDg2{A(mMtuz3V|zxgR8zM?q5g14t_CKuVW?gXDLdH^Dj=B){b#`Hh0)_fnA3 z<;Ngdz$sp-dS4Irts!^EjnI)bFq9i-J*y+Beq1SFN2AWex~3XHXcidN3wVrFR@idSQ_CMuVhx3g|Z`-_8I@uLLB$tGuhf0ZH#^ zko2AfN$*9F^xgz%>h>d$(moe=9?}~Pl1d3kDsw?nSpbsCLXhf54M=(#(<V}NGf-Mq;fwGc6gkCV948wir#aL~Q@FT)v)ztZExuJq3JuHFNZ-g=PqIGroKKZB(A7m#W#H;_t? zFB_5G4>1sv$|#Ujia=611tgU-Kx$*>fRu07fuyn;B$anSQuzQRl`SBt{0sB|!p?9S zK=OMO9-ykeg+WsJ5lAW}AgRm-N#$IS^6es!Vssfudh0<_`71~&TR~F!1SFMRAhiM+ zxSx_r2ar@w07+#kNGj7oQkeykN;ycjTmX{Fr68$11d_^&AgR0tlFC~kseA;I$_|iJ zz5q#ulhc`;zsfl+QuFaZu0V8Wp_A{0zs;Dd(fMQFFj&j-tL@+~Ip}TZtOLiuLHhx? z^mLDw$Hhixy5j!V6vswq2cFGw&xRjQJ1jnGFNlrq7I*9O%9kW@Ng^z%csWEl=eV%kV^Fz9e|?uXvFqd^1B zIj-iGyYZmG=G+DuQ1qiYeC{0cZ2Gw zQ3zP0>|ajJmBfR;3=camC-f7R4n9SjICwi3Yz-}Z(k`p!dg?;l1ShPge#We){yMU{ z0qd#PYvJxr|9a|?=1#IvlQGg`jGMonIu9w5<8Y00^K=VhFEuwA%zEnZaHND;PtAp1 zxHCm^uv$+Y=UZOgyr7kV?n?H?msevqN>gnZZ{pB-ppLZ8;-LI#Yq&C1wHtfr+}b@1 zq}qKVNVU5Vq&BP=q}qKtNVWS~kW}sksf~CTB$dZOQh5fXHtZ#k+Ay}(QrQn>)3pU8 z6}}47wFTtb0@`KTt74Fr7@ZE1%10piW$PxtpMvD~8<3V5we{}#P5{YA0Z2Z$t3*Dy zt3*qTW`Gn1Uv?=UToNQ7++QLeFM+hgXcI_2vQVkjp7!+a<-#DT@RP1m83&TeRFK-! znINS&Kkq8Nal==;PdO8Z9)+=;jf_5eBK9ep7O$Qb#a?W7_iwsG+h3ag(R7Wyk*Uf` zc7tx>g51Ofxrqxp-wZcPL5f;(SAi

itE$S+qSz%_X@_%rPE~%n3|f-(!yPxprc& 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 From c9c59edc646082ad9a687a80ccfd4e421d7e15d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Sun, 29 Dec 2024 23:35:01 +0100 Subject: [PATCH 37/91] encoding/base32: Move tests to base32_test.odin Move existing test procedures to a dedicated test file for better code organization and maintainability. --- core/encoding/base32/base32.odin | 126 ------------------------- core/encoding/base32/base32_test.odin | 127 ++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 126 deletions(-) create mode 100644 core/encoding/base32/base32_test.odin diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 12b6a426b..60ece7b26 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -1,8 +1,5 @@ package encoding_base32 -import "core:testing" -import "core:bytes" - // @note(zh): Encoding utility for Base32 // A secondary param can be used to supply a custom alphabet to // @link(encode) and a matching decoding table to @link(decode). @@ -225,126 +222,3 @@ decode :: proc( return } - -@(test) -test_base32_decode_valid :: proc(t: ^testing.T) { - // RFC 4648 Section 10 - Test vectors - cases := [?]struct { - input, expected: string, - }{ - {"", ""}, - {"MY======", "f"}, - {"MZXQ====", "fo"}, - {"MZXW6===", "foo"}, - {"MZXW6YQ=", "foob"}, - {"MZXW6YTB", "fooba"}, - {"MZXW6YTBOI======", "foobar"}, - } - - for c in cases { - output, err := decode(c.input) - if output != nil { - defer delete(output) - } - testing.expect_value(t, err, Error.None) - expected := transmute([]u8)c.expected - if output != nil { - testing.expect(t, bytes.equal(output, expected)) - } else { - testing.expect(t, len(c.expected) == 0) - } - } -} - -@(test) -test_base32_encode :: proc(t: ^testing.T) { - // RFC 4648 Section 10 - Test vectors - cases := [?]struct { - input, expected: string, - }{ - {"", ""}, - {"f", "MY======"}, - {"fo", "MZXQ===="}, - {"foo", "MZXW6==="}, - {"foob", "MZXW6YQ="}, - {"fooba", "MZXW6YTB"}, - {"foobar", "MZXW6YTBOI======"}, - } - - for c in cases { - output := encode(transmute([]byte)c.input) - testing.expect(t, output == c.expected) - } -} - -@(test) -test_base32_decode_invalid :: proc(t: ^testing.T) { - // Section 3.2 - Alphabet check - { - // Characters outside alphabet - input := "MZ1W6YTB" // '1' not in alphabet (A-Z, 2-7) - output, err := decode(input) - if output != nil { - defer delete(output) - } - testing.expect_value(t, err, Error.Invalid_Character) - } - { - // Lowercase not allowed - input := "mzxq====" - output, err := decode(input) - if output != nil { - defer delete(output) - } - testing.expect_value(t, err, Error.Invalid_Character) - } - - // Section 4 - Padding requirements - { - // Padding must only be at end - input := "MZ=Q====" - output, err := decode(input) - if output != nil { - defer delete(output) - } - testing.expect_value(t, err, Error.Malformed_Input) - } - { - // Missing padding - input := "MZXQ" // Should be MZXQ==== - output, err := decode(input) - if output != nil { - defer delete(output) - } - testing.expect_value(t, err, Error.Malformed_Input) - } - { - // Incorrect padding length - input := "MZXQ=" // Needs 4 padding chars - output, err := decode(input) - if output != nil { - defer delete(output) - } - testing.expect_value(t, err, Error.Malformed_Input) - } - { - // Too much padding - input := "MY=========" // Extra padding chars - output, err := decode(input) - if output != nil { - defer delete(output) - } - testing.expect_value(t, err, Error.Malformed_Input) - } - - // Section 6 - Block size requirements - { - // Single character (invalid block) - input := "M" - output, err := decode(input) - if output != nil { - defer delete(output) - } - testing.expect_value(t, err, Error.Invalid_Length) - } -} diff --git a/core/encoding/base32/base32_test.odin b/core/encoding/base32/base32_test.odin new file mode 100644 index 000000000..e492f9a85 --- /dev/null +++ b/core/encoding/base32/base32_test.odin @@ -0,0 +1,127 @@ +package encoding_base32 + +import "core:testing" +import "core:bytes" + +@(test) +test_base32_decode_valid :: proc(t: ^testing.T) { + // RFC 4648 Section 10 - Test vectors + cases := [?]struct { + input, expected: string, + }{ + {"", ""}, + {"MY======", "f"}, + {"MZXQ====", "fo"}, + {"MZXW6===", "foo"}, + {"MZXW6YQ=", "foob"}, + {"MZXW6YTB", "fooba"}, + {"MZXW6YTBOI======", "foobar"}, + } + + for c in cases { + output, err := decode(c.input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.None) + expected := transmute([]u8)c.expected + if output != nil { + testing.expect(t, bytes.equal(output, expected)) + } else { + testing.expect(t, len(c.expected) == 0) + } + } +} + +@(test) +test_base32_encode :: proc(t: ^testing.T) { + // RFC 4648 Section 10 - Test vectors + cases := [?]struct { + input, expected: string, + }{ + {"", ""}, + {"f", "MY======"}, + {"fo", "MZXQ===="}, + {"foo", "MZXW6==="}, + {"foob", "MZXW6YQ="}, + {"fooba", "MZXW6YTB"}, + {"foobar", "MZXW6YTBOI======"}, + } + + for c in cases { + output := encode(transmute([]byte)c.input) + testing.expect(t, output == c.expected) + } +} + +@(test) +test_base32_decode_invalid :: proc(t: ^testing.T) { + // Section 3.2 - Alphabet check + { + // Characters outside alphabet + input := "MZ1W6YTB" // '1' not in alphabet (A-Z, 2-7) + output, err := decode(input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.Invalid_Character) + } + { + // Lowercase not allowed + input := "mzxq====" + output, err := decode(input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.Invalid_Character) + } + + // Section 4 - Padding requirements + { + // Padding must only be at end + input := "MZ=Q====" + output, err := decode(input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.Malformed_Input) + } + { + // Missing padding + input := "MZXQ" // Should be MZXQ==== + output, err := decode(input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.Malformed_Input) + } + { + // Incorrect padding length + input := "MZXQ=" // Needs 4 padding chars + output, err := decode(input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.Malformed_Input) + } + { + // Too much padding + input := "MY=========" // Extra padding chars + output, err := decode(input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.Malformed_Input) + } + + // Section 6 - Block size requirements + { + // Single character (invalid block) + input := "M" + output, err := decode(input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.Invalid_Length) + } +} From 0d4c0064d961d8a50901afd8c359962b687d1cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Mon, 30 Dec 2024 03:03:50 +0100 Subject: [PATCH 38/91] encoding/base32: Add encode->decode roundtrip test Add test_base32_roundtrip() to verify the encode->decode roundtrip preserves data integrity. This test helps ensure our base32 implementation correctly handles the full encode->decode cycle without data loss or corruption. --- core/encoding/base32/base32_test.odin | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/core/encoding/base32/base32_test.odin b/core/encoding/base32/base32_test.odin index e492f9a85..6589abc42 100644 --- a/core/encoding/base32/base32_test.odin +++ b/core/encoding/base32/base32_test.odin @@ -125,3 +125,26 @@ test_base32_decode_invalid :: proc(t: ^testing.T) { testing.expect_value(t, err, Error.Invalid_Length) } } + +@(test) +test_base32_roundtrip :: proc(t: ^testing.T) { + cases := [?]string{ + "", + "f", + "fo", + "foo", + "foob", + "fooba", + "foobar", + } + + for input in cases { + encoded := encode(transmute([]byte)input) + decoded, err := decode(encoded) + if decoded != nil { + defer delete(decoded) + } + testing.expect_value(t, err, Error.None) + testing.expect(t, bytes.equal(decoded, transmute([]byte)input)) + } +} From 591dd8765adb04ff5e0ba66c4c583ea49dbbcc87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Mon, 30 Dec 2024 12:00:38 +0100 Subject: [PATCH 39/91] encoding/base32: Remove incorrect defer delete in encode() Remove premature deallocation of the output buffer which was causing use-after-free behavior. The returned string needs to take ownership of this memory, but the defer delete was freeing it before the string could be used. This fixes issues with encoding that were introduced by overly aggressive memory cleanup in 93238db2. --- core/encoding/base32/base32.odin | 1 - 1 file changed, 1 deletion(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 60ece7b26..c46d4a323 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -54,7 +54,6 @@ DEC_TABLE := [256]u8 { encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> string { out_length := (len(data) + 4) / 5 * 8 out := make([]byte, out_length, allocator) - defer delete(out) _encode(out, data, ENC_TBL) return string(out[:]) } From 82925097699c389475c5e2d12286a447165ffa65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Mon, 30 Dec 2024 15:18:38 +0100 Subject: [PATCH 40/91] encoding/base32: Add custom alphabet test case Add test case to verify custom alphabet support. The test uses a decimal-uppercase alphabet (0-9, A-V) to test both encoding and decoding with custom tables, including validation. This ensures the encode and decode functions work correctly with custom encoding tables and validation functions as documented. --- core/encoding/base32/base32_test.odin | 75 +++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/core/encoding/base32/base32_test.odin b/core/encoding/base32/base32_test.odin index 6589abc42..968c6c4df 100644 --- a/core/encoding/base32/base32_test.odin +++ b/core/encoding/base32/base32_test.odin @@ -148,3 +148,78 @@ test_base32_roundtrip :: proc(t: ^testing.T) { testing.expect(t, bytes.equal(decoded, transmute([]byte)input)) } } + +@(test) + +test_base32_custom_alphabet :: proc(t: ^testing.T) { + custom_enc_table := [32]byte{ + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', + 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + } + + custom_dec_table: [256]u8 + for i := 0; i < len(custom_enc_table); i += 1 { + custom_dec_table[custom_enc_table[i]] = u8(i) + } + + /* + custom_dec_table := [256]u8{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x00-0x0f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x10-0x1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x20-0x2f + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, // 0x30-0x3f ('0'-'9') + 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, // 0x40-0x4f ('A'-'O') + 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x50-0x5f ('P'-'V') + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x60-0x6f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x70-0x7f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x80-0x8f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x90-0x9f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xa0-0xaf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xb0-0xbf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xc0-0xcf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xd0-0xdf + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xe0-0xef + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0xf0-0xff + } + */ + + custom_validate :: proc(c: byte) -> bool { + return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'V') || c == byte(PADDING) + } + + cases := [?]struct { + input: string, + enc_expected: string, + }{ + {"f", "CO======"}, + {"fo", "CPNG===="}, + {"foo", "CPNMU==="}, + } + + for c in cases { + // Test encoding + encoded := encode(transmute([]byte)c.input, custom_enc_table) + testing.expect(t, encoded == c.enc_expected) + + // Test decoding + decoded, err := decode(encoded, custom_dec_table, custom_validate) + defer if decoded != nil { + delete(decoded) + } + + testing.expect_value(t, err, Error.None) + testing.expect(t, bytes.equal(decoded, transmute([]byte)c.input)) + } + + // Test invalid character detection + { + input := "WXY=====" // Contains chars not in our alphabet + output, err := decode(input, custom_dec_table, custom_validate) + if output != nil { + delete(output) + } + testing.expect_value(t, err, Error.Invalid_Character) + } +} From 5ce6990077bf4d88a2e9617969e610b65b223f89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Mon, 30 Dec 2024 15:26:42 +0100 Subject: [PATCH 41/91] encoding/base32: Add proper cleanup for encoded strings in tests Add defer delete for encoded strings across all test procedures to ensure proper cleanup and prevent memory leaks. This completes the memory management improvements started in 591dd876. --- core/encoding/base32/base32_test.odin | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/encoding/base32/base32_test.odin b/core/encoding/base32/base32_test.odin index 968c6c4df..b032aa122 100644 --- a/core/encoding/base32/base32_test.odin +++ b/core/encoding/base32/base32_test.odin @@ -50,6 +50,7 @@ test_base32_encode :: proc(t: ^testing.T) { for c in cases { output := encode(transmute([]byte)c.input) + defer delete(output) testing.expect(t, output == c.expected) } } @@ -140,6 +141,7 @@ test_base32_roundtrip :: proc(t: ^testing.T) { for input in cases { encoded := encode(transmute([]byte)input) + defer delete(encoded) decoded, err := decode(encoded) if decoded != nil { defer delete(decoded) @@ -150,7 +152,6 @@ test_base32_roundtrip :: proc(t: ^testing.T) { } @(test) - test_base32_custom_alphabet :: proc(t: ^testing.T) { custom_enc_table := [32]byte{ '0', '1', '2', '3', '4', '5', '6', '7', @@ -201,6 +202,7 @@ test_base32_custom_alphabet :: proc(t: ^testing.T) { for c in cases { // Test encoding encoded := encode(transmute([]byte)c.input, custom_enc_table) + defer delete(encoded) testing.expect(t, encoded == c.enc_expected) // Test decoding From 3d25128520c558a5703c478eef61bb23326afe18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Mon, 30 Dec 2024 15:31:57 +0100 Subject: [PATCH 42/91] encoding/base32: Convert files to UTF-8 with Unix line endings --- core/encoding/base32/base32.odin | 447 ++++++++++++++++--------------- 1 file changed, 224 insertions(+), 223 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index c46d4a323..d4e4cbe03 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -1,223 +1,224 @@ -package encoding_base32 - -// @note(zh): Encoding utility for Base32 -// A secondary param can be used to supply a custom alphabet to -// @link(encode) and a matching decoding table to @link(decode). -// If none is supplied it just uses the standard Base32 alphabet. -// In case your specific version does not use padding, you may -// truncate it from the encoded output. - -// Error represents errors that can occur during base32 decoding operations. -// See RFC 4648 sections 3.2, 4 and 6. -Error :: enum { - None, - Invalid_Character, // Input contains characters outside the specified alphabet - Invalid_Length, // Input length is not valid for base32 (must be a multiple of 8 with proper padding) - Malformed_Input, // Input has improper structure (wrong padding position or incomplete groups) -} - -Validate_Proc :: #type proc(c: byte) -> bool - -@private -_validate_default :: proc(c: byte) -> bool { - return (c >= 'A' && c <= 'Z') || (c >= '2' && c <= '7') -} - -ENC_TABLE := [32]byte { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', - 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', - 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', - 'Y', 'Z', '2', '3', '4', '5', '6', '7', -} - -PADDING :: '=' - -DEC_TABLE := [256]u8 { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -} - -encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> string { - out_length := (len(data) + 4) / 5 * 8 - out := make([]byte, out_length, allocator) - _encode(out, data, ENC_TBL) - return string(out[:]) -} - -@private -_encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) { - out := out - data := data - - for len(data) > 0 { - carry: byte - switch len(data) { - case: - out[7] = ENC_TBL[data[4] & 0x1f] - carry = data[4] >> 5 - fallthrough - case 4: - out[6] = ENC_TBL[carry | (data[3] << 3) & 0x1f] - out[5] = ENC_TBL[(data[3] >> 2) & 0x1f] - carry = data[3] >> 7 - fallthrough - case 3: - out[4] = ENC_TBL[carry | (data[2] << 1) & 0x1f] - carry = (data[2] >> 4) & 0x1f - fallthrough - case 2: - out[3] = ENC_TBL[carry | (data[1] << 4) & 0x1f] - out[2] = ENC_TBL[(data[1] >> 1) & 0x1f] - carry = (data[1] >> 6) & 0x1f - fallthrough - case 1: - out[1] = ENC_TBL[carry | (data[0] << 2) & 0x1f] - out[0] = ENC_TBL[data[0] >> 3] - } - - if len(data) < 5 { - out[7] = byte(PADDING) - if len(data) < 4 { - out[6] = byte(PADDING) - out[5] = byte(PADDING) - if len(data) < 3 { - out[4] = byte(PADDING) - if len(data) < 2 { - out[3] = byte(PADDING) - out[2] = byte(PADDING) - } - } - } - break - } - data = data[5:] - out = out[8:] - } -} - -@(optimization_mode="favor_size") -decode :: proc( - data: string, - DEC_TBL := DEC_TABLE, - validate: Validate_Proc = _validate_default, - allocator := context.allocator) -> (out: []byte, err: Error) { - if len(data) == 0 { - return nil, .None - } - - // Check minimum length requirement first - if len(data) < 2 { - return nil, .Invalid_Length - } - - // Validate characters using provided validation function - for i := 0; i < len(data); i += 1 { - c := data[i] - if c == byte(PADDING) { - break - } - if !validate(c) { - return nil, .Invalid_Character - } - } - - // Validate padding and length - data_len := len(data) - padding_count := 0 - for i := data_len - 1; i >= 0; i -= 1 { - if data[i] != byte(PADDING) { - break - } - padding_count += 1 - } - - // Check for proper padding and length combinations - if padding_count > 0 { - // Verify no padding in the middle - for i := 0; i < data_len - padding_count; i += 1 { - if data[i] == byte(PADDING) { - return nil, .Malformed_Input - } - } - - content_len := data_len - padding_count - mod8 := content_len % 8 - required_padding: int - switch mod8 { - case 2: required_padding = 6 // 2 chars need 6 padding chars - case 4: required_padding = 4 // 4 chars need 4 padding chars - case 5: required_padding = 3 // 5 chars need 3 padding chars - case 7: required_padding = 1 // 7 chars need 1 padding char - case: required_padding = 0 - } - - if required_padding > 0 { - if padding_count != required_padding { - return nil, .Malformed_Input - } - } else if mod8 != 0 { - return nil, .Malformed_Input - } - } else { - // No padding - must be multiple of 8 - if data_len % 8 != 0 { - return nil, .Malformed_Input - } - } - - // Calculate decoded length: 5 bytes for every 8 input chars - input_chars := data_len - padding_count - out_len := input_chars * 5 / 8 - out = make([]byte, out_len, allocator) - defer if err != .None { - delete(out) - } - - // Process input in 8-byte blocks - outi := 0 - for i := 0; i < input_chars; i += 8 { - buf: [8]byte - block_size := min(8, input_chars - i) - - // Decode block - for j := 0; j < block_size; j += 1 { - buf[j] = DEC_TBL[data[i + j]] - } - - // Convert to output bytes based on block size - bytes_to_write := block_size * 5 / 8 - switch block_size { - case 8: - out[outi + 4] = (buf[6] << 5) | buf[7] - fallthrough - case 7: - out[outi + 3] = (buf[4] << 7) | (buf[5] << 2) | (buf[6] >> 3) - fallthrough - case 5: - out[outi + 2] = (buf[3] << 4) | (buf[4] >> 1) - fallthrough - case 4: - out[outi + 1] = (buf[1] << 6) | (buf[2] << 1) | (buf[3] >> 4) - fallthrough - case 2: - out[outi] = (buf[0] << 3) | (buf[1] >> 2) - } - outi += bytes_to_write - } - - return -} +package encoding_base32 + +// @note(zh): Encoding utility for Base32 +// A secondary param can be used to supply a custom alphabet to +// @link(encode) and a matching decoding table to @link(decode). +// If none is supplied it just uses the standard Base32 alphabet. +// In case your specific version does not use padding, you may +// truncate it from the encoded output. + +// Error represents errors that can occur during base32 decoding operations. +// See RFC 4648 sections 3.2, 4 and 6. +Error :: enum { + None, + Invalid_Character, // Input contains characters outside the specified alphabet + Invalid_Length, // Input length is not valid for base32 (must be a multiple of 8 with proper padding) + Malformed_Input, // Input has improper structure (wrong padding position or incomplete groups) +} + +Validate_Proc :: #type proc(c: byte) -> bool + +@private +_validate_default :: proc(c: byte) -> bool { + return (c >= 'A' && c <= 'Z') || (c >= '2' && c <= '7') +} + +ENC_TABLE := [32]byte { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', + 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', + 'Y', 'Z', '2', '3', '4', '5', '6', '7', +} + +PADDING :: '=' + +DEC_TABLE := [256]u8 { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +} + +encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> string { + out_length := (len(data) + 4) / 5 * 8 + out := make([]byte, out_length, allocator) + _encode(out, data, ENC_TBL) + return string(out[:]) +} + +@private +_encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) { + out := out + data := data + + for len(data) > 0 { + carry: byte + switch len(data) { + case: + out[7] = ENC_TBL[data[4] & 0x1f] + carry = data[4] >> 5 + fallthrough + case 4: + out[6] = ENC_TBL[carry | (data[3] << 3) & 0x1f] + out[5] = ENC_TBL[(data[3] >> 2) & 0x1f] + carry = data[3] >> 7 + fallthrough + case 3: + out[4] = ENC_TBL[carry | (data[2] << 1) & 0x1f] + carry = (data[2] >> 4) & 0x1f + fallthrough + case 2: + out[3] = ENC_TBL[carry | (data[1] << 4) & 0x1f] + out[2] = ENC_TBL[(data[1] >> 1) & 0x1f] + carry = (data[1] >> 6) & 0x1f + fallthrough + case 1: + out[1] = ENC_TBL[carry | (data[0] << 2) & 0x1f] + out[0] = ENC_TBL[data[0] >> 3] + } + + if len(data) < 5 { + out[7] = byte(PADDING) + if len(data) < 4 { + out[6] = byte(PADDING) + out[5] = byte(PADDING) + if len(data) < 3 { + out[4] = byte(PADDING) + if len(data) < 2 { + out[3] = byte(PADDING) + out[2] = byte(PADDING) + } + } + } + break + } + data = data[5:] + out = out[8:] + } +} + +@(optimization_mode="favor_size") +decode :: proc( + data: string, + DEC_TBL := DEC_TABLE, + validate: Validate_Proc = _validate_default, + allocator := context.allocator) -> (out: []byte, err: Error) +{ + if len(data) == 0 { + return nil, .None + } + + // Check minimum length requirement first + if len(data) < 2 { + return nil, .Invalid_Length + } + + // Validate characters using provided validation function + for i := 0; i < len(data); i += 1 { + c := data[i] + if c == byte(PADDING) { + break + } + if !validate(c) { + return nil, .Invalid_Character + } + } + + // Validate padding and length + data_len := len(data) + padding_count := 0 + for i := data_len - 1; i >= 0; i -= 1 { + if data[i] != byte(PADDING) { + break + } + padding_count += 1 + } + + // Check for proper padding and length combinations + if padding_count > 0 { + // Verify no padding in the middle + for i := 0; i < data_len - padding_count; i += 1 { + if data[i] == byte(PADDING) { + return nil, .Malformed_Input + } + } + + content_len := data_len - padding_count + mod8 := content_len % 8 + required_padding: int + switch mod8 { + case 2: required_padding = 6 // 2 chars need 6 padding chars + case 4: required_padding = 4 // 4 chars need 4 padding chars + case 5: required_padding = 3 // 5 chars need 3 padding chars + case 7: required_padding = 1 // 7 chars need 1 padding char + case: required_padding = 0 + } + + if required_padding > 0 { + if padding_count != required_padding { + return nil, .Malformed_Input + } + } else if mod8 != 0 { + return nil, .Malformed_Input + } + } else { + // No padding - must be multiple of 8 + if data_len % 8 != 0 { + return nil, .Malformed_Input + } + } + + // Calculate decoded length: 5 bytes for every 8 input chars + input_chars := data_len - padding_count + out_len := input_chars * 5 / 8 + out = make([]byte, out_len, allocator) + defer if err != .None { + delete(out) + } + + // Process input in 8-byte blocks + outi := 0 + for i := 0; i < input_chars; i += 8 { + buf: [8]byte + block_size := min(8, input_chars - i) + + // Decode block + for j := 0; j < block_size; j += 1 { + buf[j] = DEC_TBL[data[i + j]] + } + + // Convert to output bytes based on block size + bytes_to_write := block_size * 5 / 8 + switch block_size { + case 8: + out[outi + 4] = (buf[6] << 5) | buf[7] + fallthrough + case 7: + out[outi + 3] = (buf[4] << 7) | (buf[5] << 2) | (buf[6] >> 3) + fallthrough + case 5: + out[outi + 2] = (buf[3] << 4) | (buf[4] >> 1) + fallthrough + case 4: + out[outi + 1] = (buf[1] << 6) | (buf[2] << 1) | (buf[3] >> 4) + fallthrough + case 2: + out[outi] = (buf[0] << 3) | (buf[1] >> 2) + } + outi += bytes_to_write + } + + return +} From 0d0a202a78032a55be40b3bd08fbb67ce202a612 Mon Sep 17 00:00:00 2001 From: fleandro <3987005+flga@users.noreply.github.com> Date: Mon, 30 Dec 2024 22:09:27 +0000 Subject: [PATCH 43/91] vendor:vulkan Add support for xlib and xcb --- .../vulkan/_gen/create_vulkan_odin_wrapper.py | 35 ++++++++---- vendor/vulkan/_gen/vulkan_xcb.h | 56 +++++++++++++++++++ vendor/vulkan/_gen/vulkan_xlib.h | 56 +++++++++++++++++++ vendor/vulkan/core.odin | 6 ++ vendor/vulkan/enums.odin | 4 ++ vendor/vulkan/procedures.odin | 16 ++++++ vendor/vulkan/structs.odin | 30 ++++++++-- 7 files changed, 187 insertions(+), 16 deletions(-) create mode 100644 vendor/vulkan/_gen/vulkan_xcb.h create mode 100644 vendor/vulkan/_gen/vulkan_xlib.h diff --git a/vendor/vulkan/_gen/create_vulkan_odin_wrapper.py b/vendor/vulkan/_gen/create_vulkan_odin_wrapper.py index 1a4f96901..a0154328b 100644 --- a/vendor/vulkan/_gen/create_vulkan_odin_wrapper.py +++ b/vendor/vulkan/_gen/create_vulkan_odin_wrapper.py @@ -16,6 +16,8 @@ file_and_urls = [ ("vulkan_macos.h", 'https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/main/include/vulkan/vulkan_macos.h', False), ("vulkan_ios.h", 'https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/main/include/vulkan/vulkan_ios.h', False), ("vulkan_wayland.h", 'https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/main/include/vulkan/vulkan_wayland.h', False), + ("vulkan_xlib.h", 'https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/main/include/vulkan/vulkan_xlib.h', False), + ("vulkan_xcb.h", 'https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/main/include/vulkan/vulkan_xcb.h', False), # Vulkan Video ("vulkan_video_codec_av1std.h", 'https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/main/include/vk_video/vulkan_video_codec_av1std.h', False), ("vulkan_video_codec_av1std_decode.h", 'https://raw.githubusercontent.com/KhronosGroup/Vulkan-Headers/main/include/vk_video/vulkan_video_codec_av1std_decode.h', False), @@ -46,17 +48,19 @@ def no_vk(t): t = t.replace('PFN_', 'Proc') t = t.replace('PFN_', 'Proc') - t = re.sub('(?:Vk|VK_)?(\w+)', '\\1', t) + t = re.sub('(?:Vk|VK_)?(\\w+)', '\\1', t) # Vulkan Video - t = re.sub('(?:Std|STD_|VK_STD)?(\w+)', '\\1', t) + t = re.sub('(?:Std|STD_|VK_STD)?(\\w+)', '\\1', t) return t OPAQUE_STRUCTS = """ -wl_surface :: struct {} // Opaque struct defined by Wayland -wl_display :: struct {} // Opaque struct defined by Wayland -IOSurfaceRef :: struct {} // Opaque struct defined by Apple’s CoreGraphics framework -""" +wl_surface :: struct {} // Opaque struct defined by Wayland +wl_display :: struct {} // Opaque struct defined by Wayland +xcb_connection_t :: struct {} // Opaque struct defined by xcb +XlibDisplay :: struct {} // Opaque struct defined by Xlib +IOSurfaceRef :: struct {} // Opaque struct defined by Apple’s CoreGraphics framework +""" def convert_type(t, prev_name, curr_name): table = { @@ -91,6 +95,9 @@ def convert_type(t, prev_name, curr_name): "struct BaseInStructure": "BaseInStructure", "struct wl_display": "wl_display", "struct wl_surface": "wl_surface", + "Display": "XlibDisplay", + "Window": "XlibWindow", + "VisualID": "XlibVisualID", 'v': '', } @@ -106,7 +113,7 @@ def convert_type(t, prev_name, curr_name): elif t.endswith("*"): pointer = "^" ttype = t[:len(t)-1] - elem = convert_type(ttype, prev_name, curr_name) + elem = convert_type(ttype, prev_name, curr_name) if curr_name.endswith("s") or curr_name.endswith("Table"): if prev_name.endswith("Count") or prev_name.endswith("Counts"): @@ -445,7 +452,7 @@ def parse_enums(f): def parse_fake_enums(f): data = re.findall(r"static const Vk(\w+FlagBits2) VK_(\w+?) = (\w+);", src, re.S) - + data.sort(key=lambda x: x[0]) fake_enums = {} @@ -507,7 +514,7 @@ def parse_fake_enums(f): continue ff.append((n, v)) - + max_flag_value = max([int(v) for n, v in ff if is_int(v)] + [0]) max_group_value = max([int(v) for n, v in groups if is_int(v)] + [0]) if max_flag_value < max_group_value: @@ -575,13 +582,13 @@ def parse_structs(f): ffields.append(tuple([bit_field_name, bit_field_type, comment])) prev_name = "" continue - + # The second way has many fields that are each 1 bit elif int(fname) == 1: bit_field_type = do_type(bit_field[0], prev_name, fname) ffields.append(tuple(["bitfield", bit_field_type, comment])) break - + if '[' in fname: @@ -919,7 +926,11 @@ when ODIN_OS == .Windows { \t} } -CAMetalLayer :: struct {} +xcb_visualid_t :: u32 +xcb_window_t :: u32 +XlibWindow :: uint +XlibVisualID :: uint +CAMetalLayer :: struct {} MTLBuffer_id :: rawptr MTLTexture_id :: rawptr diff --git a/vendor/vulkan/_gen/vulkan_xcb.h b/vendor/vulkan/_gen/vulkan_xcb.h new file mode 100644 index 000000000..cdf6b5269 --- /dev/null +++ b/vendor/vulkan/_gen/vulkan_xcb.h @@ -0,0 +1,56 @@ +#ifndef VULKAN_XCB_H_ +#define VULKAN_XCB_H_ 1 + +/* +** Copyright 2015-2024 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_KHR_xcb_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_xcb_surface 1 +#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6 +#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface" +typedef VkFlags VkXcbSurfaceCreateFlagsKHR; +typedef struct VkXcbSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkXcbSurfaceCreateFlagsKHR flags; + xcb_connection_t* connection; + xcb_window_t window; +} VkXcbSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( + VkInstance instance, + const VkXcbSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); + +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + xcb_connection_t* connection, + xcb_visualid_t visual_id); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vendor/vulkan/_gen/vulkan_xlib.h b/vendor/vulkan/_gen/vulkan_xlib.h new file mode 100644 index 000000000..b3c3e27d7 --- /dev/null +++ b/vendor/vulkan/_gen/vulkan_xlib.h @@ -0,0 +1,56 @@ +#ifndef VULKAN_XLIB_H_ +#define VULKAN_XLIB_H_ 1 + +/* +** Copyright 2015-2024 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// VK_KHR_xlib_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_xlib_surface 1 +#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6 +#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface" +typedef VkFlags VkXlibSurfaceCreateFlagsKHR; +typedef struct VkXlibSurfaceCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkXlibSurfaceCreateFlagsKHR flags; + Display* dpy; + Window window; +} VkXlibSurfaceCreateInfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); +typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( + VkInstance instance, + const VkXlibSurfaceCreateInfoKHR* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkSurfaceKHR* pSurface); + +VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( + VkPhysicalDevice physicalDevice, + uint32_t queueFamilyIndex, + Display* dpy, + VisualID visualID); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/vendor/vulkan/core.odin b/vendor/vulkan/core.odin index a335018f9..f90b65008 100644 --- a/vendor/vulkan/core.odin +++ b/vendor/vulkan/core.odin @@ -1161,6 +1161,12 @@ EXT_METAL_OBJECTS_EXTENSION_NAME :: "VK_EXT_metal_objec KHR_wayland_surface :: 1 KHR_WAYLAND_SURFACE_SPEC_VERSION :: 6 KHR_WAYLAND_SURFACE_EXTENSION_NAME :: "VK_KHR_wayland_surface" +KHR_xlib_surface :: 1 +KHR_XLIB_SURFACE_SPEC_VERSION :: 6 +KHR_XLIB_SURFACE_EXTENSION_NAME :: "VK_KHR_xlib_surface" +KHR_xcb_surface :: 1 +KHR_XCB_SURFACE_SPEC_VERSION :: 6 +KHR_XCB_SURFACE_EXTENSION_NAME :: "VK_KHR_xcb_surface" // Handles types Instance :: distinct Handle diff --git a/vendor/vulkan/enums.odin b/vendor/vulkan/enums.odin index 5ac8d1612..a55ba9e58 100644 --- a/vendor/vulkan/enums.odin +++ b/vendor/vulkan/enums.odin @@ -4585,6 +4585,10 @@ WaylandSurfaceCreateFlagsKHR :: distinct bit_set[Wayland WaylandSurfaceCreateFlagKHR :: enum u32 {} Win32SurfaceCreateFlagsKHR :: distinct bit_set[Win32SurfaceCreateFlagKHR; Flags] Win32SurfaceCreateFlagKHR :: enum u32 {} +XcbSurfaceCreateFlagsKHR :: distinct bit_set[XcbSurfaceCreateFlagKHR; Flags] +XcbSurfaceCreateFlagKHR :: enum u32 {} +XlibSurfaceCreateFlagsKHR :: distinct bit_set[XlibSurfaceCreateFlagKHR; Flags] +XlibSurfaceCreateFlagKHR :: enum u32 {} AccessFlags2 :: distinct bit_set[AccessFlag2; Flags64] AccessFlag2 :: enum Flags64 { INDIRECT_COMMAND_READ = 0, diff --git a/vendor/vulkan/procedures.odin b/vendor/vulkan/procedures.odin index dc03275a2..19f70fc85 100644 --- a/vendor/vulkan/procedures.odin +++ b/vendor/vulkan/procedures.odin @@ -36,6 +36,8 @@ ProcCreateMacOSSurfaceMVK :: #type pr ProcCreateMetalSurfaceEXT :: #type proc "system" (instance: Instance, pCreateInfo: ^MetalSurfaceCreateInfoEXT, pAllocator: ^AllocationCallbacks, pSurface: ^SurfaceKHR) -> Result ProcCreateWaylandSurfaceKHR :: #type proc "system" (instance: Instance, pCreateInfo: ^WaylandSurfaceCreateInfoKHR, pAllocator: ^AllocationCallbacks, pSurface: ^SurfaceKHR) -> Result ProcCreateWin32SurfaceKHR :: #type proc "system" (instance: Instance, pCreateInfo: ^Win32SurfaceCreateInfoKHR, pAllocator: ^AllocationCallbacks, pSurface: ^SurfaceKHR) -> Result +ProcCreateXcbSurfaceKHR :: #type proc "system" (instance: Instance, pCreateInfo: ^XcbSurfaceCreateInfoKHR, pAllocator: ^AllocationCallbacks, pSurface: ^SurfaceKHR) -> Result +ProcCreateXlibSurfaceKHR :: #type proc "system" (instance: Instance, pCreateInfo: ^XlibSurfaceCreateInfoKHR, pAllocator: ^AllocationCallbacks, pSurface: ^SurfaceKHR) -> Result ProcDebugReportMessageEXT :: #type proc "system" (instance: Instance, flags: DebugReportFlagsEXT, objectType: DebugReportObjectTypeEXT, object: u64, location: int, messageCode: i32, pLayerPrefix: cstring, pMessage: cstring) ProcDestroyDebugReportCallbackEXT :: #type proc "system" (instance: Instance, callback: DebugReportCallbackEXT, pAllocator: ^AllocationCallbacks) ProcDestroyDebugUtilsMessengerEXT :: #type proc "system" (instance: Instance, messenger: DebugUtilsMessengerEXT, pAllocator: ^AllocationCallbacks) @@ -113,6 +115,8 @@ ProcGetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR :: #type pr ProcGetPhysicalDeviceVideoFormatPropertiesKHR :: #type proc "system" (physicalDevice: PhysicalDevice, pVideoFormatInfo: ^PhysicalDeviceVideoFormatInfoKHR, pVideoFormatPropertyCount: ^u32, pVideoFormatProperties: [^]VideoFormatPropertiesKHR) -> Result ProcGetPhysicalDeviceWaylandPresentationSupportKHR :: #type proc "system" (physicalDevice: PhysicalDevice, queueFamilyIndex: u32, display: ^wl_display) -> b32 ProcGetPhysicalDeviceWin32PresentationSupportKHR :: #type proc "system" (physicalDevice: PhysicalDevice, queueFamilyIndex: u32) -> b32 +ProcGetPhysicalDeviceXcbPresentationSupportKHR :: #type proc "system" (physicalDevice: PhysicalDevice, queueFamilyIndex: u32, connection: ^xcb_connection_t, visual_id: xcb_visualid_t) -> b32 +ProcGetPhysicalDeviceXlibPresentationSupportKHR :: #type proc "system" (physicalDevice: PhysicalDevice, queueFamilyIndex: u32, dpy: ^XlibDisplay, visualID: XlibVisualID) -> b32 ProcGetWinrtDisplayNV :: #type proc "system" (physicalDevice: PhysicalDevice, deviceRelativeId: u32, pDisplay: ^DisplayKHR) -> Result ProcReleaseDisplayEXT :: #type proc "system" (physicalDevice: PhysicalDevice, display: DisplayKHR) -> Result ProcSubmitDebugUtilsMessageEXT :: #type proc "system" (instance: Instance, messageSeverity: DebugUtilsMessageSeverityFlagsEXT, messageTypes: DebugUtilsMessageTypeFlagsEXT, pCallbackData: ^DebugUtilsMessengerCallbackDataEXT) @@ -730,6 +734,8 @@ CreateMacOSSurfaceMVK: ProcCreateMacO CreateMetalSurfaceEXT: ProcCreateMetalSurfaceEXT CreateWaylandSurfaceKHR: ProcCreateWaylandSurfaceKHR CreateWin32SurfaceKHR: ProcCreateWin32SurfaceKHR +CreateXcbSurfaceKHR: ProcCreateXcbSurfaceKHR +CreateXlibSurfaceKHR: ProcCreateXlibSurfaceKHR DebugReportMessageEXT: ProcDebugReportMessageEXT DestroyDebugReportCallbackEXT: ProcDestroyDebugReportCallbackEXT DestroyDebugUtilsMessengerEXT: ProcDestroyDebugUtilsMessengerEXT @@ -806,6 +812,8 @@ GetPhysicalDeviceVideoEncodeQualityLevelPropertiesKHR: ProcGetPhysica GetPhysicalDeviceVideoFormatPropertiesKHR: ProcGetPhysicalDeviceVideoFormatPropertiesKHR GetPhysicalDeviceWaylandPresentationSupportKHR: ProcGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR: ProcGetPhysicalDeviceWin32PresentationSupportKHR +GetPhysicalDeviceXcbPresentationSupportKHR: ProcGetPhysicalDeviceXcbPresentationSupportKHR +GetPhysicalDeviceXlibPresentationSupportKHR: ProcGetPhysicalDeviceXlibPresentationSupportKHR GetWinrtDisplayNV: ProcGetWinrtDisplayNV ReleaseDisplayEXT: ProcReleaseDisplayEXT SubmitDebugUtilsMessageEXT: ProcSubmitDebugUtilsMessageEXT @@ -1423,6 +1431,8 @@ load_proc_addresses_custom :: proc(set_proc_address: SetProcAddressType) { set_proc_address(&CreateMetalSurfaceEXT, "vkCreateMetalSurfaceEXT") set_proc_address(&CreateWaylandSurfaceKHR, "vkCreateWaylandSurfaceKHR") set_proc_address(&CreateWin32SurfaceKHR, "vkCreateWin32SurfaceKHR") + set_proc_address(&CreateXcbSurfaceKHR, "vkCreateXcbSurfaceKHR") + set_proc_address(&CreateXlibSurfaceKHR, "vkCreateXlibSurfaceKHR") set_proc_address(&DebugReportMessageEXT, "vkDebugReportMessageEXT") set_proc_address(&DestroyDebugReportCallbackEXT, "vkDestroyDebugReportCallbackEXT") set_proc_address(&DestroyDebugUtilsMessengerEXT, "vkDestroyDebugUtilsMessengerEXT") @@ -1499,6 +1509,8 @@ load_proc_addresses_custom :: proc(set_proc_address: SetProcAddressType) { set_proc_address(&GetPhysicalDeviceVideoFormatPropertiesKHR, "vkGetPhysicalDeviceVideoFormatPropertiesKHR") set_proc_address(&GetPhysicalDeviceWaylandPresentationSupportKHR, "vkGetPhysicalDeviceWaylandPresentationSupportKHR") set_proc_address(&GetPhysicalDeviceWin32PresentationSupportKHR, "vkGetPhysicalDeviceWin32PresentationSupportKHR") + set_proc_address(&GetPhysicalDeviceXcbPresentationSupportKHR, "vkGetPhysicalDeviceXcbPresentationSupportKHR") + set_proc_address(&GetPhysicalDeviceXlibPresentationSupportKHR, "vkGetPhysicalDeviceXlibPresentationSupportKHR") set_proc_address(&GetWinrtDisplayNV, "vkGetWinrtDisplayNV") set_proc_address(&ReleaseDisplayEXT, "vkReleaseDisplayEXT") set_proc_address(&SubmitDebugUtilsMessageEXT, "vkSubmitDebugUtilsMessageEXT") @@ -3879,6 +3891,8 @@ load_proc_addresses_instance :: proc(instance: Instance) { CreateMetalSurfaceEXT = auto_cast GetInstanceProcAddr(instance, "vkCreateMetalSurfaceEXT") CreateWaylandSurfaceKHR = auto_cast GetInstanceProcAddr(instance, "vkCreateWaylandSurfaceKHR") CreateWin32SurfaceKHR = auto_cast GetInstanceProcAddr(instance, "vkCreateWin32SurfaceKHR") + CreateXcbSurfaceKHR = auto_cast GetInstanceProcAddr(instance, "vkCreateXcbSurfaceKHR") + CreateXlibSurfaceKHR = auto_cast GetInstanceProcAddr(instance, "vkCreateXlibSurfaceKHR") DebugReportMessageEXT = auto_cast GetInstanceProcAddr(instance, "vkDebugReportMessageEXT") DestroyDebugReportCallbackEXT = auto_cast GetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT") DestroyDebugUtilsMessengerEXT = auto_cast GetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT") @@ -3955,6 +3969,8 @@ load_proc_addresses_instance :: proc(instance: Instance) { GetPhysicalDeviceVideoFormatPropertiesKHR = auto_cast GetInstanceProcAddr(instance, "vkGetPhysicalDeviceVideoFormatPropertiesKHR") GetPhysicalDeviceWaylandPresentationSupportKHR = auto_cast GetInstanceProcAddr(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR") GetPhysicalDeviceWin32PresentationSupportKHR = auto_cast GetInstanceProcAddr(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR") + GetPhysicalDeviceXcbPresentationSupportKHR = auto_cast GetInstanceProcAddr(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR") + GetPhysicalDeviceXlibPresentationSupportKHR = auto_cast GetInstanceProcAddr(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR") GetWinrtDisplayNV = auto_cast GetInstanceProcAddr(instance, "vkGetWinrtDisplayNV") ReleaseDisplayEXT = auto_cast GetInstanceProcAddr(instance, "vkReleaseDisplayEXT") SubmitDebugUtilsMessageEXT = auto_cast GetInstanceProcAddr(instance, "vkSubmitDebugUtilsMessageEXT") diff --git a/vendor/vulkan/structs.odin b/vendor/vulkan/structs.odin index 3c41d1923..b8ed60d22 100644 --- a/vendor/vulkan/structs.odin +++ b/vendor/vulkan/structs.odin @@ -32,7 +32,11 @@ when ODIN_OS == .Windows { } } -CAMetalLayer :: struct {} +xcb_visualid_t :: u32 +xcb_window_t :: u32 +XlibWindow :: uint +XlibVisualID :: uint +CAMetalLayer :: struct {} MTLBuffer_id :: rawptr MTLTexture_id :: rawptr @@ -8910,6 +8914,22 @@ WaylandSurfaceCreateInfoKHR :: struct { surface: ^wl_surface, } +XlibSurfaceCreateInfoKHR :: struct { + sType: StructureType, + pNext: rawptr, + flags: XlibSurfaceCreateFlagsKHR, + dpy: ^XlibDisplay, + window: XlibWindow, +} + +XcbSurfaceCreateInfoKHR :: struct { + sType: StructureType, + pNext: rawptr, + flags: XcbSurfaceCreateFlagsKHR, + connection: ^xcb_connection_t, + window: xcb_window_t, +} + VideoAV1ColorConfigFlags :: struct { bitfield: u32, } @@ -9753,9 +9773,11 @@ VideoEncodeH265ReferenceInfo :: struct { // Opaque structs -wl_surface :: struct {} // Opaque struct defined by Wayland -wl_display :: struct {} // Opaque struct defined by Wayland -IOSurfaceRef :: struct {} // Opaque struct defined by Apple’s CoreGraphics framework +wl_surface :: struct {} // Opaque struct defined by Wayland +wl_display :: struct {} // Opaque struct defined by Wayland +xcb_connection_t :: struct {} // Opaque struct defined by xcb +XlibDisplay :: struct {} // Opaque struct defined by Xlib +IOSurfaceRef :: struct {} // Opaque struct defined by Apple’s CoreGraphics framework // Aliases PhysicalDeviceVariablePointerFeatures :: PhysicalDeviceVariablePointersFeatures PhysicalDeviceShaderDrawParameterFeatures :: PhysicalDeviceShaderDrawParametersFeatures From bddca04b25bfce0f5bfa80c344ca66e4952d1302 Mon Sep 17 00:00:00 2001 From: CodingChris Date: Mon, 30 Dec 2024 23:20:08 +0100 Subject: [PATCH 44/91] added IsZoomed to user32 bindings in sys/windows --- core/sys/windows/user32.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index 957d6ab70..da979a3e3 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -51,6 +51,7 @@ foreign user32 { IsWindowVisible :: proc(hwnd: HWND) -> BOOL --- IsWindowEnabled :: proc(hwnd: HWND) -> BOOL --- IsIconic :: proc(hwnd: HWND) -> BOOL --- + IsZoomed :: proc(hwnd: HWND) -> BOOL --- BringWindowToTop :: proc(hWnd: HWND) -> BOOL --- GetTopWindow :: proc(hWnd: HWND) -> HWND --- SetForegroundWindow :: proc(hWnd: HWND) -> BOOL --- From 98967aad7454a1b25e9230b696e4c949d4ac7e27 Mon Sep 17 00:00:00 2001 From: fleandro <3987005+flga@users.noreply.github.com> Date: Tue, 31 Dec 2024 02:44:42 +0000 Subject: [PATCH 45/91] vendor:vulkan Use vendor:x11/xlib types when available --- .../vulkan/_gen/create_vulkan_odin_wrapper.py | 18 +++++++++++++++--- vendor/vulkan/structs.odin | 18 +++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/vendor/vulkan/_gen/create_vulkan_odin_wrapper.py b/vendor/vulkan/_gen/create_vulkan_odin_wrapper.py index a0154328b..b8d7b9464 100644 --- a/vendor/vulkan/_gen/create_vulkan_odin_wrapper.py +++ b/vendor/vulkan/_gen/create_vulkan_odin_wrapper.py @@ -58,7 +58,6 @@ OPAQUE_STRUCTS = """ wl_surface :: struct {} // Opaque struct defined by Wayland wl_display :: struct {} // Opaque struct defined by Wayland xcb_connection_t :: struct {} // Opaque struct defined by xcb -XlibDisplay :: struct {} // Opaque struct defined by Xlib IOSurfaceRef :: struct {} // Opaque struct defined by Apple’s CoreGraphics framework """ @@ -901,6 +900,10 @@ import "core:c" import win32 "core:sys/windows" _ :: win32 + +import "vendor:x11/xlib" +_ :: xlib + when ODIN_OS == .Windows { \tHINSTANCE :: win32.HINSTANCE \tHWND :: win32.HWND @@ -926,10 +929,19 @@ when ODIN_OS == .Windows { \t} } +// We want to use `vendor:x11/xlib` types so we need to match their build constraints. +when ODIN_OS == .Linux || ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD { +\tXlibDisplay :: xlib.Display +\tXlibWindow :: xlib.Window +\tXlibVisualID :: xlib.VisualID +} else { +\tXlibDisplay :: struct {} // Opaque struct defined by Xlib +\tXlibWindow :: c.ulong +\tXlibVisualID :: c.ulong +} + xcb_visualid_t :: u32 xcb_window_t :: u32 -XlibWindow :: uint -XlibVisualID :: uint CAMetalLayer :: struct {} MTLBuffer_id :: rawptr diff --git a/vendor/vulkan/structs.odin b/vendor/vulkan/structs.odin index b8ed60d22..3bab29f4e 100644 --- a/vendor/vulkan/structs.odin +++ b/vendor/vulkan/structs.odin @@ -7,6 +7,10 @@ import "core:c" import win32 "core:sys/windows" _ :: win32 + +import "vendor:x11/xlib" +_ :: xlib + when ODIN_OS == .Windows { HINSTANCE :: win32.HINSTANCE HWND :: win32.HWND @@ -32,10 +36,19 @@ when ODIN_OS == .Windows { } } +// We want to use `vendor:x11/xlib` types so we need to match their build constraints. +when ODIN_OS == .Linux || ODIN_OS == .FreeBSD || ODIN_OS == .OpenBSD { + XlibDisplay :: xlib.Display + XlibWindow :: xlib.Window + XlibVisualID :: xlib.VisualID +} else { + XlibDisplay :: struct {} // Opaque struct defined by Xlib + XlibWindow :: c.ulong + XlibVisualID :: c.ulong +} + xcb_visualid_t :: u32 xcb_window_t :: u32 -XlibWindow :: uint -XlibVisualID :: uint CAMetalLayer :: struct {} MTLBuffer_id :: rawptr @@ -9776,7 +9789,6 @@ VideoEncodeH265ReferenceInfo :: struct { wl_surface :: struct {} // Opaque struct defined by Wayland wl_display :: struct {} // Opaque struct defined by Wayland xcb_connection_t :: struct {} // Opaque struct defined by xcb -XlibDisplay :: struct {} // Opaque struct defined by Xlib IOSurfaceRef :: struct {} // Opaque struct defined by Apple’s CoreGraphics framework // Aliases PhysicalDeviceVariablePointerFeatures :: PhysicalDeviceVariablePointersFeatures From d6f4412dc33bf21607fe97ebfcbd2ba2c81368f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 31 Dec 2024 18:18:23 +0100 Subject: [PATCH 46/91] encoding/base32: Fix style issues for CI --- core/encoding/base32/base32.odin | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index d4e4cbe03..b6af279ec 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -48,7 +48,7 @@ DEC_TABLE := [256]u8 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, } encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> string { @@ -66,7 +66,7 @@ _encode :: proc(out, data: []byte, ENC_TBL := ENC_TABLE, allocator := context.al for len(data) > 0 { carry: byte switch len(data) { - case: + case: out[7] = ENC_TBL[data[4] & 0x1f] carry = data[4] >> 5 fallthrough @@ -114,8 +114,7 @@ decode :: proc( data: string, DEC_TBL := DEC_TABLE, validate: Validate_Proc = _validate_default, - allocator := context.allocator) -> (out: []byte, err: Error) -{ + allocator := context.allocator) -> (out: []byte, err: Error) { if len(data) == 0 { return nil, .None } @@ -163,7 +162,7 @@ decode :: proc( case 4: required_padding = 4 // 4 chars need 4 padding chars case 5: required_padding = 3 // 5 chars need 3 padding chars case 7: required_padding = 1 // 7 chars need 1 padding char - case: required_padding = 0 + case: required_padding = 0 } if required_padding > 0 { From fe88c22b1fa3b5090ae74dc358896ef784446469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Tue, 31 Dec 2024 23:47:33 +0100 Subject: [PATCH 47/91] encoding/base32: Fix RFC 4648 references and add RFC reference URL Fix incorrect RFC 4648 section references: - Add RFC URL reference at package level - Update Error enum documentation to reference correct sections: - Invalid_Character: Section 3.3 (non-alphabet characters) - Invalid_Length: Section 6 (base32 block size requirements) - Malformed_Input: Section 3.2 (padding) - Fix test file section references to match correct sections This ensures all RFC references are accurate and adds a link to the source RFC for reference. --- core/encoding/base32/base32.odin | 7 ++++++- core/encoding/base32/base32_test.odin | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index b6af279ec..0b8ec95c4 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -1,3 +1,5 @@ +// Base32 encoding/decoding implementation as specified in RFC 4648. +// [[ More; https://www.rfc-editor.org/rfc/rfc4648.html ]] package encoding_base32 // @note(zh): Encoding utility for Base32 @@ -8,7 +10,10 @@ package encoding_base32 // truncate it from the encoded output. // Error represents errors that can occur during base32 decoding operations. -// See RFC 4648 sections 3.2, 4 and 6. +// As per RFC 4648: +// - Section 3.3: Invalid character handling +// - Section 3.2: Padding requirements +// - Section 6: Base32 encoding specifics (including block size requirements) Error :: enum { None, Invalid_Character, // Input contains characters outside the specified alphabet diff --git a/core/encoding/base32/base32_test.odin b/core/encoding/base32/base32_test.odin index b032aa122..ea41ae36f 100644 --- a/core/encoding/base32/base32_test.odin +++ b/core/encoding/base32/base32_test.odin @@ -57,7 +57,7 @@ test_base32_encode :: proc(t: ^testing.T) { @(test) test_base32_decode_invalid :: proc(t: ^testing.T) { - // Section 3.2 - Alphabet check + // Section 3.3 - Non-alphabet characters { // Characters outside alphabet input := "MZ1W6YTB" // '1' not in alphabet (A-Z, 2-7) @@ -77,7 +77,7 @@ test_base32_decode_invalid :: proc(t: ^testing.T) { testing.expect_value(t, err, Error.Invalid_Character) } - // Section 4 - Padding requirements + // Section 3.2 - Padding requirements { // Padding must only be at end input := "MZ=Q====" @@ -115,7 +115,7 @@ test_base32_decode_invalid :: proc(t: ^testing.T) { testing.expect_value(t, err, Error.Malformed_Input) } - // Section 6 - Block size requirements + // Section 6 - Base32 block size requirements { // Single character (invalid block) input := "M" From c8ad2a4245fb9f0f5a0975e394693333299eb2a7 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 1 Jan 2025 15:12:54 +0000 Subject: [PATCH 48/91] Support multiple paths for wasm in `foreign import` --- src/check_decl.cpp | 88 ++++++++++++++++++++++------------------------ src/checker.cpp | 34 ++++++++++++++++++ src/checker.hpp | 1 + 3 files changed, 77 insertions(+), 46 deletions(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 60eb030ff..ced886bc9 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -971,6 +971,43 @@ gb_internal void check_objc_methods(CheckerContext *ctx, Entity *e, AttributeCon } } +gb_internal void check_foreign_procedure(CheckerContext *ctx, Entity *e, DeclInfo *d) { + GB_ASSERT(e != nullptr); + GB_ASSERT(e->kind == Entity_Procedure); + String name = e->Procedure.link_name; + + mutex_lock(&ctx->info->foreign_mutex); + + auto *fp = &ctx->info->foreigns; + StringHashKey key = string_hash_string(name); + Entity **found = string_map_get(fp, key); + if (found && e != *found) { + Entity *f = *found; + TokenPos pos = f->token.pos; + Type *this_type = base_type(e->type); + Type *other_type = base_type(f->type); + if (is_type_proc(this_type) && is_type_proc(other_type)) { + if (!are_signatures_similar_enough(this_type, other_type)) { + error(d->proc_lit, + "Redeclaration of foreign procedure '%.*s' with different type signatures\n" + "\tat %s", + LIT(name), token_pos_to_string(pos)); + } + } else if (!signature_parameter_similar_enough(this_type, other_type)) { + error(d->proc_lit, + "Foreign entity '%.*s' previously declared elsewhere with a different type\n" + "\tat %s", + LIT(name), token_pos_to_string(pos)); + } + } else if (name == "main") { + error(d->proc_lit, "The link name 'main' is reserved for internal use"); + } else { + string_map_set(fp, key, e); + } + + mutex_unlock(&ctx->info->foreign_mutex); +} + gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { GB_ASSERT(e->type == nullptr); if (d->proc_lit->kind != Ast_ProcLit) { @@ -1307,57 +1344,16 @@ gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { name = e->Procedure.link_name; } Entity *foreign_library = init_entity_foreign_library(ctx, e); - - if (is_arch_wasm() && foreign_library != nullptr) { - String module_name = str_lit("env"); - GB_ASSERT (foreign_library->kind == Entity_LibraryName); - if (foreign_library->LibraryName.paths.count != 1) { - error(foreign_library->token, "'foreign import' for '%.*s' architecture may only have one path, got %td", - LIT(target_arch_names[build_context.metrics.arch]), foreign_library->LibraryName.paths.count); - } - - if (foreign_library->LibraryName.paths.count >= 1) { - module_name = foreign_library->LibraryName.paths[0]; - } - - if (!string_ends_with(module_name, str_lit(".o"))) { - name = concatenate3_strings(permanent_allocator(), module_name, WASM_MODULE_NAME_SEPARATOR, name); - } - } - e->Procedure.is_foreign = true; e->Procedure.link_name = name; + e->Procedure.foreign_library = foreign_library; - mutex_lock(&ctx->info->foreign_mutex); - - auto *fp = &ctx->info->foreigns; - StringHashKey key = string_hash_string(name); - Entity **found = string_map_get(fp, key); - if (found && e != *found) { - Entity *f = *found; - TokenPos pos = f->token.pos; - Type *this_type = base_type(e->type); - Type *other_type = base_type(f->type); - if (is_type_proc(this_type) && is_type_proc(other_type)) { - if (!are_signatures_similar_enough(this_type, other_type)) { - error(d->proc_lit, - "Redeclaration of foreign procedure '%.*s' with different type signatures\n" - "\tat %s", - LIT(name), token_pos_to_string(pos)); - } - } else if (!signature_parameter_similar_enough(this_type, other_type)) { - error(d->proc_lit, - "Foreign entity '%.*s' previously declared elsewhere with a different type\n" - "\tat %s", - LIT(name), token_pos_to_string(pos)); - } - } else if (name == "main") { - error(d->proc_lit, "The link name 'main' is reserved for internal use"); + if (is_arch_wasm() && foreign_library != nullptr) { + // NOTE(bill): this must be delayed because the foreign import paths might not be evaluated yet until much later + mpsc_enqueue(&ctx->info->foreign_decls_to_check, e); } else { - string_map_set(fp, key, e); + check_foreign_procedure(ctx, e, d); } - - mutex_unlock(&ctx->info->foreign_mutex); } else { String name = e->token.string; if (e->Procedure.link_name.len > 0) { diff --git a/src/checker.cpp b/src/checker.cpp index b7cf343f8..7e0a64d75 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1356,6 +1356,7 @@ gb_internal void init_checker_info(CheckerInfo *i) { mpsc_init(&i->required_global_variable_queue, a); // 1<<10); mpsc_init(&i->required_foreign_imports_through_force_queue, a); // 1<<10); mpsc_init(&i->foreign_imports_to_check_fullpaths, a); // 1<<10); + mpsc_init(&i->foreign_decls_to_check, a); // 1<<10); mpsc_init(&i->intrinsics_entry_point_usage, a); // 1<<10); // just waste some memory here, even if it probably never used string_map_init(&i->load_directory_cache); @@ -1382,6 +1383,7 @@ gb_internal void destroy_checker_info(CheckerInfo *i) { mpsc_destroy(&i->required_global_variable_queue); mpsc_destroy(&i->required_foreign_imports_through_force_queue); mpsc_destroy(&i->foreign_imports_to_check_fullpaths); + mpsc_destroy(&i->foreign_decls_to_check); map_destroy(&i->objc_msgSend_types); string_map_destroy(&i->load_file_cache); @@ -5094,6 +5096,38 @@ gb_internal void check_foreign_import_fullpaths(Checker *c) { e->LibraryName.paths = fl->fullpaths; } + + for (Entity *e = nullptr; mpsc_dequeue(&c->info.foreign_decls_to_check, &e); /**/) { + GB_ASSERT(e != nullptr); + if (e->kind != Entity_Procedure) { + continue; + } + if (!is_arch_wasm()) { + continue; + } + Entity *foreign_library = e->Procedure.foreign_library; + GB_ASSERT(foreign_library != nullptr); + + String name = e->Procedure.link_name; + + String module_name = str_lit("env"); + GB_ASSERT (foreign_library->kind == Entity_LibraryName); + if (foreign_library->LibraryName.paths.count != 1) { + error(foreign_library->token, "'foreign import' for '%.*s' architecture may only have one path, got %td", + LIT(target_arch_names[build_context.metrics.arch]), foreign_library->LibraryName.paths.count); + } + + if (foreign_library->LibraryName.paths.count >= 1) { + module_name = foreign_library->LibraryName.paths[0]; + } + + if (!string_ends_with(module_name, str_lit(".o"))) { + name = concatenate3_strings(permanent_allocator(), module_name, WASM_MODULE_NAME_SEPARATOR, name); + } + e->Procedure.link_name = name; + + check_foreign_procedure(&ctx, e, e->decl_info); + } } gb_internal void check_add_foreign_import_decl(CheckerContext *ctx, Ast *decl) { diff --git a/src/checker.hpp b/src/checker.hpp index 438156f18..036990f29 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -461,6 +461,7 @@ struct CheckerInfo { MPSCQueue required_global_variable_queue; MPSCQueue required_foreign_imports_through_force_queue; MPSCQueue foreign_imports_to_check_fullpaths; + MPSCQueue foreign_decls_to_check; MPSCQueue intrinsics_entry_point_usage; From 049359cae46c1280dc14ea45914638dfb9cb21e0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 1 Jan 2025 15:13:07 +0000 Subject: [PATCH 49/91] Clean up box2d `foreign import` --- vendor/box2d/box2d.odin | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/vendor/box2d/box2d.odin b/vendor/box2d/box2d.odin index e7da34a45..83c43800b 100644 --- a/vendor/box2d/box2d.odin +++ b/vendor/box2d/box2d.odin @@ -27,16 +27,8 @@ when !#exists(LIB_PATH) { #panic("Could not find the compiled box2d libraries at \"" + LIB_PATH + "\", they can be compiled by running the `build.sh` script at `" + ODIN_ROOT + "vendor/box2d/build_box2d.sh\"`") } -when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { - when VECTOR_EXT == "_simd" { - foreign import lib "lib/box2d_wasm_simd.o" - } else { - foreign import lib "lib/box2d_wasm.o" - } -} else { - foreign import lib { - LIB_PATH, - } +foreign import lib { + LIB_PATH, } From 6383fddb59cfcd3f0c8eefb2c700381d14488691 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 1 Jan 2025 15:13:36 +0000 Subject: [PATCH 50/91] Disable the os-specific code in `libc` so that non-OS specific platforms still work with it --- vendor/libc/stdio.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/vendor/libc/stdio.odin b/vendor/libc/stdio.odin index 10b95b96b..97667a5c8 100644 --- a/vendor/libc/stdio.odin +++ b/vendor/libc/stdio.odin @@ -1,3 +1,4 @@ +#+build !freestanding package odin_libc import "core:c" From 1cf7a56ba700b8a20b4fe94459db416679501793 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 1 Jan 2025 15:13:46 +0000 Subject: [PATCH 51/91] General clean up of code --- core/math/rand/rand.odin | 24 ------------------------ core/mem/allocators.odin | 23 ----------------------- core/mem/mem.odin | 9 +-------- core/os/os2/process.odin | 11 ++++++++++- 4 files changed, 11 insertions(+), 56 deletions(-) diff --git a/core/math/rand/rand.odin b/core/math/rand/rand.odin index 474277e84..72d9400d7 100644 --- a/core/math/rand/rand.odin +++ b/core/math/rand/rand.odin @@ -29,30 +29,6 @@ Reset the seed used by the context.random_generator. Inputs: - seed: The seed value -Example: - import "core:math/rand" - import "core:fmt" - - set_global_seed_example :: proc() { - rand.set_global_seed(1) - fmt.println(rand.uint64()) - } - -Possible Output: - - 10 -*/ -@(deprecated="Prefer `rand.reset`") -set_global_seed :: proc(seed: u64) { - runtime.random_generator_reset_u64(context.random_generator, seed) -} - -/* -Reset the seed used by the context.random_generator. - -Inputs: -- seed: The seed value - Example: import "core:math/rand" import "core:fmt" diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin index 13d509f1e..028be58e3 100644 --- a/core/mem/allocators.odin +++ b/core/mem/allocators.odin @@ -140,14 +140,6 @@ arena_init :: proc(a: ^Arena, data: []byte) { a.temp_count = 0 } -@(deprecated="prefer 'mem.arena_init'") -init_arena :: proc(a: ^Arena, data: []byte) { - a.data = data - a.offset = 0 - a.peak_used = 0 - a.temp_count = 0 -} - /* Allocate memory from an arena. @@ -786,14 +778,6 @@ stack_init :: proc(s: ^Stack, data: []byte) { s.peak_used = 0 } -@(deprecated="prefer 'mem.stack_init'") -init_stack :: proc(s: ^Stack, data: []byte) { - s.data = data - s.prev_offset = 0 - s.curr_offset = 0 - s.peak_used = 0 -} - /* Allocate memory from stack. @@ -1162,13 +1146,6 @@ small_stack_init :: proc(s: ^Small_Stack, data: []byte) { s.peak_used = 0 } -@(deprecated="prefer 'small_stack_init'") -init_small_stack :: proc(s: ^Small_Stack, data: []byte) { - s.data = data - s.offset = 0 - s.peak_used = 0 -} - /* Small stack allocator. diff --git a/core/mem/mem.odin b/core/mem/mem.odin index ccbc77798..b2a7158a1 100644 --- a/core/mem/mem.odin +++ b/core/mem/mem.odin @@ -685,11 +685,4 @@ calc_padding_with_header :: proc "contextless" (ptr: uintptr, align: uintptr, he } } return int(padding) -} - -@(require_results, deprecated="prefer 'slice.clone'") -clone_slice :: proc(slice: $T/[]$E, allocator := context.allocator, loc := #caller_location) -> (new_slice: T) { - new_slice, _ = make(T, len(slice), allocator, loc) - runtime.copy(new_slice, slice) - return new_slice -} +} \ No newline at end of file diff --git a/core/os/os2/process.odin b/core/os/os2/process.odin index 5b5a6e844..c90e3add2 100644 --- a/core/os/os2/process.odin +++ b/core/os/os2/process.odin @@ -290,12 +290,21 @@ process_open :: proc(pid: int, flags := Process_Open_Flags {}) -> (Process, Erro return _process_open(pid, flags) } + +/* +OS-specific process attributes. +*/ +Process_Attributes :: struct { + sys_attr: _Sys_Process_Attributes, +} + /* The description of how a process should be created. */ Process_Desc :: struct { // OS-specific attributes. - sys_attr: _Sys_Process_Attributes, + sys_attr: Process_Attributes, + // The working directory of the process. If the string has length 0, the // working directory is assumed to be the current working directory of the // current process. From 7b334d2bd9e881b450fb19e394d6d71840a62cf9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 1 Jan 2025 17:26:15 +0000 Subject: [PATCH 52/91] Add `#branch_location` --- src/check_expr.cpp | 12 ++++++ src/entity.cpp | 1 + src/llvm_backend.hpp | 7 +++- src/llvm_backend_expr.cpp | 12 ++++-- src/llvm_backend_proc.cpp | 6 ++- src/llvm_backend_stmt.cpp | 81 +++++++++++++++++++++++------------- src/llvm_backend_utility.cpp | 8 ++-- 7 files changed, 89 insertions(+), 38 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index cc9483187..fba9b8dad 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8725,6 +8725,18 @@ gb_internal ExprKind check_basic_directive_expr(CheckerContext *c, Operand *o, A error(node, "#caller_expression may only be used as a default argument parameter"); o->type = t_string; o->mode = Addressing_Value; + } else if (name == "branch_location") { + if (!c->in_defer) { + error(node, "#branch_location may only be used within a 'defer' statement"); + } else if (c->curr_proc_decl) { + Entity *e = c->curr_proc_decl->entity; + if (e != nullptr) { + GB_ASSERT(e->kind == Entity_Procedure); + e->Procedure.uses_branch_location = true; + } + } + o->type = t_source_code_location; + o->mode = Addressing_Value; } else { if (name == "location") { init_core_source_code_location(c->checker); diff --git a/src/entity.cpp b/src/entity.cpp index 0c4a20df4..802b381f9 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -256,6 +256,7 @@ struct Entity { bool entry_point_only : 1; bool has_instrumentation : 1; bool is_memcpy_like : 1; + bool uses_branch_location : 1; } Procedure; struct { Array entities; diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index e84ffd1cd..8ca11bf28 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -359,6 +359,10 @@ struct lbProcedure { bool in_multi_assignment; Array raw_input_parameters; + bool uses_branch_location; + TokenPos branch_location_pos; + TokenPos curr_token_pos; + Array variadic_reuses; lbAddr variadic_reuse_base_array_ptr; @@ -444,7 +448,8 @@ gb_internal lbValue lb_emit_matrix_ev(lbProcedure *p, lbValue s, isize row, isiz gb_internal lbValue lb_emit_arith(lbProcedure *p, TokenKind op, lbValue lhs, lbValue rhs, Type *type); gb_internal lbValue lb_emit_byte_swap(lbProcedure *p, lbValue value, Type *end_type); -gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlock *block); +gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, TokenPos pos); +gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, Ast *node); gb_internal lbValue lb_emit_transmute(lbProcedure *p, lbValue value, Type *t); gb_internal lbValue lb_emit_comp(lbProcedure *p, TokenKind op_kind, lbValue left, lbValue right); gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array const &args, ProcInlining inlining = ProcInlining_none); diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 9c325e088..3b238bcd8 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -3502,7 +3502,13 @@ gb_internal lbValue lb_build_expr_internal(lbProcedure *p, Ast *expr) { case_ast_node(bd, BasicDirective, expr); TokenPos pos = bd->token.pos; - GB_PANIC("Non-constant basic literal %s - %.*s", token_pos_to_string(pos), LIT(bd->name.string)); + String name = bd->name.string; + if (name == "branch_location") { + GB_ASSERT(p->uses_branch_location); + String proc_name = p->entity->token.string; + return lb_emit_source_code_location_as_global(p, proc_name, p->branch_location_pos); + } + GB_PANIC("Non-constant basic literal %s - %.*s", token_pos_to_string(pos), LIT(name)); case_end; case_ast_node(i, Implicit, expr); @@ -3668,7 +3674,7 @@ gb_internal lbValue lb_build_expr_internal(lbProcedure *p, Ast *expr) { lb_emit_if(p, lb_emit_try_has_value(p, rhs), then, else_); lb_start_block(p, else_); - lb_emit_defer_stmts(p, lbDeferExit_Branch, block); + lb_emit_defer_stmts(p, lbDeferExit_Branch, block, expr); lb_emit_jump(p, block); lb_start_block(p, then); @@ -5493,7 +5499,7 @@ gb_internal lbAddr lb_build_addr_internal(lbProcedure *p, Ast *expr) { lb_emit_if(p, lb_emit_try_has_value(p, rhs), then, else_); lb_start_block(p, else_); - lb_emit_defer_stmts(p, lbDeferExit_Branch, block); + lb_emit_defer_stmts(p, lbDeferExit_Branch, block, expr); lb_emit_jump(p, block); lb_start_block(p, then); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 712e13592..7e44a0046 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -125,6 +125,10 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i // map_init(&p->selector_addr, 0); // map_init(&p->tuple_fix_map, 0); + if (p->entity != nullptr && p->entity->Procedure.uses_branch_location) { + p->uses_branch_location = true; + } + if (p->is_foreign) { lb_add_foreign_library_path(p->module, entity->Procedure.foreign_library); } @@ -757,7 +761,7 @@ gb_internal void lb_end_procedure_body(lbProcedure *p) { if (p->type->Proc.result_count == 0) { instr = LLVMGetLastInstruction(p->curr_block->block); if (!lb_is_instr_terminating(instr)) { - lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr); + lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr, p->body); lb_set_debug_position_to_procedure_end(p); LLVMBuildRetVoid(p->builder); } diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index 9a5f25712..a2f0d2f4a 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -208,8 +208,8 @@ gb_internal void lb_open_scope(lbProcedure *p, Scope *s) { } -gb_internal void lb_close_scope(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, bool pop_stack=true) { - lb_emit_defer_stmts(p, kind, block); +gb_internal void lb_close_scope(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, Ast *node, bool pop_stack=true) { + lb_emit_defer_stmts(p, kind, block, node); GB_ASSERT(p->scope_index > 0); // NOTE(bill): Remove `context`s made in that scope @@ -721,7 +721,7 @@ gb_internal void lb_build_range_interval(lbProcedure *p, AstBinaryExpr *node, lb_build_stmt(p, rs->body); - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, node->left); lb_pop_target_list(p); if (check != nullptr) { @@ -854,7 +854,7 @@ gb_internal void lb_build_range_tuple(lbProcedure *p, AstRangeStmt *rs, Scope *s lb_build_stmt(p, rs->body); - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, rs->body); lb_pop_target_list(p); lb_emit_jump(p, loop); lb_start_block(p, done); @@ -976,7 +976,7 @@ gb_internal void lb_build_range_stmt_struct_soa(lbProcedure *p, AstRangeStmt *rs lb_build_stmt(p, rs->body); - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, rs->body); lb_pop_target_list(p); lb_emit_jump(p, loop); lb_start_block(p, done); @@ -1192,7 +1192,7 @@ gb_internal void lb_build_range_stmt(lbProcedure *p, AstRangeStmt *rs, Scope *sc lb_build_stmt(p, rs->body); - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, rs->body); lb_pop_target_list(p); lb_emit_jump(p, loop); lb_start_block(p, done); @@ -1363,7 +1363,7 @@ gb_internal void lb_build_unroll_range_stmt(lbProcedure *p, AstUnrollRangeStmt * } - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, rs->body); } gb_internal bool lb_switch_stmt_can_be_trivial_jump_table(AstSwitchStmt *ss, bool *default_found_) { @@ -1433,6 +1433,7 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope * ast_node(body, BlockStmt, ss->body); isize case_count = body->stmts.count; + Ast *default_clause = nullptr; Slice default_stmts = {}; lbBlock *default_fall = nullptr; lbBlock *default_block = nullptr; @@ -1482,6 +1483,7 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope * if (cc->list.count == 0) { // default case + default_clause = clause; default_stmts = cc->stmts; default_fall = fall; if (switch_instr == nullptr) { @@ -1552,7 +1554,7 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope * lb_push_target_list(p, ss->label, done, nullptr, fall); lb_open_scope(p, body->scope); lb_build_stmt_list(p, cc->stmts); - lb_close_scope(p, lbDeferExit_Default, body); + lb_close_scope(p, lbDeferExit_Default, body, clause); lb_pop_target_list(p); lb_emit_jump(p, done); @@ -1570,13 +1572,13 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope * lb_push_target_list(p, ss->label, done, nullptr, default_fall); lb_open_scope(p, default_block->scope); lb_build_stmt_list(p, default_stmts); - lb_close_scope(p, lbDeferExit_Default, default_block); + lb_close_scope(p, lbDeferExit_Default, default_block, default_clause); lb_pop_target_list(p); } lb_emit_jump(p, done); lb_start_block(p, done); - lb_close_scope(p, lbDeferExit_Default, done); + lb_close_scope(p, lbDeferExit_Default, done, ss->body); } gb_internal void lb_store_type_case_implicit(lbProcedure *p, Ast *clause, lbValue value, bool is_default_case) { @@ -1627,7 +1629,7 @@ gb_internal void lb_type_case_body(lbProcedure *p, Ast *label, Ast *clause, lbBl lb_push_target_list(p, label, done, nullptr, nullptr); lb_build_stmt_list(p, cc->stmts); - lb_close_scope(p, lbDeferExit_Default, body); + lb_close_scope(p, lbDeferExit_Default, body, clause); lb_pop_target_list(p); lb_emit_jump(p, done); @@ -1835,7 +1837,7 @@ gb_internal void lb_build_type_switch_stmt(lbProcedure *p, AstTypeSwitchStmt *ss lb_emit_jump(p, done); lb_start_block(p, done); - lb_close_scope(p, lbDeferExit_Default, done); + lb_close_scope(p, lbDeferExit_Default, done, ss->body); } @@ -1959,7 +1961,7 @@ gb_internal void lb_build_assignment(lbProcedure *p, Array &lvals, Slice p->in_multi_assignment = prev_in_assignment; } -gb_internal void lb_build_return_stmt_internal(lbProcedure *p, lbValue res) { +gb_internal void lb_build_return_stmt_internal(lbProcedure *p, lbValue res, TokenPos pos) { lbFunctionType *ft = lb_get_function_type(p->module, p->type); bool return_by_pointer = ft->ret.kind == lbArg_Indirect; bool split_returns = ft->multiple_return_original_type != nullptr; @@ -1982,7 +1984,7 @@ gb_internal void lb_build_return_stmt_internal(lbProcedure *p, lbValue res) { LLVMBuildStore(p->builder, LLVMConstNull(p->abi_function_type->ret.type), p->return_ptr.addr.value); } - lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr); + lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr, pos); // Check for terminator in the defer stmts LLVMValueRef instr = LLVMGetLastInstruction(p->curr_block->block); @@ -2012,7 +2014,7 @@ gb_internal void lb_build_return_stmt_internal(lbProcedure *p, lbValue res) { ret_val = OdinLLVMBuildTransmute(p, ret_val, ret_type); } - lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr); + lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr, pos); // Check for terminator in the defer stmts LLVMValueRef instr = LLVMGetLastInstruction(p->curr_block->block); @@ -2021,7 +2023,7 @@ gb_internal void lb_build_return_stmt_internal(lbProcedure *p, lbValue res) { } } } -gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return_results) { +gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return_results, TokenPos pos) { lb_ensure_abi_function_type(p->module, p); isize return_count = p->type->Proc.result_count; @@ -2029,7 +2031,7 @@ gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return if (return_count == 0) { // No return values - lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr); + lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr, pos); // Check for terminator in the defer stmts LLVMValueRef instr = LLVMGetLastInstruction(p->curr_block->block); @@ -2138,11 +2140,11 @@ gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return GB_ASSERT(result_values.count-1 == result_eps.count); lb_addr_store(p, p->return_ptr, result_values[result_values.count-1]); - lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr); + lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr, pos); LLVMBuildRetVoid(p->builder); return; } else { - return lb_build_return_stmt_internal(p, result_values[result_values.count-1]); + return lb_build_return_stmt_internal(p, result_values[result_values.count-1], pos); } } else { @@ -2169,7 +2171,7 @@ gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return } if (return_by_pointer) { - lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr); + lb_emit_defer_stmts(p, lbDeferExit_Return, nullptr, pos); LLVMBuildRetVoid(p->builder); return; } @@ -2177,13 +2179,13 @@ gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return res = lb_emit_load(p, res); } } - lb_build_return_stmt_internal(p, res); + lb_build_return_stmt_internal(p, res, pos); } gb_internal void lb_build_if_stmt(lbProcedure *p, Ast *node) { ast_node(is, IfStmt, node); lb_open_scope(p, is->scope); // Scope #1 - defer (lb_close_scope(p, lbDeferExit_Default, nullptr)); + defer (lb_close_scope(p, lbDeferExit_Default, nullptr, node)); lbBlock *then = lb_create_block(p, "if.then"); lbBlock *done = lb_create_block(p, "if.done"); @@ -2234,7 +2236,7 @@ gb_internal void lb_build_if_stmt(lbProcedure *p, Ast *node) { lb_open_scope(p, scope_of_node(is->else_stmt)); lb_build_stmt(p, is->else_stmt); - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, is->else_stmt); } lb_emit_jump(p, done); @@ -2251,7 +2253,7 @@ gb_internal void lb_build_if_stmt(lbProcedure *p, Ast *node) { lb_open_scope(p, scope_of_node(is->else_stmt)); lb_build_stmt(p, is->else_stmt); - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, is->else_stmt); lb_emit_jump(p, done); } @@ -2322,7 +2324,7 @@ gb_internal void lb_build_for_stmt(lbProcedure *p, Ast *node) { } lb_start_block(p, done); - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, node); } gb_internal void lb_build_assign_stmt_array(lbProcedure *p, TokenKind op, lbAddr const &lhs, lbValue const &value) { @@ -2588,7 +2590,7 @@ gb_internal void lb_build_stmt(lbProcedure *p, Ast *node) { lb_open_scope(p, bs->scope); lb_build_stmt_list(p, bs->stmts); - lb_close_scope(p, lbDeferExit_Default, nullptr); + lb_close_scope(p, lbDeferExit_Default, nullptr, node); if (done != nullptr) { lb_emit_jump(p, done); @@ -2702,7 +2704,7 @@ gb_internal void lb_build_stmt(lbProcedure *p, Ast *node) { case_end; case_ast_node(rs, ReturnStmt, node); - lb_build_return_stmt(p, rs->results); + lb_build_return_stmt(p, rs->results, ast_token(node).pos); case_end; case_ast_node(is, IfStmt, node); @@ -2755,7 +2757,7 @@ gb_internal void lb_build_stmt(lbProcedure *p, Ast *node) { } } if (block != nullptr) { - lb_emit_defer_stmts(p, lbDeferExit_Branch, block); + lb_emit_defer_stmts(p, lbDeferExit_Branch, block, node); } lb_emit_jump(p, block); lb_start_block(p, lb_create_block(p, "unreachable")); @@ -2795,7 +2797,13 @@ gb_internal void lb_build_defer_stmt(lbProcedure *p, lbDefer const &d) { } } -gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlock *block) { +gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, TokenPos pos) { + TokenPos prev_token_pos = p->branch_location_pos; + if (p->uses_branch_location) { + p->branch_location_pos = pos; + } + defer (p->branch_location_pos = prev_token_pos); + isize count = p->defer_stmts.count; isize i = count; while (i --> 0) { @@ -2822,6 +2830,21 @@ gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlo } } +gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, Ast *node) { + TokenPos pos = {}; + if (node) { + if (node->kind == Ast_BlockStmt) { + pos = ast_end_token(node).pos; + } else if (node->kind == Ast_CaseClause) { + pos = ast_end_token(node).pos; + } else { + pos = ast_token(node).pos; + } + } + return lb_emit_defer_stmts(p, kind, block, pos); +} + + gb_internal void lb_add_defer_node(lbProcedure *p, isize scope_index, Ast *stmt) { Type *pt = base_type(p->type); GB_ASSERT(pt->kind == Type_Proc); diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index a2a0ba4cc..3e4393a8f 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -476,8 +476,8 @@ gb_internal lbValue lb_emit_or_else(lbProcedure *p, Ast *arg, Ast *else_expr, Ty } } -gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return_results); -gb_internal void lb_build_return_stmt_internal(lbProcedure *p, lbValue res); +gb_internal void lb_build_return_stmt(lbProcedure *p, Slice const &return_results, TokenPos pos); +gb_internal void lb_build_return_stmt_internal(lbProcedure *p, lbValue res, TokenPos pos); gb_internal lbValue lb_emit_or_return(lbProcedure *p, Ast *arg, TypeAndValue const &tv) { lbValue lhs = {}; @@ -506,10 +506,10 @@ gb_internal lbValue lb_emit_or_return(lbProcedure *p, Ast *arg, TypeAndValue con lbValue found = map_must_get(&p->module->values, end_entity); lb_emit_store(p, found, rhs); - lb_build_return_stmt(p, {}); + lb_build_return_stmt(p, {}, ast_token(arg).pos); } else { GB_ASSERT(tuple->variables.count == 1); - lb_build_return_stmt_internal(p, rhs); + lb_build_return_stmt_internal(p, rhs, ast_token(arg).pos); } } lb_start_block(p, continue_block); From 51e90e5e96d409086f96a9c3e1b5fbbdbb44eecc Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Wed, 1 Jan 2025 21:07:44 +0100 Subject: [PATCH 53/91] Fix for vendor:libc using wrong types for log and sin procs. --- vendor/libc/include/math.h | 4 ++-- vendor/libc/math.odin | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vendor/libc/include/math.h b/vendor/libc/include/math.h index 3f60d698f..9d486da11 100644 --- a/vendor/libc/include/math.h +++ b/vendor/libc/include/math.h @@ -17,5 +17,5 @@ double fabs(double x); int abs(int); double ldexp(double, int); double exp(double); -float log(float); -float sin(float); +double log(double); +double sin(double); diff --git a/vendor/libc/math.odin b/vendor/libc/math.odin index 59f42dd67..af319ac6d 100644 --- a/vendor/libc/math.odin +++ b/vendor/libc/math.odin @@ -90,11 +90,11 @@ exp :: proc "c" (x: f64) -> f64 { } @(require, linkage="strong", link_name="log") -log :: proc "c" (x: f32) -> f32 { +log :: proc "c" (x: f64) -> f64 { return math.ln(x) } @(require, linkage="strong", link_name="sin") -sin :: proc "c" (x: f32) -> f32 { +sin :: proc "c" (x: f64) -> f64 { return math.sin(x) } From f80c33727ca4920e8ffe809c1c79abb093595c76 Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Wed, 1 Jan 2025 21:15:44 +0100 Subject: [PATCH 54/91] Fix for casing error in box2d/wasm.Makefile --- vendor/box2d/wasm.Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/box2d/wasm.Makefile b/vendor/box2d/wasm.Makefile index 929b61aea..c3e3ed25a 100644 --- a/vendor/box2d/wasm.Makefile +++ b/vendor/box2d/wasm.Makefile @@ -10,7 +10,7 @@ SRCS = $(wildcard box2d-$(VERSION)/src/*.c) OBJS_SIMD = $(SRCS:.c=_simd.o) OBJS = $(SRCS:.c=.o) SYSROOT = $(shell odin root)/vendor/libc -CFLAGS = -Ibox2d-$(VERSION)/include -Ibox2d-$(VERSION)/Extern/simde --target=wasm32 -D__EMSCRIPTEN__ -DNDEBUG -O3 --sysroot=$(SYSROOT) +CFLAGS = -Ibox2d-$(VERSION)/include -Ibox2d-$(VERSION)/extern/simde --target=wasm32 -D__EMSCRIPTEN__ -DNDEBUG -O3 --sysroot=$(SYSROOT) all: lib/box2d_wasm.o lib/box2d_wasm_simd.o clean From dc1b75b6c3f493faa4d5ad79770a55c2595a33da Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Wed, 1 Jan 2025 22:02:41 +0100 Subject: [PATCH 55/91] Added WASM libs for raylib and raygui. Added them to the foreign import blocks, with optional ways to override them. These overrides can be used to use alterantive libs when using for example emscripten. --- vendor/raylib/raygui.odin | 5 +++++ vendor/raylib/raylib.odin | 5 +++++ vendor/raylib/rlgl/rlgl.odin | 5 +++++ vendor/raylib/wasm/libraygui.a | Bin 0 -> 188456 bytes vendor/raylib/wasm/libraylib.a | Bin 0 -> 1388436 bytes 5 files changed, 15 insertions(+) create mode 100644 vendor/raylib/wasm/libraygui.a create mode 100644 vendor/raylib/wasm/libraylib.a diff --git a/vendor/raylib/raygui.odin b/vendor/raylib/raygui.odin index a15467ae8..559437a60 100644 --- a/vendor/raylib/raygui.odin +++ b/vendor/raylib/raygui.odin @@ -3,6 +3,7 @@ package raylib import "core:c" RAYGUI_SHARED :: #config(RAYGUI_SHARED, false) +RAYGUI_WASM_LIB :: #config(RAYGUI_WASM_LIB, "wasm/libraygui.a") when ODIN_OS == .Windows { foreign import lib { @@ -22,6 +23,10 @@ when ODIN_OS == .Windows { "macos/libraygui.dylib" when RAYGUI_SHARED else "macos/libraygui.a", } } +} else when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { + foreign import lib { + RAYGUI_WASM_LIB, + } } else { foreign import lib "system:raygui" } diff --git a/vendor/raylib/raylib.odin b/vendor/raylib/raylib.odin index 34a803b99..bb51f105f 100644 --- a/vendor/raylib/raylib.odin +++ b/vendor/raylib/raylib.odin @@ -100,6 +100,7 @@ MAX_TEXT_BUFFER_LENGTH :: #config(RAYLIB_MAX_TEXT_BUFFER_LENGTH, 1024) #assert(size_of(rune) == size_of(c.int)) RAYLIB_SHARED :: #config(RAYLIB_SHARED, false) +RAYLIB_WASM_LIB :: #config(RAYLIB_WASM_LIB, "wasm/libraylib.a") when ODIN_OS == .Windows { @(extra_linker_flags="/NODEFAULTLIB:" + ("msvcrt" when RAYLIB_SHARED else "libcmt")) @@ -127,6 +128,10 @@ when ODIN_OS == .Windows { "system:OpenGL.framework", "system:IOKit.framework", } +} else when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { + foreign import lib { + RAYLIB_WASM_LIB, + } } else { foreign import lib "system:raylib" } diff --git a/vendor/raylib/rlgl/rlgl.odin b/vendor/raylib/rlgl/rlgl.odin index 40913cd50..340a983de 100644 --- a/vendor/raylib/rlgl/rlgl.odin +++ b/vendor/raylib/rlgl/rlgl.odin @@ -113,6 +113,7 @@ import rl "../." VERSION :: "5.0" RAYLIB_SHARED :: #config(RAYLIB_SHARED, false) +RAYLIB_WASM_LIB :: #config(RAYLIB_WASM_LIB, "../wasm/libraylib.a") // Note: We pull in the full raylib library. If you want a truly stand-alone rlgl, then: // - Compile a separate rlgl library and use that in the foreign import blocks below. @@ -145,6 +146,10 @@ when ODIN_OS == .Windows { "system:OpenGL.framework", "system:IOKit.framework", } +} else when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 { + foreign import lib { + RAYLIB_WASM_LIB, + } } else { foreign import lib "system:raylib" } diff --git a/vendor/raylib/wasm/libraygui.a b/vendor/raylib/wasm/libraygui.a new file mode 100644 index 0000000000000000000000000000000000000000..cfde78a931590ab927c874c6fce8d6866a9ddfe4 GIT binary patch literal 188456 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�E=0>r-V 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

HR%u#b&^T{xhV6kZlVE5BTuTj-aM#dsY;`wl5U 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 literal 0 HcmV?d00001 diff --git a/vendor/raylib/wasm/libraylib.a b/vendor/raylib/wasm/libraylib.a new file mode 100644 index 0000000000000000000000000000000000000000..4cdbfa6948e492fefbad6c081f796f8eb128fecf GIT binary patch literal 1388436 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

-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
9ffC_%Vt)M!wqCv&>pL#yi>m!ba&8usb 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