reset mutex spin count after wait
This commit is contained in:
parent
e720e7e2af
commit
0a3e9adcbd
@ -45,7 +45,7 @@
|
|||||||
#define DX12_ALLOW_TEARING 1
|
#define DX12_ALLOW_TEARING 1
|
||||||
#define DX12_SWAPCHAIN_FLAGS (DX12_ALLOW_TEARING * DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING)
|
#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_FORMAT (DXGI_FORMAT_R8G8B8A8_UNORM)
|
||||||
//#define DX12_SWAPCHAIN_RTV_FORMAT (DXGI_FORMAT_R8G8B8A8_UNORM_SRGB)
|
//#define DX12_SWAPCHAIN_RTV_FORMAT (DXGI_FORMAT_R8G8B8A8_UNORM_SRGB)
|
||||||
|
|
||||||
|
|||||||
@ -247,6 +247,7 @@ INTERNAL SYS_THREAD_DEF(playback_scheduler_entry, _)
|
|||||||
|
|
||||||
/* FIXME: If playback fails at any point and mixer stops advancing, we
|
/* FIXME: If playback fails at any point and mixer stops advancing, we
|
||||||
* need to halt mixer to prevent memory leak when sounds are played. */
|
* 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)) {
|
while (!atomic_i32_fetch(&G.shutdown)) {
|
||||||
{
|
{
|
||||||
__profn("Wait for audio event");
|
__profn("Wait for audio event");
|
||||||
|
|||||||
@ -46,6 +46,7 @@ struct snc_lock snc_lock_spin_e(struct snc_mutex *m, i32 spin)
|
|||||||
ix_pause();
|
ix_pause();
|
||||||
} else {
|
} else {
|
||||||
sys_wait(&m->v, &v, 4, F32_INFINITY);
|
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();
|
ix_pause();
|
||||||
} else {
|
} else {
|
||||||
sys_wait(&m->v, &v, 4, F32_INFINITY);
|
sys_wait(&m->v, &v, 4, F32_INFINITY);
|
||||||
|
spin_cnt = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
#define FIBER_NAME_MAX_SIZE 64
|
||||||
|
|
||||||
enum yield_kind {
|
enum yield_kind {
|
||||||
@ -580,10 +581,14 @@ INTERNAL struct fiber *fiber_alloc(enum fiber_kind kind)
|
|||||||
|
|
||||||
/* Concat fiber name */
|
/* Concat fiber name */
|
||||||
i32 name_size = 1;
|
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));
|
MEMCPY(new_name_cstr, FIBER_NAME_PREFIX_CSTR, sizeof(FIBER_NAME_PREFIX_CSTR));
|
||||||
name_size += sizeof(FIBER_NAME_PREFIX_CSTR) - 2;
|
name_size += sizeof(FIBER_NAME_PREFIX_CSTR) - 2;
|
||||||
MEMCPY(new_name_cstr + name_size, id_chars, id_chars_len);
|
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;
|
fiber->name_cstr = new_name_cstr;
|
||||||
|
|
||||||
/* Init win32 fiber */
|
/* Init win32 fiber */
|
||||||
@ -717,7 +722,7 @@ INTERNAL void job_fiber_entry(void *id_ptr)
|
|||||||
while (true) {
|
while (true) {
|
||||||
/* Run job */
|
/* Run job */
|
||||||
{
|
{
|
||||||
__profn("Run job");
|
//__profn("Run job");
|
||||||
volatile struct yield_param *yield_param = fiber->yield_param;
|
volatile struct yield_param *yield_param = fiber->yield_param;
|
||||||
yield_param->kind = YIELD_KIND_NONE;
|
yield_param->kind = YIELD_KIND_NONE;
|
||||||
struct sys_job_data data = ZI;
|
struct sys_job_data data = ZI;
|
||||||
|
|||||||
@ -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);
|
struct snc_lock lock = snc_lock_e(&G.local_to_user_client_mutex);
|
||||||
u64 old_last_tick = G.user_unblended_client->last_tick;
|
u64 old_last_tick = G.user_unblended_client->last_tick;
|
||||||
u64 last_tick = G.local_to_user_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) */
|
/* How along are we between sim ticks (0 = start of tick, 1 = end of tick) */
|
||||||
f64 tick_progress = 0;
|
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;
|
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);
|
struct sys_event_array events = pop_sys_events(scratch.arena);
|
||||||
|
|
||||||
/* Reset bind pressed / released states */
|
/* Reset bind pressed / released states */
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user