Files
Faset_Engine/docs/validation/p1-iteration-2026-09-24/final-release/README.md
T
Emil 74f584308c
Native and manual checks / native (ubuntu-24.04) (push) Failing after 34s
Native and manual checks / manual (push) Successful in 30s
Windows editor and software Vulkan / windows-graphics (push) Canceled after 0s
Native and manual checks / native (windows-2025) (push) Canceled after 0s
Record final combined P1 Release reference and memory miss
2026-09-24 05:18:51 +03:00

112 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Final combined P1/P3 Release reference — 2026-09-24
This is the clean-source, physical-GPU reference for the checked-in playable
`collect-2d`, `collect-3d`, and Lua-only games at
`4a3453e2b1868555d833f578d43f48b8bc47d41a`. The real Release Editor
exported each project to a self-contained package. The packages were copied to
Unicode-named paths outside their disposable source projects, and those source
paths were hidden while each Player ran from an unrelated empty working
directory. The 3D export imported and packaged the Blender exit arch. All three
games passed standalone CPU validation and rendered **120/120** offscreen Vulkan
frames on the physical NVIDIA GeForce RTX 2080 Ti with the Khronos validation
layer active and **zero validation errors**. The [verifier report](report.json),
[2D manifest](evidence/collect-2d-manifest.json),
[3D manifest](evidence/collect-3d-manifest.json), and
[Lua manifest](evidence/lua-manifest.json) retain input, package and binary
hashes. The [toolchain supplement](provenance.json) binds the unmodified report
and 240-frame summary to the exact Editor, CMake, Ninja, Clang and Slang
binaries. The verifier recorded a clean checkout at its start, and the second
profiles used the same relocated Player binaries.
| Relocated package | Runtime | Frames | GPU validation | Source paths hidden |
| --- | --- | ---: | --- | --- |
| `collect-2d` | C++ | 120/120 | active, 0 errors | yes |
| `collect-3d` | C++ with Blender asset | 120/120 | active, 0 errors | yes |
| `lua` | Lua-only | 120/120 | active, 0 errors | yes |
The two **same relocated C++ executables** then ran a second, sequential
240-frame profile. For each run, the disposable source-project paths were again
hidden and restored afterward. These exact 2D/3D samples used default Direct
visibility and temporal Off, 1280×720 offscreen Vulkan, synchronous readback,
the active Khronos validation layer and synthetic fixed-step simulation. No
frame was discarded as a warm-up: the table uses nearest-rank p95 over all 240
completed frames, including the first. Both profiles report zero validation
errors. Raw [2D](reference-240/collect-2d-profile-240.json) and
[3D](reference-240/collect-3d-profile-240.json) profiles, exact
[2D invocation](reference-240/collect-2d-run-240.json) and
[3D invocation](reference-240/collect-3d-run-240.json), and the
[machine-readable budget comparison](reference-240/reference-summary.json)
support every value below.
| Exact-scene observation | Initial P1 tracking budget | 2D | 3D |
| --- | ---: | ---: | ---: |
| Frame wall p95 | ≤4 ms | 2.694 ms | 3.036 ms |
| GPU timestamp p95 | ≤1 ms | 0.573 ms | 0.617 ms |
| Readback CPU p95 | ≤1 ms | 0.559 ms | 0.561 ms |
| Simulation p95 | ≤0.5 ms | 0.242 ms | 0.300 ms |
| Scene snapshot p95 | ≤0.5 ms | 0.197 ms | 0.288 ms |
| `main()` to first frame | ≤500 ms | 295.4 ms | 248.3 ms |
| Maximum explicit Vulkan allocation | ≤20 MiB | **43.022 MiB — miss** | **43.118 MiB — miss** |
The memory miss is real, not a profile rounding artifact: 2D used 45,112,032
bytes and 3D used 45,212,272 bytes, while the earlier threshold was 20,971,520
bytes. Each run counted a **16 MiB sun atlas and a 16 MiB local-light atlas**
inside the live Vulkan allocation total. The 2D sprites produced no sun-shadow
raster work; the 3D meshes rendered four sun cascades. Neither sample used a
local shadow face. Both 2048² D32 atlases are currently allocated when the
Renderer is created, even when the scene never uses them. The remaining explicit
allocations were 11.022 MiB (2D) and 11.118 MiB (3D). Lazy local-atlas
allocation is a sensible follow-up, but alone it would still leave the 3D
scene above 20 MiB with its current 2048² sun atlas. We have kept the physical
counter and shadow resolution intact and recorded the miss rather than silently
changing either to satisfy an older threshold. The 20 MiB value is an initial
**tracking budget** for tiny pre-P3 scenes, not a functional export gate; any
revised shadow-memory budget needs its own measured baseline.
The Lua run establishes relocated Release execution, not a 2D/3D latency
budget. The [2026-09-18 Release reference](../../linux-release-2026-09-18/README.md)
used these scenes on the same GPU but an evolving earlier working tree; its
numbers are historical context, not this clean combined revision. This run
measures small scenes on one active Linux desktop and one driver (NVIDIA
595.84). GPU timestamps exclude CPU work, `renderer_readback_cpu` is a
map/copy/unmap duration inside the renderer call, and the explicit allocation
counter excludes driver-internal memory. It does not establish production-game
scaling, whole-process VRAM usage, display-paced FPS, physical Windows GPU
performance or absence of all leaks.
## Reproduce and inspect
From this repository with the dependencies configured:
```sh
cmake --preset linux-release
cmake --build --preset linux-release --target faset_editor --parallel 2
python3 tools/verify_playable_exports.py \
--editor build/linux-release/faset_editor \
--output /tmp/faset-p1-release-new \
--standalone-root /tmp/faset-p1-packages-new \
--include-lua
python3 docs/validation/p1-iteration-2026-09-24/final-release/profile_exact_scenes.py \
--verification /tmp/faset-p1-release-new/report.json \
--output /tmp/faset-p1-release-new/reference-240
```
Use **new, empty** output and standalone directories. The second helper
refuses an incomplete or dirty-tree verifier report, hides the disposable
source projects during each 240-frame run, checks exact settings and validation,
then restores them. The original [verifier log](verifier.log),
[240-frame log](reference-240.log), raw 120-frame profiles for
[2D](evidence/collect-2d-profile.json),
[3D](evidence/collect-3d-profile.json) and
[Lua](evidence/lua-profile.json), PPM captures, and the
[SHA-256 file list](SHA256SUMS.txt) are retained here. The
large disposable native build directories and relocated executable packages
remain under `/tmp`; their input, manifest and executable hashes are in the
reports.
![Relocated 2D sample](collect-2d.png)
![Relocated 3D sample with Blender asset](collect-3d.png)
![Relocated Lua sample](lua.png)