ac0e73321c
apple / screenshots (push) Successful in 6m18s
ci / web (push) Successful in 1m25s
ci / docs-site (push) Successful in 1m5s
android / android (push) Successful in 13m2s
arch / build-publish (push) Successful in 12m39s
decky / build-publish (push) Successful in 19s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 10s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 10s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 8s
docker / build-push (ci, ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 9s
ci / bench (push) Successful in 5m36s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 10s
windows-host / package (push) Successful in 16m23s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 6m8s
deb / build-publish-host (push) Successful in 10m16s
deb / build-publish (push) Successful in 12m30s
ci / rust (push) Successful in 19m26s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 22m20s
docker / deploy-docs (push) Successful in 23s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 24m32s
apple / swift (push) Successful in 1m17s
PyroWave's wavelet encode runs on the GPU's compute/shader cores, so a GPU-bound game starves it: submit spikes from ~2 ms to ~15 ms under a 95%+ game load and the stream fps collapses. NVENC is immune (separate encoder ASIC). Two levers to let the encode get scheduled ahead of the game's rendering: - Windows process GPU scheduling: D3DKMTSetProcessSchedulingPriorityClass, env PUNKTFUNK_GPU_PRIORITY = off|above-normal|high (default)|realtime. Best-effort, once per process, non-fatal on refusal (enc/windows/pyrowave.rs). - Global-priority Vulkan encode queue (Granite patch 0005): request a VK_KHR_global_priority queue (PYROWAVE_QUEUE_PRIORITY = off|high|realtime, default realtime), downgrading REALTIME→HIGH→none on NOT_PERMITTED so a refused class never regresses the encoder to HEVC. HONEST STATUS: on an RTX 4090 / Windows / WDDM neither moved the ~15 ms spikes — the graphics-vs-compute preemption granularity is the wall, not the priority level. Kept because both are correct, harmless (graceful fallback), and may help other GPUs/drivers. For a GPU-saturated game the working levers are reducing the encode's GPU cost (4:2:0/8-bit) or H.265; PyroWave holds full rate on the desktop and in games that leave the GPU headroom. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
35 lines
2.0 KiB
Plaintext
35 lines
2.0 KiB
Plaintext
Vendored by scripts/vendor-pyrowave.sh — do not edit by hand.
|
|
|
|
pyrowave: 509e4f887b585a3f97471fcc804e9de649f2c16f
|
|
Granite: 44362775d36e0c4139352f83efd96bab4e239f66
|
|
volk: 47cddf7ed97b94118a08aacb548a411188e016cc
|
|
vulkan-headers: 015e25c3c91b70eb1a754d36fb14c4ba6ad9b0b9
|
|
|
|
Tree is pruned to what the pyrowave-sys standalone build needs
|
|
(see the rm -rf list in the script). All parts are MIT-licensed
|
|
(pyrowave, Granite) or Apache-2.0/MIT (volk, Vulkan-Headers).
|
|
|
|
Local patches (crates/pyrowave-sys/patches/, re-applied on re-vendor):
|
|
0001-payload-data-444-sizing.patch — encoder payload_data worst-case buffer
|
|
was sized for 4:2:0's 1.5 samples/px; busy 4:4:4 (3 samples/px) overran it
|
|
on the GPU → nondeterministic corrupt bitstreams/crashes at any bitrate.
|
|
Found + validated 2026-07-18 (RTX 5070 Ti, 1080p/4K, 8/16-bit); to be
|
|
reported upstream.
|
|
|
|
(0002-0003 are reserved by concurrent in-flight work and land separately.)
|
|
|
|
0004-encoder-buffer-pool.patch — pyrowave_c.cpp allocated four Vulkan buffers
|
|
(meta + bitstream, Device + CachedHost) on EVERY encode. At 240 fps with
|
|
MB-scale bitstreams that per-frame churn stalled the encode itself: on an
|
|
RTX 4090 the 5120x1440 submit+fence-wait was ~15 ms (~64 fps ceiling) and
|
|
dropped to ~1 ms (~1025 fps) once the buffers are pooled on the encoder and
|
|
reused. Safe under the synchronous encode model; re-validated by
|
|
pyrowave_win_smoke. Perf fix, not a correctness fix.
|
|
|
|
0005-global-priority-queue.patch — Context::create_device requests a global-priority Vulkan
|
|
compute queue (VK_KHR_global_priority, PYROWAVE_QUEUE_PRIORITY=off|high|realtime, default
|
|
realtime) so the wavelet encode can preempt a GPU-bound game on the shared shader cores. A
|
|
create loop downgrades on NOT_PERMITTED so a refused class never regresses the encoder. Did
|
|
not overcome the graphics-vs-compute preemption wall on an RTX 4090 (kept: correct + harmless,
|
|
may help other HW/drivers).
|