3.9 KiB
3.9 KiB
| id | ticket | title | status | created | completed | tags | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PLN-0027 | deferred-overlay-and-primitive-composition | Plan - Deferred GFX Overlay Subsystem | accepted | 2026-04-18 |
|
Objective
Introduce a dedicated deferred overlay/debug subsystem for gfx.* primitives outside FrameComposer, with command capture for draw_text(...) and the primitive family selected for the first migration.
Background
DEC-0016 requires primitive/text overlay ownership to remain outside FrameComposer while still allowing shared raster helpers and low-level optimizations internally. The new subsystem must preserve semantic separation from scene/sprite/HUD composition.
Scope
Included
- introduce an overlay/debug command queue or equivalent subsystem outside
FrameComposer - route
gfx.draw_text(...)into deferred command capture instead of stable direct framebuffer writes - route the chosen V1 primitive family into the same deferred overlay/debug path
- keep raster helper reuse allowed without merging semantic ownership
Excluded
- runtime frame-end sequencing
- no-scene/scene parity tests at the runtime level
- final repository-wide CI
Execution Steps
Step 1 - Define overlay/debug state ownership in drivers
What:
Create the subsystem that owns deferred gfx.* overlay/debug commands.
How:
- Add a dedicated owner adjacent to
Gfx/Hardware, but not insideFrameComposer. - Define the minimal command model required for V1 operations.
- Keep the subsystem screen-space and explicitly pipeline-agnostic relative to
composer.*.
File(s):
crates/console/prometeu-drivers/src/*crates/console/prometeu-hal/src/*if bridge traits need extension
Step 2 - Route text and selected primitives into deferred capture
What: Stop treating text/primitives as stable direct writes.
How:
- Change
gfx.draw_text(...)to enqueue deferred overlay/debug work. - Migrate the selected V1 primitive set into the same deferred path.
- Keep any remaining unmigrated primitives either explicitly out of scope or routed consistently if they are already part of the accepted V1 set.
- Preserve internal raster helper reuse where useful.
File(s):
crates/console/prometeu-drivers/src/gfx.rs- runtime dispatch call sites that submit
gfx.*primitives
Step 3 - Add local driver-level tests for deferred capture semantics
What: Prove that overlay/debug commands are captured separately from game composition state.
How:
- Add tests that assert text/primitives do not need direct stable writes to
backto survive until overlay drain. - Add tests that assert the overlay owner is independent from
FrameComposerstate.
File(s):
crates/console/prometeu-drivers/src/gfx.rs- new or existing driver test modules
Test Requirements
Unit Tests
- command capture tests for
draw_text(...) - tests for each migrated V1 primitive class
- tests proving overlay/debug state is owned outside
FrameComposer
Integration Tests
- none in this plan; runtime-level ordering is covered by the next plan
Manual Verification
- inspect driver ownership boundaries to confirm
FrameComposerdoes not gain overlay/debug state
Acceptance Criteria
- A dedicated deferred overlay/debug subsystem exists outside
FrameComposer. gfx.draw_text(...)is captured as deferred overlay/debug work.- The selected V1 primitive family is captured through the same subsystem.
- Driver-level tests prove overlay/debug state is operationally separate from canonical game composition state.
Dependencies
- Source decision:
DEC-0016 - Prefer to execute after
PLN-0026
Risks
- Accidentally reusing
FrameComposerstorage or state would violate the accepted ownership boundary. - Migrating only part of the primitive family without explicit scoping could create inconsistent semantics across
gfx.*.