CNA-BUG-099: 24 classic SDL_GPU CTests still fail in CNA's latest recorded run; CNA's records name a cause for only three of them

CNA snapshot 009d40f5  ·  Known Issues › Current bugs  ·  source links pinned to 009d40f5

✓

Evidence basis: source-verified at the pinned commit; recorded by CNA's own run (not repeated here); 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.

CNA's SDL_GPU records list 26 classic ^SdlGpu CTests still failing just before TARGET; two are analysed in their own entries. Of the other 24, covering formats, render targets, render state and recovery, the records give a cause for two (a test that clears depth on a DepthFormat::None device, and a double free in the constructor failure path), a guess for a third, and nothing for the other 21.

Identifier
CNA-BUG-099
Category
Bug
Subsystem
Graphics & renderers
Status
Open
Verified against
CNA 009d40f5 (009d40f5dd085c4e674d3479675fac84b12b3e0a)
Severity
Medium (a triage suggestion, not a project priority)
Evidence basis
Recorded by CNA: CNA's own recorded run, not repeated here
Tests touching this area
Yes: see Current tests
Affected contract
SDL_GPU renderer behaviour pinned by the classic ^SdlGpu CTest set (renderer examples, shared parity fixtures, EasyGL oracle cases and SdlGpuIndexedDrawRangeTest)

Expected behaviour

Each registered ^SdlGpu CTest states part of the renderer's contract; the parity fixtures and EasyGL oracle cases are the same checks other renderers are held to. SDL_GPU is declared Supported in GraphicsBackendMaturity.hpp, so a routine run of its own suite is expected to pass.

Actual behaviour at TARGET

  • PSG-0009 (plan_pre_sdlgpu_closeout.md) recorded 202 passing and 27 failing of 229 classic SDL_GPU CTests. The SDL_GPU modern-graphics and street workstreams re-ran the set after their changes and report "the same 27 by name" (SMG-0042: 204 / 27 of 231 with two new tests) until STREETS-0007 repaired SdlGpu_Smoke's stale checks; the last record before TARGET (STREETS-0008, plan_street_sdlgpu.md) is 26 failures, "none new". Two of the 26 are analysed elsewhere (SdlGpu_OcclusionQuery_Limitation under CNA-BUG-012, SdlGpu_2D_HeadlessDriver under CNA-BUG-203). The other 24, grouped here by name only:
  • Formats and targets: SdlGpu_Texture2D_FormatMatrix, SdlGpu_Texture2D_FormatMatrixFallback, SdlGpu_TextureCube_FormatMatrix, SdlGpu_TextureCube_FormatMatrixFallback, SdlGpu_Parity_compressed_cube, SdlGpu_Parity_compressed_cube_fallback, SdlGpu_RenderTargetCube_Formats, SdlGpu_RenderTargetCube_MsaaMip, SdlGpu_RenderTarget_SetData, SdlGpu_TextureFilterMipContract, SdlGpu_EasyGLOracle_surface_format_throws.
  • State and draws: SdlGpu_RenderState, SdlGpu_DepthBias, SdlGpu_Deferred_Scissor, SdlGpu_DrawLineTopology, SdlGpu_EasyGLOracle_depthstencilstate_stencil_twosided, SdlGpu_EasyGLOracle_draw_range_validation, SdlGpu_Parity_dual_texture_terms, SdlGpuIndexedDrawRangeTest.MutatingSourceBuffersAfterQueuingDoesNotChangeQueuedDraws, SdlGpuIndexedDrawRangeTest.RejectsIndexedRangesOutsideTheBoundBuffers.
  • Device, presentation and lifetime: SdlGpu_BackbufferFormat, SdlGpu_ConstructorExceptionSafety, SdlGpu_SwapchainRecovery, SdlGpu_DepthlessCube_SpriteBatchCompatibility.
  • CNA's records name a cause for only three of the 24. SdlGpu_BackbufferFormat: plan_gpu_test_isolation.md (GTI-0010) records that the test clears depth on a DepthFormat::None device, which GraphicsDevice::Clear refuses under XNA's rule (a stale test expectation). SdlGpu_ConstructorExceptionSafety: plan_sdlgpu_modern_graphics.md (SMG-0041 and its classic-debt backlog) records an abort with "free(): double free detected in tcache 2", identical on the unmodified renderer sources, and calls it a real bug rather than test debt; that cause is also published on its own as CNA-BUG-253. SdlGpu_Parity_dual_texture_terms: PSG-0009 only suggests it may be the XNA opaque-black null-texture rule. The other 21 have no recorded cause.

Source locations

Evidence

CNA's own record executed the set, on one machine: tools/platform/run_gpu_tests_private.sh (private Weston and rootful Xwayland), an AMD Radeon 780M under RADV Mesa 25.0.7, SDL_gpu on its Vulkan driver, a Release build with CNA_SDL_GPU_SHADERCROSS=OFF and libshaderc present (PSG-0010). The record calls them "Real renderer results, none of them a dead test", and STREETS-0008 re-ran all 27 on a stashed baseline to show they predate its change. No per-test output or cause is kept in the tree, except PSG-0009's remark that SdlGpu_Parity_dual_texture_terms may be the XNA opaque-black null-texture rule that WebGPU's twin failed until WMG-0025. SdlGpu_SwapchainRecovery passed 5/5 when SDLGPU-11 added it, so at least that one regressed later. Nothing was re-run for this entry: whether each failure is a renderer defect or a stale expectation is not established, which is why this entry is one cluster rather than 24 diagnoses. No CI workflow runs any SDL_GPU test.

A record from twelve days before that baseline points the other way: the closeout row of plans/plan_sdlgpu.md (2026-09-11, the sweep after SDLGPU-133) reports all 194 registered native SDL_GPU integration CTests passing sequentially with SDL_VIDEODRIVER=offscreen and no display, while the classic baseline above (PSG-0009, 2026-09-23) was taken under a private Weston and Xwayland. The two records count different sets (194 registrations against 229 tests matching ^SdlGpu) and neither says whether the difference is a regression after 11 September or the display route, so this entry reports the failures as recorded and does not attribute them.

Independent re-verification: CNA's own record executed the set, on one machine: run_gpu_tests_private.sh (private Weston and rootful Xwayland), an AMD Radeon 780M under RADV Mesa 25.0.7, SDL_gpu on its Vulkan driver, a Release build with CNA_SDL_GPU_SHADERCROSS=OFF and libshaderc present (PSG-0010). The record calls them "Real renderer results, none of them a dead test", and STREETS-0008 re-ran all 27 on a stashed baseline to show they predate its change. Nothing was re-run for this entry: the evidence is recorded by CNA, not reproduced here, and whether each failure is a renderer defect, a stale expectation or specific to that machine is not established. Earlier records were greener: remediation/REMEDIATION_INDEX.md (REMED-GFX-180, 2026-07-31) reports a fully green 102-test SDL_GPU shard, and SdlGpu_SwapchainRecovery passed 5/5 when SDLGPU-11 added it, so some of these are later regressions or environment-specific. No CI workflow runs any SDL_GPU test.

Focused reproduction

# The command CNA's own record uses; not executed for this entry.
tools/platform/run_gpu_tests_private.sh cmake-build-sdlgpu -R '^SdlGpu' -j4

Current tests

The failing CTests themselves, registered in modules/renderers/sdl-gpu/examples/CMakeLists.txt and SdlGpuIndexedDrawRangeTests.cpp. They run only where someone runs the classic set on a GPU host; no workflow names SDL_GPU.

Regression test

The tests exist; what is missing is triage. Record each failure's cause in the SDL_GPU plan, fix the renderer or the stale expectation so the CTest turns green, and put the classic ^SdlGpu set behind a recorded gate (a GPU-capable CI lane or a release checklist) so the count cannot silently stay at 26.

Blast radius

SDL_GPU only. The areas these tests pin (texture and cube-map formats and their fallbacks, compressed cubes, cube render targets with MSAA and mips, RenderTarget2D SetData, filtering and mips, render state, depth bias, deferred scissor, line topology, two-sided stencil, draw-range validation, dual-texture terms, indexed draw ranges, back-buffer formats, constructor exception safety and swapchain recovery) may diverge from the tested contract. Which of them affect a real game is unknown until each is triaged. Other renderers are unaffected.

Workaround

No workaround is known.

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

Maintainer workflow
Fix a renderer bug: triage
Tests and validation
Test architecture: GPU tests
Known issues
Bug index