From c0bad6e58bd5f1f96390b379e94b1784c7cffc74 Mon Sep 17 00:00:00 2001 From: jacob Date: Tue, 26 Aug 2025 22:32:29 -0500 Subject: [PATCH] res refactor progress --- src/app/app.c | 3 +- src/ase/ase.c | 20 +-- src/base/base_arena.h | 17 +- src/base/base_job.h | 26 ++- src/base/base_string.c | 16 +- src/base/base_uni.c | 4 +- src/base/base_win32/base_win32.c | 4 +- src/base/base_win32/base_win32_job.c | 18 +- src/gpu/gpu.h | 24 +-- src/gpu/gpu_dx12/gpu_dx12.c | 28 +-- src/gpu/gpu_dx12/gpu_dx12.h | 9 + src/json/json.c | 172 +++++++++---------- src/json/json.h | 10 +- src/meta/meta.c | 147 ++++++++++------ src/net/net.c | 8 +- src/platform/platform_win32/platform_win32.c | 14 +- src/pp/pp.c | 4 +- src/pp/pp_step.c | 12 +- src/sprite/sprite.c | 10 +- src/sprite/sprite.h | 4 + 20 files changed, 309 insertions(+), 241 deletions(-) diff --git a/src/app/app.c b/src/app/app.c index 57d92d76..8ca02540 100644 --- a/src/app/app.c +++ b/src/app/app.c @@ -77,6 +77,8 @@ AppArgList ParseAppArgs(Arena *arena, String args_str) u8 c = args_str.text[i]; switch (mode) { + default: break; + case 0: { if (c == '-') @@ -133,7 +135,6 @@ AppArgList ParseAppArgs(Arena *arena, String args_str) } ++i; } break; - default: break; } } return result; diff --git a/src/ase/ase.c b/src/ase/ase.c index 5562c38a..aa4ceff4 100644 --- a/src/ase/ase.c +++ b/src/ase/ase.c @@ -557,6 +557,11 @@ ASE_DecodedImage ASE_DecodeImage(Arena *arena, String encoded) switch (chunk_type) { + default: + { + BB_SeekToByte(&br, chunk_end_pos); + } break; + //- Decode layer case ASE_ChunkKind_Layer: { @@ -659,11 +664,6 @@ ASE_DecodedImage ASE_DecodeImage(Arena *arena, String encoded) } break; } } break; - - default: - { - BB_SeekToByte(&br, chunk_end_pos); - } break; } } ++num_frames; @@ -855,6 +855,11 @@ ASE_DecodedSheet ASE_DecodeSheet(Arena *arena, String encoded) switch (chunk_type) { + default: + { + BB_SeekToByte(&br, chunk_end_pos); + } break; + //- Decode tags case ASE_ChunkKind_Tags: { @@ -931,11 +936,6 @@ ASE_DecodedSheet ASE_DecodeSheet(Arena *arena, String encoded) /* TODO */ //case ASE_ChunkKind_Userdata - - default: - { - BB_SeekToByte(&br, chunk_end_pos); - } break; } } ++num_frames; diff --git a/src/base/base_arena.h b/src/base/base_arena.h index b64dfff0..c663a052 100644 --- a/src/base/base_arena.h +++ b/src/base/base_arena.h @@ -31,8 +31,8 @@ Struct(TempArena) Struct(ArenaCtx) { - Arena *scratch_arenas[ScratchArenasPerCtx]; Arena *perm_arena; + Arena *scratch_arenas[ScratchArenasPerCtx]; }; //////////////////////////////// @@ -182,18 +182,20 @@ Inline ArenaCtx *ArenaCtxFromFiberId(i16 fiber_id) { SharedArenaCtx *g = &shared_arena_ctx; ArenaCtx *ctx = &g->arena_contexts[fiber_id]; - if (!ctx->scratch_arenas[0]) + if (!ctx->perm_arena) { __profn("Initialize fiber arena ctx"); + ctx->perm_arena = AcquireArena(Gibi(64)); for (i32 i = 0; i < (i32)countof(ctx->scratch_arenas); ++i) { ctx->scratch_arenas[i] = AcquireArena(Gibi(64)); } - ctx->perm_arena = AcquireArena(Gibi(64)); } return ctx; } +#define PermArena (ArenaCtxFromFiberId(FiberId)->perm_arena) + //////////////////////////////// //~ Scratch helpers @@ -247,12 +249,3 @@ Inline void EndScratch(TempArena scratch_temp) { EndTempArena(scratch_temp); } - -//////////////////////////////// -//~ Perm arena helpers - -Inline Arena *GetPermArena(void) -{ - ArenaCtx *ctx = ArenaCtxFromFiberId(FiberId); - return ctx->perm_arena; -} diff --git a/src/base/base_job.h b/src/base/base_job.h index 1c4e0244..cc3c6e6d 100644 --- a/src/base/base_job.h +++ b/src/base/base_job.h @@ -7,16 +7,24 @@ Enum(JobPool) { JobPool_Inherit = -1, - /* The floating pool contains a large number of lower priority worker - * threads that have affinity over the entire CPU. Other pools should push - * jobs that only block and do no work here so that they can yield on the - * blocking job rather than blocking themselves. */ - JobPool_Floating = 0, + /* Contains critical-priority worker threads affinitized over the entire CPU. + * Meant to take on high-bandwidth temporary work (e.g. loading a level). */ + JobPool_Hyper = 0, - JobPool_Background = 1, - JobPool_Audio = 2, - JobPool_User = 3, - JobPool_Sim = 4, + /* Contains low-priority worker threads affinitized over the entire CPU. + * Meant to take on blocking work that higher-priority workers can continue doing actual work. */ + JobPool_Blocking = 1, + + /* Contains low-priority worker threads affinitized to cores that don't interfere with workers in specialized pools. + * Meant to take on asynchronous work from higher priority pools. */ + JobPool_Background = 2, + + /* Contains high-priority worker threads affinitized to cores that don't interfere with workers in other specialized pools. + * These pools are meant to only have work pushed onto them from jobs within the same pool (e.g. pushing 100 rendering + * jobs will not interfere with cores running workers on the Sim pool as long as the jobs are pushed onto the User pool). */ + JobPool_Audio = 3, + JobPool_User = 4, + JobPool_Sim = 5, JobPool_Count }; diff --git a/src/base/base_string.c b/src/base/base_string.c index f4bdc86d..3737950e 100644 --- a/src/base/base_string.c +++ b/src/base/base_string.c @@ -543,6 +543,14 @@ String FormatStringV(Arena *arena, String fmt, va_list args) FmtArg arg = va_arg(args, FmtArg); switch (arg.kind) { + default: + { + /* Unknown format type */ + Assert(0); + parsed_str = PushString(arena, Lit("")); + no_more_args = 1; + } break; + case FmtKind_Char: { parsed_str = StringFromChar(arena, arg.value.c); @@ -595,14 +603,6 @@ String FormatStringV(Arena *arena, String fmt, va_list args) parsed_str = PushString(arena, Lit("")); no_more_args = 1; } break; - - default: - { - /* Unknown format type */ - Assert(0); - parsed_str = PushString(arena, Lit("")); - no_more_args = 1; - } break; } /* Update final string len / start */ final_len += parsed_str.len; diff --git a/src/base/base_uni.c b/src/base/base_uni.c index f7a498bf..685fe2b0 100644 --- a/src/base/base_uni.c +++ b/src/base/base_uni.c @@ -20,6 +20,8 @@ Utf8DecodeResult DecodeUtf8(String str) advance = 1; switch (utf8_len) { + default: break; + case 1: { codepoint = c0; @@ -75,8 +77,6 @@ Utf8DecodeResult DecodeUtf8(String str) } } } break; - - default: break; } } diff --git a/src/base/base_win32/base_win32.c b/src/base/base_win32/base_win32.c index 6c77d7ea..04d2a78c 100644 --- a/src/base/base_win32/base_win32.c +++ b/src/base/base_win32/base_win32.c @@ -193,7 +193,7 @@ i32 W32_Main(void) /* Startup layers */ if (!Atomic32Fetch(&g->panicking)) { - RunJob(1, W32_StartupLayersJob, JobPool_Floating, JobPriority_High, 0, 0); + RunJob(1, W32_StartupLayersJob, JobPool_Hyper, JobPriority_High, 0, 0); } /* Wait for startup end or panic */ @@ -221,7 +221,7 @@ i32 W32_Main(void) /* Run exit callbacks job */ if (!Atomic32Fetch(&g->panicking)) { - RunJob(1, W32_ShutdownLayersJob, JobPool_Floating, JobPriority_High, 0, 0); + RunJob(1, W32_ShutdownLayersJob, JobPool_Hyper, JobPriority_High, 0, 0); } /* Wait for exit end or panic */ diff --git a/src/base/base_win32/base_win32_job.c b/src/base/base_win32/base_win32_job.c index 6a8ae985..567a0a64 100644 --- a/src/base/base_win32/base_win32_job.c +++ b/src/base/base_win32/base_win32_job.c @@ -72,7 +72,7 @@ void InitJobWorkers(void) name_fmt = Lit("Sim worker #%F"); pool->num_worker_threads = 4; pool->thread_affinity_mask = 0x000000000000000Full; - pool->thread_priority = THREAD_PRIORITY_TIME_CRITICAL; + pool->thread_priority = THREAD_PRIORITY_ABOVE_NORMAL; } break; case JobPool_User: @@ -80,7 +80,7 @@ void InitJobWorkers(void) name_fmt = Lit("User worker #%F"); pool->num_worker_threads = 4; pool->thread_affinity_mask = 0x00000000000000F0ull; - pool->thread_priority = THREAD_PRIORITY_TIME_CRITICAL; + pool->thread_priority = THREAD_PRIORITY_ABOVE_NORMAL; } break; case JobPool_Audio: @@ -97,13 +97,23 @@ void InitJobWorkers(void) name_fmt = Lit("Background worker #%F"); pool->num_worker_threads = 2; pool->thread_affinity_mask = 0x0000000000000C00ull; + pool->thread_priority = THREAD_PRIORITY_NORMAL; } break; - case JobPool_Floating: + case JobPool_Blocking: { name_fmt = Lit("Floating worker #%F"); pool->num_worker_threads = 8; pool->thread_affinity_mask = 0x0000000000000FFFull; + pool->thread_priority = THREAD_PRIORITY_NORMAL; + } break; + + case JobPool_Hyper: + { + name_fmt = Lit("Floating worker #%F"); + pool->num_worker_threads = 8; + pool->thread_affinity_mask = 0x0000000000000FFFull; + pool->thread_priority = THREAD_PRIORITY_HIGHEST; } break; } pool->worker_threads_arena = AcquireArena(Gibi(64)); @@ -1091,11 +1101,11 @@ W32_ThreadDef(W32_JobWorkerEntryFunc, worker_ctx_arg) { switch (wait_size) { + default: cancel_wait = 1; Assert(0); break; /* Invalid wait size */ case 1: cancel_wait = (u8)_InterlockedCompareExchange8(wait_addr, 0, 0) != *(u8 *)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 8: cancel_wait = (u64)_InterlockedCompareExchange64(wait_addr, 0, 0) != *(u64 *)wait_cmp; break; - default: cancel_wait = 1; Assert(0); break; /* Invalid wait size */ } } if (wait_time != 0 && !cancel_wait) diff --git a/src/gpu/gpu.h b/src/gpu/gpu.h index 3937ccf7..57cc9f1e 100644 --- a/src/gpu/gpu.h +++ b/src/gpu/gpu.h @@ -312,18 +312,18 @@ void GPU_FlushUav(GPU_CommandList *cl, GPU_Resource *resource); void GPU_DispatchClear(GPU_CommandList *cl, GPU_Resource *resource); void GPU_DispatchRasterize(GPU_CommandList *cl, - GPU_ShaderDesc vs, - GPU_ShaderDesc ps, - void *sig, - u32 rts_count, - GPU_Resource **rts, - u32 viewports_count, - GPU_Viewport *viewports, - u32 scissors_count, - GPU_Scissor *scissors, - u32 instances_count, - GPU_Resource *index_buffer, - GPU_RasterizeMode mode); + GPU_ShaderDesc vs, + GPU_ShaderDesc ps, + void *sig, + u32 rts_count, + GPU_Resource **rts, + u32 viewports_count, + GPU_Viewport *viewports, + u32 scissors_count, + GPU_Scissor *scissors, + u32 instances_count, + GPU_Resource *index_buffer, + GPU_RasterizeMode mode); void GPU_DispatchCompute(GPU_CommandList *cl, GPU_ShaderDesc cs, void *sig, u32 num_threads_x, u32 num_threads_y, u32 num_threads_z); diff --git a/src/gpu/gpu_dx12/gpu_dx12.c b/src/gpu/gpu_dx12/gpu_dx12.c index 19737bae..b92eae7e 100644 --- a/src/gpu/gpu_dx12/gpu_dx12.c +++ b/src/gpu/gpu_dx12/gpu_dx12.c @@ -1,3 +1,5 @@ +GPU_D12_SharedState GPU_D12_shared_state = ZI; + //////////////////////////////// //~ @hookdef Startup hook @@ -34,7 +36,7 @@ GPU_Fence GPU_GetGlobalFence(void) GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc) { LAX desc; - return (GPU_Resource *)0; + return 0; } void GPU_ReleaseResource(GPU_Resource *resource, GPU_Fence fence, GPU_ReleaseFlag flags) @@ -116,18 +118,18 @@ void GPU_DispatchClear(GPU_CommandList *cl, GPU_Resource *resource) } void GPU_DispatchRasterize(GPU_CommandList *cl, - GPU_ShaderDesc vs, - GPU_ShaderDesc ps, - void *sig, - u32 rts_count, - GPU_Resource **rts, - u32 viewports_count, - GPU_Viewport *viewports, - u32 scissors_count, - GPU_Scissor *scissors, - u32 instances_count, - GPU_Resource *index_buffer, - GPU_RasterizeMode mode) + GPU_ShaderDesc vs, + GPU_ShaderDesc ps, + void *sig, + u32 rts_count, + GPU_Resource **rts, + u32 viewports_count, + GPU_Viewport *viewports, + u32 scissors_count, + GPU_Scissor *scissors, + u32 instances_count, + GPU_Resource *index_buffer, + GPU_RasterizeMode mode) { LAX cl; LAX vs; diff --git a/src/gpu/gpu_dx12/gpu_dx12.h b/src/gpu/gpu_dx12/gpu_dx12.h index e69de29b..5456b9b2 100644 --- a/src/gpu/gpu_dx12/gpu_dx12.h +++ b/src/gpu/gpu_dx12/gpu_dx12.h @@ -0,0 +1,9 @@ +//////////////////////////////// +//~ Shared state + +Struct(GPU_D12_SharedState) +{ + i32 _; +}; + +extern GPU_D12_SharedState GPU_D12_shared_state; diff --git a/src/json/json.c b/src/json/json.c index 5e885986..a6965f44 100644 --- a/src/json/json.c +++ b/src/json/json.c @@ -38,16 +38,16 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) { switch (src.text[pos]) { - JSON_Case_Newline: - JSON_Case_Space: - { - ++pos; - } break; - default: { whitespace_done = 1; } break; + + case JSON_Case_Newline: + case JSON_Case_Space: + { + ++pos; + } break; } } @@ -66,6 +66,8 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) /* Lex known token kinds */ switch (src.text[pos]) { + default: break; + /* Symbols */ case ',': { @@ -112,7 +114,7 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) { switch (src.text[pos + 1]) { - JSON_Case_Digit0Through9: + case JSON_Case_Digit0Through9: { next_is_digit = 1; } break; @@ -124,7 +126,7 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) break; } } FALLTHROUGH; - JSON_Case_Digit0Through9: + case JSON_Case_Digit0Through9: { t->kind = JSON_TokenKind_Number; JSON_LexNumberState state = JSON_LexNumberState_Whole; @@ -133,7 +135,12 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) { switch (src.text[pos]) { - JSON_Case_Digit0Through9: + default: + { + number_done = 1; + } break; + + case JSON_Case_Digit0Through9: { ++pos; } break; @@ -146,13 +153,13 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) u8 c1 = src.text[pos + 1]; switch (c1) { - JSON_Case_Digit0Through9: + default: break; + + case JSON_Case_Digit0Through9: { /* Consume '.' */ ++consume; } break; - - default: break; } } if (consume) @@ -175,7 +182,7 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) u8 c1 = src.text[pos + 1]; switch (c1) { - JSON_Case_Digit0Through9: + case JSON_Case_Digit0Through9: { /* Consume 'E'/'e' */ ++consume; @@ -189,13 +196,13 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) u8 c2 = src.text[pos + 2]; switch (c2) { - JSON_Case_Digit0Through9: + default: break; + + case JSON_Case_Digit0Through9: { /* Consume 'E'/'e' & '+'/'-' */ consume += 2; } break; - - default: break; } } } break; @@ -213,11 +220,6 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) number_done = 1; } } break; - - default: - { - number_done = 1; - } break; } } } break; @@ -235,7 +237,12 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) next_escaped = 0; switch (src.text[pos]) { - JSON_Case_Newline: + default: + { + ++pos; + } break; + + case JSON_Case_Newline: { ++pos; string_done = 1; @@ -259,11 +266,6 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) next_escaped = 1; } } break; - - default: - { - ++pos; - } break; } } } break; @@ -283,16 +285,16 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) /* Don't match if word continues past keyword */ switch (src.text[pos + keyword.len]) { - JSON_Case_Symbol: - JSON_Case_Space: - JSON_Case_Newline: - { - } break; - default: { match = 0; } break; + + case JSON_Case_Symbol: + case JSON_Case_Space: + case JSON_Case_Newline: + { + } break; } } if (match) @@ -311,8 +313,6 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) pos += keyword.len; } } break; - - default: break; } } @@ -324,17 +324,17 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src) { switch (src.text[pos]) { - JSON_Case_Symbol: - JSON_Case_Space: - JSON_Case_Newline: - { - unknown_done = 1; - } break; - default: { ++pos; } break; + + case JSON_Case_Symbol: + case JSON_Case_Space: + case JSON_Case_Newline: + { + unknown_done = 1; + } break; } } t->end = pos; @@ -384,7 +384,14 @@ f64 interpret_number(String src) { switch (src.text[pos]) { - JSON_Case_Digit0Through9: + default: + { + /* Unreachable */ + Assert(0); + ++pos; + } break; + + case JSON_Case_Digit0Through9: { switch (state) { @@ -440,6 +447,13 @@ f64 interpret_number(String src) { switch (state) { + default: + { + /* Unreachable */ + Assert(0); + ++pos; + } break; + case JSON_LexNumberState_Whole: { whole_sign = -1; @@ -451,13 +465,6 @@ f64 interpret_number(String src) exponent_sign = -1; ++pos; } break; - - default: - { - /* Unreachable */ - Assert(0); - ++pos; - } break; } } break; @@ -465,26 +472,19 @@ f64 interpret_number(String src) { switch (state) { - case JSON_LexNumberState_Exponent: - { - exponent_sign = 1; - ++pos; - } break; - default: { /* Unreachable */ Assert(0); ++pos; } break; - } - } break; - default: - { - /* Unreachable */ - Assert(0); - ++pos; + case JSON_LexNumberState_Exponent: + { + exponent_sign = 1; + ++pos; + } break; + } } break; } } @@ -578,6 +578,15 @@ String interpret_string(Arena *arena, String src, String *error) { switch (src.text[pos]) { + default: + { + if (error) + { + *error = Lit("Invalid escape character in string."); + return result; + } + } break; + case '"': case '\\': case '/': @@ -634,21 +643,19 @@ String interpret_string(Arena *arena, String src, String *error) /* TODO */ } break; #endif - - default: - { - if (error) - { - *error = Lit("Invalid escape character in string."); - return result; - } - } break; } } else { switch (src.text[pos]) { + default: + { + *PushStructNoZero(arena, u8) = src.text[pos]; + ++result.len; + ++pos; + } break; + case '\\': { escaped = 1; @@ -661,13 +668,6 @@ String interpret_string(Arena *arena, String src, String *error) valid_close = 1; ++pos; } break; - - default: - { - *PushStructNoZero(arena, u8) = src.text[pos]; - ++result.len; - ++pos; - } break; } } } @@ -801,6 +801,13 @@ void JSON_Parse(Arena *arena, JSON_Parser *p) /* Parse value */ switch (at->kind) { + default: + { + JSON_PushError(arena, p, at, Lit("Value expected.")); + at = at->next; + goto abort; + } break; + case JSON_TokenKind_Number: { String t_text = STRING(at->end - at->start, &src.text[at->start]); @@ -861,13 +868,6 @@ void JSON_Parse(Arena *arena, JSON_Parser *p) at = at->next; is_new_parent = 1; } break; - - default: - { - JSON_PushError(arena, p, at, Lit("Value expected.")); - at = at->next; - goto abort; - } break; } } diff --git a/src/json/json.h b/src/json/json.h index c8f68fe8..f9158193 100644 --- a/src/json/json.h +++ b/src/json/json.h @@ -54,21 +54,21 @@ Struct(JSON_Result) //~ Lexer types #define JSON_Case_Newline \ - case 0x0A: /* Line feed or New line */ \ + 0x0A: /* Line feed or New line */ \ case 0x0D /* Carriage return */ #define JSON_Case_Space \ - case 0x20: /* Space */ \ + 0x20: /* Space */ \ case 0x09 /* Horizontal tab */ #define JSON_Case_Digit0Through9 \ - case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9' + '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9' #define JSON_Case_Digit1Through9 \ - case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9' + '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9' #define JSON_Case_Symbol \ - case ',': case ':': case '[': case ']': case '{': case '}' + ',': case ':': case '[': case ']': case '{': case '}' Enum(JSON_TokenKind) { diff --git a/src/meta/meta.c b/src/meta/meta.c index 153a38ad..228460d9 100644 --- a/src/meta/meta.c +++ b/src/meta/meta.c @@ -736,6 +736,23 @@ Error *PushError(Arena *arena, ErrorList *list, String file, i64 pos, String s) return e; } +//////////////////////////////// +//~ Task + +JobDecl(TaskJob, {i32 _;}); + +JobDef(TaskJob, sig, id) +{ + +} + + + + + + + + //////////////////////////////// //~ Build @@ -890,60 +907,76 @@ void StartupMeta(void) } //- Generate compiler flags - StringList shared_compiler_flags = ZI; - StringList msvc_compiler_flags = ZI; - StringList clang_compiler_flags = ZI; + StringList compiler_defs = ZI; + StringList warning_flags_msvc = ZI; + StringList warning_flags_clang = ZI; + StringList flags_msvc = ZI; + StringList flags_clang = ZI; + StringList compiler_flags_msvc = ZI; + StringList compiler_flags_clang = ZI; + StringList linker_flags_msvc = ZI; + StringList linker_flags_clang = ZI; { - //- Shared - PushStringToList(arena, &shared_compiler_flags, Lit("-DIsConsoleApp=0")); - PushStringToList(arena, &shared_compiler_flags, Lit("-DRtcIsEnabled=1")); - PushStringToList(arena, &shared_compiler_flags, Lit("-DAsanIsEnabled=0")); - PushStringToList(arena, &shared_compiler_flags, Lit("-DCrtlibIsEnabled=1")); - PushStringToList(arena, &shared_compiler_flags, Lit("-DDebinfoEnabled=1")); - PushStringToList(arena, &shared_compiler_flags, Lit("-DDeveloperIsEnabled=1")); - PushStringToList(arena, &shared_compiler_flags, Lit("-DProfilingIsEnabled=0")); - PushStringToList(arena, &shared_compiler_flags, Lit("-DUnoptimizedIsEnabled=1")); - PushStringToList(arena, &shared_compiler_flags, Lit("-DTestsAreEnabled=0")); + //- Shared definitions + PushStringToList(arena, &compiler_defs, Lit("-DIsConsoleApp=0")); + PushStringToList(arena, &compiler_defs, Lit("-DRtcIsEnabled=1")); + PushStringToList(arena, &compiler_defs, Lit("-DAsanIsEnabled=0")); + PushStringToList(arena, &compiler_defs, Lit("-DCrtlibIsEnabled=1")); + PushStringToList(arena, &compiler_defs, Lit("-DDebinfoEnabled=1")); + PushStringToList(arena, &compiler_defs, Lit("-DDeveloperIsEnabled=1")); + PushStringToList(arena, &compiler_defs, Lit("-DProfilingIsEnabled=0")); + PushStringToList(arena, &compiler_defs, Lit("-DUnoptimizedIsEnabled=1")); + PushStringToList(arena, &compiler_defs, Lit("-DTestsAreEnabled=0")); //- Msvc { - PushStringToList(arena, &msvc_compiler_flags, Lit("-Z7")); - PushStringToList(arena, &msvc_compiler_flags, Lit("-DEBUG:FULL")); - PushStringToList(arena, &msvc_compiler_flags, Lit("-Fo:pp_gen.obj")); - PushStringToList(arena, &msvc_compiler_flags, Lit("-Fe:pp.exe")); - PushStringToList(arena, &msvc_compiler_flags, Lit("-nologo")); - PushStringToList(arena, &msvc_compiler_flags, Lit("-diagnostics:column")); + PushStringToList(arena, &flags_msvc, Lit("-Fe:pp.exe")); + PushStringToList(arena, &flags_msvc, Lit("-nologo")); + PushStringToList(arena, &compiler_flags_msvc, Lit("-Fo:pp_gen.obj")); + PushStringToList(arena, &compiler_flags_msvc, Lit("-diagnostics:column")); + + /* Debug info */ + PushStringToList(arena, &flags_msvc, Lit("-DEBUG:FULL")); + PushStringToList(arena, &compiler_flags_msvc, Lit("-Z7")); + /* Enable warnings */ - PushStringToList(arena, &msvc_compiler_flags, Lit("-W4")); - PushStringToList(arena, &msvc_compiler_flags, Lit("-we4013")); /* function undefined; assuming extern returning int */ + PushStringToList(arena, &warning_flags_msvc, Lit("-W4")); + PushStringToList(arena, &warning_flags_msvc, Lit("-WX")); + // PushStringToList(arena, &warning_flags_msvc, Lit("-we4013")); /* function undefined; assuming extern returning int */ + /* Disable warnings */ - PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4244")); /* function': conversion from 'int' to 'f32', possible loss of data */ - PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4201")); /* nonstandard extension used: nameless struct/union */ - PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4324")); /* structure was padded due to alignment specifier */ - PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4100")); /* unreferenced parameter */ - PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4101")); /* unreferenced local variable */ - PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4189")); /* local variable is initialized but not referenced */ - PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4200")); /* nonstandard extension used: zero-sized array in struct/union */ + PushStringToList(arena, &warning_flags_msvc, Lit("-wd4244")); /* 'function': conversion from 'int' to 'f32', possible loss of data */ + PushStringToList(arena, &warning_flags_msvc, Lit("-wd4201")); /* nonstandard extension used: nameless struct/union */ + PushStringToList(arena, &warning_flags_msvc, Lit("-wd4324")); /* structure was padded due to alignment specifier */ + PushStringToList(arena, &warning_flags_msvc, Lit("-wd4100")); /* unreferenced parameter */ + PushStringToList(arena, &warning_flags_msvc, Lit("-wd4101")); /* unreferenced local variable */ + PushStringToList(arena, &warning_flags_msvc, Lit("-wd4189")); /* local variable is initialized but not referenced */ + PushStringToList(arena, &warning_flags_msvc, Lit("-wd4200")); /* nonstandard extension used: zero-sized array in struct/union */ } //- Clang { - PushStringToList(arena, &clang_compiler_flags, Lit("-std=c99")); - PushStringToList(arena, &clang_compiler_flags, Lit("-fno-finite-loops")); - PushStringToList(arena, &clang_compiler_flags, Lit("-g -gcodeview")); - PushStringToList(arena, &clang_compiler_flags, Lit("-O0")); - PushStringToList(arena, &clang_compiler_flags, Lit("-msse4.2")); + PushStringToList(arena, &flags_clang, Lit("-std=c99")); + PushStringToList(arena, &flags_clang, Lit("-fno-finite-loops")); + PushStringToList(arena, &flags_clang, Lit("-g -gcodeview")); + PushStringToList(arena, &flags_clang, Lit("-O0")); + PushStringToList(arena, &flags_clang, Lit("-msse4.2")); + /* Enable warnings */ - PushStringToList(arena, &clang_compiler_flags, Lit("-Wall")); - PushStringToList(arena, &clang_compiler_flags, Lit("-Werror")); - PushStringToList(arena, &clang_compiler_flags, Lit("-Wframe-larger-than=65536")); - PushStringToList(arena, &clang_compiler_flags, Lit("-Wmissing-prototypes")); - PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-variable")); - PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-but-set-variable")); - PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-parameter")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wall")); + PushStringToList(arena, &warning_flags_clang, Lit("-Werror")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wframe-larger-than=65536")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wmissing-prototypes")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wmissing-declarations")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wunused-variable")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wunused-but-set-variable")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wunused-parameter")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wimplicit-fallthrough")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wswitch")); + /* Disable warnings */ - PushStringToList(arena, &clang_compiler_flags, Lit("-Wno-initializer-overrides")); - PushStringToList(arena, &clang_compiler_flags, Lit("-Wno-microsoft-enum-forward-reference")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wno-initializer-overrides")); + PushStringToList(arena, &warning_flags_clang, Lit("-Wno-microsoft-enum-forward-reference")); } } @@ -952,21 +985,27 @@ void StartupMeta(void) String clang_cmd_str = ZI; /* Msvc */ { - String flags_str = StringF(arena, - "%F %F", - FmtString(StringFromList(arena, shared_compiler_flags, Lit(" "))), - FmtString(StringFromList(arena, msvc_compiler_flags, Lit(" "))) - ); - msvc_cmd_str = StringF(arena, "\"cl\" %F %F", FmtString(c_out_file), FmtString(flags_str)); + String compiler_str = StringF(arena, + "%F %F %F %F", + FmtString(StringFromList(arena, flags_msvc, Lit(" "))), + FmtString(StringFromList(arena, compiler_flags_msvc, Lit(" "))), + FmtString(StringFromList(arena, warning_flags_msvc, Lit(" "))), + FmtString(StringFromList(arena, compiler_defs, Lit(" ")))); + String linker_str = StringF(arena, + "%F %F", + FmtString(StringFromList(arena, flags_msvc, Lit(" "))), + FmtString(StringFromList(arena, linker_flags_msvc, Lit(" ")))); + msvc_cmd_str = StringF(arena, "\"cl\" %F %F -link %F", FmtString(c_out_file), FmtString(compiler_str), FmtString(linker_str)); } /* Clang */ { - String flags_str = StringF(arena, - "%F %F", - FmtString(StringFromList(arena, shared_compiler_flags, Lit(" "))), - FmtString(StringFromList(arena, clang_compiler_flags, Lit(" "))) - ); - clang_cmd_str = StringF(arena, "\"clang\" %F %F", FmtString(c_out_file), FmtString(flags_str)); + String compiler_str = StringF(arena, + "%F %F %F %F", + FmtString(StringFromList(arena, flags_clang, Lit(" "))), + FmtString(StringFromList(arena, compiler_flags_clang, Lit(" "))), + FmtString(StringFromList(arena, warning_flags_clang, Lit(" "))), + FmtString(StringFromList(arena, compiler_defs, Lit(" ")))); + clang_cmd_str = StringF(arena, "\"clang\" %F %F", FmtString(c_out_file), FmtString(compiler_str)); } //- Compile C diff --git a/src/net/net.c b/src/net/net.c index f1feece6..c147d912 100644 --- a/src/net/net.c +++ b/src/net/net.c @@ -624,6 +624,8 @@ N_EventList N_BeginUpdate(Arena *arena, N_Host *host) { switch (packet_kind) { + default: break; + //- Read packet kind: TryConnect case N_PacketKind_TryConnect: { @@ -754,8 +756,6 @@ N_EventList N_BeginUpdate(Arena *arena, N_Host *host) } } } break; - - default: break; } } host->bytes_received += packet->data.len; @@ -867,6 +867,8 @@ void N_EndUpdate(N_Host *host) N_Channel *channel = node->channel; switch (kind) { + default: break; + //- Process command: TryConnect case N_CmdKind_TryConnect: { @@ -971,8 +973,6 @@ void N_EndUpdate(N_Host *host) packet->data_len = BB_GetNumBytesWritten(&bw); } } break; - - default: break; } } } diff --git a/src/platform/platform_win32/platform_win32.c b/src/platform/platform_win32/platform_win32.c index 791d6ed4..27b6325a 100644 --- a/src/platform/platform_win32/platform_win32.c +++ b/src/platform/platform_win32/platform_win32.c @@ -520,6 +520,11 @@ LRESULT CALLBACK P_W32_Win32WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARA b32 is_release = 0; switch (msg) { + default: + { + result = DefWindowProcW(hwnd, msg, wparam, lparam); + } break; + case WM_QUIT: case WM_CLOSE: case WM_DESTROY: @@ -766,11 +771,6 @@ LRESULT CALLBACK P_W32_Win32WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARA mmi->ptMinTrackSize.x = 100; mmi->ptMinTrackSize.y = 100; } break; - - default: - { - result = DefWindowProcW(hwnd, msg, wparam, lparam); - } break; } return result; @@ -923,6 +923,8 @@ void P_MkDir(String path) String err = ZI; switch (err_code) { + default: break; + case ERROR_BAD_PATHNAME: { err = Lit("Bad path name"); @@ -942,8 +944,6 @@ void P_MkDir(String path) { err = Lit("User canceled the operation"); } break; - - default: break; } if (err.len > 0) { diff --git a/src/pp/pp.c b/src/pp/pp.c index 27cffb70..5191f286 100644 --- a/src/pp/pp.c +++ b/src/pp/pp.c @@ -1811,6 +1811,8 @@ void UpdateUser(P_Window *window) switch (bind) { + default: break; + /* Movement */ case BindKind_MoveUp: { @@ -1831,8 +1833,6 @@ void UpdateUser(P_Window *window) { input_move_dir.x += 1; } break; - - default: break; } } diff --git a/src/pp/pp_step.c b/src/pp/pp_step.c index 95cce2ec..25a4fcf9 100644 --- a/src/pp/pp_step.c +++ b/src/pp/pp_step.c @@ -1036,6 +1036,12 @@ void StepSim(SimStepCtx *ctx) CmdKind kind = cmd_ent->cmd_kind; switch (kind) { + default: + { + /* Invalid cmd kind */ + Assert(0); + } break; + case CmdKind_Control: { /* Player's will send control cmds a lot, so keep it around to prevent re-creating it each time */ @@ -1172,12 +1178,6 @@ void StepSim(SimStepCtx *ctx) } } break; #endif - - default: - { - /* Invalid cmd kind */ - Assert(0); - } break; } /* Release cmd */ diff --git a/src/sprite/sprite.c b/src/sprite/sprite.c index 75d10b59..36d5c516 100644 --- a/src/sprite/sprite.c +++ b/src/sprite/sprite.c @@ -1,3 +1,5 @@ +Readonly S_Texture S_NilTexture = ZI; +Readonly S_Sheet S_NilSheet = ZI; S_SharedState S_shared_state = ZI; //////////////////////////////// @@ -32,13 +34,13 @@ S_Tag S_TagFromResource(R_Tag resource) S_Texture *S_TextureFromTagAwait(S_Tag tag) { - S_Texture *result = ZI; + S_Texture *result = &S_NilTexture; return result; } S_Texture *S_TextureFromTagAsync(S_Tag tag) { - S_Texture *result = ZI; + S_Texture *result = &S_NilTexture; return result; } @@ -47,13 +49,13 @@ S_Texture *S_TextureFromTagAsync(S_Tag tag) S_Sheet *S_SheetFromTagAwait(S_Tag tag) { - S_Sheet *result = ZI; + S_Sheet *result = &S_NilSheet; return result; } S_Sheet *S_SheetFromTagAsync(S_Tag tag) { - S_Sheet *result = ZI; + S_Sheet *result = &S_NilSheet; return result; } diff --git a/src/sprite/sprite.h b/src/sprite/sprite.h index 74ef792e..c553850d 100644 --- a/src/sprite/sprite.h +++ b/src/sprite/sprite.h @@ -18,6 +18,8 @@ Struct(S_Texture) u32 height; }; +extern Readonly S_Texture S_NilTexture; + //////////////////////////////// //~ Sheet types @@ -89,6 +91,8 @@ Struct(S_Sheet) Dict *slice_groups_dict; }; +extern Readonly S_Sheet S_NilSheet; + //////////////////////////////// //~ Shared state