mirror of
https://github.com/games-on-whales/wolf.git
synced 2026-10-15 13:02:03 +00:00
[PR #450] feat(vulkan): wolf:vulkan image (native Vulkan NV12 encode) + Fedora switch #476
Labels
No labels
🧠 1 - 🤖 999
AMD
bug
bug
cannot reproduce
documentation
duplicate
easy
enhancement
enhancement
enhancement
fixed?
fixed?
good first issue
hard
help wanted
Intel
invalid
LXC
medium
moonlight-protocol
Multi GPU
nixos
not a bug
nvidia
pull-request
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
games-on-whales/wolf#476
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/games-on-whales/wolf/pull/450
Author: @JBailes
Created: 6/27/2026
Status: 🔄 Open
Base:
beta← Head:feat/vulkan-image📝 Commits (10+)
1e0692bfeat(vulkan): native Vulkan NV12 H.264 encode support9ff5f9cfeat(fedora): switch images to Fedora base + embedded PulseAudiobbdac70ci: build & publish wolf:vulkan FROM gst-wayland-display:vulkanca14b47ci: rebuild wolf:vulkan on updated base (LINEAR encode-src workaround)847a1b8ci: trigger wolf:vulkan rebuild (LINEAR encode-src base)8cf4677feat(vulkan): auto-enable RADV_PERFTEST=lowlatencyenc on AMD + Vulkan encoderf06c7d8fix(rtsp): round resolution to 64px CTB for vulkanh265enc65ddb99feat(vulkan): opt-in 10-bit HDR10 path for vulkanh265enc (WOLF_HDR)73ad597ci(vulkan): cache-bust wolf:vulkan to rebuild on fresh baseb558409feat(vulkan): make the 10-bit/HDR path config-driven ([gstreamer.video] hdr)📊 Changes
22 files changed (+614 additions, -139 deletions)
View changed files
➕
.ci-rebuild-trigger(+1 -0)📝
.devcontainer/dev-setup.sh(+5 -6)📝
.devcontainer/devcontainer.json(+9 -7)📝
.github/workflows/docker-build.yml(+19 -0)📝
docker/gpu-drivers.Dockerfile(+22 -26)📝
docker/gstreamer.Dockerfile(+13 -42)📝
docker/wolf.Dockerfile(+52 -40)➕
docker/wolf.vulkan.Dockerfile(+136 -0)📝
docs/modules/user/pages/configuration.adoc(+12 -0)📝
src/moonlight-protocol/moonlight.cpp(+8 -1)📝
src/moonlight-protocol/moonlight/control.hpp(+40 -0)📝
src/moonlight-protocol/moonlight/protocol.hpp(+2 -1)📝
src/moonlight-server/control/control.cpp(+19 -0)📝
src/moonlight-server/events/events.hpp(+13 -0)📝
src/moonlight-server/rest/endpoints.hpp(+15 -1)📝
src/moonlight-server/rtsp/commands.hpp(+26 -0)📝
src/moonlight-server/state/configTOML.cpp(+55 -2)📝
src/moonlight-server/state/data-structures.hpp(+5 -0)📝
src/moonlight-server/state/default/config.include.toml(+47 -1)📝
src/moonlight-server/state/default/config.v7.toml(+47 -1)...and 2 more files
📄 Description
What this adds
1. Native Vulkan NV12 H.264 encode (
feat(vulkan))A
VULKANencoder type wired through config/streaming: avulkanh264ench264_encodersblock,producer_buffer_caps = video/x-raw(memory:VulkanImage), format=NV12, andvideo_params_zero_copy = "queue"so the encoder consumes the producer's NV12VulkanImagedirectly (novideoscale/videoconvert/videorate, which can't negotiate thememory:VulkanImagefeature).waylanddisplaysrc vulkan=trueis set when the buffer caps ask for VulkanImage. Tunables:WOLF_VULKAN_QUALITY/_REF_FRAMES/_B_FRAMES(defaults tuned for low-latency:quality=0 num-ref-frames=1 b-frames=0).2.
wolf:vulkanimage (ci)docker/wolf.vulkan.DockerfileisFROM ghcr.io/games-on-whales/gst-wayland-display:vulkan— which already carries patched GStreamer 1.28.4 (vulkan-video + thevulkanh264encDPB-pool patch) and the plugin under/opt/gst. So the heavy gst-Vulkan + plugin build happens once in that image; here we only compile Wolf on top. ABuild Wolf (Vulkan)step indocker-build.ymlpublishesghcr.io/<owner>/wolf:vulkan.3. Fedora image switch (
feat(fedora))Moved here from #431 per request.
gpu-drivers,gstreamerandwolfimages build on Fedora (base-app:fedora) instead of Ubuntu/apt. Wolf runs its own PulseAudio under supervisord (the Fedora base ships a conflictingpipewire-pulseaudioshim, swapped with--allowerasing), with graceful SIGINT shutdown to matchstopsignal=INT.Relationship to other PRs
gst-wayland-display:vulkan, the base image this builds FROM.Status / testing
Hardware-validated end-to-end on an AMD RX 7900 XTX (RADV + RPM Fusion freeworld mesa):
waylanddisplaysrc → NV12 VulkanImage → vulkanh264enc → Moonlightstreams real content. Draft pending CI image builds and broader GPU validation.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.