replace null, true, false with integers in code

This commit is contained in:
jacob 2025-07-10 13:11:36 -05:00
parent a1e062f362
commit 905151abe9
47 changed files with 712 additions and 721 deletions

54
build.c
View File

@ -6,7 +6,7 @@ typedef struct StepList StepList;
* Globals * Globals
* ========================== */ * ========================== */
Bool force_rebuild = false; Bool force_rebuild = 0;
Arena perm = { 0 }; Arena perm = { 0 };
D_Store store = { 0 }; D_Store store = { 0 };
@ -15,14 +15,14 @@ StepList *sl = { 0 };
/* Args */ /* Args */
String arg_outdir = Lit("build"); String arg_outdir = Lit("build");
Bool arg_msvc = false; Bool arg_msvc = 0;
Bool arg_rtc = false; Bool arg_rtc = 0;
Bool arg_asan = false; Bool arg_asan = 0;
Bool arg_crtlib = false; Bool arg_crtlib = 0;
Bool arg_debinfo = false; Bool arg_debinfo = 0;
Bool arg_developer = false; Bool arg_developer = 0;
Bool arg_profiling = false; Bool arg_profiling = 0;
Bool arg_unoptimized = false; Bool arg_unoptimized = 0;
/* ========================== * /* ========================== *
* Util * Util
@ -35,7 +35,7 @@ void Error(String msg)
Bool IsDirty(D_Tag tag) Bool IsDirty(D_Tag tag)
{ {
Bool res = force_rebuild ? true : D_IsDirty(&store, &hist, tag); Bool res = force_rebuild ? 1 : D_IsDirty(&store, &hist, tag);
if (!res) { if (!res) {
if (tag.kind == D_TagKind_File || tag.kind == D_TagKind_Dir) { if (tag.kind == D_TagKind_File || tag.kind == D_TagKind_Dir) {
res = !D_Exists(tag); res = !D_Exists(tag);
@ -47,13 +47,13 @@ Bool IsDirty(D_Tag tag)
SH_CommandResult RunCommand(Arena *arena, String command) SH_CommandResult RunCommand(Arena *arena, String command)
{ {
SH_CommandResult res = SH_RunCommandCaptureOutput(arena, command, true); SH_CommandResult res = SH_RunCommandCaptureOutput(arena, command, 1);
return res; return res;
} }
void KillRunningProcesses(void) void KillRunningProcesses(void)
{ {
SH_RunCommand(Lit("taskkill /im PowerPlay.exe /f /fi \"STATUS eq RUNNING\""), true); SH_RunCommand(Lit("taskkill /im PowerPlay.exe /f /fi \"STATUS eq RUNNING\""), 1);
} }
/* ========================== * /* ========================== *
@ -350,15 +350,15 @@ void OnBuild(StringList cli_args)
default: default:
{ {
if (StringEqual(arg, Lit("-O"))) arg_state = ArgState_OutputDir; if (StringEqual(arg, Lit("-O"))) arg_state = ArgState_OutputDir;
if (StringEqual(arg, Lit("-clang"))) arg_msvc = false; if (StringEqual(arg, Lit("-clang"))) arg_msvc = 0;
if (StringEqual(arg, Lit("-msvc"))) arg_msvc = true; if (StringEqual(arg, Lit("-msvc"))) arg_msvc = 1;
if (StringEqual(arg, Lit("-rtc"))) arg_rtc = true; if (StringEqual(arg, Lit("-rtc"))) arg_rtc = 1;
if (StringEqual(arg, Lit("-asan"))) arg_asan = true; if (StringEqual(arg, Lit("-asan"))) arg_asan = 1;
if (StringEqual(arg, Lit("-crtlib"))) arg_crtlib = true; if (StringEqual(arg, Lit("-crtlib"))) arg_crtlib = 1;
if (StringEqual(arg, Lit("-debinfo"))) arg_debinfo = true; if (StringEqual(arg, Lit("-debinfo"))) arg_debinfo = 1;
if (StringEqual(arg, Lit("-developer"))) arg_developer = true; if (StringEqual(arg, Lit("-developer"))) arg_developer = 1;
if (StringEqual(arg, Lit("-profiling"))) arg_profiling = true; if (StringEqual(arg, Lit("-profiling"))) arg_profiling = 1;
if (StringEqual(arg, Lit("-unoptimized"))) arg_unoptimized = true; if (StringEqual(arg, Lit("-unoptimized"))) arg_unoptimized = 1;
} break; } break;
} }
} }
@ -625,7 +625,7 @@ void OnBuild(StringList cli_args)
if (build_hash != old_build_hash) { if (build_hash != old_build_hash) {
SH_Print(Lit("Builder exe or build args have changed, forcing complete rebuild.\n")); SH_Print(Lit("Builder exe or build args have changed, forcing complete rebuild.\n"));
force_rebuild = true; force_rebuild = 1;
String data = StringFromStruct(&build_hash); String data = StringFromStruct(&build_hash);
D_ClearWrite(build_hash_file, data); D_ClearWrite(build_hash_file, data);
} }
@ -823,10 +823,10 @@ void OnBuild(StringList cli_args)
D_TagList src_input_files = { 0 }; D_TagList src_input_files = { 0 };
{ {
D_Tag src_dir = D_TagFromPath(&perm, Lit("src"), D_TagKind_Dir); D_Tag src_dir = D_TagFromPath(&perm, Lit("src"), D_TagKind_Dir);
D_TagList src_files = D_GetDirContents(&perm, src_dir, false); D_TagList src_files = D_GetDirContents(&perm, src_dir, 0);
for (D_TagListNode *n = src_files.first; n; n = n->next) { for (D_TagListNode *n = src_files.first; n; n = n->next) {
Bool ignore = true; Bool ignore = 1;
D_Tag file = n->tag; D_Tag file = n->tag;
String path = file.full_path; String path = file.full_path;
@ -851,7 +851,7 @@ void OnBuild(StringList cli_args)
StringEqual(name, Lit("ttf_dwrite.cpp"))); StringEqual(name, Lit("ttf_dwrite.cpp")));
} }
} else { } else {
ignore = false; ignore = 0;
} }
} }
@ -948,7 +948,7 @@ void OnBuild(StringList cli_args)
* Execute build steps * Execute build steps
* ========================== */ * ========================== */
Bool success = true; Bool success = 1;
I64 step_count = sl->count; I64 step_count = sl->count;
if (step_count > 0) { if (step_count > 0) {
KillRunningProcesses(); KillRunningProcesses();
@ -971,7 +971,7 @@ void OnBuild(StringList cli_args)
if (s->res_status == StepStatus_Success) { if (s->res_status == StepStatus_Success) {
SH_PrintF(Lit("[%F/%F] %F\n"), FmtI64(step_i), FmtI64(step_count), FmtStr(s->name)); SH_PrintF(Lit("[%F/%F] %F\n"), FmtI64(step_i), FmtI64(step_count), FmtStr(s->name));
} else if (s->res_status == StepStatus_Failure) { } else if (s->res_status == StepStatus_Failure) {
success = false; success = 0;
SH_PrintF(Lit("[%F/%F] %F\n\n%F\n\n"), FmtI64(step_i), FmtI64(step_count), FmtStr(s->name), FmtStr(output)); SH_PrintF(Lit("[%F/%F] %F\n\n%F\n\n"), FmtI64(step_i), FmtI64(step_count), FmtStr(s->name), FmtStr(output));
} }

View File

@ -100,7 +100,7 @@ SH_ENTRY(ROOTSIG) struct ps_output ps(struct ps_input input)
} else if (dist < half_thickness) { } else if (dist < half_thickness) {
color_srgb = grid.line_srgb; color_srgb = grid.line_srgb;
} else { } else {
bool checker = false; bool checker = 0;
uint cell_x = (uint)(abs(grid_pos.x) / spacing) + (grid_pos.x < 0); uint cell_x = (uint)(abs(grid_pos.x) / spacing) + (grid_pos.x < 0);
uint cell_y = (uint)(abs(grid_pos.y) / spacing) + (grid_pos.y < 0); uint cell_y = (uint)(abs(grid_pos.y) / spacing) + (grid_pos.y < 0);
if (cell_x % 2 == 0) { if (cell_x % 2 == 0) {

View File

@ -66,7 +66,7 @@ void *arena_push_bytes_no_zero(struct arena *arena, u64 size, u64 align)
ASSERT(align > 0); ASSERT(align > 0);
ASSERT(!arena->readonly); ASSERT(!arena->readonly);
void *ptr = NULL; void *ptr = 0;
u8 *base = arena_base(arena); u8 *base = arena_base(arena);
/* Check to avoid aligning when size = 0 */ /* Check to avoid aligning when size = 0 */
@ -121,14 +121,14 @@ void arena_copy_replace(struct arena *dst, struct arena *src)
void arena_decommit_unused_blocks(struct arena *arena) void arena_decommit_unused_blocks(struct arena *arena)
{ {
/* Not implemented */ /* Not implemented */
ASSERT(false); ASSERT(0);
(UNUSED)arena; (UNUSED)arena;
} }
void arena_set_readonly(struct arena *arena) void arena_set_readonly(struct arena *arena)
{ {
#if RTC #if RTC
arena->readonly = true; arena->readonly = 1;
#endif #endif
sys_memory_set_committed_readonly(arena, arena->committed + ARENA_HEADER_SIZE); sys_memory_set_committed_readonly(arena, arena->committed + ARENA_HEADER_SIZE);
} }
@ -137,6 +137,6 @@ void arena_set_readwrite(struct arena *arena)
{ {
sys_memory_set_committed_readwrite(arena, arena->committed + ARENA_HEADER_SIZE); sys_memory_set_committed_readwrite(arena, arena->committed + ARENA_HEADER_SIZE);
#if RTC #if RTC
arena->readonly = false; arena->readonly = 0;
#endif #endif
} }

View File

@ -85,7 +85,7 @@ INLINE void *arena_align(struct arena *arena, u64 align)
} }
} else { } else {
/* 0 alignment */ /* 0 alignment */
ASSERT(false); ASSERT(0);
return (void *)(arena_base(arena) + arena->pos); return (void *)(arena_base(arena) + arena->pos);
} }
} }
@ -144,7 +144,7 @@ INLINE struct arena_temp _scratch_begin(struct arena *potential_conflict)
STATIC_ASSERT(SYS_SCRATCH_ARENAS_PER_CTX == 2); STATIC_ASSERT(SYS_SCRATCH_ARENAS_PER_CTX == 2);
/* Use `scratch_begin_no_conflict` if no conflicts are present */ /* Use `scratch_begin_no_conflict` if no conflicts are present */
ASSERT(potential_conflict != NULL); ASSERT(potential_conflict != 0);
struct sys_scratch_ctx *ctx = sys_scratch_ctx_from_fiber_id(sys_current_fiber_id()); struct sys_scratch_ctx *ctx = sys_scratch_ctx_from_fiber_id(sys_current_fiber_id());
struct arena *scratch_arena = ctx->arenas[0]; struct arena *scratch_arena = ctx->arenas[0];

View File

@ -315,7 +315,7 @@ INTERNAL void inflate(u8 *dst, u8 *encoded)
rep_count = 11 + consume_bits(&bb, 7); rep_count = 11 + consume_bits(&bb, 7);
} else { } else {
/* Invalid len */ /* Invalid len */
ASSERT(false); ASSERT(0);
} }
while (rep_count--) { while (rep_count--) {
@ -341,7 +341,7 @@ INTERNAL void inflate(u8 *dst, u8 *encoded)
struct huffman lit_len_huffman = huffman_init(temp.arena, 15, lit_len_dist_table, hlit); struct huffman lit_len_huffman = huffman_init(temp.arena, 15, lit_len_dist_table, hlit);
struct huffman dist_huffman = huffman_init(temp.arena, 15, lit_len_dist_table + hlit, hdist); struct huffman dist_huffman = huffman_init(temp.arena, 15, lit_len_dist_table + hlit, hdist);
while (true) { while (1) {
u32 lit_len = huffman_decode(&lit_len_huffman, &bb); u32 lit_len = huffman_decode(&lit_len_huffman, &bb);
if (lit_len <= 255) { if (lit_len <= 255) {
*dst++ = lit_len & 0xFF; *dst++ = lit_len & 0xFF;
@ -375,7 +375,7 @@ INTERNAL void inflate(u8 *dst, u8 *encoded)
case BLOCK_TYPE_RESERVED: { case BLOCK_TYPE_RESERVED: {
/* TODO */ /* TODO */
ASSERT(false); ASSERT(0);
} break; } break;
} }
} }
@ -588,10 +588,10 @@ struct ase_decode_image_result ase_decode_image(struct arena *arena, struct stri
res.image.pixels = arena_push_array(arena, u32, image_width * image_height); res.image.pixels = arena_push_array(arena, u32, image_width * image_height);
u32 num_layers = 0; u32 num_layers = 0;
struct layer *layer_head = NULL; struct layer *layer_head = 0;
struct cel *cel_head = NULL; struct cel *cel_head = 0;
struct cel *cel_tail = NULL; struct cel *cel_tail = 0;
/* Iterate frames */ /* Iterate frames */
u32 num_frames = 0; u32 num_frames = 0;
@ -799,7 +799,7 @@ struct ase_decode_image_result ase_decode_image(struct arena *arena, struct stri
abort: abort:
if (res.errors.count <= 0) { if (res.errors.count <= 0) {
res.success = true; res.success = 1;
} }
scratch_end(scratch); scratch_end(scratch);
@ -831,13 +831,13 @@ struct ase_decode_sheet_result ase_decode_sheet(struct arena *arena, struct stri
make_image_dimensions_squareish(&ase_header, &frames_x, &frames_y, &image_width, &image_height); make_image_dimensions_squareish(&ase_header, &frames_x, &frames_y, &image_width, &image_height);
u32 num_frames = 0; u32 num_frames = 0;
struct ase_frame *frame_head = NULL; struct ase_frame *frame_head = 0;
u32 num_spans = 0; u32 num_spans = 0;
struct ase_span *span_head = NULL; struct ase_span *span_head = 0;
u32 num_slice_keys = 0; u32 num_slice_keys = 0;
struct ase_slice_key *slice_key_head = NULL; struct ase_slice_key *slice_key_head = 0;
/* Iterate frames */ /* Iterate frames */
for (u16 i = 0; i < ase_header.frames; ++i) { for (u16 i = 0; i < ase_header.frames; ++i) {
@ -974,7 +974,7 @@ struct ase_decode_sheet_result ase_decode_sheet(struct arena *arena, struct stri
res.slice_key_head = slice_key_head; res.slice_key_head = slice_key_head;
if (res.errors.count <= 0) { if (res.errors.count <= 0) {
res.success = true; res.success = 1;
} }
return res; return res;

View File

@ -70,7 +70,7 @@ INTERNAL struct asset *asset_cache_get_slot_locked(struct snc_lock *lock, struct
(UNUSED)lock; (UNUSED)lock;
u64 index = hash % countof(G.lookup); u64 index = hash % countof(G.lookup);
while (true) { while (1) {
struct asset *slot = &G.lookup[index]; struct asset *slot = &G.lookup[index];
if (slot->hash) { if (slot->hash) {
/* Occupied */ /* Occupied */
@ -100,13 +100,13 @@ u64 asset_cache_hash(struct string key)
* *
* Returns existing asset entry or inserts a new one. * Returns existing asset entry or inserts a new one.
* *
* If is_first_touch (out parameter) is set to true, then the caller has * If is_first_touch (out parameter) is set to 1, then the caller has
* inserted the asset into the cache. * inserted the asset into the cache.
* *
* */ * */
struct asset *asset_cache_touch(struct string key, u64 hash, b32 *is_first_touch) struct asset *asset_cache_touch(struct string key, u64 hash, b32 *is_first_touch)
{ {
struct asset *asset = NULL; struct asset *asset = 0;
/* Lookup */ /* Lookup */
{ {
@ -118,7 +118,7 @@ struct asset *asset_cache_touch(struct string key, u64 hash, b32 *is_first_touch
/* Insert if not found */ /* Insert if not found */
if (asset->hash) { if (asset->hash) {
if (is_first_touch) { if (is_first_touch) {
*is_first_touch = false; *is_first_touch = 0;
} }
} else { } else {
struct snc_lock lock = snc_lock_e(&G.lookup_mutex); struct snc_lock lock = snc_lock_e(&G.lookup_mutex);
@ -146,7 +146,7 @@ struct asset *asset_cache_touch(struct string key, u64 hash, b32 *is_first_touch
}; };
snc_counter_add(&asset->counter, 1); snc_counter_add(&asset->counter, 1);
if (is_first_touch) { if (is_first_touch) {
*is_first_touch = true; *is_first_touch = 1;
} }
++G.num_assets; ++G.num_assets;
@ -198,7 +198,7 @@ void *asset_cache_get_store_data(struct asset *asset)
if (asset->status == ASSET_STATUS_READY) { if (asset->status == ASSET_STATUS_READY) {
return asset->store_data; return asset->store_data;
} else { } else {
return NULL; return 0;
} }
} }

View File

@ -91,7 +91,7 @@ struct bitbuff bitbuff_alloc(u64 arena_reserve)
{ {
struct bitbuff res = ZI; struct bitbuff res = ZI;
res.arena = arena_alloc(arena_reserve); res.arena = arena_alloc(arena_reserve);
res.is_backed_by_arena = true; res.is_backed_by_arena = 1;
return res; return res;
} }
@ -125,7 +125,7 @@ struct bitbuff_writer bw_from_bitbuff(struct bitbuff *bb)
} }
res.cur_bit = 0; res.cur_bit = 0;
#if BITBUFF_DEBUG #if BITBUFF_DEBUG
res.debug_enabled = true; res.debug_enabled = 1;
#endif #endif
return res; return res;
} }
@ -135,7 +135,7 @@ struct bitbuff_writer bw_from_bitbuff_no_debug(struct bitbuff *bb)
{ {
struct bitbuff_writer res = bw_from_bitbuff(bb); struct bitbuff_writer res = bw_from_bitbuff(bb);
#if BITBUFF_DEBUG #if BITBUFF_DEBUG
res.debug_enabled = false; res.debug_enabled = 0;
#endif #endif
return res; return res;
} }
@ -168,13 +168,13 @@ u8 *bw_get_written_raw(struct bitbuff_writer *bw)
return bw->base; return bw->base;
} }
/* Returns true if num_bits would cause the writer to overflow its fixed buffer size (if writer is not backed by a dynamic arena bitbuff) */ /* Returns 1 if num_bits would cause the writer to overflow its fixed buffer size (if writer is not backed by a dynamic arena bitbuff) */
b32 bw_check_overflow_bits(struct bitbuff_writer *bw, u64 num_bits) b32 bw_check_overflow_bits(struct bitbuff_writer *bw, u64 num_bits)
{ {
b32 res = false; b32 res = 0;
struct bitbuff *bb = bw->bb; struct bitbuff *bb = bw->bb;
if (bw->overflowed) { if (bw->overflowed) {
res = true; res = 1;
} else { } else {
u64 bytes_needed = (bw->cur_bit + num_bits + 7) >> 3; u64 bytes_needed = (bw->cur_bit + num_bits + 7) >> 3;
if (bb->is_backed_by_arena) { if (bb->is_backed_by_arena) {
@ -188,10 +188,10 @@ b32 bw_check_overflow_bits(struct bitbuff_writer *bw, u64 num_bits)
u64 max_len = bb->fixed_buffer.len; u64 max_len = bb->fixed_buffer.len;
if (bytes_needed >= max_len) { if (bytes_needed >= max_len) {
/* Writer overflowed fixed buffer */ /* Writer overflowed fixed buffer */
ASSERT(false); ASSERT(0);
res = true; res = 1;
bw->cur_bit = max_len << 3; bw->cur_bit = max_len << 3;
bw->overflowed = true; bw->overflowed = 1;
} }
} }
} }
@ -388,7 +388,7 @@ struct bitbuff_reader br_from_bitbuff(struct bitbuff *bb)
} }
res.cur_bit = 0; res.cur_bit = 0;
#if BITBUFF_DEBUG #if BITBUFF_DEBUG
res.debug_enabled = true; res.debug_enabled = 1;
#endif #endif
return res; return res;
} }
@ -398,7 +398,7 @@ struct bitbuff_reader br_from_bitbuff_no_debug(struct bitbuff *bb)
{ {
struct bitbuff_reader res = br_from_bitbuff(bb); struct bitbuff_reader res = br_from_bitbuff(bb);
#if BITBUFF_DEBUG #if BITBUFF_DEBUG
res.debug_enabled = false; res.debug_enabled = 0;
#endif #endif
return res; return res;
} }
@ -433,18 +433,18 @@ u64 br_num_bytes_left(struct bitbuff_reader *br)
b32 br_check_overflow_bits(struct bitbuff_reader *br, u64 num_bits) b32 br_check_overflow_bits(struct bitbuff_reader *br, u64 num_bits)
{ {
b32 res = false; b32 res = 0;
if (br->overflowed) { if (br->overflowed) {
res = true; res = 1;
} else { } else {
u64 bits_needed = br->cur_bit + num_bits; u64 bits_needed = br->cur_bit + num_bits;
u64 base_len_bits = br->base_len << 3; u64 base_len_bits = br->base_len << 3;
if (bits_needed > base_len_bits) { if (bits_needed > base_len_bits) {
/* Tried to read past bitbuff memory */ /* Tried to read past bitbuff memory */
ASSERT(false); ASSERT(0);
res = true; res = 1;
br->cur_bit = base_len_bits; br->cur_bit = base_len_bits;
br->overflowed = true; br->overflowed = 1;
} }
} }
return res; return res;
@ -603,7 +603,7 @@ struct string br_read_string(struct arena *arena, struct bitbuff_reader *br)
struct string res = ZI; struct string res = ZI;
u64 len = br_read_uv(br); u64 len = br_read_uv(br);
u8 *src = br_read_bytes_raw(br, len); u8 *src = br_read_bytes_raw(br, len);
if (src != NULL) { if (src != 0) {
res.len = len; res.len = len;
res.text = arena_push_array_no_zero(arena, u8, len); res.text = arena_push_array_no_zero(arena, u8, len);
MEMCPY(res.text, src, len); MEMCPY(res.text, src, len);
@ -622,14 +622,14 @@ void br_read_bytes(struct bitbuff_reader *br, struct string out)
} }
} }
/* NULL will return on bitbuff overflow, result should be checked. */ /* Will return NULL on bitbuff overflow. Result should be checked. */
u8 *br_read_bytes_raw(struct bitbuff_reader *br, u64 num_bytes) u8 *br_read_bytes_raw(struct bitbuff_reader *br, u64 num_bytes)
{ {
br_align(br); br_align(br);
u64 num_bits = num_bytes << 3; u64 num_bits = num_bytes << 3;
if (br_check_overflow_bits(br, num_bits)) { if (br_check_overflow_bits(br, num_bits)) {
return NULL; return 0;
} }
u8 *raw = br->base + (br->cur_bit >> 3); u8 *raw = br->base + (br->cur_bit >> 3);
@ -657,8 +657,8 @@ void br_seek_to_byte(struct bitbuff_reader *br, u64 pos)
br_seek_bytes(br, pos - cur_byte_pos); br_seek_bytes(br, pos - cur_byte_pos);
} else { } else {
/* Tried to seek byte backwards in reader */ /* Tried to seek byte backwards in reader */
ASSERT(false); ASSERT(0);
br->overflowed = true; br->overflowed = 1;
br->cur_bit = (br->base_len << 3); br->cur_bit = (br->base_len << 3);
} }
@ -767,7 +767,7 @@ void bitbuff_test(void)
} else if (c.kind == kind_string) { } else if (c.kind == kind_string) {
bw_write_string(&bw, c.s.v); bw_write_string(&bw, c.s.v);
} else { } else {
ASSERT(false); ASSERT(0);
} }
} }
encoded = bw_get_written(scratch.arena, &bw); encoded = bw_get_written(scratch.arena, &bw);
@ -799,7 +799,7 @@ void bitbuff_test(void)
struct string r = br_read_string(scratch.arena, &br); struct string r = br_read_string(scratch.arena, &br);
ASSERT(string_eq(r, w)); ASSERT(string_eq(r, w));
} else { } else {
ASSERT(false); ASSERT(0);
} }
} }
} }

View File

@ -8,10 +8,10 @@
struct bitbuff { struct bitbuff {
b32 is_backed_by_arena; b32 is_backed_by_arena;
/* If `is_arena_bitbuff` is true, this dynamically-sized arena will be used for reading & writing (meaning writing cannot overflow) */ /* If `is_arena_bitbuff` is 1, this dynamically-sized arena will be used for reading & writing (meaning writing cannot overflow) */
struct arena *arena; struct arena *arena;
/* If `is_arena_bitbuff` is false, this fixed-sized buffer willl be used for reading & writing */ /* If `is_arena_bitbuff` is 0, this fixed-sized buffer willl be used for reading & writing */
struct string fixed_buffer; struct string fixed_buffer;
}; };

View File

@ -72,17 +72,17 @@ INTERNAL void buddy_block_release_internal(struct buddy_ctx *ctx, struct buddy_l
INTERNAL struct buddy_block *buddy_block_get_unused(struct buddy_ctx *ctx, struct buddy_level *level) INTERNAL struct buddy_block *buddy_block_get_unused(struct buddy_ctx *ctx, struct buddy_level *level)
{ {
struct buddy_block *block = NULL; struct buddy_block *block = 0;
/* TODO: Tier oob check */ /* TODO: Tier oob check */
if (level->first_unused_block) { if (level->first_unused_block) {
block = level->first_unused_block; block = level->first_unused_block;
level->first_unused_block = block->next; level->first_unused_block = block->next;
if (level->first_unused_block) { if (level->first_unused_block) {
level->first_unused_block->prev = NULL; level->first_unused_block->prev = 0;
} }
block->used = true; block->is_used = 1;
block->next = NULL; block->next = 0;
} else { } else {
if (level->backed) { if (level->backed) {
struct buddy_level *parent_level = &ctx->levels[level->tier + 1]; struct buddy_level *parent_level = &ctx->levels[level->tier + 1];
@ -90,14 +90,14 @@ INTERNAL struct buddy_block *buddy_block_get_unused(struct buddy_ctx *ctx, struc
/* Create left (used) block from parent block */ /* Create left (used) block from parent block */
struct buddy_block *left = buddy_block_alloc_internal(ctx); struct buddy_block *left = buddy_block_alloc_internal(ctx);
left->used = true; left->is_used = 1;
left->level = level; left->level = level;
left->parent = parent_block; left->parent = parent_block;
left->memory = parent_block->memory; left->memory = parent_block->memory;
/* Create right (unused) block from parent block */ /* Create right (unused) block from parent block */
struct buddy_block *right = buddy_block_alloc_internal(ctx); struct buddy_block *right = buddy_block_alloc_internal(ctx);
right->used = false; right->is_used = 0;
right->level = level; right->level = level;
right->parent = parent_block; right->parent = parent_block;
right->memory = left->memory + level->size; right->memory = left->memory + level->size;
@ -122,13 +122,13 @@ INTERNAL struct buddy_block *buddy_block_get_unused(struct buddy_ctx *ctx, struc
/* Create left (used) block from existing child block memory */ /* Create left (used) block from existing child block memory */
struct buddy_block *left = buddy_block_alloc_internal(ctx); struct buddy_block *left = buddy_block_alloc_internal(ctx);
left->used = true; left->is_used = 1;
left->level = level; left->level = level;
left->memory = arena_base(arena); left->memory = arena_base(arena);
/* Create right (unused) block from new arena memory */ /* Create right (unused) block from new arena memory */
struct buddy_block *right = buddy_block_alloc_internal(ctx); struct buddy_block *right = buddy_block_alloc_internal(ctx);
right->used = false; right->is_used = 0;
right->level = level; right->level = level;
right->memory = left->memory + level->size; right->memory = left->memory + level->size;
@ -136,7 +136,7 @@ INTERNAL struct buddy_block *buddy_block_get_unused(struct buddy_ctx *ctx, struc
right->sibling = left; right->sibling = left;
block = left; block = left;
level->backed = true; level->backed = 1;
} }
} }
@ -145,11 +145,11 @@ INTERNAL struct buddy_block *buddy_block_get_unused(struct buddy_ctx *ctx, struc
INTERNAL void buddy_block_mark_unused(struct buddy_block *block) INTERNAL void buddy_block_mark_unused(struct buddy_block *block)
{ {
block->used = false; block->is_used = 0;
struct buddy_level *level = block->level; struct buddy_level *level = block->level;
struct buddy_block *parent = block->parent; struct buddy_block *parent = block->parent;
struct buddy_block *sibling = block->sibling; struct buddy_block *sibling = block->sibling;
if (!sibling->used && parent != NULL) { if (!sibling->is_used && parent != 0) {
/* Merge siblings */ /* Merge siblings */
struct buddy_ctx *ctx = level->ctx; struct buddy_ctx *ctx = level->ctx;
buddy_block_release_internal(ctx, level, block); buddy_block_release_internal(ctx, level, block);
@ -168,7 +168,7 @@ struct buddy_block *buddy_alloc(struct buddy_ctx *ctx, u64 size)
{ {
if (size > 0x00FFFFFFFFFFFFFFULL) { if (size > 0x00FFFFFFFFFFFFFFULL) {
/* TODO: Error */ /* TODO: Error */
ASSERT(false); ASSERT(0);
} }
/* TODO: Minimum block size */ /* TODO: Minimum block size */

View File

@ -2,7 +2,7 @@
#define BUDDY_H #define BUDDY_H
struct buddy_block { struct buddy_block {
b32 used; b32 is_used;
struct buddy_level *level; struct buddy_level *level;
struct buddy_block *parent; struct buddy_block *parent;
struct buddy_block *sibling; struct buddy_block *sibling;

View File

@ -5,7 +5,7 @@
/* How close can non-overlapping shapes be before collision is considered */ /* How close can non-overlapping shapes be before collision is considered */
#define COLLISION_TOLERANCE 0.005f #define COLLISION_TOLERANCE 0.005f
/* NOTE: Should always be less than tolerance, since colliding = true if origin is within this distance. */ /* NOTE: Should always be less than tolerance, since colliding = 1 if origin is within this distance. */
#define MIN_UNIQUE_PT_DIST_SQ (0.001f * 0.001f) #define MIN_UNIQUE_PT_DIST_SQ (0.001f * 0.001f)
/* To prevent extremely large prototypes when origin is in exact center of rounded feature */ /* To prevent extremely large prototypes when origin is in exact center of rounded feature */
@ -141,8 +141,8 @@ struct gjk_result {
struct collider_menkowski_simplex simplex; struct collider_menkowski_simplex simplex;
struct v2 final_dir; struct v2 final_dir;
/* If true, simplex represents triangle inside of menkowski difference /* If 1, simplex represents triangle inside of menkowski difference
* encapsulating the origin. If false, simplex represents the closest * encapsulating the origin. If 0, simplex represents the closest
* feature on menkowski difference to the origin. */ * feature on menkowski difference to the origin. */
b32 overlapping; b32 overlapping;
@ -157,7 +157,7 @@ INTERNAL struct gjk_result gjk_get_simplex(struct collider_shape *shape0, struct
INTERNAL struct gjk_result gjk_get_simplex(struct collider_shape *shape0, struct collider_shape *shape1, struct xform xf0, struct xform xf1, f32 min_unique_pt_dist_sq) INTERNAL struct gjk_result gjk_get_simplex(struct collider_shape *shape0, struct collider_shape *shape1, struct xform xf0, struct xform xf1, f32 min_unique_pt_dist_sq)
#endif #endif
{ {
b32 overlapping = false; b32 overlapping = 0;
struct collider_menkowski_simplex s = ZI; struct collider_menkowski_simplex s = ZI;
struct v2 dir = ZI; struct v2 dir = ZI;
struct collider_menkowski_point m = ZI; struct collider_menkowski_point m = ZI;
@ -171,7 +171,7 @@ INTERNAL struct gjk_result gjk_get_simplex(struct collider_shape *shape0, struct
struct v2 removed_a = ZI; struct v2 removed_a = ZI;
struct v2 removed_b = ZI; struct v2 removed_b = ZI;
u32 num_removed = 0; u32 num_removed = 0;
while (true) { while (1) {
if (s.len == 1) { if (s.len == 1) {
/* Second point is support point towards origin */ /* Second point is support point towards origin */
dir = v2_neg(s.a.p); dir = v2_neg(s.a.p);
@ -180,7 +180,7 @@ INTERNAL struct gjk_result gjk_get_simplex(struct collider_shape *shape0, struct
m = get_menkowski_point(shape0, shape1, xf0, xf1, dir); m = get_menkowski_point(shape0, shape1, xf0, xf1, dir);
/* Check that new point is far enough away from existing point */ /* Check that new point is far enough away from existing point */
if (v2_len_sq(v2_sub(m.p, s.a.p)) < min_unique_pt_dist_sq) { if (v2_len_sq(v2_sub(m.p, s.a.p)) < min_unique_pt_dist_sq) {
overlapping = false; overlapping = 0;
break; break;
} }
s.b = s.a; s.b = s.a;
@ -203,7 +203,7 @@ INTERNAL struct gjk_result gjk_get_simplex(struct collider_shape *shape0, struct
(num_removed >= 2 && v2_len_sq(v2_sub(m.p, removed_b)) < min_unique_pt_dist_sq)) (num_removed >= 2 && v2_len_sq(v2_sub(m.p, removed_b)) < min_unique_pt_dist_sq))
) || ) ||
math_fabs(v2_wedge(v2_sub(s.b.p, s.a.p), v2_sub(m.p, s.a.p))) < min_unique_pt_dist_sq) { math_fabs(v2_wedge(v2_sub(s.b.p, s.a.p), v2_sub(m.p, s.a.p))) < min_unique_pt_dist_sq) {
overlapping = false; overlapping = 0;
break; break;
} }
s.c = s.b; s.c = s.b;
@ -215,7 +215,7 @@ INTERNAL struct gjk_result gjk_get_simplex(struct collider_shape *shape0, struct
(math_fabs(v2_wedge(v2_sub(s.c.p, s.b.p), v2_neg(s.b.p))) <= min_unique_pt_dist_sq) || (math_fabs(v2_wedge(v2_sub(s.c.p, s.b.p), v2_neg(s.b.p))) <= min_unique_pt_dist_sq) ||
(math_fabs(v2_wedge(v2_sub(s.c.p, s.a.p), v2_neg(s.a.p))) <= min_unique_pt_dist_sq)) { (math_fabs(v2_wedge(v2_sub(s.c.p, s.a.p), v2_neg(s.a.p))) <= min_unique_pt_dist_sq)) {
/* Simplex lies on origin */ /* Simplex lies on origin */
overlapping = true; overlapping = 1;
break; break;
} }
} }
@ -281,7 +281,7 @@ INTERNAL struct gjk_result gjk_get_simplex(struct collider_shape *shape0, struct
s.a = s.c; s.a = s.c;
} else { } else {
/* No region, must be in simplex */ /* No region, must be in simplex */
overlapping = true; overlapping = 1;
break; break;
} }
} }
@ -329,7 +329,7 @@ INTERNAL struct epa_result epa_get_normal_from_gjk(struct collider_shape *shape0
struct collider_menkowski_feature closest_feature = ZI; struct collider_menkowski_feature closest_feature = ZI;
struct v2 normal = ZI; struct v2 normal = ZI;
struct collider_menkowski_point *proto = NULL; struct collider_menkowski_point *proto = 0;
u32 proto_count = 0; u32 proto_count = 0;
if (gjk_res.overlapping) { if (gjk_res.overlapping) {
struct collider_menkowski_simplex s = gjk_res.simplex; struct collider_menkowski_simplex s = gjk_res.simplex;
@ -346,7 +346,7 @@ INTERNAL struct epa_result epa_get_normal_from_gjk(struct collider_shape *shape0
i32 winding = v2_winding(v2_sub(s.c.p, s.a.p), v2_sub(s.b.p, s.a.p)); i32 winding = v2_winding(v2_sub(s.c.p, s.a.p), v2_sub(s.b.p, s.a.p));
u32 epa_iterations = 0; u32 epa_iterations = 0;
while (true) { while (1) {
++epa_iterations; ++epa_iterations;
/* Find dir from origin to closest edge */ /* Find dir from origin to closest edge */
@ -394,7 +394,7 @@ INTERNAL struct epa_result epa_get_normal_from_gjk(struct collider_shape *shape0
/* Check validity of new point */ /* Check validity of new point */
DBGSTEP; DBGSTEP;
{ {
b32 valid = true; b32 valid = 1;
{ {
/* NOTE: Changing this value affects how stable normals are for circular colliders */ /* NOTE: Changing this value affects how stable normals are for circular colliders */
@ -409,10 +409,10 @@ INTERNAL struct epa_result epa_get_normal_from_gjk(struct collider_shape *shape0
if (dot >= -validity_epsilon && dot <= 1 - validity_epsilon && (v2_wedge(vab, vam) * -winding) >= -validity_epsilon) { if (dot >= -validity_epsilon && dot <= 1 - validity_epsilon && (v2_wedge(vab, vam) * -winding) >= -validity_epsilon) {
/* New point is not between edge */ /* New point is not between edge */
valid = false; valid = 0;
} else if (v2_len_sq(vam) < min_unique_pt_dist_sq || v2_len_sq(vbm) < min_unique_pt_dist_sq) { } else if (v2_len_sq(vam) < min_unique_pt_dist_sq || v2_len_sq(vbm) < min_unique_pt_dist_sq) {
/* New point is too close to existing */ /* New point is too close to existing */
valid = false; valid = 0;
} }
} }
@ -544,7 +544,7 @@ struct collider_collision_points_result collider_collision_points(struct collide
struct collider_collision_point points[2] = ZI; struct collider_collision_point points[2] = ZI;
u32 num_points = 0; u32 num_points = 0;
b32 colliding = false; b32 colliding = 0;
struct v2 normal = ZI; struct v2 normal = ZI;
#if COLLIDER_DEBUG #if COLLIDER_DEBUG
@ -575,14 +575,14 @@ struct collider_collision_points_result collider_collision_points(struct collide
/* Determine collision */ /* Determine collision */
if (gjk_res.overlapping) { if (gjk_res.overlapping) {
colliding = true; colliding = 1;
} else { } else {
struct collider_menkowski_feature f = epa_res.closest_feature; struct collider_menkowski_feature f = epa_res.closest_feature;
/* Shapes not overlapping, determine if distance between shapes within tolerance */ /* Shapes not overlapping, determine if distance between shapes within tolerance */
if (f.len == 1) { if (f.len == 1) {
struct v2 p = v2_neg(f.a.p); struct v2 p = v2_neg(f.a.p);
if (v2_len_sq(p) <= (tolerance * tolerance)) { if (v2_len_sq(p) <= (tolerance * tolerance)) {
colliding = true; colliding = 1;
} }
} else { } else {
/* Project origin to determine if distance is within tolerance. */ /* Project origin to determine if distance is within tolerance. */
@ -592,7 +592,7 @@ struct collider_collision_points_result collider_collision_points(struct collide
f32 ratio = clamp_f32(v2_dot(vab, vao) / v2_dot(vab, vab), 0, 1); f32 ratio = clamp_f32(v2_dot(vab, vao) / v2_dot(vab, vab), 0, 1);
struct v2 p = v2_add(f.a.p, v2_mul(vab, ratio)); struct v2 p = v2_add(f.a.p, v2_mul(vab, ratio));
if (v2_len_sq(p) <= (tolerance * tolerance)) { if (v2_len_sq(p) <= (tolerance * tolerance)) {
colliding = true; colliding = 1;
} }
} }
} }
@ -605,8 +605,8 @@ struct collider_collision_points_result collider_collision_points(struct collide
struct collider_menkowski_feature f = epa_res.closest_feature; struct collider_menkowski_feature f = epa_res.closest_feature;
{ {
b32 collapse0 = false; b32 collapse0 = 0;
b32 collapse1 = false; b32 collapse1 = 0;
struct collider_support_point a0 = f.a.s0; struct collider_support_point a0 = f.a.s0;
struct collider_support_point a1 = f.a.s1; struct collider_support_point a1 = f.a.s1;
@ -618,7 +618,7 @@ struct collider_collision_points_result collider_collision_points(struct collide
if (shape0->count > 1) { if (shape0->count > 1) {
b0 = collider_get_support_point_internal(shape0, xf0, normal, b0.i); b0 = collider_get_support_point_internal(shape0, xf0, normal, b0.i);
} else { } else {
collapse0 = true; collapse0 = 1;
b0 = a0; b0 = a0;
} }
} }
@ -626,13 +626,13 @@ struct collider_collision_points_result collider_collision_points(struct collide
if (shape1->count > 1) { if (shape1->count > 1) {
b1 = collider_get_support_point_internal(shape1, xf1, v2_neg(normal), b1.i); b1 = collider_get_support_point_internal(shape1, xf1, v2_neg(normal), b1.i);
} else { } else {
collapse1 = true; collapse1 = 1;
b1 = a1; b1 = a1;
} }
} }
} else { } else {
collapse0 = true; collapse0 = 1;
collapse1 = true; collapse1 = 1;
b0 = a0; b0 = a0;
b1 = a1; b1 = a1;
} }
@ -683,8 +683,8 @@ struct collider_collision_points_result collider_collision_points(struct collide
f32 b_sep = F32_INFINITY; f32 b_sep = F32_INFINITY;
struct v2 a_midpoint = ZI; struct v2 a_midpoint = ZI;
struct v2 b_midpoint = ZI; struct v2 b_midpoint = ZI;
b32 ignore_a = true; b32 ignore_a = 1;
b32 ignore_b = true; b32 ignore_b = 1;
if (!collapse0 && !collapse1) { if (!collapse0 && !collapse1) {
/* Clip line to line */ /* Clip line to line */
struct clip_line_to_line_result clip_res = clip_line_to_line(a0.p, b0.p, a1.p, b1.p, normal); struct clip_line_to_line_result clip_res = clip_line_to_line(a0.p, b0.p, a1.p, b1.p, normal);
@ -699,14 +699,14 @@ struct collider_collision_points_result collider_collision_points(struct collide
b_sep = v2_dot(vb0b1_clipped, normal); b_sep = v2_dot(vb0b1_clipped, normal);
a_midpoint = v2_add(a0_clipped, v2_mul(va0a1_clipped, 0.5f)); a_midpoint = v2_add(a0_clipped, v2_mul(va0a1_clipped, 0.5f));
b_midpoint = v2_add(b0_clipped, v2_mul(vb0b1_clipped, 0.5f)); b_midpoint = v2_add(b0_clipped, v2_mul(vb0b1_clipped, 0.5f));
ignore_a = false; ignore_a = 0;
ignore_b = false; ignore_b = 0;
struct v2 vfin = v2_sub(b_midpoint, a_midpoint); struct v2 vfin = v2_sub(b_midpoint, a_midpoint);
if (v2_len_sq(vfin) < (0.005 * 0.005)) { if (v2_len_sq(vfin) < (0.005 * 0.005)) {
if (a_sep > b_sep) { if (a_sep > b_sep) {
ignore_a = true; ignore_a = 1;
} else { } else {
ignore_b = true; ignore_b = 1;
} }
} }
res.a0_clipped = a0_clipped; res.a0_clipped = a0_clipped;
@ -729,7 +729,7 @@ struct collider_collision_points_result collider_collision_points(struct collide
struct v2 vsep = v2_sub(p1, p0); struct v2 vsep = v2_sub(p1, p0);
a_midpoint = v2_add(p0, v2_mul(vsep, 0.5f)); a_midpoint = v2_add(p0, v2_mul(vsep, 0.5f));
a_sep = v2_dot(normal, p1) - v2_dot(normal, p0); a_sep = v2_dot(normal, p1) - v2_dot(normal, p0);
ignore_a = false; ignore_a = 0;
res.a0_clipped = p0; res.a0_clipped = p0;
res.a1_clipped = p1; res.a1_clipped = p1;
res.b0_clipped = p0; res.b0_clipped = p0;
@ -758,7 +758,7 @@ struct collider_collision_points_result collider_collision_points(struct collide
} }
#if COLLIDER_DEBUG #if COLLIDER_DEBUG
res.solved = true; res.solved = 1;
abort: abort:
res.simplex = gjk_res.simplex; res.simplex = gjk_res.simplex;
res.prototype.len = epa_res.prototype.len; res.prototype.len = epa_res.prototype.len;
@ -787,7 +787,7 @@ struct collider_closest_points_result collider_closest_points(struct collider_sh
struct v2 p0 = ZI; struct v2 p0 = ZI;
struct v2 p1 = ZI; struct v2 p1 = ZI;
b32 colliding = false; b32 colliding = 0;
#if COLLIDER_DEBUG #if COLLIDER_DEBUG
u32 dbg_step = 0; u32 dbg_step = 0;
@ -846,7 +846,7 @@ struct collider_closest_points_result collider_closest_points(struct collider_sh
} }
#if COLLIDER_DEBUG #if COLLIDER_DEBUG
res.solved = true; res.solved = 1;
abort: abort:
res.simplex = gjk_res.simplex; res.simplex = gjk_res.simplex;
res.prototype.len = epa_res.prototype.len; res.prototype.len = epa_res.prototype.len;
@ -904,7 +904,7 @@ f32 collider_time_of_impact(struct collider_shape *c0, struct collider_shape *c1
u32 iteration = 0; u32 iteration = 0;
while (math_fabs(t_sep) > tolerance && iteration < max_iterations) { while (math_fabs(t_sep) > tolerance && iteration < max_iterations) {
/* Use mix of bisection & false position method to find root /* Use mix of bisection & 0 position method to find root
* (as described in https://box2d.org/files/ErinCatto_ContinuousCollision_GDC2013.pdf) */ * (as described in https://box2d.org/files/ErinCatto_ContinuousCollision_GDC2013.pdf) */
if (iteration & 1) { if (iteration & 1) {
/* Bisect */ /* Bisect */
@ -1001,7 +1001,7 @@ b32 collider_collision_boolean(struct collider_shape *shape0, struct collider_sh
if (v2_dot(dir, p) >= 0) { if (v2_dot(dir, p) >= 0) {
s.b = s.a; s.b = s.a;
s.a = p; s.a = p;
while (true) { while (1) {
/* Third point is support point in direction of line normal towards origin */ /* Third point is support point in direction of line normal towards origin */
dir = v2_perp_towards_dir(v2_sub(s.b, s.a), v2_neg(s.a)); dir = v2_perp_towards_dir(v2_sub(s.b, s.a), v2_neg(s.a));
p = get_menkowski_point(shape0, shape1, dir); p = get_menkowski_point(shape0, shape1, dir);
@ -1029,12 +1029,12 @@ b32 collider_collision_boolean(struct collider_shape *shape0, struct collider_sh
s.b = s.c; s.b = s.c;
} else { } else {
/* Point is in simplex */ /* Point is in simplex */
return true; return 1;
} }
} }
} }
} }
return false; return 0;
} }
#endif #endif

View File

@ -251,7 +251,7 @@ void __asan_unpoison_memory_region(void const volatile *add, size_t);
#if COMPILER_MSVC #if COMPILER_MSVC
/* Typeof not supported in MSVC */ /* Typeof not supported in MSVC */
# define TYPEOF_DEFINED 0 # define TYPEOF_DEFINED 0
# define typeof(type) ASSERT(false) # define typeof(type) ASSERT(0)
#else #else
# define TYPEOF_DEFINED 1 # define TYPEOF_DEFINED 1
# if LANGUAGE_CPP || (__STDC_VERSION__ < 202311L) # if LANGUAGE_CPP || (__STDC_VERSION__ < 202311L)
@ -282,12 +282,6 @@ void __asan_unpoison_memory_region(void const volatile *add, size_t);
# define FIELD_OFFSETOF(type, field) __builtin_offsetof(type, field) # define FIELD_OFFSETOF(type, field) __builtin_offsetof(type, field)
#endif #endif
/* Bool */
#if !LANGUAGE_CPP
# define true 1
# define false 0
#endif
/* Array */ /* Array */
#define IS_INDEXABLE(a) (sizeof(a[0])) #define IS_INDEXABLE(a) (sizeof(a[0]))
#define IS_ARRAY(a) (IS_INDEXABLE(a) && (((void *)&a) == ((void *)a))) #define IS_ARRAY(a) (IS_INDEXABLE(a) && (((void *)&a) == ((void *)a)))

View File

@ -181,7 +181,7 @@ void draw_circle_line(struct gp_flow *flow, struct v2 pos, f32 radius, f32 thick
.points = points, .points = points,
.count = detail .count = detail
}; };
draw_poly_line(flow, a, true, thickness, color); draw_poly_line(flow, a, 1, thickness, color);
scratch_end(scratch); scratch_end(scratch);
} }
@ -190,7 +190,7 @@ void draw_quad_line(struct gp_flow *flow, struct quad quad, f32 thickness, u32 c
{ {
struct v2 points[] = { quad.p0, quad.p1, quad.p2, quad.p3 }; struct v2 points[] = { quad.p0, quad.p1, quad.p2, quad.p3 };
struct v2_array a = { .points = points, .count = countof(points) }; struct v2_array a = { .points = points, .count = countof(points) };
draw_poly_line(flow, a, true, thickness, color); draw_poly_line(flow, a, 1, thickness, color);
} }
void draw_arrow_line(struct gp_flow *flow, struct v2 start, struct v2 end, f32 thickness, f32 arrowhead_height, u32 color) void draw_arrow_line(struct gp_flow *flow, struct v2 start, struct v2 end, f32 thickness, f32 arrowhead_height, u32 color)
@ -250,7 +250,7 @@ void draw_collider_line(struct gp_flow *flow, struct collider_shape shape, struc
poly.points[i] = p; poly.points[i] = p;
} }
} }
draw_poly_line(flow, poly, true, thickness, color); draw_poly_line(flow, poly, 1, thickness, color);
scratch_end(scratch); scratch_end(scratch);
} }
@ -319,13 +319,13 @@ struct rect draw_text(struct gp_flow *flow, struct draw_text_params params)
u64 num_lines = 0; u64 num_lines = 0;
f32 widest_line = 0; f32 widest_line = 0;
struct drawable_line *first_line = NULL; struct drawable_line *first_line = 0;
struct drawable_line *last_line = NULL; struct drawable_line *last_line = 0;
f32 first_line_top_offset = 0; f32 first_line_top_offset = 0;
f32 last_line_bottom_offset = 0; f32 last_line_bottom_offset = 0;
if (params.str.len > 0) { if (params.str.len > 0) {
b32 string_done = false; b32 string_done = 0;
struct string_codepoint_iter iter = string_codepoint_iter_begin(params.str); struct string_codepoint_iter iter = string_codepoint_iter_begin(params.str);
while (!string_done) { while (!string_done) {
f32 line_width = 0; f32 line_width = 0;
@ -334,15 +334,15 @@ struct rect draw_text(struct gp_flow *flow, struct draw_text_params params)
u64 num_line_glyphs = 0; u64 num_line_glyphs = 0;
struct drawable_glyph *line_glyphs = arena_push_dry(scratch.arena, struct drawable_glyph); struct drawable_glyph *line_glyphs = arena_push_dry(scratch.arena, struct drawable_glyph);
b32 line_done = false; b32 line_done = 0;
while (!line_done) { while (!line_done) {
string_done = !string_codepoint_iter_next(&iter); string_done = !string_codepoint_iter_next(&iter);
if (string_done) { if (string_done) {
line_done = true; line_done = 1;
} else { } else {
u32 codepoint = iter.codepoint; u32 codepoint = iter.codepoint;
if (codepoint == '\n') { if (codepoint == '\n') {
line_done = true; line_done = 1;
} else { } else {
struct drawable_glyph *tg = arena_push(scratch.arena, struct drawable_glyph); struct drawable_glyph *tg = arena_push(scratch.arena, struct drawable_glyph);
++num_line_glyphs; ++num_line_glyphs;

View File

@ -60,7 +60,7 @@ struct font_startup_receipt font_startup(struct gp_startup_receipt *gp_sr,
INTERNAL struct font_task_params *font_task_params_alloc(void) INTERNAL struct font_task_params *font_task_params_alloc(void)
{ {
struct font_task_params *p = NULL; struct font_task_params *p = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.params.mutex); struct snc_lock lock = snc_lock_e(&G.params.mutex);
if (G.params.head_free) { if (G.params.head_free) {
@ -117,7 +117,7 @@ INTERNAL SYS_JOB_DEF(font_load_asset_job, job)
struct gp_resource *texture = gp_texture_alloc(GP_TEXTURE_FORMAT_R8G8B8A8_UNORM, 0, V2I32(result.image_data.width, result.image_data.height), result.image_data.pixels); struct gp_resource *texture = gp_texture_alloc(GP_TEXTURE_FORMAT_R8G8B8A8_UNORM, 0, V2I32(result.image_data.width, result.image_data.height), result.image_data.pixels);
/* Allocate store memory */ /* Allocate store memory */
struct font *font = NULL; struct font *font = 0;
{ {
struct asset_cache_store store = asset_cache_store_open(); struct asset_cache_store store = asset_cache_store_open();
font = arena_push(store.arena, struct font); font = arena_push(store.arena, struct font);
@ -187,7 +187,7 @@ struct asset *font_load_asset(struct string path, f32 point_size, b32 wait)
/* Push task */ /* Push task */
asset_cache_mark_loading(asset); asset_cache_mark_loading(asset);
sys_run(1, font_load_asset_job, params, SYS_PRIORITY_BACKGROUND, NULL); sys_run(1, font_load_asset_job, params, SYS_PRIORITY_BACKGROUND, 0);
if (wait) { if (wait) {
asset_cache_wait(asset); asset_cache_wait(asset);
} }
@ -200,7 +200,7 @@ struct asset *font_load_asset(struct string path, f32 point_size, b32 wait)
struct font *font_load_async(struct string path, f32 point_size) struct font *font_load_async(struct string path, f32 point_size)
{ {
__prof; __prof;
struct asset *asset = font_load_asset(path, point_size, false); struct asset *asset = font_load_asset(path, point_size, 0);
struct font *f = (struct font *)asset_cache_get_store_data(asset); struct font *f = (struct font *)asset_cache_get_store_data(asset);
return f; return f;
} }
@ -208,7 +208,7 @@ struct font *font_load_async(struct string path, f32 point_size)
struct font *font_load(struct string path, f32 point_size) struct font *font_load(struct string path, f32 point_size)
{ {
__prof; __prof;
struct asset *asset = font_load_asset(path, point_size, true); struct asset *asset = font_load_asset(path, point_size, 1);
asset_cache_wait(asset); asset_cache_wait(asset);
struct font *f = (struct font *)asset_cache_get_store_data(asset); struct font *f = (struct font *)asset_cache_get_store_data(asset);
return f; return f;

View File

@ -383,8 +383,8 @@ struct gp_startup_receipt gp_startup(void)
app_register_exit_callback(gp_shutdown); app_register_exit_callback(gp_shutdown);
/* Start evictor thread */ /* Start evictor thread */
G.evictor_thread_wake_event = CreateEvent(NULL, false, false, NULL); G.evictor_thread_wake_event = CreateEvent(0, 0, 0, 0);
G.evictor_thread = sys_thread_alloc(evictor_thread_entry_point, NULL, LIT("GPU resource evictor thread"), PROF_THREAD_GROUP_EVICTORS); G.evictor_thread = sys_thread_alloc(evictor_thread_entry_point, 0, LIT("GPU resource evictor thread"), PROF_THREAD_GROUP_EVICTORS);
struct gp_startup_receipt res = ZI; struct gp_startup_receipt res = ZI;
return res; return res;
@ -432,13 +432,13 @@ INTERNAL void dx12_init_device(void)
u32 dxgi_factory_flags = 0; u32 dxgi_factory_flags = 0;
#if DX12_DEBUG #if DX12_DEBUG
{ {
ID3D12Debug *debug_controller0 = NULL; ID3D12Debug *debug_controller0 = 0;
hr = D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug_controller0); hr = D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug_controller0);
if (FAILED(hr)) { if (FAILED(hr)) {
dx12_init_error(LIT("Failed to create ID3D12Debug0")); dx12_init_error(LIT("Failed to create ID3D12Debug0"));
} }
ID3D12Debug1 *debug_controller1 = NULL; ID3D12Debug1 *debug_controller1 = 0;
hr = ID3D12Debug_QueryInterface(debug_controller0, &IID_ID3D12Debug1, (void **)&debug_controller1); hr = ID3D12Debug_QueryInterface(debug_controller0, &IID_ID3D12Debug1, (void **)&debug_controller1);
if (FAILED(hr)) { if (FAILED(hr)) {
dx12_init_error(LIT("Failed to create ID3D12Debug1")); dx12_init_error(LIT("Failed to create ID3D12Debug1"));
@ -447,7 +447,7 @@ INTERNAL void dx12_init_device(void)
ID3D12Debug_EnableDebugLayer(debug_controller0); ID3D12Debug_EnableDebugLayer(debug_controller0);
/* FIXME: Enable this */ /* FIXME: Enable this */
//ID3D12Debug1_SetEnableGPUBasedValidation(debug_controller1, true); //ID3D12Debug1_SetEnableGPUBasedValidation(debug_controller1, 1);
ID3D12Debug_Release(debug_controller1); ID3D12Debug_Release(debug_controller1);
ID3D12Debug_Release(debug_controller0); ID3D12Debug_Release(debug_controller0);
@ -463,12 +463,12 @@ INTERNAL void dx12_init_device(void)
/* Create device */ /* Create device */
{ {
IDXGIAdapter1 *adapter = NULL; IDXGIAdapter1 *adapter = 0;
ID3D12Device *device = NULL; ID3D12Device *device = 0;
struct string error = LIT("Could not initialize GPU device."); struct string error = LIT("Could not initialize GPU device.");
struct string first_gpu_name = ZI; struct string first_gpu_name = ZI;
u32 adapter_index = 0; u32 adapter_index = 0;
while (true) { while (1) {
hr = IDXGIFactory6_EnumAdapterByGpuPreference(G.factory, adapter_index, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, &IID_IDXGIAdapter1, (void **)&adapter); hr = IDXGIFactory6_EnumAdapterByGpuPreference(G.factory, adapter_index, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, &IID_IDXGIAdapter1, (void **)&adapter);
if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) {
DXGI_ADAPTER_DESC1 desc; DXGI_ADAPTER_DESC1 desc;
@ -482,8 +482,8 @@ INTERNAL void dx12_init_device(void)
} }
ID3D12Device_Release(device); ID3D12Device_Release(device);
IDXGIAdapter1_Release(adapter); IDXGIAdapter1_Release(adapter);
adapter = NULL; adapter = 0;
device = NULL; device = 0;
++adapter_index; ++adapter_index;
} else { } else {
break; break;
@ -503,25 +503,25 @@ INTERNAL void dx12_init_device(void)
#if DX12_DEBUG #if DX12_DEBUG
/* Enable D3D12 Debug break */ /* Enable D3D12 Debug break */
{ {
ID3D12InfoQueue *info = NULL; ID3D12InfoQueue *info = 0;
hr = ID3D12Device_QueryInterface(G.device, &IID_ID3D12InfoQueue, (void **)&info); hr = ID3D12Device_QueryInterface(G.device, &IID_ID3D12InfoQueue, (void **)&info);
if (FAILED(hr)) { if (FAILED(hr)) {
dx12_init_error(LIT("Failed to query ID3D12Device interface")); dx12_init_error(LIT("Failed to query ID3D12Device interface"));
} }
ID3D12InfoQueue_SetBreakOnSeverity(info, D3D12_MESSAGE_SEVERITY_CORRUPTION, TRUE); ID3D12InfoQueue_SetBreakOnSeverity(info, D3D12_MESSAGE_SEVERITY_CORRUPTION, 1);
ID3D12InfoQueue_SetBreakOnSeverity(info, D3D12_MESSAGE_SEVERITY_ERROR, TRUE); ID3D12InfoQueue_SetBreakOnSeverity(info, D3D12_MESSAGE_SEVERITY_ERROR, 1);
ID3D12InfoQueue_Release(info); ID3D12InfoQueue_Release(info);
} }
/* Enable DXGI Debug break */ /* Enable DXGI Debug break */
{ {
IDXGIInfoQueue *dxgi_info = NULL; IDXGIInfoQueue *dxgi_info = 0;
hr = DXGIGetDebugInterface1(0, &IID_IDXGIInfoQueue, (void **)&dxgi_info); hr = DXGIGetDebugInterface1(0, &IID_IDXGIInfoQueue, (void **)&dxgi_info);
if (FAILED(hr)) { if (FAILED(hr)) {
dx12_init_error(LIT("Failed to get DXGI debug interface")); dx12_init_error(LIT("Failed to get DXGI debug interface"));
} }
IDXGIInfoQueue_SetBreakOnSeverity(dxgi_info, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, TRUE); IDXGIInfoQueue_SetBreakOnSeverity(dxgi_info, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION, 1);
IDXGIInfoQueue_SetBreakOnSeverity(dxgi_info, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, TRUE); IDXGIInfoQueue_SetBreakOnSeverity(dxgi_info, DXGI_DEBUG_ALL, DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR, 1);
IDXGIInfoQueue_Release(dxgi_info); IDXGIInfoQueue_Release(dxgi_info);
} }
#endif #endif
@ -529,14 +529,14 @@ INTERNAL void dx12_init_device(void)
#if PROFILING_D3D #if PROFILING_D3D
/* Enable stable power state */ /* Enable stable power state */
{ {
b32 success = true; b32 success = 1;
__profn("Set stable power state"); __profn("Set stable power state");
HKEY key = 0; HKEY key = 0;
success = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\AppModelUnlock", 0, KEY_READ, &key) == ERROR_SUCCESS; success = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\AppModelUnlock", 0, KEY_READ, &key) == ERROR_SUCCESS;
if (success) { if (success) {
DWORD value = ZI; DWORD value = ZI;
DWORD dword_size = sizeof(DWORD); DWORD dword_size = sizeof(DWORD);
success = RegQueryValueExW(key, L"AllowDevelopmentWithoutDevLicense", 0, NULL, (LPBYTE)&value, &dword_size) == ERROR_SUCCESS; success = RegQueryValueExW(key, L"AllowDevelopmentWithoutDevLicense", 0, 0, (LPBYTE)&value, &dword_size) == ERROR_SUCCESS;
RegCloseKey(key); RegCloseKey(key);
if (success) { if (success) {
success = value != 0; success = value != 0;
@ -549,7 +549,7 @@ INTERNAL void dx12_init_device(void)
if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) {
logf_info("ID3D12Device::SetStablePowerState succeeded"); logf_info("ID3D12Device::SetStablePowerState succeeded");
} else { } else {
success = false; success = 0;
logf_error("ID3D12Device::SetStablePowerState failed"); logf_error("ID3D12Device::SetStablePowerState failed");
} }
} else { } else {
@ -743,7 +743,7 @@ INTERNAL struct dx12_include_handler *dx12_include_handler_alloc(struct arena *a
INTERNAL void dx12_include_handler_release(struct dx12_include_handler *handler) INTERNAL void dx12_include_handler_release(struct dx12_include_handler *handler)
{ {
for (u64 i = 0; i < handler->num_open_resources; ++i) { for (u64 i = 0; i < handler->num_open_resources; ++i) {
ASSERT(false); /* Resource should have been closed by handler by now */ ASSERT(0); /* Resource should have been closed by handler by now */
struct resource *res = &handler->open_resources[i]; struct resource *res = &handler->open_resources[i];
resource_close(res); resource_close(res);
} }
@ -787,9 +787,9 @@ INTERNAL SYS_JOB_DEF(shader_compile_job, job)
struct arena_temp scratch = scratch_begin_no_conflict(); struct arena_temp scratch = scratch_begin_no_conflict();
{ {
i64 start_ns = sys_time_ns(); i64 start_ns = sys_time_ns();
b32 success = false; b32 success = 0;
ID3DBlob *blob = NULL; ID3DBlob *blob = 0;
ID3DBlob *error_blob = NULL; ID3DBlob *error_blob = 0;
if (resource_exists(shader_res)) { if (resource_exists(shader_res)) {
struct dx12_include_handler *include_handler = dx12_include_handler_alloc(scratch.arena, pipeline); struct dx12_include_handler *include_handler = dx12_include_handler_alloc(scratch.arena, pipeline);
@ -809,7 +809,7 @@ INTERNAL SYS_JOB_DEF(shader_compile_job, job)
/* Compile shader */ /* Compile shader */
struct string friendly_name = string_cat(scratch.arena, LIT("res/"), shader_desc.file); struct string friendly_name = string_cat(scratch.arena, LIT("res/"), shader_desc.file);
char *friendly_name_cstr = cstr_from_string(scratch.arena, friendly_name); char *friendly_name_cstr = cstr_from_string(scratch.arena, friendly_name);
char *target = NULL; char *target = 0;
switch (kind) { switch (kind) {
case SHADER_COMPILE_TASK_KIND_VS: case SHADER_COMPILE_TASK_KIND_VS:
{ {
@ -823,7 +823,7 @@ INTERNAL SYS_JOB_DEF(shader_compile_job, job)
} }
D3D_SHADER_MACRO defines[] = { D3D_SHADER_MACRO defines[] = {
{ "SH_CPU", "0" }, { "SH_CPU", "0" },
{ NULL, NULL } { 0, 0 }
}; };
HRESULT hr = D3DCompile(shader_src.text, shader_src.len, friendly_name_cstr, defines, (ID3DInclude *)include_handler, func_cstr, target, d3d_compile_flags, 0, &blob, &error_blob); HRESULT hr = D3DCompile(shader_src.text, shader_src.len, friendly_name_cstr, defines, (ID3DInclude *)include_handler, func_cstr, target, d3d_compile_flags, 0, &blob, &error_blob);
success = SUCCEEDED(hr) && !error_blob; success = SUCCEEDED(hr) && !error_blob;
@ -862,7 +862,7 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
struct pipeline_desc *desc = &sig->descs_in[job.id]; struct pipeline_desc *desc = &sig->descs_in[job.id];
struct pipeline **pipelines_out = sig->pipelines_out; struct pipeline **pipelines_out = sig->pipelines_out;
struct pipeline *pipeline = NULL; struct pipeline *pipeline = 0;
{ {
struct arena *pipeline_arena = arena_alloc(MEBI(64)); struct arena *pipeline_arena = arena_alloc(MEBI(64));
pipeline = arena_push(pipeline_arena, struct pipeline); pipeline = arena_push(pipeline_arena, struct pipeline);
@ -879,7 +879,7 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
i64 start_ns = sys_time_ns(); i64 start_ns = sys_time_ns();
struct string pipeline_name = pipeline->name; struct string pipeline_name = pipeline->name;
logf_info("Loading pipeline \"%F\"", FMT_STR(pipeline_name)); logf_info("Loading pipeline \"%F\"", FMT_STR(pipeline_name));
b32 success = true; b32 success = 1;
HRESULT hr = 0; HRESULT hr = 0;
struct string error_str = LIT("Unknown error"); struct string error_str = LIT("Unknown error");
@ -896,10 +896,10 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
if (success) { if (success) {
if (!resource_exists(&vs_res)) { if (!resource_exists(&vs_res)) {
error_str = string_format(scratch.arena, LIT("Shader source \"%F\" not found"), FMT_STR(desc->vs.file)); error_str = string_format(scratch.arena, LIT("Shader source \"%F\" not found"), FMT_STR(desc->vs.file));
success = false; success = 0;
} else if (!resource_exists(&ps_res)) { } else if (!resource_exists(&ps_res)) {
error_str = string_format(scratch.arena, LIT("Shader source \"%F\" not found"), FMT_STR(desc->ps.file)); error_str = string_format(scratch.arena, LIT("Shader source \"%F\" not found"), FMT_STR(desc->ps.file));
success = false; success = 0;
} }
} }
@ -929,15 +929,15 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
* NOTE: This isn't necessary for creating the root signature (since it * NOTE: This isn't necessary for creating the root signature (since it
* could reuse the shader blob), however we'd like to verify that the * could reuse the shader blob), however we'd like to verify that the
* root signature exists and matches between shaders. */ * root signature exists and matches between shaders. */
ID3D10Blob *rootsig_blob = NULL; ID3D10Blob *rootsig_blob = 0;
if (success) { if (success) {
__profn("Validate root signatures"); __profn("Validate root signatures");
char *vs_rootsig_data = NULL; char *vs_rootsig_data = 0;
char *ps_rootsig_data = NULL; char *ps_rootsig_data = 0;
u32 vs_rootsig_data_len = 0; u32 vs_rootsig_data_len = 0;
u32 ps_rootsig_data_len = 0; u32 ps_rootsig_data_len = 0;
ID3D10Blob *vs_rootsig_blob = NULL; ID3D10Blob *vs_rootsig_blob = 0;
ID3D10Blob *ps_rootsig_blob = NULL; ID3D10Blob *ps_rootsig_blob = 0;
D3DGetBlobPart(ID3D10Blob_GetBufferPointer(vs.blob), ID3D10Blob_GetBufferSize(vs.blob), D3D_BLOB_ROOT_SIGNATURE, 0, &vs_rootsig_blob); D3DGetBlobPart(ID3D10Blob_GetBufferPointer(vs.blob), ID3D10Blob_GetBufferSize(vs.blob), D3D_BLOB_ROOT_SIGNATURE, 0, &vs_rootsig_blob);
D3DGetBlobPart(ID3D10Blob_GetBufferPointer(ps.blob), ID3D10Blob_GetBufferSize(ps.blob), D3D_BLOB_ROOT_SIGNATURE, 0, &ps_rootsig_blob); D3DGetBlobPart(ID3D10Blob_GetBufferPointer(ps.blob), ID3D10Blob_GetBufferSize(ps.blob), D3D_BLOB_ROOT_SIGNATURE, 0, &ps_rootsig_blob);
if (vs_rootsig_blob) { if (vs_rootsig_blob) {
@ -949,13 +949,13 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
ps_rootsig_data_len = ID3D10Blob_GetBufferSize(ps_rootsig_blob); ps_rootsig_data_len = ID3D10Blob_GetBufferSize(ps_rootsig_blob);
} }
if (vs_rootsig_data_len == 0) { if (vs_rootsig_data_len == 0) {
success = false; success = 0;
error_str = LIT("Vertex shader is missing root signature"); error_str = LIT("Vertex shader is missing root signature");
} else if (ps_rootsig_data_len == 0) { } else if (ps_rootsig_data_len == 0) {
success = false; success = 0;
error_str = LIT("Pixel shader is missing root signature"); error_str = LIT("Pixel shader is missing root signature");
} else if (vs_rootsig_data_len != ps_rootsig_data_len || !MEMEQ(vs_rootsig_data, ps_rootsig_data, vs_rootsig_data_len)) { } else if (vs_rootsig_data_len != ps_rootsig_data_len || !MEMEQ(vs_rootsig_data, ps_rootsig_data, vs_rootsig_data_len)) {
success = false; success = 0;
error_str = LIT("Root signature mismatch between vertex and pixel shader"); error_str = LIT("Root signature mismatch between vertex and pixel shader");
} else { } else {
rootsig_blob = vs_rootsig_blob; rootsig_blob = vs_rootsig_blob;
@ -966,31 +966,31 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
} }
/* Create root signature */ /* Create root signature */
ID3D12RootSignature *rootsig = NULL; ID3D12RootSignature *rootsig = 0;
if (success) { if (success) {
__profn("Create root signature"); __profn("Create root signature");
hr = ID3D12Device_CreateRootSignature(G.device, 0, ID3D10Blob_GetBufferPointer(rootsig_blob), ID3D10Blob_GetBufferSize(rootsig_blob), &IID_ID3D12RootSignature, (void **)&rootsig); hr = ID3D12Device_CreateRootSignature(G.device, 0, ID3D10Blob_GetBufferPointer(rootsig_blob), ID3D10Blob_GetBufferSize(rootsig_blob), &IID_ID3D12RootSignature, (void **)&rootsig);
if (FAILED(hr)) { if (FAILED(hr)) {
error_str = LIT("Failed to create root signature"); error_str = LIT("Failed to create root signature");
success = false; success = 0;
} }
} }
/* Create PSO */ /* Create PSO */
ID3D12PipelineState *pso = NULL; ID3D12PipelineState *pso = 0;
if (success) { if (success) {
/* Default rasterizer state */ /* Default rasterizer state */
__profn("Create PSO"); __profn("Create PSO");
D3D12_RASTERIZER_DESC raster_desc = { D3D12_RASTERIZER_DESC raster_desc = {
.FillMode = D3D12_FILL_MODE_SOLID, .FillMode = D3D12_FILL_MODE_SOLID,
.CullMode = D3D12_CULL_MODE_NONE, .CullMode = D3D12_CULL_MODE_NONE,
.FrontCounterClockwise = FALSE, .FrontCounterClockwise = 0,
.DepthBias = D3D12_DEFAULT_DEPTH_BIAS, .DepthBias = D3D12_DEFAULT_DEPTH_BIAS,
.DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP, .DepthBiasClamp = D3D12_DEFAULT_DEPTH_BIAS_CLAMP,
.SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS, .SlopeScaledDepthBias = D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS,
.DepthClipEnable = TRUE, .DepthClipEnable = 1,
.MultisampleEnable = FALSE, .MultisampleEnable = 0,
.AntialiasedLineEnable = FALSE, .AntialiasedLineEnable = 0,
.ForcedSampleCount = 0, .ForcedSampleCount = 0,
.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF .ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF
}; };
@ -998,7 +998,7 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
/* Input layout */ /* Input layout */
u32 num_input_layout_elements = 0; u32 num_input_layout_elements = 0;
for (u32 i = 0; i < countof(desc->ia); ++i) { for (u32 i = 0; i < countof(desc->ia); ++i) {
if (desc->ia[i].SemanticName == NULL) { if (desc->ia[i].SemanticName == 0) {
break; break;
} }
++num_input_layout_elements; ++num_input_layout_elements;
@ -1010,10 +1010,10 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
/* Blend state */ /* Blend state */
D3D12_BLEND_DESC blend_desc = { D3D12_BLEND_DESC blend_desc = {
.AlphaToCoverageEnable = FALSE, .AlphaToCoverageEnable = 0,
.IndependentBlendEnable = FALSE .IndependentBlendEnable = 0
}; };
blend_desc.RenderTarget[0].BlendEnable = TRUE; blend_desc.RenderTarget[0].BlendEnable = 1;
blend_desc.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA; blend_desc.RenderTarget[0].SrcBlend = D3D12_BLEND_SRC_ALPHA;
blend_desc.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA; blend_desc.RenderTarget[0].DestBlend = D3D12_BLEND_INV_SRC_ALPHA;
blend_desc.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD; blend_desc.RenderTarget[0].BlendOp = D3D12_BLEND_OP_ADD;
@ -1024,8 +1024,8 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
/* Disable depth stencil */ /* Disable depth stencil */
D3D12_DEPTH_STENCIL_DESC depth_stencil_desc = { D3D12_DEPTH_STENCIL_DESC depth_stencil_desc = {
.DepthEnable = FALSE, .DepthEnable = 0,
.StencilEnable = FALSE .StencilEnable = 0
}; };
/* PSO */ /* PSO */
@ -1052,7 +1052,7 @@ INTERNAL SYS_JOB_DEF(pipeline_init_job, job)
hr = ID3D12Device_CreateGraphicsPipelineState(G.device, &pso_desc, &IID_ID3D12PipelineState, (void **)&pso); hr = ID3D12Device_CreateGraphicsPipelineState(G.device, &pso_desc, &IID_ID3D12PipelineState, (void **)&pso);
if (FAILED(hr)) { if (FAILED(hr)) {
error_str = LIT("Failed to create pipeline state object"); error_str = LIT("Failed to create pipeline state object");
success = false; success = 0;
} }
} }
@ -1134,7 +1134,7 @@ INTERNAL void pipeline_release_now(struct pipeline *pipeline)
INTERNAL struct pipeline_scope *pipeline_scope_begin(void) INTERNAL struct pipeline_scope *pipeline_scope_begin(void)
{ {
__prof; __prof;
struct pipeline_scope *scope = NULL; struct pipeline_scope *scope = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.pipelines_mutex); struct snc_lock lock = snc_lock_e(&G.pipelines_mutex);
if (G.first_free_pipeline_scope) { if (G.first_free_pipeline_scope) {
@ -1143,7 +1143,7 @@ INTERNAL struct pipeline_scope *pipeline_scope_begin(void)
} }
snc_unlock(&lock); snc_unlock(&lock);
} }
struct arena *arena = NULL; struct arena *arena = 0;
if (scope) { if (scope) {
arena = scope->arena; arena = scope->arena;
} else { } else {
@ -1297,7 +1297,7 @@ INTERNAL RESOURCE_WATCH_CALLBACK_FUNC_DEF(pipeline_resource_watch_callback, name
INTERNAL struct descriptor *descriptor_alloc(struct cpu_descriptor_heap *dh) INTERNAL struct descriptor *descriptor_alloc(struct cpu_descriptor_heap *dh)
{ {
__prof; __prof;
struct descriptor *d = NULL; struct descriptor *d = 0;
u32 index = 0; u32 index = 0;
D3D12_CPU_DESCRIPTOR_HANDLE handle = ZI; D3D12_CPU_DESCRIPTOR_HANDLE handle = ZI;
{ {
@ -1342,7 +1342,7 @@ INTERNAL void descriptor_release(struct descriptor *descriptor)
INTERNAL struct cpu_descriptor_heap *cpu_descriptor_heap_alloc(enum D3D12_DESCRIPTOR_HEAP_TYPE type) INTERNAL struct cpu_descriptor_heap *cpu_descriptor_heap_alloc(enum D3D12_DESCRIPTOR_HEAP_TYPE type)
{ {
__prof; __prof;
struct cpu_descriptor_heap *dh = NULL; struct cpu_descriptor_heap *dh = 0;
{ {
struct arena *arena = arena_alloc(MEBI(64)); struct arena *arena = arena_alloc(MEBI(64));
dh = arena_push(arena, struct cpu_descriptor_heap); dh = arena_push(arena, struct cpu_descriptor_heap);
@ -1427,7 +1427,7 @@ struct material_grid_desc {
INTERNAL struct flow *flow_alloc(void) INTERNAL struct flow *flow_alloc(void)
{ {
__prof; __prof;
struct flow *flow = NULL; struct flow *flow = 0;
{ {
struct arena *arena = arena_alloc(MEBI(64)); struct arena *arena = arena_alloc(MEBI(64));
flow = arena_push(arena, struct flow); flow = arena_push(arena, struct flow);
@ -1568,7 +1568,7 @@ enum dx12_resource_view_flags {
INTERNAL struct dx12_resource *dx12_resource_alloc(D3D12_HEAP_PROPERTIES heap_props, D3D12_HEAP_FLAGS heap_flags, D3D12_RESOURCE_DESC desc, D3D12_RESOURCE_STATES initial_state, enum dx12_resource_view_flags view_flags) INTERNAL struct dx12_resource *dx12_resource_alloc(D3D12_HEAP_PROPERTIES heap_props, D3D12_HEAP_FLAGS heap_flags, D3D12_RESOURCE_DESC desc, D3D12_RESOURCE_STATES initial_state, enum dx12_resource_view_flags view_flags)
{ {
__prof; __prof;
struct dx12_resource *r = NULL; struct dx12_resource *r = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.resources_mutex); struct snc_lock lock = snc_lock_e(&G.resources_mutex);
if (G.first_free_resource) { if (G.first_free_resource) {
@ -1582,7 +1582,7 @@ INTERNAL struct dx12_resource *dx12_resource_alloc(D3D12_HEAP_PROPERTIES heap_pr
MEMZERO_STRUCT(r); MEMZERO_STRUCT(r);
D3D12_CLEAR_VALUE clear_value = { .Format = desc.Format, .Color = { 0 } }; D3D12_CLEAR_VALUE clear_value = { .Format = desc.Format, .Color = { 0 } };
D3D12_CLEAR_VALUE *clear_value_ptr = desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ? &clear_value : NULL; D3D12_CLEAR_VALUE *clear_value_ptr = desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ? &clear_value : 0;
HRESULT hr = ID3D12Device_CreateCommittedResource(G.device, &heap_props, heap_flags, &desc, initial_state, clear_value_ptr, &IID_ID3D12Resource, (void **)&r->resource); HRESULT hr = ID3D12Device_CreateCommittedResource(G.device, &heap_props, heap_flags, &desc, initial_state, clear_value_ptr, &IID_ID3D12Resource, (void **)&r->resource);
if (FAILED(hr)) { if (FAILED(hr)) {
/* TODO: Don't panic */ /* TODO: Don't panic */
@ -1606,15 +1606,15 @@ INTERNAL struct dx12_resource *dx12_resource_alloc(D3D12_HEAP_PROPERTIES heap_pr
} }
if (view_flags & DX12_RESOURCE_VIEW_FLAG_SRV) { if (view_flags & DX12_RESOURCE_VIEW_FLAG_SRV) {
r->srv_descriptor = descriptor_alloc(G.cbv_srv_uav_heap); r->srv_descriptor = descriptor_alloc(G.cbv_srv_uav_heap);
ID3D12Device_CreateShaderResourceView(G.device, r->resource, NULL, r->srv_descriptor->handle); ID3D12Device_CreateShaderResourceView(G.device, r->resource, 0, r->srv_descriptor->handle);
} }
if (view_flags & DX12_RESOURCE_VIEW_FLAG_UAV) { if (view_flags & DX12_RESOURCE_VIEW_FLAG_UAV) {
r->uav_descriptor = descriptor_alloc(G.cbv_srv_uav_heap); r->uav_descriptor = descriptor_alloc(G.cbv_srv_uav_heap);
ID3D12Device_CreateUnorderedAccessView(G.device, r->resource, NULL, NULL, r->uav_descriptor->handle); ID3D12Device_CreateUnorderedAccessView(G.device, r->resource, 0, 0, r->uav_descriptor->handle);
} }
if (view_flags & DX12_RESOURCE_VIEW_FLAG_RTV) { if (view_flags & DX12_RESOURCE_VIEW_FLAG_RTV) {
r->rtv_descriptor = descriptor_alloc(G.rtv_heap); r->rtv_descriptor = descriptor_alloc(G.rtv_heap);
ID3D12Device_CreateRenderTargetView(G.device, r->resource, NULL, r->rtv_descriptor->handle); ID3D12Device_CreateRenderTargetView(G.device, r->resource, 0, r->rtv_descriptor->handle);
} }
return r; return r;
@ -1687,7 +1687,7 @@ INTERNAL struct command_list_pool *command_list_pool_alloc(struct command_queue
INTERNAL struct command_queue *command_queue_alloc(enum D3D12_COMMAND_LIST_TYPE type, enum D3D12_COMMAND_QUEUE_PRIORITY priority, struct string dbg_name) INTERNAL struct command_queue *command_queue_alloc(enum D3D12_COMMAND_LIST_TYPE type, enum D3D12_COMMAND_QUEUE_PRIORITY priority, struct string dbg_name)
{ {
__prof; __prof;
struct command_queue *cq = NULL; struct command_queue *cq = 0;
{ {
struct arena *arena = arena_alloc(GIBI(64)); struct arena *arena = arena_alloc(GIBI(64));
cq = arena_push(arena, struct command_queue); cq = arena_push(arena, struct command_queue);
@ -1730,7 +1730,7 @@ INTERNAL void command_queue_release(struct command_queue *cq)
INTERNAL struct command_list_pool *command_list_pool_alloc(struct command_queue *cq) INTERNAL struct command_list_pool *command_list_pool_alloc(struct command_queue *cq)
{ {
struct command_list_pool *pool = NULL; struct command_list_pool *pool = 0;
{ {
struct arena *arena = arena_alloc(GIBI(64)); struct arena *arena = arena_alloc(GIBI(64));
pool = arena_push(arena, struct command_list_pool); pool = arena_push(arena, struct command_list_pool);
@ -1746,9 +1746,9 @@ INTERNAL struct command_list *command_list_open(struct command_list_pool *pool)
struct command_queue *cq = pool->cq; struct command_queue *cq = pool->cq;
u64 completed_fence_value = ID3D12Fence_GetCompletedValue(cq->submit_fence); u64 completed_fence_value = ID3D12Fence_GetCompletedValue(cq->submit_fence);
struct command_list *cl = NULL; struct command_list *cl = 0;
struct ID3D12GraphicsCommandList *old_cl = NULL; struct ID3D12GraphicsCommandList *old_cl = 0;
struct ID3D12CommandAllocator *old_ca = NULL; struct ID3D12CommandAllocator *old_ca = 0;
{ {
struct snc_lock lock = snc_lock_e(&pool->mutex); struct snc_lock lock = snc_lock_e(&pool->mutex);
/* Find first command list ready for reuse */ /* Find first command list ready for reuse */
@ -1794,7 +1794,7 @@ INTERNAL struct command_list *command_list_open(struct command_list_pool *pool)
sys_panic(LIT("Failed to create command allocator")); sys_panic(LIT("Failed to create command allocator"));
} }
hr = ID3D12Device_CreateCommandList(G.device, 0, cq->type, cl->ca, NULL, &IID_ID3D12GraphicsCommandList, (void **)&cl->cl); hr = ID3D12Device_CreateCommandList(G.device, 0, cq->type, cl->ca, 0, &IID_ID3D12GraphicsCommandList, (void **)&cl->cl);
if (FAILED(hr)) { if (FAILED(hr)) {
sys_panic(LIT("Failed to create command list")); sys_panic(LIT("Failed to create command list"));
} }
@ -1811,7 +1811,7 @@ INTERNAL struct command_list *command_list_open(struct command_list_pool *pool)
sys_panic(LIT("Failed to reset command allocator")); sys_panic(LIT("Failed to reset command allocator"));
} }
hr = ID3D12GraphicsCommandList_Reset(cl->cl, cl->ca, NULL); hr = ID3D12GraphicsCommandList_Reset(cl->cl, cl->ca, 0);
if (FAILED(hr)) { if (FAILED(hr)) {
sys_panic(LIT("Failed to reset command list")); sys_panic(LIT("Failed to reset command list"));
} }
@ -1911,8 +1911,8 @@ INTERNAL struct command_descriptor_heap *command_list_push_descriptor_heap(struc
ASSERT(dh_cpu->type == D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); /* Src heap must have expected type */ ASSERT(dh_cpu->type == D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); /* Src heap must have expected type */
/* Allocate GPU heap */ /* Allocate GPU heap */
struct command_descriptor_heap *cdh = NULL; struct command_descriptor_heap *cdh = 0;
ID3D12DescriptorHeap *old_heap = NULL; ID3D12DescriptorHeap *old_heap = 0;
D3D12_CPU_DESCRIPTOR_HANDLE old_cpu_handle = ZI; D3D12_CPU_DESCRIPTOR_HANDLE old_cpu_handle = ZI;
D3D12_GPU_DESCRIPTOR_HANDLE old_gpu_handle = ZI; D3D12_GPU_DESCRIPTOR_HANDLE old_gpu_handle = ZI;
{ {
@ -2016,9 +2016,9 @@ INTERNAL struct command_buffer *command_list_push_buffer(struct command_list *cl
u64 size = max_u64(DX12_COMMAND_BUFFER_MIN_SIZE, align_up_pow2(data.len)); u64 size = max_u64(DX12_COMMAND_BUFFER_MIN_SIZE, align_up_pow2(data.len));
/* Allocate buffer */ /* Allocate buffer */
struct command_buffer_group *cb_group = NULL; struct command_buffer_group *cb_group = 0;
struct command_buffer *cb = NULL; struct command_buffer *cb = 0;
struct dx12_resource *resource = NULL; struct dx12_resource *resource = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.command_buffers_mutex); struct snc_lock lock = snc_lock_e(&G.command_buffers_mutex);
@ -2097,14 +2097,14 @@ INTERNAL struct command_buffer *command_list_push_buffer(struct command_list *cl
/* Copy data to resource */ /* Copy data to resource */
{ {
D3D12_RANGE read_range = ZI; D3D12_RANGE read_range = ZI;
void *dst = NULL; void *dst = 0;
HRESULT hr = ID3D12Resource_Map(cb->resource->resource, 0, &read_range, &dst); HRESULT hr = ID3D12Resource_Map(cb->resource->resource, 0, &read_range, &dst);
if (FAILED(hr) || !dst) { if (FAILED(hr) || !dst) {
/* TODO: Don't panic */ /* TODO: Don't panic */
sys_panic(LIT("Failed to map command buffer resource")); sys_panic(LIT("Failed to map command buffer resource"));
} }
MEMCPY(dst, data.text, data.len); MEMCPY(dst, data.text, data.len);
ID3D12Resource_Unmap(cb->resource->resource, 0, NULL); ID3D12Resource_Unmap(cb->resource->resource, 0, 0);
} }
/* Insert into command list */ /* Insert into command list */
@ -2130,7 +2130,7 @@ INTERNAL void command_list_set_root_constant(struct command_list *cl, void *src,
} }
} else { } else {
/* Root constant structs must pad to 32 bits */ /* Root constant structs must pad to 32 bits */
ASSERT(false); ASSERT(0);
} }
} }
@ -2237,7 +2237,7 @@ struct gp_resource *gp_texture_alloc(enum gp_texture_format format, u32 flags, s
ID3D12Device_GetCopyableFootprints(G.device, &desc, 0, 1, 0, &footprint, &upload_num_rows, &upload_row_size, &upload_size); ID3D12Device_GetCopyableFootprints(G.device, &desc, 0, 1, 0, &footprint, &upload_num_rows, &upload_row_size, &upload_size);
/* Create temp upload heap */ /* Create temp upload heap */
struct dx12_resource *upload = NULL; struct dx12_resource *upload = 0;
{ {
enum dx12_resource_view_flags upload_view_flags = DX12_RESOURCE_VIEW_FLAG_NONE; enum dx12_resource_view_flags upload_view_flags = DX12_RESOURCE_VIEW_FLAG_NONE;
@ -2268,20 +2268,20 @@ struct gp_resource *gp_texture_alloc(enum gp_texture_format format, u32 flags, s
/* FIXME: Copy based on footprint */ /* FIXME: Copy based on footprint */
{ {
D3D12_RANGE read_range = ZI; D3D12_RANGE read_range = ZI;
void *dst = NULL; void *dst = 0;
HRESULT hr = ID3D12Resource_Map(upload->resource, 0, &read_range, &dst); HRESULT hr = ID3D12Resource_Map(upload->resource, 0, &read_range, &dst);
if (FAILED(hr) || !dst) { if (FAILED(hr) || !dst) {
/* TODO: Don't panic */ /* TODO: Don't panic */
sys_panic(LIT("Failed to map texture upload resource")); sys_panic(LIT("Failed to map texture upload resource"));
} }
MEMCPY(dst, initial_data, size.x * size.y * pixel_size); MEMCPY(dst, initial_data, size.x * size.y * pixel_size);
ID3D12Resource_Unmap(upload->resource, 0, NULL); ID3D12Resource_Unmap(upload->resource, 0, 0);
} }
#else #else
/* FIXME: Copy based on footprint */ /* FIXME: Copy based on footprint */
{ {
D3D12_RANGE read_range = ZI; D3D12_RANGE read_range = ZI;
void *mapped = NULL; void *mapped = 0;
HRESULT hr = ID3D12Resource_Map(upload->resource, 0, &read_range, &mapped); HRESULT hr = ID3D12Resource_Map(upload->resource, 0, &read_range, &mapped);
if (FAILED(hr) || !mapped) { if (FAILED(hr) || !mapped) {
/* TODO: Don't panic */ /* TODO: Don't panic */
@ -2292,7 +2292,7 @@ struct gp_resource *gp_texture_alloc(enum gp_texture_format format, u32 flags, s
for (u32 y = 0; y < upload_num_rows; ++y) { for (u32 y = 0; y < upload_num_rows; ++y) {
memcpy(dst + y * footprint.Footprint.RowPitch, src + y * size.x * pixel_size, size.x * pixel_size); memcpy(dst + y * footprint.Footprint.RowPitch, src + y * size.x * pixel_size, size.x * pixel_size);
} }
ID3D12Resource_Unmap(upload->resource, 0, NULL); ID3D12Resource_Unmap(upload->resource, 0, 0);
} }
#endif #endif
} }
@ -2314,7 +2314,7 @@ struct gp_resource *gp_texture_alloc(enum gp_texture_format format, u32 flags, s
.PlacedFootprint = footprint, .PlacedFootprint = footprint,
}; };
ID3D12GraphicsCommandList_CopyTextureRegion(cl->cl, &dst_loc, 0, 0, 0, &src_loc, NULL); ID3D12GraphicsCommandList_CopyTextureRegion(cl->cl, &dst_loc, 0, 0, 0, &src_loc, 0);
/* FIXME: Better barrier? */ /* FIXME: Better barrier? */
//dx12_resource_barrier(cl->cl, r, D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE); //dx12_resource_barrier(cl->cl, r, D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE);
} }
@ -2324,7 +2324,7 @@ struct gp_resource *gp_texture_alloc(enum gp_texture_format format, u32 flags, s
/* TODO: Return async waitable to caller */ /* TODO: Return async waitable to caller */
{ {
__profn("Wait for upload"); __profn("Wait for upload");
HANDLE event = CreateEvent(NULL, false, false, NULL); HANDLE event = CreateEvent(0, 0, 0, 0);
ID3D12Fence_SetEventOnCompletion(cq->submit_fence, fence_target, event); ID3D12Fence_SetEventOnCompletion(cq->submit_fence, fence_target, event);
WaitForSingleObject(event, INFINITE); WaitForSingleObject(event, INFINITE);
CloseHandle(event); CloseHandle(event);
@ -2438,10 +2438,10 @@ void gp_dispatch(struct gp_dispatch_params params)
/* Transition render target */ /* Transition render target */
enum D3D12_RESOURCE_STATES target_old_state = dx12_resource_barrier(cl->cl, target, D3D12_RESOURCE_STATE_RENDER_TARGET); enum D3D12_RESOURCE_STATES target_old_state = dx12_resource_barrier(cl->cl, target, D3D12_RESOURCE_STATE_RENDER_TARGET);
{ {
ID3D12GraphicsCommandList_OMSetRenderTargets(cl->cl, 1, &target->rtv_descriptor->handle, false, NULL); ID3D12GraphicsCommandList_OMSetRenderTargets(cl->cl, 1, &target->rtv_descriptor->handle, 0, 0);
if (params.clear_target) { if (params.clear_target) {
f32 clear_color[] = { 0.0f, 0.0f, 0.0f, 0.0f }; f32 clear_color[] = { 0.0f, 0.0f, 0.0f, 0.0f };
ID3D12GraphicsCommandList_ClearRenderTargetView(cl->cl, target->rtv_descriptor->handle, clear_color, 0, NULL); ID3D12GraphicsCommandList_ClearRenderTargetView(cl->cl, target->rtv_descriptor->handle, clear_color, 0, 0);
} }
} }
@ -2538,7 +2538,7 @@ struct gp_memory_info gp_query_memory_info(void)
struct gp_memory_info res = ZI; struct gp_memory_info res = ZI;
HRESULT hr = 0; HRESULT hr = 0;
IDXGIAdapter3 *dxgiAdapter3 = NULL; IDXGIAdapter3 *dxgiAdapter3 = 0;
if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) {
hr = IDXGIAdapter_QueryInterface(G.adapter, &IID_IDXGIAdapter3, (void **)&dxgiAdapter3); hr = IDXGIAdapter_QueryInterface(G.adapter, &IID_IDXGIAdapter3, (void **)&dxgiAdapter3);
} }
@ -2586,7 +2586,7 @@ INTERNAL struct swapchain_buffer *update_swapchain(struct swapchain *swapchain,
/* Flush direct queue */ /* Flush direct queue */
//ID3D12CommandQueue_Signal(cq->cq, cq->submit_fence, ++cq->submit_fence_target); //ID3D12CommandQueue_Signal(cq->cq, cq->submit_fence, ++cq->submit_fence_target);
{ {
HANDLE event = CreateEvent(NULL, false, false, NULL); HANDLE event = CreateEvent(0, 0, 0, 0);
ID3D12Fence_SetEventOnCompletion(cq->submit_fence, cq->submit_fence_target, event); ID3D12Fence_SetEventOnCompletion(cq->submit_fence, cq->submit_fence_target, event);
WaitForSingleObject(event, INFINITE); WaitForSingleObject(event, INFINITE);
CloseHandle(event); CloseHandle(event);
@ -2609,7 +2609,7 @@ INTERNAL struct swapchain_buffer *update_swapchain(struct swapchain *swapchain,
snc_unlock(&lock); snc_unlock(&lock);
} else { } else {
/* Create swapchain1 */ /* Create swapchain1 */
IDXGISwapChain1 *swapchain1 = NULL; IDXGISwapChain1 *swapchain1 = 0;
{ {
DXGI_SWAP_CHAIN_DESC1 desc = ZI; DXGI_SWAP_CHAIN_DESC1 desc = ZI;
desc.Format = DX12_SWAPCHAIN_FORMAT; desc.Format = DX12_SWAPCHAIN_FORMAT;
@ -2623,7 +2623,7 @@ INTERNAL struct swapchain_buffer *update_swapchain(struct swapchain *swapchain,
desc.Flags = DX12_SWAPCHAIN_FLAGS; desc.Flags = DX12_SWAPCHAIN_FLAGS;
desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE; desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE;
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
hr = IDXGIFactory2_CreateSwapChainForHwnd(G.factory, (IUnknown *)cq->cq, hwnd, &desc, NULL, NULL, &swapchain1); hr = IDXGIFactory2_CreateSwapChainForHwnd(G.factory, (IUnknown *)cq->cq, hwnd, &desc, 0, 0, &swapchain1);
if (FAILED(hr)) { if (FAILED(hr)) {
sys_panic(LIT("Failed to create IDXGISwapChain1")); sys_panic(LIT("Failed to create IDXGISwapChain1"));
} }
@ -2644,7 +2644,7 @@ INTERNAL struct swapchain_buffer *update_swapchain(struct swapchain *swapchain,
/* Allocate swapchain resources */ /* Allocate swapchain resources */
for (u32 i = 0; i < countof(swapchain->buffers); ++i) { for (u32 i = 0; i < countof(swapchain->buffers); ++i) {
ID3D12Resource *resource = NULL; ID3D12Resource *resource = 0;
hr = IDXGISwapChain3_GetBuffer(swapchain->swapchain, i, &IID_ID3D12Resource, (void **)&resource); hr = IDXGISwapChain3_GetBuffer(swapchain->swapchain, i, &IID_ID3D12Resource, (void **)&resource);
if (FAILED(hr)) { if (FAILED(hr)) {
/* TODO: Don't panic */ /* TODO: Don't panic */
@ -2656,7 +2656,7 @@ INTERNAL struct swapchain_buffer *update_swapchain(struct swapchain *swapchain,
sb->resource = resource; sb->resource = resource;
sb->rtv_descriptor = descriptor_alloc(G.rtv_heap); sb->rtv_descriptor = descriptor_alloc(G.rtv_heap);
sb->state = D3D12_RESOURCE_STATE_COMMON; sb->state = D3D12_RESOURCE_STATE_COMMON;
ID3D12Device_CreateRenderTargetView(G.device, sb->resource, NULL, sb->rtv_descriptor->handle); ID3D12Device_CreateRenderTargetView(G.device, sb->resource, 0, sb->rtv_descriptor->handle);
} }
swapchain->resolution = resolution; swapchain->resolution = resolution;
@ -2711,11 +2711,11 @@ INTERNAL void present_blit(struct swapchain_buffer *dst, struct dx12_resource *s
ID3D12GraphicsCommandList_ResourceBarrier(cl->cl, 1, &rb); ID3D12GraphicsCommandList_ResourceBarrier(cl->cl, 1, &rb);
dst->state = rtb.StateAfter; dst->state = rtb.StateAfter;
} }
ID3D12GraphicsCommandList_OMSetRenderTargets(cl->cl, 1, &dst->rtv_descriptor->handle, false, NULL); ID3D12GraphicsCommandList_OMSetRenderTargets(cl->cl, 1, &dst->rtv_descriptor->handle, 0, 0);
/* Clear */ /* Clear */
f32 clear_color[] = { 0.0f, 0.0f, 0.0f, 0.0f }; f32 clear_color[] = { 0.0f, 0.0f, 0.0f, 0.0f };
ID3D12GraphicsCommandList_ClearRenderTargetView(cl->cl, dst->rtv_descriptor->handle, clear_color, 0, NULL); ID3D12GraphicsCommandList_ClearRenderTargetView(cl->cl, dst->rtv_descriptor->handle, clear_color, 0, 0);
/* Bind pipeline */ /* Bind pipeline */
ID3D12GraphicsCommandList_SetPipelineState(cl->cl, blit_pipeline->pso); ID3D12GraphicsCommandList_SetPipelineState(cl->cl, blit_pipeline->pso);
@ -2786,7 +2786,7 @@ void gp_present(struct sys_window *window, struct v2i32 backresolution, struct g
__profn("Present"); __profn("Present");
HRESULT hr = IDXGISwapChain3_Present(swapchain->swapchain, vsync, present_flags); HRESULT hr = IDXGISwapChain3_Present(swapchain->swapchain, vsync, present_flags);
if (!SUCCEEDED(hr)) { if (!SUCCEEDED(hr)) {
ASSERT(false); ASSERT(0);
} }
__profframe(0); __profframe(0);
} }
@ -2822,7 +2822,7 @@ INTERNAL SYS_THREAD_DEF(evictor_thread_entry_point, arg)
(UNUSED)arg; (UNUSED)arg;
struct arena_temp scratch = scratch_begin_no_conflict(); struct arena_temp scratch = scratch_begin_no_conflict();
HANDLE event = CreateEvent(NULL, false, false, NULL); HANDLE event = CreateEvent(0, 0, 0, 0);
HANDLE events[2] = ZI; HANDLE events[2] = ZI;
events[0] = G.evictor_thread_wake_event; events[0] = G.evictor_thread_wake_event;
events[1] = event; events[1] = event;
@ -2839,7 +2839,7 @@ INTERNAL SYS_THREAD_DEF(evictor_thread_entry_point, arg)
/* Copy queued data */ /* Copy queued data */
u32 num_fenced_releases = 0; u32 num_fenced_releases = 0;
struct fenced_release_data *fenced_releases = NULL; struct fenced_release_data *fenced_releases = 0;
{ {
__profn("Copy queued releases"); __profn("Copy queued releases");
struct snc_lock lock = snc_lock_e(&G.fenced_releases_mutex); struct snc_lock lock = snc_lock_e(&G.fenced_releases_mutex);
@ -2862,7 +2862,7 @@ INTERNAL SYS_THREAD_DEF(evictor_thread_entry_point, arg)
ID3D12Fence_SetEventOnCompletion(cq->submit_fence, targets[i], event); ID3D12Fence_SetEventOnCompletion(cq->submit_fence, targets[i], event);
{ {
__profn("Wait on fence"); __profn("Wait on fence");
WaitForMultipleObjects(2, events, false, INFINITE); WaitForMultipleObjects(2, events, 0, INFINITE);
shutdown = atomic_i32_fetch(&G.evictor_thread_shutdown); shutdown = atomic_i32_fetch(&G.evictor_thread_shutdown);
} }
} }
@ -2878,7 +2878,7 @@ INTERNAL SYS_THREAD_DEF(evictor_thread_entry_point, arg)
default: default:
{ {
/* Unknown handle type */ /* Unknown handle type */
ASSERT(false); ASSERT(0);
} break; } break;
case FENCED_RELEASE_KIND_RESOURCE: case FENCED_RELEASE_KIND_RESOURCE:

View File

@ -150,7 +150,7 @@ struct host_msg_assembler_lookup_bin {
struct host_msg_assembler *last; struct host_msg_assembler *last;
}; };
READONLY GLOBAL struct host_channel _g_host_channel_nil = { .valid = false }; READONLY GLOBAL struct host_channel _g_host_channel_nil = { .valid = 0 };
GLOBAL struct { GLOBAL struct {
i32 _; i32 _;
@ -299,7 +299,7 @@ INTERNAL struct host_channel *host_channel_alloc(struct host *host, struct sock_
++host->num_channels_reserved; ++host->num_channels_reserved;
} }
MEMZERO_STRUCT(channel); MEMZERO_STRUCT(channel);
channel->valid = true; channel->valid = 1;
channel->id = id; channel->id = id;
channel->host = host; channel->host = host;
channel->address = address; channel->address = address;
@ -358,7 +358,7 @@ INTERNAL void host_channel_release(struct host_channel *channel)
} }
++channel->id.gen; ++channel->id.gen;
channel->valid = false; channel->valid = 0;
channel->next_free = host->first_free_channel; channel->next_free = host->first_free_channel;
host->first_free_channel = channel; host->first_free_channel = channel;
} }
@ -384,7 +384,7 @@ INTERNAL struct host_msg_assembler *host_get_msg_assembler(struct host *host, st
return ma; return ma;
} }
} }
return NULL; return 0;
} }
INTERNAL struct host_msg_assembler *host_msg_assembler_alloc(struct host_channel *channel, u64 msg_id, u64 chunk_count, u64 now_ns, b32 is_reliable) INTERNAL struct host_msg_assembler *host_msg_assembler_alloc(struct host_channel *channel, u64 msg_id, u64 chunk_count, u64 now_ns, b32 is_reliable)
@ -528,7 +528,7 @@ INTERNAL b32 host_msg_assembler_is_chunk_filled(struct host_msg_assembler *ma, u
if (chunk_id < ma->num_chunks_total) { if (chunk_id < ma->num_chunks_total) {
return (ma->chunk_bitmap[chunk_id / 8] & (1 << (chunk_id % 8))) != 0; return (ma->chunk_bitmap[chunk_id / 8] & (1 << (chunk_id % 8))) != 0;
} }
return false; return 0;
} }
INTERNAL void host_msg_assembler_set_chunk_received(struct host_msg_assembler *ma, u64 chunk_id) INTERNAL void host_msg_assembler_set_chunk_received(struct host_msg_assembler *ma, u64 chunk_id)
@ -545,7 +545,7 @@ INTERNAL void host_msg_assembler_set_chunk_received(struct host_msg_assembler *m
INTERNAL struct host_snd_packet *host_channel_snd_packet_alloc(struct host_channel *channel, b32 is_reliable) INTERNAL struct host_snd_packet *host_channel_snd_packet_alloc(struct host_channel *channel, b32 is_reliable)
{ {
struct host *host = channel->host; struct host *host = channel->host;
struct host_snd_packet *packet = NULL; struct host_snd_packet *packet = 0;
if (host->first_free_packet) { if (host->first_free_packet) {
packet = host->first_free_packet; packet = host->first_free_packet;
host->first_free_packet = packet->next; host->first_free_packet = packet->next;
@ -686,7 +686,7 @@ struct host_event_list host_update_begin(struct arena *arena, struct host *host)
} }
} }
b32 skip_packet = false; b32 skip_packet = 0;
b32 is_reliable = packet_flags & HOST_PACKET_FLAG_RELIABLE; b32 is_reliable = packet_flags & HOST_PACKET_FLAG_RELIABLE;
if (channel->valid) { if (channel->valid) {
if (is_reliable) { if (is_reliable) {
@ -694,7 +694,7 @@ struct host_event_list host_update_begin(struct arena *arena, struct host *host)
if (packet_seq == channel->our_acked_seq + 1) { if (packet_seq == channel->our_acked_seq + 1) {
channel->our_acked_seq = packet_seq; channel->our_acked_seq = packet_seq;
} else { } else {
skip_packet = true; skip_packet = 1;
} }
} }
} }
@ -722,7 +722,7 @@ struct host_event_list host_update_begin(struct arena *arena, struct host *host)
struct host_event *event = push_event(arena, &events); struct host_event *event = push_event(arena, &events);
event->kind = HOST_EVENT_KIND_CHANNEL_OPENED; event->kind = HOST_EVENT_KIND_CHANNEL_OPENED;
event->channel_id = channel->id; event->channel_id = channel->id;
channel->connected = true; channel->connected = 1;
} }
} break; } break;
@ -802,12 +802,12 @@ struct host_event_list host_update_begin(struct arena *arena, struct host *host)
} }
} else { } else {
/* Overflow reading chunk */ /* Overflow reading chunk */
ASSERT(false); ASSERT(0);
} }
} }
} else { } else {
/* Chunk id/count mismatch */ /* Chunk id/count mismatch */
ASSERT(false); ASSERT(0);
} }
} }
} break; } break;
@ -819,8 +819,8 @@ struct host_event_list host_update_begin(struct arena *arena, struct host *host)
} }
} }
/* Reset read buffer */ /* Reset read buffer */
rcv_buffer->first_packet = NULL; rcv_buffer->first_packet = 0;
rcv_buffer->last_packet = NULL; rcv_buffer->last_packet = 0;
arena_reset(rcv_buffer->arena); arena_reset(rcv_buffer->arena);
} }
@ -862,8 +862,8 @@ struct host_event_list host_update_begin(struct arena *arena, struct host *host)
} }
packet = next; packet = next;
} }
if (channel->first_reliable_packet == NULL) { if (channel->first_reliable_packet == 0) {
channel->last_reliable_packet = NULL; channel->last_reliable_packet = 0;
} }
} }
/* Release timed out unreliable msg buffers */ /* Release timed out unreliable msg buffers */
@ -911,7 +911,7 @@ void host_update_end(struct host *host)
case HOST_CMD_KIND_TRY_CONNECT: case HOST_CMD_KIND_TRY_CONNECT:
{ {
u8 packet_flags = 0; u8 packet_flags = 0;
struct host_snd_packet *packet = host_channel_snd_packet_alloc(channel, false); struct host_snd_packet *packet = host_channel_snd_packet_alloc(channel, 0);
struct bitbuff bb = bitbuff_from_string(STRING_FROM_ARRAY(packet->data)); struct bitbuff bb = bitbuff_from_string(STRING_FROM_ARRAY(packet->data));
struct bitbuff_writer bw = bw_from_bitbuff(&bb); struct bitbuff_writer bw = bw_from_bitbuff(&bb);
bw_write_ubits(&bw, PACKET_MAGIC, 32); /* TODO: implicitly encode magic into crc32 */ bw_write_ubits(&bw, PACKET_MAGIC, 32); /* TODO: implicitly encode magic into crc32 */
@ -924,7 +924,7 @@ void host_update_end(struct host *host)
case HOST_CMD_KIND_CONNECT_SUCCESS: case HOST_CMD_KIND_CONNECT_SUCCESS:
{ {
u8 packet_flags = 0; u8 packet_flags = 0;
struct host_snd_packet *packet = host_channel_snd_packet_alloc(channel, false); struct host_snd_packet *packet = host_channel_snd_packet_alloc(channel, 0);
struct bitbuff bb = bitbuff_from_string(STRING_FROM_ARRAY(packet->data)); struct bitbuff bb = bitbuff_from_string(STRING_FROM_ARRAY(packet->data));
struct bitbuff_writer bw = bw_from_bitbuff(&bb); struct bitbuff_writer bw = bw_from_bitbuff(&bb);
bw_write_ubits(&bw, PACKET_MAGIC, 32); /* TODO: implicitly encode magic into crc32 */ bw_write_ubits(&bw, PACKET_MAGIC, 32); /* TODO: implicitly encode magic into crc32 */
@ -937,7 +937,7 @@ void host_update_end(struct host *host)
case HOST_CMD_KIND_DISCONNECT: case HOST_CMD_KIND_DISCONNECT:
{ {
u8 packet_flags = 0; u8 packet_flags = 0;
struct host_snd_packet *packet = host_channel_snd_packet_alloc(channel, false); struct host_snd_packet *packet = host_channel_snd_packet_alloc(channel, 0);
struct bitbuff bb = bitbuff_from_string(STRING_FROM_ARRAY(packet->data)); struct bitbuff bb = bitbuff_from_string(STRING_FROM_ARRAY(packet->data));
struct bitbuff_writer bw = bw_from_bitbuff(&bb); struct bitbuff_writer bw = bw_from_bitbuff(&bb);
bw_write_ubits(&bw, PACKET_MAGIC, 32); /* TODO: implicitly encode magic into crc32 */ bw_write_ubits(&bw, PACKET_MAGIC, 32); /* TODO: implicitly encode magic into crc32 */
@ -950,7 +950,7 @@ void host_update_end(struct host *host)
case HOST_CMD_KIND_HEARTBEAT: case HOST_CMD_KIND_HEARTBEAT:
{ {
u8 packet_flags = 0; u8 packet_flags = 0;
struct host_snd_packet *packet = host_channel_snd_packet_alloc(channel, false); struct host_snd_packet *packet = host_channel_snd_packet_alloc(channel, 0);
struct bitbuff bb = bitbuff_from_string(STRING_FROM_ARRAY(packet->data)); struct bitbuff bb = bitbuff_from_string(STRING_FROM_ARRAY(packet->data));
struct bitbuff_writer bw = bw_from_bitbuff(&bb); struct bitbuff_writer bw = bw_from_bitbuff(&bb);
bw_write_ubits(&bw, PACKET_MAGIC, 32); /* TODO: implicitly encode magic into crc32 */ bw_write_ubits(&bw, PACKET_MAGIC, 32); /* TODO: implicitly encode magic into crc32 */
@ -1036,8 +1036,8 @@ void host_update_end(struct host *host)
if (channel->first_unreliable_packet) { if (channel->first_unreliable_packet) {
channel->last_unreliable_packet->next = host->first_free_packet; channel->last_unreliable_packet->next = host->first_free_packet;
host->first_free_packet = channel->first_unreliable_packet; host->first_free_packet = channel->first_unreliable_packet;
channel->first_unreliable_packet = NULL; channel->first_unreliable_packet = 0;
channel->last_unreliable_packet = NULL; channel->last_unreliable_packet = 0;
channel->num_unreliable_packets = 0; channel->num_unreliable_packets = 0;
} }
host->bytes_sent += total_sent; host->bytes_sent += total_sent;
@ -1047,8 +1047,8 @@ void host_update_end(struct host *host)
/* Reset cmds */ /* Reset cmds */
host->first_cmd = NULL; host->first_cmd = 0;
host->last_cmd = NULL; host->last_cmd = 0;
arena_reset(host->cmd_arena); arena_reset(host->cmd_arena);
scratch_end(scratch); scratch_end(scratch);

View File

@ -35,7 +35,7 @@ INTERNAL BOOL CALLBACK enum_func(HMODULE module, LPCWSTR type, LPCWSTR wstr_entr
if (hres) { if (hres) {
HGLOBAL hg = LoadResource(module, hres); HGLOBAL hg = LoadResource(module, hres);
if (hg) { if (hg) {
params->found = true; params->found = 1;
params->data.len = SizeofResource(module, hres); params->data.len = SizeofResource(module, hres);
params->data.text = LockResource(hg); params->data.text = LockResource(hg);
} }
@ -57,7 +57,7 @@ struct string _incbin_get(struct _incbin_rc_resource *inc)
/* Search RC file for the resource name */ /* Search RC file for the resource name */
struct string name_lower = string_lower(scratch.arena, inc->rc_name); struct string name_lower = string_lower(scratch.arena, inc->rc_name);
struct rc_search_params params = { .name_lower = name_lower }; struct rc_search_params params = { .name_lower = name_lower };
EnumResourceNamesW(NULL, RT_RCDATA, &enum_func, (LONG_PTR)&params); EnumResourceNamesW(0, RT_RCDATA, &enum_func, (LONG_PTR)&params);
if (!params.found) { if (!params.found) {
sys_panic(string_format(scratch.arena, sys_panic(string_format(scratch.arena,
LIT("INCBIN include not found in RC file: \"%F\""), LIT("INCBIN include not found in RC file: \"%F\""),

View File

@ -101,10 +101,10 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
bof->type = TOKEN_TYPE_BOF; bof->type = TOKEN_TYPE_BOF;
u64 pos = 0; u64 pos = 0;
b32 lexing_done = false; b32 lexing_done = 0;
while (!lexing_done) { while (!lexing_done) {
/* Skip whitespace */ /* Skip whitespace */
b32 whitespace_done = false; b32 whitespace_done = 0;
while (!whitespace_done && pos < src.len) { while (!whitespace_done && pos < src.len) {
switch (src.text[pos]) { switch (src.text[pos]) {
CASE_NEWLINE: CASE_NEWLINE:
@ -113,7 +113,7 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
} break; } break;
default: { default: {
whitespace_done = true; whitespace_done = 1;
} break; } break;
} }
} }
@ -125,7 +125,7 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
if (pos >= src.len) { if (pos >= src.len) {
t->type = TOKEN_TYPE_EOF; t->type = TOKEN_TYPE_EOF;
t->next = t; /* Self reference */ t->next = t; /* Self reference */
lexing_done = true; lexing_done = 1;
} else { } else {
/* Lex known token types */ /* Lex known token types */
switch (src.text[pos]) { switch (src.text[pos]) {
@ -163,11 +163,11 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
/* Number */ /* Number */
case '-': { case '-': {
/* Verify '-' precedes digit */ /* Verify '-' precedes digit */
b32 next_is_digit = false; b32 next_is_digit = 0;
if ((pos + 1) < src.len) { if ((pos + 1) < src.len) {
switch (src.text[pos + 1]) { switch (src.text[pos + 1]) {
CASE_DIGIT_0_TO_9: { CASE_DIGIT_0_TO_9: {
next_is_digit = true; next_is_digit = 1;
} break; } break;
} }
} }
@ -179,7 +179,7 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
CASE_DIGIT_0_TO_9: { CASE_DIGIT_0_TO_9: {
t->type = TOKEN_TYPE_NUMBER; t->type = TOKEN_TYPE_NUMBER;
enum lex_number_state state = LEX_NUMBER_STATE_WHOLE; enum lex_number_state state = LEX_NUMBER_STATE_WHOLE;
b32 number_done = false; b32 number_done = 0;
while (!number_done && pos < src.len) { while (!number_done && pos < src.len) {
switch (src.text[pos]) { switch (src.text[pos]) {
CASE_DIGIT_0_TO_9: { CASE_DIGIT_0_TO_9: {
@ -203,7 +203,7 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
state = LEX_NUMBER_STATE_FRACTION; state = LEX_NUMBER_STATE_FRACTION;
pos += consume; pos += consume;
} else { } else {
number_done = true; number_done = 1;
} }
} break; } break;
@ -240,12 +240,12 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
state = LEX_NUMBER_STATE_EXPONENT; state = LEX_NUMBER_STATE_EXPONENT;
pos += consume; pos += consume;
} else { } else {
number_done = true; number_done = 1;
} }
} break; } break;
default: { default: {
number_done = true; number_done = 1;
} break; } break;
} }
} }
@ -255,29 +255,29 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
case '"': { case '"': {
++pos; ++pos;
b32 string_done = false; b32 string_done = 0;
b32 next_escaped = false; b32 next_escaped = 0;
while (!string_done && pos < src.len) { while (!string_done && pos < src.len) {
b32 escaped = next_escaped; b32 escaped = next_escaped;
next_escaped = false; next_escaped = 0;
switch (src.text[pos]) { switch (src.text[pos]) {
CASE_NEWLINE: { CASE_NEWLINE: {
++pos; ++pos;
string_done = true; string_done = 1;
} break; } break;
case '"': { case '"': {
++pos; ++pos;
if (!escaped) { if (!escaped) {
t->type = TOKEN_TYPE_STRING; t->type = TOKEN_TYPE_STRING;
string_done = true; string_done = 1;
} }
} break; } break;
case '\\': { case '\\': {
++pos; ++pos;
if (!escaped) { if (!escaped) {
next_escaped = true; next_escaped = 1;
} }
} break; } break;
@ -294,7 +294,7 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
case 'n': { case 'n': {
struct string keyword = g_keyword_strings[src.text[pos]]; struct string keyword = g_keyword_strings[src.text[pos]];
b32 match = true; b32 match = 1;
if ((pos + keyword.len - 1) < src.len) { if ((pos + keyword.len - 1) < src.len) {
if ((pos + keyword.len) < src.len) { if ((pos + keyword.len) < src.len) {
/* Don't match if word continues past keyword */ /* Don't match if word continues past keyword */
@ -305,7 +305,7 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
} break; } break;
default: { default: {
match = false; match = 0;
} break; } break;
} }
} }
@ -330,13 +330,13 @@ INTERNAL struct token_list lex(struct arena *arena, struct string src)
/* Lex unknown token */ /* Lex unknown token */
if (t->type == TOKEN_TYPE_UNKNOWN) { if (t->type == TOKEN_TYPE_UNKNOWN) {
b32 unknown_done = false; b32 unknown_done = 0;
while (!unknown_done && pos < src.len) { while (!unknown_done && pos < src.len) {
switch (src.text[pos]) { switch (src.text[pos]) {
CASE_SYMBOL: CASE_SYMBOL:
CASE_SPACE: CASE_SPACE:
CASE_NEWLINE: { CASE_NEWLINE: {
unknown_done = true; unknown_done = 1;
} break; } break;
default: { default: {
@ -368,16 +368,16 @@ INTERNAL void append_char(struct arena *arena, struct string *str, u8 c)
INTERNAL f64 interpret_number(struct string src) INTERNAL f64 interpret_number(struct string src)
{ {
b32 whole_present = false; b32 whole_present = 0;
u64 whole_left = 0; u64 whole_left = 0;
u64 whole_right = 0; u64 whole_right = 0;
i32 whole_sign = 1; i32 whole_sign = 1;
b32 fraction_present = false; b32 fraction_present = 0;
u64 fraction_left = 0; u64 fraction_left = 0;
u64 fraction_right = 0; u64 fraction_right = 0;
b32 exponent_present = false; b32 exponent_present = 0;
u64 exponent_left = 0; u64 exponent_left = 0;
u64 exponent_right = 0; u64 exponent_right = 0;
i32 exponent_sign = 1; i32 exponent_sign = 1;
@ -397,7 +397,7 @@ INTERNAL f64 interpret_number(struct string src)
switch (state) { switch (state) {
case LEX_NUMBER_STATE_WHOLE: { case LEX_NUMBER_STATE_WHOLE: {
if (!whole_present) { if (!whole_present) {
whole_present = true; whole_present = 1;
whole_left = pos; whole_left = pos;
} }
whole_right = pos; whole_right = pos;
@ -406,7 +406,7 @@ INTERNAL f64 interpret_number(struct string src)
case LEX_NUMBER_STATE_FRACTION: { case LEX_NUMBER_STATE_FRACTION: {
if (!fraction_present) { if (!fraction_present) {
fraction_present = true; fraction_present = 1;
fraction_left = pos; fraction_left = pos;
} }
fraction_right = pos; fraction_right = pos;
@ -415,7 +415,7 @@ INTERNAL f64 interpret_number(struct string src)
case LEX_NUMBER_STATE_EXPONENT: { case LEX_NUMBER_STATE_EXPONENT: {
if (!exponent_present) { if (!exponent_present) {
exponent_present = true; exponent_present = 1;
exponent_left = pos; exponent_left = pos;
} }
exponent_right = pos; exponent_right = pos;
@ -449,7 +449,7 @@ INTERNAL f64 interpret_number(struct string src)
default: { default: {
/* Unreachable */ /* Unreachable */
ASSERT(false); ASSERT(0);
++pos; ++pos;
} break; } break;
} }
@ -464,7 +464,7 @@ INTERNAL f64 interpret_number(struct string src)
default: { default: {
/* Unreachable */ /* Unreachable */
ASSERT(false); ASSERT(0);
++pos; ++pos;
} break; } break;
} }
@ -472,7 +472,7 @@ INTERNAL f64 interpret_number(struct string src)
default: { default: {
/* Unreachable */ /* Unreachable */
ASSERT(false); ASSERT(0);
++pos; ++pos;
} break; } break;
} }
@ -544,12 +544,12 @@ INTERNAL struct string interpret_string(struct arena *arena, struct string src,
/* Ignore beginning quote */ /* Ignore beginning quote */
u64 pos = 1; u64 pos = 1;
b32 valid_close = false; b32 valid_close = 0;
b32 string_done = false; b32 string_done = 0;
b32 next_escaped = false; b32 next_escaped = 0;
while (!string_done && pos < src.len) { while (!string_done && pos < src.len) {
b32 escaped = next_escaped; b32 escaped = next_escaped;
next_escaped = false; next_escaped = 0;
if (escaped) { if (escaped) {
switch (src.text[pos]) { switch (src.text[pos]) {
@ -607,13 +607,13 @@ INTERNAL struct string interpret_string(struct arena *arena, struct string src,
} else { } else {
switch (src.text[pos]) { switch (src.text[pos]) {
case '\\': { case '\\': {
escaped = true; escaped = 1;
++pos; ++pos;
} break; } break;
case '"': { case '"': {
string_done = true; string_done = 1;
valid_close = true; valid_close = 1;
++pos; ++pos;
} break; } break;
@ -682,12 +682,12 @@ INTERNAL void parse(struct arena *arena, struct parser *p)
u64 stack_count = 1; u64 stack_count = 1;
while (stack_count > 0) { while (stack_count > 0) {
struct json *json = NULL; struct json *json = 0;
arena_pop(scratch.arena, struct json *, &json); arena_pop(scratch.arena, struct json *, &json);
--stack_count; --stack_count;
struct json *parent_json = json->parent; struct json *parent_json = json->parent;
b32 is_new_parent = false; b32 is_new_parent = 0;
if (json->type == JSON_TYPE_OBJECT || json->type == JSON_TYPE_ARRAY) { if (json->type == JSON_TYPE_OBJECT || json->type == JSON_TYPE_ARRAY) {
/* No more children to parse for object/array, check for closing brace. */ /* No more children to parse for object/array, check for closing brace. */
enum token_type tok_close_type = json->type == JSON_TYPE_OBJECT ? TOKEN_TYPE_CURLY_BRACE_CLOSE : TOKEN_TYPE_SQUARE_BRACE_CLOSE; enum token_type tok_close_type = json->type == JSON_TYPE_OBJECT ? TOKEN_TYPE_CURLY_BRACE_CLOSE : TOKEN_TYPE_SQUARE_BRACE_CLOSE;
@ -761,13 +761,13 @@ INTERNAL void parse(struct arena *arena, struct parser *p)
case TOKEN_TYPE_KEYWORD_TRUE: { case TOKEN_TYPE_KEYWORD_TRUE: {
json->type = JSON_TYPE_BOOL; json->type = JSON_TYPE_BOOL;
json->value.boolean = true; json->value.boolean = 1;
at = at->next; at = at->next;
} break; } break;
case TOKEN_TYPE_KEYWORD_FALSE: { case TOKEN_TYPE_KEYWORD_FALSE: {
json->type = JSON_TYPE_BOOL; json->type = JSON_TYPE_BOOL;
json->value.boolean = false; json->value.boolean = 0;
at = at->next; at = at->next;
} break; } break;
@ -779,13 +779,13 @@ INTERNAL void parse(struct arena *arena, struct parser *p)
case TOKEN_TYPE_CURLY_BRACE_OPEN: { case TOKEN_TYPE_CURLY_BRACE_OPEN: {
json->type = JSON_TYPE_OBJECT; json->type = JSON_TYPE_OBJECT;
at = at->next; at = at->next;
is_new_parent = true; is_new_parent = 1;
} break; } break;
case TOKEN_TYPE_SQUARE_BRACE_OPEN: { case TOKEN_TYPE_SQUARE_BRACE_OPEN: {
json->type = JSON_TYPE_ARRAY; json->type = JSON_TYPE_ARRAY;
at = at->next; at = at->next;
is_new_parent = true; is_new_parent = 1;
} break; } break;
default: { default: {

View File

@ -71,7 +71,7 @@ void log_startup(struct string logfile_path)
/* Keep log file open for appending */ /* Keep log file open for appending */
if (sys_is_file(logfile_path)) { if (sys_is_file(logfile_path)) {
G.file = sys_file_open_append(logfile_path); G.file = sys_file_open_append(logfile_path);
G.file_valid = true; G.file_valid = 1;
} }
} }
atomic_i32_fetch_set(&G.initialized, 1); atomic_i32_fetch_set(&G.initialized, 1);

View File

@ -46,7 +46,7 @@ struct log_event {
struct sys_datetime datetime; struct sys_datetime datetime;
i64 time_ns; i64 time_ns;
/* These will be nulled if LOG_INCLUDE_SOURCE_LOCATION is disabled */ /* These will be zeroed if LOG_INCLUDE_SOURCE_LOCATION is disabled */
struct string file; struct string file;
i32 line; i32 line;
}; };

View File

@ -97,7 +97,7 @@ INTERNAL struct track *track_from_handle(struct mixer_track_handle handle)
if (track && track->gen == handle.gen) { if (track && track->gen == handle.gen) {
return track; return track;
} else { } else {
return NULL; return 0;
} }
} }
@ -106,14 +106,14 @@ INTERNAL struct track *track_alloc_locked(struct snc_lock *lock, struct sound *s
snc_assert_locked_e(lock, &G.mutex); snc_assert_locked_e(lock, &G.mutex);
(UNUSED)lock; (UNUSED)lock;
struct track *track = NULL; struct track *track = 0;
if (G.track_first_free) { if (G.track_first_free) {
/* Take from free list */ /* Take from free list */
track = G.track_first_free; track = G.track_first_free;
struct track *next_free = track->next; struct track *next_free = track->next;
G.track_first_free = next_free; G.track_first_free = next_free;
if (next_free) { if (next_free) {
next_free->prev = NULL; next_free->prev = 0;
} }
*track = (struct track) { .gen = track->gen + 1 }; *track = (struct track) { .gen = track->gen + 1 };
} else { } else {
@ -164,7 +164,7 @@ INTERNAL void track_release_locked(struct snc_lock *lock, struct track *track)
++track->gen; ++track->gen;
/* Add to free list */ /* Add to free list */
track->prev = NULL; track->prev = 0;
track->next = G.track_first_free; track->next = G.track_first_free;
if (G.track_first_free) { if (G.track_first_free) {
G.track_first_free->prev = track; G.track_first_free->prev = track;
@ -278,7 +278,7 @@ struct mixed_pcm_f32 mixer_update(struct arena *arena, u64 frame_count)
struct v2 listener_dir = V2(0, 0); struct v2 listener_dir = V2(0, 0);
/* Create temp array of mixes */ /* Create temp array of mixes */
struct mix **mixes = NULL; struct mix **mixes = 0;
u64 mixes_count = 0; u64 mixes_count = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.mutex); struct snc_lock lock = snc_lock_e(&G.mutex);
@ -334,7 +334,7 @@ struct mixed_pcm_f32 mixer_update(struct arena *arena, u64 frame_count)
source_sample_pos_end = source_sample_pos_end % source->pcm.count; source_sample_pos_end = source_sample_pos_end % source->pcm.count;
} else { } else {
source_sample_pos_end = source->pcm.count; source_sample_pos_end = source->pcm.count;
mix->track_finished = true; mix->track_finished = 1;
} }
} }
u64 source_frames_count = source_is_stereo ? source_samples_count / 2 : source_samples_count; u64 source_frames_count = source_is_stereo ? source_samples_count / 2 : source_samples_count;

View File

@ -11,7 +11,7 @@ struct sound;
\ \
.volume = 1.0, \ .volume = 1.0, \
.speed = 1.0, \ .speed = 1.0, \
.looping = false, \ .looping = 0, \
\ \
.pos = V2(0, 0), \ .pos = V2(0, 0), \
\ \

View File

@ -51,20 +51,20 @@ struct mp3_decode_result mp3_decode(struct arena *arena, struct string encoded,
IStream *i_stream = SHCreateMemStream(encoded.text, encoded.len); IStream *i_stream = SHCreateMemStream(encoded.text, encoded.len);
/* Create IMFByteStream from IStream */ /* Create IMFByteStream from IStream */
IMFByteStream *byte_stream = NULL; IMFByteStream *byte_stream = 0;
MFCreateMFByteStreamOnStream(i_stream, &byte_stream); MFCreateMFByteStreamOnStream(i_stream, &byte_stream);
/* Create reader from IMFByteStream */ /* Create reader from IMFByteStream */
IMFSourceReader *reader; IMFSourceReader *reader;
MFCreateSourceReaderFromByteStream(byte_stream, NULL, &reader); MFCreateSourceReaderFromByteStream(byte_stream, 0, &reader);
/* ========================== * /* ========================== *
* Get media type * Get media type
* ========================== */ * ========================== */
/* Read only first audio stream */ /* Read only first audio stream */
IMFSourceReader_SetStreamSelection(reader, (DWORD)MF_SOURCE_READER_ALL_STREAMS, FALSE); IMFSourceReader_SetStreamSelection(reader, (DWORD)MF_SOURCE_READER_ALL_STREAMS, 0);
IMFSourceReader_SetStreamSelection(reader, (DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, TRUE); IMFSourceReader_SetStreamSelection(reader, (DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, 1);
WAVEFORMATEXTENSIBLE format = { WAVEFORMATEXTENSIBLE format = {
.Format = { .Format = {
@ -85,7 +85,7 @@ struct mp3_decode_result mp3_decode(struct arena *arena, struct string encoded,
IMFMediaType *type; IMFMediaType *type;
MFCreateMediaType(&type); MFCreateMediaType(&type);
MFInitMediaTypeFromWaveFormatEx(type, &format.Format, sizeof(format)); MFInitMediaTypeFromWaveFormatEx(type, &format.Format, sizeof(format));
IMFSourceReader_SetCurrentMediaType(reader, (DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, NULL, type); IMFSourceReader_SetCurrentMediaType(reader, (DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, 0, type);
IMFMediaType_Release(type); IMFMediaType_Release(type);
/* ========================== * /* ========================== *
@ -94,17 +94,17 @@ struct mp3_decode_result mp3_decode(struct arena *arena, struct string encoded,
res.pcm.samples = arena_push_dry(arena, i16); res.pcm.samples = arena_push_dry(arena, i16);
u64 sample_bytes_read = 0; u64 sample_bytes_read = 0;
while (true) { while (1) {
IMFSample *sample; IMFSample *sample;
DWORD sample_flags = 0; DWORD sample_flags = 0;
HRESULT hr = IMFSourceReader_ReadSample(reader, (DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, 0, NULL, &sample_flags, NULL, &sample); HRESULT hr = IMFSourceReader_ReadSample(reader, (DWORD)MF_SOURCE_READER_FIRST_AUDIO_STREAM, 0, 0, &sample_flags, 0, &sample);
if (FAILED(hr)) { if (FAILED(hr)) {
break; break;
} }
/* Check if done */ /* Check if done */
if (sample_flags & MF_SOURCE_READERF_ENDOFSTREAM) { if (sample_flags & MF_SOURCE_READERF_ENDOFSTREAM) {
res.success = true; res.success = 1;
break; break;
} }
ASSERT(sample_flags == 0); ASSERT(sample_flags == 0);
@ -115,7 +115,7 @@ struct mp3_decode_result mp3_decode(struct arena *arena, struct string encoded,
BYTE *src; BYTE *src;
DWORD size_bytes; DWORD size_bytes;
IMFMediaBuffer_Lock(buffer, &src, NULL, &size_bytes); IMFMediaBuffer_Lock(buffer, &src, 0, &size_bytes);
{ {
i16 *dst = arena_push_array_no_zero(arena, i16, (size_bytes + 1) >> 1); i16 *dst = arena_push_array_no_zero(arena, i16, (size_bytes + 1) >> 1);
MEMCPY(dst, src, size_bytes); MEMCPY(dst, src, size_bytes);

View File

@ -15,7 +15,7 @@
INTERNAL b32 can_contact(struct sim_ent *e0, struct sim_ent *e1) INTERNAL b32 can_contact(struct sim_ent *e0, struct sim_ent *e1)
{ {
b32 res = false; b32 res = 0;
res = e0 != e1 && res = e0 != e1 &&
!sim_ent_id_eq(e0->top, e1->top) && !sim_ent_id_eq(e0->top, e1->top) &&
!(sim_ent_has_prop(e0, SEPROP_WALL) && sim_ent_has_prop(e1, SEPROP_WALL)); !(sim_ent_has_prop(e0, SEPROP_WALL) && sim_ent_has_prop(e1, SEPROP_WALL));
@ -46,7 +46,7 @@ void phys_create_and_update_contacts(struct phys_step_ctx *ctx, f32 elapsed_dt,
struct space_iter iter = space_iter_begin_aabb(space, aabb); struct space_iter iter = space_iter_begin_aabb(space, aabb);
struct space_entry *space_entry; struct space_entry *space_entry;
while ((space_entry = space_iter_next(&iter)) != NULL) { while ((space_entry = space_iter_next(&iter)) != 0) {
struct sim_ent *check1 = sim_ent_from_id(ss, space_entry->ent); struct sim_ent *check1 = sim_ent_from_id(ss, space_entry->ent);
if (!sim_ent_is_valid_and_active(check1)) continue; if (!sim_ent_is_valid_and_active(check1)) continue;
if (!(sim_ent_has_prop(check1, SEPROP_SOLID) || sim_ent_has_prop(check1, SEPROP_SENSOR))) continue; if (!(sim_ent_has_prop(check1, SEPROP_SOLID) || sim_ent_has_prop(check1, SEPROP_SENSOR))) continue;
@ -95,11 +95,11 @@ void phys_create_and_update_contacts(struct phys_step_ctx *ctx, f32 elapsed_dt,
STATIC_ASSERT(countof(constraint_ent->contact_constraint_data.points) == 2); STATIC_ASSERT(countof(constraint_ent->contact_constraint_data.points) == 2);
STATIC_ASSERT(countof(collider_res.points) == 2); STATIC_ASSERT(countof(collider_res.points) == 2);
struct phys_contact_constraint *constraint = NULL; struct phys_contact_constraint *constraint = 0;
if (collider_res.num_points > 0) { if (collider_res.num_points > 0) {
b32 is_start = false; b32 is_start = 0;
if (!constraint_ent->valid) { if (!constraint_ent->valid) {
is_start = true; is_start = 1;
/* Create constraint */ /* Create constraint */
constraint_ent = sim_ent_alloc_local_with_id(root, constraint_id); constraint_ent = sim_ent_alloc_local_with_id(root, constraint_id);
constraint_ent->contact_constraint_data.e0 = e0->id; constraint_ent->contact_constraint_data.e0 = e0->id;
@ -121,10 +121,10 @@ void phys_create_and_update_contacts(struct phys_step_ctx *ctx, f32 elapsed_dt,
for (u32 i = 0; i < constraint->num_points; ++i) { for (u32 i = 0; i < constraint->num_points; ++i) {
struct phys_contact_point *old = &constraint->points[i]; struct phys_contact_point *old = &constraint->points[i];
u32 id = old->id; u32 id = old->id;
b32 found = false; b32 found = 0;
for (u32 j = 0; j < collider_res.num_points; ++j) { for (u32 j = 0; j < collider_res.num_points; ++j) {
if (collider_res.points[j].id == id) { if (collider_res.points[j].id == id) {
found = true; found = 1;
break; break;
} }
} }
@ -141,7 +141,7 @@ void phys_create_and_update_contacts(struct phys_step_ctx *ctx, f32 elapsed_dt,
struct v2 point = res_point->point; struct v2 point = res_point->point;
f32 sep = res_point->separation; f32 sep = res_point->separation;
u32 id = res_point->id; u32 id = res_point->id;
struct phys_contact_point *contact = NULL; struct phys_contact_point *contact = 0;
/* Match */ /* Match */
for (u32 j = 0; j < constraint->num_points; ++j) { for (u32 j = 0; j < constraint->num_points; ++j) {
struct phys_contact_point *t = &constraint->points[j]; struct phys_contact_point *t = &constraint->points[j];
@ -174,7 +174,7 @@ void phys_create_and_update_contacts(struct phys_step_ctx *ctx, f32 elapsed_dt,
struct v2 dir0 = e0->collision_dir; struct v2 dir0 = e0->collision_dir;
struct v2 dir1 = e1->collision_dir; struct v2 dir1 = e1->collision_dir;
f32 threshold = 0.5; f32 threshold = 0.5;
b32 is_wrong_dir = false; b32 is_wrong_dir = 0;
if (!v2_is_zero(dir0)) { if (!v2_is_zero(dir0)) {
is_wrong_dir = v2_dot(dir0, normal) <= threshold; is_wrong_dir = v2_dot(dir0, normal) <= threshold;
} }
@ -226,7 +226,7 @@ void phys_create_and_update_contacts(struct phys_step_ctx *ctx, f32 elapsed_dt,
b32 skip_solve0 = collision_callback(&data, sim_step_ctx); b32 skip_solve0 = collision_callback(&data, sim_step_ctx);
b32 skip_solve1 = collision_callback(&data_inverted, sim_step_ctx); b32 skip_solve1 = collision_callback(&data_inverted, sim_step_ctx);
if (skip_solve0 || skip_solve1) { if (skip_solve0 || skip_solve1) {
constraint->skip_solve = true; constraint->skip_solve = 1;
} }
} }
} else if (constraint_ent->valid) { } else if (constraint_ent->valid) {
@ -1184,14 +1184,14 @@ f32 phys_determine_earliest_toi(struct phys_step_ctx *ctx, f32 step_dt, f32 tole
struct xform e0_xf_t0 = sim_ent_get_xform(e0); struct xform e0_xf_t0 = sim_ent_get_xform(e0);
struct xform e0_xf_t1 = get_derived_xform(e0, step_dt); struct xform e0_xf_t1 = get_derived_xform(e0, step_dt);
/* TODO: Use swept aabb rather than combined aabb. This should prevent spikes from bullets returning false positive TOIs with irrelevant entities. */ /* TODO: Use swept aabb rather than combined aabb. This should prevent spikes from bullets returning 0 positive TOIs with irrelevant entities. */
struct aabb aabb_t0 = collider_aabb_from_collider(&e0_collider, e0_xf_t0); struct aabb aabb_t0 = collider_aabb_from_collider(&e0_collider, e0_xf_t0);
struct aabb aabb_t1 = collider_aabb_from_collider(&e0_collider, e0_xf_t1); struct aabb aabb_t1 = collider_aabb_from_collider(&e0_collider, e0_xf_t1);
struct aabb combined_aabb = collider_aabb_from_combined_aabb(aabb_t0, aabb_t1); struct aabb combined_aabb = collider_aabb_from_combined_aabb(aabb_t0, aabb_t1);
struct space_iter iter = space_iter_begin_aabb(space, combined_aabb); struct space_iter iter = space_iter_begin_aabb(space, combined_aabb);
struct space_entry *entry; struct space_entry *entry;
while ((entry = space_iter_next(&iter)) != NULL) { while ((entry = space_iter_next(&iter)) != 0) {
struct sim_ent *e1 = sim_ent_from_id(ss, entry->ent); struct sim_ent *e1 = sim_ent_from_id(ss, entry->ent);
if (!sim_ent_should_simulate(e1)) continue; if (!sim_ent_should_simulate(e1)) continue;
if (!(sim_ent_has_prop(e1, SEPROP_SOLID) || sim_ent_has_prop(e1, SEPROP_SENSOR))) continue; if (!(sim_ent_has_prop(e1, SEPROP_SOLID) || sim_ent_has_prop(e1, SEPROP_SENSOR))) continue;
@ -1294,7 +1294,7 @@ void phys_step(struct phys_step_ctx *ctx, f32 timestep)
/* Solve */ /* Solve */
#if SIM_PHYSICS_ENABLE_COLLISION #if SIM_PHYSICS_ENABLE_COLLISION
phys_solve_contacts(ctx, substep_dt, true); phys_solve_contacts(ctx, substep_dt, 1);
#endif #endif
phys_solve_motor_joints(ctx, substep_dt); phys_solve_motor_joints(ctx, substep_dt);
phys_solve_mouse_joints(ctx, substep_dt); phys_solve_mouse_joints(ctx, substep_dt);
@ -1305,7 +1305,7 @@ void phys_step(struct phys_step_ctx *ctx, f32 timestep)
/* Relaxation solve */ /* Relaxation solve */
#if SIM_PHYSICS_ENABLE_COLLISION && SIM_PHYSICS_ENABLE_RELAXATION #if SIM_PHYSICS_ENABLE_COLLISION && SIM_PHYSICS_ENABLE_RELAXATION
phys_solve_contacts(ctx, substep_dt, false); phys_solve_contacts(ctx, substep_dt, 0);
#endif #endif
} }

View File

@ -19,7 +19,7 @@ struct phys_collision_data {
f32 dt; /* How much time elapsed in the step when this event occurred (this will equal the physics timestep unless an early time of impact occurred) */ f32 dt; /* How much time elapsed in the step when this event occurred (this will equal the physics timestep unless an early time of impact occurred) */
}; };
/* Callback can return true to prevent the physics system from resolving */ /* Callback can return 1 to prevent the physics system from resolving */
#define PHYS_COLLISION_CALLBACK_FUNC_DEF(name, arg_collision_data, arg_sim_step_ctx) b32 name(struct phys_collision_data *arg_collision_data, struct sim_step_ctx *arg_sim_step_ctx) #define PHYS_COLLISION_CALLBACK_FUNC_DEF(name, arg_collision_data, arg_sim_step_ctx) b32 name(struct phys_collision_data *arg_collision_data, struct sim_step_ctx *arg_sim_step_ctx)
typedef PHYS_COLLISION_CALLBACK_FUNC_DEF(phys_collision_callback_func, collision_data, ctx); typedef PHYS_COLLISION_CALLBACK_FUNC_DEF(phys_collision_callback_func, collision_data, ctx);

View File

@ -60,7 +60,7 @@ struct playback_startup_receipt playback_startup(struct mixer_startup_receipt *m
(UNUSED)mixer_sr; (UNUSED)mixer_sr;
wasapi_initialize(); wasapi_initialize();
G.playback_scheduler_thread = sys_thread_alloc(playback_scheduler_entry, NULL, LIT("Playback scheduler thread"), PROF_THREAD_GROUP_SCHEDULER); G.playback_scheduler_thread = sys_thread_alloc(playback_scheduler_entry, 0, LIT("Playback scheduler thread"), PROF_THREAD_GROUP_SCHEDULER);
app_register_exit_callback(&playback_shutdown); app_register_exit_callback(&playback_shutdown);
return (struct playback_startup_receipt) { 0 }; return (struct playback_startup_receipt) { 0 };
@ -69,7 +69,7 @@ struct playback_startup_receipt playback_startup(struct mixer_startup_receipt *m
INTERNAL APP_EXIT_CALLBACK_FUNC_DEF(playback_shutdown) INTERNAL APP_EXIT_CALLBACK_FUNC_DEF(playback_shutdown)
{ {
__prof; __prof;
atomic_i32_fetch_set(&G.shutdown, true); atomic_i32_fetch_set(&G.shutdown, 1);
sys_thread_wait_release(G.playback_scheduler_thread); sys_thread_wait_release(G.playback_scheduler_thread);
} }
@ -85,7 +85,7 @@ INTERNAL void wasapi_initialize(void)
/* Create enumerator to get audio device */ /* Create enumerator to get audio device */
IMMDeviceEnumerator *enumerator; IMMDeviceEnumerator *enumerator;
CoCreateInstance(&CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, &IID_IMMDeviceEnumerator, (LPVOID *)&enumerator); CoCreateInstance(&CLSID_MMDeviceEnumerator, 0, CLSCTX_ALL, &IID_IMMDeviceEnumerator, (LPVOID *)&enumerator);
/* Get default playback device */ /* Get default playback device */
IMMDevice *device; IMMDevice *device;
@ -93,7 +93,7 @@ INTERNAL void wasapi_initialize(void)
IMMDeviceEnumerator_Release(enumerator); IMMDeviceEnumerator_Release(enumerator);
/* Create audio client for device */ /* Create audio client for device */
IMMDevice_Activate(device, &IID_IAudioClient, CLSCTX_ALL, NULL, (LPVOID *)&G.client); IMMDevice_Activate(device, &IID_IAudioClient, CLSCTX_ALL, 0, (LPVOID *)&G.client);
IMMDevice_Release(device); IMMDevice_Release(device);
WAVEFORMATEXTENSIBLE format_ex = { WAVEFORMATEXTENSIBLE format_ex = {
@ -113,7 +113,7 @@ INTERNAL void wasapi_initialize(void)
WAVEFORMATEX *wfx = &format_ex.Format; WAVEFORMATEX *wfx = &format_ex.Format;
#if 0 #if 0
b32 client_initialized = FALSE; b32 client_initialized = 0;
IAudioClient3 *client3; IAudioClient3 *client3;
if (SUCCEEDED(IAudioClient_QueryInterface(G.client, &IID_IAudioClient3, (LPVOID *)&client3))) { if (SUCCEEDED(IAudioClient_QueryInterface(G.client, &IID_IAudioClient3, (LPVOID *)&client3))) {
/* From Martins: Minimum buffer size will typically be 480 samples (10msec @ 48khz) /* From Martins: Minimum buffer size will typically be 480 samples (10msec @ 48khz)
@ -124,20 +124,20 @@ INTERNAL void wasapi_initialize(void)
IAudioClient3_GetSharedModeEnginePeriod(client3, wfx, &default_period_samples, &fundamental_period_samples, &min_period_samples, &max_period_samples); IAudioClient3_GetSharedModeEnginePeriod(client3, wfx, &default_period_samples, &fundamental_period_samples, &min_period_samples, &max_period_samples);
const DWORD flags = AUDCLNT_STREAMFLAGS_EVENTCALLBACK; const DWORD flags = AUDCLNT_STREAMFLAGS_EVENTCALLBACK;
if (SUCCEEDED(IAudioClient3_InitializeSharedAudioStream(client3, flags, min_period_samples, wfx, NULL))) { if (SUCCEEDED(IAudioClient3_InitializeSharedAudioStream(client3, flags, min_period_samples, wfx, 0))) {
client_initialized = TRUE; client_initialized = 1;
} }
IAudioClient3_Release(client3); IAudioClient3_Release(client3);
} }
#else #else
b32 client_initialized = false; b32 client_initialized = 0;
#endif #endif
if (!client_initialized) { if (!client_initialized) {
/* Get duration for shared-mode streams, this will typically be 480 samples (10msec @ 48khz) */ /* Get duration for shared-mode streams, this will typically be 480 samples (10msec @ 48khz) */
REFERENCE_TIME duration; REFERENCE_TIME duration;
IAudioClient_GetDevicePeriod(G.client, &duration, NULL); IAudioClient_GetDevicePeriod(G.client, &duration, 0);
/* Initialize audio playback /* Initialize audio playback
* *
@ -147,13 +147,13 @@ INTERNAL void wasapi_initialize(void)
* but allows for any input format. * but allows for any input format.
*/ */
const DWORD flags = AUDCLNT_STREAMFLAGS_EVENTCALLBACK | AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM | AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY; const DWORD flags = AUDCLNT_STREAMFLAGS_EVENTCALLBACK | AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM | AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY;
IAudioClient_Initialize(G.client, AUDCLNT_SHAREMODE_SHARED, flags, duration, 0, wfx, NULL); IAudioClient_Initialize(G.client, AUDCLNT_SHAREMODE_SHARED, flags, duration, 0, wfx, 0);
} }
IAudioClient_GetMixFormat(G.client, &G.buffer_format); IAudioClient_GetMixFormat(G.client, &G.buffer_format);
/* Set up event handler to wait on */ /* Set up event handler to wait on */
G.event = CreateEventW(NULL, FALSE, FALSE, NULL); G.event = CreateEventW(0, 0, 0, 0);
IAudioClient_SetEventHandle(G.client, G.event); IAudioClient_SetEventHandle(G.client, G.event);
/* Get playback client */ /* Get playback client */
@ -207,7 +207,7 @@ INTERNAL void wasapi_update_end(struct wasapi_buffer *wspbuf, struct mixed_pcm_f
/* This shouldn't occur, mixer should be generating samples equivilent /* This shouldn't occur, mixer should be generating samples equivilent
* to value returned from `playback_update_begin`. */ * to value returned from `playback_update_begin`. */
ASSERT(false); ASSERT(0);
} }
#if !AUDIO_ENABLED #if !AUDIO_ENABLED
@ -256,7 +256,7 @@ INTERNAL SYS_THREAD_DEF(playback_scheduler_entry, _)
{ {
__profn("Run mix job & wait"); __profn("Run mix job & wait");
struct snc_counter counter = ZI; struct snc_counter counter = ZI;
sys_run(1, playback_mix_job, NULL, SYS_PRIORITY_CRITICAL, &counter); sys_run(1, playback_mix_job, 0, SYS_PRIORITY_CRITICAL, &counter);
snc_counter_wait(&counter); snc_counter_wait(&counter);
} }
} }

View File

@ -32,9 +32,9 @@
#include TRACY_CLIENT_HEADER_PATH #include TRACY_CLIENT_HEADER_PATH
INLINE void __prof_zone_cleanup_func(TracyCZoneCtx *ctx) { TracyCZoneEnd(*ctx) } INLINE void __prof_zone_cleanup_func(TracyCZoneCtx *ctx) { TracyCZoneEnd(*ctx) }
#define __profnc(name, color) static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { (name), __func__, __FILE__, (uint32_t)__LINE__, BGR32(color) }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_zone_ctx = ___tracy_emit_zone_begin( &CAT(__tracy_source_location,__LINE__), true ) #define __profnc(name, color) static const struct ___tracy_source_location_data CAT(__tracy_source_location,__LINE__) = { (name), __func__, __FILE__, (uint32_t)__LINE__, BGR32(color) }; __attribute((cleanup(__prof_zone_cleanup_func))) TracyCZoneCtx __tracy_zone_ctx = ___tracy_emit_zone_begin( &CAT(__tracy_source_location,__LINE__), 1 )
#define __profn(name) __profnc(name, 0) #define __profn(name) __profnc(name, 0)
#define __prof __profnc(NULL, 0) #define __prof __profnc(0, 0)
#define __profvalue(v) TracyCZoneValue(__tracy_zone_ctx, (v)) #define __profvalue(v) TracyCZoneValue(__tracy_zone_ctx, (v))
#define __profalloc(ptr, size) TracyCAlloc((ptr), (size)) #define __profalloc(ptr, size) TracyCAlloc((ptr), (size))
@ -109,14 +109,14 @@ enum __prof_plot_type {
#if PROFILING_D3D #if PROFILING_D3D
/* Dx11 */ /* Dx11 */
INLINE void __prof_dx11_zone_cleanup_func(TracyCD3D11ZoneCtx *ctx) { ___tracy_d3d11_emit_zone_end(*ctx); } INLINE void __prof_dx11_zone_cleanup_func(TracyCD3D11ZoneCtx *ctx) { ___tracy_d3d11_emit_zone_end(*ctx); }
# define __profnc_dx11(dx11_ctx, name, color) static const struct ___tracy_source_location_data CAT(__tracy_gpu_d3d11_source_location,__LINE__) = { name, __func__, __FILE__, (uint32_t)__LINE__, BGR32(color) }; __attribute((cleanup(__prof_dx11_zone_cleanup_func))) TracyCD3D11ZoneCtx __tracy_d3d11_zone_ctx; ___tracy_d3d11_emit_zone_begin( dx11_ctx, &__tracy_d3d11_zone_ctx, &CAT(__tracy_gpu_d3d11_source_location,__LINE__), true) # define __profnc_dx11(dx11_ctx, name, color) static const struct ___tracy_source_location_data CAT(__tracy_gpu_d3d11_source_location,__LINE__) = { name, __func__, __FILE__, (uint32_t)__LINE__, BGR32(color) }; __attribute((cleanup(__prof_dx11_zone_cleanup_func))) TracyCD3D11ZoneCtx __tracy_d3d11_zone_ctx; ___tracy_d3d11_emit_zone_begin( dx11_ctx, &__tracy_d3d11_zone_ctx, &CAT(__tracy_gpu_d3d11_source_location,__LINE__), 1)
# define __prof_dx11_ctx(name) struct TracyCD3D11Ctx *name # define __prof_dx11_ctx(name) struct TracyCD3D11Ctx *name
# define __prof_dx11_ctx_alloc(ctx, device, device_ctx, name, name_len) ctx = ___tracy_d3d11_context_announce(device, device_ctx, name, name_len) # define __prof_dx11_ctx_alloc(ctx, device, device_ctx, name, name_len) ctx = ___tracy_d3d11_context_announce(device, device_ctx, name, name_len)
# define __prof_dx11_ctx_release(ctx) ___tracy_d3d11_context_terminate(ctx) # define __prof_dx11_ctx_release(ctx) ___tracy_d3d11_context_terminate(ctx)
# define __prof_dx11_collect(ctx) ___tracy_d3d11_context_collect(ctx) # define __prof_dx11_collect(ctx) ___tracy_d3d11_context_collect(ctx)
/* Dx12 */ /* Dx12 */
INLINE void __prof_dx12_zone_cleanup_func(TracyCD3D12ZoneCtx *ctx) { ___tracy_d3d12_emit_zone_end(*ctx); } INLINE void __prof_dx12_zone_cleanup_func(TracyCD3D12ZoneCtx *ctx) { ___tracy_d3d12_emit_zone_end(*ctx); }
# define __profnc_dx12(dx12_ctx, cmd_list, name, color) static const struct ___tracy_source_location_data CAT(__tracy_gpu_d3d12_source_location,__LINE__) = { name, __func__, __FILE__, (uint32_t)__LINE__, BGR32(color) }; __attribute((cleanup(__prof_dx12_zone_cleanup_func))) TracyCD3D12ZoneCtx __tracy_d3d12_zone_ctx; ___tracy_d3d12_emit_zone_begin( dx12_ctx, cmd_list, &__tracy_d3d12_zone_ctx, &CAT(__tracy_gpu_d3d12_source_location,__LINE__), true) # define __profnc_dx12(dx12_ctx, cmd_list, name, color) static const struct ___tracy_source_location_data CAT(__tracy_gpu_d3d12_source_location,__LINE__) = { name, __func__, __FILE__, (uint32_t)__LINE__, BGR32(color) }; __attribute((cleanup(__prof_dx12_zone_cleanup_func))) TracyCD3D12ZoneCtx __tracy_d3d12_zone_ctx; ___tracy_d3d12_emit_zone_begin( dx12_ctx, cmd_list, &__tracy_d3d12_zone_ctx, &CAT(__tracy_gpu_d3d12_source_location,__LINE__), 1)
# define __prof_dx12_ctx(name) struct TracyCD3D12Ctx *name # define __prof_dx12_ctx(name) struct TracyCD3D12Ctx *name
# define __prof_dx12_ctx_alloc(ctx, device, queue, name, name_len) ctx = ___tracy_d3d12_context_announce(device, queue, name, name_len) # define __prof_dx12_ctx_alloc(ctx, device, queue, name, name_len) ctx = ___tracy_d3d12_context_announce(device, queue, name, name_len)
# define __prof_dx12_ctx_release(ctx) ___tracy_d3d12_context_terminate(ctx) # define __prof_dx12_ctx_release(ctx) ___tracy_d3d12_context_terminate(ctx)

View File

@ -73,8 +73,8 @@ struct resource_startup_receipt resource_startup(void)
G.watch_dispatcher_info_arena = arena_alloc(GIBI(64)); G.watch_dispatcher_info_arena = arena_alloc(GIBI(64));
app_register_exit_callback(&resource_shutdown); app_register_exit_callback(&resource_shutdown);
G.resource_watch_monitor_thread = sys_thread_alloc(resource_watch_monitor_thread_entry_point, NULL, LIT("Resource watch monitor"), PROF_THREAD_GROUP_IO); G.resource_watch_monitor_thread = sys_thread_alloc(resource_watch_monitor_thread_entry_point, 0, LIT("Resource watch monitor"), PROF_THREAD_GROUP_IO);
G.resource_watch_dispatch_thread = sys_thread_alloc(resource_watch_dispatcher_thread_entry_point, NULL, LIT("Resource watch dispatcher"), PROF_THREAD_GROUP_IO); G.resource_watch_dispatch_thread = sys_thread_alloc(resource_watch_dispatcher_thread_entry_point, 0, LIT("Resource watch dispatcher"), PROF_THREAD_GROUP_IO);
#endif #endif
@ -94,7 +94,7 @@ struct resource resource_open(struct string name)
if (entry) { if (entry) {
res._data = entry->data; res._data = entry->data;
res._name = entry->file_name; res._name = entry->file_name;
res._exists = true; res._exists = 1;
} }
return res; return res;
#else #else
@ -134,7 +134,7 @@ struct resource resource_open(struct string name)
res._name_len = name.len; res._name_len = name.len;
MEMCPY(res._name_text, name.text, name.len); MEMCPY(res._name_text, name.text, name.len);
} else { } else {
ASSERT(false); ASSERT(0);
} }
return res; return res;
#endif #endif
@ -247,7 +247,7 @@ INTERNAL SYS_THREAD_DEF(resource_watch_dispatcher_thread_entry_point, _)
{ {
__profn("Delay"); __profn("Delay");
snc_unlock(&watch_dispatcher_lock); snc_unlock(&watch_dispatcher_lock);
sys_wait(NULL, NULL, 0, NS_FROM_SECONDS(WATCH_DISPATCHER_DELAY_SECONDS)); sys_wait(0, 0, 0, NS_FROM_SECONDS(WATCH_DISPATCHER_DELAY_SECONDS));
watch_dispatcher_lock = snc_lock_e(&G.watch_dispatcher_mutex); watch_dispatcher_lock = snc_lock_e(&G.watch_dispatcher_mutex);
} }
if (!atomic_i32_fetch(&G.watch_shutdown)) { if (!atomic_i32_fetch(&G.watch_shutdown)) {
@ -260,7 +260,7 @@ INTERNAL SYS_THREAD_DEF(resource_watch_dispatcher_thread_entry_point, _)
/* Build callbacks array */ /* Build callbacks array */
u64 num_callbacks = 0; u64 num_callbacks = 0;
resource_watch_callback **callbacks = NULL; resource_watch_callback **callbacks = 0;
struct snc_lock callbacks_lock = snc_lock_s(&G.watch_callbacks_mutex); struct snc_lock callbacks_lock = snc_lock_s(&G.watch_callbacks_mutex);
{ {
num_callbacks = G.num_watch_callbacks; num_callbacks = G.num_watch_callbacks;
@ -278,10 +278,10 @@ INTERNAL SYS_THREAD_DEF(resource_watch_dispatcher_thread_entry_point, _)
for (struct sys_watch_info *info = watch_info_list.first; info; info = info->next) { for (struct sys_watch_info *info = watch_info_list.first; info; info = info->next) {
__profn("Dispatch"); __profn("Dispatch");
/* Do not run callbacks for the same file more than once */ /* Do not run callbacks for the same file more than once */
b32 skip = false; b32 skip = 0;
u64 hash = hash_fnv64(HASH_FNV64_BASIS, info->name); u64 hash = hash_fnv64(HASH_FNV64_BASIS, info->name);
if (dict_get(dedup_dict, hash) == 1) { if (dict_get(dedup_dict, hash) == 1) {
skip = true; skip = 1;
} else { } else {
dict_set(temp.arena, dedup_dict, hash, 1); dict_set(temp.arena, dedup_dict, hash, 1);
} }

View File

@ -71,12 +71,12 @@ struct sys_window_settings *settings_deserialize(struct arena *arena, struct str
goto abort; goto abort;
} }
b32 found_maximized = false; b32 found_maximized = 0;
b32 found_fullscreen = false; b32 found_fullscreen = 0;
b32 found_x = false; b32 found_x = 0;
b32 found_y = false; b32 found_y = 0;
b32 found_width = false; b32 found_width = 0;
b32 found_height = false; b32 found_height = 0;
for (struct json *child = window->child_first; child; child = child->next) { for (struct json *child = window->child_first; child; child = child->next) {
struct string key = child->key; struct string key = child->key;
@ -88,7 +88,7 @@ struct sys_window_settings *settings_deserialize(struct arena *arena, struct str
if (child->value.boolean) { if (child->value.boolean) {
settings->flags |= SYS_WINDOW_SETTINGS_FLAG_MAXIMIZED; settings->flags |= SYS_WINDOW_SETTINGS_FLAG_MAXIMIZED;
} }
found_maximized = true; found_maximized = 1;
} else if (string_eq(key, LIT("fullscreen"))) { } else if (string_eq(key, LIT("fullscreen"))) {
if (child->type != JSON_TYPE_BOOL) { if (child->type != JSON_TYPE_BOOL) {
error = LIT("Expected boolean for \"fulscreen\""); error = LIT("Expected boolean for \"fulscreen\"");
@ -97,35 +97,35 @@ struct sys_window_settings *settings_deserialize(struct arena *arena, struct str
if (child->value.boolean) { if (child->value.boolean) {
settings->flags |= SYS_WINDOW_SETTINGS_FLAG_FULLSCREEN; settings->flags |= SYS_WINDOW_SETTINGS_FLAG_FULLSCREEN;
} }
found_fullscreen = true; found_fullscreen = 1;
} else if (string_eq(key, LIT("x"))) { } else if (string_eq(key, LIT("x"))) {
if (child->type != JSON_TYPE_NUMBER) { if (child->type != JSON_TYPE_NUMBER) {
error = LIT("Expected number for \"x\""); error = LIT("Expected number for \"x\"");
goto abort; goto abort;
} }
settings->floating_x = math_round_to_int(child->value.number); settings->floating_x = math_round_to_int(child->value.number);
found_x = true; found_x = 1;
} else if (string_eq(key, LIT("y"))) { } else if (string_eq(key, LIT("y"))) {
if (child->type != JSON_TYPE_NUMBER) { if (child->type != JSON_TYPE_NUMBER) {
error = LIT("Expected number for \"y\""); error = LIT("Expected number for \"y\"");
goto abort; goto abort;
} }
settings->floating_y = math_round_to_int(child->value.number); settings->floating_y = math_round_to_int(child->value.number);
found_y = true; found_y = 1;
} else if (string_eq(key, LIT("width"))) { } else if (string_eq(key, LIT("width"))) {
if (child->type != JSON_TYPE_NUMBER) { if (child->type != JSON_TYPE_NUMBER) {
error = LIT("Expected number for \"width\""); error = LIT("Expected number for \"width\"");
goto abort; goto abort;
} }
settings->floating_width = math_round_to_int(child->value.number); settings->floating_width = math_round_to_int(child->value.number);
found_width = true; found_width = 1;
} else if (string_eq(key, LIT("height"))) { } else if (string_eq(key, LIT("height"))) {
if (child->type != JSON_TYPE_NUMBER) { if (child->type != JSON_TYPE_NUMBER) {
error = LIT("Expected number for \"height\""); error = LIT("Expected number for \"height\"");
goto abort; goto abort;
} }
settings->floating_height = math_round_to_int(child->value.number); settings->floating_height = math_round_to_int(child->value.number);
found_height = true; found_height = 1;
} }
} }

View File

@ -66,26 +66,26 @@ struct sim_startup_receipt sim_startup(void)
/* Nil client store */ /* Nil client store */
G.nil_client_store = arena_push(G.nil_arena, struct sim_client_store); G.nil_client_store = arena_push(G.nil_arena, struct sim_client_store);
G.nil_client_store->valid = false; G.nil_client_store->valid = 0;
/* Nil client */ /* Nil client */
G.nil_client = arena_push(G.nil_arena, struct sim_client); G.nil_client = arena_push(G.nil_arena, struct sim_client);
G.nil_client->valid = false; G.nil_client->valid = 0;
G.nil_client->store = sim_client_store_nil(); G.nil_client->store = sim_client_store_nil();
/* Nil snapshot */ /* Nil snapshot */
G.nil_snapshot = arena_push(G.nil_arena, struct sim_snapshot); G.nil_snapshot = arena_push(G.nil_arena, struct sim_snapshot);
G.nil_snapshot->valid = false; G.nil_snapshot->valid = 0;
G.nil_snapshot->client = sim_client_nil(); G.nil_snapshot->client = sim_client_nil();
/* Nil ent */ /* Nil ent */
G.nil_ent = arena_push(G.nil_arena, struct sim_ent); G.nil_ent = arena_push(G.nil_arena, struct sim_ent);
G.nil_ent->ss = sim_snapshot_nil(); G.nil_ent->ss = sim_snapshot_nil();
G.nil_ent->valid = false; G.nil_ent->valid = 0;
G.nil_ent->id = SIM_ENT_NIL_ID; G.nil_ent->id = SIM_ENT_NIL_ID;
G.nil_ent->_local_xform = XFORM_IDENT; G.nil_ent->_local_xform = XFORM_IDENT;
G.nil_ent->_xform = XFORM_IDENT; G.nil_ent->_xform = XFORM_IDENT;
G.nil_ent->_is_xform_dirty = false; G.nil_ent->_is_xform_dirty = 0;
G.nil_ent->friction = 0.5f; G.nil_ent->friction = 0.5f;
G.nil_ent->mass_unscaled = 1; G.nil_ent->mass_unscaled = 1;
G.nil_ent->inertia_unscaled = 1; G.nil_ent->inertia_unscaled = 1;
@ -110,7 +110,7 @@ struct sim_client_store *sim_client_store_alloc(void)
store = arena_push(arena, struct sim_client_store); store = arena_push(arena, struct sim_client_store);
store->arena = arena; store->arena = arena;
} }
store->valid = true; store->valid = 1;
store->num_client_lookup_bins = CLIENT_LOOKUP_BINS; store->num_client_lookup_bins = CLIENT_LOOKUP_BINS;
store->client_lookup_bins = arena_push_array(store->arena, struct sim_client_lookup_bin, store->num_client_lookup_bins); store->client_lookup_bins = arena_push_array(store->arena, struct sim_client_lookup_bin, store->num_client_lookup_bins);
store->clients_arena = arena_alloc(GIBI(64)); store->clients_arena = arena_alloc(GIBI(64));
@ -153,7 +153,7 @@ struct sim_client *sim_client_alloc(struct sim_client_store *store)
++store->num_clients_allocated; ++store->num_clients_allocated;
*client = *sim_client_nil(); *client = *sim_client_nil();
client->store = store; client->store = store;
client->valid = true; client->valid = 1;
client->handle = handle; client->handle = handle;
client->snapshots_arena = arena_alloc(GIBI(8)); client->snapshots_arena = arena_alloc(GIBI(8));
@ -182,7 +182,7 @@ void sim_client_release(struct sim_client *client)
/* Release client */ /* Release client */
struct sim_client_store *store = client->store; struct sim_client_store *store = client->store;
client->valid = false; client->valid = 0;
client->next_free = store->first_free_client; client->next_free = store->first_free_client;
store->first_free_client = client->handle; store->first_free_client = client->handle;
--store->num_clients_allocated; --store->num_clients_allocated;
@ -283,7 +283,7 @@ struct sim_snapshot *sim_snapshot_alloc(struct sim_client *client, struct sim_sn
struct sim_snapshot *ss; struct sim_snapshot *ss;
{ {
struct arena *arena = ZI; struct arena *arena = ZI;
struct arena *ents_arena = NULL; struct arena *ents_arena = 0;
{ {
ss = client->first_free_snapshot; ss = client->first_free_snapshot;
if (ss) { if (ss) {
@ -306,7 +306,7 @@ struct sim_snapshot *sim_snapshot_alloc(struct sim_client *client, struct sim_sn
} }
ss->tick = tick; ss->tick = tick;
ss->valid = true; ss->valid = 1;
ss->client = client; ss->client = client;
++client->num_ticks; ++client->num_ticks;
@ -348,8 +348,8 @@ struct sim_snapshot *sim_snapshot_alloc(struct sim_client *client, struct sim_sn
struct sim_ent *root = arena_push_no_zero(ss->ents_arena, struct sim_ent); struct sim_ent *root = arena_push_no_zero(ss->ents_arena, struct sim_ent);
*root = *sim_ent_nil(); *root = *sim_ent_nil();
root->ss = ss; root->ss = ss;
root->valid = true; root->valid = 1;
root->is_root = true; root->is_root = 1;
root->mass_unscaled = F32_INFINITY; root->mass_unscaled = F32_INFINITY;
root->inertia_unscaled = F32_INFINITY; root->inertia_unscaled = F32_INFINITY;
sim_ent_set_id(root, SIM_ENT_ROOT_ID); sim_ent_set_id(root, SIM_ENT_ROOT_ID);
@ -459,7 +459,7 @@ void sim_snapshot_release(struct sim_snapshot *ss)
} }
} }
ss->valid = false; ss->valid = 0;
ss->next_free = client->first_free_snapshot; ss->next_free = client->first_free_snapshot;
client->first_free_snapshot = ss; client->first_free_snapshot = ss;
--client->num_ticks; --client->num_ticks;
@ -625,21 +625,21 @@ struct sim_snapshot *sim_snapshot_alloc_from_lerp(struct sim_client *client, str
ASSERT(ss0->client != client && ss1->client != client); ASSERT(ss0->client != client && ss1->client != client);
struct sim_snapshot *ss; struct sim_snapshot *ss;
b32 should_blend = true; b32 should_blend = 1;
if (ss0->continuity_gen == ss1->continuity_gen && 0 < blend && blend < 1) { if (ss0->continuity_gen == ss1->continuity_gen && 0 < blend && blend < 1) {
ss = sim_snapshot_alloc(client, ss0, ss0->tick); ss = sim_snapshot_alloc(client, ss0, ss0->tick);
} else if (math_round_to_int64(blend) <= 0) { } else if (math_round_to_int64(blend) <= 0) {
ss = sim_snapshot_alloc(client, ss0, ss0->tick); ss = sim_snapshot_alloc(client, ss0, ss0->tick);
should_blend = false; should_blend = 0;
} else { } else {
ss = sim_snapshot_alloc(client, ss1, ss1->tick); ss = sim_snapshot_alloc(client, ss1, ss1->tick);
should_blend = false; should_blend = 0;
} }
if (!ss0->valid || !ss1->valid) { if (!ss0->valid || !ss1->valid) {
/* New snapshot allocation caused one of the src snapshots original to release. /* New snapshot allocation caused one of the src snapshots original to release.
* ss0 & ss1 should be from a separate client than the allocating one. */ * ss0 & ss1 should be from a separate client than the allocating one. */
ASSERT(false); ASSERT(0);
} }
if (should_blend) { if (should_blend) {
@ -691,7 +691,7 @@ void sim_snapshot_sync_ents(struct sim_snapshot *local_ss, struct sim_snapshot *
if (local_ent->valid && sim_ent_has_prop(local_ent, SEPROP_SYNC_DST)) { if (local_ent->valid && sim_ent_has_prop(local_ent, SEPROP_SYNC_DST)) {
b32 should_sync = sim_ent_id_eq(local_ent->owner, remote_player) || sim_ent_id_is_nil(remote_player); b32 should_sync = sim_ent_id_eq(local_ent->owner, remote_player) || sim_ent_id_is_nil(remote_player);
if ((sync_flags & SIM_SYNC_FLAG_NOSYNC_PREDICTABLES) && sim_ent_id_eq(local_ent->predictor, local_ss->local_player)) { if ((sync_flags & SIM_SYNC_FLAG_NOSYNC_PREDICTABLES) && sim_ent_id_eq(local_ent->predictor, local_ss->local_player)) {
should_sync = false; should_sync = 0;
} }
if (should_sync) { if (should_sync) {
struct sim_ent *remote_ent = sim_ent_from_id(remote_ss, local_ent->id); struct sim_ent *remote_ent = sim_ent_from_id(remote_ss, local_ent->id);
@ -827,7 +827,7 @@ void sim_snapshot_decode(struct bitbuff_reader *br, struct sim_snapshot *ss)
} }
} else { } else {
/* Invalid bin index */ /* Invalid bin index */
ASSERT(false); ASSERT(0);
} }
bin_changed = br_read_bit(br); bin_changed = br_read_bit(br);
@ -854,7 +854,7 @@ void sim_snapshot_decode(struct bitbuff_reader *br, struct sim_snapshot *ss)
} else if (reserve_diff < 0) { } else if (reserve_diff < 0) {
/* TODO: Handle this */ /* TODO: Handle this */
/* NOTE: Should be impossible for snasphot reserve count to decrease at the moment */ /* NOTE: Should be impossible for snasphot reserve count to decrease at the moment */
ASSERT(false); ASSERT(0);
} }
} }
@ -982,7 +982,7 @@ void sim_snapshot_decode(struct bitbuff_reader *br, struct sim_snapshot *ss)
/* TODO: Delta decode index based on last read index */ /* TODO: Delta decode index based on last read index */
u32 index = br_read_uv(br); u32 index = br_read_uv(br);
b32 allocation_changed = br_read_bit(br); b32 allocation_changed = br_read_bit(br);
b32 released = false; b32 released = 0;
u32 alloc_parent_index = ZI; u32 alloc_parent_index = ZI;
struct sim_ent_id alloc_ent_id = ZI; struct sim_ent_id alloc_ent_id = ZI;
@ -1031,12 +1031,12 @@ void sim_snapshot_decode(struct bitbuff_reader *br, struct sim_snapshot *ss)
ASSERT(parent->valid); /* Parent for new entity allocation should always be valid */ ASSERT(parent->valid); /* Parent for new entity allocation should always be valid */
if (parent->valid && index < ss->num_ents_reserved) { if (parent->valid && index < ss->num_ents_reserved) {
struct sim_ent *ent = &ss->ents[index]; struct sim_ent *ent = &ss->ents[index];
ent->valid = true; ent->valid = 1;
sim_ent_set_id(ent, n->alloc_ent_id); sim_ent_set_id(ent, n->alloc_ent_id);
sim_ent_link_parent(parent, ent); sim_ent_link_parent(parent, ent);
} else { } else {
/* Received an invalid entity allocation */ /* Received an invalid entity allocation */
ASSERT(false); ASSERT(0);
} }
} }
} }
@ -1050,7 +1050,7 @@ void sim_snapshot_decode(struct bitbuff_reader *br, struct sim_snapshot *ss)
sim_ent_decode(&ent_br, e); sim_ent_decode(&ent_br, e);
} else { } else {
/* Received delta for unallocated ent */ /* Received delta for unallocated ent */
ASSERT(false); ASSERT(0);
} }
} }
#else #else
@ -1088,7 +1088,7 @@ void sim_snapshot_decode(struct bitbuff_reader *br, struct sim_snapshot *ss)
e->ss = ss; e->ss = ss;
b32 valid_changed = br_read_bit(br); b32 valid_changed = br_read_bit(br);
b32 allocated = true; b32 allocated = 1;
if (valid_changed) { if (valid_changed) {
allocated = br_read_bit(br); allocated = br_read_bit(br);
} }

View File

@ -45,9 +45,9 @@ struct sim_ent *sim_ent_alloc_raw(struct sim_snapshot *ss, struct sim_ent *paren
} }
*ent = *sim_ent_nil(); *ent = *sim_ent_nil();
ent->ss = ss; ent->ss = ss;
ent->valid = true; ent->valid = 1;
ent->owner = ss->client->player_id; ent->owner = ss->client->player_id;
ent->_is_xform_dirty = true; ent->_is_xform_dirty = 1;
++ss->num_ents_allocated; ++ss->num_ents_allocated;
sim_ent_set_id(ent, id); sim_ent_set_id(ent, id);
@ -117,7 +117,7 @@ void sim_ent_release_raw(struct sim_ent *ent)
sim_ent_set_id(ent, SIM_ENT_NIL_ID); sim_ent_set_id(ent, SIM_ENT_NIL_ID);
/* Release */ /* Release */
ent->valid = false; ent->valid = 0;
ent->next_free = ss->first_free_ent; ent->next_free = ss->first_free_ent;
ss->first_free_ent = index_from_ent(ss, ent); ss->first_free_ent = index_from_ent(ss, ent);
--ss->num_ents_allocated; --ss->num_ents_allocated;
@ -328,10 +328,10 @@ struct sim_ent *sim_ent_find_first_match_all(struct sim_snapshot *ss, struct sim
for (u64 ent_index = 0; ent_index < count; ++ent_index) { for (u64 ent_index = 0; ent_index < count; ++ent_index) {
struct sim_ent *ent = &entities[ent_index]; struct sim_ent *ent = &entities[ent_index];
if (ent->valid) { if (ent->valid) {
b32 all = true; b32 all = 1;
for (u64 i = 0; i < props.count; ++i) { for (u64 i = 0; i < props.count; ++i) {
if (!sim_ent_has_prop(ent, props.props[i])) { if (!sim_ent_has_prop(ent, props.props[i])) {
all = false; all = 0;
break; break;
} }
} }
@ -369,7 +369,7 @@ void sim_ent_link_parent(struct sim_ent *ent, struct sim_ent *parent)
parent->last = ent_id; parent->last = ent_id;
if (parent->is_root) { if (parent->is_root) {
ent->is_top = true; ent->is_top = 1;
ent->top = ent_id; ent->top = ent_id;
} else { } else {
ent->top = parent->top; ent->top = parent->top;
@ -413,7 +413,7 @@ INTERNAL void sim_ent_mark_child_xforms_dirty(struct sim_snapshot *ss, struct si
if (child->_is_xform_dirty) { if (child->_is_xform_dirty) {
break; break;
} else { } else {
child->_is_xform_dirty = true; child->_is_xform_dirty = 1;
sim_ent_mark_child_xforms_dirty(ss, child); sim_ent_mark_child_xforms_dirty(ss, child);
} }
} }
@ -430,10 +430,10 @@ INTERNAL struct xform sim_ent_get_xform_internal(struct sim_snapshot *ss, struct
xf = sim_ent_get_xform_internal(ss, parent); xf = sim_ent_get_xform_internal(ss, parent);
xf = xform_mul(xf, ent->_local_xform); xf = xform_mul(xf, ent->_local_xform);
ent->_xform = xf; ent->_xform = xf;
ent->_is_xform_dirty = false; ent->_is_xform_dirty = 0;
} }
ent->_xform = xf; ent->_xform = xf;
ent->_is_xform_dirty = false; ent->_is_xform_dirty = 0;
} else { } else {
xf = ent->_xform; xf = ent->_xform;
} }
@ -452,10 +452,10 @@ struct xform sim_ent_get_xform(struct sim_ent *ent)
xf = sim_ent_get_xform_internal(ss, parent); xf = sim_ent_get_xform_internal(ss, parent);
xf = xform_mul(xf, ent->_local_xform); xf = xform_mul(xf, ent->_local_xform);
ent->_xform = xf; ent->_xform = xf;
ent->_is_xform_dirty = false; ent->_is_xform_dirty = 0;
} }
ent->_xform = xf; ent->_xform = xf;
ent->_is_xform_dirty = false; ent->_is_xform_dirty = 0;
} else { } else {
xf = ent->_xform; xf = ent->_xform;
} }
@ -480,7 +480,7 @@ void sim_ent_set_xform(struct sim_ent *ent, struct xform xf)
ent->_local_xform = xform_mul(xform_invert(parent_global), xf); ent->_local_xform = xform_mul(xform_invert(parent_global), xf);
} }
ent->_xform = xf; ent->_xform = xf;
ent->_is_xform_dirty = false; ent->_is_xform_dirty = 0;
sim_ent_mark_child_xforms_dirty(ss, ent); sim_ent_mark_child_xforms_dirty(ss, ent);
} }
} }
@ -489,7 +489,7 @@ void sim_ent_set_local_xform(struct sim_ent *ent, struct xform xf)
{ {
if (!xform_eq(xf, ent->_local_xform)) { if (!xform_eq(xf, ent->_local_xform)) {
ent->_local_xform = xf; ent->_local_xform = xf;
ent->_is_xform_dirty = true; ent->_is_xform_dirty = 1;
sim_ent_mark_child_xforms_dirty(ent->ss, ent); sim_ent_mark_child_xforms_dirty(ent->ss, ent);
} }
} }
@ -752,7 +752,7 @@ void sim_ent_encode(struct bitbuff_writer *bw, struct sim_ent *e0, struct sim_en
/* FIXME: Things like xforms need to be retreived manually rather than memcopied. /* FIXME: Things like xforms need to be retreived manually rather than memcopied.
* This will also be true for things like ent handles once uids are implemented. */ * This will also be true for things like ent handles once uids are implemented. */
/* TODO: Granular delta encoding */ /* TODO: Granular delta encoding */

View File

@ -482,9 +482,9 @@ INLINE b32 sim_ent_is_owner(struct sim_ent *ent)
INLINE b32 sim_ent_should_simulate(struct sim_ent *ent) INLINE b32 sim_ent_should_simulate(struct sim_ent *ent)
{ {
b32 res = false; b32 res = 0;
if (sim_ent_is_valid_and_active(ent)) { if (sim_ent_is_valid_and_active(ent)) {
res = true; res = 1;
if (sim_ent_has_prop(ent, SEPROP_SYNC_DST)) { if (sim_ent_has_prop(ent, SEPROP_SYNC_DST)) {
struct sim_ent_id local_player = ent->ss->local_player; struct sim_ent_id local_player = ent->ss->local_player;
res = sim_ent_id_eq(local_player, ent->owner) || sim_ent_id_eq(local_player, ent->predictor); res = sim_ent_id_eq(local_player, ent->owner) || sim_ent_id_eq(local_player, ent->predictor);

View File

@ -429,8 +429,8 @@ INTERNAL void test_generate_walls(struct sim_snapshot *world)
/* Release existing walls and gather tile chunks. /* Release existing walls and gather tile chunks.
* NOTE: We sort tile chunks before iterating so that chunk-edge tiles only * NOTE: We sort tile chunks before iterating so that chunk-edge tiles only
* need to check for adjacent walls to merge with in one direction */ * need to check for adjacent walls to merge with in one direction */
struct sim_ent **x_sorted_tile_chunks = NULL; struct sim_ent **x_sorted_tile_chunks = 0;
struct sim_ent **y_sorted_tile_chunks = NULL; struct sim_ent **y_sorted_tile_chunks = 0;
u64 sorted_tile_chunks_count = 0; u64 sorted_tile_chunks_count = 0;
{ {
x_sorted_tile_chunks = arena_push_dry(scratch.arena, struct sim_ent *); x_sorted_tile_chunks = arena_push_dry(scratch.arena, struct sim_ent *);
@ -451,8 +451,8 @@ INTERNAL void test_generate_walls(struct sim_snapshot *world)
/* NOTE: We sort x & y separately because it's possible that a wall /* NOTE: We sort x & y separately because it's possible that a wall
* should merge with another wall that was generated from a diagonal chunk. */ * should merge with another wall that was generated from a diagonal chunk. */
merge_sort(x_sorted_tile_chunks, sorted_tile_chunks_count, sizeof(*x_sorted_tile_chunks), tile_chunk_sort_x, NULL); merge_sort(x_sorted_tile_chunks, sorted_tile_chunks_count, sizeof(*x_sorted_tile_chunks), tile_chunk_sort_x, 0);
merge_sort(y_sorted_tile_chunks, sorted_tile_chunks_count, sizeof(*y_sorted_tile_chunks), tile_chunk_sort_y, NULL); merge_sort(y_sorted_tile_chunks, sorted_tile_chunks_count, sizeof(*y_sorted_tile_chunks), tile_chunk_sort_y, 0);
} }
struct wall_node { struct wall_node {
@ -467,7 +467,7 @@ INTERNAL void test_generate_walls(struct sim_snapshot *world)
struct dict *horizontal_ends_dict = dict_init(scratch.arena, 1024); struct dict *horizontal_ends_dict = dict_init(scratch.arena, 1024);
struct dict *vertical_ends_dict = dict_init(scratch.arena, 1024); struct dict *vertical_ends_dict = dict_init(scratch.arena, 1024);
struct wall_node *first_wall = NULL; struct wall_node *first_wall = 0;
/* Generate horizontal wall nodes */ /* Generate horizontal wall nodes */
for (u64 sorted_index = 0; sorted_index < sorted_tile_chunks_count; ++sorted_index) { for (u64 sorted_index = 0; sorted_index < sorted_tile_chunks_count; ++sorted_index) {
@ -515,7 +515,7 @@ INTERNAL void test_generate_walls(struct sim_snapshot *world)
if (wall_dir >= 0 && desired_wall_dir != wall_dir) { if (wall_dir >= 0 && desired_wall_dir != wall_dir) {
struct v2i32 start = sim_world_tile_index_from_local_tile_index(chunk_index, V2I32(wall_start, tile_y)); struct v2i32 start = sim_world_tile_index_from_local_tile_index(chunk_index, V2I32(wall_start, tile_y));
struct v2i32 end = sim_world_tile_index_from_local_tile_index(chunk_index, V2I32(wall_end, tile_y)); struct v2i32 end = sim_world_tile_index_from_local_tile_index(chunk_index, V2I32(wall_end, tile_y));
struct wall_node *node = NULL; struct wall_node *node = 0;
if (wall_start == 0) { if (wall_start == 0) {
u64 start_hash = rand_u64_from_seed(*(u64 *)&start); u64 start_hash = rand_u64_from_seed(*(u64 *)&start);
start_hash = rand_u64_from_seeds(start_hash, wall_dir); start_hash = rand_u64_from_seeds(start_hash, wall_dir);
@ -605,7 +605,7 @@ INTERNAL void test_generate_walls(struct sim_snapshot *world)
if (wall_dir >= 0 && desired_wall_dir != wall_dir) { if (wall_dir >= 0 && desired_wall_dir != wall_dir) {
struct v2i32 start = sim_world_tile_index_from_local_tile_index(chunk_index, V2I32(tile_x, wall_start)); struct v2i32 start = sim_world_tile_index_from_local_tile_index(chunk_index, V2I32(tile_x, wall_start));
struct v2i32 end = sim_world_tile_index_from_local_tile_index(chunk_index, V2I32(tile_x, wall_end)); struct v2i32 end = sim_world_tile_index_from_local_tile_index(chunk_index, V2I32(tile_x, wall_end));
struct wall_node *node = NULL; struct wall_node *node = 0;
if (wall_start == 0) { if (wall_start == 0) {
u64 start_hash = rand_u64_from_seed(*(u64 *)&start); u64 start_hash = rand_u64_from_seed(*(u64 *)&start);
start_hash = rand_u64_from_seeds(start_hash, wall_dir); start_hash = rand_u64_from_seeds(start_hash, wall_dir);
@ -705,7 +705,7 @@ INTERNAL PHYS_COLLISION_CALLBACK_FUNC_DEF(on_collision, data, step_ctx)
struct sim_ent *e0 = sim_ent_from_id(world, data->e0); struct sim_ent *e0 = sim_ent_from_id(world, data->e0);
struct sim_ent *e1 = sim_ent_from_id(world, data->e1); struct sim_ent *e1 = sim_ent_from_id(world, data->e1);
struct sim_ent *root = sim_ent_from_id(world, SIM_ENT_ROOT_ID); struct sim_ent *root = sim_ent_from_id(world, SIM_ENT_ROOT_ID);
b32 skip_solve = false; b32 skip_solve = 0;
if (sim_ent_should_simulate(e0) && sim_ent_should_simulate(e1)) { if (sim_ent_should_simulate(e0) && sim_ent_should_simulate(e1)) {
/* Bullet impact */ /* Bullet impact */
@ -765,7 +765,7 @@ INTERNAL PHYS_COLLISION_CALLBACK_FUNC_DEF(on_collision, data, step_ctx)
} }
/* Update bullet */ /* Update bullet */
bullet->bullet_has_hit = true; bullet->bullet_has_hit = 1;
sim_ent_enable_prop(bullet, SEPROP_RELEASE); sim_ent_enable_prop(bullet, SEPROP_RELEASE);
} }
} }
@ -966,7 +966,7 @@ void sim_step(struct sim_step_ctx *ctx)
if (sim_ent_has_prop(cmd_ent, SEPROP_CMD)) { if (sim_ent_has_prop(cmd_ent, SEPROP_CMD)) {
struct sim_ent *player = sim_ent_from_id(world, cmd_ent->cmd_player); struct sim_ent *player = sim_ent_from_id(world, cmd_ent->cmd_player);
if (sim_ent_should_simulate(player)) { if (sim_ent_should_simulate(player)) {
b32 persist_cmd = false; b32 persist_cmd = 0;
if (!is_master && !sim_ent_id_eq(player->id, world->local_player)) { if (!is_master && !sim_ent_id_eq(player->id, world->local_player)) {
/* We are not the master and the command is not our own, skip processing */ /* We are not the master and the command is not our own, skip processing */
continue; continue;
@ -977,7 +977,7 @@ void sim_step(struct sim_step_ctx *ctx)
case SIM_CMD_KIND_CONTROL: case SIM_CMD_KIND_CONTROL:
{ {
/* Player's will send control cmds a lot, so keep it around to prevent re-creating it each time */ /* Player's will send control cmds a lot, so keep it around to prevent re-creating it each time */
persist_cmd = true; persist_cmd = 1;
/* Process control cmd for player */ /* Process control cmd for player */
struct sim_control old_control = player->player_control; struct sim_control old_control = player->player_control;
@ -988,8 +988,8 @@ void sim_step(struct sim_step_ctx *ctx)
player->player_cursor_pos = control->dbg_cursor; player->player_cursor_pos = control->dbg_cursor;
player->player_hovered_ent = cmd_ent->cmd_control_hovered_ent; player->player_hovered_ent = cmd_ent->cmd_control_hovered_ent;
player->player_dbg_drag_start = false; player->player_dbg_drag_start = 0;
player->player_dbg_drag_stop = false; player->player_dbg_drag_stop = 0;
/* Cap movement vector magnitude */ /* Cap movement vector magnitude */
if (v2_len_sq(control->move) > 1) { if (v2_len_sq(control->move) > 1) {
@ -1000,11 +1000,11 @@ void sim_step(struct sim_step_ctx *ctx)
if (ctx->is_master) { if (ctx->is_master) {
if (flags & SIM_CONTROL_FLAG_DRAG) { if (flags & SIM_CONTROL_FLAG_DRAG) {
if (!(old_control.flags & SIM_CONTROL_FLAG_DRAG)) { if (!(old_control.flags & SIM_CONTROL_FLAG_DRAG)) {
player->player_dbg_drag_start = true; player->player_dbg_drag_start = 1;
} }
} else { } else {
if (old_control.flags & SIM_CONTROL_FLAG_DRAG) { if (old_control.flags & SIM_CONTROL_FLAG_DRAG) {
player->player_dbg_drag_stop = true; player->player_dbg_drag_stop = 1;
} }
} }
if (flags & SIM_CONTROL_FLAG_DELETE) { if (flags & SIM_CONTROL_FLAG_DELETE) {
@ -1090,7 +1090,7 @@ void sim_step(struct sim_step_ctx *ctx)
default: default:
{ {
/* Invalid cmd kind */ /* Invalid cmd kind */
ASSERT(false); ASSERT(0);
} break; } break;
} }
@ -1219,7 +1219,7 @@ void sim_step(struct sim_step_ctx *ctx)
/* Test collider */ /* Test collider */
#if 0 #if 0
if (sim_ent_has_prop(ent, SEPROP_TEST)) { if (sim_ent_has_prop(ent, SEPROP_TEST)) {
//if ((true)) { //if ((1)) {
#if 0 #if 0
ent->local_collider.points[0] = V2(0, 0); ent->local_collider.points[0] = V2(0, 0);
ent->local_collider.count = 1; ent->local_collider.count = 1;
@ -1324,7 +1324,7 @@ void sim_step(struct sim_step_ctx *ctx)
if ((world_time_ns - ent->last_primary_fire_ns >= NS_FROM_SECONDS(ent->primary_fire_delay)) || ent->last_primary_fire_ns == 0) { if ((world_time_ns - ent->last_primary_fire_ns >= NS_FROM_SECONDS(ent->primary_fire_delay)) || ent->last_primary_fire_ns == 0) {
ent->last_primary_fire_ns = world_time_ns; ent->last_primary_fire_ns = world_time_ns;
} else { } else {
primary_triggered = false; primary_triggered = 0;
} }
} }
if (secondary_triggered) { if (secondary_triggered) {
@ -1332,7 +1332,7 @@ void sim_step(struct sim_step_ctx *ctx)
if ((world_time_ns - ent->last_secondary_fire_ns >= NS_FROM_SECONDS(ent->secondary_fire_delay)) || ent->last_secondary_fire_ns == 0) { if ((world_time_ns - ent->last_secondary_fire_ns >= NS_FROM_SECONDS(ent->secondary_fire_delay)) || ent->last_secondary_fire_ns == 0) {
ent->last_secondary_fire_ns = world_time_ns; ent->last_secondary_fire_ns = world_time_ns;
} else { } else {
secondary_triggered = false; secondary_triggered = 0;
} }
} }

View File

@ -12,13 +12,13 @@
struct snc_lock snc_lock_spin_e(struct snc_mutex *m, i32 spin) struct snc_lock snc_lock_spin_e(struct snc_mutex *m, i32 spin)
{ {
b32 locked = false; b32 locked = 0;
i32 spin_cnt = 0; i32 spin_cnt = 0;
while (!locked) { while (!locked) {
++spin_cnt; ++spin_cnt;
u32 v = atomic_u32_fetch_test_set(&m->v, 0, 0x80000000); u32 v = atomic_u32_fetch_test_set(&m->v, 0, 0x80000000);
if (v == 0) { if (v == 0) {
locked = true; locked = 1;
} else if (v == 0x40000000) { } else if (v == 0x40000000) {
/* Lock has pending bit set, try to lock */ /* Lock has pending bit set, try to lock */
u32 swp = atomic_u32_fetch_test_set(&m->v, v, 0x80000000); u32 swp = atomic_u32_fetch_test_set(&m->v, v, 0x80000000);
@ -28,7 +28,7 @@ struct snc_lock snc_lock_spin_e(struct snc_mutex *m, i32 spin)
} }
v = swp; v = swp;
if (v == 0x40000000) { if (v == 0x40000000) {
locked = true; locked = 1;
} }
} }
if (!locked && (v & 0xC0000000) == 0) { if (!locked && (v & 0xC0000000) == 0) {
@ -56,14 +56,14 @@ struct snc_lock snc_lock_spin_e(struct snc_mutex *m, i32 spin)
#endif #endif
struct snc_lock lock = ZI; struct snc_lock lock = ZI;
lock.exclusive = true; lock.exclusive = 1;
lock.mutex = m; lock.mutex = m;
return lock; return lock;
} }
struct snc_lock snc_lock_spin_s(struct snc_mutex *m, i32 spin) struct snc_lock snc_lock_spin_s(struct snc_mutex *m, i32 spin)
{ {
b32 locked = false; b32 locked = 0;
i32 spin_cnt = 0; i32 spin_cnt = 0;
while (!locked) { while (!locked) {
++spin_cnt; ++spin_cnt;
@ -72,7 +72,7 @@ struct snc_lock snc_lock_spin_s(struct snc_mutex *m, i32 spin)
/* Lock has no exclusive or pending exclusive lock, increment shared count */ /* Lock has no exclusive or pending exclusive lock, increment shared count */
u32 swp = atomic_u32_fetch_test_set(&m->v, v, v + 1); u32 swp = atomic_u32_fetch_test_set(&m->v, v, v + 1);
if (v == swp) { if (v == swp) {
locked = true; locked = 1;
} else { } else {
v = swp; v = swp;
} }

View File

@ -34,7 +34,7 @@ struct snc_lock snc_lock_s(struct snc_mutex *m);
void snc_unlock(struct snc_lock *lock); void snc_unlock(struct snc_lock *lock);
#if RTC #if RTC
# define snc_assert_locked_e(l, m) ASSERT((l)->mutex == (m) && (l)->exclusive == true) # define snc_assert_locked_e(l, m) ASSERT((l)->mutex == (m) && (l)->exclusive == 1)
# define snc_assert_locked_e_or_s(l, m) ASSERT((l)->mutex == (m)) # define snc_assert_locked_e_or_s(l, m) ASSERT((l)->mutex == (m))
#else #else
# define snc_assert_locked_e(l, m) (UNUSED)l # define snc_assert_locked_e(l, m) (UNUSED)l

View File

@ -70,13 +70,13 @@ INTERNAL struct sock_address sock_address_from_ip_port_cstr(char *ip_cstr, char
hints.ai_socktype = SOCK_DGRAM; hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE; hints.ai_flags = AI_PASSIVE;
struct addrinfo *ai_res = NULL; struct addrinfo *ai_res = 0;
i32 status = getaddrinfo(ip_cstr, port_cstr, &hints, &ai_res); i32 status = getaddrinfo(ip_cstr, port_cstr, &hints, &ai_res);
if (status == 0) { if (status == 0) {
while (ai_res) { while (ai_res) {
if (ai_res->ai_family == AF_INET) { if (ai_res->ai_family == AF_INET) {
struct sockaddr_in *sockaddr = (struct sockaddr_in *)ai_res->ai_addr; struct sockaddr_in *sockaddr = (struct sockaddr_in *)ai_res->ai_addr;
res.valid = true; res.valid = 1;
res.family = SOCK_ADDRESS_FAMILY_IPV4; res.family = SOCK_ADDRESS_FAMILY_IPV4;
res.portnb = sockaddr->sin_port; res.portnb = sockaddr->sin_port;
STATIC_ASSERT(sizeof(sockaddr->sin_addr) == 4); STATIC_ASSERT(sizeof(sockaddr->sin_addr) == 4);
@ -86,7 +86,7 @@ INTERNAL struct sock_address sock_address_from_ip_port_cstr(char *ip_cstr, char
/* TODO: Enable ipv6 */ /* TODO: Enable ipv6 */
#if 0 #if 0
struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)ai_res->ai_addr; struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)ai_res->ai_addr;
res.valid = true; res.valid = 1;
res.family = SOCK_ADDRESS_FAMILY_IPV6; res.family = SOCK_ADDRESS_FAMILY_IPV6;
res.portnb = sockaddr->sin6_port; res.portnb = sockaddr->sin6_port;
STATIC_ASSERT(sizeof(sockaddr->sin6_addr) == 16); STATIC_ASSERT(sizeof(sockaddr->sin6_addr) == 16);
@ -107,8 +107,8 @@ struct sock_address sock_address_from_string(struct string str)
/* Parse string into ip & port */ /* Parse string into ip & port */
u8 ip_buff[1024]; u8 ip_buff[1024];
u8 port_buff[countof(ip_buff)]; u8 port_buff[countof(ip_buff)];
char *ip_cstr = NULL; char *ip_cstr = 0;
char *port_cstr = NULL; char *port_cstr = 0;
{ {
u64 colon_count = 0; u64 colon_count = 0;
for (u64 i = 0; i < str.len; ++i) { for (u64 i = 0; i < str.len; ++i) {
@ -122,12 +122,12 @@ struct sock_address sock_address_from_string(struct string str)
u64 parse_len = min_u64(min_u64(str.len, countof(ip_buff) - 1), countof(port_buff) - 1); u64 parse_len = min_u64(min_u64(str.len, countof(ip_buff) - 1), countof(port_buff) - 1);
if (colon_count > 1 && str.text[0] == '[') { if (colon_count > 1 && str.text[0] == '[') {
/* Parse ipv6 with port */ /* Parse ipv6 with port */
b32 parse_addr = true; b32 parse_addr = 1;
for (u64 i = 1; i < parse_len; ++i) { for (u64 i = 1; i < parse_len; ++i) {
u8 c = str.text[i]; u8 c = str.text[i];
if (parse_addr) { if (parse_addr) {
if (c == ']') { if (c == ']') {
parse_addr = false; parse_addr = 0;
} else { } else {
ip_buff[ip_len] = c; ip_buff[ip_len] = c;
++ip_len; ++ip_len;
@ -139,12 +139,12 @@ struct sock_address sock_address_from_string(struct string str)
} }
} else if (colon_count == 1) { } else if (colon_count == 1) {
/* Parse address with port */ /* Parse address with port */
b32 parse_addr = true; b32 parse_addr = 1;
for (u64 i = 0; i < parse_len; ++i) { for (u64 i = 0; i < parse_len; ++i) {
u8 c = str.text[i]; u8 c = str.text[i];
if (parse_addr) { if (parse_addr) {
if (c == ':') { if (c == ':') {
parse_addr = false; parse_addr = 0;
} else { } else {
ip_buff[ip_len] = c; ip_buff[ip_len] = c;
++ip_len; ++ip_len;
@ -177,7 +177,7 @@ struct sock_address sock_address_from_string(struct string str)
struct sock_address sock_address_from_port(u16 port) struct sock_address sock_address_from_port(u16 port)
{ {
u8 port_buff[128]; u8 port_buff[128];
char *port_cstr = NULL; char *port_cstr = 0;
{ {
u8 port_buff_reverse[countof(port_buff)]; u8 port_buff_reverse[countof(port_buff)];
u64 port_len = 0; u64 port_len = 0;
@ -197,7 +197,7 @@ struct sock_address sock_address_from_port(u16 port)
} }
} }
struct sock_address res = sock_address_from_ip_port_cstr(NULL, port_cstr); struct sock_address res = sock_address_from_ip_port_cstr(0, port_cstr);
return res; return res;
} }
@ -244,10 +244,10 @@ INTERNAL struct win32_address win32_address_convert_any_to_localhost(struct win3
{ {
if (addr.family == AF_INET) { if (addr.family == AF_INET) {
u8 *bytes = (u8 *)&addr.sin.sin_addr; u8 *bytes = (u8 *)&addr.sin.sin_addr;
b32 is_any = true; b32 is_any = 1;
for (u64 i = 0; i < 4; ++i) { for (u64 i = 0; i < 4; ++i) {
if (bytes[i] != 0) { if (bytes[i] != 0) {
is_any = false; is_any = 0;
break; break;
} }
} }
@ -257,10 +257,10 @@ INTERNAL struct win32_address win32_address_convert_any_to_localhost(struct win3
} }
} else if (addr.family == AF_INET6) { } else if (addr.family == AF_INET6) {
u8 *bytes = (u8 *)&addr.sin.sin_addr; u8 *bytes = (u8 *)&addr.sin.sin_addr;
b32 is_any = true; b32 is_any = 1;
for (u64 i = 0; i < 16; ++i) { for (u64 i = 0; i < 16; ++i) {
if (bytes[i] != 0) { if (bytes[i] != 0) {
is_any = false; is_any = 0;
break; break;
} }
} }
@ -278,12 +278,12 @@ INTERNAL struct sock_address sock_address_from_win32_address(struct win32_addres
res.family = SOCK_ADDRESS_FAMILY_IPV4; res.family = SOCK_ADDRESS_FAMILY_IPV4;
res.portnb = ws_addr.sin.sin_port; res.portnb = ws_addr.sin.sin_port;
MEMCPY(res.ipnb, &ws_addr.sin.sin_addr, 4); MEMCPY(res.ipnb, &ws_addr.sin.sin_addr, 4);
res.valid = true; res.valid = 1;
} else if (ws_addr.family == AF_INET6) { } else if (ws_addr.family == AF_INET6) {
res.family = SOCK_ADDRESS_FAMILY_IPV6; res.family = SOCK_ADDRESS_FAMILY_IPV6;
res.portnb = ws_addr.sin6.sin6_port; res.portnb = ws_addr.sin6.sin6_port;
MEMCPY(res.ipnb, &ws_addr.sin6.sin6_addr.s6_addr, 16); MEMCPY(res.ipnb, &ws_addr.sin6.sin6_addr.s6_addr, 16);
res.valid = true; res.valid = 1;
} }
return res; return res;
} }
@ -294,7 +294,7 @@ INTERNAL struct sock_address sock_address_from_win32_address(struct win32_addres
INTERNAL struct win32_sock *win32_sock_alloc(void) INTERNAL struct win32_sock *win32_sock_alloc(void)
{ {
struct win32_sock *ws = NULL; struct win32_sock *ws = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.win32_socks_mutex); struct snc_lock lock = snc_lock_e(&G.win32_socks_mutex);
if (G.first_free_win32_sock) { if (G.first_free_win32_sock) {
@ -371,7 +371,7 @@ void sock_wake(struct sock *sock)
struct sock *sock_wait_for_available_read(struct sock_array socks, f32 timeout) struct sock *sock_wait_for_available_read(struct sock_array socks, f32 timeout)
{ {
struct sock *res = NULL; struct sock *res = 0;
WSAPOLLFD fds[MAX_POLL_FDS] = ZI; WSAPOLLFD fds[MAX_POLL_FDS] = ZI;
for (u32 i = 0; i < socks.count; ++i) { for (u32 i = 0; i < socks.count; ++i) {
@ -414,12 +414,12 @@ struct sock_read_result sock_read(struct sock *sock, struct string read_buff)
gstat_add(GSTAT_SOCK_BYTES_RECEIVED, size); gstat_add(GSTAT_SOCK_BYTES_RECEIVED, size);
res.data.text = read_buff.text; res.data.text = read_buff.text;
res.data.len = size; res.data.len = size;
res.valid = true; res.valid = 1;
} else { } else {
#if RTC #if RTC
i32 err = WSAGetLastError(); i32 err = WSAGetLastError();
if (err != WSAEWOULDBLOCK && err != WSAETIMEDOUT && err != WSAECONNRESET) { if (err != WSAEWOULDBLOCK && err != WSAETIMEDOUT && err != WSAECONNRESET) {
ASSERT(false); ASSERT(0);
} }
#endif #endif
} }
@ -443,7 +443,7 @@ void sock_write(struct sock *sock, struct sock_address address, struct string da
if (size != (i32)data.len) { if (size != (i32)data.len) {
i32 err = WSAGetLastError(); i32 err = WSAGetLastError();
(UNUSED)err; (UNUSED)err;
ASSERT(false); ASSERT(0);
} }
#endif #endif
} }

View File

@ -50,7 +50,7 @@ struct sound_startup_receipt sound_startup(struct asset_cache_startup_receipt *a
INTERNAL struct sound_task_params *sound_task_params_alloc(void) INTERNAL struct sound_task_params *sound_task_params_alloc(void)
{ {
struct sound_task_params *p = NULL; struct sound_task_params *p = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.params.mutex); struct snc_lock lock = snc_lock_e(&G.params.mutex);
if (G.params.head_free) { if (G.params.head_free) {
@ -113,8 +113,8 @@ INTERNAL SYS_JOB_DEF(sound_load_asset_job, job)
if (decoded.success) { if (decoded.success) {
/* Store */ /* Store */
struct sound *sound = NULL; struct sound *sound = 0;
i16 *samples = NULL; i16 *samples = 0;
{ {
struct asset_cache_store store = asset_cache_store_open(); struct asset_cache_store store = asset_cache_store_open();
sound = arena_push_no_zero(store.arena, struct sound); sound = arena_push_no_zero(store.arena, struct sound);
@ -135,7 +135,7 @@ INTERNAL SYS_JOB_DEF(sound_load_asset_job, job)
logf_error("Error loading sound \"%F\": %F", FMT_STR(path), FMT_STR(error_msg)); logf_error("Error loading sound \"%F\": %F", FMT_STR(path), FMT_STR(error_msg));
/* Store */ /* Store */
struct sound *sound = NULL; struct sound *sound = 0;
{ {
struct asset_cache_store store = asset_cache_store_open(); struct asset_cache_store store = asset_cache_store_open();
sound = arena_push_no_zero(store.arena, struct sound); sound = arena_push_no_zero(store.arena, struct sound);
@ -192,7 +192,7 @@ struct asset *sound_load_asset(struct string path, u32 flags, b32 wait)
struct sound *sound_load_async(struct string path, u32 flags) struct sound *sound_load_async(struct string path, u32 flags)
{ {
__prof; __prof;
struct asset *asset = sound_load_asset(path, flags, false); struct asset *asset = sound_load_asset(path, flags, 0);
struct sound *sound = (struct sound *)asset_cache_get_store_data(asset); struct sound *sound = (struct sound *)asset_cache_get_store_data(asset);
return sound; return sound;
} }
@ -201,7 +201,7 @@ struct sound *sound_load_async(struct string path, u32 flags)
struct sound *sound_load(struct string path, u32 flags) struct sound *sound_load(struct string path, u32 flags)
{ {
__prof; __prof;
struct asset *asset = sound_load_asset(path, flags, true); struct asset *asset = sound_load_asset(path, flags, 1);
asset_cache_wait(asset); asset_cache_wait(asset);
struct sound *sound = (struct sound *)asset_cache_get_store_data(asset); struct sound *sound = (struct sound *)asset_cache_get_store_data(asset);
return sound; return sound;

View File

@ -9,9 +9,9 @@
#define SPACE_ENTRIES_OFFSET (sizeof(struct space) + (sizeof(struct space) % alignof(struct space_entry))) #define SPACE_ENTRIES_OFFSET (sizeof(struct space) + (sizeof(struct space) % alignof(struct space_entry)))
/* Accessed via sim_ent_nil() */ /* Accessed via sim_ent_nil() */
READONLY struct space_entry _g_space_entry_nil = { .valid = false }; READONLY struct space_entry _g_space_entry_nil = { .valid = 0 };
READONLY struct space_cell _g_space_cell_nil = { .valid = false }; READONLY struct space_cell _g_space_cell_nil = { .valid = 0 };
READONLY struct space _g_space_nil = { .valid = false }; READONLY struct space _g_space_nil = { .valid = 0 };
/* ========================== * /* ========================== *
* Space alloc * Space alloc
@ -29,7 +29,7 @@ struct space *space_alloc(f32 cell_size, u32 num_bins_sqrt)
space->entry_arena = arena; space->entry_arena = arena;
} }
space->valid = true; space->valid = 1;
space->entries = arena_push_dry(space->entry_arena, struct space_entry); space->entries = arena_push_dry(space->entry_arena, struct space_entry);
space->cell_arena = arena_alloc(GIBI(64)); space->cell_arena = arena_alloc(GIBI(64));
@ -53,9 +53,9 @@ void space_reset(struct space *space)
arena_reset(space->cell_arena); arena_reset(space->cell_arena);
space->bins = arena_push_array(space->cell_arena, struct space_cell_bin, space->num_bins); space->bins = arena_push_array(space->cell_arena, struct space_cell_bin, space->num_bins);
space->num_entries_reserved = 0; space->num_entries_reserved = 0;
space->first_free_cell = NULL; space->first_free_cell = 0;
space->first_free_cell_node = NULL; space->first_free_cell_node = 0;
space->first_free_entry = NULL; space->first_free_entry = 0;
} }
struct space *space_from_entry(struct space_entry *entry) struct space *space_from_entry(struct space_entry *entry)
@ -126,7 +126,7 @@ INTERNAL void space_cell_node_alloc(struct v2i32 cell_pos, struct space_entry *e
struct space_cell_bin *bin = &space->bins[bin_index]; struct space_cell_bin *bin = &space->bins[bin_index];
/* Find existing cell */ /* Find existing cell */
struct space_cell *cell = NULL; struct space_cell *cell = 0;
for (struct space_cell *n = bin->first_cell; n; n = n->next_in_bin) { for (struct space_cell *n = bin->first_cell; n; n = n->next_in_bin) {
if (v2i32_eq(n->pos, cell_pos)) { if (v2i32_eq(n->pos, cell_pos)) {
cell = n; cell = n;
@ -152,7 +152,7 @@ INTERNAL void space_cell_node_alloc(struct v2i32 cell_pos, struct space_entry *e
bin->last_cell = cell; bin->last_cell = cell;
cell->pos = cell_pos; cell->pos = cell_pos;
cell->bin = bin; cell->bin = bin;
cell->valid = true; cell->valid = 1;
} }
/* Allocate node */ /* Allocate node */
@ -242,7 +242,7 @@ INTERNAL void space_cell_node_release(struct space_cell_node *n)
} else { } else {
bin->last_cell = prev; bin->last_cell = prev;
} }
cell->valid = false; cell->valid = 0;
/* Insert cell into free list */ /* Insert cell into free list */
cell->next_free = space->first_free_cell; cell->next_free = space->first_free_cell;
@ -274,7 +274,7 @@ struct space_entry *space_entry_from_handle(struct space *space, struct space_en
struct space_entry *space_entry_alloc(struct space *space, struct sim_ent_id ent) struct space_entry *space_entry_alloc(struct space *space, struct sim_ent_id ent)
{ {
struct space_entry *entry = NULL; struct space_entry *entry = 0;
struct space_entry_handle handle = ZI; struct space_entry_handle handle = ZI;
if (space->first_free_entry) { if (space->first_free_entry) {
entry = space->first_free_entry; entry = space->first_free_entry;
@ -287,7 +287,7 @@ struct space_entry *space_entry_alloc(struct space *space, struct sim_ent_id ent
++space->num_entries_reserved; ++space->num_entries_reserved;
} }
MEMZERO_STRUCT(entry); MEMZERO_STRUCT(entry);
entry->valid = true; entry->valid = 1;
entry->handle = handle; entry->handle = handle;
entry->ent = ent; entry->ent = ent;
return entry; return entry;
@ -306,7 +306,7 @@ void space_entry_release(struct space_entry *entry)
struct space *space = space_from_entry(entry); struct space *space = space_from_entry(entry);
entry->next_free = space->first_free_entry; entry->next_free = space->first_free_entry;
entry->valid = false; entry->valid = 0;
++entry->handle.gen; ++entry->handle.gen;
space->first_free_entry = entry; space->first_free_entry = entry;
} }
@ -391,17 +391,17 @@ struct space_entry *space_iter_next(struct space_iter *iter)
struct v2i32 cell_cur = iter->cell_cur; struct v2i32 cell_cur = iter->cell_cur;
i32 span = cell_end.x - cell_start.x; i32 span = cell_end.x - cell_start.x;
struct space_cell_node *next_node = NULL; struct space_cell_node *next_node = 0;
if (cell_cur.x >= cell_start.x && cell_cur.x <= cell_end.x && cell_cur.y >= cell_start.y && cell_cur.y <= cell_end.y) { if (cell_cur.x >= cell_start.x && cell_cur.x <= cell_end.x && cell_cur.y >= cell_start.y && cell_cur.y <= cell_end.y) {
/* Started */ /* Started */
ASSERT(iter->prev != NULL); ASSERT(iter->prev != 0);
next_node = iter->prev->next_in_cell; next_node = iter->prev->next_in_cell;
} else if (cell_cur.x > cell_end.x || cell_cur.y > cell_end.y) { } else if (cell_cur.x > cell_end.x || cell_cur.y > cell_end.y) {
/* Ended */ /* Ended */
return NULL; return 0;
} }
while (true) { while (1) {
if (next_node) { if (next_node) {
struct space_entry *entry = next_node->entry; struct space_entry *entry = next_node->entry;
struct aabb entry_aabb = entry->aabb; struct aabb entry_aabb = entry->aabb;
@ -432,5 +432,5 @@ struct space_entry *space_iter_next(struct space_iter *iter)
iter->prev = next_node; iter->prev = next_node;
iter->cell_cur = cell_cur; iter->cell_cur = cell_cur;
return next_node ? next_node->entry : NULL; return next_node ? next_node->entry : 0;
} }

View File

@ -221,7 +221,7 @@ struct sprite_startup_receipt sprite_startup(struct gp_startup_receipt *gp_sr,
/* Init nil texture */ /* Init nil texture */
G.nil_texture = arena_push(G.perm_arena, struct sprite_texture); G.nil_texture = arena_push(G.perm_arena, struct sprite_texture);
G.nil_texture->loaded = true; G.nil_texture->loaded = 1;
{ {
struct arena_temp scratch = scratch_begin_no_conflict(); struct arena_temp scratch = scratch_begin_no_conflict();
struct image_rgba purple_black_image = generate_purple_black_image(scratch.arena, 64, 64); struct image_rgba purple_black_image = generate_purple_black_image(scratch.arena, 64, 64);
@ -238,7 +238,7 @@ struct sprite_startup_receipt sprite_startup(struct gp_startup_receipt *gp_sr,
G.nil_sheet = arena_push(G.perm_arena, struct sprite_sheet); G.nil_sheet = arena_push(G.perm_arena, struct sprite_sheet);
G.nil_sheet->image_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT); G.nil_sheet->image_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
G.nil_sheet->frame_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT); G.nil_sheet->frame_size = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
G.nil_sheet->loaded = true; G.nil_sheet->loaded = 1;
} }
arena_set_readonly(G.perm_arena); arena_set_readonly(G.perm_arena);
@ -249,7 +249,7 @@ struct sprite_startup_receipt sprite_startup(struct gp_startup_receipt *gp_sr,
G.scopes_arena = arena_alloc(GIBI(64)); G.scopes_arena = arena_alloc(GIBI(64));
sys_run(1, sprite_evictor_job, NULL, SYS_PRIORITY_BACKGROUND, &G.shutdown_counter); sys_run(1, sprite_evictor_job, 0, SYS_PRIORITY_BACKGROUND, &G.shutdown_counter);
app_register_exit_callback(&sprite_shutdown); app_register_exit_callback(&sprite_shutdown);
resource_register_watch_callback(&sprite_resource_watch_callback); resource_register_watch_callback(&sprite_resource_watch_callback);
@ -263,7 +263,7 @@ INTERNAL APP_EXIT_CALLBACK_FUNC_DEF(sprite_shutdown)
/* Signal evictor shutdown */ /* Signal evictor shutdown */
{ {
struct snc_lock lock = snc_lock_e(&G.evictor_scheduler_mutex); struct snc_lock lock = snc_lock_e(&G.evictor_scheduler_mutex);
G.evictor_scheduler_shutdown = true; G.evictor_scheduler_shutdown = 1;
snc_cv_broadcast(&G.evictor_scheduler_shutdown_cv); snc_cv_broadcast(&G.evictor_scheduler_shutdown_cv);
snc_unlock(&lock); snc_unlock(&lock);
} }
@ -305,7 +305,7 @@ INTERNAL struct cache_entry_hash cache_entry_hash_from_tag_hash(u64 tag_hash, en
INTERNAL struct sprite_scope_cache_ref *scope_ensure_ref_from_ref(struct sprite_scope *scope, struct cache_ref ref); INTERNAL struct sprite_scope_cache_ref *scope_ensure_ref_from_ref(struct sprite_scope *scope, struct cache_ref ref);
INTERNAL void push_load_job(struct cache_ref ref, struct sprite_tag tag) INTERNAL void push_load_job(struct cache_ref ref, struct sprite_tag tag)
{ {
struct load_cmd *cmd = NULL; struct load_cmd *cmd = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.load_cmds_mutex); struct snc_lock lock = snc_lock_e(&G.load_cmds_mutex);
if (G.first_free_load_cmd) { if (G.first_free_load_cmd) {
@ -329,7 +329,7 @@ INTERNAL void push_load_job(struct cache_ref ref, struct sprite_tag tag)
} }
/* Push work */ /* Push work */
sys_run(1, sprite_load_job, cmd, SYS_PRIORITY_BACKGROUND, NULL); sys_run(1, sprite_load_job, cmd, SYS_PRIORITY_BACKGROUND, 0);
} }
INTERNAL void cache_entry_load_texture(struct cache_ref ref, struct sprite_tag tag) INTERNAL void cache_entry_load_texture(struct cache_ref ref, struct sprite_tag tag)
@ -342,7 +342,7 @@ INTERNAL void cache_entry_load_texture(struct cache_ref ref, struct sprite_tag t
struct string path = tag.path; struct string path = tag.path;
logf_info("Loading sprite texture [%F] \"%F\"", FMT_HEX(e->hash.v), FMT_STR(path)); logf_info("Loading sprite texture [%F] \"%F\"", FMT_HEX(e->hash.v), FMT_STR(path));
b32 success = false; b32 success = 0;
i64 start_ns = sys_time_ns(); i64 start_ns = sys_time_ns();
ASSERT(string_ends_with(path, LIT(".ase"))); ASSERT(string_ends_with(path, LIT(".ase")));
@ -371,11 +371,11 @@ INTERNAL void cache_entry_load_texture(struct cache_ref ref, struct sprite_tag t
e->texture->width = decoded.image.width; e->texture->width = decoded.image.width;
e->texture->height = decoded.image.height; e->texture->height = decoded.image.height;
e->texture->gp_texture = gp_texture_alloc(GP_TEXTURE_FORMAT_R8G8B8A8_UNORM_SRGB, 0, V2I32(decoded.image.width, decoded.image.height), decoded.image.pixels); e->texture->gp_texture = gp_texture_alloc(GP_TEXTURE_FORMAT_R8G8B8A8_UNORM_SRGB, 0, V2I32(decoded.image.width, decoded.image.height), decoded.image.pixels);
e->texture->valid = true; e->texture->valid = 1;
e->texture->loaded = true; e->texture->loaded = 1;
/* TODO: Query gpu for more accurate texture size in VRAM */ /* TODO: Query gpu for more accurate texture size in VRAM */
memory_size += (decoded.image.width * decoded.image.height) * sizeof(*decoded.image.pixels); memory_size += (decoded.image.width * decoded.image.height) * sizeof(*decoded.image.pixels);
success = true; success = 1;
} }
} }
arena_set_readonly(e->arena); arena_set_readonly(e->arena);
@ -483,7 +483,7 @@ INTERNAL struct sprite_sheet init_sheet_from_ase_result(struct arena *arena, str
/* Group slices by name and find out counts per frame */ /* Group slices by name and find out counts per frame */
u64 num_temp_slice_group_nodes = 0; u64 num_temp_slice_group_nodes = 0;
struct temp_slice_group_node *temp_slice_group_head = NULL; struct temp_slice_group_node *temp_slice_group_head = 0;
{ {
struct dict *temp_slice_dict = dict_init(scratch.arena, (u64)(ase.num_slice_keys * 2)); struct dict *temp_slice_dict = dict_init(scratch.arena, (u64)(ase.num_slice_keys * 2));
for (struct ase_slice_key *ase_slice_key = ase.slice_key_head; ase_slice_key; ase_slice_key = ase_slice_key->next) { for (struct ase_slice_key *ase_slice_key = ase.slice_key_head; ase_slice_key; ase_slice_key = ase_slice_key->next) {
@ -532,7 +532,7 @@ INTERNAL struct sprite_sheet init_sheet_from_ase_result(struct arena *arena, str
u32 start = ase_slice->start; u32 start = ase_slice->start;
struct sprite_sheet_slice *slice = &slice_group->frame_slices[(start * slice_group->per_frame_count) + index_in_frame]; struct sprite_sheet_slice *slice = &slice_group->frame_slices[(start * slice_group->per_frame_count) + index_in_frame];
slice->original = true; slice->original = 1;
f32 x1_px = ase_slice->x1; f32 x1_px = ase_slice->x1;
f32 y1_px = ase_slice->y1; f32 y1_px = ase_slice->y1;
@ -598,7 +598,7 @@ INTERNAL struct sprite_sheet init_sheet_from_ase_result(struct arena *arena, str
for (u32 i = start; i-- > 0;) { for (u32 i = start; i-- > 0;) {
struct sprite_sheet_slice *target = &slice_group->frame_slices[(i * slice_group->per_frame_count) + index_in_frame]; struct sprite_sheet_slice *target = &slice_group->frame_slices[(i * slice_group->per_frame_count) + index_in_frame];
*target = *slice; *target = *slice;
target->original = false; target->original = 0;
} }
} }
@ -609,7 +609,7 @@ INTERNAL struct sprite_sheet init_sheet_from_ase_result(struct arena *arena, str
break; break;
} else { } else {
*target = *slice; *target = *slice;
target->original = false; target->original = 0;
} }
} }
} }
@ -641,7 +641,7 @@ INTERNAL struct sprite_sheet init_sheet_from_ase_result(struct arena *arena, str
struct sprite_sheet_slice *point_slice = &point_slice_group->frame_slices[(i * point_slices_per_frame) + j]; struct sprite_sheet_slice *point_slice = &point_slice_group->frame_slices[(i * point_slices_per_frame) + j];
point_slice->dir_px = v2_sub(ray_end, point_slice->center_px); point_slice->dir_px = v2_sub(ray_end, point_slice->center_px);
point_slice->dir = v2_sub(ray_end_norm, point_slice->center); point_slice->dir = v2_sub(ray_end_norm, point_slice->center);
point_slice->has_ray = true; point_slice->has_ray = 1;
} }
} }
@ -665,7 +665,7 @@ INTERNAL void cache_entry_load_sheet(struct cache_ref ref, struct sprite_tag tag
struct string path = tag.path; struct string path = tag.path;
logf_info("Loading sprite sheet [%F] \"%F\"", FMT_HEX(e->hash.v), FMT_STR(path)); logf_info("Loading sprite sheet [%F] \"%F\"", FMT_HEX(e->hash.v), FMT_STR(path));
b32 success = false; b32 success = 0;
i64 start_ns = sys_time_ns(); i64 start_ns = sys_time_ns();
ASSERT(e->kind == CACHE_ENTRY_KIND_SHEET); ASSERT(e->kind == CACHE_ENTRY_KIND_SHEET);
@ -693,10 +693,10 @@ INTERNAL void cache_entry_load_sheet(struct cache_ref ref, struct sprite_tag tag
/* Initialize */ /* Initialize */
e->sheet = arena_push_no_zero(e->arena, struct sprite_sheet); e->sheet = arena_push_no_zero(e->arena, struct sprite_sheet);
*e->sheet = init_sheet_from_ase_result(e->arena, decoded); *e->sheet = init_sheet_from_ase_result(e->arena, decoded);
e->sheet->loaded = true; e->sheet->loaded = 1;
e->sheet->valid = true; e->sheet->valid = 1;
success = true; success = 1;
} }
} }
arena_set_readonly(e->arena); arena_set_readonly(e->arena);
@ -750,7 +750,7 @@ INTERNAL void refcount_add(struct cache_entry *e, i32 amount)
ASSERT(new_refcount.count >= 0); ASSERT(new_refcount.count >= 0);
break; break;
} }
} while (true); } while (1);
} }
INTERNAL struct sprite_scope_cache_ref *scope_ensure_ref_unsafe(struct sprite_scope *scope, struct cache_entry *e) INTERNAL struct sprite_scope_cache_ref *scope_ensure_ref_unsafe(struct sprite_scope *scope, struct cache_entry *e)
@ -767,7 +767,7 @@ INTERNAL struct sprite_scope_cache_ref *scope_ensure_ref_unsafe(struct sprite_sc
} }
} }
if (*slot == NULL) { if (*slot == 0) {
if (scope->num_references >= MAX_SCOPE_REFERENCES) { if (scope->num_references >= MAX_SCOPE_REFERENCES) {
sys_panic(LIT("Max sprite scope references reached")); sys_panic(LIT("Max sprite scope references reached"));
} }
@ -802,9 +802,9 @@ INTERNAL struct sprite_scope_cache_ref *scope_ensure_ref_from_ref(struct sprite_
struct sprite_scope *sprite_scope_begin(void) struct sprite_scope *sprite_scope_begin(void)
{ {
/* Alloc scope */ /* Alloc scope */
struct sprite_scope *res = NULL; struct sprite_scope *res = 0;
struct sprite_scope_cache_ref **bins = NULL; struct sprite_scope_cache_ref **bins = 0;
struct sprite_scope_cache_ref *pool = NULL; struct sprite_scope_cache_ref *pool = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.scopes_mutex); struct snc_lock lock = snc_lock_e(&G.scopes_mutex);
{ {
@ -852,7 +852,7 @@ void sprite_scope_end(struct sprite_scope *scope)
INTERNAL struct sprite_scope_cache_ref *cache_lookup(struct sprite_scope *scope, struct cache_entry_hash hash, struct snc_lock *bin_lock) INTERNAL struct sprite_scope_cache_ref *cache_lookup(struct sprite_scope *scope, struct cache_entry_hash hash, struct snc_lock *bin_lock)
{ {
struct sprite_scope_cache_ref *scope_ref = NULL; struct sprite_scope_cache_ref *scope_ref = 0;
struct cache_bin *bin = &G.cache.bins[hash.v % CACHE_BINS_COUNT]; struct cache_bin *bin = &G.cache.bins[hash.v % CACHE_BINS_COUNT];
snc_assert_locked_e_or_s(bin_lock, &bin->mutex); /* Lock required for iterating bin */ snc_assert_locked_e_or_s(bin_lock, &bin->mutex); /* Lock required for iterating bin */
@ -861,7 +861,7 @@ INTERNAL struct sprite_scope_cache_ref *cache_lookup(struct sprite_scope *scope,
/* If resource reloading is enabled, then we want to find the /* If resource reloading is enabled, then we want to find the
* newest entry rather than the first one that exists since * newest entry rather than the first one that exists since
* there may be more than one matching entry in the cache */ * there may be more than one matching entry in the cache */
struct cache_entry *match = NULL; struct cache_entry *match = 0;
enum cache_entry_state match_state = CACHE_ENTRY_STATE_NONE; enum cache_entry_state match_state = CACHE_ENTRY_STATE_NONE;
for (struct cache_entry *entry = bin->first; entry; entry = entry->next_in_bin) { for (struct cache_entry *entry = bin->first; entry; entry = entry->next_in_bin) {
if (entry->hash.v == hash.v) { if (entry->hash.v == hash.v) {
@ -891,7 +891,7 @@ INTERNAL struct sprite_scope_cache_ref *cache_entry_from_tag(struct sprite_scope
{ {
struct cache_entry_hash hash = cache_entry_hash_from_tag_hash(tag.hash, kind); struct cache_entry_hash hash = cache_entry_hash_from_tag_hash(tag.hash, kind);
u64 bin_index = hash.v % CACHE_BINS_COUNT; u64 bin_index = hash.v % CACHE_BINS_COUNT;
struct sprite_scope_cache_ref *scope_ref = NULL; struct sprite_scope_cache_ref *scope_ref = 0;
/* Search for entry in scope */ /* Search for entry in scope */
if (!force_new) { if (!force_new) {
@ -928,7 +928,7 @@ INTERNAL struct sprite_scope_cache_ref *cache_entry_from_tag(struct sprite_scope
if (!scope_ref) { if (!scope_ref) {
/* Cache entry still absent, allocate new entry */ /* Cache entry still absent, allocate new entry */
struct cache_entry *entry = NULL; struct cache_entry *entry = 0;
{ {
struct snc_lock pool_lock = snc_lock_e(&G.cache.entry_pool_mutex); struct snc_lock pool_lock = snc_lock_e(&G.cache.entry_pool_mutex);
if (G.cache.entry_pool_first_free) { if (G.cache.entry_pool_first_free) {
@ -969,14 +969,14 @@ INTERNAL struct sprite_scope_cache_ref *cache_entry_from_tag(struct sprite_scope
INTERNAL void *data_from_tag_internal(struct sprite_scope *scope, struct sprite_tag tag, enum cache_entry_kind kind, b32 await) INTERNAL void *data_from_tag_internal(struct sprite_scope *scope, struct sprite_tag tag, enum cache_entry_kind kind, b32 await)
{ {
/* TODO: Replace switch statements */ /* TODO: Replace switch statements */
void *res = NULL; void *res = 0;
switch (kind) { switch (kind) {
case CACHE_ENTRY_KIND_TEXTURE: { res = G.loading_texture; } break; case CACHE_ENTRY_KIND_TEXTURE: { res = G.loading_texture; } break;
case CACHE_ENTRY_KIND_SHEET: { res = G.loading_sheet; } break; case CACHE_ENTRY_KIND_SHEET: { res = G.loading_sheet; } break;
default: { sys_panic(LIT("Unknown sprite cache entry kind")); } break; default: { sys_panic(LIT("Unknown sprite cache entry kind")); } break;
} }
struct sprite_scope_cache_ref *scope_ref = cache_entry_from_tag(scope, tag, kind, false); struct sprite_scope_cache_ref *scope_ref = cache_entry_from_tag(scope, tag, kind, 0);
struct cache_ref ref = scope_ref->ref; struct cache_ref ref = scope_ref->ref;
enum cache_entry_state state = atomic_i32_fetch(&ref.e->state); enum cache_entry_state state = atomic_i32_fetch(&ref.e->state);
@ -1026,20 +1026,20 @@ INTERNAL void *data_from_tag_internal(struct sprite_scope *scope, struct sprite_
struct sprite_texture *sprite_texture_from_tag_await(struct sprite_scope *scope, struct sprite_tag tag) struct sprite_texture *sprite_texture_from_tag_await(struct sprite_scope *scope, struct sprite_tag tag)
{ {
__prof; __prof;
return (struct sprite_texture *)data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_TEXTURE, true); return (struct sprite_texture *)data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_TEXTURE, 1);
} }
struct sprite_texture *sprite_texture_from_tag_async(struct sprite_scope *scope, struct sprite_tag tag) struct sprite_texture *sprite_texture_from_tag_async(struct sprite_scope *scope, struct sprite_tag tag)
{ {
__prof; __prof;
return (struct sprite_texture *)data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_TEXTURE, false); return (struct sprite_texture *)data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_TEXTURE, 0);
} }
void sprite_texture_from_tag_prefetch(struct sprite_scope *scope, struct sprite_tag tag) void sprite_texture_from_tag_prefetch(struct sprite_scope *scope, struct sprite_tag tag)
{ {
__prof; __prof;
data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_TEXTURE, false); data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_TEXTURE, 0);
} }
/* ========================== * /* ========================== *
@ -1049,19 +1049,19 @@ void sprite_texture_from_tag_prefetch(struct sprite_scope *scope, struct sprite_
struct sprite_sheet *sprite_sheet_from_tag_await(struct sprite_scope *scope, struct sprite_tag tag) struct sprite_sheet *sprite_sheet_from_tag_await(struct sprite_scope *scope, struct sprite_tag tag)
{ {
__prof; __prof;
return (struct sprite_sheet *)data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_SHEET, true); return (struct sprite_sheet *)data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_SHEET, 1);
} }
struct sprite_sheet *sprite_sheet_from_tag_async(struct sprite_scope *scope, struct sprite_tag tag) struct sprite_sheet *sprite_sheet_from_tag_async(struct sprite_scope *scope, struct sprite_tag tag)
{ {
__prof; __prof;
return (struct sprite_sheet *)data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_SHEET, false); return (struct sprite_sheet *)data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_SHEET, 0);
} }
void sprite_sheet_from_tag_prefetch(struct sprite_scope *scope, struct sprite_tag tag) void sprite_sheet_from_tag_prefetch(struct sprite_scope *scope, struct sprite_tag tag)
{ {
__prof; __prof;
data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_SHEET, false); data_from_tag_internal(scope, tag, CACHE_ENTRY_KIND_SHEET, 0);
} }
@ -1171,7 +1171,7 @@ INTERNAL void reload_if_exists(struct sprite_scope *scope, struct sprite_tag tag
{ {
struct cache_entry_hash hash = cache_entry_hash_from_tag_hash(tag.hash, kind); struct cache_entry_hash hash = cache_entry_hash_from_tag_hash(tag.hash, kind);
struct cache_bin *bin = &G.cache.bins[hash.v % CACHE_BINS_COUNT]; struct cache_bin *bin = &G.cache.bins[hash.v % CACHE_BINS_COUNT];
struct sprite_scope_cache_ref *existing_ref = NULL; struct sprite_scope_cache_ref *existing_ref = 0;
struct snc_lock bin_lock = snc_lock_s(&bin->mutex); struct snc_lock bin_lock = snc_lock_s(&bin->mutex);
{ {
existing_ref = cache_lookup(scope, hash, &bin_lock); existing_ref = cache_lookup(scope, hash, &bin_lock);
@ -1180,7 +1180,7 @@ INTERNAL void reload_if_exists(struct sprite_scope *scope, struct sprite_tag tag
if (existing_ref) { if (existing_ref) {
logf_info("Sprite resource file \"%F\" has changed for sprite [%F].", FMT_STR(tag.path), FMT_HEX(hash.v)); logf_info("Sprite resource file \"%F\" has changed for sprite [%F].", FMT_STR(tag.path), FMT_HEX(hash.v));
struct sprite_scope_cache_ref *scope_ref = cache_entry_from_tag(scope, tag, kind, true); struct sprite_scope_cache_ref *scope_ref = cache_entry_from_tag(scope, tag, kind, 1);
push_load_job(scope_ref->ref, tag); push_load_job(scope_ref->ref, tag);
} }
} }
@ -1235,7 +1235,7 @@ INTERNAL SORT_COMPARE_FUNC_DEF(evict_sort, arg_a, arg_b, udata)
INTERNAL SYS_JOB_DEF(sprite_evictor_job, _) INTERNAL SYS_JOB_DEF(sprite_evictor_job, _)
{ {
(UNUSED)_; (UNUSED)_;
b32 shutdown = false; b32 shutdown = 0;
while (!shutdown) { while (!shutdown) {
{ {
__profn("Sprite evictor cycle"); __profn("Sprite evictor cycle");
@ -1262,7 +1262,7 @@ INTERNAL SYS_JOB_DEF(sprite_evictor_job, _)
#if RESOURCE_RELOADING #if RESOURCE_RELOADING
b32 is_out_of_date = atomic_i32_fetch(&n->out_of_date); b32 is_out_of_date = atomic_i32_fetch(&n->out_of_date);
#else #else
b32 is_out_of_date = false; b32 is_out_of_date = 0;
#endif #endif
b32 is_old = cache_over_budget_threshold && ((cur_cycle - refcount.last_ref_cycle) > EVICTOR_GRACE_PERIOD_CYCLES); b32 is_old = cache_over_budget_threshold && ((cur_cycle - refcount.last_ref_cycle) > EVICTOR_GRACE_PERIOD_CYCLES);
if (is_old || is_out_of_date) { if (is_old || is_out_of_date) {
@ -1290,14 +1290,14 @@ INTERNAL SYS_JOB_DEF(sprite_evictor_job, _)
/* Sort evict nodes */ /* Sort evict nodes */
{ {
__profn("Evictor sort"); __profn("Evictor sort");
merge_sort(evict_array, evict_array_count, sizeof(*evict_array), evict_sort, NULL); merge_sort(evict_array, evict_array_count, sizeof(*evict_array), evict_sort, 0);
} }
/* Remove evictable nodes from cache until under budget */ /* Remove evictable nodes from cache until under budget */
struct evict_node *first_evicted = NULL; struct evict_node *first_evicted = 0;
{ {
__profn("Evictor cache removal"); __profn("Evictor cache removal");
b32 stop_evicting = false; b32 stop_evicting = 0;
for (u64 i = 0; i < evict_array_count && !stop_evicting; ++i) { for (u64 i = 0; i < evict_array_count && !stop_evicting; ++i) {
struct evict_node *en = &evict_array[i]; struct evict_node *en = &evict_array[i];
struct cache_bin *bin = en->cache_bin; struct cache_bin *bin = en->cache_bin;
@ -1332,7 +1332,7 @@ INTERNAL SYS_JOB_DEF(sprite_evictor_job, _)
first_evicted = en; first_evicted = en;
} else { } else {
/* Cache is no longer over budget or force evicting, stop iteration */ /* Cache is no longer over budget or force evicting, stop iteration */
stop_evicting = true; stop_evicting = 1;
} }
} }
snc_unlock(&bin_lock); snc_unlock(&bin_lock);

View File

@ -100,10 +100,10 @@ struct sprite_sheet_span {
}; };
struct sprite_sheet_slice { struct sprite_sheet_slice {
/* If true, this slice was not copied over from another frame in the sprite sheet */ /* If 1, this slice was not copied over from another frame in the sprite sheet */
b32 original; b32 original;
/* If true, the slice has a corresponding '.ray' slice affecting the 'dir' fields */ /* If 1, the slice has a corresponding '.ray' slice affecting the 'dir' fields */
b32 has_ray; b32 has_ray;
/* Values are in the range -0.5 (top / left edge) -> +0.5 (bottom / right edge) */ /* Values are in the range -0.5 (top / left edge) -> +0.5 (bottom / right edge) */

View File

@ -5,18 +5,15 @@
#include "uni.h" #include "uni.h"
/* /*
* NOTE: Strings should be considered ~IMMUTABLE~ * NOTE: Strings should be considered ~IMMUTABLE~ slices
* *
* All string functions return a new string as a result. Any strings used as * All string functions return a new string slice as a result. Any strings used
* an argument (IE: in string_cat) will not be modified. * as an argument (IE: in string_cat) will not be modified.
* *
* Use the LIT macro to create strings from string literals * Use the LIT macro to create strings from string literals
* *
* NOTE: It is valid for a string to have len 0 but a non-NULL text pointer. * NOTE: It is valid for a string to have len 0 but a non-NULL text pointer.
* Always check string.len rather than string.text for string presence. * Always check string len rather than text for string presence.
* (If we want to change this behavior then we need to check for length = 0 in
* our functions that return a pointer from arena_push_dry, or guarantee that
* all functions returning an arena_push_dry do allocate.)
*/ */
/* ========================== * /* ========================== *
@ -319,16 +316,16 @@ struct string string_lower(struct arena *arena, struct string str)
b32 string_eq(struct string str1, struct string str2) b32 string_eq(struct string str1, struct string str2)
{ {
b32 eq = true; b32 eq = 1;
if (str1.len == str2.len) { if (str1.len == str2.len) {
for (u64 i = 0; i < str1.len; ++i) { for (u64 i = 0; i < str1.len; ++i) {
if (str1.text[i] != str2.text[i]) { if (str1.text[i] != str2.text[i]) {
eq = false; eq = 0;
break; break;
} }
} }
} else { } else {
eq = false; eq = 0;
} }
return eq; return eq;
} }
@ -355,23 +352,23 @@ i32 string_cmp(struct string str1, struct string str2)
b32 string_contains(struct string str, struct string substring) b32 string_contains(struct string str, struct string substring)
{ {
if (substring.len > str.len) { if (substring.len > str.len) {
return false; return 0;
} }
for (u64 i = 0; i <= str.len - substring.len; ++i) { for (u64 i = 0; i <= str.len - substring.len; ++i) {
b32 match = true; b32 match = 1;
for (u64 j = 0; j < substring.len; ++j) { for (u64 j = 0; j < substring.len; ++j) {
if (str.text[i + j] != substring.text[j]) { if (str.text[i + j] != substring.text[j]) {
match = false; match = 0;
break; break;
} }
} }
if (match) { if (match) {
return true; return 1;
} }
} }
return false; return 0;
} }
b32 string_starts_with(struct string str, struct string substring) b32 string_starts_with(struct string str, struct string substring)
@ -379,12 +376,12 @@ b32 string_starts_with(struct string str, struct string substring)
if (str.len >= substring.len) { if (str.len >= substring.len) {
for (u64 i = 0; i < substring.len; ++i) { for (u64 i = 0; i < substring.len; ++i) {
if (str.text[i] != substring.text[i]) { if (str.text[i] != substring.text[i]) {
return false; return 0;
} }
} }
return true; return 1;
} }
return false; return 0;
} }
b32 string_ends_with(struct string str, struct string substring) b32 string_ends_with(struct string str, struct string substring)
@ -393,12 +390,12 @@ b32 string_ends_with(struct string str, struct string substring)
u64 start = str.len - substring.len; u64 start = str.len - substring.len;
for (u64 i = 0; i < substring.len; ++i) { for (u64 i = 0; i < substring.len; ++i) {
if (str.text[start + i] != substring.text[i]) { if (str.text[start + i] != substring.text[i]) {
return false; return 0;
} }
} }
return true; return 1;
} }
return false; return 0;
} }
/* ========================== * /* ========================== *
@ -444,7 +441,7 @@ struct string string_formatv(struct arena *arena, struct string fmt, va_list arg
u8 *final_text = arena_push_dry(arena, u8); u8 *final_text = arena_push_dry(arena, u8);
u8 *end = fmt.text + fmt.len; u8 *end = fmt.text + fmt.len;
b32 no_more_args = false; b32 no_more_args = 0;
for (u8 *c = fmt.text; c < end; ++c) { for (u8 *c = fmt.text; c < end; ++c) {
u8 *next = ((c + 1) < end) ? (c + 1) : (u8 *)"\0"; u8 *next = ((c + 1) < end) ? (c + 1) : (u8 *)"\0";
@ -498,16 +495,16 @@ struct string string_formatv(struct arena *arena, struct string fmt, va_list arg
case FMT_TYPE_END: { case FMT_TYPE_END: {
/* Unexpected end. Not enough FMT args passed to function. */ /* Unexpected end. Not enough FMT args passed to function. */
ASSERT(false); ASSERT(0);
parsed_str = string_copy(arena, LIT("<?>")); parsed_str = string_copy(arena, LIT("<?>"));
no_more_args = true; no_more_args = 1;
} break; } break;
default: { default: {
/* Unknown format type */ /* Unknown format type */
ASSERT(false); ASSERT(0);
parsed_str = string_copy(arena, LIT("<?>")); parsed_str = string_copy(arena, LIT("<?>"));
no_more_args = true; no_more_args = 1;
} break; } break;
} }
/* Update final string len / start */ /* Update final string len / start */
@ -557,7 +554,7 @@ struct string_codepoint_iter string_codepoint_iter_begin(struct string str)
}; };
} }
/* Returns false if done iterating */ /* Returns 0 if done iterating */
b32 string_codepoint_iter_next(struct string_codepoint_iter *iter) b32 string_codepoint_iter_next(struct string_codepoint_iter *iter)
{ {
if (iter->pos < iter->src.len) { if (iter->pos < iter->src.len) {
@ -565,9 +562,9 @@ b32 string_codepoint_iter_next(struct string_codepoint_iter *iter)
struct uni_decode_utf8_result decoded = uni_decode_utf8(str_remaining); struct uni_decode_utf8_result decoded = uni_decode_utf8(str_remaining);
iter->pos += decoded.advance8; iter->pos += decoded.advance8;
iter->codepoint = decoded.codepoint; iter->codepoint = decoded.codepoint;
return true; return 1;
} else { } else {
return false; return 0;
} }
} }

View File

@ -374,7 +374,7 @@ struct sys_thread *sys_thread_alloc(
); );
void sys_thread_wait_release(struct sys_thread *thread); void sys_thread_wait_release(struct sys_thread *thread);
b32 sys_thread_try_release(struct sys_thread *thread, f32 timeout_seconds); /* Returns false if the thread could not release in specified timeout (e.g. because it is still running) */ b32 sys_thread_try_release(struct sys_thread *thread, f32 timeout_seconds); /* Returns 0 if the thread could not release in specified timeout (e.g. because it is still running) */
void sys_thread_force_release(struct sys_thread *thread); void sys_thread_force_release(struct sys_thread *thread);
/* Gets the current executing thread's ID */ /* Gets the current executing thread's ID */

View File

@ -399,7 +399,7 @@ void sys_wait(void *addr, void *cmp, u32 size, i64 timeout_ns)
timeout_ms = timeout_ns / 1000000; timeout_ms = timeout_ns / 1000000;
timeout_ms += (timeout_ms == 0) * math_fsign(timeout_ns); timeout_ms += (timeout_ms == 0) * math_fsign(timeout_ns);
} }
if (addr == NULL) { if (addr == 0) {
Sleep(timeout_ms); Sleep(timeout_ms);
} else { } else {
WaitOnAddress(addr, cmp, size, timeout_ms); WaitOnAddress(addr, cmp, size, timeout_ms);
@ -436,11 +436,11 @@ void sys_wake_all(void *addr)
u64 wait_addr_bin_index = (u64)addr % NUM_WAIT_ADDR_BINS; u64 wait_addr_bin_index = (u64)addr % NUM_WAIT_ADDR_BINS;
struct wait_bin *wait_addr_bin = &G.wait_addr_bins[wait_addr_bin_index]; struct wait_bin *wait_addr_bin = &G.wait_addr_bins[wait_addr_bin_index];
struct wait_list *wait_addr_list = NULL; struct wait_list *wait_addr_list = 0;
/* Get list of waiters */ /* Get list of waiters */
i32 num_waiters = 0; i32 num_waiters = 0;
struct fiber **waiters = NULL; struct fiber **waiters = 0;
{ {
while (atomic_i32_fetch_test_set(&wait_addr_bin->lock, 0, 1) != 0) ix_pause(); while (atomic_i32_fetch_test_set(&wait_addr_bin->lock, 0, 1) != 0) ix_pause();
{ {
@ -474,7 +474,7 @@ void sys_wake_all(void *addr)
if (wait_time != 0) while (atomic_i32_fetch_test_set(&wait_time_bin->lock, 0, 1) != 0) ix_pause(); if (wait_time != 0) while (atomic_i32_fetch_test_set(&wait_time_bin->lock, 0, 1) != 0) ix_pause();
{ {
/* Search for wait time list */ /* Search for wait time list */
struct wait_list *wait_time_list = NULL; struct wait_list *wait_time_list = 0;
if (wait_time != 0) { if (wait_time != 0) {
for (struct wait_list *tmp = wait_time_bin->first_wait_list; tmp && !wait_time_list; tmp = tmp->next_in_bin) { for (struct wait_list *tmp = wait_time_bin->first_wait_list; tmp && !wait_time_list; tmp = tmp->next_in_bin) {
if (tmp->value == (u64)wait_time) { if (tmp->value == (u64)wait_time) {
@ -566,7 +566,7 @@ void sys_wake_all(void *addr)
struct job_queue *queue = &G.job_queues[queue_kind]; struct job_queue *queue = &G.job_queues[queue_kind];
tm_lock(&queue->lock); tm_lock(&queue->lock);
{ {
struct job_info *info = NULL; struct job_info *info = 0;
if (queue->first_free) { if (queue->first_free) {
info = queue->first_free; info = queue->first_free;
queue->first_free = info->next; queue->first_free = info->next;
@ -622,8 +622,8 @@ INTERNAL void job_fiber_entry(void *id_ptr);
INTERNAL struct fiber *fiber_alloc(enum fiber_kind kind) INTERNAL struct fiber *fiber_alloc(enum fiber_kind kind)
{ {
i16 fiber_id = 0; i16 fiber_id = 0;
struct fiber *fiber = NULL; struct fiber *fiber = 0;
char *new_name_cstr = NULL; char *new_name_cstr = 0;
{ {
tm_lock(&G.fibers_lock); tm_lock(&G.fibers_lock);
{ {
@ -642,7 +642,7 @@ INTERNAL struct fiber *fiber_alloc(enum fiber_kind kind)
} }
tm_unlock(&G.fibers_lock); tm_unlock(&G.fibers_lock);
} }
if (new_name_cstr != NULL) { if (new_name_cstr != 0) {
fiber->id = fiber_id; fiber->id = fiber_id;
/* Id to ASCII */ /* Id to ASCII */
@ -713,7 +713,7 @@ INTERNAL void fiber_release(struct fiber *fiber, i16 fiber_id)
FORCE_INLINE struct fiber *fiber_from_id(i16 id) FORCE_INLINE struct fiber *fiber_from_id(i16 id)
{ {
if (id <= 0) { if (id <= 0) {
return NULL; return 0;
} else { } else {
return &G.fibers[id]; return &G.fibers[id];
} }
@ -740,7 +740,7 @@ void sys_run(i32 count, sys_job_func *func, void *sig, enum sys_priority priorit
struct job_queue *queue = &G.job_queues[queue_kind]; struct job_queue *queue = &G.job_queues[queue_kind];
tm_lock(&queue->lock); tm_lock(&queue->lock);
{ {
struct job_info *info = NULL; struct job_info *info = 0;
if (queue->first_free) { if (queue->first_free) {
info = queue->first_free; info = queue->first_free;
queue->first_free = info->next; queue->first_free = info->next;
@ -806,7 +806,7 @@ INTERNAL void job_fiber_entry(void *id_ptr)
i16 id = (i32)(i64)id_ptr; i16 id = (i32)(i64)id_ptr;
struct fiber *fiber = fiber_from_id(id); struct fiber *fiber = fiber_from_id(id);
__prof_fiber_enter(fiber->name_cstr, PROF_THREAD_GROUP_FIBERS + fiber->id); __prof_fiber_enter(fiber->name_cstr, PROF_THREAD_GROUP_FIBERS + fiber->id);
while (true) { while (1) {
/* Run job */ /* Run job */
{ {
//__profn("Run job"); //__profn("Run job");
@ -855,7 +855,7 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
/* TODO: Heuristic pinning */ /* TODO: Heuristic pinning */
/* TODO: Pin non-worker threads to other cores */ /* TODO: Pin non-worker threads to other cores */
HANDLE thread_handle = GetCurrentThread(); HANDLE thread_handle = GetCurrentThread();
b32 success = false; b32 success = 0;
(UNUSED)success; (UNUSED)success;
i32 priority = THREAD_PRIORITY_TIME_CRITICAL; i32 priority = THREAD_PRIORITY_TIME_CRITICAL;
@ -874,8 +874,8 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
queues[i] = &G.job_queues[i]; queues[i] = &G.job_queues[i];
} }
struct fiber *job_fiber = NULL; struct fiber *job_fiber = 0;
b32 shutdown = false; b32 shutdown = 0;
while (!shutdown) { while (!shutdown) {
/* Pull job from queue */ /* Pull job from queue */
enum sys_priority job_priority = 0; enum sys_priority job_priority = 0;
@ -896,7 +896,7 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
job_priority = job_priority_from_queue_kind(queue->kind); job_priority = job_priority_from_queue_kind(queue->kind);
while (info && !job_func) { while (info && !job_func) {
struct job_info *next = info->next; struct job_info *next = info->next;
b32 dequeue = false; b32 dequeue = 0;
if (info->fiber_id <= 0) { if (info->fiber_id <= 0) {
job_id = info->num_dispatched++; job_id = info->num_dispatched++;
if (job_id < info->count) { if (job_id < info->count) {
@ -907,7 +907,7 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
job_counter = info->counter; job_counter = info->counter;
if (job_id == (info->count - 1)) { if (job_id == (info->count - 1)) {
/* We're picking up the last dispatch, so dequeue the job */ /* We're picking up the last dispatch, so dequeue the job */
dequeue = true; dequeue = 1;
} }
} }
} else { } else {
@ -918,11 +918,11 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
job_func = info->func; job_func = info->func;
job_sig = info->sig; job_sig = info->sig;
job_counter = info->counter; job_counter = info->counter;
dequeue = true; dequeue = 1;
} }
if (dequeue) { if (dequeue) {
if (!next) { if (!next) {
queue->last = NULL; queue->last = 0;
} }
queue->first = next; queue->first = next;
info->next = queue->first_free; info->next = queue->first_free;
@ -961,7 +961,7 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
job_fiber->job_counter = job_counter; job_fiber->job_counter = job_counter;
job_fiber->parent_id = worker_fiber_id; job_fiber->parent_id = worker_fiber_id;
job_fiber->yield_param = &yield; job_fiber->yield_param = &yield;
b32 done = false; b32 done = 0;
while (!done) { while (!done) {
job_fiber_resume(job_fiber); job_fiber_resume(job_fiber);
switch (yield.kind) { switch (yield.kind) {
@ -1002,7 +1002,7 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
case 2: cancel_wait = (u16)_InterlockedCompareExchange16(wait_addr, 0, 0) != *(u16 *)wait_cmp; break; case 2: cancel_wait = (u16)_InterlockedCompareExchange16(wait_addr, 0, 0) != *(u16 *)wait_cmp; break;
case 4: cancel_wait = (u32)_InterlockedCompareExchange(wait_addr, 0, 0) != *(u32 *)wait_cmp; break; case 4: cancel_wait = (u32)_InterlockedCompareExchange(wait_addr, 0, 0) != *(u32 *)wait_cmp; break;
case 8: cancel_wait = (u64)_InterlockedCompareExchange64(wait_addr, 0, 0) != *(u64 *)wait_cmp; break; case 8: cancel_wait = (u64)_InterlockedCompareExchange64(wait_addr, 0, 0) != *(u64 *)wait_cmp; break;
default: cancel_wait = true; ASSERT(false); break; /* Invalid wait size */ default: cancel_wait = 1; ASSERT(0); break; /* Invalid wait size */
} }
} }
if (wait_time != 0 && !cancel_wait) { if (wait_time != 0 && !cancel_wait) {
@ -1011,7 +1011,7 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
if (!cancel_wait) { if (!cancel_wait) {
if (wait_addr != 0) { if (wait_addr != 0) {
/* Search for wait addr list in bin */ /* Search for wait addr list in bin */
struct wait_list *wait_addr_list = NULL; struct wait_list *wait_addr_list = 0;
for (struct wait_list *tmp = wait_addr_bin->first_wait_list; tmp && !wait_addr_list; tmp = tmp->next_in_bin) { for (struct wait_list *tmp = wait_addr_bin->first_wait_list; tmp && !wait_addr_list; tmp = tmp->next_in_bin) {
if (tmp->value == (u64)wait_addr) { if (tmp->value == (u64)wait_addr) {
wait_addr_list = tmp; wait_addr_list = tmp;
@ -1052,7 +1052,7 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
} }
if (wait_time != 0) { if (wait_time != 0) {
/* Search for wait time list in bin */ /* Search for wait time list in bin */
struct wait_list *wait_time_list = NULL; struct wait_list *wait_time_list = 0;
for (struct wait_list *tmp = wait_time_bin->first_wait_list; tmp && !wait_time_list; tmp = tmp->next_in_bin) { for (struct wait_list *tmp = wait_time_bin->first_wait_list; tmp && !wait_time_list; tmp = tmp->next_in_bin) {
if (tmp->value == (u64)wait_time) { if (tmp->value == (u64)wait_time) {
wait_time_list = tmp; wait_time_list = tmp;
@ -1093,8 +1093,8 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
} }
/* Pop worker's job fiber */ /* Pop worker's job fiber */
job_fiber = NULL; job_fiber = 0;
done = true; done = 1;
} }
} }
if (wait_time != 0) atomic_i32_fetch_set(&wait_time_bin->lock, 0); if (wait_time != 0) atomic_i32_fetch_set(&wait_time_bin->lock, 0);
@ -1107,7 +1107,7 @@ INTERNAL SYS_THREAD_DEF(job_worker_entry, worker_ctx_arg)
if (job_counter) { if (job_counter) {
snc_counter_add(job_counter, -1); snc_counter_add(job_counter, -1);
} }
done = true; done = 1;
} break; } break;
} }
} }
@ -1148,7 +1148,7 @@ INTERNAL SYS_THREAD_DEF(job_scheduler_entry, _)
struct arena_temp scratch = scratch_begin_no_conflict(); struct arena_temp scratch = scratch_begin_no_conflict();
/* Create high resolution timer */ /* Create high resolution timer */
HANDLE timer = CreateWaitableTimerExW(NULL, NULL, CREATE_WAITABLE_TIMER_HIGH_RESOLUTION, TIMER_ALL_ACCESS); HANDLE timer = CreateWaitableTimerExW(0, 0, CREATE_WAITABLE_TIMER_HIGH_RESOLUTION, TIMER_ALL_ACCESS);
if (!timer) { if (!timer) {
sys_panic(LIT("Failed to create high resolution timer")); sys_panic(LIT("Failed to create high resolution timer"));
} }
@ -1171,7 +1171,7 @@ INTERNAL SYS_THREAD_DEF(job_scheduler_entry, _)
//due.QuadPart = -32000; //due.QuadPart = -32000;
//due.QuadPart = -12000; //due.QuadPart = -12000;
//due.QuadPart = -8000; //due.QuadPart = -8000;
SetWaitableTimerEx(timer, &due, 0, NULL, NULL, NULL, 0); SetWaitableTimerEx(timer, &due, 0, 0, 0, 0, 0);
WaitForSingleObject(timer, INFINITE); WaitForSingleObject(timer, INFINITE);
} }
@ -1199,11 +1199,11 @@ INTERNAL SYS_THREAD_DEF(job_scheduler_entry, _)
struct arena_temp temp = arena_temp_begin(scratch.arena); struct arena_temp temp = arena_temp_begin(scratch.arena);
u64 wait_time_bin_index = (u64)current_cycle % NUM_WAIT_TIME_BINS; u64 wait_time_bin_index = (u64)current_cycle % NUM_WAIT_TIME_BINS;
struct wait_bin *wait_time_bin = &G.wait_time_bins[wait_time_bin_index]; struct wait_bin *wait_time_bin = &G.wait_time_bins[wait_time_bin_index];
struct wait_list *wait_time_list = NULL; struct wait_list *wait_time_list = 0;
/* Build list of waiters to resume */ /* Build list of waiters to resume */
i32 num_waiters = 0; i32 num_waiters = 0;
struct fiber **waiters = NULL; struct fiber **waiters = 0;
{ {
while (atomic_i32_fetch_test_set(&wait_time_bin->lock, 0, 1) != 0) ix_pause(); while (atomic_i32_fetch_test_set(&wait_time_bin->lock, 0, 1) != 0) ix_pause();
{ {
@ -1239,7 +1239,7 @@ INTERNAL SYS_THREAD_DEF(job_scheduler_entry, _)
if (wait_addr != 0) while (atomic_i32_fetch_test_set(&wait_addr_bin->lock, 0, 1) != 0) ix_pause(); if (wait_addr != 0) while (atomic_i32_fetch_test_set(&wait_addr_bin->lock, 0, 1) != 0) ix_pause();
{ {
/* Search for wait addr list */ /* Search for wait addr list */
struct wait_list *wait_addr_list = NULL; struct wait_list *wait_addr_list = 0;
if (wait_addr != 0) { if (wait_addr != 0) {
for (struct wait_list *tmp = wait_addr_bin->first_wait_list; tmp && !wait_addr_list; tmp = tmp->next_in_bin) { for (struct wait_list *tmp = wait_addr_bin->first_wait_list; tmp && !wait_addr_list; tmp = tmp->next_in_bin) {
if (tmp->value == (u64)wait_addr) { if (tmp->value == (u64)wait_addr) {
@ -1336,7 +1336,7 @@ INTERNAL SYS_THREAD_DEF(job_scheduler_entry, _)
struct job_queue *queue = &G.job_queues[queue_kind]; struct job_queue *queue = &G.job_queues[queue_kind];
tm_lock(&queue->lock); tm_lock(&queue->lock);
{ {
struct job_info *info = NULL; struct job_info *info = 0;
if (queue->first_free) { if (queue->first_free) {
info = queue->first_free; info = queue->first_free;
queue->first_free = info->next; queue->first_free = info->next;
@ -1389,7 +1389,7 @@ INTERNAL SYS_THREAD_DEF(test_entry, _)
/* Start scheduler */ /* Start scheduler */
atomic_i64_fetch_set(&G.current_scheduler_cycle_period_ns.v, DEFAULT_SCHEDULER_CYCLE_PERIOD_NS); atomic_i64_fetch_set(&G.current_scheduler_cycle_period_ns.v, DEFAULT_SCHEDULER_CYCLE_PERIOD_NS);
struct sys_thread *scheduler_thread = sys_thread_alloc(job_scheduler_entry, NULL, LIT("Scheduler thread"), PROF_THREAD_GROUP_SCHEDULER); struct sys_thread *scheduler_thread = sys_thread_alloc(job_scheduler_entry, 0, LIT("Scheduler thread"), PROF_THREAD_GROUP_SCHEDULER);
/* Start workers */ /* Start workers */
//G.num_worker_threads = 1; //G.num_worker_threads = 1;
@ -1515,7 +1515,7 @@ INTERNAL void win32_init_vk_btn_table(void)
void *sys_memory_reserve(u64 size) void *sys_memory_reserve(u64 size)
{ {
void *ptr = VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_NOACCESS); void *ptr = VirtualAlloc(0, size, MEM_RESERVE, PAGE_NOACCESS);
return ptr; return ptr;
} }
@ -1613,12 +1613,12 @@ INTERNAL struct string string_from_win32_path(struct arena *arena, wchar_t *src)
struct string sys_get_write_path(struct arena *arena) struct string sys_get_write_path(struct arena *arena)
{ {
u16 *p = NULL; u16 *p = 0;
/* TODO: cache this? */ /* TODO: cache this? */
HRESULT res = SHGetKnownFolderPath( HRESULT res = SHGetKnownFolderPath(
&FOLDERID_LocalAppData, &FOLDERID_LocalAppData,
0, 0,
NULL, 0,
&p &p
); );
struct string path = ZI; struct string path = ZI;
@ -1653,7 +1653,7 @@ void sys_mkdir(struct string path)
__prof; __prof;
struct arena_temp scratch = scratch_begin_no_conflict(); struct arena_temp scratch = scratch_begin_no_conflict();
wchar_t *path_wstr = wstr_from_string(scratch.arena, path); wchar_t *path_wstr = wstr_from_string(scratch.arena, path);
int err_code = SHCreateDirectory(NULL, path_wstr); int err_code = SHCreateDirectory(0, path_wstr);
struct string err = ZI; struct string err = ZI;
switch (err_code) { switch (err_code) {
case ERROR_BAD_PATHNAME: { case ERROR_BAD_PATHNAME: {
@ -1695,10 +1695,10 @@ struct sys_file sys_file_open_read(struct string path)
path_wstr, path_wstr,
GENERIC_READ, GENERIC_READ,
FILE_SHARE_READ, FILE_SHARE_READ,
NULL, 0,
OPEN_EXISTING, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, FILE_ATTRIBUTE_NORMAL,
NULL 0
); );
file.handle = (u64)handle; file.handle = (u64)handle;
file.valid = handle != INVALID_HANDLE_VALUE; file.valid = handle != INVALID_HANDLE_VALUE;
@ -1716,7 +1716,7 @@ struct sys_file sys_file_open_read_wait(struct string path)
wchar_t *path_wstr = wstr_from_string(scratch.arena, path); wchar_t *path_wstr = wstr_from_string(scratch.arena, path);
i32 delay_ms = 1; i32 delay_ms = 1;
HANDLE handle; HANDLE handle;
while ((handle = CreateFileW(path_wstr, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { while ((handle = CreateFileW(path_wstr, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) == INVALID_HANDLE_VALUE) {
if (GetLastError() == ERROR_SHARING_VIOLATION) { if (GetLastError() == ERROR_SHARING_VIOLATION) {
__profn("File share conflict delay"); __profn("File share conflict delay");
Sleep(delay_ms); Sleep(delay_ms);
@ -1745,10 +1745,10 @@ struct sys_file sys_file_open_write(struct string path)
path_wstr, path_wstr,
GENERIC_WRITE, GENERIC_WRITE,
0, 0,
NULL, 0,
CREATE_ALWAYS, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, FILE_ATTRIBUTE_NORMAL,
NULL 0
); );
file.handle = (u64)handle; file.handle = (u64)handle;
file.valid = handle != INVALID_HANDLE_VALUE; file.valid = handle != INVALID_HANDLE_VALUE;
@ -1768,10 +1768,10 @@ struct sys_file sys_file_open_append(struct string path)
path_wstr, path_wstr,
FILE_APPEND_DATA, FILE_APPEND_DATA,
FILE_SHARE_READ, FILE_SHARE_READ,
NULL, 0,
OPEN_ALWAYS, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, FILE_ATTRIBUTE_NORMAL,
NULL 0
); );
file.handle = (u64)handle; file.handle = (u64)handle;
file.valid = handle != INVALID_HANDLE_VALUE; file.valid = handle != INVALID_HANDLE_VALUE;
@ -1796,7 +1796,7 @@ struct string sys_file_read_all(struct arena *arena, struct sys_file file)
struct string s = { struct string s = {
.len = size, .len = size,
.text = NULL .text = 0
}; };
if (size > 0) { if (size > 0) {
@ -1808,8 +1808,8 @@ struct string sys_file_read_all(struct arena *arena, struct sys_file file)
(HANDLE)file.handle, (HANDLE)file.handle,
s.text, s.text,
(DWORD)s.len, (DWORD)s.len,
NULL, /* lpNumberOfBytesRead */ 0, /* lpNumberOfBytesRead */
NULL 0
); );
} }
@ -1834,8 +1834,8 @@ void sys_file_write(struct sys_file file, struct string data)
(HANDLE)file.handle, (HANDLE)file.handle,
data.text, data.text,
(DWORD)data.len, (DWORD)data.len,
NULL, /* lpNumberOfBytesWritten */ 0, /* lpNumberOfBytesWritten */
NULL 0
); );
} }
@ -1889,17 +1889,17 @@ struct sys_file_map sys_file_map_open_read(struct sys_file file)
struct sys_file_map map = ZI; struct sys_file_map map = ZI;
u64 size = sys_file_get_size(file); u64 size = sys_file_get_size(file);
u8 *base_ptr = NULL; u8 *base_ptr = 0;
HANDLE map_handle = 0; HANDLE map_handle = 0;
if (size > 0) { if (size > 0) {
map_handle = CreateFileMappingW( map_handle = CreateFileMappingW(
(HANDLE)file.handle, (HANDLE)file.handle,
NULL, 0,
PAGE_READONLY, PAGE_READONLY,
0, 0,
0, 0,
NULL 0
); );
if (map_handle != INVALID_HANDLE_VALUE) { if (map_handle != INVALID_HANDLE_VALUE) {
base_ptr = MapViewOfFile( base_ptr = MapViewOfFile(
@ -1909,7 +1909,7 @@ struct sys_file_map sys_file_map_open_read(struct sys_file file)
0, 0,
0 0
); );
if (base_ptr == NULL) { if (base_ptr == 0) {
/* Failed to create view */ /* Failed to create view */
CloseHandle(map_handle); CloseHandle(map_handle);
map_handle = INVALID_HANDLE_VALUE; map_handle = INVALID_HANDLE_VALUE;
@ -1921,7 +1921,7 @@ struct sys_file_map sys_file_map_open_read(struct sys_file file)
} }
map.handle = (u64)map_handle; map.handle = (u64)map_handle;
map.mapped_memory = STRING(size, base_ptr); map.mapped_memory = STRING(size, base_ptr);
map.valid = map_handle != INVALID_HANDLE_VALUE && base_ptr != NULL; map.valid = map_handle != INVALID_HANDLE_VALUE && base_ptr != 0;
return map; return map;
@ -1965,12 +1965,12 @@ b32 sys_file_filter_next(struct arena *arena, struct sys_file_filter *filter)
struct win32_file_filter *filter_internal = (struct win32_file_filter *)filter->handle; struct win32_file_filter *filter_internal = (struct win32_file_filter *)filter->handle;
WIN32_FIND_DATAW find_file_data = ZI; WIN32_FIND_DATAW find_file_data = ZI;
b32 found = false; b32 found = 0;
if (filter_internal->find_handle) { if (filter_internal->find_handle) {
found = FindNextFileW(filter_internal->find_handle, &find_file_data); found = FindNextFileW(filter_internal->find_handle, &find_file_data);
} else { } else {
filter_internal->find_handle = FindFirstFileExW(filter_internal->filter_wstr, FindExInfoStandard, &find_file_data, FindExSearchNameMatch, NULL, FIND_FIRST_EX_CASE_SENSITIVE | FIND_FIRST_EX_LARGE_FETCH); filter_internal->find_handle = FindFirstFileExW(filter_internal->filter_wstr, FindExInfoStandard, &find_file_data, FindExSearchNameMatch, 0, FIND_FIRST_EX_CASE_SENSITIVE | FIND_FIRST_EX_LARGE_FETCH);
found = filter_internal->find_handle != INVALID_HANDLE_VALUE; found = filter_internal->find_handle != INVALID_HANDLE_VALUE;
} }
@ -2011,7 +2011,7 @@ struct sys_watch *sys_watch_alloc(struct string dir_path)
{ {
struct arena_temp scratch = scratch_begin_no_conflict(); struct arena_temp scratch = scratch_begin_no_conflict();
struct win32_watch *w32_watch = NULL; struct win32_watch *w32_watch = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.watches_mutex); struct snc_lock lock = snc_lock_e(&G.watches_mutex);
{ {
@ -2031,13 +2031,13 @@ struct sys_watch *sys_watch_alloc(struct string dir_path)
dir_path_wstr, dir_path_wstr,
FILE_LIST_DIRECTORY, FILE_LIST_DIRECTORY,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL, 0,
OPEN_EXISTING, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED,
NULL 0
); );
w32_watch->wake_handle = CreateEventW(NULL, FALSE, FALSE, NULL); w32_watch->wake_handle = CreateEventW(0, 0, 0, 0);
scratch_end(scratch); scratch_end(scratch);
return (struct sys_watch *)w32_watch; return (struct sys_watch *)w32_watch;
@ -2068,20 +2068,20 @@ struct sys_watch_info_list sys_watch_wait(struct arena *arena, struct sys_watch
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_LAST_WRITE |
FILE_NOTIFY_CHANGE_CREATION; FILE_NOTIFY_CHANGE_CREATION;
b32 done = false; b32 done = 0;
while (!done) { while (!done) {
OVERLAPPED ov = ZI; OVERLAPPED ov = ZI;
ov.hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ov.hEvent = CreateEventW(0, 0, 0, 0);
ASSERT(ov.hEvent); ASSERT(ov.hEvent);
BOOL success = ReadDirectoryChangesW(w32_watch->dir_handle, BOOL success = ReadDirectoryChangesW(w32_watch->dir_handle,
w32_watch->results_buff, w32_watch->results_buff,
countof(w32_watch->results_buff), countof(w32_watch->results_buff),
true, 1,
filter, filter,
NULL, 0,
&ov, &ov,
NULL); 0);
(UNUSED)success; (UNUSED)success;
ASSERT(success); ASSERT(success);
@ -2089,7 +2089,7 @@ struct sys_watch_info_list sys_watch_wait(struct arena *arena, struct sys_watch
ov.hEvent, ov.hEvent,
w32_watch->wake_handle w32_watch->wake_handle
}; };
DWORD wait_res = WaitForMultipleObjects(2, handles, FALSE, INFINITE); DWORD wait_res = WaitForMultipleObjects(2, handles, 0, INFINITE);
if (wait_res == WAIT_OBJECT_0) { if (wait_res == WAIT_OBJECT_0) {
i64 offset = 0; i64 offset = 0;
@ -2150,16 +2150,16 @@ struct sys_watch_info_list sys_watch_wait(struct arena *arena, struct sys_watch
} }
if (res->NextEntryOffset == 0) { if (res->NextEntryOffset == 0) {
done = true; done = 1;
} else { } else {
offset += res->NextEntryOffset; offset += res->NextEntryOffset;
} }
} }
} else if (wait_res == WAIT_OBJECT_0 + 1) { } else if (wait_res == WAIT_OBJECT_0 + 1) {
ResetEvent(w32_watch->wake_handle); ResetEvent(w32_watch->wake_handle);
done = true; done = 1;
} else { } else {
ASSERT(false); ASSERT(0);
} }
} }
@ -2230,14 +2230,14 @@ INTERNAL HWND win32_create_window(struct win32_window *window)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, 0,
NULL, 0,
G.window_class.hInstance, G.window_class.hInstance,
NULL 0
); );
/* Dark mode */ /* Dark mode */
BOOL dark_mode = true; BOOL dark_mode = 1;
DwmSetWindowAttribute(hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, (LPCVOID)&dark_mode, sizeof(dark_mode)); DwmSetWindowAttribute(hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, (LPCVOID)&dark_mode, sizeof(dark_mode));
/* Set window as userdata */ /* Set window as userdata */
@ -2275,12 +2275,12 @@ INTERNAL SYS_THREAD_DEF(window_thread_entry_point, arg)
/* Hide cursor */ /* Hide cursor */
if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_HIDE) { if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_HIDE) {
while(ShowCursor(false) >= 0); while(ShowCursor(0) >= 0);
} }
/* Show cursor */ /* Show cursor */
if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_SHOW) { if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_SHOW) {
while(ShowCursor(true) < 0); while(ShowCursor(1) < 0);
} }
/* Update position */ /* Update position */
@ -2293,7 +2293,7 @@ INTERNAL SYS_THREAD_DEF(window_thread_entry_point, arg)
/* Stop clipping cursor */ /* Stop clipping cursor */
if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_DISABLE_CLIP) { if (cursor_flags & WIN32_WINDOW_CURSOR_SET_FLAG_DISABLE_CLIP) {
ClipCursor(NULL); ClipCursor(0);
} }
/* Clip cursor in window window */ /* Clip cursor in window window */
@ -2334,7 +2334,7 @@ INTERNAL SYS_THREAD_DEF(window_thread_entry_point, arg)
INTERNAL struct win32_window *win32_window_alloc(void) INTERNAL struct win32_window *win32_window_alloc(void)
{ {
struct win32_window *window = NULL; struct win32_window *window = 0;
{ {
struct snc_lock lock = snc_lock_e(&G.windows_mutex); struct snc_lock lock = snc_lock_e(&G.windows_mutex);
if (G.first_free_window) { if (G.first_free_window) {
@ -2475,7 +2475,7 @@ INTERNAL void win32_update_window_from_settings(struct win32_window *window, str
.right = settings->floating_x + settings->floating_width, .right = settings->floating_x + settings->floating_width,
.bottom = settings->floating_y + settings->floating_height .bottom = settings->floating_y + settings->floating_height
}; };
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, false); AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, 0);
} }
WINDOWPLACEMENT wp = { WINDOWPLACEMENT wp = {
@ -2516,7 +2516,7 @@ INTERNAL LRESULT CALLBACK win32_window_proc(HWND hwnd, UINT msg, WPARAM wparam,
} }
LRESULT result = 0; LRESULT result = 0;
b32 is_release = false; b32 is_release = 0;
switch (msg) { switch (msg) {
case WM_CLOSE: case WM_CLOSE:
case WM_DESTROY: { case WM_DESTROY: {
@ -2546,7 +2546,7 @@ INTERNAL LRESULT CALLBACK win32_window_proc(HWND hwnd, UINT msg, WPARAM wparam,
case WM_KEYUP: case WM_KEYUP:
case WM_KEYDOWN: { case WM_KEYDOWN: {
WORD vk_code = LOWORD(wparam); WORD vk_code = LOWORD(wparam);
b32 is_repeat = false; b32 is_repeat = 0;
enum sys_event_kind event_kind = SYS_EVENT_KIND_NONE; enum sys_event_kind event_kind = SYS_EVENT_KIND_NONE;
if (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) { if (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) {
@ -2620,7 +2620,7 @@ INTERNAL LRESULT CALLBACK win32_window_proc(HWND hwnd, UINT msg, WPARAM wparam,
case WM_RBUTTONUP: case WM_RBUTTONUP:
case WM_XBUTTONUP: { case WM_XBUTTONUP: {
ReleaseCapture(); ReleaseCapture();
is_release = true; is_release = 1;
} FALLTHROUGH; } FALLTHROUGH;
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
case WM_MBUTTONDOWN: case WM_MBUTTONDOWN:
@ -2689,7 +2689,7 @@ INTERNAL LRESULT CALLBACK win32_window_proc(HWND hwnd, UINT msg, WPARAM wparam,
/* Read raw input buffer */ /* Read raw input buffer */
UINT buff_size; UINT buff_size;
GetRawInputData((HRAWINPUT)lparam, RID_INPUT, NULL, &buff_size, sizeof(RAWINPUTHEADER)); GetRawInputData((HRAWINPUT)lparam, RID_INPUT, 0, &buff_size, sizeof(RAWINPUTHEADER));
u8 *buff = arena_push_array(scratch.arena, u8, buff_size); u8 *buff = arena_push_array(scratch.arena, u8, buff_size);
if (GetRawInputData((HRAWINPUT)lparam, RID_INPUT, buff, &buff_size, sizeof(RAWINPUTHEADER)) != buff_size) { if (GetRawInputData((HRAWINPUT)lparam, RID_INPUT, buff, &buff_size, sizeof(RAWINPUTHEADER)) != buff_size) {
logf_error("GetRawInputData did not return correct size"); logf_error("GetRawInputData did not return correct size");
@ -2764,7 +2764,7 @@ void sys_window_unregister_event_callback(struct sys_window *sys_window, sys_win
struct snc_lock lock = snc_lock_e(&window->event_callbacks_mutex); struct snc_lock lock = snc_lock_e(&window->event_callbacks_mutex);
{ {
u64 count = window->event_callbacks_count; u64 count = window->event_callbacks_count;
sys_window_event_callback_func *last = count > 0 ? window->event_callbacks[count - 1] : NULL; sys_window_event_callback_func *last = count > 0 ? window->event_callbacks[count - 1] : 0;
for (u64 i = 0; i < window->event_callbacks_count; ++i) { for (u64 i = 0; i < window->event_callbacks_count; ++i) {
if (window->event_callbacks[i] == func) { if (window->event_callbacks[i] == func) {
@ -2879,7 +2879,7 @@ void sys_window_cursor_disable_clip(struct sys_window *sys_window)
INTERNAL struct win32_thread *win32_thread_alloc(void) INTERNAL struct win32_thread *win32_thread_alloc(void)
{ {
struct win32_thread *t = NULL; struct win32_thread *t = 0;
struct snc_lock lock = snc_lock_e(&G.threads_mutex); struct snc_lock lock = snc_lock_e(&G.threads_mutex);
{ {
if (G.threads_first_free) { if (G.threads_first_free) {
@ -2930,7 +2930,7 @@ INTERNAL DWORD WINAPI win32_thread_proc(LPVOID vt)
__profthread(t->thread_name_cstr, t->profiler_group); __profthread(t->thread_name_cstr, t->profiler_group);
/* Initialize COM */ /* Initialize COM */
CoInitializeEx(NULL, COINIT_MULTITHREADED); CoInitializeEx(0, COINIT_MULTITHREADED);
/* Set thread name */ /* Set thread name */
if (t->thread_name_wstr[0] != 0) { if (t->thread_name_wstr[0] != 0) {
@ -2952,7 +2952,7 @@ struct sys_thread *sys_thread_alloc(sys_thread_func *entry_point, void *thread_d
{ {
__prof; __prof;
struct arena_temp scratch = scratch_begin_no_conflict(); struct arena_temp scratch = scratch_begin_no_conflict();
ASSERT(entry_point != NULL); ASSERT(entry_point != 0);
logf_info("Creating thread \"%F\"", FMT_STR(thread_name)); logf_info("Creating thread \"%F\"", FMT_STR(thread_name));
@ -2976,12 +2976,12 @@ struct sys_thread *sys_thread_alloc(sys_thread_func *entry_point, void *thread_d
} }
t->handle = CreateThread( t->handle = CreateThread(
NULL, 0,
THREAD_STACK_SIZE, THREAD_STACK_SIZE,
win32_thread_proc, win32_thread_proc,
t, t,
0, 0,
NULL 0
); );
if (!t->handle) { if (!t->handle) {
@ -3003,7 +3003,7 @@ void sys_thread_wait_release(struct sys_thread *thread)
b32 sys_thread_try_release(struct sys_thread *thread, f32 timeout_seconds) b32 sys_thread_try_release(struct sys_thread *thread, f32 timeout_seconds)
{ {
__prof; __prof;
b32 success = false; b32 success = 0;
struct win32_thread *t = (struct win32_thread *)thread; struct win32_thread *t = (struct win32_thread *)thread;
HANDLE handle = t->handle; HANDLE handle = t->handle;
@ -3012,7 +3012,7 @@ b32 sys_thread_try_release(struct sys_thread *thread, f32 timeout_seconds)
DWORD timeout_ms = (timeout_seconds == F32_INFINITY) ? INFINITE : math_round_to_int(timeout_seconds * 1000); DWORD timeout_ms = (timeout_seconds == F32_INFINITY) ? INFINITE : math_round_to_int(timeout_seconds * 1000);
DWORD wait_res = WaitForSingleObject(handle, timeout_ms); DWORD wait_res = WaitForSingleObject(handle, timeout_ms);
if (wait_res == WAIT_OBJECT_0) { if (wait_res == WAIT_OBJECT_0) {
success = true; success = 1;
CloseHandle(handle); CloseHandle(handle);
win32_thread_release(t); win32_thread_release(t);
} }
@ -3087,7 +3087,7 @@ void sys_message_box(enum sys_message_box_kind kind, struct string message)
} }
logf_info("Showing message box kind %F with text \"%F\"", FMT_SINT(kind), FMT_STR(message)); logf_info("Showing message box kind %F with text \"%F\"", FMT_SINT(kind), FMT_STR(message));
MessageBoxExW(NULL, message_wstr, title, mbox_type, 0); MessageBoxExW(0, message_wstr, title, mbox_type, 0);
scratch_end(scratch); scratch_end(scratch);
} }
@ -3184,8 +3184,8 @@ void sys_panic(struct string msg)
wstr[wstr_len] = 0; wstr[wstr_len] = 0;
#if RTC #if RTC
MessageBoxExW(NULL, wstr, L"Fatal error", MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST, 0); MessageBoxExW(0, wstr, L"Fatal error", MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST, 0);
ASSERT(false); ASSERT(0);
#endif #endif
WRITE_BARRIER(); WRITE_BARRIER();
@ -3204,14 +3204,14 @@ void sys_panic(struct string msg)
b32 sys_run_command(struct string cmd) b32 sys_run_command(struct string cmd)
{ {
b32 success = false; b32 success = 0;
{ {
struct arena_temp scratch = scratch_begin_no_conflict(); struct arena_temp scratch = scratch_begin_no_conflict();
wchar_t *cmd_wstr = wstr_from_string(scratch.arena, cmd); wchar_t *cmd_wstr = wstr_from_string(scratch.arena, cmd);
STARTUPINFO si = ZI; STARTUPINFO si = ZI;
si.cb = sizeof(si); si.cb = sizeof(si);
PROCESS_INFORMATION pi = ZI; PROCESS_INFORMATION pi = ZI;
success = CreateProcessW(NULL, cmd_wstr, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi); success = CreateProcessW(0, cmd_wstr, 0, 0, 0, DETACHED_PROCESS, 0, 0, &si, &pi);
scratch_end(scratch); scratch_end(scratch);
} }
return success; return success;
@ -3247,16 +3247,16 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
wchar_t cmd[sizeof(PROFILING_CMD_WSTR)] = ZI; wchar_t cmd[sizeof(PROFILING_CMD_WSTR)] = ZI;
MEMCPY(cmd, PROFILING_CMD_WSTR, sizeof(PROFILING_CMD_WSTR)); MEMCPY(cmd, PROFILING_CMD_WSTR, sizeof(PROFILING_CMD_WSTR));
DeleteFileW(PROFILING_FILE_WSTR); DeleteFileW(PROFILING_FILE_WSTR);
b32 success = CreateProcessW(NULL, cmd, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi); b32 success = CreateProcessW(0, cmd, 0, 0, 0, DETACHED_PROCESS, 0, 0, &si, &pi);
if (!success) { if (!success) {
MessageBoxExW(NULL, L"Failed to launch profiler using command '" PROFILING_CMD_WSTR L"'.", L"Error", MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST, 0); MessageBoxExW(0, L"Failed to launch profiler using command '" PROFILING_CMD_WSTR L"'.", L"Error", MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST, 0);
} }
} }
#endif #endif
__profthread("Main thread", PROF_THREAD_GROUP_MAIN); __profthread("Main thread", PROF_THREAD_GROUP_MAIN);
const wchar_t *error_msg = NULL; const wchar_t *error_msg = 0;
/* Init timer */ /* Init timer */
{ {
@ -3297,7 +3297,7 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
SetThreadDescription(GetCurrentThread(), L"Main thread"); SetThreadDescription(GetCurrentThread(), L"Main thread");
/* Set up panic event */ /* Set up panic event */
G.panic_event = CreateEventW(NULL, true, false, NULL); G.panic_event = CreateEventW(0, 1, 0, 0);
/* Query system info */ /* Query system info */
GetSystemInfo(&G.info); GetSystemInfo(&G.info);
@ -3320,7 +3320,7 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
WNDCLASSEXW *wc = &G.window_class; WNDCLASSEXW *wc = &G.window_class;
wc->cbSize = sizeof(WNDCLASSEX); wc->cbSize = sizeof(WNDCLASSEX);
wc->lpszClassName = WINDOW_CLASS_NAME; wc->lpszClassName = WINDOW_CLASS_NAME;
wc->hCursor = LoadCursor(NULL, IDC_ARROW); wc->hCursor = LoadCursor(0, IDC_ARROW);
wc->style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wc->style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
//wc->hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //wc->hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wc->lpfnWndProc = win32_window_proc; wc->lpfnWndProc = win32_window_proc;
@ -3360,10 +3360,10 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
/* Call app thread and wait for return */ /* Call app thread and wait for return */
{ {
/* Start app thread */ /* Start app thread */
struct sys_thread *app_thread = sys_thread_alloc(&win32_app_thread_entry_point, NULL, LIT("App thread"), PROF_THREAD_GROUP_APP); struct sys_thread *app_thread = sys_thread_alloc(&win32_app_thread_entry_point, 0, LIT("App thread"), PROF_THREAD_GROUP_APP);
/* Start test thread */ /* Start test thread */
struct sys_thread *test_thread = sys_thread_alloc(test_entry, NULL, LIT("Test thread"), PROF_THREAD_GROUP_APP); struct sys_thread *test_thread = sys_thread_alloc(test_entry, 0, LIT("Test thread"), PROF_THREAD_GROUP_APP);
/* Get app thread handle */ /* Get app thread handle */
HANDLE app_thread_handle = 0; HANDLE app_thread_handle = 0;
@ -3381,7 +3381,7 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
app_thread_handle, app_thread_handle,
G.panic_event G.panic_event
}; };
DWORD res = WaitForMultipleObjects(countof(wait_handles), wait_handles, false, INFINITE); DWORD res = WaitForMultipleObjects(countof(wait_handles), wait_handles, 0, INFINITE);
if (res == WAIT_OBJECT_0) { if (res == WAIT_OBJECT_0) {
sys_thread_force_release(app_thread); sys_thread_force_release(app_thread);
} }
@ -3435,8 +3435,8 @@ int CALLBACK wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev_instance,
abort: abort:
if (error_msg) { if (error_msg) {
MessageBoxExW(NULL, error_msg, L"Fatal error", MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST, 0); MessageBoxExW(0, error_msg, L"Fatal error", MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST, 0);
ASSERT(false); ASSERT(0);
return 1; return 1;
} }

View File

@ -80,13 +80,13 @@ struct tar_archive tar_parse(struct arena *arena, struct string data, struct str
if (!string_eq(STRING_FROM_ARRAY(header.ustar_indicator), LIT("ustar\0"))) { if (!string_eq(STRING_FROM_ARRAY(header.ustar_indicator), LIT("ustar\0"))) {
/* Invalid header */ /* Invalid header */
ASSERT(false); ASSERT(0);
continue; continue;
} }
if (header.file_name_prefix[0] != 0) { if (header.file_name_prefix[0] != 0) {
/* Header file name prefix not supported */ /* Header file name prefix not supported */
ASSERT(false); ASSERT(0);
continue; continue;
} }
@ -143,7 +143,7 @@ struct tar_archive tar_parse(struct arena *arena, struct string data, struct str
/* Enter into hierarchy */ /* Enter into hierarchy */
if (!entry->is_dir) { if (!entry->is_dir) {
/* Find parent entry */ /* Find parent entry */
struct tar_entry *parent_entry = NULL; struct tar_entry *parent_entry = 0;
for (struct string parent_dir_name = entry->file_name; parent_dir_name.len > 0; --parent_dir_name.len) { for (struct string parent_dir_name = entry->file_name; parent_dir_name.len > 0; --parent_dir_name.len) {
if (parent_dir_name.text[parent_dir_name.len - 1] == '/') { if (parent_dir_name.text[parent_dir_name.len - 1] == '/') {
u64 hash = hash_fnv64(HASH_FNV64_BASIS, parent_dir_name); u64 hash = hash_fnv64(HASH_FNV64_BASIS, parent_dir_name);

View File

@ -86,27 +86,27 @@ struct ttf_decode_result ttf_decode(struct arena *arena, struct string encoded,
(UNUSED)error; (UNUSED)error;
/* File */ /* File */
IDWriteFontFile *font_file = NULL; IDWriteFontFile *font_file = 0;
{ {
/* Create in memory loader */ /* Create in memory loader */
IDWriteInMemoryFontFileLoader *loader = NULL; IDWriteInMemoryFontFileLoader *loader = 0;
error = factory->CreateInMemoryFontFileLoader(&loader); error = factory->CreateInMemoryFontFileLoader(&loader);
error = factory->RegisterFontFileLoader(loader); error = factory->RegisterFontFileLoader(loader);
IDWriteFontSetBuilder1 *builder = NULL; IDWriteFontSetBuilder1 *builder = 0;
error = factory->CreateFontSetBuilder(&builder); error = factory->CreateFontSetBuilder(&builder);
error = loader->CreateInMemoryFontFileReference(factory, encoded.text, (u32)encoded.len, NULL, &font_file); error = loader->CreateInMemoryFontFileReference(factory, encoded.text, (u32)encoded.len, 0, &font_file);
error = builder->AddFontFile(font_file); error = builder->AddFontFile(font_file);
} }
/* Face */ /* Face */
IDWriteFontFace *font_face = NULL; IDWriteFontFace *font_face = 0;
error = factory->CreateFontFace(DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font_file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font_face); error = factory->CreateFontFace(DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font_file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font_face);
/* Render settings */ /* Render settings */
IDWriteRenderingParams *default_rendering_params = NULL; IDWriteRenderingParams *default_rendering_params = 0;
error = factory->CreateRenderingParams(&default_rendering_params); error = factory->CreateRenderingParams(&default_rendering_params);
IDWriteRenderingParams *rendering_params = NULL; IDWriteRenderingParams *rendering_params = 0;
FLOAT gamma = default_rendering_params->GetGamma(); FLOAT gamma = default_rendering_params->GetGamma();
FLOAT enhanced_contrast = default_rendering_params->GetEnhancedContrast(); FLOAT enhanced_contrast = default_rendering_params->GetEnhancedContrast();
FLOAT clear_type_level = default_rendering_params->GetClearTypeLevel(); FLOAT clear_type_level = default_rendering_params->GetClearTypeLevel();
@ -118,7 +118,7 @@ struct ttf_decode_result ttf_decode(struct arena *arena, struct string encoded,
&rendering_params); &rendering_params);
/* Interop */ /* Interop */
IDWriteGdiInterop *dwrite_gdi_interop = NULL; IDWriteGdiInterop *dwrite_gdi_interop = 0;
error = factory->GetGdiInterop(&dwrite_gdi_interop); error = factory->GetGdiInterop(&dwrite_gdi_interop);
/* Get Metrics */ /* Get Metrics */
@ -141,7 +141,7 @@ struct ttf_decode_result ttf_decode(struct arena *arena, struct string encoded,
u16 glyph_count = font_face->GetGlyphCount(); u16 glyph_count = font_face->GetGlyphCount();
/* Render target */ /* Render target */
IDWriteBitmapRenderTarget *render_target = NULL; IDWriteBitmapRenderTarget *render_target = 0;
/* FIXME: errors when point_size too high */ /* FIXME: errors when point_size too high */
error = dwrite_gdi_interop->CreateBitmapRenderTarget(0, (UINT32)raster_target_w, (UINT32)raster_target_h, &render_target); error = dwrite_gdi_interop->CreateBitmapRenderTarget(0, (UINT32)raster_target_w, (UINT32)raster_target_h, &render_target);
render_target->SetPixelsPerDip(1.0); render_target->SetPixelsPerDip(1.0);
@ -204,7 +204,7 @@ struct ttf_decode_result ttf_decode(struct arena *arena, struct string encoded,
/* Compute glyph metrics */ /* Compute glyph metrics */
DWRITE_GLYPH_METRICS glyph_metrics = ZI; DWRITE_GLYPH_METRICS glyph_metrics = ZI;
error = font_face->GetDesignGlyphMetrics(&i, 1, &glyph_metrics, false); error = font_face->GetDesignGlyphMetrics(&i, 1, &glyph_metrics, 0);
f32 off_x = (f32)bounding_box.left - raster_target_x; f32 off_x = (f32)bounding_box.left - raster_target_x;
f32 off_y = (f32)bounding_box.top - raster_target_y; f32 off_y = (f32)bounding_box.top - raster_target_y;
@ -282,7 +282,7 @@ struct ttf_decode_result ttf_decode(struct arena *arena, struct string encoded,
} }
/* Construct indices array */ /* Construct indices array */
u16 *cache_indices = NULL; u16 *cache_indices = 0;
if (cache_codes_count > 0) { if (cache_codes_count > 0) {
cache_indices = arena_push_array(arena, u16, cache_codes_count); cache_indices = arena_push_array(arena, u16, cache_codes_count);
font_face->GetGlyphIndices(cache_codes, cache_codes_count, cache_indices); font_face->GetGlyphIndices(cache_codes, cache_codes_count, cache_indices);

View File

@ -253,8 +253,8 @@ struct user_startup_receipt user_startup(struct gp_startup_receipt *gp_sr,
sys_window_register_event_callback(G.window, &window_event_callback); sys_window_register_event_callback(G.window, &window_event_callback);
/* Start jobs */ /* Start jobs */
sys_run(1, local_sim_job, NULL, SYS_PRIORITY_HIGH, &G.shutdown_job_counters); sys_run(1, local_sim_job, 0, SYS_PRIORITY_HIGH, &G.shutdown_job_counters);
sys_run(1, user_job, NULL, SYS_PRIORITY_HIGH, &G.shutdown_job_counters); sys_run(1, user_job, 0, SYS_PRIORITY_HIGH, &G.shutdown_job_counters);
app_register_exit_callback(&user_shutdown); app_register_exit_callback(&user_shutdown);
return (struct user_startup_receipt) { 0 }; return (struct user_startup_receipt) { 0 };
@ -265,7 +265,7 @@ INTERNAL APP_EXIT_CALLBACK_FUNC_DEF(user_shutdown)
__prof; __prof;
sys_window_unregister_event_callback(G.window, &window_event_callback); sys_window_unregister_event_callback(G.window, &window_event_callback);
/* Signal shutdown */ /* Signal shutdown */
atomic_i32_fetch_set(&G.shutdown, true); atomic_i32_fetch_set(&G.shutdown, 1);
/* Wait for jobs shutdown */ /* Wait for jobs shutdown */
snc_counter_wait(&G.shutdown_job_counters); snc_counter_wait(&G.shutdown_job_counters);
} }
@ -774,7 +774,7 @@ INTERNAL void user_update(void)
G.user_cursor.x > G.user_size.x || G.user_cursor.x > G.user_size.x ||
G.user_cursor.y > G.user_size.y); G.user_cursor.y > G.user_size.y);
#else #else
b32 out_of_bounds = false; b32 out_of_bounds = 0;
#endif #endif
G.bind_states[bind].is_held = pressed && !out_of_bounds; G.bind_states[bind].is_held = pressed && !out_of_bounds;
if (pressed) { if (pressed) {
@ -965,14 +965,14 @@ INTERNAL void user_update(void)
if (G.bind_states[USER_BIND_KIND_PAN].is_held) { if (G.bind_states[USER_BIND_KIND_PAN].is_held) {
if (!G.debug_camera_panning) { if (!G.debug_camera_panning) {
G.debug_camera_pan_start = world_cursor; G.debug_camera_pan_start = world_cursor;
G.debug_camera_panning = true; G.debug_camera_panning = 1;
} }
struct v2 offset = v2_neg(v2_sub(G.debug_camera_pan_start, world_cursor)); struct v2 offset = v2_neg(v2_sub(G.debug_camera_pan_start, world_cursor));
G.world_to_user_xf = xform_translated(G.world_to_user_xf, offset); G.world_to_user_xf = xform_translated(G.world_to_user_xf, offset);
world_cursor = xform_invert_mul_v2(G.world_to_user_xf, G.user_cursor); world_cursor = xform_invert_mul_v2(G.world_to_user_xf, G.user_cursor);
G.debug_camera_pan_start = world_cursor; G.debug_camera_pan_start = world_cursor;
} else { } else {
G.debug_camera_panning = false; G.debug_camera_panning = 0;
} }
/* Zoom view */ /* Zoom view */
@ -1158,7 +1158,7 @@ INTERNAL void user_update(void)
/* Sort */ /* Sort */
{ {
__profn("Sort ents"); __profn("Sort ents");
merge_sort(sorted, sorted_count, sizeof(*sorted), ent_draw_order_cmp, NULL); merge_sort(sorted, sorted_count, sizeof(*sorted), ent_draw_order_cmp, 0);
} }
} }
@ -1184,7 +1184,7 @@ INTERNAL void user_update(void)
skip_debug_draw = skip_debug_draw || sim_ent_has_prop(ent, SEPROP_MOTOR_JOINT); skip_debug_draw = skip_debug_draw || sim_ent_has_prop(ent, SEPROP_MOTOR_JOINT);
b32 skip_debug_draw_transform = sim_ent_has_prop(ent, SEPROP_CAMERA); b32 skip_debug_draw_transform = sim_ent_has_prop(ent, SEPROP_CAMERA);
skip_debug_draw_transform = true; skip_debug_draw_transform = 1;
struct xform sprite_xform = xform_mul(xf, ent->sprite_local_xform); struct xform sprite_xform = xform_mul(xf, ent->sprite_local_xform);
@ -1540,15 +1540,15 @@ INTERNAL void user_update(void)
#if 0 #if 0
/* Only draw points with large separation */ /* Only draw points with large separation */
b32 should_draw = false; b32 should_draw = 0;
for (u32 i = 0; i < data->num_points; ++i) { for (u32 i = 0; i < data->num_points; ++i) {
if (data->points[i].starting_separation < -0.1) { if (data->points[i].starting_separation < -0.1) {
should_draw = true; should_draw = 1;
break; break;
} }
} }
#else #else
b32 should_draw = true; b32 should_draw = 1;
#endif #endif
if (should_draw) { if (should_draw) {
@ -1587,7 +1587,7 @@ INTERNAL void user_update(void)
struct v2_array m = menkowski(temp.arena, &e0_collider, &e1_collider, e0_xf, e1_xf, detail); struct v2_array m = menkowski(temp.arena, &e0_collider, &e1_collider, e0_xf, e1_xf, detail);
for (u64 i = 0; i < m.count; ++i) m.points[i] = xform_mul_v2(G.world_to_user_xf, m.points[i]); for (u64 i = 0; i < m.count; ++i) m.points[i] = xform_mul_v2(G.world_to_user_xf, m.points[i]);
draw_poly_line(G.ui_gp_flow, m, true, thickness, color); draw_poly_line(G.ui_gp_flow, m, 1, thickness, color);
//draw_poly(G.ui_gp_flow, m, color); //draw_poly(G.ui_gp_flow, m, color);
} }
@ -1614,7 +1614,7 @@ INTERNAL void user_update(void)
.count = collider_res.prototype.len .count = collider_res.prototype.len
}; };
for (u64 i = 0; i < m.count; ++i) m.points[i] = xform_mul_v2(G.world_to_user_xf, m.points[i]); for (u64 i = 0; i < m.count; ++i) m.points[i] = xform_mul_v2(G.world_to_user_xf, m.points[i]);
draw_poly_line(G.ui_gp_flow, m, true, thickness, color); draw_poly_line(G.ui_gp_flow, m, 1, thickness, color);
for (u64 i = 0; i < m.count; ++i) draw_circle(G.ui_gp_flow, m.points[i], 10, color, 10); for (u64 i = 0; i < m.count; ++i) draw_circle(G.ui_gp_flow, m.points[i], 10, color, 10);
} }
@ -2036,7 +2036,7 @@ INTERNAL void user_update(void)
draw_debug_console(console_level, console_minimized); draw_debug_console(console_level, console_minimized);
#else #else
if (G.debug_draw) { if (G.debug_draw) {
draw_debug_console(LOG_LEVEL_INFO, false); draw_debug_console(LOG_LEVEL_INFO, 0);
} }
#endif #endif
} }
@ -2057,7 +2057,7 @@ INTERNAL void user_update(void)
if (G.user_texture) { if (G.user_texture) {
gp_resource_release(G.user_texture); gp_resource_release(G.user_texture);
} }
G.user_texture = gp_texture_alloc(GP_TEXTURE_FORMAT_R8G8B8A8_UNORM, GP_TEXTURE_FLAG_TARGETABLE, user_resolution, NULL); G.user_texture = gp_texture_alloc(GP_TEXTURE_FORMAT_R8G8B8A8_UNORM, GP_TEXTURE_FLAG_TARGETABLE, user_resolution, 0);
} }
/* Render world to user texture */ /* Render world to user texture */
@ -2067,7 +2067,7 @@ INTERNAL void user_update(void)
params.draw_target = G.user_texture; params.draw_target = G.user_texture;
params.draw_target_viewport = user_viewport; params.draw_target_viewport = user_viewport;
params.draw_target_view = G.world_to_user_xf; params.draw_target_view = G.world_to_user_xf;
params.clear_target = true; params.clear_target = 1;
gp_dispatch(params); gp_dispatch(params);
} }
@ -2200,7 +2200,7 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
//host_listen(host, net_listen_addr); //host_listen(host, net_listen_addr);
#endif #endif
b32 is_master = false; b32 is_master = 0;
struct host *host; struct host *host;
if (G.connect_address_str.len > 0) { if (G.connect_address_str.len > 0) {
host = host_alloc(0); host = host_alloc(0);
@ -2208,7 +2208,7 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
host_queue_connect_to_address(host, addr); host_queue_connect_to_address(host, addr);
} else { } else {
host = host_alloc(12345); host = host_alloc(12345);
is_master = true; is_master = 1;
} }
struct bitbuff msg_writer_bb = bitbuff_alloc(GIBI(64)); struct bitbuff msg_writer_bb = bitbuff_alloc(GIBI(64));
@ -2222,7 +2222,7 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
struct sim_client *master_client = sim_client_nil(); /* Stores snapshots received from master */ struct sim_client *master_client = sim_client_nil(); /* Stores snapshots received from master */
struct sim_client *master_blended_client = sim_client_nil(); /* Stores interpolated master snapshots */ struct sim_client *master_blended_client = sim_client_nil(); /* Stores interpolated master snapshots */
b32 initialized_from_master = false; b32 initialized_from_master = 0;
@ -2301,7 +2301,7 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
master_blended_client = sim_client_alloc(store); master_blended_client = sim_client_alloc(store);
} else { } else {
/* We already have a master client */ /* We already have a master client */
ASSERT(false); ASSERT(0);
} }
} }
} }
@ -2385,7 +2385,7 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
} }
} else { } else {
/* We do not have the tick that the incoming delta is based from */ /* We do not have the tick that the incoming delta is based from */
ASSERT(false); ASSERT(0);
} }
tmp_encoded_len = br_read_uv(&msg_br); tmp_encoded_len = br_read_uv(&msg_br);
@ -2423,13 +2423,13 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
} else { } else {
/* We do not have the tick that the incoming delta is based from. /* We do not have the tick that the incoming delta is based from.
* This decode should never have been queued in the first place. */ * This decode should never have been queued in the first place. */
ASSERT(false); ASSERT(0);
} }
} }
if (!is_master && !initialized_from_master) { if (!is_master && !initialized_from_master) {
if (master_client->valid && master_client->last_tick > 0) { if (master_client->valid && master_client->last_tick > 0) {
initialized_from_master = true; initialized_from_master = 1;
} else { } else {
goto skip_step; goto skip_step;
} }
@ -2437,7 +2437,7 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
b32 should_step = !atomic_i32_fetch(&G.user_paused); b32 should_step = !atomic_i32_fetch(&G.user_paused);
if (atomic_i32_fetch(&G.user_paused_steps) > 0) { if (atomic_i32_fetch(&G.user_paused_steps) > 0) {
should_step = true; should_step = 1;
atomic_i32_fetch_add(&G.user_paused_steps, -1); atomic_i32_fetch_add(&G.user_paused_steps, -1);
} }
@ -2518,7 +2518,7 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
/* TODO: Eventually determine master tick based on a delay to allow for jitter and also interpolation so we can lower snapshot publish frequency */ /* TODO: Eventually determine master tick based on a delay to allow for jitter and also interpolation so we can lower snapshot publish frequency */
b32 master_ss_is_blended = false; b32 master_ss_is_blended = 0;
struct sim_snapshot *master_ss = sim_snapshot_nil(); struct sim_snapshot *master_ss = sim_snapshot_nil();
{ {
/* How along are we between master sim ticks (0 = start of tick, 1 = end of tick) */ /* How along are we between master sim ticks (0 = start of tick, 1 = end of tick) */
@ -2570,13 +2570,13 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
blend = (f64)(master_blend_tick - left_snapshot->tick) / (f64)(right_snapshot->tick - left_snapshot->tick); blend = (f64)(master_blend_tick - left_snapshot->tick) / (f64)(right_snapshot->tick - left_snapshot->tick);
f64 epsilon = 0.001; f64 epsilon = 0.001;
if (blend < epsilon) { if (blend < epsilon) {
master_ss_is_blended = false; master_ss_is_blended = 0;
master_ss = left_snapshot; master_ss = left_snapshot;
} else if (blend > 1 - epsilon) { } else if (blend > 1 - epsilon) {
master_ss_is_blended = false; master_ss_is_blended = 0;
master_ss = right_snapshot; master_ss = right_snapshot;
} else { } else {
master_ss_is_blended = true; master_ss_is_blended = 1;
master_ss = sim_snapshot_alloc_from_lerp(master_blended_client, left_snapshot, right_snapshot, blend); master_ss = sim_snapshot_alloc_from_lerp(master_blended_client, left_snapshot, right_snapshot, blend);
/* Release unneeded blended master snapshots */ /* Release unneeded blended master snapshots */
@ -2586,7 +2586,7 @@ INTERNAL SYS_JOB_DEF(local_sim_job, _)
} }
} }
} else { } else {
master_ss_is_blended = false; master_ss_is_blended = 0;
master_ss = left_snapshot->valid ? left_snapshot : right_snapshot; master_ss = left_snapshot->valid ? left_snapshot : right_snapshot;
} }

View File

@ -198,7 +198,7 @@ INLINE void dict_set(struct arena *arena, struct dict *dict, u64 hash, u64 value
INLINE struct dict_entry *dict_get_entry(struct dict *dict, u64 hash) INLINE struct dict_entry *dict_get_entry(struct dict *dict, u64 hash)
{ {
__prof; __prof;
struct dict_entry *result = NULL; struct dict_entry *result = 0;
struct dict_bin *bin = &dict->bins[hash % dict->bins_count]; struct dict_bin *bin = &dict->bins[hash % dict->bins_count];
for (struct dict_entry *entry = bin->first; entry; entry = entry->next_in_bin) { for (struct dict_entry *entry = bin->first; entry; entry = entry->next_in_bin) {
if (hash == entry->hash) { if (hash == entry->hash) {
@ -275,7 +275,7 @@ INLINE void sleep_precise(i64 sleep_time_ns)
/* Sleep */ /* Sleep */
while (now_ns < target_ns - big_sleep - tolerance) { while (now_ns < target_ns - big_sleep - tolerance) {
__profn("Sleep part"); __profn("Sleep part");
sys_wait(NULL, NULL, 0, big_sleep); sys_wait(0, 0, 0, big_sleep);
now_ns = sys_time_ns(); now_ns = sys_time_ns();
} }