If support for Blob resources is available, then dumb BOs created
by the driver can be considered as guest Blobs.

v2: Don't skip transfer and flush commands as part of plane update
as the device may have created a shared mapping. (Gerd)

v3: Don't create dumb BOs as Guest blobs if Virgl is enabled. (Gurchetan)

Cc: Gerd Hoffmann <kra...@redhat.com>
Signed-off-by: Vivek Kasireddy <vivek.kasire...@intel.com>
---
 drivers/gpu/drm/virtio/virtgpu_gem.c    | 8 ++++++++
 drivers/gpu/drm/virtio/virtgpu_object.c | 3 +++
 2 files changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c 
b/drivers/gpu/drm/virtio/virtgpu_gem.c
index 8502400b2f9c..2de61b63ef91 100644
--- a/drivers/gpu/drm/virtio/virtgpu_gem.c
+++ b/drivers/gpu/drm/virtio/virtgpu_gem.c
@@ -64,6 +64,7 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
 {
        struct drm_gem_object *gobj;
        struct virtio_gpu_object_params params = { 0 };
+       struct virtio_gpu_device *vgdev = dev->dev_private;
        int ret;
        uint32_t pitch;
 
@@ -79,6 +80,13 @@ int virtio_gpu_mode_dumb_create(struct drm_file *file_priv,
        params.height = args->height;
        params.size = args->size;
        params.dumb = true;
+
+       if (vgdev->has_resource_blob && !vgdev->has_virgl_3d) {
+               params.blob_mem = VIRTGPU_BLOB_MEM_GUEST;
+               params.blob_flags = VIRTGPU_BLOB_FLAG_USE_SHAREABLE;
+               params.blob = true;
+       }
+
        ret = virtio_gpu_gem_create(file_priv, dev, &params, &gobj,
                                    &args->handle);
        if (ret)
diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c 
b/drivers/gpu/drm/virtio/virtgpu_object.c
index 4ff1ec28e630..f648b0e24447 100644
--- a/drivers/gpu/drm/virtio/virtgpu_object.c
+++ b/drivers/gpu/drm/virtio/virtgpu_object.c
@@ -254,6 +254,9 @@ int virtio_gpu_object_create(struct virtio_gpu_device 
*vgdev,
        }
 
        if (params->blob) {
+               if (params->blob_mem == VIRTGPU_BLOB_MEM_GUEST)
+                       bo->guest_blob = true;
+
                virtio_gpu_cmd_resource_create_blob(vgdev, bo, params,
                                                    ents, nents);
        } else if (params->virgl) {
-- 
2.26.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to