Skip to content

Commit 92159d2

Browse files
Copilotkunitoki
andauthored
Adjust D3D pacing capability defaults
Co-authored-by: kunitoki <707032+kunitoki@users.noreply.github.com>
1 parent 2d9616a commit 92159d2

2 files changed

Lines changed: 10 additions & 9 deletions

File tree

‎modules/yup_graphics/native/yup_GraphicsContext_d3d.cpp‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

‎modules/yup_gui/native/yup_FramePacer.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ class FramePacer
208208
if (requestedMode == ComponentNative::FramePacingMode::software)
209209
return configuration.vsyncEnabled ? EffectiveMode::off : EffectiveMode::software;
210210

211-
if (capabilities.hasPresentationTiming)
211+
if (hasPresentationDrivenSupport)
212212
return EffectiveMode::presentationDriven;
213213

214214
return configuration.vsyncEnabled ? EffectiveMode::off : EffectiveMode::software;

0 commit comments

Comments
 (0)