Files
IfcOpenShell/src
Dion Moult 37fa4e9076 ifcviewer: parallel per-model CPU cull
Split cullAndUploadVisible into cullModelCpu (CPU-only, thread-safe) and
uploadCullResults (GL-only, main thread). render() fans the per-model
culls out via std::async and joins before the serial upload pass.

The cull scratch (vis_fwd/rev_lod0/1, visible_flat, indirect_scratch)
moved onto ModelGpuData so each worker owns its output buffers. Phase
timers and hiz_reject_count_ are atomic since workers fetch_add into
them. A new wall-clock timer around the dispatch block reports the
actual frame-time contribution; the existing clr/trv/emt counters are
now documented as per-thread sums.

Measured on the 18-model / 569k-instance test scene: wall-clock cull
dropped from ~25 ms to ~5 ms while the aggregate CPU work (trv) stayed
~30 ms. Frame time 34 ms -> 19 ms. IFC_CULL_THREADS=0 forces the
single-threaded fallback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-23 21:32:24 +10:00
..
2026-02-27 14:52:55 +05:00
2026-01-26 17:13:18 +05:00
2026-02-27 14:52:55 +05:00
2025-12-19 18:53:14 +05:00
2026-04-07 09:46:45 +02:00
2025-12-19 18:53:14 +05:00
2026-04-21 16:18:59 +02:00
2025-12-19 18:53:14 +05:00
2026-04-21 16:18:59 +02:00
2026-04-21 21:51:21 +02:00
2025-12-19 18:53:14 +05:00
2026-04-18 21:13:24 +02:00
2026-03-31 20:51:46 +02:00
2026-03-18 10:29:09 +05:30