File indexing completed on 2026-10-05 09:19:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #ifndef VIRTGPU_DRM_H
0025 #define VIRTGPU_DRM_H
0026
0027 #include "drm.h"
0028
0029 #if defined(__cplusplus)
0030 extern "C" {
0031 #endif
0032
0033
0034
0035
0036
0037
0038
0039
0040 #define DRM_VIRTGPU_MAP 0x01
0041 #define DRM_VIRTGPU_EXECBUFFER 0x02
0042 #define DRM_VIRTGPU_GETPARAM 0x03
0043 #define DRM_VIRTGPU_RESOURCE_CREATE 0x04
0044 #define DRM_VIRTGPU_RESOURCE_INFO 0x05
0045 #define DRM_VIRTGPU_TRANSFER_FROM_HOST 0x06
0046 #define DRM_VIRTGPU_TRANSFER_TO_HOST 0x07
0047 #define DRM_VIRTGPU_WAIT 0x08
0048 #define DRM_VIRTGPU_GET_CAPS 0x09
0049 #define DRM_VIRTGPU_RESOURCE_CREATE_BLOB 0x0a
0050 #define DRM_VIRTGPU_CONTEXT_INIT 0x0b
0051
0052 #define VIRTGPU_EXECBUF_FENCE_FD_IN 0x01
0053 #define VIRTGPU_EXECBUF_FENCE_FD_OUT 0x02
0054 #define VIRTGPU_EXECBUF_RING_IDX 0x04
0055 #define VIRTGPU_EXECBUF_FLAGS (\
0056 VIRTGPU_EXECBUF_FENCE_FD_IN |\
0057 VIRTGPU_EXECBUF_FENCE_FD_OUT |\
0058 VIRTGPU_EXECBUF_RING_IDX |\
0059 0)
0060
0061 struct drm_virtgpu_map {
0062 __u64 offset;
0063 __u32 handle;
0064 __u32 pad;
0065 };
0066
0067 #define VIRTGPU_EXECBUF_SYNCOBJ_RESET 0x01
0068 #define VIRTGPU_EXECBUF_SYNCOBJ_FLAGS ( \
0069 VIRTGPU_EXECBUF_SYNCOBJ_RESET | \
0070 0)
0071 struct drm_virtgpu_execbuffer_syncobj {
0072 __u32 handle;
0073 __u32 flags;
0074 __u64 point;
0075 };
0076
0077
0078 struct drm_virtgpu_execbuffer {
0079 __u32 flags;
0080 __u32 size;
0081 __u64 command;
0082 __u64 bo_handles;
0083 __u32 num_bo_handles;
0084 __s32 fence_fd;
0085 __u32 ring_idx;
0086 __u32 syncobj_stride;
0087 __u32 num_in_syncobjs;
0088 __u32 num_out_syncobjs;
0089 __u64 in_syncobjs;
0090 __u64 out_syncobjs;
0091 };
0092
0093 #define VIRTGPU_PARAM_3D_FEATURES 1
0094 #define VIRTGPU_PARAM_CAPSET_QUERY_FIX 2
0095 #define VIRTGPU_PARAM_RESOURCE_BLOB 3
0096 #define VIRTGPU_PARAM_HOST_VISIBLE 4
0097 #define VIRTGPU_PARAM_CROSS_DEVICE 5
0098 #define VIRTGPU_PARAM_CONTEXT_INIT 6
0099 #define VIRTGPU_PARAM_SUPPORTED_CAPSET_IDs 7
0100 #define VIRTGPU_PARAM_EXPLICIT_DEBUG_NAME 8
0101
0102 struct drm_virtgpu_getparam {
0103 __u64 param;
0104 __u64 value;
0105 };
0106
0107
0108
0109 struct drm_virtgpu_resource_create {
0110 __u32 target;
0111 __u32 format;
0112 __u32 bind;
0113 __u32 width;
0114 __u32 height;
0115 __u32 depth;
0116 __u32 array_size;
0117 __u32 last_level;
0118 __u32 nr_samples;
0119 __u32 flags;
0120 __u32 bo_handle;
0121 __u32 res_handle;
0122 __u32 size;
0123 __u32 stride;
0124 };
0125
0126 struct drm_virtgpu_resource_info {
0127 __u32 bo_handle;
0128 __u32 res_handle;
0129 __u32 size;
0130 __u32 blob_mem;
0131 };
0132
0133 struct drm_virtgpu_3d_box {
0134 __u32 x;
0135 __u32 y;
0136 __u32 z;
0137 __u32 w;
0138 __u32 h;
0139 __u32 d;
0140 };
0141
0142 struct drm_virtgpu_3d_transfer_to_host {
0143 __u32 bo_handle;
0144 struct drm_virtgpu_3d_box box;
0145 __u32 level;
0146 __u32 offset;
0147 __u32 stride;
0148 __u32 layer_stride;
0149 };
0150
0151 struct drm_virtgpu_3d_transfer_from_host {
0152 __u32 bo_handle;
0153 struct drm_virtgpu_3d_box box;
0154 __u32 level;
0155 __u32 offset;
0156 __u32 stride;
0157 __u32 layer_stride;
0158 };
0159
0160 #define VIRTGPU_WAIT_NOWAIT 1
0161 struct drm_virtgpu_3d_wait {
0162 __u32 handle;
0163 __u32 flags;
0164 };
0165
0166 #define VIRTGPU_DRM_CAPSET_VIRGL 1
0167 #define VIRTGPU_DRM_CAPSET_VIRGL2 2
0168 #define VIRTGPU_DRM_CAPSET_GFXSTREAM_VULKAN 3
0169 #define VIRTGPU_DRM_CAPSET_VENUS 4
0170 #define VIRTGPU_DRM_CAPSET_CROSS_DOMAIN 5
0171 #define VIRTGPU_DRM_CAPSET_DRM 6
0172 struct drm_virtgpu_get_caps {
0173 __u32 cap_set_id;
0174 __u32 cap_set_ver;
0175 __u64 addr;
0176 __u32 size;
0177 __u32 pad;
0178 };
0179
0180 struct drm_virtgpu_resource_create_blob {
0181 #define VIRTGPU_BLOB_MEM_GUEST 0x0001
0182 #define VIRTGPU_BLOB_MEM_HOST3D 0x0002
0183 #define VIRTGPU_BLOB_MEM_HOST3D_GUEST 0x0003
0184
0185 #define VIRTGPU_BLOB_FLAG_USE_MAPPABLE 0x0001
0186 #define VIRTGPU_BLOB_FLAG_USE_SHAREABLE 0x0002
0187 #define VIRTGPU_BLOB_FLAG_USE_CROSS_DEVICE 0x0004
0188
0189 __u32 blob_mem;
0190 __u32 blob_flags;
0191 __u32 bo_handle;
0192 __u32 res_handle;
0193 __u64 size;
0194
0195
0196
0197
0198
0199 __u32 pad;
0200 __u32 cmd_size;
0201 __u64 cmd;
0202 __u64 blob_id;
0203 };
0204
0205 #define VIRTGPU_CONTEXT_PARAM_CAPSET_ID 0x0001
0206 #define VIRTGPU_CONTEXT_PARAM_NUM_RINGS 0x0002
0207 #define VIRTGPU_CONTEXT_PARAM_POLL_RINGS_MASK 0x0003
0208 #define VIRTGPU_CONTEXT_PARAM_DEBUG_NAME 0x0004
0209 struct drm_virtgpu_context_set_param {
0210 __u64 param;
0211 __u64 value;
0212 };
0213
0214 struct drm_virtgpu_context_init {
0215 __u32 num_params;
0216 __u32 pad;
0217
0218
0219 __u64 ctx_set_params;
0220 };
0221
0222
0223
0224
0225
0226
0227 #define VIRTGPU_EVENT_FENCE_SIGNALED 0x90000000
0228
0229 #define DRM_IOCTL_VIRTGPU_MAP \
0230 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_MAP, struct drm_virtgpu_map)
0231
0232 #define DRM_IOCTL_VIRTGPU_EXECBUFFER \
0233 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_EXECBUFFER,\
0234 struct drm_virtgpu_execbuffer)
0235
0236 #define DRM_IOCTL_VIRTGPU_GETPARAM \
0237 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GETPARAM,\
0238 struct drm_virtgpu_getparam)
0239
0240 #define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE \
0241 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE, \
0242 struct drm_virtgpu_resource_create)
0243
0244 #define DRM_IOCTL_VIRTGPU_RESOURCE_INFO \
0245 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_INFO, \
0246 struct drm_virtgpu_resource_info)
0247
0248 #define DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST \
0249 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_FROM_HOST, \
0250 struct drm_virtgpu_3d_transfer_from_host)
0251
0252 #define DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST \
0253 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_TRANSFER_TO_HOST, \
0254 struct drm_virtgpu_3d_transfer_to_host)
0255
0256 #define DRM_IOCTL_VIRTGPU_WAIT \
0257 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_WAIT, \
0258 struct drm_virtgpu_3d_wait)
0259
0260 #define DRM_IOCTL_VIRTGPU_GET_CAPS \
0261 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_GET_CAPS, \
0262 struct drm_virtgpu_get_caps)
0263
0264 #define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB \
0265 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE_BLOB, \
0266 struct drm_virtgpu_resource_create_blob)
0267
0268 #define DRM_IOCTL_VIRTGPU_CONTEXT_INIT \
0269 DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_CONTEXT_INIT, \
0270 struct drm_virtgpu_context_init)
0271
0272 #if defined(__cplusplus)
0273 }
0274 #endif
0275
0276 #endif