CNA-VGAP-057: EasyGL: a full-backbuffer SpriteBatch draw before a frame's first 3D draw is listed as open (Task 933) but has never been reproduced, and the reported scene is untested

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

✓

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.

docs/migration-guide.md still lists Task 933 as a currently open EasyGL caveat. Four isolated repros and a dedicated fixture pass, so the original scene (bound target, file texture, real frame loop) is untested and the report is neither confirmed nor closed.

Identifier
CNA-VGAP-057
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
docs/migration-guide.md's open EasyGL caveat (Task 933): a full-backbuffer SpriteBatch draw before the first 3D draw of a frame

Expected behaviour

A defect that CNA's own migration guide lists as a currently open caveat is either reproduced by a test that fails, or closed with evidence that covers the reported conditions, and the documentation and the test work-around follow that outcome.

Actual behaviour at TARGET

migration-guide.md lists 'EasyGL: a full-backbuffer SpriteBatch draw before any 3D draw in the same frame breaks that frame's 3D rendering (Task 933) - investigated, root cause not yet isolated' among its real, currently open caveats, and easygl_spritebatch_blendstate_leak_test.cpp still avoids the case by drawing a corner sprite. plan_graphics.md row 933 records four isolated variants that all pass and names three untested conditions: a RenderTarget2D bound earlier in the frame, a texture decoded from a real file (the original scene's backbuffer is 480x800, not a power of two), and real Present-separated frames. The renderer-neutral fixture fullscreen_spritebatch_then_3d_test.cpp, registered as EasyGL_FullscreenSpriteThen3D and Vulkan_FullscreenSpriteThen3D, uses one frame per leg, an opaque BasicEffect quad and no render target; plan_vulkan.md VULKAN-400 records it passing on both renderers and states it does not establish that the finding is fixed. Nothing at the snapshot confirms or refutes the report for its original conditions.

Source locations

Evidence

Read at 009d40f5; nothing executed. The pass results are CNA's own recorded runs, not reproduced here. The viewport-reset suspect that row 933 recorded is not present as described: EasyGLSpriteBatchRenderer::FlushBatch now keeps a custom viewport and re-asserts the presentation rectangle or bound target's viewport (REMED-GFX-072).

Focused reproduction

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

Current tests

The renderer-neutral fixture fullscreen_spritebatch_then_3d_test.cpp (registered as EasyGL_FullscreenSpriteThen3D and Vulkan_FullscreenSpriteThen3D) passes with one frame per leg, an opaque BasicEffect quad and no render target; CNA's own record states that it does not establish that the finding is fixed. The three conditions the plan names as untested remain untested.

Regression test

A test that reproduces the reported scene (a RenderTarget2D bound earlier in the frame, a texture decoded from a real file with a non-power-of-two backbuffer, real Present-separated frames): if it fails it is the defect's regression test; if it passes, the guide's caveat and the test work-around can be closed with evidence.

Blast radius

EasyGL renderers under the reported conditions only; nothing at the snapshot says whether the report still reproduces.

Workaround

The migration guide's own advice; the EasyGL blend-state test avoids the case by drawing a corner sprite.

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