SCANOUT_BLOB forwards the DRM framebuffer metadata to the host. The
modifier is intentionally left out -- it may be possible to query
the host for that.

We also assume one blob resource per DRM framebuffer.  That too is
an intentional simplification.

Signed-off-by: Gurchetan Singh <gurchetansi...@chromium.org>
Acked-by: Tomeu Vizoso <tomeu.viz...@collabora.com>
---
 drivers/gpu/drm/virtio/virtgpu_plane.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c 
b/drivers/gpu/drm/virtio/virtgpu_plane.c
index 52d24179bcec..1e0754e77723 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -172,12 +172,23 @@ static void virtio_gpu_primary_plane_update(struct 
drm_plane *plane,
                          plane->state->src_h >> 16,
                          plane->state->src_x >> 16,
                          plane->state->src_y >> 16);
-               virtio_gpu_cmd_set_scanout(vgdev, output->index,
-                                          bo->hw_res_handle,
-                                          plane->state->src_w >> 16,
-                                          plane->state->src_h >> 16,
-                                          plane->state->src_x >> 16,
-                                          plane->state->src_y >> 16);
+
+               if (bo->host3d_blob || bo->guest_blob) {
+                       virtio_gpu_cmd_set_scanout_blob(
+                                               vgdev, output->index, bo,
+                                               plane->state->fb,
+                                               plane->state->src_w >> 16,
+                                               plane->state->src_h >> 16,
+                                               plane->state->src_x >> 16,
+                                               plane->state->src_y >> 16);
+               } else {
+                       virtio_gpu_cmd_set_scanout(vgdev, output->index,
+                                                  bo->hw_res_handle,
+                                                  plane->state->src_w >> 16,
+                                                  plane->state->src_h >> 16,
+                                                  plane->state->src_x >> 16,
+                                                  plane->state->src_y >> 16);
+               }
        }
 
        virtio_gpu_cmd_resource_flush(vgdev, bo->hw_res_handle,
-- 
2.24.1

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

Reply via email to