CNA-VGAP-022: No test measures presentation cadence: PresentInterval::Two against ordinary vsync, or Vulkan's FIFO_RELAXED late-frame behaviour
Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
The registered interval tests on EasyGL, SDL_RENDERER, SDL_GPU, VULKAN and the shared forwarding contract check storage, forwarding and the selected present mode, not the resulting frame timing.
- Identifier
CNA-VGAP-022- Category
- Verification gap
- Subsystem
- Testing & evidence
- Status
- Open
- Verified against
- CNA
009d40f5(009d40f5dd085c4e674d3479675fac84b12b3e0a) - Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- Yes: see Current tests
- Affected contract
- PresentationParameters.PresentationInterval (One, Two, Immediate) and the renderers' swap-interval / present-mode mapping
Expected behaviour
PresentInterval::Two means presenting every second vertical retrace (half refresh rate); FIFO_RELAXED lets a late frame tear instead of waiting. Only a timing measurement shows that a renderer really does either.
Actual behaviour at TARGET
The interval tests - easygl_present_interval_test.cpp (also registered for VULKAN, SOFTWARE, OPENGL4 and, through DirectXParityTests.cmake, DIRECTX11 and DIRECTX12), sdlrenderer_presentinterval_test.cpp, sdlgpu_presentation_surface_test.cpp, vulkan_swap_interval_test.cpp, webgpu_present_mode_test.cpp and swap_interval_forwarding_contract_test.cpp (also registered for DIRECTX11/12 and OPENGL4) - assert what was requested, forwarded, recorded or which present mode was chosen. None times presents; the shared PresentInterval test says so itself (actual VSync timing is a display effect that cannot be verified headlessly). Two renderers cannot produce half rate through their API: SDL_GPU applies ordinary one-vblank vsync for Two (documented in SdlGpuRenderer.hpp and pinned by sdlgpu_presentation_surface_test), and Vulkan requests FIFO_RELAXED, which the Vulkan specification does not define as half rate, while VulkanRenderer::SetSwapInterval's comment still says 2 = half-rate. A timing record there would characterise an approximation; it would verify half rate only for the renderers that hand 2 to the driver (EasyGL, SDL_RENDERER, Direct3D).
Source locations
modules/renderers/vulkan/examples/vulkan_swap_interval_test.cpp— checks the chosen present mode, not timingmodules/graphics/examples/swap_interval_forwarding_contract_test.cpp— forwarding contract only
Evidence
Checked by reading the named sources at 009d40f5; nothing was built or executed for this entry. Timing depends on the display, compositor and driver, which is why CNA avoids asserting it; the gap is that no recorded measurement exists either.
Independent re-verification: Checked by reading the named sources at 009d40f5; nothing was built or executed for this entry. Timing depends on the display, compositor and driver, which is why CNA avoids asserting it; the gap is that no recorded measurement exists either. The Direct3D renderers do register the shared PresentInterval and SwapIntervalForwarding fixtures, but only their manual Windows workflow runs them (CNA-VGAP-026).
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
As listed above: storage, forwarding and mode selection only.
Regression test
A manual or opt-in measurement harness that records present-to-present intervals for One and Two on real displays per renderer, with the results written down (not a CI assertion).
Blast radius
Games that use PresentInterval::Two for 30 Hz pacing; on some renderers the request may be approximated (SDL_RENDERER falls back to 1 when the driver rejects 2).
Workaround
Pace frames with IsFixedTimeStep and TargetElapsedTime instead of PresentInterval::Two.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- Known issues
- Verification gap index