mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
virtio-gpu: Register capsets dynamically
virtio_gpu_virgl_get_num_capsets will return "num_capsets", but we can't assume that capset_index 1 is always VIRGL2 once we'll support more capsets, like Venus and DRM capsets. Register capsets dynamically to avoid that problem. Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Message-Id: <20241024210311.118220-13-dmitry.osipenko@collabora.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
parent
7c092f17cc
commit
1333fd0693
3 changed files with 28 additions and 15 deletions
|
@ -622,19 +622,13 @@ static void virgl_cmd_get_capset_info(VirtIOGPU *g,
|
|||
VIRTIO_GPU_FILL_CMD(info);
|
||||
|
||||
memset(&resp, 0, sizeof(resp));
|
||||
if (info.capset_index == 0) {
|
||||
resp.capset_id = VIRTIO_GPU_CAPSET_VIRGL;
|
||||
|
||||
if (info.capset_index < g->capset_ids->len) {
|
||||
resp.capset_id = g_array_index(g->capset_ids, uint32_t,
|
||||
info.capset_index);
|
||||
virgl_renderer_get_cap_set(resp.capset_id,
|
||||
&resp.capset_max_version,
|
||||
&resp.capset_max_size);
|
||||
} else if (info.capset_index == 1) {
|
||||
resp.capset_id = VIRTIO_GPU_CAPSET_VIRGL2;
|
||||
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;
|
||||
}
|
||||
resp.hdr.type = VIRTIO_GPU_RESP_OK_CAPSET_INFO;
|
||||
virtio_gpu_ctrl_response(g, cmd, &resp.hdr, sizeof(resp));
|
||||
|
@ -1160,12 +1154,27 @@ int virtio_gpu_virgl_init(VirtIOGPU *g)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int virtio_gpu_virgl_get_num_capsets(VirtIOGPU *g)
|
||||
static void virtio_gpu_virgl_add_capset(GArray *capset_ids, uint32_t capset_id)
|
||||
{
|
||||
g_array_append_val(capset_ids, capset_id);
|
||||
}
|
||||
|
||||
GArray *virtio_gpu_virgl_get_capsets(VirtIOGPU *g)
|
||||
{
|
||||
uint32_t capset2_max_ver, capset2_max_size;
|
||||
GArray *capset_ids;
|
||||
|
||||
capset_ids = g_array_new(false, false, sizeof(uint32_t));
|
||||
|
||||
/* VIRGL is always supported. */
|
||||
virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_VIRGL);
|
||||
|
||||
virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VIRGL2,
|
||||
&capset2_max_ver,
|
||||
&capset2_max_size);
|
||||
if (capset2_max_ver) {
|
||||
virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_VIRGL2);
|
||||
}
|
||||
|
||||
return capset2_max_ver ? 2 : 1;
|
||||
return capset_ids;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue