wait on frame latency object
This commit is contained in:
parent
c548eacd35
commit
e3e0a98456
@ -83,5 +83,5 @@
|
||||
/* TODO: Move these to user-configurable settings */
|
||||
|
||||
#define AUDIO_ENABLED 0
|
||||
#define VSYNC_ENABLED 0
|
||||
#define VSYNC_ENABLED 1
|
||||
#define USER_FPS_LIMIT 300
|
||||
|
||||
@ -39,11 +39,9 @@
|
||||
# pragma comment(lib, "advapi32")
|
||||
#endif
|
||||
|
||||
//#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_ALLOW_TEARING 1
|
||||
#define DX12_SWAPCHAIN_FLAGS (DX12_ALLOW_TEARING * DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING)
|
||||
#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)
|
||||
@ -235,6 +233,7 @@ struct swapchain_buffer {
|
||||
struct swapchain {
|
||||
IDXGISwapChain3 *swapchain;
|
||||
HWND hwnd;
|
||||
HANDLE waitable;
|
||||
struct v2i32 resolution;
|
||||
struct swapchain_buffer buffers[DX12_SWAPCHAIN_BUFFER_COUNT];
|
||||
};
|
||||
@ -2635,6 +2634,13 @@ INTERNAL struct swapchain_buffer *update_swapchain(struct swapchain *swapchain,
|
||||
sys_panic(LIT("Failed to create IDXGISwapChain3"));
|
||||
}
|
||||
|
||||
/* Create waitable object */
|
||||
#if DX12_WAIT_FRAME_LATENCY
|
||||
IDXGISwapChain3_SetMaximumFrameLatency(swapchain->swapchain, 1);
|
||||
swapchain->waitable = IDXGISwapChain2_GetFrameLatencyWaitableObject(swapchain->swapchain);
|
||||
ASSERT(swapchain->waitable);
|
||||
#endif
|
||||
|
||||
/* Disable Alt+Enter changing monitor resolution to match window size */
|
||||
IDXGIFactory_MakeWindowAssociation(G.factory, hwnd, DXGI_MWA_NO_ALT_ENTER);
|
||||
|
||||
@ -2780,6 +2786,12 @@ 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 */
|
||||
{
|
||||
|
||||
@ -7,10 +7,10 @@
|
||||
|
||||
#if PROFILING
|
||||
|
||||
#define PROFILING_SYSTEM_TRACE 0
|
||||
#define PROFILING_SYSTEM_TRACE 1
|
||||
#define PROFILING_CAPTURE_FRAME_IMAGE 0
|
||||
#define PROFILING_LOCKS 0
|
||||
#define PROFILING_D3D 0
|
||||
#define PROFILING_D3D 1
|
||||
#define PROFILING_FILE_WSTR L".tracy"
|
||||
#define PROFILING_CMD_WSTR L"cmd /C start \"\" /wait tracy-capture.exe -o .tracy -a 127.0.0.1 && start \"\" tracy-profiler.exe .tracy"
|
||||
//#define PROFILING_CMD_WSTR L"tracy-profiler.exe -a 127.0.0.1"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user