CNA-GAP-024: DIRECTX11 and DIRECTX12 never use DXGI exclusive full screen: SetFullscreenState is not called and exclusiveFullscreen_ is dead state

CNA snapshot 009d40f5  ·  Known Issues › Functional gaps  ·  source links pinned to 009d40f5

✓

Evidence basis: source-verified at the pinned commit. 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.

Neither renderer calls IDXGISwapChain::SetFullscreenState, and exclusiveFullscreen_ is declared and read (it disables tearing) but never set. Full screen is applied by the platform window instead, so the swap chain always stays a windowed flip-model chain and never learns that the platform switched the display mode.

Identifier
CNA-GAP-024
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
None
Affected contract
GraphicsDeviceManager.IsFullScreen / ToggleFullScreen on DIRECTX11 and DIRECTX12

Expected behaviour

XNA on Windows used exclusive full screen; DXGI exposes swap-chain-owned exclusive mode through SetFullscreenState.

Actual behaviour at TARGET

A grep of the whole tree finds no SetFullscreenState. exclusiveFullscreen_ stays false in DirectX11Renderer and DirectX12Renderer and is read only in the Present tearing condition, and both UpdatePresentationFormatEXT overrides discard isFullScreen because full screen 'has its own path'. That path is GraphicsDevice::applyPresentationParametersToWindow (and GameWindow::EndScreenDeviceChange), which ask the platform window for WindowFullscreenMode::ExclusiveFullscreen: the SDL3 window (the default backend) selects the closest real display mode to the back-buffer size, and Win32Window covers the monitor borderless and calls ChangeDisplaySettingsEx with the monitor's current size. So full screen is not always a plain borderless window; what is missing is DXGI-level exclusive ownership, and the D3D renderers never see the platform's exclusive state.

Source locations

Evidence

Checked by reading the named sources at 009d40f5; nothing was built or executed for this entry. Borderless flip-model presentation is the modern default and usually preferable; the gap matters for display-mode changes.

Independent re-verification: Checked by reading the named sources at 009d40f5; nothing was built or executed for this entry. Platform-level exclusive-mode tests exist (Sdl3WindowTests, X11ExclusiveFullscreenTests) but none exercises a D3D swap chain in full screen. Borderless flip-model presentation is the modern default and usually preferable; the residual gap is the unset swap-chain policy state and the absence of DXGI exclusive ownership, not the absence of a display-mode switch.

Focused reproduction

No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.

Current tests

No test requests exclusive mode.

Regression test

If exclusive mode is added: a native Windows test that enters and leaves it and checks the display mode.

Blast radius

Games that expect a display-mode change (resolution/refresh switch) when going full screen.

Workaround

No workaround is known.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.