On 8/17/2026 10:24 PM, Alex Bennée wrote:
"Huang, Honglei" <[email protected]> writes:

On 8/17/2026 7:44 PM, Akihiko Odaki wrote:
On 2026/08/17 12:19, Huang, Honglei wrote:

Hi Michael, Alex, Dmitry, Akihiko,
Hi Honglei,


I'm bringing AMD GPU compute ROCm based on virtio. I posted a ROCm
over virtio
implementation to virglrenderer nine months ago (MR !1568 [1]). The
ROCm side has
been supportted by ROCm offical.

Current implementation is a virtio gpu context type capset handled inside
virglrenderer, sharing the display path. That's an awkward fit, many
compute GPUs have no display engine at all.
<snip>
    - that instance served by a separate ROCm backend library loaded
      in-process by QEMU.
First, I think we need to establish why ROCm cannot or should not
remain
in virglrenderer. The virglrenderer, Venus, and VCL maintainers are
likely better placed to advise on that boundary. Once the protocol
requirements and performance measurements are clear, we can assess the
appropriate QEMU integration.

venus is borned for GFX.
virCL not merged.

To be clear, I'm not saying virglrenderer can't host a ROCm native
context it clearly can. My hesitation is more about fit and direction:
virglrenderer has grown up around GL/graphics, and I haven't yet found
compute oriented plumbing there to build on, while ROCm moves very
fast and I need something I can keep current with low friction.

I'm unsure what the current development status of virglrenderer is but
it does see a continuing stream of merges. However the threading model
does make things tricky for QEMU when we are sharing lifetime of blobs
between QEMU proper and the virglrenderer thread. Perhaps there is a
better way to organise things?

Yes, agreed. ROCm has no render thread of its own, it uses user-mode queues So, I think there's a better organisation.


Could we do the marshalling of VirtIO GPU commands into ROCm directly
inside QEMU rather than going through additional plumbing?

Yes, by "additional plumbing" I take you to mean routing through a
virglrenderer style renderer ( extra thread and blob coordination).
Yes, I'd drop that. What I'd keep is only a thin in QEMU backend the 9pfs/cryptodev kind of pluggable backend, not a renderer layer which is what lets QEMU own the blob lifetime directly.


Are the sequences we need to handle more or less complex than your general gfx
rendering? How might this work with other frameworks?

Simpler, I think. ROCm has no render thread. It uses HSA user-mode queues: the application writes AQL packets into an in memory ring and rings a doorbell an MMIO page from the GPU's mapped straight into user space and the GPU's hardware scheduler picks the work up. Nothing on the host translates or dispatches a command stream the way a GL renderer does. Completion is an signal: either an interrupt backed event wait, or the CPU polling the signal value the GPU writes to memory. So the host side is closer to an ioctl proxy (create/destroy queues, alloc/map/register memory, signals, submit); the hard parts are the memory stuff you raised and the async event/fault channel.

For other frameworks, I think we can keep the device generic, user queues, a shared memory, events with the framework specific marshalling in a small pluggable backend. AMD is unifying queues in DRM, allowing devices to use user queues and event like mechanisms, which will greatly simplify device emulation. It also may affect the NPU. I think that graphics may use the same mechanism in the future to avoid complex synchronization issues.

Regards,
Honglei



Regards,
Honglei


[2]
https://developers.redhat.com/articles/2025/06/05/how-we-improved-
ai-inference-macos-podman-containers
[3] https://www.qualcomm.com/developer/blog/2024/10/vcl-virtio-gpu-
opencl-driver
Regards,
Akihiko Odaki


That reuses the existing pluggable backend model, a second virtio gpu + a
backend library. It doesn't add dedicated queues for
debug/profiling currently.

Waiting for reply and  happy to share more detail. Thanks!

[1] https://gitlab.freedesktop.org/virgl/virglrenderer/-/
merge_requests/1568

Regards,
Honglei



Reply via email to