res refactor progress

This commit is contained in:
jacob 2025-08-26 22:32:29 -05:00
parent a8fb832bcb
commit c0bad6e58b
20 changed files with 309 additions and 241 deletions

View File

@ -77,6 +77,8 @@ AppArgList ParseAppArgs(Arena *arena, String args_str)
u8 c = args_str.text[i]; u8 c = args_str.text[i];
switch (mode) switch (mode)
{ {
default: break;
case 0: case 0:
{ {
if (c == '-') if (c == '-')
@ -133,7 +135,6 @@ AppArgList ParseAppArgs(Arena *arena, String args_str)
} }
++i; ++i;
} break; } break;
default: break;
} }
} }
return result; return result;

View File

@ -557,6 +557,11 @@ ASE_DecodedImage ASE_DecodeImage(Arena *arena, String encoded)
switch (chunk_type) switch (chunk_type)
{ {
default:
{
BB_SeekToByte(&br, chunk_end_pos);
} break;
//- Decode layer //- Decode layer
case ASE_ChunkKind_Layer: case ASE_ChunkKind_Layer:
{ {
@ -659,11 +664,6 @@ ASE_DecodedImage ASE_DecodeImage(Arena *arena, String encoded)
} break; } break;
} }
} break; } break;
default:
{
BB_SeekToByte(&br, chunk_end_pos);
} break;
} }
} }
++num_frames; ++num_frames;
@ -855,6 +855,11 @@ ASE_DecodedSheet ASE_DecodeSheet(Arena *arena, String encoded)
switch (chunk_type) switch (chunk_type)
{ {
default:
{
BB_SeekToByte(&br, chunk_end_pos);
} break;
//- Decode tags //- Decode tags
case ASE_ChunkKind_Tags: case ASE_ChunkKind_Tags:
{ {
@ -931,11 +936,6 @@ ASE_DecodedSheet ASE_DecodeSheet(Arena *arena, String encoded)
/* TODO */ /* TODO */
//case ASE_ChunkKind_Userdata //case ASE_ChunkKind_Userdata
default:
{
BB_SeekToByte(&br, chunk_end_pos);
} break;
} }
} }
++num_frames; ++num_frames;

View File

@ -31,8 +31,8 @@ Struct(TempArena)
Struct(ArenaCtx) Struct(ArenaCtx)
{ {
Arena *scratch_arenas[ScratchArenasPerCtx];
Arena *perm_arena; Arena *perm_arena;
Arena *scratch_arenas[ScratchArenasPerCtx];
}; };
//////////////////////////////// ////////////////////////////////
@ -182,18 +182,20 @@ Inline ArenaCtx *ArenaCtxFromFiberId(i16 fiber_id)
{ {
SharedArenaCtx *g = &shared_arena_ctx; SharedArenaCtx *g = &shared_arena_ctx;
ArenaCtx *ctx = &g->arena_contexts[fiber_id]; ArenaCtx *ctx = &g->arena_contexts[fiber_id];
if (!ctx->scratch_arenas[0]) if (!ctx->perm_arena)
{ {
__profn("Initialize fiber arena ctx"); __profn("Initialize fiber arena ctx");
ctx->perm_arena = AcquireArena(Gibi(64));
for (i32 i = 0; i < (i32)countof(ctx->scratch_arenas); ++i) for (i32 i = 0; i < (i32)countof(ctx->scratch_arenas); ++i)
{ {
ctx->scratch_arenas[i] = AcquireArena(Gibi(64)); ctx->scratch_arenas[i] = AcquireArena(Gibi(64));
} }
ctx->perm_arena = AcquireArena(Gibi(64));
} }
return ctx; return ctx;
} }
#define PermArena (ArenaCtxFromFiberId(FiberId)->perm_arena)
//////////////////////////////// ////////////////////////////////
//~ Scratch helpers //~ Scratch helpers
@ -247,12 +249,3 @@ Inline void EndScratch(TempArena scratch_temp)
{ {
EndTempArena(scratch_temp); EndTempArena(scratch_temp);
} }
////////////////////////////////
//~ Perm arena helpers
Inline Arena *GetPermArena(void)
{
ArenaCtx *ctx = ArenaCtxFromFiberId(FiberId);
return ctx->perm_arena;
}

View File

@ -7,16 +7,24 @@ Enum(JobPool)
{ {
JobPool_Inherit = -1, JobPool_Inherit = -1,
/* The floating pool contains a large number of lower priority worker /* Contains critical-priority worker threads affinitized over the entire CPU.
* threads that have affinity over the entire CPU. Other pools should push * Meant to take on high-bandwidth temporary work (e.g. loading a level). */
* jobs that only block and do no work here so that they can yield on the JobPool_Hyper = 0,
* blocking job rather than blocking themselves. */
JobPool_Floating = 0,
JobPool_Background = 1, /* Contains low-priority worker threads affinitized over the entire CPU.
JobPool_Audio = 2, * Meant to take on blocking work that higher-priority workers can continue doing actual work. */
JobPool_User = 3, JobPool_Blocking = 1,
JobPool_Sim = 4,
/* 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 JobPool_Count
}; };

View File

@ -543,6 +543,14 @@ String FormatStringV(Arena *arena, String fmt, va_list args)
FmtArg arg = va_arg(args, FmtArg); FmtArg arg = va_arg(args, FmtArg);
switch (arg.kind) switch (arg.kind)
{ {
default:
{
/* Unknown format type */
Assert(0);
parsed_str = PushString(arena, Lit("<?>"));
no_more_args = 1;
} break;
case FmtKind_Char: case FmtKind_Char:
{ {
parsed_str = StringFromChar(arena, arg.value.c); 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("<?>")); parsed_str = PushString(arena, Lit("<?>"));
no_more_args = 1; no_more_args = 1;
} break; } break;
default:
{
/* Unknown format type */
Assert(0);
parsed_str = PushString(arena, Lit("<?>"));
no_more_args = 1;
} break;
} }
/* Update final string len / start */ /* Update final string len / start */
final_len += parsed_str.len; final_len += parsed_str.len;

View File

@ -20,6 +20,8 @@ Utf8DecodeResult DecodeUtf8(String str)
advance = 1; advance = 1;
switch (utf8_len) switch (utf8_len)
{ {
default: break;
case 1: case 1:
{ {
codepoint = c0; codepoint = c0;
@ -75,8 +77,6 @@ Utf8DecodeResult DecodeUtf8(String str)
} }
} }
} break; } break;
default: break;
} }
} }

View File

@ -193,7 +193,7 @@ i32 W32_Main(void)
/* Startup layers */ /* Startup layers */
if (!Atomic32Fetch(&g->panicking)) 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 */ /* Wait for startup end or panic */
@ -221,7 +221,7 @@ i32 W32_Main(void)
/* Run exit callbacks job */ /* Run exit callbacks job */
if (!Atomic32Fetch(&g->panicking)) 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 */ /* Wait for exit end or panic */

View File

@ -72,7 +72,7 @@ void InitJobWorkers(void)
name_fmt = Lit("Sim worker #%F"); name_fmt = Lit("Sim worker #%F");
pool->num_worker_threads = 4; pool->num_worker_threads = 4;
pool->thread_affinity_mask = 0x000000000000000Full; pool->thread_affinity_mask = 0x000000000000000Full;
pool->thread_priority = THREAD_PRIORITY_TIME_CRITICAL; pool->thread_priority = THREAD_PRIORITY_ABOVE_NORMAL;
} break; } break;
case JobPool_User: case JobPool_User:
@ -80,7 +80,7 @@ void InitJobWorkers(void)
name_fmt = Lit("User worker #%F"); name_fmt = Lit("User worker #%F");
pool->num_worker_threads = 4; pool->num_worker_threads = 4;
pool->thread_affinity_mask = 0x00000000000000F0ull; pool->thread_affinity_mask = 0x00000000000000F0ull;
pool->thread_priority = THREAD_PRIORITY_TIME_CRITICAL; pool->thread_priority = THREAD_PRIORITY_ABOVE_NORMAL;
} break; } break;
case JobPool_Audio: case JobPool_Audio:
@ -97,13 +97,23 @@ void InitJobWorkers(void)
name_fmt = Lit("Background worker #%F"); name_fmt = Lit("Background worker #%F");
pool->num_worker_threads = 2; pool->num_worker_threads = 2;
pool->thread_affinity_mask = 0x0000000000000C00ull; pool->thread_affinity_mask = 0x0000000000000C00ull;
pool->thread_priority = THREAD_PRIORITY_NORMAL;
} break; } break;
case JobPool_Floating: case JobPool_Blocking:
{ {
name_fmt = Lit("Floating worker #%F"); name_fmt = Lit("Floating worker #%F");
pool->num_worker_threads = 8; pool->num_worker_threads = 8;
pool->thread_affinity_mask = 0x0000000000000FFFull; 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; } break;
} }
pool->worker_threads_arena = AcquireArena(Gibi(64)); pool->worker_threads_arena = AcquireArena(Gibi(64));
@ -1091,11 +1101,11 @@ W32_ThreadDef(W32_JobWorkerEntryFunc, worker_ctx_arg)
{ {
switch (wait_size) 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 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 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 = 1; Assert(0); break; /* Invalid wait size */
} }
} }
if (wait_time != 0 && !cancel_wait) if (wait_time != 0 && !cancel_wait)

View File

@ -1,3 +1,5 @@
GPU_D12_SharedState GPU_D12_shared_state = ZI;
//////////////////////////////// ////////////////////////////////
//~ @hookdef Startup hook //~ @hookdef Startup hook
@ -34,7 +36,7 @@ GPU_Fence GPU_GetGlobalFence(void)
GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc) GPU_Resource *GPU_AcquireResource(GPU_ResourceDesc desc)
{ {
LAX desc; LAX desc;
return (GPU_Resource *)0; return 0;
} }
void GPU_ReleaseResource(GPU_Resource *resource, GPU_Fence fence, GPU_ReleaseFlag flags) void GPU_ReleaseResource(GPU_Resource *resource, GPU_Fence fence, GPU_ReleaseFlag flags)

View File

@ -0,0 +1,9 @@
////////////////////////////////
//~ Shared state
Struct(GPU_D12_SharedState)
{
i32 _;
};
extern GPU_D12_SharedState GPU_D12_shared_state;

View File

@ -38,16 +38,16 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
{ {
switch (src.text[pos]) switch (src.text[pos])
{ {
JSON_Case_Newline:
JSON_Case_Space:
{
++pos;
} break;
default: default:
{ {
whitespace_done = 1; whitespace_done = 1;
} break; } 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 */ /* Lex known token kinds */
switch (src.text[pos]) switch (src.text[pos])
{ {
default: break;
/* Symbols */ /* Symbols */
case ',': case ',':
{ {
@ -112,7 +114,7 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
{ {
switch (src.text[pos + 1]) switch (src.text[pos + 1])
{ {
JSON_Case_Digit0Through9: case JSON_Case_Digit0Through9:
{ {
next_is_digit = 1; next_is_digit = 1;
} break; } break;
@ -124,7 +126,7 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
break; break;
} }
} FALLTHROUGH; } FALLTHROUGH;
JSON_Case_Digit0Through9: case JSON_Case_Digit0Through9:
{ {
t->kind = JSON_TokenKind_Number; t->kind = JSON_TokenKind_Number;
JSON_LexNumberState state = JSON_LexNumberState_Whole; JSON_LexNumberState state = JSON_LexNumberState_Whole;
@ -133,7 +135,12 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
{ {
switch (src.text[pos]) switch (src.text[pos])
{ {
JSON_Case_Digit0Through9: default:
{
number_done = 1;
} break;
case JSON_Case_Digit0Through9:
{ {
++pos; ++pos;
} break; } break;
@ -146,13 +153,13 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
u8 c1 = src.text[pos + 1]; u8 c1 = src.text[pos + 1];
switch (c1) switch (c1)
{ {
JSON_Case_Digit0Through9: default: break;
case JSON_Case_Digit0Through9:
{ {
/* Consume '.' */ /* Consume '.' */
++consume; ++consume;
} break; } break;
default: break;
} }
} }
if (consume) if (consume)
@ -175,7 +182,7 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
u8 c1 = src.text[pos + 1]; u8 c1 = src.text[pos + 1];
switch (c1) switch (c1)
{ {
JSON_Case_Digit0Through9: case JSON_Case_Digit0Through9:
{ {
/* Consume 'E'/'e' */ /* Consume 'E'/'e' */
++consume; ++consume;
@ -189,13 +196,13 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
u8 c2 = src.text[pos + 2]; u8 c2 = src.text[pos + 2];
switch (c2) switch (c2)
{ {
JSON_Case_Digit0Through9: default: break;
case JSON_Case_Digit0Through9:
{ {
/* Consume 'E'/'e' & '+'/'-' */ /* Consume 'E'/'e' & '+'/'-' */
consume += 2; consume += 2;
} break; } break;
default: break;
} }
} }
} break; } break;
@ -213,11 +220,6 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
number_done = 1; number_done = 1;
} }
} break; } break;
default:
{
number_done = 1;
} break;
} }
} }
} break; } break;
@ -235,7 +237,12 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
next_escaped = 0; next_escaped = 0;
switch (src.text[pos]) switch (src.text[pos])
{ {
JSON_Case_Newline: default:
{
++pos;
} break;
case JSON_Case_Newline:
{ {
++pos; ++pos;
string_done = 1; string_done = 1;
@ -259,11 +266,6 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
next_escaped = 1; next_escaped = 1;
} }
} break; } break;
default:
{
++pos;
} break;
} }
} }
} break; } break;
@ -283,16 +285,16 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
/* Don't match if word continues past keyword */ /* Don't match if word continues past keyword */
switch (src.text[pos + keyword.len]) switch (src.text[pos + keyword.len])
{ {
JSON_Case_Symbol:
JSON_Case_Space:
JSON_Case_Newline:
{
} break;
default: default:
{ {
match = 0; match = 0;
} break; } break;
case JSON_Case_Symbol:
case JSON_Case_Space:
case JSON_Case_Newline:
{
} break;
} }
} }
if (match) if (match)
@ -311,8 +313,6 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
pos += keyword.len; pos += keyword.len;
} }
} break; } break;
default: break;
} }
} }
@ -324,17 +324,17 @@ JSON_TokenList JSON_TokensFromString(Arena *arena, String src)
{ {
switch (src.text[pos]) switch (src.text[pos])
{ {
JSON_Case_Symbol:
JSON_Case_Space:
JSON_Case_Newline:
{
unknown_done = 1;
} break;
default: default:
{ {
++pos; ++pos;
} break; } break;
case JSON_Case_Symbol:
case JSON_Case_Space:
case JSON_Case_Newline:
{
unknown_done = 1;
} break;
} }
} }
t->end = pos; t->end = pos;
@ -384,7 +384,14 @@ f64 interpret_number(String src)
{ {
switch (src.text[pos]) switch (src.text[pos])
{ {
JSON_Case_Digit0Through9: default:
{
/* Unreachable */
Assert(0);
++pos;
} break;
case JSON_Case_Digit0Through9:
{ {
switch (state) switch (state)
{ {
@ -440,6 +447,13 @@ f64 interpret_number(String src)
{ {
switch (state) switch (state)
{ {
default:
{
/* Unreachable */
Assert(0);
++pos;
} break;
case JSON_LexNumberState_Whole: case JSON_LexNumberState_Whole:
{ {
whole_sign = -1; whole_sign = -1;
@ -451,13 +465,6 @@ f64 interpret_number(String src)
exponent_sign = -1; exponent_sign = -1;
++pos; ++pos;
} break; } break;
default:
{
/* Unreachable */
Assert(0);
++pos;
} break;
} }
} break; } break;
@ -465,27 +472,20 @@ f64 interpret_number(String src)
{ {
switch (state) switch (state)
{ {
default:
{
/* Unreachable */
Assert(0);
++pos;
} break;
case JSON_LexNumberState_Exponent: case JSON_LexNumberState_Exponent:
{ {
exponent_sign = 1; exponent_sign = 1;
++pos; ++pos;
} break; } break;
default:
{
/* Unreachable */
Assert(0);
++pos;
} break;
} }
} break; } break;
default:
{
/* Unreachable */
Assert(0);
++pos;
} break;
} }
} }
} }
@ -578,6 +578,15 @@ String interpret_string(Arena *arena, String src, String *error)
{ {
switch (src.text[pos]) switch (src.text[pos])
{ {
default:
{
if (error)
{
*error = Lit("Invalid escape character in string.");
return result;
}
} break;
case '"': case '"':
case '\\': case '\\':
case '/': case '/':
@ -634,21 +643,19 @@ String interpret_string(Arena *arena, String src, String *error)
/* TODO */ /* TODO */
} break; } break;
#endif #endif
default:
{
if (error)
{
*error = Lit("Invalid escape character in string.");
return result;
}
} break;
} }
} }
else else
{ {
switch (src.text[pos]) switch (src.text[pos])
{ {
default:
{
*PushStructNoZero(arena, u8) = src.text[pos];
++result.len;
++pos;
} break;
case '\\': case '\\':
{ {
escaped = 1; escaped = 1;
@ -661,13 +668,6 @@ String interpret_string(Arena *arena, String src, String *error)
valid_close = 1; valid_close = 1;
++pos; ++pos;
} break; } 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 */ /* Parse value */
switch (at->kind) switch (at->kind)
{ {
default:
{
JSON_PushError(arena, p, at, Lit("Value expected."));
at = at->next;
goto abort;
} break;
case JSON_TokenKind_Number: case JSON_TokenKind_Number:
{ {
String t_text = STRING(at->end - at->start, &src.text[at->start]); 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; at = at->next;
is_new_parent = 1; is_new_parent = 1;
} break; } break;
default:
{
JSON_PushError(arena, p, at, Lit("Value expected."));
at = at->next;
goto abort;
} break;
} }
} }

View File

@ -54,21 +54,21 @@ Struct(JSON_Result)
//~ Lexer types //~ Lexer types
#define JSON_Case_Newline \ #define JSON_Case_Newline \
case 0x0A: /* Line feed or New line */ \ 0x0A: /* Line feed or New line */ \
case 0x0D /* Carriage return */ case 0x0D /* Carriage return */
#define JSON_Case_Space \ #define JSON_Case_Space \
case 0x20: /* Space */ \ 0x20: /* Space */ \
case 0x09 /* Horizontal tab */ case 0x09 /* Horizontal tab */
#define JSON_Case_Digit0Through9 \ #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 \ #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 \ #define JSON_Case_Symbol \
case ',': case ':': case '[': case ']': case '{': case '}' ',': case ':': case '[': case ']': case '{': case '}'
Enum(JSON_TokenKind) Enum(JSON_TokenKind)
{ {

View File

@ -736,6 +736,23 @@ Error *PushError(Arena *arena, ErrorList *list, String file, i64 pos, String s)
return e; return e;
} }
////////////////////////////////
//~ Task
JobDecl(TaskJob, {i32 _;});
JobDef(TaskJob, sig, id)
{
}
//////////////////////////////// ////////////////////////////////
//~ Build //~ Build
@ -890,60 +907,76 @@ void StartupMeta(void)
} }
//- Generate compiler flags //- Generate compiler flags
StringList shared_compiler_flags = ZI; StringList compiler_defs = ZI;
StringList msvc_compiler_flags = ZI; StringList warning_flags_msvc = ZI;
StringList clang_compiler_flags = 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 //- Shared definitions
PushStringToList(arena, &shared_compiler_flags, Lit("-DIsConsoleApp=0")); PushStringToList(arena, &compiler_defs, Lit("-DIsConsoleApp=0"));
PushStringToList(arena, &shared_compiler_flags, Lit("-DRtcIsEnabled=1")); PushStringToList(arena, &compiler_defs, Lit("-DRtcIsEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("-DAsanIsEnabled=0")); PushStringToList(arena, &compiler_defs, Lit("-DAsanIsEnabled=0"));
PushStringToList(arena, &shared_compiler_flags, Lit("-DCrtlibIsEnabled=1")); PushStringToList(arena, &compiler_defs, Lit("-DCrtlibIsEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("-DDebinfoEnabled=1")); PushStringToList(arena, &compiler_defs, Lit("-DDebinfoEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("-DDeveloperIsEnabled=1")); PushStringToList(arena, &compiler_defs, Lit("-DDeveloperIsEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("-DProfilingIsEnabled=0")); PushStringToList(arena, &compiler_defs, Lit("-DProfilingIsEnabled=0"));
PushStringToList(arena, &shared_compiler_flags, Lit("-DUnoptimizedIsEnabled=1")); PushStringToList(arena, &compiler_defs, Lit("-DUnoptimizedIsEnabled=1"));
PushStringToList(arena, &shared_compiler_flags, Lit("-DTestsAreEnabled=0")); PushStringToList(arena, &compiler_defs, Lit("-DTestsAreEnabled=0"));
//- Msvc //- Msvc
{ {
PushStringToList(arena, &msvc_compiler_flags, Lit("-Z7")); PushStringToList(arena, &flags_msvc, Lit("-Fe:pp.exe"));
PushStringToList(arena, &msvc_compiler_flags, Lit("-DEBUG:FULL")); PushStringToList(arena, &flags_msvc, Lit("-nologo"));
PushStringToList(arena, &msvc_compiler_flags, Lit("-Fo:pp_gen.obj")); PushStringToList(arena, &compiler_flags_msvc, Lit("-Fo:pp_gen.obj"));
PushStringToList(arena, &msvc_compiler_flags, Lit("-Fe:pp.exe")); PushStringToList(arena, &compiler_flags_msvc, Lit("-diagnostics:column"));
PushStringToList(arena, &msvc_compiler_flags, Lit("-nologo"));
PushStringToList(arena, &msvc_compiler_flags, Lit("-diagnostics:column")); /* Debug info */
PushStringToList(arena, &flags_msvc, Lit("-DEBUG:FULL"));
PushStringToList(arena, &compiler_flags_msvc, Lit("-Z7"));
/* Enable warnings */ /* Enable warnings */
PushStringToList(arena, &msvc_compiler_flags, Lit("-W4")); PushStringToList(arena, &warning_flags_msvc, Lit("-W4"));
PushStringToList(arena, &msvc_compiler_flags, Lit("-we4013")); /* function undefined; assuming extern returning int */ PushStringToList(arena, &warning_flags_msvc, Lit("-WX"));
// PushStringToList(arena, &warning_flags_msvc, Lit("-we4013")); /* function undefined; assuming extern returning int */
/* Disable warnings */ /* Disable warnings */
PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4244")); /* function': conversion from 'int' to 'f32', possible loss of data */ PushStringToList(arena, &warning_flags_msvc, 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, &warning_flags_msvc, Lit("-wd4201")); /* nonstandard extension used: nameless struct/union */
PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4324")); /* structure was padded due to alignment specifier */ PushStringToList(arena, &warning_flags_msvc, Lit("-wd4324")); /* structure was padded due to alignment specifier */
PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4100")); /* unreferenced parameter */ PushStringToList(arena, &warning_flags_msvc, Lit("-wd4100")); /* unreferenced parameter */
PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4101")); /* unreferenced local variable */ PushStringToList(arena, &warning_flags_msvc, Lit("-wd4101")); /* unreferenced local variable */
PushStringToList(arena, &msvc_compiler_flags, Lit("-wd4189")); /* local variable is initialized but not referenced */ PushStringToList(arena, &warning_flags_msvc, 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("-wd4200")); /* nonstandard extension used: zero-sized array in struct/union */
} }
//- Clang //- Clang
{ {
PushStringToList(arena, &clang_compiler_flags, Lit("-std=c99")); PushStringToList(arena, &flags_clang, Lit("-std=c99"));
PushStringToList(arena, &clang_compiler_flags, Lit("-fno-finite-loops")); PushStringToList(arena, &flags_clang, Lit("-fno-finite-loops"));
PushStringToList(arena, &clang_compiler_flags, Lit("-g -gcodeview")); PushStringToList(arena, &flags_clang, Lit("-g -gcodeview"));
PushStringToList(arena, &clang_compiler_flags, Lit("-O0")); PushStringToList(arena, &flags_clang, Lit("-O0"));
PushStringToList(arena, &clang_compiler_flags, Lit("-msse4.2")); PushStringToList(arena, &flags_clang, Lit("-msse4.2"));
/* Enable warnings */ /* Enable warnings */
PushStringToList(arena, &clang_compiler_flags, Lit("-Wall")); PushStringToList(arena, &warning_flags_clang, Lit("-Wall"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Werror")); PushStringToList(arena, &warning_flags_clang, Lit("-Werror"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wframe-larger-than=65536")); PushStringToList(arena, &warning_flags_clang, Lit("-Wframe-larger-than=65536"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wmissing-prototypes")); PushStringToList(arena, &warning_flags_clang, Lit("-Wmissing-prototypes"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-variable")); PushStringToList(arena, &warning_flags_clang, Lit("-Wmissing-declarations"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-but-set-variable")); PushStringToList(arena, &warning_flags_clang, Lit("-Wunused-variable"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-parameter")); 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 */ /* Disable warnings */
PushStringToList(arena, &clang_compiler_flags, Lit("-Wno-initializer-overrides")); PushStringToList(arena, &warning_flags_clang, Lit("-Wno-initializer-overrides"));
PushStringToList(arena, &clang_compiler_flags, Lit("-Wno-microsoft-enum-forward-reference")); PushStringToList(arena, &warning_flags_clang, Lit("-Wno-microsoft-enum-forward-reference"));
} }
} }
@ -952,21 +985,27 @@ void StartupMeta(void)
String clang_cmd_str = ZI; String clang_cmd_str = ZI;
/* Msvc */ /* Msvc */
{ {
String flags_str = StringF(arena, 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", "%F %F",
FmtString(StringFromList(arena, shared_compiler_flags, Lit(" "))), FmtString(StringFromList(arena, flags_msvc, Lit(" "))),
FmtString(StringFromList(arena, msvc_compiler_flags, 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));
msvc_cmd_str = StringF(arena, "\"cl\" %F %F", FmtString(c_out_file), FmtString(flags_str));
} }
/* Clang */ /* Clang */
{ {
String flags_str = StringF(arena, String compiler_str = StringF(arena,
"%F %F", "%F %F %F %F",
FmtString(StringFromList(arena, shared_compiler_flags, Lit(" "))), FmtString(StringFromList(arena, flags_clang, Lit(" "))),
FmtString(StringFromList(arena, clang_compiler_flags, Lit(" "))) FmtString(StringFromList(arena, compiler_flags_clang, Lit(" "))),
); FmtString(StringFromList(arena, warning_flags_clang, Lit(" "))),
clang_cmd_str = StringF(arena, "\"clang\" %F %F", FmtString(c_out_file), FmtString(flags_str)); FmtString(StringFromList(arena, compiler_defs, Lit(" "))));
clang_cmd_str = StringF(arena, "\"clang\" %F %F", FmtString(c_out_file), FmtString(compiler_str));
} }
//- Compile C //- Compile C

View File

@ -624,6 +624,8 @@ N_EventList N_BeginUpdate(Arena *arena, N_Host *host)
{ {
switch (packet_kind) switch (packet_kind)
{ {
default: break;
//- Read packet kind: TryConnect //- Read packet kind: TryConnect
case N_PacketKind_TryConnect: case N_PacketKind_TryConnect:
{ {
@ -754,8 +756,6 @@ N_EventList N_BeginUpdate(Arena *arena, N_Host *host)
} }
} }
} break; } break;
default: break;
} }
} }
host->bytes_received += packet->data.len; host->bytes_received += packet->data.len;
@ -867,6 +867,8 @@ void N_EndUpdate(N_Host *host)
N_Channel *channel = node->channel; N_Channel *channel = node->channel;
switch (kind) switch (kind)
{ {
default: break;
//- Process command: TryConnect //- Process command: TryConnect
case N_CmdKind_TryConnect: case N_CmdKind_TryConnect:
{ {
@ -971,8 +973,6 @@ void N_EndUpdate(N_Host *host)
packet->data_len = BB_GetNumBytesWritten(&bw); packet->data_len = BB_GetNumBytesWritten(&bw);
} }
} break; } break;
default: break;
} }
} }
} }

View File

@ -520,6 +520,11 @@ LRESULT CALLBACK P_W32_Win32WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARA
b32 is_release = 0; b32 is_release = 0;
switch (msg) switch (msg)
{ {
default:
{
result = DefWindowProcW(hwnd, msg, wparam, lparam);
} break;
case WM_QUIT: case WM_QUIT:
case WM_CLOSE: case WM_CLOSE:
case WM_DESTROY: 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.x = 100;
mmi->ptMinTrackSize.y = 100; mmi->ptMinTrackSize.y = 100;
} break; } break;
default:
{
result = DefWindowProcW(hwnd, msg, wparam, lparam);
} break;
} }
return result; return result;
@ -923,6 +923,8 @@ void P_MkDir(String path)
String err = ZI; String err = ZI;
switch (err_code) switch (err_code)
{ {
default: break;
case ERROR_BAD_PATHNAME: case ERROR_BAD_PATHNAME:
{ {
err = Lit("Bad path name"); err = Lit("Bad path name");
@ -942,8 +944,6 @@ void P_MkDir(String path)
{ {
err = Lit("User canceled the operation"); err = Lit("User canceled the operation");
} break; } break;
default: break;
} }
if (err.len > 0) if (err.len > 0)
{ {

View File

@ -1811,6 +1811,8 @@ void UpdateUser(P_Window *window)
switch (bind) switch (bind)
{ {
default: break;
/* Movement */ /* Movement */
case BindKind_MoveUp: case BindKind_MoveUp:
{ {
@ -1831,8 +1833,6 @@ void UpdateUser(P_Window *window)
{ {
input_move_dir.x += 1; input_move_dir.x += 1;
} break; } break;
default: break;
} }
} }

View File

@ -1036,6 +1036,12 @@ void StepSim(SimStepCtx *ctx)
CmdKind kind = cmd_ent->cmd_kind; CmdKind kind = cmd_ent->cmd_kind;
switch (kind) switch (kind)
{ {
default:
{
/* Invalid cmd kind */
Assert(0);
} break;
case CmdKind_Control: case CmdKind_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 */
@ -1172,12 +1178,6 @@ void StepSim(SimStepCtx *ctx)
} }
} break; } break;
#endif #endif
default:
{
/* Invalid cmd kind */
Assert(0);
} break;
} }
/* Release cmd */ /* Release cmd */

View File

@ -1,3 +1,5 @@
Readonly S_Texture S_NilTexture = ZI;
Readonly S_Sheet S_NilSheet = ZI;
S_SharedState S_shared_state = 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 *S_TextureFromTagAwait(S_Tag tag)
{ {
S_Texture *result = ZI; S_Texture *result = &S_NilTexture;
return result; return result;
} }
S_Texture *S_TextureFromTagAsync(S_Tag tag) S_Texture *S_TextureFromTagAsync(S_Tag tag)
{ {
S_Texture *result = ZI; S_Texture *result = &S_NilTexture;
return result; return result;
} }
@ -47,13 +49,13 @@ S_Texture *S_TextureFromTagAsync(S_Tag tag)
S_Sheet *S_SheetFromTagAwait(S_Tag tag) S_Sheet *S_SheetFromTagAwait(S_Tag tag)
{ {
S_Sheet *result = ZI; S_Sheet *result = &S_NilSheet;
return result; return result;
} }
S_Sheet *S_SheetFromTagAsync(S_Tag tag) S_Sheet *S_SheetFromTagAsync(S_Tag tag)
{ {
S_Sheet *result = ZI; S_Sheet *result = &S_NilSheet;
return result; return result;
} }

View File

@ -18,6 +18,8 @@ Struct(S_Texture)
u32 height; u32 height;
}; };
extern Readonly S_Texture S_NilTexture;
//////////////////////////////// ////////////////////////////////
//~ Sheet types //~ Sheet types
@ -89,6 +91,8 @@ Struct(S_Sheet)
Dict *slice_groups_dict; Dict *slice_groups_dict;
}; };
extern Readonly S_Sheet S_NilSheet;
//////////////////////////////// ////////////////////////////////
//~ Shared state //~ Shared state