Message ID | 20250209165649.544005-11-dmitry.osipenko@collabora.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Support virtio-gpu DRM native context | expand |
On 2025/02/10 1:56, Dmitry Osipenko wrote: > From: Alex Bennée <alex.bennee@linaro.org> > > This attempts to tidy up the VirtIO GPU documentation to make the list > of requirements clearer. There are still a lot of moving parts and the > distros have some catching up to do before this is all handled > automatically. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > Cc: Sergio Lopez Pascual <slp@redhat.com> > Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> > [dmitry.osipenko@collabora.com: Extended and corrected doc] > --- > docs/system/devices/virtio-gpu.rst | 106 ++++++++++++++++++++++++++++- > 1 file changed, 104 insertions(+), 2 deletions(-) > > diff --git a/docs/system/devices/virtio-gpu.rst b/docs/system/devices/virtio-gpu.rst > index ea3eb052df3c..664fc4000fa9 100644 > --- a/docs/system/devices/virtio-gpu.rst > +++ b/docs/system/devices/virtio-gpu.rst > @@ -5,14 +5,34 @@ virtio-gpu > ========== > > This document explains the setup and usage of the virtio-gpu device. > -The virtio-gpu device paravirtualizes the GPU and display controller. > +The virtio-gpu device provides a GPU and display controller > +paravirtualized using VirtIO. It supports a number of different modes > +from simple 2D displays to fully accelerated 3D graphics. > + > +virtio-gpu requirements > +----------------------- > > Linux kernel support > --------------------- > +^^^^^^^^^^^^^^^^^^^^ > > virtio-gpu requires a guest Linux kernel built with the > ``CONFIG_DRM_VIRTIO_GPU`` option. > > +Host Linux kernel requirements vary depending on a used virtio-gpu > +capabilities. See further sections for a detailed descriptions. The section for 3D acceleration follows so let's defer the description for the host requirements to that section. Perhaps the section title may be changed to clarify that it only describes the guest Linux kernel requirement to exclude the host Linux kernel requirement as well as guest Mesa. > + > +3D acceleration > +^^^^^^^^^^^^^^^ > + > +3D acceleration of a virtualized GPU is still an evolving field. > +Depending on the 3D mode you are running you may need to override > +distribution supplied libraries with more recent versions or enable > +build options. There are a number of requirements the host must meet > +to be able to be able to support guests. QEMU must be able to access the > +host's GPU and for the best performance be able to reliably share GPU > +memory with the guest. Details of 3D acceleration requirements are > +described in a further sections. > + > QEMU virtio-gpu variants > ------------------------ > > @@ -65,8 +85,14 @@ intermediate representation is communicated to the host and the > `virglrenderer`_ library on the host translates the intermediate > representation back to OpenGL API calls. > > +By default OpenGL version on guest is limited to 4.3. In order to enable > +OpenGL 4.6 support, virtio-gpu host blobs feature (``hostmem`` and ``blob`` > +fields) should be enabled. The ``hostmem`` field specifies the size of > +virtio-gpu host memory window. This is typically between 256M and 8G. > + > .. parsed-literal:: > -device virtio-gpu-gl > + -device virtio-gpu-gl,hostmem=8G,blob=true > > .. _virgl: https://docs.mesa3d.org/drivers/virgl.html > .. _Gallium3D: https://www.freedesktop.org/wiki/Software/gallium/ > @@ -94,6 +120,62 @@ of virtio-gpu host memory window. This is typically between 256M and 8G. > > .. _drm: https://gitlab.freedesktop.org/virgl/virglrenderer/-/tree/main/src/drm > > +.. list-table:: Linux Host Requirements > + :header-rows: 1 > + > + * - Capability > + - Kernel > + - virglrenderer build flags > + * - OpenGL pass-through > + - Any Linux version compatible with QEMU if not using host blobs feature, > + Linux 6.13+ otherwise > + - N/A > + * - Vulkan pass-through > + - Linux 6.13+ > + - -Dvenus=true -Drender-server=true > + * - AMDGPU DRM native context > + - Linux 6.13+ > + - -Ddrm-renderers=amdgpu-experimental > + * - Freedreno DRM native context > + - Linux 6.4+ > + - -Ddrm-renderers=msm > + * - Intel i915 DRM native context > + - Linux 6.13+ > + - -Ddrm-renderers=i915-experimental `mr1384`_ > + * - Asahi DRM native context > + - Downstream version of Asahi Linux kernel > + - -Ddrm-renderers=asahi-experimental `mr1274`_ > + > +.. _mr1384: https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1384 > +.. _mr1274: https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1274 > + > +.. list-table:: Linux Guest Requirements > + :header-rows: 1 > + > + * - Capability > + - Mesa Version > + - Mesa build flags > + * - OpenGL pass-through > + - 16.0.0+ > + - -Dgallium-drivers=virgl > + * - Vulkan pass-through > + - 24.2.0+ > + - -Dvulkan-drivers=virtio > + * - AMDGPU DRM native context > + - 25.0.0+ > + - -Dgallium-drivers=radeonsi -Dvulkan-drivers=amd -Damdgpu-virtio=true > + * - Freedreno DRM native context > + - 23.1.0+ > + - -Dgallium-drivers=freedreno -Dvulkan-drivers=freedreno > + * - Intel i915 DRM native context > + - `mr29870`_ > + - -Dgallium-drivers=iris -Dvulkan-drivers=intel -Dintel-virtio-experimental=true > + * - Asahi DRM native context > + - 24.2.0+ > + - -Dgallium-drivers=asahi -Dvulkan-drivers=asahi > + > +.. _mr29870: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29870 > + > virtio-gpu rutabaga > ------------------- > > @@ -133,3 +215,23 @@ Surfaceless is the default if ``wsi`` is not specified. > .. _Wayland display passthrough: https://www.youtube.com/watch?v=OZJiHMtIQ2M > .. _gfxstream-enabled rutabaga: https://crosvm.dev/book/appendix/rutabaga_gfx.html > .. _guest Wayland proxy: https://crosvm.dev/book/devices/wayland.html > + > +.. list-table:: Linux Host Requirements > + :header-rows: 1 > + > + * - Capability > + - Kernel > + - Rutabaga build flags > + * - Vulkan+Wayland pass-through > + - Linux 6.13+ > + - Follow `gfxstream-enabled rutabaga`_ build instructions It is odd that the column header says "build flags", and this cell says "Follow `gfxstream-enabled rutabaga`_ build instructions". I think you can simply remove this column. This section already says it leverages Rutabaga and the crosvm book provides build instructions. Regards, Akihiko Odaki > + > +.. list-table:: Linux Guest Requirements > + :header-rows: 1 > + > + * - Capability > + - Mesa Version > + - Mesa build flags > + * - Vulkan pass-through > + - 24.3.0+ > + - -Dvulkan-drivers=gfxstream
Akihiko Odaki <akihiko.odaki@daynix.com> writes: > On 2025/02/10 1:56, Dmitry Osipenko wrote: >> From: Alex Bennée <alex.bennee@linaro.org> >> This attempts to tidy up the VirtIO GPU documentation to make the >> list >> of requirements clearer. There are still a lot of moving parts and the >> distros have some catching up to do before this is all handled >> automatically. >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> >> Cc: Sergio Lopez Pascual <slp@redhat.com> >> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> >> [dmitry.osipenko@collabora.com: Extended and corrected doc] >> --- >> docs/system/devices/virtio-gpu.rst | 106 ++++++++++++++++++++++++++++- >> 1 file changed, 104 insertions(+), 2 deletions(-) >> diff --git a/docs/system/devices/virtio-gpu.rst >> b/docs/system/devices/virtio-gpu.rst >> index ea3eb052df3c..664fc4000fa9 100644 >> --- a/docs/system/devices/virtio-gpu.rst >> +++ b/docs/system/devices/virtio-gpu.rst >> @@ -5,14 +5,34 @@ virtio-gpu >> ========== >> This document explains the setup and usage of the virtio-gpu >> device. >> -The virtio-gpu device paravirtualizes the GPU and display controller. >> +The virtio-gpu device provides a GPU and display controller >> +paravirtualized using VirtIO. It supports a number of different modes >> +from simple 2D displays to fully accelerated 3D graphics. >> + >> +virtio-gpu requirements >> +----------------------- >> Linux kernel support >> --------------------- >> +^^^^^^^^^^^^^^^^^^^^ >> virtio-gpu requires a guest Linux kernel built with the >> ``CONFIG_DRM_VIRTIO_GPU`` option. >> +Host Linux kernel requirements vary depending on a used >> virtio-gpu >> +capabilities. See further sections for a detailed descriptions. > > The section for 3D acceleration follows so let's defer the description > for the host requirements to that section. But this is a requirement for all virtio-gpu cases, not just the 3D ones. > Perhaps the section title may be changed to clarify that it only > describes the guest Linux kernel requirement to exclude the host Linux > kernel requirement as well as guest Mesa. 3D is a little weird compared to most QEMU requirements as it not a binary but provides various levels of backends depending on the version. However I don't think there are any the host kernel requirements other than support for the underlying HW that will be doing the rendering. > >> + >> +3D acceleration >> +^^^^^^^^^^^^^^^ >> + >> +3D acceleration of a virtualized GPU is still an evolving field. >> +Depending on the 3D mode you are running you may need to override >> +distribution supplied libraries with more recent versions or enable >> +build options. There are a number of requirements the host must meet >> +to be able to be able to support guests. QEMU must be able to access the >> +host's GPU and for the best performance be able to reliably share GPU >> +memory with the guest. Details of 3D acceleration requirements are >> +described in a further sections. >> + >> QEMU virtio-gpu variants >> ------------------------ >> @@ -65,8 +85,14 @@ intermediate representation is communicated to >> the host and the >> `virglrenderer`_ library on the host translates the intermediate >> representation back to OpenGL API calls. >> +By default OpenGL version on guest is limited to 4.3. In order to >> enable >> +OpenGL 4.6 support, virtio-gpu host blobs feature (``hostmem`` and ``blob`` >> +fields) should be enabled. The ``hostmem`` field specifies the size of >> +virtio-gpu host memory window. This is typically between 256M and 8G. >> + >> .. parsed-literal:: >> -device virtio-gpu-gl >> + -device virtio-gpu-gl,hostmem=8G,blob=true >> .. _virgl: https://docs.mesa3d.org/drivers/virgl.html >> .. _Gallium3D: https://www.freedesktop.org/wiki/Software/gallium/ >> @@ -94,6 +120,62 @@ of virtio-gpu host memory window. This is typically between 256M and 8G. >> .. _drm: >> https://gitlab.freedesktop.org/virgl/virglrenderer/-/tree/main/src/drm >> +.. list-table:: Linux Host Requirements >> + :header-rows: 1 >> + >> + * - Capability >> + - Kernel >> + - virglrenderer build flags >> + * - OpenGL pass-through >> + - Any Linux version compatible with QEMU if not using host blobs feature, >> + Linux 6.13+ otherwise >> + - N/A >> + * - Vulkan pass-through >> + - Linux 6.13+ >> + - -Dvenus=true -Drender-server=true >> + * - AMDGPU DRM native context >> + - Linux 6.13+ >> + - -Ddrm-renderers=amdgpu-experimental >> + * - Freedreno DRM native context >> + - Linux 6.4+ >> + - -Ddrm-renderers=msm >> + * - Intel i915 DRM native context >> + - Linux 6.13+ >> + - -Ddrm-renderers=i915-experimental `mr1384`_ >> + * - Asahi DRM native context >> + - Downstream version of Asahi Linux kernel >> + - -Ddrm-renderers=asahi-experimental `mr1274`_ >> + >> +.. _mr1384: https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1384 >> +.. _mr1274: https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1274 >> + >> +.. list-table:: Linux Guest Requirements >> + :header-rows: 1 >> + >> + * - Capability >> + - Mesa Version >> + - Mesa build flags >> + * - OpenGL pass-through >> + - 16.0.0+ >> + - -Dgallium-drivers=virgl >> + * - Vulkan pass-through >> + - 24.2.0+ >> + - -Dvulkan-drivers=virtio >> + * - AMDGPU DRM native context >> + - 25.0.0+ >> + - -Dgallium-drivers=radeonsi -Dvulkan-drivers=amd -Damdgpu-virtio=true >> + * - Freedreno DRM native context >> + - 23.1.0+ >> + - -Dgallium-drivers=freedreno -Dvulkan-drivers=freedreno >> + * - Intel i915 DRM native context >> + - `mr29870`_ >> + - -Dgallium-drivers=iris -Dvulkan-drivers=intel -Dintel-virtio-experimental=true >> + * - Asahi DRM native context >> + - 24.2.0+ >> + - -Dgallium-drivers=asahi -Dvulkan-drivers=asahi >> + >> +.. _mr29870: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29870 >> + >> virtio-gpu rutabaga >> ------------------- >> @@ -133,3 +215,23 @@ Surfaceless is the default if ``wsi`` is not >> specified. >> .. _Wayland display passthrough: https://www.youtube.com/watch?v=OZJiHMtIQ2M >> .. _gfxstream-enabled rutabaga: https://crosvm.dev/book/appendix/rutabaga_gfx.html >> .. _guest Wayland proxy: https://crosvm.dev/book/devices/wayland.html >> + >> +.. list-table:: Linux Host Requirements >> + :header-rows: 1 >> + >> + * - Capability >> + - Kernel >> + - Rutabaga build flags >> + * - Vulkan+Wayland pass-through >> + - Linux 6.13+ >> + - Follow `gfxstream-enabled rutabaga`_ build instructions > > It is odd that the column header says "build flags", and this cell > says "Follow `gfxstream-enabled rutabaga`_ build instructions". > > I think you can simply remove this column. This section already says > it leverages Rutabaga and the crosvm book provides build instructions. > > Regards, > Akihiko Odaki > >> + >> +.. list-table:: Linux Guest Requirements >> + :header-rows: 1 >> + >> + * - Capability >> + - Mesa Version >> + - Mesa build flags >> + * - Vulkan pass-through >> + - 24.3.0+ >> + - -Dvulkan-drivers=gfxstream
On 2025/02/13 19:18, Alex Bennée wrote: > Akihiko Odaki <akihiko.odaki@daynix.com> writes: > >> On 2025/02/10 1:56, Dmitry Osipenko wrote: >>> From: Alex Bennée <alex.bennee@linaro.org> >>> This attempts to tidy up the VirtIO GPU documentation to make the >>> list >>> of requirements clearer. There are still a lot of moving parts and the >>> distros have some catching up to do before this is all handled >>> automatically. >>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> >>> Cc: Sergio Lopez Pascual <slp@redhat.com> >>> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> >>> [dmitry.osipenko@collabora.com: Extended and corrected doc] >>> --- >>> docs/system/devices/virtio-gpu.rst | 106 ++++++++++++++++++++++++++++- >>> 1 file changed, 104 insertions(+), 2 deletions(-) >>> diff --git a/docs/system/devices/virtio-gpu.rst >>> b/docs/system/devices/virtio-gpu.rst >>> index ea3eb052df3c..664fc4000fa9 100644 >>> --- a/docs/system/devices/virtio-gpu.rst >>> +++ b/docs/system/devices/virtio-gpu.rst >>> @@ -5,14 +5,34 @@ virtio-gpu >>> ========== >>> This document explains the setup and usage of the virtio-gpu >>> device. >>> -The virtio-gpu device paravirtualizes the GPU and display controller. >>> +The virtio-gpu device provides a GPU and display controller >>> +paravirtualized using VirtIO. It supports a number of different modes >>> +from simple 2D displays to fully accelerated 3D graphics. >>> + >>> +virtio-gpu requirements >>> +----------------------- >>> Linux kernel support >>> --------------------- >>> +^^^^^^^^^^^^^^^^^^^^ >>> virtio-gpu requires a guest Linux kernel built with the >>> ``CONFIG_DRM_VIRTIO_GPU`` option. >>> +Host Linux kernel requirements vary depending on a used >>> virtio-gpu >>> +capabilities. See further sections for a detailed descriptions. >> >> The section for 3D acceleration follows so let's defer the description >> for the host requirements to that section. > > But this is a requirement for all virtio-gpu cases, not just the 3D ones. I referred to the statement starting "host Linux kernel requirements vary". Sorry, I was not clear. > >> Perhaps the section title may be changed to clarify that it only >> describes the guest Linux kernel requirement to exclude the host Linux >> kernel requirement as well as guest Mesa. > > 3D is a little weird compared to most QEMU requirements as it not a > binary but provides various levels of backends depending on the version. > However I don't think there are any the host kernel requirements other > than support for the underlying HW that will be doing the rendering. We can avoid mentioning the host kernel requirement at all by renaming the the section of title to e.g., "guest Linux kernel", and, if needed, stating that there are specific host Linux kernel requirement in the "3D acceleration" section as host Linux kernel requirements are specific to 3D acceleration. Regards, Akihiko Odaki > >> >>> + >>> +3D acceleration >>> +^^^^^^^^^^^^^^^ >>> + >>> +3D acceleration of a virtualized GPU is still an evolving field. >>> +Depending on the 3D mode you are running you may need to override >>> +distribution supplied libraries with more recent versions or enable >>> +build options. There are a number of requirements the host must meet >>> +to be able to be able to support guests. QEMU must be able to access the >>> +host's GPU and for the best performance be able to reliably share GPU >>> +memory with the guest. Details of 3D acceleration requirements are >>> +described in a further sections. >>> + >>> QEMU virtio-gpu variants >>> ------------------------ >>> @@ -65,8 +85,14 @@ intermediate representation is communicated to >>> the host and the >>> `virglrenderer`_ library on the host translates the intermediate >>> representation back to OpenGL API calls. >>> +By default OpenGL version on guest is limited to 4.3. In order to >>> enable >>> +OpenGL 4.6 support, virtio-gpu host blobs feature (``hostmem`` and ``blob`` >>> +fields) should be enabled. The ``hostmem`` field specifies the size of >>> +virtio-gpu host memory window. This is typically between 256M and 8G. >>> + >>> .. parsed-literal:: >>> -device virtio-gpu-gl >>> + -device virtio-gpu-gl,hostmem=8G,blob=true >>> .. _virgl: https://docs.mesa3d.org/drivers/virgl.html >>> .. _Gallium3D: https://www.freedesktop.org/wiki/Software/gallium/ >>> @@ -94,6 +120,62 @@ of virtio-gpu host memory window. This is typically between 256M and 8G. >>> .. _drm: >>> https://gitlab.freedesktop.org/virgl/virglrenderer/-/tree/main/src/drm >>> +.. list-table:: Linux Host Requirements >>> + :header-rows: 1 >>> + >>> + * - Capability >>> + - Kernel >>> + - virglrenderer build flags >>> + * - OpenGL pass-through >>> + - Any Linux version compatible with QEMU if not using host blobs feature, >>> + Linux 6.13+ otherwise >>> + - N/A >>> + * - Vulkan pass-through >>> + - Linux 6.13+ >>> + - -Dvenus=true -Drender-server=true >>> + * - AMDGPU DRM native context >>> + - Linux 6.13+ >>> + - -Ddrm-renderers=amdgpu-experimental >>> + * - Freedreno DRM native context >>> + - Linux 6.4+ >>> + - -Ddrm-renderers=msm >>> + * - Intel i915 DRM native context >>> + - Linux 6.13+ >>> + - -Ddrm-renderers=i915-experimental `mr1384`_ >>> + * - Asahi DRM native context >>> + - Downstream version of Asahi Linux kernel >>> + - -Ddrm-renderers=asahi-experimental `mr1274`_ >>> + >>> +.. _mr1384: https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1384 >>> +.. _mr1274: https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1274 >>> + >>> +.. list-table:: Linux Guest Requirements >>> + :header-rows: 1 >>> + >>> + * - Capability >>> + - Mesa Version >>> + - Mesa build flags >>> + * - OpenGL pass-through >>> + - 16.0.0+ >>> + - -Dgallium-drivers=virgl >>> + * - Vulkan pass-through >>> + - 24.2.0+ >>> + - -Dvulkan-drivers=virtio >>> + * - AMDGPU DRM native context >>> + - 25.0.0+ >>> + - -Dgallium-drivers=radeonsi -Dvulkan-drivers=amd -Damdgpu-virtio=true >>> + * - Freedreno DRM native context >>> + - 23.1.0+ >>> + - -Dgallium-drivers=freedreno -Dvulkan-drivers=freedreno >>> + * - Intel i915 DRM native context >>> + - `mr29870`_ >>> + - -Dgallium-drivers=iris -Dvulkan-drivers=intel -Dintel-virtio-experimental=true >>> + * - Asahi DRM native context >>> + - 24.2.0+ >>> + - -Dgallium-drivers=asahi -Dvulkan-drivers=asahi >>> + >>> +.. _mr29870: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29870 >>> + >>> virtio-gpu rutabaga >>> ------------------- >>> @@ -133,3 +215,23 @@ Surfaceless is the default if ``wsi`` is not >>> specified. >>> .. _Wayland display passthrough: https://www.youtube.com/watch?v=OZJiHMtIQ2M >>> .. _gfxstream-enabled rutabaga: https://crosvm.dev/book/appendix/rutabaga_gfx.html >>> .. _guest Wayland proxy: https://crosvm.dev/book/devices/wayland.html >>> + >>> +.. list-table:: Linux Host Requirements >>> + :header-rows: 1 >>> + >>> + * - Capability >>> + - Kernel >>> + - Rutabaga build flags >>> + * - Vulkan+Wayland pass-through >>> + - Linux 6.13+ >>> + - Follow `gfxstream-enabled rutabaga`_ build instructions >> >> It is odd that the column header says "build flags", and this cell >> says "Follow `gfxstream-enabled rutabaga`_ build instructions". >> >> I think you can simply remove this column. This section already says >> it leverages Rutabaga and the crosvm book provides build instructions. >> >> Regards, >> Akihiko Odaki >> >>> + >>> +.. list-table:: Linux Guest Requirements >>> + :header-rows: 1 >>> + >>> + * - Capability >>> + - Mesa Version >>> + - Mesa build flags >>> + * - Vulkan pass-through >>> + - 24.3.0+ >>> + - -Dvulkan-drivers=gfxstream >
On 2/13/25 07:47, Akihiko Odaki wrote: > On 2025/02/10 1:56, Dmitry Osipenko wrote: >> From: Alex Bennée <alex.bennee@linaro.org> >> >> This attempts to tidy up the VirtIO GPU documentation to make the list >> of requirements clearer. There are still a lot of moving parts and the >> distros have some catching up to do before this is all handled >> automatically. >> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> >> Cc: Sergio Lopez Pascual <slp@redhat.com> >> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> >> [dmitry.osipenko@collabora.com: Extended and corrected doc] >> --- >> docs/system/devices/virtio-gpu.rst | 106 ++++++++++++++++++++++++++++- >> 1 file changed, 104 insertions(+), 2 deletions(-) >> >> diff --git a/docs/system/devices/virtio-gpu.rst b/docs/system/devices/ >> virtio-gpu.rst >> index ea3eb052df3c..664fc4000fa9 100644 >> --- a/docs/system/devices/virtio-gpu.rst >> +++ b/docs/system/devices/virtio-gpu.rst >> @@ -5,14 +5,34 @@ virtio-gpu >> ========== >> This document explains the setup and usage of the virtio-gpu device. >> -The virtio-gpu device paravirtualizes the GPU and display controller. >> +The virtio-gpu device provides a GPU and display controller >> +paravirtualized using VirtIO. It supports a number of different modes >> +from simple 2D displays to fully accelerated 3D graphics. >> + >> +virtio-gpu requirements >> +----------------------- >> Linux kernel support >> --------------------- >> +^^^^^^^^^^^^^^^^^^^^ >> virtio-gpu requires a guest Linux kernel built with the >> ``CONFIG_DRM_VIRTIO_GPU`` option. >> +Host Linux kernel requirements vary depending on a used virtio-gpu >> +capabilities. See further sections for a detailed descriptions. > > The section for 3D acceleration follows so let's defer the description > for the host requirements to that section. > > Perhaps the section title may be changed to clarify that it only > describes the guest Linux kernel requirement to exclude the host Linux > kernel requirement as well as guest Mesa. Alright, think I now see what you meant in the comment to v7. >> +.. list-table:: Linux Host Requirements >> + :header-rows: 1 >> + >> + * - Capability >> + - Kernel >> + - Rutabaga build flags >> + * - Vulkan+Wayland pass-through >> + - Linux 6.13+ >> + - Follow `gfxstream-enabled rutabaga`_ build instructions > > It is odd that the column header says "build flags", and this cell says > "Follow `gfxstream-enabled rutabaga`_ build instructions". > > I think you can simply remove this column. This section already says it > leverages Rutabaga and the crosvm book provides build instructions. In the other reply you said that you're strongly opposed to adding any Mesa/virglrenderer build flags to the QEMU doc. I'm going to remove all build flags in v9. Please let me know if I misunderstood you and you're meaning something else.
diff --git a/docs/system/devices/virtio-gpu.rst b/docs/system/devices/virtio-gpu.rst index ea3eb052df3c..664fc4000fa9 100644 --- a/docs/system/devices/virtio-gpu.rst +++ b/docs/system/devices/virtio-gpu.rst @@ -5,14 +5,34 @@ virtio-gpu ========== This document explains the setup and usage of the virtio-gpu device. -The virtio-gpu device paravirtualizes the GPU and display controller. +The virtio-gpu device provides a GPU and display controller +paravirtualized using VirtIO. It supports a number of different modes +from simple 2D displays to fully accelerated 3D graphics. + +virtio-gpu requirements +----------------------- Linux kernel support --------------------- +^^^^^^^^^^^^^^^^^^^^ virtio-gpu requires a guest Linux kernel built with the ``CONFIG_DRM_VIRTIO_GPU`` option. +Host Linux kernel requirements vary depending on a used virtio-gpu +capabilities. See further sections for a detailed descriptions. + +3D acceleration +^^^^^^^^^^^^^^^ + +3D acceleration of a virtualized GPU is still an evolving field. +Depending on the 3D mode you are running you may need to override +distribution supplied libraries with more recent versions or enable +build options. There are a number of requirements the host must meet +to be able to be able to support guests. QEMU must be able to access the +host's GPU and for the best performance be able to reliably share GPU +memory with the guest. Details of 3D acceleration requirements are +described in a further sections. + QEMU virtio-gpu variants ------------------------ @@ -65,8 +85,14 @@ intermediate representation is communicated to the host and the `virglrenderer`_ library on the host translates the intermediate representation back to OpenGL API calls. +By default OpenGL version on guest is limited to 4.3. In order to enable +OpenGL 4.6 support, virtio-gpu host blobs feature (``hostmem`` and ``blob`` +fields) should be enabled. The ``hostmem`` field specifies the size of +virtio-gpu host memory window. This is typically between 256M and 8G. + .. parsed-literal:: -device virtio-gpu-gl + -device virtio-gpu-gl,hostmem=8G,blob=true .. _virgl: https://docs.mesa3d.org/drivers/virgl.html .. _Gallium3D: https://www.freedesktop.org/wiki/Software/gallium/ @@ -94,6 +120,62 @@ of virtio-gpu host memory window. This is typically between 256M and 8G. .. _drm: https://gitlab.freedesktop.org/virgl/virglrenderer/-/tree/main/src/drm +.. list-table:: Linux Host Requirements + :header-rows: 1 + + * - Capability + - Kernel + - virglrenderer build flags + * - OpenGL pass-through + - Any Linux version compatible with QEMU if not using host blobs feature, + Linux 6.13+ otherwise + - N/A + * - Vulkan pass-through + - Linux 6.13+ + - -Dvenus=true -Drender-server=true + * - AMDGPU DRM native context + - Linux 6.13+ + - -Ddrm-renderers=amdgpu-experimental + * - Freedreno DRM native context + - Linux 6.4+ + - -Ddrm-renderers=msm + * - Intel i915 DRM native context + - Linux 6.13+ + - -Ddrm-renderers=i915-experimental `mr1384`_ + * - Asahi DRM native context + - Downstream version of Asahi Linux kernel + - -Ddrm-renderers=asahi-experimental `mr1274`_ + +.. _mr1384: https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1384 +.. _mr1274: https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1274 + +.. list-table:: Linux Guest Requirements + :header-rows: 1 + + * - Capability + - Mesa Version + - Mesa build flags + * - OpenGL pass-through + - 16.0.0+ + - -Dgallium-drivers=virgl + * - Vulkan pass-through + - 24.2.0+ + - -Dvulkan-drivers=virtio + * - AMDGPU DRM native context + - 25.0.0+ + - -Dgallium-drivers=radeonsi -Dvulkan-drivers=amd -Damdgpu-virtio=true + * - Freedreno DRM native context + - 23.1.0+ + - -Dgallium-drivers=freedreno -Dvulkan-drivers=freedreno + * - Intel i915 DRM native context + - `mr29870`_ + - -Dgallium-drivers=iris -Dvulkan-drivers=intel -Dintel-virtio-experimental=true + * - Asahi DRM native context + - 24.2.0+ + - -Dgallium-drivers=asahi -Dvulkan-drivers=asahi + +.. _mr29870: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29870 + virtio-gpu rutabaga ------------------- @@ -133,3 +215,23 @@ Surfaceless is the default if ``wsi`` is not specified. .. _Wayland display passthrough: https://www.youtube.com/watch?v=OZJiHMtIQ2M .. _gfxstream-enabled rutabaga: https://crosvm.dev/book/appendix/rutabaga_gfx.html .. _guest Wayland proxy: https://crosvm.dev/book/devices/wayland.html + +.. list-table:: Linux Host Requirements + :header-rows: 1 + + * - Capability + - Kernel + - Rutabaga build flags + * - Vulkan+Wayland pass-through + - Linux 6.13+ + - Follow `gfxstream-enabled rutabaga`_ build instructions + +.. list-table:: Linux Guest Requirements + :header-rows: 1 + + * - Capability + - Mesa Version + - Mesa build flags + * - Vulkan pass-through + - 24.3.0+ + - -Dvulkan-drivers=gfxstream