Probe captures: scheduled face rides the realtime multi-view cull (GPU-patched ring entry) #832

Closed
opened 2026-10-17 22:16:24 +00:00 by sky_line · 2 comments
Owner

Probe-capture culls cost about as much as capture shading on a GTX 1080 at 4K, high settings: pr_cull + pr_rt_cull ~1.27 ms (plus pr_patch 0.38).

Opportunity (found in #829)

The scheduled probe face can ride along on the realtime probe's multi-view cull. This is already plumbed:

  • job.mvSched, view / block 7;
  • the sched parameter and slotB in recordProbeMvCull.

It is disabled at llcleanrenderervk.cpp ~16587 (sj.mv = sj.mvSched = false).

The one blocker: slotB's cull parameters are built from the CPU-side origin / clips, but with #478 GPU jobs the GPU decides those. It needs a GPU-patched ring entry, the same mechanism prbPrepareJob already uses for ringCull[f].

Payoff: removes the scheduled face's own cull and alpha sort (most of pr_cull) whenever the realtime probe runs (probe detail >= 2).

Reusing the MAIN view's cull is not safe: probe frusta cover directions behind the camera.

Also look at

  • whether pr_patch (0.38 ms) can be amortised;
  • whether the per-face cull granularity can be coarser at probe resolution.

Measure

Serial on the GTX 1080 at 4K (high, realtime probes on and off): pr_cull, pr_rt_cull, pr_patch, frame total; probe image parity (the same draws must reach each face); also the RTX 5090.

Probe-capture culls cost about as much as capture shading on a GTX 1080 at 4K, high settings: `pr_cull` + `pr_rt_cull` ~1.27 ms (plus `pr_patch` 0.38). ### Opportunity (found in #829) The scheduled probe face can ride along on the realtime probe's multi-view cull. This is already plumbed: - `job.mvSched`, view / block 7; - the `sched` parameter and `slotB` in `recordProbeMvCull`. It is disabled at llcleanrenderervk.cpp ~16587 (`sj.mv = sj.mvSched = false`). **The one blocker:** `slotB`'s cull parameters are built from the CPU-side origin / clips, but with #478 GPU jobs the GPU decides those. It needs a GPU-patched ring entry, the same mechanism `prbPrepareJob` already uses for `ringCull[f]`. **Payoff:** removes the scheduled face's own cull and alpha sort (most of `pr_cull`) whenever the realtime probe runs (probe detail >= 2). Reusing the MAIN view's cull is not safe: probe frusta cover directions behind the camera. ### Also look at - whether `pr_patch` (0.38 ms) can be amortised; - whether the per-face cull granularity can be coarser at probe resolution. ### Measure Serial on the GTX 1080 at 4K (high, realtime probes on and off): `pr_cull`, `pr_rt_cull`, `pr_patch`, frame total; probe image parity (the same draws must reach each face); also the RTX 5090.
sky_line added this to the Slipstream project 2026-10-17 22:16:24 +00:00
Author
Owner

Merged (be39ca2149). The scheduled probe face rides the realtime multi-view cull again (RenderVKMultiViewScheduled, reused, default on); its slot_b cull entry is GPU-patched from the scheduled job. clean_cull.comp phases 5-7 now gate each view on its own instance count (an empty realtime or scheduled job no longer empties or pollutes the other).

GTX 1080, 4K, high, serial, interleaved on/off:

  • Frame: 28.07 / 28.26 / 28.14 / 28.17 ms on vs 28.46 / 28.52 / 28.35 / 28.47 ms off, about -0.3 ms.
  • Probe culls: on, pr_rt_cull 0.36 and no pr_cull; off, 0.26 + 0.26.
  • The scheduled face's pr_face is 0.29-0.31 vs 0.41.
  • pr_patch reads 0.01 ms in serial: the earlier 0.38 was drain absorbed from earlier work, not patch work.

The earlier "~1.27 ms of probe culls" was mostly async attribution smear; serial, the culls were ~0.5 ms.

Still to do:

  • probe image parity at detail 2;
  • the sky-only scheduled job while realtime is live;
  • detail 3 with traced / rasterized combinations;
  • RenderVKProbeRealtimeFacesPerFrame < 6 fallback;
  • live toggle;
  • cluster-LOD capture rig lists.

Optional follow-up: merge the two patch dispatches into one.

Merged (be39ca2149). The scheduled probe face rides the realtime multi-view cull again (`RenderVKMultiViewScheduled`, reused, default on); its slot_b cull entry is GPU-patched from the scheduled job. clean_cull.comp phases 5-7 now gate each view on its own instance count (an empty realtime or scheduled job no longer empties or pollutes the other). **GTX 1080, 4K, high, serial, interleaved on/off:** - Frame: 28.07 / 28.26 / 28.14 / 28.17 ms on vs 28.46 / 28.52 / 28.35 / 28.47 ms off, about -0.3 ms. - Probe culls: on, `pr_rt_cull` 0.36 and no `pr_cull`; off, 0.26 + 0.26. - The scheduled face's `pr_face` is 0.29-0.31 vs 0.41. - `pr_patch` reads 0.01 ms in serial: the earlier 0.38 was drain absorbed from earlier work, not patch work. The earlier "~1.27 ms of probe culls" was mostly async attribution smear; serial, the culls were ~0.5 ms. Still to do: - probe image parity at detail 2; - the sky-only scheduled job while realtime is live; - detail 3 with traced / rasterized combinations; - RenderVKProbeRealtimeFacesPerFrame < 6 fallback; - live toggle; - cluster-LOD capture rig lists. Optional follow-up: merge the two patch dispatches into one.
Author
Owner

Fixed in Slipstream 1.3.0 (stable): https://git.slipstreamviewer.org/sky_line/Slipstream/releases/tag/v1.3.0

If you still see this on 1.3.0, reply here and we'll reopen it.

Fixed in **Slipstream 1.3.0** (stable): https://git.slipstreamviewer.org/sky_line/Slipstream/releases/tag/v1.3.0 If you still see this on 1.3.0, reply here and we'll reopen it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#832
No description provided.