Adversarially-verified review findings 1 and 10: (1) The bake pipeline no longer accumulates every decoded ObjectMeshData in one ConcurrentBag before writing (multi-GB OOM risk on the full bake), and no longer writes blobs in thread-completion order (which violated the plan's "bakes must be byte-reproducible run-to-run"). New shape in BakeRunner: build the FULL id list, sort by PakKey, chunk into 512-id batches; Parallel.ForEach WITHIN each batch; sort each batch's results by key and AddBlob sequentially; release the batch. Batches are contiguous key ranges, so the blob region lands in global key order regardless of thread scheduling, and peak memory is one batch's output. Side-staged particle-preload meshes drain per batch into a key-deduped map (first instance wins — per-id extraction output is deterministic, so instance choice cannot affect bytes) and are written after all batches, sorted by key, skipping keys already written. Program.cs is now a thin arg-parsing shell over the public BakeRunner so the new dat-gated byte-reproducibility test can drive the REAL pipeline: tests/AcDream.Bake.Tests (new project, rule 6; registered in slnx; no Silk.NET in its resolved dependency graph — verified) bakes the same 9-id mixed fixture twice with DIFFERENT thread counts (8 vs 3 — thread scheduling was the nondeterminism source) and asserts the two pak files are byte-identical. Ran for real against the dats on this machine: green. (10) The isSetup argument for EnvCell extraction now matches at both call sites (BakeRunner and PakEquivalenceTests both pass false) and is documented at each: the runtime's own request sites (WbMeshAdapter.IncrementRefCount / EnsureLoaded) pass isSetup: false for every MeshRef id including cell-geometry ids. The parameter is currently dead in MeshExtractor.PrepareMeshData (dispatch is on the resolved dat type), but two disagreeing call sites were a latent trap. Header FormatVersion is no longer set by the bake (PakWriter stamps it per review finding 2, previous commit).
26 lines
1.5 KiB
Text
26 lines
1.5 KiB
Text
<Solution>
|
|
<Folder Name="/src/">
|
|
<Project Path="src/AcDream.App/AcDream.App.csproj" />
|
|
<Project Path="src/AcDream.Bake/AcDream.Bake.csproj" />
|
|
<Project Path="src/AcDream.Cli/AcDream.Cli.csproj" />
|
|
<Project Path="src/AcDream.Content/AcDream.Content.csproj" />
|
|
<Project Path="src/AcDream.Core/AcDream.Core.csproj" />
|
|
<Project Path="src/AcDream.Core.Net/AcDream.Core.Net.csproj" />
|
|
<Project Path="src/AcDream.Plugin.Abstractions/AcDream.Plugin.Abstractions.csproj" />
|
|
<Project Path="src/AcDream.Plugins.Smoke/AcDream.Plugins.Smoke.csproj" />
|
|
<Project Path="src/AcDream.UI.Abstractions/AcDream.UI.Abstractions.csproj" />
|
|
<Project Path="src/AcDream.UI.ImGui/AcDream.UI.ImGui.csproj" />
|
|
</Folder>
|
|
<Folder Name="/tools/">
|
|
<Project Path="tools/RetailTimeProbe/RetailTimeProbe.csproj" />
|
|
</Folder>
|
|
<Folder Name="/tests/">
|
|
<Project Path="tests/AcDream.App.Tests/AcDream.App.Tests.csproj" />
|
|
<Project Path="tests/AcDream.Bake.Tests/AcDream.Bake.Tests.csproj" />
|
|
<Project Path="tests/AcDream.Content.Tests/AcDream.Content.Tests.csproj" />
|
|
<Project Path="tests/AcDream.Core.Tests.Fixtures.HelloPlugin/AcDream.Core.Tests.Fixtures.HelloPlugin.csproj" />
|
|
<Project Path="tests/AcDream.Core.Tests/AcDream.Core.Tests.csproj" />
|
|
<Project Path="tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj" />
|
|
<Project Path="tests/AcDream.UI.Abstractions.Tests/AcDream.UI.Abstractions.Tests.csproj" />
|
|
</Folder>
|
|
</Solution>
|