Message ID | 20230831093252.2461282-12-ray.huang@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support blob memory and venus on qemu | expand |
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
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 {