Compare commits

..
Author SHA1 Message Date
uygarandClaude Opus 5.5 e03921bc5f engine(windows-x64): publish 2caca361 — b1bc0aef + get_video_adapter_memory
Windows editor built from tinqs/engine 2caca361 on UyGar's machine (2026-10-03),
the build ariki-game's settings/hardware lane has been running on. --version
prints 4.7.2.stable.mono.custom_build.2caca3619; d3d12, angle and accesskit
confirmed present in the binary.

GodotSharp regenerated from this binary (glue has Terrain3D +
GetVideoAdapterMemory) and replaced wholesale: nupkgs are 4.7.2 only (the game
pins Godot.NET.Sdk/4.7.2), and the stray nested GodotSharp/GodotSharp copy is
gone (the Mac layout never had it).

Not included: the 2026-10-05 round (shadow pass diet, staggered/fit cascades,
shadow_lod_bias, GPU MultiMesh cull Stage A/B). ariki-game guards each of those
(HasMethod checks, ProjectSettings no-ops), so the game runs; those knobs just
do nothing on Windows until a build from main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 17:11:41 +03:00
463 changed files with 147 additions and 287032 deletions

No files matched your search

@@ -1,31 +0,0 @@
# Forge (Windows) — rebuild engine main at 4fde0e94 (G2 pooled GPU cull + static shadow fixes)
Mac `engine/macos-arm64` is engine `4fde0e94` (2026-10-18, `4.7.2.stable.mono.custom_build.4fde0e94d`). Windows is
`9dcc5d458`. **The game pins `4.7.2@4fde0e94d`** (owner's call: publish Mac-only while Windows sleeps), and
`shaders/tree_wind.gdshader` uses the new `STATIC_SHADOW_AT_REST` built-in, so a 9dcc5d45 engine both hits the
mismatch dialog and fails that shader. Rebuild before anything else on Windows.
## Build
`tinqs pull` the engine and `git checkout 4fde0e94` (later main commits may be docs or G4 work; build the pinned hash).
Flags from the `windows-x64` manifest block. Regenerate GodotSharp from that binary (`--generate-mono-glue
modules/mono/glue`, `build_assemblies.py --godot-output-dir=bin --godot-platform=windows`) and publish the WHOLE
`bin/GodotSharp` (`Api/` and `Tools/`).
## New since 9dcc5d45 (not compiled on Windows yet)
- G2 pooled GPU cull: `servers/rendering/gpu_cull_arena.h`, `renderer_rd/shaders/effects/multimesh_cull.glsl`,
`renderer_rd/effects/multimesh_cull.*`, `storage_rd/mesh_storage.*`, `forward_clustered/render_forward_clustered.cpp`.
Three shared storage arenas (each < 512 MiB, the D3D12 raw-buffer limit); no buffer device address.
Switch `rendering/occlusion_culling/gpu_cull_pooled` / `RenderingServer.multimesh_gpu_cull_set_pooled`, default off.
- Fixed shadow LOD band for gpu-culled MultiMeshes (`gpu_cull_shadow_fixed_band`, `multimesh_set_gpu_shadow_band`), default off.
- `STATIC_SHADOW_AT_REST` shader built-in, true only in static shadow tile passes when
`rendering/lights_and_shadows/directional_shadow/static_casters_at_rest` is on; default off.
## Checks
1. Oracle `bash tests/gpu_oracle/multimesh_cull_pool/run.sh <exe> d3d12` (Mac Metal: 4524/4524). This gates making
pool the default. Also re-run `tests/gpu_oracle/draw_indirect_count/run.sh <exe> d3d12` (expect 22/2 as before).
2. Game in-world on the new pair: `tree_wind` compiles (no `Unknown identifier STATIC_SHADOW_AT_REST`).
`env gpucull status`; then the G0/G1 profile (`.agents/handoffs/2026-10-18-windows-g0-render-thread-profile.md`
in ariki-game) with states `"pool off=gpucull:pool off" "pool on=gpucull:pool on"`. Mac result: cull dispatches
258/422/464 → 2, fps +1/0/+1, render CPU −0.3 ms at the village; Windows records those dispatches on its render
thread, so expect a larger gain there. Report the table.
3. Publish windows-x64 here (binary + console binary + complete GodotSharp, sha256s, manifest note, CRLF), push.
@@ -1,48 +0,0 @@
# Forge (Windows) — rebuild engine main at 0ec39c95 (GPU diet + R0 P5)
Mac `engine/macos-arm64` is engine `0ec39c95` (2026-10-17). Windows is still `1e7be28b1`. The game pins `4.7.2`
without a hash until Windows carries the same commit; then pin `4.7.2@0ec39c95` in ariki-game `project.godot`.
## Build
`tinqs pull` the engine, then the `windows-x64` manifest flags (MSVC, `platform=windows target=editor
module_mono_enabled=yes`), regenerate GodotSharp from that binary, publish binary + console binary + GodotSharp here
with sha256s, note in `manifest.json`.
## New and NOT yet compiled on Windows (no toolchain on the Mac)
- `platform/windows/crash_report_windows.{h,cpp}`, `crash_handler_windows_seh.cpp` / `_signal.cpp` (MiniDumpWriteDump,
pre-started writer thread, unhandled-exception filter), `os_windows_stack_sampling.cpp` (freeze watchdog stack walk),
dbghelp/psapi linked in every target (`detect.py`, `SCsub`).
- `drivers/d3d12/rendering_device_driver_d3d12.{h,cpp}`: GetDeviceRemovedReason + DRED on device removal.
- Verification checklist: engine `.agents/wiki/crash-freeze-and-error-reporting.md` (8 steps: main-thread crash,
worker-thread crash, stack overflow, native freeze, C# freeze, D3D12 TDR via `dxcap -forcetdr --gpu-breadcrumbs`,
`--disable-crash-handler` writes nothing, release template build links dbghelp).
## Bench after the build (the pacer box)
ariki-game `.agents/plans/gpu-frame-diet-ui-opaque-prepass-2026-10-17.md` and `render-thread-diet-2026-10-17.md`:
run the Jungle/Main stands with `--gpu-profile`; the RENDER CPU PROFILE block now prints `_draw wall` and
`end_frame (graph replay + submit)` — the split of the 12.6 ms render-thread floor that Phase 0 asked for.
## Next: both platforms to 7fb81364 (crash-report review fixes)
Engine main is `7fb81364` (`a040761b` + `7fb81364` on top of `0ec39c95`): freeze-report note/context read under a lock,
debugger pauses never count as stall time, macOS sidecar `thread_id`, one first-wins atomic claims a Windows crash.
No API change — GodotSharp is unchanged. Mac has built `7fb81364` (Kraken, `4.7.2.stable.mono.custom_build.7fb81364b`)
but does NOT publish it yet: the game pins `4.7.2@0ec39c954`, so a lone Mac publish would lock every Mac out.
Windows (Forge):
1. Build `7fb81364` with the manifest flags. The Windows files changed here were NOT compiled on the Mac:
`platform/windows/crash_handler_windows_seh.cpp`, `platform/windows/crash_report_windows.{h,cpp}` — if they fail,
write the error here.
2. If you have a `tests=yes` build: `--test --test-case="*CrashReport*,*FreezeDetector*,*FreezeWatchdog*,*AgentLog*"`.
3. Publish windows-x64 `7fb81364`, then tell Kraken: Mac publishes its `7fb81364` binary and the pin moves to
`4.7.2@7fb81364b` in the same game push.
## 2026-10-17 Windows side done (Forge/ZCode)
Windows published `7fb81364` (builds `871000b`): both crash files compiled clean, editor target only,
GodotSharp regenerated from the binary (byte-identical bindings, as expected — no API change).
No `tests=yes` build on this box, so the `*CrashReport*/*FreezeDetector*/*FreezeWatchdog*/*AgentLog*`
test cases did NOT run here — still owed. Headless game boot on the new binary: clean, 0 binding errors.
Game pin is version-only `4.7.2` as of ariki-game `main` — Kraken: publish your `7fb81364` binary, then
flip the pin to `4.7.2@7fb81364b` in the same game push (both platforms will carry it).
@@ -1,12 +0,0 @@
# Forge (Windows) — rebuild pair from engine main ≥ 615e852f, re-judge the render verdicts, pin (2026-10-05)
macOS pair `615e852f` (code `c76f2ecc`) is published here. Windows is still `b1bc0aef` (2026-09-28).
1. Build the Windows editor + console pair from `tinqs/engine` main with the `windows-x64` manifest flags
(`platform=windows target=editor arch=x86_64 module_mono_enabled=yes d3d12=yes angle=yes accesskit=yes`),
regenerate GodotSharp from that exact binary, smoke (0 wrapper errors), publish here, update `manifest.json` +
`README.md`.
2. Then pin `tinqs/required_engine_build="4.7.2@<hash7+>"` in `ariki-game/project.godot` (both platforms on the same commit).
3. Re-judge on Windows what the Mac measured (frame GPU-bound on M1): static shadow cache default (now OFF on Apple
silicon game-side, ON elsewhere — keep ON on Windows only if `inverted` ≥ `cache_off` fps), GPU veg bands, HLOD.
Full recipe + numbers: `ariki-game/.agents/handoffs/2026-10-05-forge-windows-render-bench-handover.md`.
@@ -1,56 +0,0 @@
# Forge (Windows) — rebuild engine main at 9dcc5d45 (SSCS + hero combine + shadow fixes + indirect count)
Mac `engine/macos-arm64` is engine `9dcc5d45` (2026-10-18, `4.7.2.stable.mono.custom_build.9dcc5d458`). Windows is
still `7fb81364b`. **The game already pins `4.7.2@9dcc5d458`** (owner's call: publish Mac-only), so every Windows
engine is refused with the mismatch dialog until this is published. `TINQS_ENGINE_SKIP_CHECK=1` runs the old engine
meanwhile, but the sun then shows shadow acne (the game's sun bias 0.014 expects the #124348 bias fix).
## Build
`tinqs pull` the engine (main is `91b11b70` = `9dcc5d45` + docs only), build with the `windows-x64` manifest flags
(`platform=windows target=editor module_mono_enabled=yes -j32`). The `--version` hash will read `91b11b70…` unless
you `git checkout 9dcc5d45` first; either is fine (docs-only difference) — record what you built in the manifest.
Regenerate GodotSharp from that binary: `--generate-mono-glue modules/mono/glue`, then `build_assemblies.py
--godot-output-dir=bin --godot-platform=windows`. Publish the WHOLE `bin/GodotSharp` (`Api/` AND `Tools/`;
`Tools/` is always written to `bin/GodotSharp/Tools`, a scratch output dir has no `Tools/` and the editor `--import`
then fails with "Dependency resolution failed for GodotTools.dll").
## New since 7fb81364 (none of it compiled on Windows yet)
- `298bc2a6` `RenderingDevice.draw_list_draw_indirect_count`: D3D12 native path (`drivers/d3d12/rendering_device_driver_d3d12.cpp`).
- `2ce4f359` screen-space contact shadows for directional lights (compute shader `screen_space_contact_shadows.glsl`,
binding 39 in the Forward+ scene shader, `DirectionalLightData::sscs_index` at byte 64).
- `bb1f12e4` tight directional caster culling on each cascade's real frustum (upstream #121775).
- `5df5c8df` hero shadow min-combine (`RenderingServer.instance_light_directional_set_hero_shadow_spot`).
- `9dcc5d45` depth bias = `MAX(shadow_blur, 1)` scale (upstream #124348).
## Checks
1. Oracle: `bash tests/gpu_oracle/draw_indirect_count/run.sh <tinqs.windows.editor.x86_64.mono.exe> d3d12` from Git Bash.
Expect `ORACLE: 22 passed, 0 failed`, a `SKIP base-instance` line, exit 0 (engine wiki `draw-indirect-count.md`
§ Windows checklist; Mac/Metal was 24/24). Also the Vulkan driver if the game runs Vulkan there: `… run.sh <exe> vulkan`.
2. Game in-world on the new pair (pin satisfied):
- `env herocombine` status reports `mode combine (engine combine yes)`; the hero's spot shadow merges with the sun's.
- `env contactshadow on` → contact shadows under feet/grass; `--gpu-profile` shows `SSCS Main` / `Process SSCS`
(Mac M1 Max ≈ 0.43 ms at the beach); `env contactshadow length 0|2`, `blur 0` change it live; `off` restores.
- Sun shadows: no acne stripes, feet keep contact on bright sand (bias 0.014 x MAX(0.35, 1)).
3. Publish windows-x64 here (binary + console binary + complete GodotSharp, sha256s, manifest note, CRLF), push.
## 2026-10-18 Windows side done (Forge/ZCode)
Windows published `9dcc5d458` (built at `9dcc5d458f` — docs-only commits excluded so both platforms + the pin
share one hash). Whole `GodotSharp` published (Api + Tools). Headless game boot: clean, 0 binding errors.
- Oracle `draw_indirect_count` d3d12 (RTX 5080): **22 passed, 2 failed** — the 2 base-instance cases, the
documented D3D12 gap (expected-fail per draw-indirect-count.md; got `[0]`/`[0,1]` where `first_instance` is
ignored). They RAN rather than SKIPped — the skip gate seems D3D12-absent; same result either way.
- `--gpu-validation` could NOT run: D3D12 debug layer is not installed on Forge (`_initialize_debug_layers`
→ ERR_QUERY_FAILED → context fell back to Vulkan, which then reports SUPPORTS_DRAW_INDIRECT_COUNT false —
the capability bit only exists on Metal/D3D12 in this fork). Install Graphics Tools for the validation pass.
- In-world checks (herocombine / contactshadow / SSCS profile / sun acne at bias 0.014): still owed here.
## 2026-10-18 Windows moved to engine main 4fde0e94d (G2 pooled cull) — Kraken note
Engine main gained `4fde0e94d7` (G2 pooled cull) after the 9dcc5d45 pair. Forge rebuilt it (8 min incremental)
and published windows-x64 `4fde0e94d`: GodotSharp regenerated (MultimeshGpuCullSetPooled /
MultimeshGpuCullSetShadowFixedBand / MultimeshSetGpuShadowBand present), headless game boot clean.
Game pin relaxed to version-only `4.7.2` (a lone Windows publish must not lock Mac out — same protocol as
7fb81364). **Kraken: publish your `4fde0e94d` macos-arm64 build, then flip the pin to `4.7.2@4fde0e94d` in the
same game push.** Owed on Windows: `tests/gpu_oracle/multimesh_cull_pool` (D3D12 base-instance gap may bite the
pooled draws) and the in-world gpucull census (`multimesh_get_cull_command_offset`).
+3 -3
View File
@@ -31,10 +31,10 @@ into GodotSharp, so GodotSharp had to be regenerated — and must ship here alon
| Platform | Engine | Terrain3D | GodotSharp shipped? | | Platform | Engine | Terrain3D | GodotSharp shipped? |
|---|---|---|---| |---|---|---|---|
| `engine/macos-arm64/` | **4.7.2** (`4fde0e94`) — G2 pooled GPU cull (one reset + one cull dispatch per camera render), fixed shadow LOD band and `STATIC_SHADOW_AT_REST` for static shadow tiles (all default off), on top of everything `9dcc5d45` had | built-in module | ✅ yes (`GodotSharp/`) | | `engine/macos-arm64/` | **4.7.2** (`51ed21d5`) — static shadow cache + tile budget + live caster size cull + inverted contract switch, `get_video_adapter_memory()`, device-lost diagnostics | built-in module | ✅ yes (`GodotSharp/`) |
| `engine/windows-x64/` | **4.7.2** (`4fde0e94d`) — same hash as macos-arm64: everything `9dcc5d45` had plus G2 pooled cull (`gpu_cull_pooled` default off), fixed shadow band, `STATIC_SHADOW_AT_REST` (tree_wind needs it); `template_release` here is still the `1e7be28b` tree | built-in module | ✅ yes (`GodotSharp/`) | | `engine/windows-x64/` | **4.7.2** (`2caca361`) — upstream bugfixes + static shadow cache + video adapter memory query | built-in module | ✅ yes (`GodotSharp/`) |
Mac is engine `4fde0e94` as of 2026-10-18 (`--version` prints `4.7.2.stable.mono.custom_build.4fde0e94d`): G2 pooled GPU cull over shared storage arenas (`rendering/occlusion_culling/gpu_cull_pooled`, game dial `env gpucull pool`), a fixed shadow LOD band for gpu-culled MultiMeshes (`gpu_cull_shadow_fixed_band`, `env gpucull shadowband`) and the `STATIC_SHADOW_AT_REST` shader built-in (`static_casters_at_rest`, `env gpucull staticrest`); all default off. GodotSharp regenerated (API + Tools). Oracles on Metal: `multimesh_cull_pool` 4524/4524, `draw_indirect_count` 24/24. Windows is also engine `4fde0e94` as of 2026-10-18 — Forge built it in parallel with the Mac (`.agents/handoffs/forge-windows-g2-4fde0e94.md`), so both platforms and the `4.7.2@4fde0e94d` pin (the game's `tree_wind.gdshader` uses the new built-in) share one hash. Underneath is the `9dcc5d458` pair (SSCS contact shadows, hero shadow min-combine, upstream 4.8 shadow fixes #121775/#124348 with the game sun bias 0.014, `draw_list_draw_indirect_count`), where the D3D12 oracle on RTX 5080 was 22 passed / 2 failed — the base-instance pair, the documented D3D12 gap (`.agents/handoffs/forge-windows-sscs-9dcc5d45.md`); `--gpu-validation` needs the D3D12 debug layer, which Forge lacks (Graphics Tools not installed). Still owed on Windows: `multimesh_cull_pool` oracle (gates making pool the default), the validation pass, and in-world checks (`herocombine`, `contactshadow`, SSCS in `--gpu-profile`, sun acne at bias 0.014, pooled gpucull census). Mac is engine `51ed21d5` as of 2026-10-05 (`--version` prints `4.7.2.stable.mono.custom_build.51ed21d5d`): 4.7.2 + static shadow cache (tile budget, live caster screen-size cull, inverted-contract switch) + the video adapter memory query + GPU device-lost diagnostics (engine wiki `shadow-pass-diet-2026-10-05.md`, `gpu-device-lost-diagnostics.md`). Windows is `2caca361` (2026-10-03, built by UyGar: `b1bc0aef` + the video adapter memory query; no 2026-10-05 round yet) until Forge rebuilds from main. The engine source repo stays private. Check `manifest.json` for sha256. The 4.7 Windows cutover handoff is resolved: [`.agents/handoffs/forge-windows-4.7.md`](.agents/handoffs/forge-windows-4.7.md).
Long-term: CI (Gitea Actions) builds on push and publishes here / to S3 — Long-term: CI (Gitea Actions) builds on push and publishes here / to S3 —
`docs/ai/plans/build-pipeline-architecture-2026-06-07.md`. `docs/ai/plans/build-pipeline-architecture-2026-06-07.md`.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,14 +0,0 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"rollForward": "LatestMajor",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}
File diff suppressed because it is too large. Load diff
Loaded 100 of 463 files, more files were not shown because too many files have changed in this diff. Show more