mirror of
https://github.com/games-on-whales/wolf.git
synced 2026-10-15 21:12:08 +00:00
[GH-ISSUE #478] AMD/VAAPI: framerates above 60 fail to negotiate ("could not transform ... framerate=120/1") #289
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#289
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?
Originally created by @sturq on GitHub (Aug 16, 2026).
Original GitHub issue: https://github.com/games-on-whales/wolf/issues/478
On an AMD RX 7900 XT (gfx1100, Mesa/VAAPI), any client request above 60fps fails to negotiate and falls back to 60. Requesting 1920x1080@120 produces:
The stream still works, but always at 60fps.
Context
At startup Wolf reports it cannot use the zero-copy path on this GPU:
So the failing negotiation happens in the legacy pipeline, where
vapostprochas to convert RGBx to NV12 in system memory.The compositor side does not appear to be the limit:
wayland-display-corederives the mode from the client (base_info.fps()), and the GStreamer source advertisesframerate_range(1/1 .. i32::MAX/1). The failure is downstream of that, at thevapostproc+ capsfilter stage.What I tried (all still fail with the same error)
videoconvert ! vapostproc …in[gstreamer.video.defaults.va] video_paramsvideorate ! videoconvert ! vapostproc …in bothvideo_paramsandvideo_params_zero_copy— this made it worse: instead of falling back to 60fps the stream froze completelyvapostprocwithvideoconvertscale(plusvauploadfor the zero-copy variant) — negotiation still fails at 12060fps works reliably in all of the above.
The elements themselves handle 120fps fine
Running the same conversion manually inside the Wolf container succeeds at both 60 and 120fps, including with the exact caps from
config.toml:No errors, only the usual "VPP does not support alpha blending" / "Driver does not support trellis" warnings. So
vapostprocand the VA encoder are not the limit on this GPU. Whatever caps Wolf negotiates at runtime differ from this.Questions
vapostprocreports usable DMA formats on RDNA3? If zero copy worked here, the RGBx conversion (and presumably the 120fps negotiation) would be avoided entirely.Possibly related to #103 (VAAPI and AMD issues).
Environment
stable(revision7f416ec0f2); also testedfeat-comprehensive-display-modes, same DMA/legacy fallbackWOLF_RENDER_NODE=/dev/dri/renderD129; a second AMD GPU (RX 550, Polaris) is present as renderD128@ABeltramo commented on GitHub (Aug 16, 2026):
This is most likely because you have multiple VAAPI compatible GPUs available; see if this helps: https://github.com/games-on-whales/wolf/issues/225#issuecomment-3585056921
@sturq commented on GitHub (Aug 17, 2026):
That was it, thank you. Passing only the second GPU instead of the whole
/dev/drifixed it completely.Before (whole
/dev/drimounted):After (
/dev/dri/renderD129only,/dev/inputinstead of all of/dev):With the zero copy pipeline active, 120fps negotiates fine. Verified with moonlight-embedded, same result at both rates:
No more
could not transform ... framerate=(fraction)120/1and nonot negotiated. AV1 also moved from the software encoder to hardware.So on this setup the >60fps failure was a side effect of the legacy pipeline being selected, which in turn came from exposing both GPUs. Might be worth calling this out in the docs: multi-GPU hosts should pass a single render node rather than all of
/dev/dri.For reference, the working Quadlet bits (rootful Podman, AlmaLinux 10, RX 7900 XT + RX 550):