From: Antonio Caggiano <antonio.caggiano@collabora.com>
Add support for the Venus capset, which enables Vulkan support through
the Venus Vulkan driver for virtio-gpu.
Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com>
Signed-off-by: Huang Rui <ray.huang@amd.com>
---
hw/display/virtio-gpu-virgl.c | 21 +++++++++++++++++----
include/standard-headers/linux/virtio_gpu.h | 2 ++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
index 1a996a08fc..83cd8c8fd0 100644
--- a/hw/display/virtio-gpu-virgl.c
+++ b/hw/display/virtio-gpu-virgl.c
@@ -437,6 +437,11 @@ static void virgl_cmd_get_capset_info(VirtIOGPU *g,
virgl_renderer_get_cap_set(resp.capset_id,
&resp.capset_max_version,
&resp.capset_max_size);
+ } else if (info.capset_index == 2) {
+ resp.capset_id = VIRTIO_GPU_CAPSET_VENUS;
+ virgl_renderer_get_cap_set(resp.capset_id,
+ &resp.capset_max_version,
+ &resp.capset_max_size);
} else {
resp.capset_max_version = 0;
resp.capset_max_size = 0;
@@ -901,10 +906,18 @@ int virtio_gpu_virgl_init(VirtIOGPU *g)
int virtio_gpu_virgl_get_num_capsets(VirtIOGPU *g)
{
- uint32_t capset2_max_ver, capset2_max_size;
+ uint32_t capset2_max_ver, capset2_max_size, num_capsets;
+ num_capsets = 1;
+
virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VIRGL2,
- &capset2_max_ver,
- &capset2_max_size);
+ &capset2_max_ver,
+ &capset2_max_size);
+ num_capsets += capset2_max_ver ? 1 : 0;
+
+ virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VENUS,
+ &capset2_max_ver,
+ &capset2_max_size);
+ num_capsets += capset2_max_size ? 1 : 0;
- return capset2_max_ver ? 2 : 1;
+ return num_capsets;
}
diff --git a/include/standard-headers/linux/virtio_gpu.h b/include/standard-headers/linux/virtio_gpu.h
index 2da48d3d4c..2db643ed8f 100644
--- a/include/standard-headers/linux/virtio_gpu.h
+++ b/include/standard-headers/linux/virtio_gpu.h
@@ -309,6 +309,8 @@ struct virtio_gpu_cmd_submit {
#define VIRTIO_GPU_CAPSET_VIRGL 1
#define VIRTIO_GPU_CAPSET_VIRGL2 2
+/* 3 is reserved for gfxstream */
+#define VIRTIO_GPU_CAPSET_VENUS 4
/* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
struct virtio_gpu_get_capset_info {
--
2.34.1
On 2023/08/31 18:32, Huang Rui wrote:
> From: Antonio Caggiano <antonio.caggiano@collabora.com>
>
> Add support for the Venus capset, which enables Vulkan support through
> the Venus Vulkan driver for virtio-gpu.
>
> Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com>
> Signed-off-by: Huang Rui <ray.huang@amd.com>
> ---
> hw/display/virtio-gpu-virgl.c | 21 +++++++++++++++++----
> include/standard-headers/linux/virtio_gpu.h | 2 ++
> 2 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
> index 1a996a08fc..83cd8c8fd0 100644
> --- a/hw/display/virtio-gpu-virgl.c
> +++ b/hw/display/virtio-gpu-virgl.c
> @@ -437,6 +437,11 @@ static void virgl_cmd_get_capset_info(VirtIOGPU *g,
> virgl_renderer_get_cap_set(resp.capset_id,
> &resp.capset_max_version,
> &resp.capset_max_size);
> + } else if (info.capset_index == 2) {
> + resp.capset_id = VIRTIO_GPU_CAPSET_VENUS;
> + virgl_renderer_get_cap_set(resp.capset_id,
> + &resp.capset_max_version,
> + &resp.capset_max_size);
> } else {
> resp.capset_max_version = 0;
> resp.capset_max_size = 0;
> @@ -901,10 +906,18 @@ int virtio_gpu_virgl_init(VirtIOGPU *g)
>
> int virtio_gpu_virgl_get_num_capsets(VirtIOGPU *g)
> {
> - uint32_t capset2_max_ver, capset2_max_size;
> + uint32_t capset2_max_ver, capset2_max_size, num_capsets;
> + num_capsets = 1;
> +
> virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VIRGL2,
> - &capset2_max_ver,
> - &capset2_max_size);
> + &capset2_max_ver,
> + &capset2_max_size);
> + num_capsets += capset2_max_ver ? 1 : 0;
> +
> + virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VENUS,
> + &capset2_max_ver,
> + &capset2_max_size);
> + num_capsets += capset2_max_size ? 1 : 0;
>
> - return capset2_max_ver ? 2 : 1;
> + return num_capsets;
> }
> diff --git a/include/standard-headers/linux/virtio_gpu.h b/include/standard-headers/linux/virtio_gpu.h
> index 2da48d3d4c..2db643ed8f 100644
> --- a/include/standard-headers/linux/virtio_gpu.h
> +++ b/include/standard-headers/linux/virtio_gpu.h
> @@ -309,6 +309,8 @@ struct virtio_gpu_cmd_submit {
>
> #define VIRTIO_GPU_CAPSET_VIRGL 1
> #define VIRTIO_GPU_CAPSET_VIRGL2 2
> +/* 3 is reserved for gfxstream */
> +#define VIRTIO_GPU_CAPSET_VENUS 4
This file is synced with scripts/update-linux-headers.sh and should not
be modified.
>
> /* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
> struct virtio_gpu_get_capset_info {
On Thu, Aug 31, 2023 at 06:43:17PM +0800, Akihiko Odaki wrote:
> On 2023/08/31 18:32, Huang Rui wrote:
> > From: Antonio Caggiano <antonio.caggiano@collabora.com>
> >
> > Add support for the Venus capset, which enables Vulkan support through
> > the Venus Vulkan driver for virtio-gpu.
> >
> > Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com>
> > Signed-off-by: Huang Rui <ray.huang@amd.com>
> > ---
> > hw/display/virtio-gpu-virgl.c | 21 +++++++++++++++++----
> > include/standard-headers/linux/virtio_gpu.h | 2 ++
> > 2 files changed, 19 insertions(+), 4 deletions(-)
> >
> > diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
> > index 1a996a08fc..83cd8c8fd0 100644
> > --- a/hw/display/virtio-gpu-virgl.c
> > +++ b/hw/display/virtio-gpu-virgl.c
> > @@ -437,6 +437,11 @@ static void virgl_cmd_get_capset_info(VirtIOGPU *g,
> > virgl_renderer_get_cap_set(resp.capset_id,
> > &resp.capset_max_version,
> > &resp.capset_max_size);
> > + } else if (info.capset_index == 2) {
> > + resp.capset_id = VIRTIO_GPU_CAPSET_VENUS;
> > + virgl_renderer_get_cap_set(resp.capset_id,
> > + &resp.capset_max_version,
> > + &resp.capset_max_size);
> > } else {
> > resp.capset_max_version = 0;
> > resp.capset_max_size = 0;
> > @@ -901,10 +906,18 @@ int virtio_gpu_virgl_init(VirtIOGPU *g)
> >
> > int virtio_gpu_virgl_get_num_capsets(VirtIOGPU *g)
> > {
> > - uint32_t capset2_max_ver, capset2_max_size;
> > + uint32_t capset2_max_ver, capset2_max_size, num_capsets;
> > + num_capsets = 1;
> > +
> > virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VIRGL2,
> > - &capset2_max_ver,
> > - &capset2_max_size);
> > + &capset2_max_ver,
> > + &capset2_max_size);
> > + num_capsets += capset2_max_ver ? 1 : 0;
> > +
> > + virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VENUS,
> > + &capset2_max_ver,
> > + &capset2_max_size);
> > + num_capsets += capset2_max_size ? 1 : 0;
> >
> > - return capset2_max_ver ? 2 : 1;
> > + return num_capsets;
> > }
> > diff --git a/include/standard-headers/linux/virtio_gpu.h b/include/standard-headers/linux/virtio_gpu.h
> > index 2da48d3d4c..2db643ed8f 100644
> > --- a/include/standard-headers/linux/virtio_gpu.h
> > +++ b/include/standard-headers/linux/virtio_gpu.h
> > @@ -309,6 +309,8 @@ struct virtio_gpu_cmd_submit {
> >
> > #define VIRTIO_GPU_CAPSET_VIRGL 1
> > #define VIRTIO_GPU_CAPSET_VIRGL2 2
> > +/* 3 is reserved for gfxstream */
> > +#define VIRTIO_GPU_CAPSET_VENUS 4
>
> This file is synced with scripts/update-linux-headers.sh and should not
> be modified.
Should I add marco in kernel include/uapi/linux/virtio_gpu.h?
They are used at VIRGL_RENDERER_UNSTABLE_APIS in virglrender.
enum virgl_renderer_capset {
VIRGL_RENDERER_CAPSET_VIRGL = 1,
VIRGL_RENDERER_CAPSET_VIRGL2 = 2,
/* 3 is reserved for gfxstream */
VIRGL_RENDERER_CAPSET_VENUS = 4,
/* 5 is reserved for cross-domain */
VIRGL_RENDERER_CAPSET_DRM = 6,
};
Thanks,
Ray
>
> >
> > /* VIRTIO_GPU_CMD_GET_CAPSET_INFO */
> > struct virtio_gpu_get_capset_info {
On 2023/09/09 18:29, Huang Rui wrote:
> On Thu, Aug 31, 2023 at 06:43:17PM +0800, Akihiko Odaki wrote:
>> On 2023/08/31 18:32, Huang Rui wrote:
>>> From: Antonio Caggiano <antonio.caggiano@collabora.com>
>>>
>>> Add support for the Venus capset, which enables Vulkan support through
>>> the Venus Vulkan driver for virtio-gpu.
>>>
>>> Signed-off-by: Antonio Caggiano <antonio.caggiano@collabora.com>
>>> Signed-off-by: Huang Rui <ray.huang@amd.com>
>>> ---
>>> hw/display/virtio-gpu-virgl.c | 21 +++++++++++++++++----
>>> include/standard-headers/linux/virtio_gpu.h | 2 ++
>>> 2 files changed, 19 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c
>>> index 1a996a08fc..83cd8c8fd0 100644
>>> --- a/hw/display/virtio-gpu-virgl.c
>>> +++ b/hw/display/virtio-gpu-virgl.c
>>> @@ -437,6 +437,11 @@ static void virgl_cmd_get_capset_info(VirtIOGPU *g,
>>> virgl_renderer_get_cap_set(resp.capset_id,
>>> &resp.capset_max_version,
>>> &resp.capset_max_size);
>>> + } else if (info.capset_index == 2) {
>>> + resp.capset_id = VIRTIO_GPU_CAPSET_VENUS;
>>> + virgl_renderer_get_cap_set(resp.capset_id,
>>> + &resp.capset_max_version,
>>> + &resp.capset_max_size);
>>> } else {
>>> resp.capset_max_version = 0;
>>> resp.capset_max_size = 0;
>>> @@ -901,10 +906,18 @@ int virtio_gpu_virgl_init(VirtIOGPU *g)
>>>
>>> int virtio_gpu_virgl_get_num_capsets(VirtIOGPU *g)
>>> {
>>> - uint32_t capset2_max_ver, capset2_max_size;
>>> + uint32_t capset2_max_ver, capset2_max_size, num_capsets;
>>> + num_capsets = 1;
>>> +
>>> virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VIRGL2,
>>> - &capset2_max_ver,
>>> - &capset2_max_size);
>>> + &capset2_max_ver,
>>> + &capset2_max_size);
>>> + num_capsets += capset2_max_ver ? 1 : 0;
>>> +
>>> + virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VENUS,
>>> + &capset2_max_ver,
>>> + &capset2_max_size);
>>> + num_capsets += capset2_max_size ? 1 : 0;
>>>
>>> - return capset2_max_ver ? 2 : 1;
>>> + return num_capsets;
>>> }
>>> diff --git a/include/standard-headers/linux/virtio_gpu.h b/include/standard-headers/linux/virtio_gpu.h
>>> index 2da48d3d4c..2db643ed8f 100644
>>> --- a/include/standard-headers/linux/virtio_gpu.h
>>> +++ b/include/standard-headers/linux/virtio_gpu.h
>>> @@ -309,6 +309,8 @@ struct virtio_gpu_cmd_submit {
>>>
>>> #define VIRTIO_GPU_CAPSET_VIRGL 1
>>> #define VIRTIO_GPU_CAPSET_VIRGL2 2
>>> +/* 3 is reserved for gfxstream */
>>> +#define VIRTIO_GPU_CAPSET_VENUS 4
>>
>> This file is synced with scripts/update-linux-headers.sh and should not
>> be modified.
>
> Should I add marco in kernel include/uapi/linux/virtio_gpu.h?
Yes, I think so.
Regards,
Akihiko Odaki
© 2016 - 2026 Red Hat, Inc.