diff --git a/src/gp_dx12.c b/src/gp_dx12.c index d8128d0c..1d8df737 100644 --- a/src/gp_dx12.c +++ b/src/gp_dx12.c @@ -45,7 +45,7 @@ #define DX12_ALLOW_TEARING 1 #define DX12_SWAPCHAIN_FLAGS (DX12_ALLOW_TEARING * DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) -#define DX12_SWAPCHAIN_BUFFER_COUNT (3) +#define DX12_SWAPCHAIN_BUFFER_COUNT (2) #define DX12_SWAPCHAIN_FORMAT (DXGI_FORMAT_R8G8B8A8_UNORM) //#define DX12_SWAPCHAIN_RTV_FORMAT (DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) diff --git a/src/playback_wasapi.c b/src/playback_wasapi.c index 863eb7f0..15450d30 100644 --- a/src/playback_wasapi.c +++ b/src/playback_wasapi.c @@ -247,6 +247,7 @@ INTERNAL SYS_THREAD_DEF(playback_scheduler_entry, _) /* FIXME: If playback fails at any point and mixer stops advancing, we * need to halt mixer to prevent memory leak when sounds are played. */ + /* TODO: Signal counter that running job wiats on, rather than scheduling job manually */ while (!atomic_i32_fetch(&G.shutdown)) { { __profn("Wait for audio event"); diff --git a/src/snc.c b/src/snc.c index 1513559f..c6f1b912 100644 --- a/src/snc.c +++ b/src/snc.c @@ -46,6 +46,7 @@ struct snc_lock snc_lock_spin_e(struct snc_mutex *m, i32 spin) ix_pause(); } else { sys_wait(&m->v, &v, 4, F32_INFINITY); + spin_cnt = 0; } } } @@ -82,6 +83,7 @@ struct snc_lock snc_lock_spin_s(struct snc_mutex *m, i32 spin) ix_pause(); } else { sys_wait(&m->v, &v, 4, F32_INFINITY); + spin_cnt = 0; } } } diff --git a/src/sys_win32.c b/src/sys_win32.c index 6af23f40..4c656192 100644 --- a/src/sys_win32.c +++ b/src/sys_win32.c @@ -186,7 +186,8 @@ STATIC_ASSERT(alignof(struct counter) == 64); /* Avoid false sharing */ -#define FIBER_NAME_PREFIX_CSTR "Fiber #" +#define FIBER_NAME_PREFIX_CSTR "[" +#define FIBER_NAME_SUFFIX_CSTR "] Fiber" #define FIBER_NAME_MAX_SIZE 64 enum yield_kind { @@ -580,10 +581,14 @@ INTERNAL struct fiber *fiber_alloc(enum fiber_kind kind) /* Concat fiber name */ i32 name_size = 1; - STATIC_ASSERT(sizeof(sizeof(FIBER_NAME_PREFIX_CSTR)) <= FIBER_NAME_MAX_SIZE); + ASSERT(sizeof(sizeof(FIBER_NAME_PREFIX_CSTR)) <= FIBER_NAME_MAX_SIZE); MEMCPY(new_name_cstr, FIBER_NAME_PREFIX_CSTR, sizeof(FIBER_NAME_PREFIX_CSTR)); name_size += sizeof(FIBER_NAME_PREFIX_CSTR) - 2; MEMCPY(new_name_cstr + name_size, id_chars, id_chars_len); + name_size += id_chars_len; + MEMCPY(new_name_cstr + name_size, FIBER_NAME_SUFFIX_CSTR, sizeof(FIBER_NAME_SUFFIX_CSTR)); + name_size += sizeof(FIBER_NAME_SUFFIX_CSTR) - 2; + fiber->name_cstr = new_name_cstr; /* Init win32 fiber */ @@ -717,7 +722,7 @@ INTERNAL void job_fiber_entry(void *id_ptr) while (true) { /* Run job */ { - __profn("Run job"); + //__profn("Run job"); volatile struct yield_param *yield_param = fiber->yield_param; yield_param->kind = YIELD_KIND_NONE; struct sys_job_data data = ZI; diff --git a/src/user.c b/src/user.c index 3611b8fc..ccbdc424 100644 --- a/src/user.c +++ b/src/user.c @@ -616,6 +616,7 @@ INTERNAL void user_update(void) * ========================== */ { + __profn("Pull snapshot"); struct snc_lock lock = snc_lock_e(&G.local_to_user_client_mutex); u64 old_last_tick = G.user_unblended_client->last_tick; u64 last_tick = G.local_to_user_client->last_tick; @@ -641,6 +642,7 @@ INTERNAL void user_update(void) * ========================== */ { + __profn("Blend snapshots"); /* How along are we between sim ticks (0 = start of tick, 1 = end of tick) */ f64 tick_progress = 0; i64 next_tick_expected_ns = G.last_local_to_user_snapshot_published_at_ns + G.average_local_to_user_snapshot_publish_dt_ns; @@ -728,6 +730,7 @@ INTERNAL void user_update(void) * ========================== */ { + __profn("Process sys events"); struct sys_event_array events = pop_sys_events(scratch.arena); /* Reset bind pressed / released states */