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_ */ 2053