All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gurchetan Singh <gurchetansingh@chromium.org>
To: dri-devel@lists.freedesktop.org
Cc: kraxel@redhat.com
Subject: [PATCH v4 05/19] drm/virtgpu api: blob resources
Date: Wed, 23 Sep 2020 17:32:00 -0700	[thread overview]
Message-ID: <20200924003214.662-5-gurchetansingh@chromium.org> (raw)
In-Reply-To: <20200924003214.662-1-gurchetansingh@chromium.org>

This makes blob resources available to guest userspace. They are needed
for GL4.5, Vulkan and zero-copy virtio-gpu.

For Mesa, blob resources have been tested with Piglit's ARB_buffer_storage
tests and apitraces.  Apitraces of GL4.5 games show we're between 70%
to 80% of host performance on Iris, based on a apitrace of a 2013 GL4.5
game:

11.204 FPS (guest)
15.947 FPS (host)

This is still better than the status quo, when said game was unplayable
with Virgl due to an inefficient GL4.3 fallback.  But there's still room
for improvement if we want to match HW-assisted virtualization.

For Vulkan, blob resources have been tested with dEQP.vk.memory* and
running Vulkan applications in production with the "Cuttlefish" virtual
Android device.  This has been done with Lingfeng Yang's "gfxstream"
Vulkan implementation, which virtualizes Vulkan across many Google
products.

Signed-off-by: Gurchetan Singh <gurchetansingh@chromium.org>
Acked-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Acked-by: Chia-I Wu <olvaffe@gmail.com>
Acked-by: Lingfeng Yang <lfy@google.com>
Link: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4821
Link: https://android-review.googlesource.com/c/device/generic/goldfish-opengl/+/1283761
---
 include/uapi/drm/virtgpu_drm.h | 37 +++++++++++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/include/uapi/drm/virtgpu_drm.h b/include/uapi/drm/virtgpu_drm.h
index f06a789f34cd9..bb224f604c9e3 100644
--- a/include/uapi/drm/virtgpu_drm.h
+++ b/include/uapi/drm/virtgpu_drm.h
@@ -46,6 +46,7 @@ extern "C" {
 #define DRM_VIRTGPU_TRANSFER_TO_HOST 0x07
 #define DRM_VIRTGPU_WAIT     0x08
 #define DRM_VIRTGPU_GET_CAPS  0x09
+#define DRM_VIRTGPU_RESOURCE_CREATE_BLOB 0x0a
 
 #define VIRTGPU_EXECBUF_FENCE_FD_IN	0x01
 #define VIRTGPU_EXECBUF_FENCE_FD_OUT	0x02
@@ -71,6 +72,7 @@ struct drm_virtgpu_execbuffer {
 
 #define VIRTGPU_PARAM_3D_FEATURES 1 /* do we have 3D features in the hw */
 #define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2 /* do we have the capset fix */
+#define VIRTGPU_PARAM_RESOURCE_BLOB 3 /* DRM_VIRTGPU_RESOURCE_CREATE_BLOB */
 
 struct drm_virtgpu_getparam {
 	__u64 param;
@@ -100,7 +102,7 @@ struct drm_virtgpu_resource_info {
 	__u32 bo_handle;
 	__u32 res_handle;
 	__u32 size;
-	__u32 stride;
+	__u32 blob_mem;
 };
 
 struct drm_virtgpu_3d_box {
@@ -117,6 +119,8 @@ struct drm_virtgpu_3d_transfer_to_host {
 	struct drm_virtgpu_3d_box box;
 	__u32 level;
 	__u32 offset;
+	__u32 stride;
+	__u32 layer_stride;
 };
 
 struct drm_virtgpu_3d_transfer_from_host {
@@ -124,6 +128,8 @@ struct drm_virtgpu_3d_transfer_from_host {
 	struct drm_virtgpu_3d_box box;
 	__u32 level;
 	__u32 offset;
+	__u32 stride;
+	__u32 layer_stride;
 };
 
 #define VIRTGPU_WAIT_NOWAIT 1 /* like it */
@@ -140,6 +146,31 @@ struct drm_virtgpu_get_caps {
 	__u32 pad;
 };
 
+struct drm_virtgpu_resource_create_blob {
+#define VIRTGPU_BLOB_MEM_GUEST             0x0001
+#define VIRTGPU_BLOB_MEM_HOST3D            0x0002
+#define VIRTGPU_BLOB_MEM_HOST3D_GUEST      0x0003
+
+#define VIRTGPU_BLOB_FLAG_USE_MAPPABLE     0x0001
+#define VIRTGPU_BLOB_FLAG_USE_SHAREABLE    0x0002
+#define VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
+	/* zero is invalid blob_mem */
+	__u32 blob_mem;
+	__u32 blob_flags;
+	__u32 bo_handle;
+	__u32 res_handle;
+	__u64 size;
+
+	/*
+	 * for 3D contexts with VIRTGPU_BLOB_MEM_HOST3D_GUEST and
+	 * VIRTGPU_BLOB_MEM_HOST3D otherwise, must be zero.
+	 */
+	__u32 pad;
+	__u32 cmd_size;
+	__u64 cmd;
+	__u64 blob_id;
+};
+
 #define DRM_IOCTL_VIRTGPU_MAP \
 	DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map)
 
@@ -175,6 +206,10 @@ struct drm_virtgpu_get_caps {
 	DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \
 	struct drm_virtgpu_get_caps)
 
+#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB				\
+	DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE_BLOB,	\
+		struct drm_virtgpu_resource_create_blob)
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.26.2

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

  parent reply	other threads:[~2020-09-24  0:32 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-24  0:31 [PATCH v4 01/19] drm/virtio: blob prep: refactor getting pages and attaching backing Gurchetan Singh
2020-09-24  0:31 ` [PATCH v4 02/19] drm/virtio: blob prep: make CPU responses more generic Gurchetan Singh
2020-09-24  0:31 ` [PATCH v4 03/19] virtio-gpu api: blob resources Gurchetan Singh
2020-09-24  0:31 ` [PATCH v4 04/19] virtio-gpu api: host visible feature Gurchetan Singh
2020-09-24  0:32 ` Gurchetan Singh [this message]
2020-09-24  0:32 ` [PATCH v4 06/19] drm/virtgpu " Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 07/19] drm/virtgpu api: cross-device feature Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 08/19] drm/virtio: implement blob resources: probe for the feature Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 09/19] drm/virtio: implement blob resources: probe for host visible region Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 10/19] drm/virtio: implement blob resources: expose virtio_gpu_resource_id_get Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 11/19] drm/virtio: implement blob resources: add new fields to internal structs Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 12/19] drm/virtio: implement blob resources: implement vram object Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 13/19] drm/virtio: implement blob resources: hypercall interface Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 14/19] drm/virtio: implement blob resources: blob display integration Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 15/19] drm/virtio: implement blob resources: refactor UUID code somewhat Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 16/19] drm/virtio: implement blob resources: fix stride discrepancy Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 17/19] drm/virtio: implement blob resources: report blob mem to userspace Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 18/19] drm/virtio: implement blob resources: resource create blob ioctl Gurchetan Singh
2020-09-24  0:32 ` [PATCH v4 19/19] drm/virtio: advertise features to userspace Gurchetan Singh
2020-09-29  9:32 ` [PATCH v4 01/19] drm/virtio: blob prep: refactor getting pages and attaching backing Gerd Hoffmann
2020-09-29 21:56   ` Gurchetan Singh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200924003214.662-5-gurchetansingh@chromium.org \
    --to=gurchetansingh@chromium.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=kraxel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.