• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2022 Google
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef VIRTGPU_GFXSTREAM_PROTOCOL_H
7 #define VIRTGPU_GFXSTREAM_PROTOCOL_H
8 
9 #include <stdint.h>
10 
11 // See definitions in rutabaga_gfx_ffi.h
12 #define VIRTGPU_CAPSET_VIRGL 1
13 #define VIRTGPU_CAPSET_VIRGL2 2
14 #define VIRTGPU_CAPSET_GFXSTREAM_VULKAN 3
15 #define VIRTGPU_CAPSET_VENUS 4
16 #define VIRTGPU_CAPSET_CROSS_DOMAIN 5
17 #define VIRTGPU_CAPSET_DRM 6
18 #define VIRTGPU_CAPSET_GFXSTREAM_MAGMA 7
19 #define VIRTGPU_CAPSET_GFXSTREAM_GLES 8
20 #define VIRTGPU_CAPSET_GFXSTREAM_COMPOSER 9
21 
22 // Address Space Graphics contexts
23 #define GFXSTREAM_CONTEXT_CREATE                0x1001
24 #define GFXSTREAM_CONTEXT_PING                  0x1002
25 #define GFXSTREAM_CONTEXT_PING_WITH_RESPONSE    0x1003
26 
27 // Native Sync FD
28 #define GFXSTREAM_CREATE_EXPORT_SYNC            0x9000
29 #define GFXSTREAM_CREATE_IMPORT_SYNC            0x9001
30 
31 // Vulkan Sync
32 #define GFXSTREAM_CREATE_EXPORT_SYNC_VK         0xa000
33 #define GFXSTREAM_CREATE_IMPORT_SYNC_VK         0xa001
34 #define GFXSTREAM_CREATE_QSRI_EXPORT_VK         0xa002
35 #define GFXSTREAM_RESOURCE_CREATE_3D            0xa003
36 #define GFXSTREAM_ACQUIRE_SYNC                  0xa004
37 
38 // clang-format off
39 // A placeholder command to ensure virtio-gpu completes
40 #define GFXSTREAM_PLACEHOLDER_COMMAND_VK        0xf002
41 // clang-format on
42 
43 struct gfxstreamHeader {
44     uint32_t opCode;
45 };
46 
47 struct gfxstreamContextCreate {
48     struct gfxstreamHeader hdr;
49     uint32_t resourceId;
50 };
51 
52 struct gfxstreamContextPing {
53     struct gfxstreamHeader hdr;
54     uint32_t resourceId;
55 };
56 
57 struct gfxstreamCreateExportSync {
58     struct gfxstreamHeader hdr;
59     uint32_t syncHandleLo;
60     uint32_t syncHandleHi;
61 };
62 
63 struct gfxstreamCreateExportSyncVK {
64     struct gfxstreamHeader hdr;
65     uint32_t deviceHandleLo;
66     uint32_t deviceHandleHi;
67     uint32_t fenceHandleLo;
68     uint32_t fenceHandleHi;
69 };
70 
71 struct gfxstreamCreateQSRIExportVK {
72     struct gfxstreamHeader hdr;
73     uint32_t imageHandleLo;
74     uint32_t imageHandleHi;
75 };
76 
77 struct gfxstreamPlaceholderCommandVk {
78     struct gfxstreamHeader hdr;
79     uint32_t pad;
80     uint32_t padding;
81 };
82 
83 struct gfxstreamResourceCreate3d {
84     struct gfxstreamHeader hdr;
85     uint32_t target;
86     uint32_t format;
87     uint32_t bind;
88     uint32_t width;
89     uint32_t height;
90     uint32_t depth;
91     uint32_t arraySize;
92     uint32_t lastLevel;
93     uint32_t nrSamples;
94     uint32_t flags;
95     uint32_t pad;
96     uint64_t blobId;
97 };
98 
99 struct gfxstreamAcquireSync {
100     struct gfxstreamHeader hdr;
101     uint32_t padding;
102     uint64_t syncId;
103 };
104 
105 struct vulkanCapset {
106     uint32_t protocolVersion;
107 
108     // ASG Ring Parameters
109     uint32_t ringSize;
110     uint32_t bufferSize;
111 
112     uint32_t colorBufferMemoryIndex;
113     uint32_t deferredMapping;
114     uint32_t blobAlignment;
115     uint32_t noRenderControlEnc;
116     uint32_t alwaysBlob;
117     uint32_t externalSync;
118     uint32_t virglSupportedFormats[16];
119     uint32_t vulkanBatchedDescriptorSetUpdate;
120 };
121 
122 struct magmaCapset {
123     uint32_t protocolVersion;
124     // ASG Ring Parameters
125     uint32_t ringSize;
126     uint32_t bufferSize;
127     uint32_t blobAlignment;
128 };
129 
130 struct glesCapset {
131     uint32_t protocolVersion;
132     // ASG Ring Parameters
133     uint32_t ringSize;
134     uint32_t bufferSize;
135     uint32_t blobAlignment;
136 };
137 
138 struct composerCapset {
139     uint32_t protocolVersion;
140     // ASG Ring Parameters
141     uint32_t ringSize;
142     uint32_t bufferSize;
143     uint32_t blobAlignment;
144 };
145 
146 #endif
147