diff --git a/PLAN.md b/PLAN.md index dbf6f28..99f39b3 100644 --- a/PLAN.md +++ b/PLAN.md @@ -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 diff --git a/docs/IMPLEMENTATION.md b/docs/IMPLEMENTATION.md index e0b8e8e..df662f9 100644 --- a/docs/IMPLEMENTATION.md +++ b/docs/IMPLEMENTATION.md @@ -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 diff --git a/docs/validation/p3-lighting-2026-09-24/README.md b/docs/validation/p3-lighting-2026-09-24/README.md index 8731675..2c50964 100644 --- a/docs/validation/p3-lighting-2026-09-24/README.md +++ b/docs/validation/p3-lighting-2026-09-24/README.md @@ -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 diff --git a/docs/validation/p3-lighting-2026-09-24/linux-debug-integrated-4a3453e-ctest.txt b/docs/validation/p3-lighting-2026-09-24/linux-debug-integrated-4a3453e-ctest.txt new file mode 100644 index 0000000..252a91d --- /dev/null +++ b/docs/validation/p3-lighting-2026-09-24/linux-debug-integrated-4a3453e-ctest.txt @@ -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)