CNA-GAP-017: PresentationMode is stored but not honoured by FREEDIRECT (always letterbox), CANVAS (only FixedHeightDynamicWidth changes output) and DIRECTX9 (never read)
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 selected presentation mode reaches these renderers, but FREEDIRECT's presenter always letterboxes, CANVAS acts only on FixedHeightDynamicWidth, and DIRECTX9 stores the mode and virtual resolution without reading them.
- Identifier
CNA-GAP-017- Category
- Functional gap
- Subsystem
- Graphics & renderers
- 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
- CNA PresentationMode (GraphicsDeviceManager::PreferredPresentationMode, GraphicsDevice::SetPresentationMode) on FREEDIRECT, CANVAS and DIRECTX9
Expected behaviour
CNA's presentation modes (Stretch, Letterbox, Overscan, NativeBackBuffer, FixedHeightDynamicWidth) define how the logical back buffer maps onto the window; each renderer is expected to apply the selected one.
Actual behaviour at TARGET
FreeDirectRenderer.cpp's SetPresentationMode stores the value and its comment says free-direct's PresentPrimary hard-codes letterbox, so Stretch, Overscan and NativeBackBuffer cannot reach the screen. CanvasRenderer.cpp reads presentationMode_ only to special-case FixedHeightDynamicWidth. DirectX9Renderer.cpp assigns presentationMode_, virtualWidth_ and virtualHeight_ and never reads them, so every mode behaves like NativeBackBuffer.
Source locations
modules/renderers/freedirect/src/FreeDirectRenderer.cpp— FreeDirectRenderer::SetPresentationMode and its letterbox commentmodules/renderers/canvas/src/CanvasRenderer.cpp— presentationMode_ usemodules/renderers/directx9/src/DirectX9Renderer.cpp— DirectX9Renderer::SetPresentationMode and SetVirtualResolution
Evidence
Checked by reading the named sources at 009d40f5; nothing was built or executed for this entry.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
No presentation-mode pixel fixture is registered for these three renderers.
Regression test
A presentation fixture that renders a known pattern with each mode into a window of a different aspect ratio and checks the placement, registered per renderer (or an explicit refusal of unsupported modes).
Blast radius
Games that choose a presentation mode other than the renderer's fixed behaviour; the image is letterboxed or unscaled instead.
Workaround
No workaround is known.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- Known issues
- Functional gap index