@@ -132,7 +132,6 @@ class GraphicsContextD3D : public GraphicsContext
132132 if (swapchain != nullptr )
133133 swapchain.As (&swapchain2);
134134
135- canQueryPresentationTiming = swapchain != nullptr ;
136135 applyMaximumFrameLatency ();
137136 updateFrameTimingCapabilities ();
138137 }
@@ -285,21 +284,24 @@ class GraphicsContextD3D : public GraphicsContext
285284 if (isHeadless)
286285 return ;
287286
288- UINT latency = maximumFramesInFlight.has_value ()
289- ? static_cast <UINT > (jlimit<uint32_t > (1 , 16 , *maximumFramesInFlight))
290- : 0u ;
287+ static constexpr UINT defaultMaximumFrameLatency = 3u ;
288+
289+ const bool usesDefaultLatency = ! maximumFramesInFlight.has_value ();
290+ UINT latency = usesDefaultLatency
291+ ? defaultMaximumFrameLatency
292+ : static_cast <UINT > (jlimit<uint32_t > (1 , 16 , *maximumFramesInFlight));
291293 frameLatencyWaitableObject = nullptr ;
292294 canControlMaximumFramesInFlight = false ;
293295
294- if (swapchain2 != nullptr && latency > 0 )
296+ if (swapchain2 != nullptr )
295297 {
296298 if (SUCCEEDED (swapchain2->SetMaximumFrameLatency (latency)))
297299 {
298300 canControlMaximumFramesInFlight = true ;
299301 frameLatencyWaitableObject = swapchain2->GetFrameLatencyWaitableObject ();
300302 }
301303 }
302- else if (auto dxgiDevice = ComPtr<IDXGIDevice1>(); SUCCEEDED (device.As (&dxgiDevice)) && latency > 0 )
304+ else if (auto dxgiDevice = ComPtr<IDXGIDevice1>(); SUCCEEDED (device.As (&dxgiDevice)))
303305 {
304306 canControlMaximumFramesInFlight = SUCCEEDED (dxgiDevice->SetMaximumFrameLatency (latency));
305307 }
@@ -309,7 +311,7 @@ class GraphicsContextD3D : public GraphicsContext
309311
310312 void updateFrameTimingCapabilities ()
311313 {
312- frameTimingCapabilities.hasPresentationTiming = canQueryPresentationTiming ;
314+ frameTimingCapabilities.hasPresentationTiming = hasValidPresentationTiming ;
313315 frameTimingCapabilities.hasFrameLatencyWait = frameLatencyWaitableObject != nullptr ;
314316 frameTimingCapabilities.hasGpuCompletionTiming = false ;
315317 frameTimingCapabilities.hasMaximumFramesInFlight = canControlMaximumFramesInFlight;
@@ -333,7 +335,6 @@ class GraphicsContextD3D : public GraphicsContext
333335 FrameTimingCapabilities frameTimingCapabilities;
334336 FrameTimingInfo lastFrameTimingInfo;
335337 HANDLE frameLatencyWaitableObject = nullptr ;
336- bool canQueryPresentationTiming = false ;
337338 bool canControlMaximumFramesInFlight = false ;
338339 LARGE_INTEGER qpcFrequency {};
339340 double lastPresentedAtSeconds = 0.0 ;
0 commit comments