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