Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/drivers/svga/include/svga3d_cmd.h
4574 views
1
/**********************************************************
2
* Copyright 1998-2017 VMware, Inc. All rights reserved.
3
*
4
* Permission is hereby granted, free of charge, to any person
5
* obtaining a copy of this software and associated documentation
6
* files (the "Software"), to deal in the Software without
7
* restriction, including without limitation the rights to use, copy,
8
* modify, merge, publish, distribute, sublicense, and/or sell copies
9
* of the Software, and to permit persons to whom the Software is
10
* furnished to do so, subject to the following conditions:
11
*
12
* The above copyright notice and this permission notice shall be
13
* included in all copies or substantial portions of the Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
* SOFTWARE.
23
*
24
**********************************************************/
25
26
/*
27
* svga3d_cmd.h --
28
*
29
* SVGA 3d hardware cmd definitions
30
*/
31
32
#ifndef _SVGA3D_CMD_H_
33
#define _SVGA3D_CMD_H_
34
35
#define INCLUDE_ALLOW_MODULE
36
#define INCLUDE_ALLOW_USERLEVEL
37
#define INCLUDE_ALLOW_VMCORE
38
39
#include "includeCheck.h"
40
#include "svga3d_types.h"
41
#include "svga3d_limits.h"
42
43
/*
44
* Identifiers for commands in the command FIFO.
45
*
46
* IDs between 1000 and 1039 (inclusive) were used by obsolete versions of
47
* the SVGA3D protocol and remain reserved; they should not be used in the
48
* future.
49
*
50
* IDs between 1040 and 2999 (inclusive) are available for use by the
51
* current SVGA3D protocol.
52
*
53
* FIFO clients other than SVGA3D should stay below 1000, or at 3000
54
* and up.
55
*/
56
57
typedef enum {
58
SVGA_3D_CMD_LEGACY_BASE = 1000,
59
SVGA_3D_CMD_BASE = 1040,
60
61
SVGA_3D_CMD_SURFACE_DEFINE = 1040,
62
SVGA_3D_CMD_SURFACE_DESTROY = 1041,
63
SVGA_3D_CMD_SURFACE_COPY = 1042,
64
SVGA_3D_CMD_SURFACE_STRETCHBLT = 1043,
65
SVGA_3D_CMD_SURFACE_DMA = 1044,
66
SVGA_3D_CMD_CONTEXT_DEFINE = 1045,
67
SVGA_3D_CMD_CONTEXT_DESTROY = 1046,
68
SVGA_3D_CMD_SETTRANSFORM = 1047,
69
SVGA_3D_CMD_SETZRANGE = 1048,
70
SVGA_3D_CMD_SETRENDERSTATE = 1049,
71
SVGA_3D_CMD_SETRENDERTARGET = 1050,
72
SVGA_3D_CMD_SETTEXTURESTATE = 1051,
73
SVGA_3D_CMD_SETMATERIAL = 1052,
74
SVGA_3D_CMD_SETLIGHTDATA = 1053,
75
SVGA_3D_CMD_SETLIGHTENABLED = 1054,
76
SVGA_3D_CMD_SETVIEWPORT = 1055,
77
SVGA_3D_CMD_SETCLIPPLANE = 1056,
78
SVGA_3D_CMD_CLEAR = 1057,
79
SVGA_3D_CMD_PRESENT = 1058,
80
SVGA_3D_CMD_SHADER_DEFINE = 1059,
81
SVGA_3D_CMD_SHADER_DESTROY = 1060,
82
SVGA_3D_CMD_SET_SHADER = 1061,
83
SVGA_3D_CMD_SET_SHADER_CONST = 1062,
84
SVGA_3D_CMD_DRAW_PRIMITIVES = 1063,
85
SVGA_3D_CMD_SETSCISSORRECT = 1064,
86
SVGA_3D_CMD_BEGIN_QUERY = 1065,
87
SVGA_3D_CMD_END_QUERY = 1066,
88
SVGA_3D_CMD_WAIT_FOR_QUERY = 1067,
89
SVGA_3D_CMD_PRESENT_READBACK = 1068,
90
SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN = 1069,
91
SVGA_3D_CMD_SURFACE_DEFINE_V2 = 1070,
92
SVGA_3D_CMD_GENERATE_MIPMAPS = 1071,
93
SVGA_3D_CMD_DEAD4 = 1072,
94
SVGA_3D_CMD_DEAD5 = 1073,
95
SVGA_3D_CMD_DEAD6 = 1074,
96
SVGA_3D_CMD_DEAD7 = 1075,
97
SVGA_3D_CMD_DEAD8 = 1076,
98
SVGA_3D_CMD_DEAD9 = 1077,
99
SVGA_3D_CMD_DEAD10 = 1078,
100
SVGA_3D_CMD_DEAD11 = 1079,
101
SVGA_3D_CMD_ACTIVATE_SURFACE = 1080,
102
SVGA_3D_CMD_DEACTIVATE_SURFACE = 1081,
103
SVGA_3D_CMD_SCREEN_DMA = 1082,
104
SVGA_3D_CMD_DEAD1 = 1083,
105
SVGA_3D_CMD_DEAD2 = 1084,
106
107
SVGA_3D_CMD_DEAD12 = 1085,
108
SVGA_3D_CMD_DEAD13 = 1086,
109
SVGA_3D_CMD_DEAD14 = 1087,
110
SVGA_3D_CMD_DEAD15 = 1088,
111
SVGA_3D_CMD_DEAD16 = 1089,
112
SVGA_3D_CMD_DEAD17 = 1090,
113
114
SVGA_3D_CMD_SET_OTABLE_BASE = 1091,
115
SVGA_3D_CMD_READBACK_OTABLE = 1092,
116
117
SVGA_3D_CMD_DEFINE_GB_MOB = 1093,
118
SVGA_3D_CMD_DESTROY_GB_MOB = 1094,
119
SVGA_3D_CMD_DEAD3 = 1095,
120
SVGA_3D_CMD_UPDATE_GB_MOB_MAPPING = 1096,
121
122
SVGA_3D_CMD_DEFINE_GB_SURFACE = 1097,
123
SVGA_3D_CMD_DESTROY_GB_SURFACE = 1098,
124
SVGA_3D_CMD_BIND_GB_SURFACE = 1099,
125
SVGA_3D_CMD_COND_BIND_GB_SURFACE = 1100,
126
SVGA_3D_CMD_UPDATE_GB_IMAGE = 1101,
127
SVGA_3D_CMD_UPDATE_GB_SURFACE = 1102,
128
SVGA_3D_CMD_READBACK_GB_IMAGE = 1103,
129
SVGA_3D_CMD_READBACK_GB_SURFACE = 1104,
130
SVGA_3D_CMD_INVALIDATE_GB_IMAGE = 1105,
131
SVGA_3D_CMD_INVALIDATE_GB_SURFACE = 1106,
132
133
SVGA_3D_CMD_DEFINE_GB_CONTEXT = 1107,
134
SVGA_3D_CMD_DESTROY_GB_CONTEXT = 1108,
135
SVGA_3D_CMD_BIND_GB_CONTEXT = 1109,
136
SVGA_3D_CMD_READBACK_GB_CONTEXT = 1110,
137
SVGA_3D_CMD_INVALIDATE_GB_CONTEXT = 1111,
138
139
SVGA_3D_CMD_DEFINE_GB_SHADER = 1112,
140
SVGA_3D_CMD_DESTROY_GB_SHADER = 1113,
141
SVGA_3D_CMD_BIND_GB_SHADER = 1114,
142
143
SVGA_3D_CMD_SET_OTABLE_BASE64 = 1115,
144
145
SVGA_3D_CMD_BEGIN_GB_QUERY = 1116,
146
SVGA_3D_CMD_END_GB_QUERY = 1117,
147
SVGA_3D_CMD_WAIT_FOR_GB_QUERY = 1118,
148
149
SVGA_3D_CMD_NOP = 1119,
150
151
SVGA_3D_CMD_ENABLE_GART = 1120,
152
SVGA_3D_CMD_DISABLE_GART = 1121,
153
SVGA_3D_CMD_MAP_MOB_INTO_GART = 1122,
154
SVGA_3D_CMD_UNMAP_GART_RANGE = 1123,
155
156
SVGA_3D_CMD_DEFINE_GB_SCREENTARGET = 1124,
157
SVGA_3D_CMD_DESTROY_GB_SCREENTARGET = 1125,
158
SVGA_3D_CMD_BIND_GB_SCREENTARGET = 1126,
159
SVGA_3D_CMD_UPDATE_GB_SCREENTARGET = 1127,
160
161
SVGA_3D_CMD_READBACK_GB_IMAGE_PARTIAL = 1128,
162
SVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL = 1129,
163
164
SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE = 1130,
165
166
SVGA_3D_CMD_GB_SCREEN_DMA = 1131,
167
SVGA_3D_CMD_BIND_GB_SURFACE_WITH_PITCH = 1132,
168
SVGA_3D_CMD_GB_MOB_FENCE = 1133,
169
SVGA_3D_CMD_DEFINE_GB_SURFACE_V2 = 1134,
170
SVGA_3D_CMD_DEFINE_GB_MOB64 = 1135,
171
SVGA_3D_CMD_REDEFINE_GB_MOB64 = 1136,
172
SVGA_3D_CMD_NOP_ERROR = 1137,
173
174
SVGA_3D_CMD_SET_VERTEX_STREAMS = 1138,
175
SVGA_3D_CMD_SET_VERTEX_DECLS = 1139,
176
SVGA_3D_CMD_SET_VERTEX_DIVISORS = 1140,
177
SVGA_3D_CMD_DRAW = 1141,
178
SVGA_3D_CMD_DRAW_INDEXED = 1142,
179
180
/*
181
* DX10 Commands
182
*/
183
SVGA_3D_CMD_DX_MIN = 1143,
184
SVGA_3D_CMD_DX_DEFINE_CONTEXT = 1143,
185
SVGA_3D_CMD_DX_DESTROY_CONTEXT = 1144,
186
SVGA_3D_CMD_DX_BIND_CONTEXT = 1145,
187
SVGA_3D_CMD_DX_READBACK_CONTEXT = 1146,
188
SVGA_3D_CMD_DX_INVALIDATE_CONTEXT = 1147,
189
SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER = 1148,
190
SVGA_3D_CMD_DX_SET_SHADER_RESOURCES = 1149,
191
SVGA_3D_CMD_DX_SET_SHADER = 1150,
192
SVGA_3D_CMD_DX_SET_SAMPLERS = 1151,
193
SVGA_3D_CMD_DX_DRAW = 1152,
194
SVGA_3D_CMD_DX_DRAW_INDEXED = 1153,
195
SVGA_3D_CMD_DX_DRAW_INSTANCED = 1154,
196
SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED = 1155,
197
SVGA_3D_CMD_DX_DRAW_AUTO = 1156,
198
SVGA_3D_CMD_DX_SET_INPUT_LAYOUT = 1157,
199
SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS = 1158,
200
SVGA_3D_CMD_DX_SET_INDEX_BUFFER = 1159,
201
SVGA_3D_CMD_DX_SET_TOPOLOGY = 1160,
202
SVGA_3D_CMD_DX_SET_RENDERTARGETS = 1161,
203
SVGA_3D_CMD_DX_SET_BLEND_STATE = 1162,
204
SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE = 1163,
205
SVGA_3D_CMD_DX_SET_RASTERIZER_STATE = 1164,
206
SVGA_3D_CMD_DX_DEFINE_QUERY = 1165,
207
SVGA_3D_CMD_DX_DESTROY_QUERY = 1166,
208
SVGA_3D_CMD_DX_BIND_QUERY = 1167,
209
SVGA_3D_CMD_DX_SET_QUERY_OFFSET = 1168,
210
SVGA_3D_CMD_DX_BEGIN_QUERY = 1169,
211
SVGA_3D_CMD_DX_END_QUERY = 1170,
212
SVGA_3D_CMD_DX_READBACK_QUERY = 1171,
213
SVGA_3D_CMD_DX_SET_PREDICATION = 1172,
214
SVGA_3D_CMD_DX_SET_SOTARGETS = 1173,
215
SVGA_3D_CMD_DX_SET_VIEWPORTS = 1174,
216
SVGA_3D_CMD_DX_SET_SCISSORRECTS = 1175,
217
SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW = 1176,
218
SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW = 1177,
219
SVGA_3D_CMD_DX_PRED_COPY_REGION = 1178,
220
SVGA_3D_CMD_DX_PRED_COPY = 1179,
221
SVGA_3D_CMD_DX_PRESENTBLT = 1180,
222
SVGA_3D_CMD_DX_GENMIPS = 1181,
223
SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE = 1182,
224
SVGA_3D_CMD_DX_READBACK_SUBRESOURCE = 1183,
225
SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE = 1184,
226
SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW = 1185,
227
SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW = 1186,
228
SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW = 1187,
229
SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW = 1188,
230
SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW = 1189,
231
SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW = 1190,
232
SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT = 1191,
233
SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT = 1192,
234
SVGA_3D_CMD_DX_DEFINE_BLEND_STATE = 1193,
235
SVGA_3D_CMD_DX_DESTROY_BLEND_STATE = 1194,
236
SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE = 1195,
237
SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE = 1196,
238
SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE = 1197,
239
SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE = 1198,
240
SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE = 1199,
241
SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE = 1200,
242
SVGA_3D_CMD_DX_DEFINE_SHADER = 1201,
243
SVGA_3D_CMD_DX_DESTROY_SHADER = 1202,
244
SVGA_3D_CMD_DX_BIND_SHADER = 1203,
245
SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT = 1204,
246
SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT = 1205,
247
SVGA_3D_CMD_DX_SET_STREAMOUTPUT = 1206,
248
SVGA_3D_CMD_DX_SET_COTABLE = 1207,
249
SVGA_3D_CMD_DX_READBACK_COTABLE = 1208,
250
SVGA_3D_CMD_DX_BUFFER_COPY = 1209,
251
SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER = 1210,
252
SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK = 1211,
253
SVGA_3D_CMD_DX_MOVE_QUERY = 1212,
254
SVGA_3D_CMD_DX_BIND_ALL_QUERY = 1213,
255
SVGA_3D_CMD_DX_READBACK_ALL_QUERY = 1214,
256
SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER = 1215,
257
SVGA_3D_CMD_DX_MOB_FENCE_64 = 1216,
258
SVGA_3D_CMD_DX_BIND_ALL_SHADER = 1217,
259
SVGA_3D_CMD_DX_HINT = 1218,
260
SVGA_3D_CMD_DX_BUFFER_UPDATE = 1219,
261
SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET = 1220,
262
SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET = 1221,
263
SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET = 1222,
264
SVGA_3D_CMD_DX_SET_HS_CONSTANT_BUFFER_OFFSET = 1223,
265
SVGA_3D_CMD_DX_SET_DS_CONSTANT_BUFFER_OFFSET = 1224,
266
SVGA_3D_CMD_DX_SET_CS_CONSTANT_BUFFER_OFFSET = 1225,
267
268
SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER = 1226,
269
SVGA_3D_CMD_DX_MAX = 1227,
270
271
SVGA_3D_CMD_SCREEN_COPY = 1227,
272
273
SVGA_3D_CMD_VIDEO_DEFINE_DECODER = 1228,
274
SVGA_3D_CMD_VIDEO_DESTROY_DECODER = 1229,
275
SVGA_3D_CMD_VIDEO_DEFINE_PROCESSOR = 1230,
276
SVGA_3D_CMD_VIDEO_DESTROY_PROCESSOR = 1231,
277
SVGA_3D_CMD_VIDEO_DECODE_FRAME = 1232,
278
SVGA_3D_CMD_VIDEO_PROCESS_FRAME = 1233,
279
SVGA_3D_CMD_VIDEO_BIND_DECODER_MOB = 1234,
280
SVGA_3D_CMD_VIDEO_READBACK_DECODER_MOB = 1235,
281
282
SVGA_3D_CMD_GROW_OTABLE = 1236,
283
SVGA_3D_CMD_DX_GROW_COTABLE = 1237,
284
SVGA_3D_CMD_INTRA_SURFACE_COPY = 1238,
285
286
SVGA_3D_CMD_DEFINE_GB_SURFACE_V3 = 1239,
287
288
SVGA_3D_CMD_DX_RESOLVE_COPY = 1240,
289
SVGA_3D_CMD_DX_PRED_RESOLVE_COPY = 1241,
290
SVGA_3D_CMD_DX_PRED_CONVERT_REGION = 1242,
291
SVGA_3D_CMD_DX_PRED_CONVERT = 1243,
292
SVGA_3D_CMD_WHOLE_SURFACE_COPY = 1244,
293
294
SVGA_3D_CMD_DX_DEFINE_UA_VIEW = 1245,
295
SVGA_3D_CMD_DX_DESTROY_UA_VIEW = 1246,
296
SVGA_3D_CMD_DX_CLEAR_UA_VIEW_UINT = 1247,
297
SVGA_3D_CMD_DX_CLEAR_UA_VIEW_FLOAT = 1248,
298
SVGA_3D_CMD_DX_COPY_STRUCTURE_COUNT = 1249,
299
SVGA_3D_CMD_DX_SET_UA_VIEWS = 1250,
300
301
SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED_INDIRECT = 1251,
302
SVGA_3D_CMD_DX_DRAW_INSTANCED_INDIRECT = 1252,
303
SVGA_3D_CMD_DX_DISPATCH = 1253,
304
SVGA_3D_CMD_DX_DISPATCH_INDIRECT = 1254,
305
306
SVGA_3D_CMD_WRITE_ZERO_SURFACE = 1255,
307
SVGA_3D_CMD_HINT_ZERO_SURFACE = 1256,
308
SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER = 1257,
309
SVGA_3D_CMD_DX_SET_STRUCTURE_COUNT = 1258,
310
311
SVGA_3D_CMD_LOGICOPS_BITBLT = 1259,
312
SVGA_3D_CMD_LOGICOPS_TRANSBLT = 1260,
313
SVGA_3D_CMD_LOGICOPS_STRETCHBLT = 1261,
314
SVGA_3D_CMD_LOGICOPS_COLORFILL = 1262,
315
SVGA_3D_CMD_LOGICOPS_ALPHABLEND = 1263,
316
SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND = 1264,
317
318
SVGA_3D_CMD_DX_COPY_COTABLE_INTO_MOB = 1265,
319
320
SVGA_3D_CMD_UPDATE_GB_SCREENTARGET_V2 = 1266,
321
SVGA_3D_CMD_DEFINE_GB_SURFACE_V4 = 1267,
322
SVGA_3D_CMD_DX_SET_CS_UA_VIEWS = 1268,
323
SVGA_3D_CMD_DX_SET_MIN_LOD = 1269,
324
SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW_BOX = 1270,
325
SVGA_3D_CMD_DX_CLEAR_UA_VIEW_BOX = 1271,
326
SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2 = 1272,
327
SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT_WITH_MOB = 1273,
328
SVGA_3D_CMD_DX_SET_SHADER_IFACE = 1274,
329
SVGA_3D_CMD_DX_BIND_STREAMOUTPUT = 1275,
330
331
SVGA_3D_CMD_MAX = 1276,
332
SVGA_3D_CMD_FUTURE_MAX = 3000
333
} SVGAFifo3dCmdId;
334
335
/*
336
* FIFO command format definitions:
337
*/
338
339
/*
340
* The data size header following cmdNum for every 3d command
341
*/
342
typedef
343
#include "vmware_pack_begin.h"
344
struct {
345
uint32 id;
346
uint32 size;
347
}
348
#include "vmware_pack_end.h"
349
SVGA3dCmdHeader;
350
351
typedef
352
#include "vmware_pack_begin.h"
353
struct {
354
uint32 numMipLevels;
355
}
356
#include "vmware_pack_end.h"
357
SVGA3dSurfaceFace;
358
359
typedef
360
#include "vmware_pack_begin.h"
361
struct {
362
uint32 sid;
363
SVGA3dSurface1Flags surfaceFlags;
364
SVGA3dSurfaceFormat format;
365
366
/*
367
* If surfaceFlags has SVGA3D_SURFACE_CUBEMAP bit set, all SVGA3dSurfaceFace
368
* structures must have the same value of numMipLevels field.
369
* Otherwise, all but the first SVGA3dSurfaceFace structures must have the
370
* numMipLevels set to 0.
371
*/
372
SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES];
373
374
/*
375
* Followed by an SVGA3dSize structure for each mip level in each face.
376
*
377
* A note on surface sizes: Sizes are always specified in pixels,
378
* even if the true surface size is not a multiple of the minimum
379
* block size of the surface's format. For example, a 3x3x1 DXT1
380
* compressed texture would actually be stored as a 4x4x1 image in
381
* memory.
382
*/
383
}
384
#include "vmware_pack_end.h"
385
SVGA3dCmdDefineSurface; /* SVGA_3D_CMD_SURFACE_DEFINE */
386
387
typedef
388
#include "vmware_pack_begin.h"
389
struct {
390
uint32 sid;
391
SVGA3dSurface1Flags surfaceFlags;
392
SVGA3dSurfaceFormat format;
393
394
/*
395
* If surfaceFlags has SVGA3D_SURFACE_CUBEMAP bit set, all SVGA3dSurfaceFace
396
* structures must have the same value of numMipLevels field.
397
* Otherwise, all but the first SVGA3dSurfaceFace structures must have the
398
* numMipLevels set to 0.
399
*/
400
SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES];
401
uint32 multisampleCount;
402
SVGA3dTextureFilter autogenFilter;
403
404
/*
405
* Followed by an SVGA3dSize structure for each mip level in each face.
406
*
407
* A note on surface sizes: Sizes are always specified in pixels,
408
* even if the true surface size is not a multiple of the minimum
409
* block size of the surface's format. For example, a 3x3x1 DXT1
410
* compressed texture would actually be stored as a 4x4x1 image in
411
* memory.
412
*/
413
}
414
#include "vmware_pack_end.h"
415
SVGA3dCmdDefineSurface_v2; /* SVGA_3D_CMD_SURFACE_DEFINE_V2 */
416
417
typedef
418
#include "vmware_pack_begin.h"
419
struct {
420
uint32 sid;
421
}
422
#include "vmware_pack_end.h"
423
SVGA3dCmdDestroySurface; /* SVGA_3D_CMD_SURFACE_DESTROY */
424
425
typedef
426
#include "vmware_pack_begin.h"
427
struct {
428
uint32 cid;
429
}
430
#include "vmware_pack_end.h"
431
SVGA3dCmdDefineContext; /* SVGA_3D_CMD_CONTEXT_DEFINE */
432
433
typedef
434
#include "vmware_pack_begin.h"
435
struct {
436
uint32 cid;
437
}
438
#include "vmware_pack_end.h"
439
SVGA3dCmdDestroyContext; /* SVGA_3D_CMD_CONTEXT_DESTROY */
440
441
typedef
442
#include "vmware_pack_begin.h"
443
struct {
444
uint32 cid;
445
SVGA3dClearFlag clearFlag;
446
uint32 color;
447
float depth;
448
uint32 stencil;
449
/* Followed by variable number of SVGA3dRect structures */
450
}
451
#include "vmware_pack_end.h"
452
SVGA3dCmdClear; /* SVGA_3D_CMD_CLEAR */
453
454
typedef
455
#include "vmware_pack_begin.h"
456
struct {
457
SVGA3dLightType type;
458
SVGA3dBool inWorldSpace;
459
float diffuse[4];
460
float specular[4];
461
float ambient[4];
462
float position[4];
463
float direction[4];
464
float range;
465
float falloff;
466
float attenuation0;
467
float attenuation1;
468
float attenuation2;
469
float theta;
470
float phi;
471
}
472
#include "vmware_pack_end.h"
473
SVGA3dLightData;
474
475
typedef
476
#include "vmware_pack_begin.h"
477
struct {
478
uint32 sid;
479
/* Followed by variable number of SVGA3dCopyRect structures */
480
}
481
#include "vmware_pack_end.h"
482
SVGA3dCmdPresent; /* SVGA_3D_CMD_PRESENT */
483
484
typedef
485
#include "vmware_pack_begin.h"
486
struct {
487
SVGA3dRenderStateName state;
488
union {
489
uint32 uintValue;
490
float floatValue;
491
};
492
}
493
#include "vmware_pack_end.h"
494
SVGA3dRenderState;
495
496
typedef
497
#include "vmware_pack_begin.h"
498
struct {
499
uint32 cid;
500
/* Followed by variable number of SVGA3dRenderState structures */
501
}
502
#include "vmware_pack_end.h"
503
SVGA3dCmdSetRenderState; /* SVGA_3D_CMD_SETRENDERSTATE */
504
505
typedef
506
#include "vmware_pack_begin.h"
507
struct {
508
uint32 cid;
509
SVGA3dRenderTargetType type;
510
SVGA3dSurfaceImageId target;
511
}
512
#include "vmware_pack_end.h"
513
SVGA3dCmdSetRenderTarget; /* SVGA_3D_CMD_SETRENDERTARGET */
514
515
typedef
516
#include "vmware_pack_begin.h"
517
struct {
518
SVGA3dSurfaceImageId src;
519
SVGA3dSurfaceImageId dest;
520
/* Followed by variable number of SVGA3dCopyBox structures */
521
}
522
#include "vmware_pack_end.h"
523
SVGA3dCmdSurfaceCopy; /* SVGA_3D_CMD_SURFACE_COPY */
524
525
/*
526
* Perform a surface copy within the same image.
527
* The src/dest boxes are allowed to overlap.
528
*/
529
typedef
530
#include "vmware_pack_begin.h"
531
struct {
532
SVGA3dSurfaceImageId surface;
533
SVGA3dCopyBox box;
534
}
535
#include "vmware_pack_end.h"
536
SVGA3dCmdIntraSurfaceCopy; /* SVGA_3D_CMD_INTRA_SURFACE_COPY */
537
538
typedef
539
#include "vmware_pack_begin.h"
540
struct {
541
SVGA3dSurfaceImageId src;
542
SVGA3dSurfaceImageId dest;
543
SVGA3dBox boxSrc;
544
SVGA3dBox boxDest;
545
SVGA3dStretchBltMode mode;
546
}
547
#include "vmware_pack_end.h"
548
SVGA3dCmdSurfaceStretchBlt; /* SVGA_3D_CMD_SURFACE_STRETCHBLT */
549
550
typedef
551
#include "vmware_pack_begin.h"
552
struct {
553
/*
554
* If the discard flag is present in a surface DMA operation, the host may
555
* discard the contents of the current mipmap level and face of the target
556
* surface before applying the surface DMA contents.
557
*/
558
uint32 discard : 1;
559
560
/*
561
* If the unsynchronized flag is present, the host may perform this upload
562
* without syncing to pending reads on this surface.
563
*/
564
uint32 unsynchronized : 1;
565
566
/*
567
* Guests *MUST* set the reserved bits to 0 before submitting the command
568
* suffix as future flags may occupy these bits.
569
*/
570
uint32 reserved : 30;
571
}
572
#include "vmware_pack_end.h"
573
SVGA3dSurfaceDMAFlags;
574
575
typedef
576
#include "vmware_pack_begin.h"
577
struct {
578
SVGAGuestImage guest;
579
SVGA3dSurfaceImageId host;
580
SVGA3dTransferType transfer;
581
582
/*
583
* Followed by variable number of SVGA3dCopyBox structures. For consistency
584
* in all clipping logic and coordinate translation, we define the
585
* "source" in each copyBox as the guest image and the
586
* "destination" as the host image, regardless of transfer
587
* direction.
588
*
589
* For efficiency, the SVGA3D device is free to copy more data than
590
* specified. For example, it may round copy boxes outwards such
591
* that they lie on particular alignment boundaries.
592
*/
593
}
594
#include "vmware_pack_end.h"
595
SVGA3dCmdSurfaceDMA; /* SVGA_3D_CMD_SURFACE_DMA */
596
597
/*
598
* SVGA3dCmdSurfaceDMASuffix --
599
*
600
* This is a command suffix that will appear after a SurfaceDMA command in
601
* the FIFO. It contains some extra information that hosts may use to
602
* optimize performance or protect the guest. This suffix exists to preserve
603
* backwards compatibility while also allowing for new functionality to be
604
* implemented.
605
*/
606
607
typedef
608
#include "vmware_pack_begin.h"
609
struct {
610
uint32 suffixSize;
611
612
/*
613
* The maximum offset is used to determine the maximum offset from the
614
* guestPtr base address that will be accessed or written to during this
615
* surfaceDMA. If the suffix is supported, the host will respect this
616
* boundary while performing surface DMAs.
617
*
618
* Defaults to MAX_UINT32
619
*/
620
uint32 maximumOffset;
621
622
/*
623
* A set of flags that describes optimizations that the host may perform
624
* while performing this surface DMA operation. The guest should never rely
625
* on behaviour that is different when these flags are set for correctness.
626
*
627
* Defaults to 0
628
*/
629
SVGA3dSurfaceDMAFlags flags;
630
}
631
#include "vmware_pack_end.h"
632
SVGA3dCmdSurfaceDMASuffix;
633
634
/*
635
* SVGA_3D_CMD_DRAW_PRIMITIVES --
636
*
637
* This command is the SVGA3D device's generic drawing entry point.
638
* It can draw multiple ranges of primitives, optionally using an
639
* index buffer, using an arbitrary collection of vertex buffers.
640
*
641
* Each SVGA3dVertexDecl defines a distinct vertex array to bind
642
* during this draw call. The declarations specify which surface
643
* the vertex data lives in, what that vertex data is used for,
644
* and how to interpret it.
645
*
646
* Each SVGA3dPrimitiveRange defines a collection of primitives
647
* to render using the same vertex arrays. An index buffer is
648
* optional.
649
*/
650
651
typedef
652
#include "vmware_pack_begin.h"
653
struct {
654
/*
655
* A range hint is an optional specification for the range of indices
656
* in an SVGA3dArray that will be used. If 'last' is zero, it is assumed
657
* that the entire array will be used.
658
*
659
* These are only hints. The SVGA3D device may use them for
660
* performance optimization if possible, but it's also allowed to
661
* ignore these values.
662
*/
663
uint32 first;
664
uint32 last;
665
}
666
#include "vmware_pack_end.h"
667
SVGA3dArrayRangeHint;
668
669
typedef
670
#include "vmware_pack_begin.h"
671
struct {
672
/*
673
* Define the origin and shape of a vertex or index array. Both
674
* 'offset' and 'stride' are in bytes. The provided surface will be
675
* reinterpreted as a flat array of bytes in the same format used
676
* by surface DMA operations. To avoid unnecessary conversions, the
677
* surface should be created with the SVGA3D_BUFFER format.
678
*
679
* Index 0 in the array starts 'offset' bytes into the surface.
680
* Index 1 begins at byte 'offset + stride', etc. Array indices may
681
* not be negative.
682
*/
683
uint32 surfaceId;
684
uint32 offset;
685
uint32 stride;
686
}
687
#include "vmware_pack_end.h"
688
SVGA3dArray;
689
690
typedef
691
#include "vmware_pack_begin.h"
692
struct {
693
/*
694
* Describe a vertex array's data type, and define how it is to be
695
* used by the fixed function pipeline or the vertex shader. It
696
* isn't useful to have two VertexDecls with the same
697
* VertexArrayIdentity in one draw call.
698
*/
699
SVGA3dDeclType type;
700
SVGA3dDeclMethod method;
701
SVGA3dDeclUsage usage;
702
uint32 usageIndex;
703
}
704
#include "vmware_pack_end.h"
705
SVGA3dVertexArrayIdentity;
706
707
typedef
708
#include "vmware_pack_begin.h"
709
struct SVGA3dVertexDecl {
710
SVGA3dVertexArrayIdentity identity;
711
SVGA3dArray array;
712
SVGA3dArrayRangeHint rangeHint;
713
}
714
#include "vmware_pack_end.h"
715
SVGA3dVertexDecl;
716
717
typedef
718
#include "vmware_pack_begin.h"
719
struct SVGA3dPrimitiveRange {
720
/*
721
* Define a group of primitives to render, from sequential indices.
722
*
723
* The value of 'primitiveType' and 'primitiveCount' imply the
724
* total number of vertices that will be rendered.
725
*/
726
SVGA3dPrimitiveType primType;
727
uint32 primitiveCount;
728
729
/*
730
* Optional index buffer. If indexArray.surfaceId is
731
* SVGA3D_INVALID_ID, we render without an index buffer. Rendering
732
* without an index buffer is identical to rendering with an index
733
* buffer containing the sequence [0, 1, 2, 3, ...].
734
*
735
* If an index buffer is in use, indexWidth specifies the width in
736
* bytes of each index value. It must be less than or equal to
737
* indexArray.stride.
738
*
739
* (Currently, the SVGA3D device requires index buffers to be tightly
740
* packed. In other words, indexWidth == indexArray.stride)
741
*/
742
SVGA3dArray indexArray;
743
uint32 indexWidth;
744
745
/*
746
* Optional index bias. This number is added to all indices from
747
* indexArray before they are used as vertex array indices. This
748
* can be used in multiple ways:
749
*
750
* - When not using an indexArray, this bias can be used to
751
* specify where in the vertex arrays to begin rendering.
752
*
753
* - A positive number here is equivalent to increasing the
754
* offset in each vertex array.
755
*
756
* - A negative number can be used to render using a small
757
* vertex array and an index buffer that contains large
758
* values. This may be used by some applications that
759
* crop a vertex buffer without modifying their index
760
* buffer.
761
*
762
* Note that rendering with a negative bias value may be slower and
763
* use more memory than rendering with a positive or zero bias.
764
*/
765
int32 indexBias;
766
}
767
#include "vmware_pack_end.h"
768
SVGA3dPrimitiveRange;
769
770
typedef
771
#include "vmware_pack_begin.h"
772
struct {
773
uint32 cid;
774
uint32 numVertexDecls;
775
uint32 numRanges;
776
777
/*
778
* There are two variable size arrays after the
779
* SVGA3dCmdDrawPrimitives structure. In order,
780
* they are:
781
*
782
* 1. SVGA3dVertexDecl, quantity 'numVertexDecls', but no more than
783
* SVGA3D_MAX_VERTEX_ARRAYS;
784
* 2. SVGA3dPrimitiveRange, quantity 'numRanges', but no more than
785
* SVGA3D_MAX_DRAW_PRIMITIVE_RANGES;
786
* 3. Optionally, SVGA3dVertexDivisor, quantity 'numVertexDecls' (contains
787
* the frequency divisor for the corresponding vertex decl).
788
*/
789
}
790
#include "vmware_pack_end.h"
791
SVGA3dCmdDrawPrimitives; /* SVGA_3D_CMD_DRAWPRIMITIVES */
792
793
typedef
794
#include "vmware_pack_begin.h"
795
struct {
796
uint32 cid;
797
798
uint32 primitiveCount; // How many primitives to render
799
uint32 startVertexLocation; // Which vertex do we start rendering at.
800
801
uint8 primitiveType; // SVGA3dPrimitiveType
802
uint8 padding[3];
803
}
804
#include "vmware_pack_end.h"
805
SVGA3dCmdDraw;
806
807
typedef
808
#include "vmware_pack_begin.h"
809
struct {
810
uint32 cid;
811
812
uint8 primitiveType; // SVGA3dPrimitiveType
813
814
uint32 indexBufferSid; // Valid index buffer sid.
815
uint32 indexBufferOffset; // Byte offset into the vertex buffer, almost
816
// always 0 for DX9 guests, non-zero for OpenGL
817
// guests. We can't represent non-multiple of
818
// stride offsets in D3D9Renderer...
819
uint8 indexBufferStride; // Allowable values = 1, 2, or 4
820
821
int32 baseVertexLocation; // Bias applied to the index when selecting a
822
// vertex from the streams, may be negative
823
824
uint32 primitiveCount; // How many primitives to render
825
uint32 pad0;
826
uint16 pad1;
827
}
828
#include "vmware_pack_end.h"
829
SVGA3dCmdDrawIndexed;
830
831
typedef
832
#include "vmware_pack_begin.h"
833
struct {
834
/*
835
* Describe a vertex array's data type, and define how it is to be
836
* used by the fixed function pipeline or the vertex shader. It
837
* isn't useful to have two VertexDecls with the same
838
* VertexArrayIdentity in one draw call.
839
*/
840
uint16 streamOffset;
841
uint8 stream;
842
uint8 type; // SVGA3dDeclType
843
uint8 method; // SVGA3dDeclMethod
844
uint8 usage; // SVGA3dDeclUsage
845
uint8 usageIndex;
846
uint8 padding;
847
848
}
849
#include "vmware_pack_end.h"
850
SVGA3dVertexElement;
851
852
/*
853
* Should the vertex element respect the stream value? The high bit of the
854
* stream should be set to indicate that the stream should be respected. If
855
* the high bit is not set, the stream will be ignored and replaced by the index
856
* of the position of the currently considered vertex element.
857
*
858
* All guests should set this bit and correctly specify the stream going
859
* forward.
860
*/
861
#define SVGA3D_VERTEX_ELEMENT_RESPECT_STREAM (1 << 7)
862
863
typedef
864
#include "vmware_pack_begin.h"
865
struct {
866
uint32 cid;
867
868
uint32 numElements;
869
870
/*
871
* Followed by numElements SVGA3dVertexElement structures.
872
*
873
* If numElements < SVGA3D_MAX_VERTEX_ARRAYS, the remaining elements
874
* are cleared and will not be used by following draws.
875
*/
876
}
877
#include "vmware_pack_end.h"
878
SVGA3dCmdSetVertexDecls;
879
880
typedef
881
#include "vmware_pack_begin.h"
882
struct {
883
uint32 sid;
884
uint32 stride;
885
uint32 offset;
886
}
887
#include "vmware_pack_end.h"
888
SVGA3dVertexStream;
889
890
typedef
891
#include "vmware_pack_begin.h"
892
struct {
893
uint32 cid;
894
895
uint32 numStreams;
896
/*
897
* Followed by numStream SVGA3dVertexStream structures.
898
*
899
* If numStreams < SVGA3D_MAX_VERTEX_ARRAYS, the remaining streams
900
* are cleared and will not be used by following draws.
901
*/
902
}
903
#include "vmware_pack_end.h"
904
SVGA3dCmdSetVertexStreams;
905
906
typedef
907
#include "vmware_pack_begin.h"
908
struct {
909
uint32 cid;
910
uint32 numDivisors;
911
}
912
#include "vmware_pack_end.h"
913
SVGA3dCmdSetVertexDivisors;
914
915
typedef
916
#include "vmware_pack_begin.h"
917
struct {
918
uint32 stage;
919
SVGA3dTextureStateName name;
920
union {
921
uint32 value;
922
float floatValue;
923
};
924
}
925
#include "vmware_pack_end.h"
926
SVGA3dTextureState;
927
928
typedef
929
#include "vmware_pack_begin.h"
930
struct {
931
uint32 cid;
932
/* Followed by variable number of SVGA3dTextureState structures */
933
}
934
#include "vmware_pack_end.h"
935
SVGA3dCmdSetTextureState; /* SVGA_3D_CMD_SETTEXTURESTATE */
936
937
typedef
938
#include "vmware_pack_begin.h"
939
struct {
940
uint32 cid;
941
SVGA3dTransformType type;
942
float matrix[16];
943
}
944
#include "vmware_pack_end.h"
945
SVGA3dCmdSetTransform; /* SVGA_3D_CMD_SETTRANSFORM */
946
947
typedef
948
#include "vmware_pack_begin.h"
949
struct {
950
float min;
951
float max;
952
}
953
#include "vmware_pack_end.h"
954
SVGA3dZRange;
955
956
typedef
957
#include "vmware_pack_begin.h"
958
struct {
959
uint32 cid;
960
SVGA3dZRange zRange;
961
}
962
#include "vmware_pack_end.h"
963
SVGA3dCmdSetZRange; /* SVGA_3D_CMD_SETZRANGE */
964
965
typedef
966
#include "vmware_pack_begin.h"
967
struct {
968
float diffuse[4];
969
float ambient[4];
970
float specular[4];
971
float emissive[4];
972
float shininess;
973
}
974
#include "vmware_pack_end.h"
975
SVGA3dMaterial;
976
977
typedef
978
#include "vmware_pack_begin.h"
979
struct {
980
uint32 cid;
981
SVGA3dFace face;
982
SVGA3dMaterial material;
983
}
984
#include "vmware_pack_end.h"
985
SVGA3dCmdSetMaterial; /* SVGA_3D_CMD_SETMATERIAL */
986
987
typedef
988
#include "vmware_pack_begin.h"
989
struct {
990
uint32 cid;
991
uint32 index;
992
SVGA3dLightData data;
993
}
994
#include "vmware_pack_end.h"
995
SVGA3dCmdSetLightData; /* SVGA_3D_CMD_SETLIGHTDATA */
996
997
typedef
998
#include "vmware_pack_begin.h"
999
struct {
1000
uint32 cid;
1001
uint32 index;
1002
uint32 enabled;
1003
}
1004
#include "vmware_pack_end.h"
1005
SVGA3dCmdSetLightEnabled; /* SVGA_3D_CMD_SETLIGHTENABLED */
1006
1007
typedef
1008
#include "vmware_pack_begin.h"
1009
struct {
1010
uint32 cid;
1011
SVGA3dRect rect;
1012
}
1013
#include "vmware_pack_end.h"
1014
SVGA3dCmdSetViewport; /* SVGA_3D_CMD_SETVIEWPORT */
1015
1016
typedef
1017
#include "vmware_pack_begin.h"
1018
struct {
1019
uint32 cid;
1020
SVGA3dRect rect;
1021
}
1022
#include "vmware_pack_end.h"
1023
SVGA3dCmdSetScissorRect; /* SVGA_3D_CMD_SETSCISSORRECT */
1024
1025
typedef
1026
#include "vmware_pack_begin.h"
1027
struct {
1028
uint32 cid;
1029
uint32 index;
1030
float plane[4];
1031
}
1032
#include "vmware_pack_end.h"
1033
SVGA3dCmdSetClipPlane; /* SVGA_3D_CMD_SETCLIPPLANE */
1034
1035
typedef
1036
#include "vmware_pack_begin.h"
1037
struct {
1038
uint32 cid;
1039
uint32 shid;
1040
SVGA3dShaderType type;
1041
/* Followed by variable number of DWORDs for shader bycode */
1042
}
1043
#include "vmware_pack_end.h"
1044
SVGA3dCmdDefineShader; /* SVGA_3D_CMD_SHADER_DEFINE */
1045
1046
typedef
1047
#include "vmware_pack_begin.h"
1048
struct {
1049
uint32 cid;
1050
uint32 shid;
1051
SVGA3dShaderType type;
1052
}
1053
#include "vmware_pack_end.h"
1054
SVGA3dCmdDestroyShader; /* SVGA_3D_CMD_SHADER_DESTROY */
1055
1056
typedef
1057
#include "vmware_pack_begin.h"
1058
struct {
1059
uint32 cid;
1060
uint32 reg; /* register number */
1061
SVGA3dShaderType type;
1062
SVGA3dShaderConstType ctype;
1063
uint32 values[4];
1064
1065
/*
1066
* Followed by a variable number of additional values.
1067
*/
1068
}
1069
#include "vmware_pack_end.h"
1070
SVGA3dCmdSetShaderConst; /* SVGA_3D_CMD_SET_SHADER_CONST */
1071
1072
typedef
1073
#include "vmware_pack_begin.h"
1074
struct {
1075
uint32 cid;
1076
SVGA3dShaderType type;
1077
uint32 shid;
1078
}
1079
#include "vmware_pack_end.h"
1080
SVGA3dCmdSetShader; /* SVGA_3D_CMD_SET_SHADER */
1081
1082
typedef
1083
#include "vmware_pack_begin.h"
1084
struct {
1085
uint32 cid;
1086
SVGA3dQueryType type;
1087
}
1088
#include "vmware_pack_end.h"
1089
SVGA3dCmdBeginQuery; /* SVGA_3D_CMD_BEGIN_QUERY */
1090
1091
typedef
1092
#include "vmware_pack_begin.h"
1093
struct {
1094
uint32 cid;
1095
SVGA3dQueryType type;
1096
SVGAGuestPtr guestResult; /* Points to an SVGA3dQueryResult structure */
1097
}
1098
#include "vmware_pack_end.h"
1099
SVGA3dCmdEndQuery; /* SVGA_3D_CMD_END_QUERY */
1100
1101
1102
/*
1103
* SVGA3D_CMD_WAIT_FOR_QUERY --
1104
*
1105
* Will read the SVGA3dQueryResult structure pointed to by guestResult,
1106
* and if the state member is set to anything else than
1107
* SVGA3D_QUERYSTATE_PENDING, this command will always be a no-op.
1108
*
1109
* Otherwise, in addition to the query explicitly waited for,
1110
* All queries with the same type and issued with the same cid, for which
1111
* an SVGA_3D_CMD_END_QUERY command has previously been sent, will
1112
* be finished after execution of this command.
1113
*
1114
* A query will be identified by the gmrId and offset of the guestResult
1115
* member. If the device can't find an SVGA_3D_CMD_END_QUERY that has
1116
* been sent previously with an identical gmrId and offset, it will
1117
* effectively end all queries with an identical type issued with the
1118
* same cid, and the SVGA3dQueryResult structure pointed to by
1119
* guestResult will not be written to. This property can be used to
1120
* implement a query barrier for a given cid and query type.
1121
*/
1122
1123
typedef
1124
#include "vmware_pack_begin.h"
1125
struct {
1126
uint32 cid; /* Same parameters passed to END_QUERY */
1127
SVGA3dQueryType type;
1128
SVGAGuestPtr guestResult;
1129
}
1130
#include "vmware_pack_end.h"
1131
SVGA3dCmdWaitForQuery; /* SVGA_3D_CMD_WAIT_FOR_QUERY */
1132
1133
typedef
1134
#include "vmware_pack_begin.h"
1135
struct {
1136
uint32 totalSize; /* Set by guest before query is ended. */
1137
SVGA3dQueryState state; /* Set by host or guest. See SVGA3dQueryState. */
1138
union { /* Set by host on exit from PENDING state */
1139
uint32 result32;
1140
uint32 queryCookie; /* May be used to identify which QueryGetData this
1141
result corresponds to. */
1142
};
1143
}
1144
#include "vmware_pack_end.h"
1145
SVGA3dQueryResult;
1146
1147
1148
/*
1149
* SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN --
1150
*
1151
* This is a blit from an SVGA3D surface to a Screen Object.
1152
* This blit must be directed at a specific screen.
1153
*
1154
* The blit copies from a rectangular region of an SVGA3D surface
1155
* image to a rectangular region of a screen.
1156
*
1157
* This command takes an optional variable-length list of clipping
1158
* rectangles after the body of the command. If no rectangles are
1159
* specified, there is no clipping region. The entire destRect is
1160
* drawn to. If one or more rectangles are included, they describe
1161
* a clipping region. The clip rectangle coordinates are measured
1162
* relative to the top-left corner of destRect.
1163
*
1164
* The srcImage must be from mip=0 face=0.
1165
*
1166
* This supports scaling if the src and dest are of different sizes.
1167
*
1168
* Availability:
1169
* SVGA_FIFO_CAP_SCREEN_OBJECT
1170
*/
1171
1172
typedef
1173
#include "vmware_pack_begin.h"
1174
struct {
1175
SVGA3dSurfaceImageId srcImage;
1176
SVGASignedRect srcRect;
1177
uint32 destScreenId; /* Screen Object ID */
1178
SVGASignedRect destRect;
1179
/* Clipping: zero or more SVGASignedRects follow */
1180
}
1181
#include "vmware_pack_end.h"
1182
SVGA3dCmdBlitSurfaceToScreen; /* SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN */
1183
1184
typedef
1185
#include "vmware_pack_begin.h"
1186
struct {
1187
uint32 sid;
1188
SVGA3dTextureFilter filter;
1189
}
1190
#include "vmware_pack_end.h"
1191
SVGA3dCmdGenerateMipmaps; /* SVGA_3D_CMD_GENERATE_MIPMAPS */
1192
1193
typedef
1194
#include "vmware_pack_begin.h"
1195
struct {
1196
uint32 sid;
1197
}
1198
#include "vmware_pack_end.h"
1199
SVGA3dCmdActivateSurface; /* SVGA_3D_CMD_ACTIVATE_SURFACE */
1200
1201
typedef
1202
#include "vmware_pack_begin.h"
1203
struct {
1204
uint32 sid;
1205
}
1206
#include "vmware_pack_end.h"
1207
SVGA3dCmdDeactivateSurface; /* SVGA_3D_CMD_DEACTIVATE_SURFACE */
1208
1209
/*
1210
* Screen DMA command
1211
*
1212
* Available with SVGA_FIFO_CAP_SCREEN_OBJECT_2. The SVGA_CAP_3D device
1213
* cap bit is not required.
1214
*
1215
* - refBuffer and destBuffer are 32bit BGRX; refBuffer and destBuffer could
1216
* be different, but it is required that guest makes sure refBuffer has
1217
* exactly the same contents that were written to when last time screen DMA
1218
* command is received by host.
1219
*
1220
* - changemap is generated by lib/blit, and it has the changes from last
1221
* received screen DMA or more.
1222
*/
1223
1224
typedef
1225
#include "vmware_pack_begin.h"
1226
struct SVGA3dCmdScreenDMA {
1227
uint32 screenId;
1228
SVGAGuestImage refBuffer;
1229
SVGAGuestImage destBuffer;
1230
SVGAGuestImage changeMap;
1231
}
1232
#include "vmware_pack_end.h"
1233
SVGA3dCmdScreenDMA; /* SVGA_3D_CMD_SCREEN_DMA */
1234
1235
/*
1236
* Logic ops
1237
*/
1238
1239
#define SVGA3D_LOTRANSBLT_HONORALPHA (0x01)
1240
#define SVGA3D_LOSTRETCHBLT_MIRRORX (0x01)
1241
#define SVGA3D_LOSTRETCHBLT_MIRRORY (0x02)
1242
#define SVGA3D_LOALPHABLEND_SRCHASALPHA (0x01)
1243
1244
typedef
1245
#include "vmware_pack_begin.h"
1246
struct SVGA3dCmdLogicOpsBitBlt {
1247
/*
1248
* All LogicOps surfaces are one-level
1249
* surfaces so mipmap & face should always
1250
* be zero.
1251
*/
1252
SVGA3dSurfaceImageId src;
1253
SVGA3dSurfaceImageId dst;
1254
SVGA3dLogicOp logicOp;
1255
/* Followed by variable number of SVGA3dCopyBox structures */
1256
}
1257
#include "vmware_pack_end.h"
1258
SVGA3dCmdLogicOpsBitBlt; /* SVGA_3D_CMD_LOGICOPS_BITBLT */
1259
1260
1261
typedef
1262
#include "vmware_pack_begin.h"
1263
struct SVGA3dCmdLogicOpsTransBlt {
1264
/*
1265
* All LogicOps surfaces are one-level
1266
* surfaces so mipmap & face should always
1267
* be zero.
1268
*/
1269
SVGA3dSurfaceImageId src;
1270
SVGA3dSurfaceImageId dst;
1271
uint32 color;
1272
uint32 flags;
1273
SVGA3dBox srcBox;
1274
SVGA3dBox dstBox;
1275
}
1276
#include "vmware_pack_end.h"
1277
SVGA3dCmdLogicOpsTransBlt; /* SVGA_3D_CMD_LOGICOPS_TRANSBLT */
1278
1279
1280
typedef
1281
#include "vmware_pack_begin.h"
1282
struct SVGA3dCmdLogicOpsStretchBlt {
1283
/*
1284
* All LogicOps surfaces are one-level
1285
* surfaces so mipmap & face should always
1286
* be zero.
1287
*/
1288
SVGA3dSurfaceImageId src;
1289
SVGA3dSurfaceImageId dst;
1290
uint16 mode;
1291
uint16 flags;
1292
SVGA3dBox srcBox;
1293
SVGA3dBox dstBox;
1294
}
1295
#include "vmware_pack_end.h"
1296
SVGA3dCmdLogicOpsStretchBlt; /* SVGA_3D_CMD_LOGICOPS_STRETCHBLT */
1297
1298
1299
typedef
1300
#include "vmware_pack_begin.h"
1301
struct SVGA3dCmdLogicOpsColorFill {
1302
/*
1303
* All LogicOps surfaces are one-level
1304
* surfaces so mipmap & face should always
1305
* be zero.
1306
*/
1307
SVGA3dSurfaceImageId dst;
1308
uint32 color;
1309
SVGA3dLogicOp logicOp;
1310
/* Followed by variable number of SVGA3dRect structures. */
1311
}
1312
#include "vmware_pack_end.h"
1313
SVGA3dCmdLogicOpsColorFill; /* SVGA_3D_CMD_LOGICOPS_COLORFILL */
1314
1315
1316
typedef
1317
#include "vmware_pack_begin.h"
1318
struct SVGA3dCmdLogicOpsAlphaBlend {
1319
/*
1320
* All LogicOps surfaces are one-level
1321
* surfaces so mipmap & face should always
1322
* be zero.
1323
*/
1324
SVGA3dSurfaceImageId src;
1325
SVGA3dSurfaceImageId dst;
1326
uint32 alphaVal;
1327
uint32 flags;
1328
SVGA3dBox srcBox;
1329
SVGA3dBox dstBox;
1330
}
1331
#include "vmware_pack_end.h"
1332
SVGA3dCmdLogicOpsAlphaBlend; /* SVGA_3D_CMD_LOGICOPS_ALPHABLEND */
1333
1334
#define SVGA3D_CLEARTYPE_INVALID_GAMMA_INDEX 0xFFFFFFFF
1335
1336
#define SVGA3D_CLEARTYPE_GAMMA_WIDTH 512
1337
#define SVGA3D_CLEARTYPE_GAMMA_HEIGHT 16
1338
1339
typedef
1340
#include "vmware_pack_begin.h"
1341
struct SVGA3dCmdLogicOpsClearTypeBlend {
1342
/*
1343
* All LogicOps surfaces are one-level
1344
* surfaces so mipmap & face should always
1345
* be zero.
1346
*/
1347
SVGA3dSurfaceImageId tmp;
1348
SVGA3dSurfaceImageId dst;
1349
SVGA3dSurfaceImageId gammaSurf;
1350
SVGA3dSurfaceImageId alphaSurf;
1351
uint32 gamma;
1352
uint32 color;
1353
uint32 color2;
1354
int32 alphaOffsetX;
1355
int32 alphaOffsetY;
1356
/* Followed by variable number of SVGA3dBox structures */
1357
}
1358
#include "vmware_pack_end.h"
1359
SVGA3dCmdLogicOpsClearTypeBlend; /* SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND */
1360
1361
1362
/*
1363
* Guest-backed objects definitions.
1364
*/
1365
1366
typedef
1367
#include "vmware_pack_begin.h"
1368
struct {
1369
SVGAMobFormat ptDepth;
1370
uint32 sizeInBytes;
1371
PPN64 base;
1372
}
1373
#include "vmware_pack_end.h"
1374
SVGAOTableMobEntry;
1375
1376
typedef
1377
#include "vmware_pack_begin.h"
1378
struct {
1379
SVGA3dSurfaceFormat format;
1380
SVGA3dSurface1Flags surface1Flags;
1381
uint32 numMipLevels;
1382
uint32 multisampleCount;
1383
SVGA3dTextureFilter autogenFilter;
1384
SVGA3dSize size;
1385
SVGAMobId mobid;
1386
uint32 arraySize;
1387
uint32 mobPitch;
1388
SVGA3dSurface2Flags surface2Flags;
1389
uint8 multisamplePattern;
1390
uint8 pad0[3];
1391
uint32 pad1[3];
1392
}
1393
#include "vmware_pack_end.h"
1394
SVGAOTableSurfaceEntry;
1395
1396
typedef
1397
#include "vmware_pack_begin.h"
1398
struct {
1399
uint32 cid;
1400
SVGAMobId mobid;
1401
}
1402
#include "vmware_pack_end.h"
1403
SVGAOTableContextEntry;
1404
1405
typedef
1406
#include "vmware_pack_begin.h"
1407
struct {
1408
SVGA3dShaderType type;
1409
uint32 sizeInBytes;
1410
uint32 offsetInBytes;
1411
SVGAMobId mobid;
1412
}
1413
#include "vmware_pack_end.h"
1414
SVGAOTableShaderEntry;
1415
1416
#define SVGA_STFLAG_PRIMARY (1 << 0)
1417
#define SVGA_STFLAG_RESERVED (1 << 1) /* Added with cap SVGA_CAP_HP_CMD_QUEUE */
1418
typedef uint32 SVGAScreenTargetFlags;
1419
1420
typedef
1421
#include "vmware_pack_begin.h"
1422
struct {
1423
SVGA3dSurfaceImageId image;
1424
uint32 width;
1425
uint32 height;
1426
int32 xRoot;
1427
int32 yRoot;
1428
SVGAScreenTargetFlags flags;
1429
uint32 dpi;
1430
uint32 pad[7];
1431
}
1432
#include "vmware_pack_end.h"
1433
SVGAOTableScreenTargetEntry;
1434
1435
typedef
1436
#include "vmware_pack_begin.h"
1437
struct {
1438
float value[4];
1439
}
1440
#include "vmware_pack_end.h"
1441
SVGA3dShaderConstFloat;
1442
1443
typedef
1444
#include "vmware_pack_begin.h"
1445
struct {
1446
int32 value[4];
1447
}
1448
#include "vmware_pack_end.h"
1449
SVGA3dShaderConstInt;
1450
1451
typedef
1452
#include "vmware_pack_begin.h"
1453
struct {
1454
uint32 value;
1455
}
1456
#include "vmware_pack_end.h"
1457
SVGA3dShaderConstBool;
1458
1459
typedef
1460
#include "vmware_pack_begin.h"
1461
struct {
1462
uint16 streamOffset;
1463
uint8 stream;
1464
uint8 type;
1465
uint8 methodUsage;
1466
uint8 usageIndex;
1467
}
1468
#include "vmware_pack_end.h"
1469
SVGAGBVertexElement;
1470
1471
typedef
1472
#include "vmware_pack_begin.h"
1473
struct {
1474
uint32 sid;
1475
uint16 stride;
1476
uint32 offset;
1477
}
1478
#include "vmware_pack_end.h"
1479
SVGAGBVertexStream;
1480
typedef
1481
#include "vmware_pack_begin.h"
1482
struct {
1483
SVGA3dRect viewport;
1484
SVGA3dRect scissorRect;
1485
SVGA3dZRange zRange;
1486
1487
SVGA3dSurfaceImageId renderTargets[SVGA3D_RT_MAX];
1488
SVGAGBVertexElement decl1[4];
1489
1490
uint32 renderStates[SVGA3D_RS_MAX];
1491
SVGAGBVertexElement decl2[18];
1492
uint32 pad0[2];
1493
1494
struct {
1495
SVGA3dFace face;
1496
SVGA3dMaterial material;
1497
} material;
1498
1499
float clipPlanes[SVGA3D_NUM_CLIPPLANES][4];
1500
float matrices[SVGA3D_TRANSFORM_MAX][16];
1501
1502
SVGA3dBool lightEnabled[SVGA3D_NUM_LIGHTS];
1503
SVGA3dLightData lightData[SVGA3D_NUM_LIGHTS];
1504
1505
/*
1506
* Shaders currently bound
1507
*/
1508
uint32 shaders[SVGA3D_NUM_SHADERTYPE_PREDX];
1509
SVGAGBVertexElement decl3[10];
1510
uint32 pad1[3];
1511
1512
uint32 occQueryActive;
1513
uint32 occQueryValue;
1514
1515
/*
1516
* Int/Bool Shader constants
1517
*/
1518
SVGA3dShaderConstInt pShaderIValues[SVGA3D_CONSTINTREG_MAX];
1519
SVGA3dShaderConstInt vShaderIValues[SVGA3D_CONSTINTREG_MAX];
1520
uint16 pShaderBValues;
1521
uint16 vShaderBValues;
1522
1523
1524
SVGAGBVertexStream streams[SVGA3D_MAX_VERTEX_ARRAYS];
1525
SVGA3dVertexDivisor divisors[SVGA3D_MAX_VERTEX_ARRAYS];
1526
uint32 numVertexDecls;
1527
uint32 numVertexStreams;
1528
uint32 numVertexDivisors;
1529
uint32 pad2[30];
1530
1531
/*
1532
* Texture Stages
1533
*
1534
* SVGA3D_TS_INVALID through SVGA3D_TS_CONSTANT are in the
1535
* textureStages array.
1536
* SVGA3D_TS_COLOR_KEY is in tsColorKey.
1537
*/
1538
uint32 tsColorKey[SVGA3D_NUM_TEXTURE_UNITS];
1539
uint32 textureStages[SVGA3D_NUM_TEXTURE_UNITS][SVGA3D_TS_CONSTANT + 1];
1540
uint32 tsColorKeyEnable[SVGA3D_NUM_TEXTURE_UNITS];
1541
1542
/*
1543
* Float Shader constants.
1544
*/
1545
SVGA3dShaderConstFloat pShaderFValues[SVGA3D_CONSTREG_MAX];
1546
SVGA3dShaderConstFloat vShaderFValues[SVGA3D_CONSTREG_MAX];
1547
}
1548
#include "vmware_pack_end.h"
1549
SVGAGBContextData;
1550
#define SVGA3D_CONTEXT_DATA_SIZE (sizeof(SVGAGBContextData))
1551
1552
/*
1553
* SVGA3dCmdSetOTableBase --
1554
*
1555
* This command allows the guest to specify the base PPN of the
1556
* specified object table.
1557
*/
1558
1559
typedef
1560
#include "vmware_pack_begin.h"
1561
struct {
1562
SVGAOTableType type;
1563
PPN baseAddress;
1564
uint32 sizeInBytes;
1565
uint32 validSizeInBytes;
1566
SVGAMobFormat ptDepth;
1567
}
1568
#include "vmware_pack_end.h"
1569
SVGA3dCmdSetOTableBase; /* SVGA_3D_CMD_SET_OTABLE_BASE */
1570
1571
typedef
1572
#include "vmware_pack_begin.h"
1573
struct {
1574
SVGAOTableType type;
1575
PPN64 baseAddress;
1576
uint32 sizeInBytes;
1577
uint32 validSizeInBytes;
1578
SVGAMobFormat ptDepth;
1579
}
1580
#include "vmware_pack_end.h"
1581
SVGA3dCmdSetOTableBase64; /* SVGA_3D_CMD_SET_OTABLE_BASE64 */
1582
1583
/*
1584
* Guests using SVGA_3D_CMD_GROW_OTABLE are promising that
1585
* the new OTable contains the same contents as the old one, except possibly
1586
* for some new invalid entries at the end.
1587
*
1588
* (Otherwise, guests should use one of the SetOTableBase commands.)
1589
*/
1590
typedef
1591
#include "vmware_pack_begin.h"
1592
struct {
1593
SVGAOTableType type;
1594
PPN64 baseAddress;
1595
uint32 sizeInBytes;
1596
uint32 validSizeInBytes;
1597
SVGAMobFormat ptDepth;
1598
}
1599
#include "vmware_pack_end.h"
1600
SVGA3dCmdGrowOTable; /* SVGA_3D_CMD_GROW_OTABLE */
1601
1602
typedef
1603
#include "vmware_pack_begin.h"
1604
struct {
1605
SVGAOTableType type;
1606
}
1607
#include "vmware_pack_end.h"
1608
SVGA3dCmdReadbackOTable; /* SVGA_3D_CMD_READBACK_OTABLE */
1609
1610
/*
1611
* Define a memory object (Mob) in the OTable.
1612
*/
1613
1614
typedef
1615
#include "vmware_pack_begin.h"
1616
struct SVGA3dCmdDefineGBMob {
1617
SVGAMobId mobid;
1618
SVGAMobFormat ptDepth;
1619
PPN base;
1620
uint32 sizeInBytes;
1621
}
1622
#include "vmware_pack_end.h"
1623
SVGA3dCmdDefineGBMob; /* SVGA_3D_CMD_DEFINE_GB_MOB */
1624
1625
1626
/*
1627
* Destroys an object in the OTable.
1628
*/
1629
1630
typedef
1631
#include "vmware_pack_begin.h"
1632
struct SVGA3dCmdDestroyGBMob {
1633
SVGAMobId mobid;
1634
}
1635
#include "vmware_pack_end.h"
1636
SVGA3dCmdDestroyGBMob; /* SVGA_3D_CMD_DESTROY_GB_MOB */
1637
1638
/*
1639
* Define a memory object (Mob) in the OTable with a PPN64 base.
1640
*/
1641
1642
typedef
1643
#include "vmware_pack_begin.h"
1644
struct SVGA3dCmdDefineGBMob64 {
1645
SVGAMobId mobid;
1646
SVGAMobFormat ptDepth;
1647
PPN64 base;
1648
uint32 sizeInBytes;
1649
}
1650
#include "vmware_pack_end.h"
1651
SVGA3dCmdDefineGBMob64; /* SVGA_3D_CMD_DEFINE_GB_MOB64 */
1652
1653
/*
1654
* Redefine an object in the OTable with PPN64 base.
1655
*/
1656
1657
typedef
1658
#include "vmware_pack_begin.h"
1659
struct SVGA3dCmdRedefineGBMob64 {
1660
SVGAMobId mobid;
1661
SVGAMobFormat ptDepth;
1662
PPN64 base;
1663
uint32 sizeInBytes;
1664
}
1665
#include "vmware_pack_end.h"
1666
SVGA3dCmdRedefineGBMob64; /* SVGA_3D_CMD_REDEFINE_GB_MOB64 */
1667
1668
/*
1669
* Notification that the page tables have been modified.
1670
*/
1671
1672
typedef
1673
#include "vmware_pack_begin.h"
1674
struct SVGA3dCmdUpdateGBMobMapping {
1675
SVGAMobId mobid;
1676
}
1677
#include "vmware_pack_end.h"
1678
SVGA3dCmdUpdateGBMobMapping; /* SVGA_3D_CMD_UPDATE_GB_MOB_MAPPING */
1679
1680
/*
1681
* Define a guest-backed surface.
1682
*/
1683
1684
typedef
1685
#include "vmware_pack_begin.h"
1686
struct SVGA3dCmdDefineGBSurface {
1687
uint32 sid;
1688
SVGA3dSurface1Flags surfaceFlags;
1689
SVGA3dSurfaceFormat format;
1690
uint32 numMipLevels;
1691
uint32 multisampleCount;
1692
SVGA3dTextureFilter autogenFilter;
1693
SVGA3dSize size;
1694
}
1695
#include "vmware_pack_end.h"
1696
SVGA3dCmdDefineGBSurface; /* SVGA_3D_CMD_DEFINE_GB_SURFACE */
1697
1698
/*
1699
* Defines a guest-backed surface, adding the arraySize field.
1700
*
1701
* See also:
1702
* http://msdn.microsoft.com/en-us/library/ff541697%28v=VS.85%29.aspx
1703
*/
1704
typedef
1705
#include "vmware_pack_begin.h"
1706
struct SVGA3dCmdDefineGBSurface_v2 {
1707
uint32 sid;
1708
SVGA3dSurface1Flags surfaceFlags;
1709
SVGA3dSurfaceFormat format;
1710
uint32 numMipLevels;
1711
uint32 multisampleCount;
1712
SVGA3dTextureFilter autogenFilter;
1713
SVGA3dSize size;
1714
uint32 arraySize;
1715
uint32 pad;
1716
}
1717
#include "vmware_pack_end.h"
1718
SVGA3dCmdDefineGBSurface_v2; /* SVGA_3D_CMD_DEFINE_GB_SURFACE_V2 */
1719
1720
/*
1721
* Defines a guest-backed surface, adding the larger flags.
1722
*/
1723
typedef
1724
#include "vmware_pack_begin.h"
1725
struct SVGA3dCmdDefineGBSurface_v3 {
1726
uint32 sid;
1727
SVGA3dSurfaceAllFlags surfaceFlags;
1728
SVGA3dSurfaceFormat format;
1729
uint32 numMipLevels;
1730
uint32 multisampleCount;
1731
SVGA3dMSPattern multisamplePattern;
1732
SVGA3dTextureFilter autogenFilter;
1733
SVGA3dSize size;
1734
uint32 arraySize;
1735
}
1736
#include "vmware_pack_end.h"
1737
SVGA3dCmdDefineGBSurface_v3; /* SVGA_3D_CMD_DEFINE_GB_SURFACE_V3 */
1738
1739
/*
1740
* Destroy a guest-backed surface.
1741
*/
1742
1743
typedef
1744
#include "vmware_pack_begin.h"
1745
struct SVGA3dCmdDestroyGBSurface {
1746
uint32 sid;
1747
}
1748
#include "vmware_pack_end.h"
1749
SVGA3dCmdDestroyGBSurface; /* SVGA_3D_CMD_DESTROY_GB_SURFACE */
1750
1751
/*
1752
* Bind a guest-backed surface to a mob.
1753
*/
1754
1755
typedef
1756
#include "vmware_pack_begin.h"
1757
struct SVGA3dCmdBindGBSurface {
1758
uint32 sid;
1759
SVGAMobId mobid;
1760
}
1761
#include "vmware_pack_end.h"
1762
SVGA3dCmdBindGBSurface; /* SVGA_3D_CMD_BIND_GB_SURFACE */
1763
1764
typedef
1765
#include "vmware_pack_begin.h"
1766
struct SVGA3dCmdBindGBSurfaceWithPitch {
1767
uint32 sid;
1768
SVGAMobId mobid;
1769
uint32 baseLevelPitch;
1770
}
1771
#include "vmware_pack_end.h"
1772
SVGA3dCmdBindGBSurfaceWithPitch; /* SVGA_3D_CMD_BIND_GB_SURFACE_WITH_PITCH */
1773
1774
/*
1775
* Conditionally bind a mob to a guest-backed surface if testMobid
1776
* matches the currently bound mob. Optionally issue a
1777
* readback/update on the surface while it is still bound to the old
1778
* mobid if the mobid is changed by this command.
1779
*/
1780
1781
#define SVGA3D_COND_BIND_GB_SURFACE_FLAG_READBACK (1 << 0)
1782
#define SVGA3D_COND_BIND_GB_SURFACE_FLAG_UPDATE (1 << 1)
1783
1784
typedef
1785
#include "vmware_pack_begin.h"
1786
struct SVGA3dCmdCondBindGBSurface {
1787
uint32 sid;
1788
SVGAMobId testMobid;
1789
SVGAMobId mobid;
1790
uint32 flags;
1791
}
1792
#include "vmware_pack_end.h"
1793
SVGA3dCmdCondBindGBSurface; /* SVGA_3D_CMD_COND_BIND_GB_SURFACE */
1794
1795
/*
1796
* Update an image in a guest-backed surface.
1797
* (Inform the device that the guest-contents have been updated.)
1798
*/
1799
1800
typedef
1801
#include "vmware_pack_begin.h"
1802
struct SVGA3dCmdUpdateGBImage {
1803
SVGA3dSurfaceImageId image;
1804
SVGA3dBox box;
1805
}
1806
#include "vmware_pack_end.h"
1807
SVGA3dCmdUpdateGBImage; /* SVGA_3D_CMD_UPDATE_GB_IMAGE */
1808
1809
/*
1810
* Update an entire guest-backed surface.
1811
* (Inform the device that the guest-contents have been updated.)
1812
*/
1813
1814
typedef
1815
#include "vmware_pack_begin.h"
1816
struct SVGA3dCmdUpdateGBSurface {
1817
uint32 sid;
1818
}
1819
#include "vmware_pack_end.h"
1820
SVGA3dCmdUpdateGBSurface; /* SVGA_3D_CMD_UPDATE_GB_SURFACE */
1821
1822
/*
1823
* Readback an image in a guest-backed surface.
1824
* (Request the device to flush the dirty contents into the guest.)
1825
*/
1826
1827
typedef
1828
#include "vmware_pack_begin.h"
1829
struct SVGA3dCmdReadbackGBImage {
1830
SVGA3dSurfaceImageId image;
1831
}
1832
#include "vmware_pack_end.h"
1833
SVGA3dCmdReadbackGBImage; /* SVGA_3D_CMD_READBACK_GB_IMAGE */
1834
1835
/*
1836
* Readback an entire guest-backed surface.
1837
* (Request the device to flush the dirty contents into the guest.)
1838
*/
1839
1840
typedef
1841
#include "vmware_pack_begin.h"
1842
struct SVGA3dCmdReadbackGBSurface {
1843
uint32 sid;
1844
}
1845
#include "vmware_pack_end.h"
1846
SVGA3dCmdReadbackGBSurface; /* SVGA_3D_CMD_READBACK_GB_SURFACE */
1847
1848
/*
1849
* Readback a sub rect of an image in a guest-backed surface. After
1850
* issuing this command the driver is required to issue an update call
1851
* of the same region before issuing any other commands that reference
1852
* this surface or rendering is not guaranteed.
1853
*/
1854
1855
typedef
1856
#include "vmware_pack_begin.h"
1857
struct SVGA3dCmdReadbackGBImagePartial {
1858
SVGA3dSurfaceImageId image;
1859
SVGA3dBox box;
1860
uint32 invertBox;
1861
}
1862
#include "vmware_pack_end.h"
1863
SVGA3dCmdReadbackGBImagePartial; /* SVGA_3D_CMD_READBACK_GB_IMAGE_PARTIAL */
1864
1865
1866
/*
1867
* Invalidate an image in a guest-backed surface.
1868
* (Notify the device that the contents can be lost.)
1869
*/
1870
1871
typedef
1872
#include "vmware_pack_begin.h"
1873
struct SVGA3dCmdInvalidateGBImage {
1874
SVGA3dSurfaceImageId image;
1875
}
1876
#include "vmware_pack_end.h"
1877
SVGA3dCmdInvalidateGBImage; /* SVGA_3D_CMD_INVALIDATE_GB_IMAGE */
1878
1879
/*
1880
* Invalidate an entire guest-backed surface.
1881
* (Notify the device that the contents if all images can be lost.)
1882
*/
1883
1884
typedef
1885
#include "vmware_pack_begin.h"
1886
struct SVGA3dCmdInvalidateGBSurface {
1887
uint32 sid;
1888
}
1889
#include "vmware_pack_end.h"
1890
SVGA3dCmdInvalidateGBSurface; /* SVGA_3D_CMD_INVALIDATE_GB_SURFACE */
1891
1892
/*
1893
* Invalidate a sub rect of an image in a guest-backed surface. After
1894
* issuing this command the driver is required to issue an update call
1895
* of the same region before issuing any other commands that reference
1896
* this surface or rendering is not guaranteed.
1897
*/
1898
1899
typedef
1900
#include "vmware_pack_begin.h"
1901
struct SVGA3dCmdInvalidateGBImagePartial {
1902
SVGA3dSurfaceImageId image;
1903
SVGA3dBox box;
1904
uint32 invertBox;
1905
}
1906
#include "vmware_pack_end.h"
1907
SVGA3dCmdInvalidateGBImagePartial; /* SVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL */
1908
1909
1910
/*
1911
* Define a guest-backed context.
1912
*/
1913
1914
typedef
1915
#include "vmware_pack_begin.h"
1916
struct SVGA3dCmdDefineGBContext {
1917
uint32 cid;
1918
}
1919
#include "vmware_pack_end.h"
1920
SVGA3dCmdDefineGBContext; /* SVGA_3D_CMD_DEFINE_GB_CONTEXT */
1921
1922
/*
1923
* Destroy a guest-backed context.
1924
*/
1925
1926
typedef
1927
#include "vmware_pack_begin.h"
1928
struct SVGA3dCmdDestroyGBContext {
1929
uint32 cid;
1930
}
1931
#include "vmware_pack_end.h"
1932
SVGA3dCmdDestroyGBContext; /* SVGA_3D_CMD_DESTROY_GB_CONTEXT */
1933
1934
/*
1935
* Bind a guest-backed context.
1936
*
1937
* validContents should be set to 0 for new contexts,
1938
* and 1 if this is an old context which is getting paged
1939
* back on to the device.
1940
*
1941
* For new contexts, it is recommended that the driver
1942
* issue commands to initialize all interesting state
1943
* prior to rendering.
1944
*/
1945
1946
typedef
1947
#include "vmware_pack_begin.h"
1948
struct SVGA3dCmdBindGBContext {
1949
uint32 cid;
1950
SVGAMobId mobid;
1951
uint32 validContents;
1952
}
1953
#include "vmware_pack_end.h"
1954
SVGA3dCmdBindGBContext; /* SVGA_3D_CMD_BIND_GB_CONTEXT */
1955
1956
/*
1957
* Readback a guest-backed context.
1958
* (Request that the device flush the contents back into guest memory.)
1959
*/
1960
1961
typedef
1962
#include "vmware_pack_begin.h"
1963
struct SVGA3dCmdReadbackGBContext {
1964
uint32 cid;
1965
}
1966
#include "vmware_pack_end.h"
1967
SVGA3dCmdReadbackGBContext; /* SVGA_3D_CMD_READBACK_GB_CONTEXT */
1968
1969
/*
1970
* Invalidate a guest-backed context.
1971
*/
1972
typedef
1973
#include "vmware_pack_begin.h"
1974
struct SVGA3dCmdInvalidateGBContext {
1975
uint32 cid;
1976
}
1977
#include "vmware_pack_end.h"
1978
SVGA3dCmdInvalidateGBContext; /* SVGA_3D_CMD_INVALIDATE_GB_CONTEXT */
1979
1980
/*
1981
* Define a guest-backed shader.
1982
*/
1983
1984
typedef
1985
#include "vmware_pack_begin.h"
1986
struct SVGA3dCmdDefineGBShader {
1987
uint32 shid;
1988
SVGA3dShaderType type;
1989
uint32 sizeInBytes;
1990
}
1991
#include "vmware_pack_end.h"
1992
SVGA3dCmdDefineGBShader; /* SVGA_3D_CMD_DEFINE_GB_SHADER */
1993
1994
/*
1995
* Bind a guest-backed shader.
1996
*/
1997
1998
typedef
1999
#include "vmware_pack_begin.h"
2000
struct SVGA3dCmdBindGBShader {
2001
uint32 shid;
2002
SVGAMobId mobid;
2003
uint32 offsetInBytes;
2004
}
2005
#include "vmware_pack_end.h"
2006
SVGA3dCmdBindGBShader; /* SVGA_3D_CMD_BIND_GB_SHADER */
2007
2008
/*
2009
* Destroy a guest-backed shader.
2010
*/
2011
2012
typedef
2013
#include "vmware_pack_begin.h"
2014
struct SVGA3dCmdDestroyGBShader {
2015
uint32 shid;
2016
}
2017
#include "vmware_pack_end.h"
2018
SVGA3dCmdDestroyGBShader; /* SVGA_3D_CMD_DESTROY_GB_SHADER */
2019
2020
typedef
2021
#include "vmware_pack_begin.h"
2022
struct {
2023
uint32 cid;
2024
uint32 regStart;
2025
SVGA3dShaderType shaderType;
2026
SVGA3dShaderConstType constType;
2027
2028
/*
2029
* Followed by a variable number of shader constants.
2030
*
2031
* Note that FLOAT and INT constants are 4-dwords in length, while
2032
* BOOL constants are 1-dword in length.
2033
*/
2034
}
2035
#include "vmware_pack_end.h"
2036
SVGA3dCmdSetGBShaderConstInline; /* SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE */
2037
2038
2039
typedef
2040
#include "vmware_pack_begin.h"
2041
struct {
2042
uint32 cid;
2043
SVGA3dQueryType type;
2044
}
2045
#include "vmware_pack_end.h"
2046
SVGA3dCmdBeginGBQuery; /* SVGA_3D_CMD_BEGIN_GB_QUERY */
2047
2048
typedef
2049
#include "vmware_pack_begin.h"
2050
struct {
2051
uint32 cid;
2052
SVGA3dQueryType type;
2053
SVGAMobId mobid;
2054
uint32 offset;
2055
}
2056
#include "vmware_pack_end.h"
2057
SVGA3dCmdEndGBQuery; /* SVGA_3D_CMD_END_GB_QUERY */
2058
2059
2060
/*
2061
* SVGA_3D_CMD_WAIT_FOR_GB_QUERY --
2062
*
2063
* The semantics of this command are identical to the
2064
* SVGA_3D_CMD_WAIT_FOR_QUERY except that the results are written
2065
* to a Mob instead of a GMR.
2066
*/
2067
2068
typedef
2069
#include "vmware_pack_begin.h"
2070
struct {
2071
uint32 cid;
2072
SVGA3dQueryType type;
2073
SVGAMobId mobid;
2074
uint32 offset;
2075
}
2076
#include "vmware_pack_end.h"
2077
SVGA3dCmdWaitForGBQuery; /* SVGA_3D_CMD_WAIT_FOR_GB_QUERY */
2078
2079
2080
typedef
2081
#include "vmware_pack_begin.h"
2082
struct {
2083
SVGAMobId mobid;
2084
uint32 mustBeZero;
2085
uint32 initialized;
2086
}
2087
#include "vmware_pack_end.h"
2088
SVGA3dCmdEnableGart; /* SVGA_3D_CMD_ENABLE_GART */
2089
2090
typedef
2091
#include "vmware_pack_begin.h"
2092
struct {
2093
SVGAMobId mobid;
2094
uint32 gartOffset;
2095
}
2096
#include "vmware_pack_end.h"
2097
SVGA3dCmdMapMobIntoGart; /* SVGA_3D_CMD_MAP_MOB_INTO_GART */
2098
2099
2100
typedef
2101
#include "vmware_pack_begin.h"
2102
struct {
2103
uint32 gartOffset;
2104
uint32 numPages;
2105
}
2106
#include "vmware_pack_end.h"
2107
SVGA3dCmdUnmapGartRange; /* SVGA_3D_CMD_UNMAP_GART_RANGE */
2108
2109
2110
/*
2111
* Screen Targets
2112
*/
2113
2114
typedef
2115
#include "vmware_pack_begin.h"
2116
struct {
2117
uint32 stid;
2118
uint32 width;
2119
uint32 height;
2120
int32 xRoot;
2121
int32 yRoot;
2122
SVGAScreenTargetFlags flags;
2123
2124
/*
2125
* The physical DPI that the guest expects this screen displayed at.
2126
*
2127
* Guests which are not DPI-aware should set this to zero.
2128
*/
2129
uint32 dpi;
2130
}
2131
#include "vmware_pack_end.h"
2132
SVGA3dCmdDefineGBScreenTarget; /* SVGA_3D_CMD_DEFINE_GB_SCREENTARGET */
2133
2134
typedef
2135
#include "vmware_pack_begin.h"
2136
struct {
2137
uint32 stid;
2138
}
2139
#include "vmware_pack_end.h"
2140
SVGA3dCmdDestroyGBScreenTarget; /* SVGA_3D_CMD_DESTROY_GB_SCREENTARGET */
2141
2142
typedef
2143
#include "vmware_pack_begin.h"
2144
struct {
2145
uint32 stid;
2146
SVGA3dSurfaceImageId image;
2147
}
2148
#include "vmware_pack_end.h"
2149
SVGA3dCmdBindGBScreenTarget; /* SVGA_3D_CMD_BIND_GB_SCREENTARGET */
2150
2151
typedef
2152
#include "vmware_pack_begin.h"
2153
struct {
2154
uint32 stid;
2155
SVGA3dRect rect;
2156
}
2157
#include "vmware_pack_end.h"
2158
SVGA3dCmdUpdateGBScreenTarget; /* SVGA_3D_CMD_UPDATE_GB_SCREENTARGET */
2159
2160
typedef
2161
#include "vmware_pack_begin.h"
2162
struct SVGA3dCmdGBScreenDMA {
2163
uint32 screenId;
2164
uint32 dead;
2165
SVGAMobId destMobID;
2166
uint32 destPitch;
2167
SVGAMobId changeMapMobID;
2168
}
2169
#include "vmware_pack_end.h"
2170
SVGA3dCmdGBScreenDMA; /* SVGA_3D_CMD_GB_SCREEN_DMA */
2171
2172
typedef
2173
#include "vmware_pack_begin.h"
2174
struct {
2175
uint32 value;
2176
uint32 mobId;
2177
uint32 mobOffset;
2178
}
2179
#include "vmware_pack_end.h"
2180
SVGA3dCmdGBMobFence; /* SVGA_3D_CMD_GB_MOB_FENCE */
2181
2182
typedef
2183
#include "vmware_pack_begin.h"
2184
struct {
2185
uint32 stid;
2186
SVGA3dSurfaceImageId dest;
2187
2188
uint32 statusMobId;
2189
uint32 statusMobOffset;
2190
2191
/* Reserved fields */
2192
uint32 mustBeInvalidId;
2193
uint32 mustBeZero;
2194
}
2195
#include "vmware_pack_end.h"
2196
SVGA3dCmdScreenCopy; /* SVGA_3D_CMD_SCREEN_COPY */
2197
2198
#define SVGA_SCREEN_COPY_STATUS_FAILURE 0x00
2199
#define SVGA_SCREEN_COPY_STATUS_SUCCESS 0x01
2200
#define SVGA_SCREEN_COPY_STATUS_INVALID 0xFFFFFFFF
2201
2202
#endif // _SVGA3D_CMD_H_
2203
2204