fake swapchain frame latency wait

This commit is contained in:
jacob 2025-09-24 18:08:09 -05:00
parent c61e30d3a4
commit 11aec42474
5 changed files with 14 additions and 8 deletions

View File

@ -96,4 +96,4 @@
#define VSYNC !RtcIsEnabled
#define AUDIO_ENABLED 0
#define FPS_LIMIT 0
#define FPS_LIMIT 300

View File

@ -2112,9 +2112,14 @@ void GPU_ReleaseSwapchain(GPU_Swapchain *swapchain)
/* TODO */
}
void GPU_YieldOnSwapchain(GPU_Swapchain *swapchain)
void GPU_YieldOnSwapchain(GPU_Swapchain *gpu_swapchain)
{
/* TODO */
/* TODO: Actually yield, don't block */
GPU_D12_Swapchain *swapchain = (GPU_D12_Swapchain *)gpu_swapchain;
if (swapchain->waitable)
{
WaitForSingleObjectEx(swapchain->waitable, 1000, 1);
}
}
i64 GPU_PresentSwapchain(GPU_Swapchain *gpu_swapchain, GPU_Resource *gpu_texture, Vec2I32 backbuffer_size, Vec2I32 dst, i32 vsync)

View File

@ -12,7 +12,7 @@
//~ Tweakable defines
#define GPU_D12_TearingIsAllowed 1
#define GPU_D12_FrameLatency 0 /* TODO: Set this to 1 */
#define GPU_D12_FrameLatency 1
#define GPU_D12_SwapchainBufferCount 4
#define GPU_D12_SwapchainFlags (((GPU_D12_TearingIsAllowed != 0) * DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) \
| ((GPU_D12_FrameLatency != 0) * DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT))

View File

@ -922,6 +922,7 @@ JobDef(Build, _, __)
PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4101")); /* unreferenced local variable */
PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4189")); /* local variable is initialized but not referenced */
PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4200")); /* nonstandard extension used: zero-sized array in struct/union */
PushStringToList(arena, &cp.warnings_msvc, Lit("-wd4702")); /* unreachable code */
}
//- Clang

View File

@ -2560,10 +2560,6 @@ JobDef(UpdateUserOrSleep, UNUSED sig, UNUSED id)
P_Window *window = g->window;
{
__profn("User sleep");
{
__profn("Swapchain wait");
GPU_YieldOnSwapchain(g->swapchain);
}
#if FPS_LIMIT > 0
{
__profn("Frame limiter wait");
@ -2571,6 +2567,10 @@ JobDef(UpdateUserOrSleep, UNUSED sig, UNUSED id)
time_ns = TimeNs();
}
#endif
{
__profn("Swapchain wait");
GPU_YieldOnSwapchain(g->swapchain);
}
}
UpdateUser(window);
}