Commit 34268c9d authored by Gurchetan Singh's avatar Gurchetan Singh Committed by Gerd Hoffmann

virtio-gpu api: multiple context types with explicit initialization

This feature allows for each virtio-gpu 3D context to be created
with a "context_init" variable.  This variable can specify:

 - the type of protocol used by the context via the capset id.
   This is useful for differentiating virgl, gfxstream, and venus
   protocols by host userspace.

 - other things in the future, such as the version of the context.

In addition, each different context needs one or more timelines, so
for example a virgl context's waiting can be independent on a
gfxstream context's waiting.

VIRTIO_GPU_FLAG_INFO_RING_IDX is introduced to specific to tell the
host which per-context command ring (or "hardware queue", distinct
from the virtio-queue) the fence should be associated with.

The new capability sets (gfxstream, venus etc.) are only defined in
the virtio-gpu spec and not defined in the header.
Signed-off-by: default avatarGurchetan Singh <gurchetansingh@chromium.org>
Acked-by: default avatarLingfeng Yang <lfy@google.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20210921232024.817-2-gurchetansingh@chromium.orgSigned-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
parent 93ee1a2c
...@@ -59,6 +59,11 @@ ...@@ -59,6 +59,11 @@
* VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB * VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB
*/ */
#define VIRTIO_GPU_F_RESOURCE_BLOB 3 #define VIRTIO_GPU_F_RESOURCE_BLOB 3
/*
* VIRTIO_GPU_CMD_CREATE_CONTEXT with
* context_init and multiple timelines
*/
#define VIRTIO_GPU_F_CONTEXT_INIT 4
enum virtio_gpu_ctrl_type { enum virtio_gpu_ctrl_type {
VIRTIO_GPU_UNDEFINED = 0, VIRTIO_GPU_UNDEFINED = 0,
...@@ -122,14 +127,20 @@ enum virtio_gpu_shm_id { ...@@ -122,14 +127,20 @@ enum virtio_gpu_shm_id {
VIRTIO_GPU_SHM_ID_HOST_VISIBLE = 1 VIRTIO_GPU_SHM_ID_HOST_VISIBLE = 1
}; };
#define VIRTIO_GPU_FLAG_FENCE (1 << 0) #define VIRTIO_GPU_FLAG_FENCE (1 << 0)
/*
* If the following flag is set, then ring_idx contains the index
* of the command ring that needs to used when creating the fence
*/
#define VIRTIO_GPU_FLAG_INFO_RING_IDX (1 << 1)
struct virtio_gpu_ctrl_hdr { struct virtio_gpu_ctrl_hdr {
__le32 type; __le32 type;
__le32 flags; __le32 flags;
__le64 fence_id; __le64 fence_id;
__le32 ctx_id; __le32 ctx_id;
__le32 padding; __u8 ring_idx;
__u8 padding[3];
}; };
/* data passed in the cursor vq */ /* data passed in the cursor vq */
...@@ -269,10 +280,11 @@ struct virtio_gpu_resource_create_3d { ...@@ -269,10 +280,11 @@ struct virtio_gpu_resource_create_3d {
}; };
/* VIRTIO_GPU_CMD_CTX_CREATE */ /* VIRTIO_GPU_CMD_CTX_CREATE */
#define VIRTIO_GPU_CONTEXT_INIT_CAPSET_ID_MASK 0x000000ff
struct virtio_gpu_ctx_create { struct virtio_gpu_ctx_create {
struct virtio_gpu_ctrl_hdr hdr; struct virtio_gpu_ctrl_hdr hdr;
__le32 nlen; __le32 nlen;
__le32 padding; __le32 context_init;
char debug_name[64]; char debug_name[64];
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment