root/drivers/gpu/drm/vmwgfx/device_include/svga3d_cmd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */