Mark readonly blobs available when the ROCm capset is present, and advertise the feature only for ROCm devices with blob support enabled. Treat readonly registration support as part of the paired ROCm backend.
Signed-off-by: Honglei Huang <[email protected]> --- hw/display/virtio-gpu-base.c | 4 ++++ hw/display/virtio-gpu-virgl.c | 3 +++ include/hw/virtio/virtio-gpu.h | 3 +++ 3 files changed, 10 insertions(+) diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c index 270fbaae102..b6333e67c0f 100644 --- a/hw/display/virtio-gpu-base.c +++ b/hw/display/virtio-gpu-base.c @@ -269,6 +269,10 @@ virtio_gpu_base_get_features(VirtIODevice *vdev, uint64_t features, } if (virtio_gpu_blob_enabled(g->conf)) { features |= (1 << VIRTIO_GPU_F_RESOURCE_BLOB); + if (virtio_gpu_rocm_enabled(g->conf) && + virtio_gpu_blob_readonly_enabled(g->conf)) { + features |= (1 << VIRTIO_GPU_F_BLOB_READONLY); + } } if (virtio_gpu_context_init_enabled(g->conf)) { features |= (1 << VIRTIO_GPU_F_CONTEXT_INIT); diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c index f3512337d05..87ee7ac57c4 100644 --- a/hw/display/virtio-gpu-virgl.c +++ b/hw/display/virtio-gpu-virgl.c @@ -1593,6 +1593,7 @@ GArray *virtio_gpu_virgl_get_capsets(VirtIOGPU *g) uint32_t capset_max_ver, capset_max_size; GArray *capset_ids; + g->parent_obj.conf.flags &= ~(1 << VIRTIO_GPU_FLAG_BLOB_READONLY_ENABLED); capset_ids = g_array_new(false, false, sizeof(uint32_t)); /* VIRGL is always supported. */ @@ -1629,6 +1630,8 @@ GArray *virtio_gpu_virgl_get_capsets(VirtIOGPU *g) &capset_max_size); if (capset_max_size) { virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_ROCM); + g->parent_obj.conf.flags |= + 1 << VIRTIO_GPU_FLAG_BLOB_READONLY_ENABLED; } } diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index 3c5119ce0e4..dacf70b41a6 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -113,6 +113,7 @@ enum virtio_gpu_base_conf_flags { VIRTIO_GPU_FLAG_RESOURCE_UUID_ENABLED, VIRTIO_GPU_FLAG_DRM_ENABLED, VIRTIO_GPU_FLAG_ROCM_ENABLED, + VIRTIO_GPU_FLAG_BLOB_READONLY_ENABLED, }; #define virtio_gpu_virgl_enabled(_cfg) \ @@ -139,6 +140,8 @@ enum virtio_gpu_base_conf_flags { (_cfg.flags & (1 << VIRTIO_GPU_FLAG_DRM_ENABLED)) #define virtio_gpu_rocm_enabled(_cfg) \ (_cfg.flags & (1 << VIRTIO_GPU_FLAG_ROCM_ENABLED)) +#define virtio_gpu_blob_readonly_enabled(_cfg) \ + (_cfg.flags & (1 << VIRTIO_GPU_FLAG_BLOB_READONLY_ENABLED)) struct virtio_gpu_base_conf { uint32_t max_outputs; -- 2.34.1
