Document integrated P1 budgets and P3 lighting acceptance
Native and manual checks / native (windows-2025) (push) Waiting to run
Native and manual checks / native (ubuntu-24.04) (push) Failing after 32s
Native and manual checks / manual (push) Successful in 28s
Windows editor and software Vulkan / windows-graphics (push) Canceled after 0s

This commit is contained in:
Emil
2026-09-24 05:17:26 +03:00
parent d0262be607
commit 1d7a1e5cdd
4 changed files with 215 additions and 18 deletions
+11 -2
View File
@@ -192,8 +192,17 @@ CTest и перенос всех трёх Release-игр, включая Lua-onl
[чистой ревизии `4ac02ee`](https://github.com/emil28092005/Faset_Engine/actions/runs/35937433040).
Это функциональная проверка software Vulkan без активного validation layer.
Исторический Release benchmark точных демо нельзя
подменять новым Debug workflow; свежий Release reference и физический Windows GPU
остаются отдельным покрытием. Dynamic gameplay loading рассматривать при
подменять новым Debug workflow. На чистой совмещённой ревизии `4a3453e`
все три Release-игры после переноса и скрытия исходников отрисовали по 120
кадров на физической RTX с активной Vulkan validation и без ошибок. Точные
2D/3D демо отдельно прошли по 240 кадров: p95 полного кадра 2,694/3,036 мс,
GPU 0,573/0,617 мс, readback 0,559/0,561 мс, simulation 0,242/0,300 мс,
snapshot 0,197/0,288 мс; startup 295/248 мс. Эти показатели укладываются
в соответствующие tracking budgets. Явные Vulkan allocations 43,02/43,12 MiB
**превысили** исходный ориентир 20 MiB из-за двух постоянно созданных 2048²
D32 shadow-атласов по 16 MiB; даже 2D-сцена с нулём shadow raster держит оба.
Память требует оптимизации/нового baseline, без подмены бюджета. Физический
Windows GPU остаётся отдельным покрытием. Dynamic gameplay loading рассматривать при
подтверждённой проблеме линковки, без обещания C++ hot reload в P1.
### P2. GPU-driven visibility и LOD
+12 -1
View File
@@ -501,7 +501,18 @@ scene reached 149.39 ms p95 wall time, dominated by CPU simulation/snapshot;
this is a visible scalability issue, not a tiny-demo Release budget comparison.
The historical exact-scene Release budgets were met in the earlier 2026-09-18
record, but that evolving working-tree baseline does not certify the current
revision. A quiet-host current Release rerun is pending.
revision. A clean `4a3453e` physical-GPU rerun now covers both exact-scene
source-hidden Release games, sequentially for 240 frames at 1280×720 with
active Khronos validation. 2D/3D p95 frame wall was 2.694/3.036 ms, GPU
0.573/0.617 ms, readback 0.559/0.561 ms, simulation 0.242/0.300 ms, snapshot
0.197/0.288 ms; startup from `main()` was 295.4/248.3 ms. These meet their
initial tracking budgets. Explicit Vulkan allocation instead reached
45,112,032/45,212,272 bytes (43.02/43.12 MiB), exceeding the 20 MiB target:
eager 2048² D32 sun and local atlases consume 16 MiB each even in the 2D
fixture with zero shadow raster. This memory miss is recorded, not silently
rebaselined. The same clean build exported and source-hidden relocated C++ 2D,
C++ 3D with Blender import, and Lua-only games; all rendered 120 frames with
validation active and zero reported errors.
Linux focused cache, diagnostics, schema and workflow-math tests pass; a real
failed-build replay now reports navigable `Scripts/Gameplay.cpp:73:2`. The
@@ -5,8 +5,10 @@ implementation and measured Forward+ checkpoint is source revision
`a0a4e29d480ed3344f19bd3565d48668ca913fed` on `feat/p3-lighting`.
The earlier shadow/benchmark integration checkpoint was `b191ae0`. The
lighting slice has Linux functional and reference-GPU evidence plus Windows
SwiftShader CI at the tiled revision. Temporal reconstruction and the final
combined revision have their own acceptance.
SwiftShader CI at the tiled revision. The combined P1+P3 renderer checkpoint
`4a3453e` was tested separately, including the temporal renderer. Its lighting
A/B raw data are in [study 24](../../studies/24-p3-integrated-forward-plus-2026-09-24.md),
and temporal image/cost evidence has a [separate record](../p3-temporal-2026-09-24/README.md).
## Implemented at the checkpoint
@@ -43,16 +45,16 @@ combined revision have their own acceptance.
| Case | Automated evidence | Current status |
| --- | --- | --- |
| Empty, disabled, local-only, multiple sun; schema bounds | `scene_view`, `render_lighting_policy`, `render_offscreen` | Linux Debug green at `a0a4e29`; integrated revision pending |
| Four cascades, split bounds, subtexel stabilization, offscreen/source-LOD0 caster | `render_lighting_policy`, `render_lighting_sun` | Linux GPU and pinned SwiftShader P3 green at `a0a4e29` |
| Spot cone, six point faces and seam, dropped whole point shadow | `render_lighting_local`, `render_lighting_policy` | Linux GPU and pinned SwiftShader P3 green at `a0a4e29` |
| Empty, disabled, local-only, multiple sun; schema bounds | `scene_view`, `render_lighting_policy`, `render_offscreen` | Linux Debug green at `4a3453e` |
| Four cascades, split bounds, subtexel stabilization, offscreen/source-LOD0 caster | `render_lighting_policy`, `render_lighting_sun` | Linux GPU green at `4a3453e`; pinned SwiftShader P3 green at `a0a4e29` |
| Spot cone, six point faces and seam, dropped whole point shadow | `render_lighting_local`, `render_lighting_policy` | Linux GPU green at `4a3453e`; pinned SwiftShader P3 green at `a0a4e29` |
| 128-light/16-face/4096-draw limits, optional-atlas fallback | `render_lighting_policy`, `render_offscreen`, `render_lighting_local` | CPU and supported-atlas GPU paths covered; allocation fallback not exercised on an actual constrained device; sampled D32 is a renderer requirement |
| Direct/GPU frustum/GPU occlusion image parity, P2 reload and 2D/UI independence | `render_lighting_sun`, `render_lighting_local`, `render_shader_reload`, `render_offscreen` | Linux Debug green at `a0a4e29`; integrated revision pending |
| Forward+/forward parity, near plane, resize, overflow, and shader reload | `render_lighting_tiled`, `render_shader_reload`, `render_shader_reflection`, `build_schema_publication` | Linux Debug and pinned SwiftShader P3 green at `a0a4e29`; 128-light localized Release captures match exactly |
| Driver, profile, real 64×64 benchmark smoke | `render_lighting_benchmark_schema`, `render_lighting_benchmark_smoke`, `player_shutdown_diagnostics` | Full Linux Debug green at `a0a4e29` |
| 1920×1080 0/4/16/32/64/128 Release sweep, three repeats, both shadow states | `tools/benchmark_p3_lighting.py --sweep` | Forward baseline measured; its separate raw study is being integrated |
| 1920×1080 paired paths, 32/64/128 dense and localized lights | `faset_p3_lighting_benchmark --lighting forward|tiled` | Raw 1080 frames and six diagnostic samples retained in study 23; dense slower, localized faster by build+raster |
| Windows native build, pinned SwiftShader GPU tests, relocated Release 2D/3D Players | `windows-graphics.yml`, `ci.yml` | Native/manual and Windows graphics passed at `a0a4e29`; 64/64 Windows CTests and two relocated 120-frame Release games; combined revision pending |
| Direct/GPU frustum/GPU occlusion image parity, P2 reload and 2D/UI independence | `render_lighting_sun`, `render_lighting_local`, `render_shader_reload`, `render_offscreen` | Linux Debug green at `4a3453e` |
| Forward+/forward parity, near plane, resize, overflow, and shader reload | `render_lighting_tiled`, `render_shader_reload`, `render_shader_reflection`, `build_schema_publication` | Linux Debug green at `4a3453e`; pinned SwiftShader P3 green at `a0a4e29`; 128-light localized Release captures matched at `a0a4e29` |
| Driver, profile, real 64×64 benchmark smoke | `render_lighting_benchmark_schema`, `render_lighting_benchmark_smoke`, `player_shutdown_diagnostics` | Full Linux Debug green at `4a3453e` |
| 1920×1080 0/4/16/32/64/128 Release sweep, three repeats, both shadow states | `tools/benchmark_p3_lighting.py --sweep` | Forward and tiled repeated at clean `4a3453e`: 6,480 raw frames across three visibility modes; study 24 |
| 1920×1080 paired paths, 32/64/128 dense and localized lights | `faset_p3_lighting_benchmark --lighting forward|tiled` | Dense tiled 11–13% slower; localized tiled 43–54% faster in build+raster on the reference GPU; study 24 retains another 1,080 localized frames |
| Windows native build, pinned SwiftShader GPU tests, relocated Release 2D/3D Players | `windows-graphics.yml`, `ci.yml` | Native/manual passed at `4a3453e`; Windows graphics at that revision is tracked below; `a0a4e29` passed 64 Windows CTests and two relocated 120-frame Release games |
The supported-atlas GPU tests create a renderer with validation requested and
assert zero reported Vulkan errors; a test result is a validation-layer pass only
@@ -61,6 +63,20 @@ Linux compositor declines programmatic restore. The Windows workflow uses pinned
SwiftShader, not a physical Windows GPU, and may lack the Khronos layer. Linux
reference-GPU results cannot establish physical Windows performance.
At clean combined source `4a3453e`, the [local Linux Debug run](linux-debug-integrated-4a3453e-ctest.txt)
registered 73 CTests: 72 passed, no failures and one compositor-dependent window
lifecycle skip. Both real Release C++ games and the Lua-only game were relocated with
their source projects hidden and rendered 120/120 frames each on the physical
RTX 2080 Ti with active Khronos validation and zero reported errors. The
[native/manual CI run](https://github.com/emil28092005/Faset_Engine/actions/runs/35944874993)
passed on Linux and Windows; the corresponding
[Windows graphics run](https://github.com/emil28092005/Faset_Engine/actions/runs/35944875002)
is the integrated SwiftShader acceptance run. The P3 paired sweep was repeated
on this exact clean revision with identical binary and shader hashes across
forward and tiled paths. The timed CSVs omit tile-occupancy readback: their
zero-valued overflow field is **not** evidence of no overflow. Study 24 retains
all frame rows, hashes and bounded interpretation.
## Reproduction and retained evidence
The P3 CTest registrations are `render_lighting_policy` and
@@ -100,7 +116,7 @@ and [Windows graphics/SwiftShader CI](https://github.com/emil28092005/Faset_Engi
also passed. The Windows graphics job ran all 64 CTests, including the tiled
image case, and exported and relocated both checked-in Release games for 120
frames. This is software Vulkan on Windows; physical Windows GPU performance
and the later combined P1+P3 revision remain unverified here.
remains unverified here. The combined P1+P3 CI links above are separate.
```sh
cmake --build --preset linux-debug --parallel 2
@@ -114,9 +130,10 @@ The benchmark wrapper retains one raw CSV per run, a merged CSV, and a summary.
It rejects visibility fallback, missing GPU timestamps, missing lights, duplicate
frames, and validation errors. An offscreen capture's `cpu_ms` includes GPU wait
and readback; it is not thread CPU time. The exact Release benchmark revision,
driver and paired path data are retained in study 23. Release full CTest,
final integrated Windows Actions and relocated Player checks still need to be
added before this is a complete P3 lighting acceptance record.
driver and original paired path data are retained in study 23. The combined
clean-revision repeat and three relocated physical-GPU games are now in study
24 and the P1 record. Final Release full CTest and integrated Windows graphics
results are tracked separately from the earlier source checkpoints.
## Limits carried forward
@@ -0,0 +1,160 @@
Test project /home/emil/Desktop/.worktrees/Faset_Engine-p1-p3-integration/build/linux-debug
Start 52: build_schema_publication
Start 12: render_temporal_acceptance
1/73 Test #12: render_temporal_acceptance ......... Passed 10.32 sec
Start 25: render_lighting_benchmark_schema
2/73 Test #25: render_lighting_benchmark_schema ... Passed 7.22 sec
Start 66: editor_gui_mcp
3/73 Test #66: editor_gui_mcp ..................... Passed 4.88 sec
Start 21: render_shader_reload
4/73 Test #21: render_shader_reload ............... Passed 5.15 sec
Start 60: editor_ui_reload
5/73 Test #60: editor_ui_reload ................... Passed 4.20 sec
Start 23: render_shader_reflection
6/73 Test #23: render_shader_reflection ........... Passed 3.95 sec
Start 59: editor_ui_project_settings
7/73 Test #52: build_schema_publication ........... Passed 37.86 sec
Start 47: lua_player_reload
8/73 Test #59: editor_ui_project_settings ......... Passed 3.53 sec
Start 62: editor_ui_templates
9/73 Test #47: lua_player_reload .................. Passed 2.65 sec
Start 9: render_lighting_tiled
10/73 Test #62: editor_ui_templates ................ Passed 2.73 sec
Start 45: player_shutdown_diagnostics
11/73 Test #9: render_lighting_tiled .............. Passed 3.12 sec
Start 28: gpu_visibility
12/73 Test #28: gpu_visibility ..................... Passed 1.29 sec
Start 54: editor_session_settings
13/73 Test #45: player_shutdown_diagnostics ........ Passed 3.41 sec
Start 42: render_gpu_open_sequence
14/73 Test #54: editor_session_settings ............ Passed 2.14 sec
Start 32: render_gpu_door
15/73 Test #42: render_gpu_open_sequence ........... Passed 1.85 sec
Start 63: editor_ui_gizmos
16/73 Test #32: render_gpu_door .................... Passed 0.85 sec
Start 64: editor_ui_authoring
17/73 Test #63: editor_ui_gizmos ................... Passed 1.09 sec
Start 19: render_offscreen
18/73 Test #19: render_offscreen ................... Passed 0.67 sec
Start 58: editor_ui_import_conflicts
19/73 Test #64: editor_ui_authoring ................ Passed 1.69 sec
Start 39: render_gpu_lifecycle
20/73 Test #58: editor_ui_import_conflicts ......... Passed 1.08 sec
Start 61: editor_ui_launcher
21/73 Test #61: editor_ui_launcher ................. Passed 0.97 sec
Start 15: render_temporal_lifecycle
22/73 Test #39: render_gpu_lifecycle ............... Passed 1.46 sec
Start 57: ui_render
23/73 Test #57: ui_render .......................... Passed 0.73 sec
Start 20: render_sprite_alpha
24/73 Test #20: render_sprite_alpha ................ Passed 0.67 sec
Start 8: render_lighting_local
25/73 Test #15: render_temporal_lifecycle .......... Passed 1.57 sec
Start 73: playable_3d
26/73 Test #8: render_lighting_local .............. Passed 1.09 sec
Start 7: render_lighting_sun
27/73 Test #73: playable_3d ........................ Passed 0.93 sec
Start 36: render_gpu_lod
28/73 Test #36: render_gpu_lod ..................... Passed 0.93 sec
Start 38: render_gpu_near
29/73 Test #7: render_lighting_sun ................ Passed 1.27 sec
Start 31: render_gpu_dense
30/73 Test #38: render_gpu_near .................... Passed 0.85 sec
Start 26: render_lighting_benchmark_smoke
31/73 Test #31: render_gpu_dense ................... Passed 0.73 sec
Start 37: render_gpu_teleport
32/73 Test #26: render_lighting_benchmark_smoke .... Passed 0.60 sec
Start 41: render_gpu_projection
33/73 Test #37: render_gpu_teleport ................ Passed 0.70 sec
Start 35: render_gpu_resize
34/73 Test #41: render_gpu_projection .............. Passed 0.70 sec
Start 40: render_gpu_views
35/73 Test #35: render_gpu_resize .................. Passed 0.73 sec
Start 34: render_gpu_cut
36/73 Test #40: render_gpu_views ................... Passed 0.74 sec
Start 30: render_gpu_capacity
37/73 Test #34: render_gpu_cut ..................... Passed 0.74 sec
Start 11: render_temporal_graph
38/73 Test #30: render_gpu_capacity ................ Passed 0.76 sec
Start 29: render_gpu_empty
39/73 Test #11: render_temporal_graph .............. Passed 0.80 sec
Start 43: render_gpu_transparent
40/73 Test #29: render_gpu_empty ................... Passed 0.72 sec
Start 33: render_gpu_shadow
41/73 Test #43: render_gpu_transparent ............. Passed 0.72 sec
Start 72: playable_2d
42/73 Test #33: render_gpu_shadow .................. Passed 0.63 sec
Start 51: process_and_cook
43/73 Test #72: playable_2d ........................ Passed 0.41 sec
Start 65: editor_mcp_stdio
44/73 Test #51: process_and_cook ................... Passed 0.37 sec
Start 6: lua_safety_contracts
45/73 Test #65: editor_mcp_stdio ................... Passed 0.23 sec
Start 67: core
46/73 Test #67: core ............................... Passed 0.15 sec
Start 2: runtime_contracts
47/73 Test #6: lua_safety_contracts ............... Passed 0.20 sec
Start 56: ui_widgets
48/73 Test #2: runtime_contracts .................. Passed 0.12 sec
Start 3: assets_pipeline
49/73 Test #56: ui_widgets ......................... Passed 0.13 sec
Start 5: lua_contracts
50/73 Test #3: assets_pipeline .................... Passed 0.15 sec
Start 46: lua_cli_contracts
51/73 Test #5: lua_contracts ...................... Passed 0.13 sec
Start 50: build_cache
52/73 Test #46: lua_cli_contracts .................. Passed 0.16 sec
Start 4: assets_blender_bundle
53/73 Test #50: build_cache ........................ Passed 0.16 sec
Start 71: tutorial_physics
54/73 Test #4: assets_blender_bundle .............. Passed 0.08 sec
Start 22: render_gpu_shader_contract
55/73 Test #71: tutorial_physics ................... Passed 0.07 sec
Start 1: authoring
56/73 Test #1: authoring .......................... Passed 0.05 sec
Start 10: render_lighting_policy
57/73 Test #22: render_gpu_shader_contract ......... Passed 0.06 sec
Start 13: render_temporal_shader_contract
58/73 Test #13: render_temporal_shader_contract .... Passed 0.03 sec
Start 53: editor_plugins
59/73 Test #10: render_lighting_policy ............. Passed 0.04 sec
Start 70: tutorial_spawning
60/73 Test #70: tutorial_spawning .................. Passed 0.02 sec
Start 68: tutorial_moving
61/73 Test #53: editor_plugins ..................... Passed 0.03 sec
Start 49: build_diagnostics
62/73 Test #68: tutorial_moving .................... Passed 0.02 sec
Start 44: player_scene_contracts
63/73 Test #44: player_scene_contracts ............. Passed 0.02 sec
Start 48: editor_mcp
64/73 Test #49: build_diagnostics .................. Passed 0.03 sec
Start 55: editor_autosave
65/73 Test #48: editor_mcp ......................... Passed 0.01 sec
Start 69: tutorial_following
66/73 Test #55: editor_autosave .................... Passed 0.01 sec
Start 17: render_temporal_policy
67/73 Test #69: tutorial_following ................. Passed 0.01 sec
Start 27: visibility_policy
68/73 Test #17: render_temporal_policy ............. Passed 0.01 sec
Start 18: render_graph
69/73 Test #27: visibility_policy .................. Passed 0.00 sec
Start 14: render_temporal_reference
70/73 Test #18: render_graph ....................... Passed 0.00 sec
Start 16: render_temporal_motion
71/73 Test #14: render_temporal_reference .......... Passed 0.00 sec
Start 24: render_window_lifecycle
72/73 Test #16: render_temporal_motion ............. Passed 0.00 sec
73/73 Test #24: render_window_lifecycle ............***Skipped 4.21 sec
100% tests passed, 0 tests failed out of 73
Label Time Summary:
gpu = 70.84 sec*proc (38 tests)
p2 = 14.42 sec*proc (16 tests)
p3 = 13.33 sec*proc (6 tests)
window = 9.09 sec*proc (2 tests)
Total Test time (real) = 64.96 sec
The following tests did not run:
24 - render_window_lifecycle (Skipped)