From b270737becbcb925b081d52a2720ab7baaae0a73 Mon Sep 17 00:00:00 2001 From: jacob Date: Thu, 10 Jul 2025 15:06:31 -0500 Subject: [PATCH] move latency waitable to end of present --- src/gp_dx12.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/gp_dx12.c b/src/gp_dx12.c index 29a5515d..2f712bf6 100644 --- a/src/gp_dx12.c +++ b/src/gp_dx12.c @@ -42,10 +42,7 @@ #define DX12_ALLOW_TEARING 1 #define DX12_WAIT_FRAME_LATENCY 1 #define DX12_SWAPCHAIN_FLAGS ((DX12_ALLOW_TEARING * DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) | (DX12_WAIT_FRAME_LATENCY * DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT)) - -#define DX12_SWAPCHAIN_BUFFER_COUNT (2) -#define DX12_SWAPCHAIN_FORMAT (DXGI_FORMAT_R8G8B8A8_UNORM) -//#define DX12_SWAPCHAIN_RTV_FORMAT (DXGI_FORMAT_R8G8B8A8_UNORM_SRGB) +#define DX12_SWAPCHAIN_BUFFER_COUNT (4) /* Arbitrary limits */ #define DX12_NUM_CBV_SRV_UAV_DESCRIPTORS (1024 * 64) @@ -2611,7 +2608,7 @@ INTERNAL struct swapchain_buffer *update_swapchain(struct swapchain *swapchain, IDXGISwapChain1 *swapchain1 = 0; { DXGI_SWAP_CHAIN_DESC1 desc = ZI; - desc.Format = DX12_SWAPCHAIN_FORMAT; + desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; desc.Width = resolution.x; desc.Height = resolution.y; desc.SampleDesc.Count = 1; @@ -2771,11 +2768,11 @@ INTERNAL void present_blit(struct swapchain_buffer *dst, struct dx12_resource *s pipeline_scope_end(pipeline_scope); } -void gp_present(struct sys_window *window, struct v2i32 backresolution, struct gp_resource *texture, struct xform texture_xf, i32 vsync) +void gp_present(struct sys_window *window, struct v2i32 backbuffer_resolution, struct gp_resource *texture, struct xform texture_xf, i32 vsync) { __prof; struct swapchain *swapchain = &G.swapchain; - struct swapchain_buffer *swapchain_buffer = update_swapchain(swapchain, window, backresolution); + struct swapchain_buffer *swapchain_buffer = update_swapchain(swapchain, window, backbuffer_resolution); struct dx12_resource *texture_resource = (struct dx12_resource *)texture; /* Blit */ @@ -2786,14 +2783,7 @@ void gp_present(struct sys_window *window, struct v2i32 backresolution, struct g present_flags |= (DXGI_PRESENT_ALLOW_TEARING * DX12_ALLOW_TEARING); } - /* Wait */ - if (swapchain->waitable) { - __profn("Present wait"); - WaitForSingleObjectEx(swapchain->waitable, 1000, 1); - } - /* Present */ - /* FIXME: Resource barrier */ { __profn("Present"); HRESULT hr = IDXGISwapChain3_Present(swapchain->swapchain, vsync, present_flags); @@ -2822,6 +2812,13 @@ void gp_present(struct sys_window *window, struct v2i32 backresolution, struct g } } #endif + + /* Wait on swapchain */ + /* TODO: Move this to system layer */ + if (swapchain->waitable) { + __profn("Present wait"); + WaitForSingleObjectEx(swapchain->waitable, 1000, 1); + } } /* ========================== *