linux/drivers/gpu/drm/vmwgfx/device_include/svga3d_dx.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 OR MIT */
   2/**********************************************************
   3 * Copyright 2012-2019 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_dx.h --
  29 *
  30 *       SVGA 3d hardware definitions for DX10 support.
  31 */
  32
  33#ifndef _SVGA3D_DX_H_
  34#define _SVGA3D_DX_H_
  35
  36#define INCLUDE_ALLOW_MODULE
  37#define INCLUDE_ALLOW_USERLEVEL
  38#define INCLUDE_ALLOW_VMCORE
  39#include "includeCheck.h"
  40
  41#include "svga3d_limits.h"
  42
  43#define SVGA3D_INPUT_MIN               0
  44#define SVGA3D_INPUT_PER_VERTEX_DATA   0
  45#define SVGA3D_INPUT_PER_INSTANCE_DATA 1
  46#define SVGA3D_INPUT_MAX               2
  47typedef uint32 SVGA3dInputClassification;
  48
  49#define SVGA3D_RESOURCE_TYPE_MIN      1
  50#define SVGA3D_RESOURCE_BUFFER        1
  51#define SVGA3D_RESOURCE_TEXTURE1D     2
  52#define SVGA3D_RESOURCE_TEXTURE2D     3
  53#define SVGA3D_RESOURCE_TEXTURE3D     4
  54#define SVGA3D_RESOURCE_TEXTURECUBE   5
  55#define SVGA3D_RESOURCE_TYPE_DX10_MAX 6
  56#define SVGA3D_RESOURCE_BUFFEREX      6
  57#define SVGA3D_RESOURCE_TYPE_MAX      7
  58typedef uint32 SVGA3dResourceType;
  59
  60#define SVGA3D_COLOR_WRITE_ENABLE_RED     (1 << 0)
  61#define SVGA3D_COLOR_WRITE_ENABLE_GREEN   (1 << 1)
  62#define SVGA3D_COLOR_WRITE_ENABLE_BLUE    (1 << 2)
  63#define SVGA3D_COLOR_WRITE_ENABLE_ALPHA   (1 << 3)
  64#define SVGA3D_COLOR_WRITE_ENABLE_ALL     (SVGA3D_COLOR_WRITE_ENABLE_RED |   \
  65                                           SVGA3D_COLOR_WRITE_ENABLE_GREEN | \
  66                                           SVGA3D_COLOR_WRITE_ENABLE_BLUE |  \
  67                                           SVGA3D_COLOR_WRITE_ENABLE_ALPHA)
  68typedef uint8 SVGA3dColorWriteEnable;
  69
  70#define SVGA3D_DEPTH_WRITE_MASK_ZERO   0
  71#define SVGA3D_DEPTH_WRITE_MASK_ALL    1
  72typedef uint8 SVGA3dDepthWriteMask;
  73
  74#define SVGA3D_FILTER_MIP_LINEAR  (1 << 0)
  75#define SVGA3D_FILTER_MAG_LINEAR  (1 << 2)
  76#define SVGA3D_FILTER_MIN_LINEAR  (1 << 4)
  77#define SVGA3D_FILTER_ANISOTROPIC (1 << 6)
  78#define SVGA3D_FILTER_COMPARE     (1 << 7)
  79typedef uint32 SVGA3dFilter;
  80
  81#define SVGA3D_CULL_INVALID 0
  82#define SVGA3D_CULL_MIN     1
  83#define SVGA3D_CULL_NONE    1
  84#define SVGA3D_CULL_FRONT   2
  85#define SVGA3D_CULL_BACK    3
  86#define SVGA3D_CULL_MAX     4
  87typedef uint8 SVGA3dCullMode;
  88
  89#define SVGA3D_COMPARISON_INVALID         0
  90#define SVGA3D_COMPARISON_MIN             1
  91#define SVGA3D_COMPARISON_NEVER           1
  92#define SVGA3D_COMPARISON_LESS            2
  93#define SVGA3D_COMPARISON_EQUAL           3
  94#define SVGA3D_COMPARISON_LESS_EQUAL      4
  95#define SVGA3D_COMPARISON_GREATER         5
  96#define SVGA3D_COMPARISON_NOT_EQUAL       6
  97#define SVGA3D_COMPARISON_GREATER_EQUAL   7
  98#define SVGA3D_COMPARISON_ALWAYS          8
  99#define SVGA3D_COMPARISON_MAX             9
 100typedef uint8 SVGA3dComparisonFunc;
 101
 102/*
 103 * SVGA3D_MULTISAMPLE_RAST_DISABLE disables MSAA for all primitives.
 104 * SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE, which is supported in SM41,
 105 * disables MSAA for lines only.
 106 */
 107#define SVGA3D_MULTISAMPLE_RAST_DISABLE        0
 108#define SVGA3D_MULTISAMPLE_RAST_ENABLE         1
 109#define SVGA3D_MULTISAMPLE_RAST_DX_MAX         1
 110#define SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE   2
 111#define SVGA3D_MULTISAMPLE_RAST_MAX            2
 112typedef uint8 SVGA3dMultisampleRastEnable;
 113
 114#define SVGA3D_DX_MAX_VERTEXBUFFERS 32
 115#define SVGA3D_DX_MAX_VERTEXINPUTREGISTERS 16
 116#define SVGA3D_DX_SM41_MAX_VERTEXINPUTREGISTERS 32
 117#define SVGA3D_DX_MAX_SOTARGETS 4
 118#define SVGA3D_DX_MAX_SRVIEWS 128
 119#define SVGA3D_DX_MAX_CONSTBUFFERS 16
 120#define SVGA3D_DX_MAX_SAMPLERS 16
 121#define SVGA3D_DX_MAX_CLASS_INSTANCES 253
 122
 123#define SVGA3D_DX_MAX_CONSTBUF_BINDING_SIZE (4096 * 4 * (uint32)sizeof(uint32))
 124
 125typedef uint32 SVGA3dShaderResourceViewId;
 126typedef uint32 SVGA3dRenderTargetViewId;
 127typedef uint32 SVGA3dDepthStencilViewId;
 128typedef uint32 SVGA3dUAViewId;
 129
 130typedef uint32 SVGA3dShaderId;
 131typedef uint32 SVGA3dElementLayoutId;
 132typedef uint32 SVGA3dSamplerId;
 133typedef uint32 SVGA3dBlendStateId;
 134typedef uint32 SVGA3dDepthStencilStateId;
 135typedef uint32 SVGA3dRasterizerStateId;
 136typedef uint32 SVGA3dQueryId;
 137typedef uint32 SVGA3dStreamOutputId;
 138
 139typedef union {
 140   struct {
 141      float r;
 142      float g;
 143      float b;
 144      float a;
 145   };
 146
 147   float value[4];
 148} SVGA3dRGBAFloat;
 149
 150typedef union {
 151   struct {
 152      uint32 r;
 153      uint32 g;
 154      uint32 b;
 155      uint32 a;
 156   };
 157
 158   uint32 value[4];
 159} SVGA3dRGBAUint32;
 160
 161typedef
 162#include "vmware_pack_begin.h"
 163struct {
 164   uint32 cid;
 165   SVGAMobId mobid;
 166}
 167#include "vmware_pack_end.h"
 168SVGAOTableDXContextEntry;
 169
 170typedef
 171#include "vmware_pack_begin.h"
 172struct SVGA3dCmdDXDefineContext {
 173   uint32 cid;
 174}
 175#include "vmware_pack_end.h"
 176SVGA3dCmdDXDefineContext;   /* SVGA_3D_CMD_DX_DEFINE_CONTEXT */
 177
 178typedef
 179#include "vmware_pack_begin.h"
 180struct SVGA3dCmdDXDestroyContext {
 181   uint32 cid;
 182}
 183#include "vmware_pack_end.h"
 184SVGA3dCmdDXDestroyContext;   /* SVGA_3D_CMD_DX_DESTROY_CONTEXT */
 185
 186/*
 187 * Bind a DX context.
 188 *
 189 * validContents should be set to 0 for new contexts,
 190 * and 1 if this is an old context which is getting paged
 191 * back on to the device.
 192 *
 193 * For new contexts, it is recommended that the driver
 194 * issue commands to initialize all interesting state
 195 * prior to rendering.
 196 */
 197typedef
 198#include "vmware_pack_begin.h"
 199struct SVGA3dCmdDXBindContext {
 200   uint32 cid;
 201   SVGAMobId mobid;
 202   uint32 validContents;
 203}
 204#include "vmware_pack_end.h"
 205SVGA3dCmdDXBindContext;   /* SVGA_3D_CMD_DX_BIND_CONTEXT */
 206
 207/*
 208 * Readback a DX context.
 209 * (Request that the device flush the contents back into guest memory.)
 210 */
 211typedef
 212#include "vmware_pack_begin.h"
 213struct SVGA3dCmdDXReadbackContext {
 214   uint32 cid;
 215}
 216#include "vmware_pack_end.h"
 217SVGA3dCmdDXReadbackContext;   /* SVGA_3D_CMD_DX_READBACK_CONTEXT */
 218
 219/*
 220 * Invalidate a guest-backed context.
 221 */
 222typedef
 223#include "vmware_pack_begin.h"
 224struct SVGA3dCmdDXInvalidateContext {
 225   uint32 cid;
 226}
 227#include "vmware_pack_end.h"
 228SVGA3dCmdDXInvalidateContext;   /* SVGA_3D_CMD_DX_INVALIDATE_CONTEXT */
 229
 230typedef
 231#include "vmware_pack_begin.h"
 232struct SVGA3dCmdDXSetSingleConstantBuffer {
 233   uint32 slot;
 234   SVGA3dShaderType type;
 235   SVGA3dSurfaceId sid;
 236   uint32 offsetInBytes;
 237   uint32 sizeInBytes;
 238}
 239#include "vmware_pack_end.h"
 240SVGA3dCmdDXSetSingleConstantBuffer;
 241/* SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER */
 242
 243typedef
 244#include "vmware_pack_begin.h"
 245struct SVGA3dCmdDXSetShaderResources {
 246   uint32 startView;
 247   SVGA3dShaderType type;
 248
 249   /*
 250    * Followed by a variable number of SVGA3dShaderResourceViewId's.
 251    */
 252}
 253#include "vmware_pack_end.h"
 254SVGA3dCmdDXSetShaderResources; /* SVGA_3D_CMD_DX_SET_SHADER_RESOURCES */
 255
 256typedef
 257#include "vmware_pack_begin.h"
 258struct SVGA3dCmdDXSetShader {
 259   SVGA3dShaderId shaderId;
 260   SVGA3dShaderType type;
 261}
 262#include "vmware_pack_end.h"
 263SVGA3dCmdDXSetShader; /* SVGA_3D_CMD_DX_SET_SHADER */
 264
 265typedef union {
 266   struct {
 267      uint32 cbOffset : 12;
 268      uint32 cbId     : 4;
 269      uint32 baseSamp : 4;
 270      uint32 baseTex  : 7;
 271      uint32 reserved : 5;
 272   };
 273   uint32 value;
 274} SVGA3dIfaceData;
 275
 276typedef
 277#include "vmware_pack_begin.h"
 278struct SVGA3dCmdDXSetShaderIface {
 279   SVGA3dShaderType type;
 280   uint32 numClassInstances;
 281   uint32 index;
 282   uint32 iface;
 283   SVGA3dIfaceData data;
 284}
 285#include "vmware_pack_end.h"
 286SVGA3dCmdDXSetShaderIface; /* SVGA_3D_CMD_DX_SET_SHADER_IFACE */
 287
 288typedef
 289#include "vmware_pack_begin.h"
 290struct SVGA3dCmdDXBindShaderIface {
 291   uint32 cid;
 292   SVGAMobId mobid;
 293   uint32 offsetInBytes;
 294}
 295#include "vmware_pack_end.h"
 296SVGA3dCmdDXBindShaderIface; /* SVGA_3D_CMD_DX_BIND_SHADER_IFACE */
 297
 298typedef
 299#include "vmware_pack_begin.h"
 300struct SVGA3dCmdDXSetSamplers {
 301   uint32 startSampler;
 302   SVGA3dShaderType type;
 303
 304   /*
 305    * Followed by a variable number of SVGA3dSamplerId's.
 306    */
 307}
 308#include "vmware_pack_end.h"
 309SVGA3dCmdDXSetSamplers; /* SVGA_3D_CMD_DX_SET_SAMPLERS */
 310
 311typedef
 312#include "vmware_pack_begin.h"
 313struct SVGA3dCmdDXDraw {
 314   uint32 vertexCount;
 315   uint32 startVertexLocation;
 316}
 317#include "vmware_pack_end.h"
 318SVGA3dCmdDXDraw; /* SVGA_3D_CMD_DX_DRAW */
 319
 320typedef
 321#include "vmware_pack_begin.h"
 322struct SVGA3dCmdDXDrawIndexed {
 323   uint32 indexCount;
 324   uint32 startIndexLocation;
 325   int32  baseVertexLocation;
 326}
 327#include "vmware_pack_end.h"
 328SVGA3dCmdDXDrawIndexed; /* SVGA_3D_CMD_DX_DRAW_INDEXED */
 329
 330typedef
 331#include "vmware_pack_begin.h"
 332struct SVGA3dCmdDXDrawInstanced {
 333   uint32 vertexCountPerInstance;
 334   uint32 instanceCount;
 335   uint32 startVertexLocation;
 336   uint32 startInstanceLocation;
 337}
 338#include "vmware_pack_end.h"
 339SVGA3dCmdDXDrawInstanced; /* SVGA_3D_CMD_DX_DRAW_INSTANCED */
 340
 341typedef
 342#include "vmware_pack_begin.h"
 343struct SVGA3dCmdDXDrawIndexedInstanced {
 344   uint32 indexCountPerInstance;
 345   uint32 instanceCount;
 346   uint32 startIndexLocation;
 347   int32  baseVertexLocation;
 348   uint32 startInstanceLocation;
 349}
 350#include "vmware_pack_end.h"
 351SVGA3dCmdDXDrawIndexedInstanced; /* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED */
 352
 353typedef
 354#include "vmware_pack_begin.h"
 355struct SVGA3dCmdDXDrawIndexedInstancedIndirect {
 356   SVGA3dSurfaceId argsBufferSid;
 357   uint32 byteOffsetForArgs;
 358}
 359#include "vmware_pack_end.h"
 360SVGA3dCmdDXDrawIndexedInstancedIndirect;
 361/* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED_INDIRECT */
 362
 363typedef
 364#include "vmware_pack_begin.h"
 365struct SVGA3dCmdDXDrawInstancedIndirect {
 366   SVGA3dSurfaceId argsBufferSid;
 367   uint32 byteOffsetForArgs;
 368}
 369#include "vmware_pack_end.h"
 370SVGA3dCmdDXDrawInstancedIndirect;
 371/* SVGA_3D_CMD_DX_DRAW_INSTANCED_INDIRECT */
 372
 373typedef
 374#include "vmware_pack_begin.h"
 375struct SVGA3dCmdDXDrawAuto {
 376   uint32 pad0;
 377}
 378#include "vmware_pack_end.h"
 379SVGA3dCmdDXDrawAuto; /* SVGA_3D_CMD_DX_DRAW_AUTO */
 380
 381typedef
 382#include "vmware_pack_begin.h"
 383struct SVGA3dCmdDXDispatch {
 384   uint32 threadGroupCountX;
 385   uint32 threadGroupCountY;
 386   uint32 threadGroupCountZ;
 387}
 388#include "vmware_pack_end.h"
 389SVGA3dCmdDXDispatch;
 390/* SVGA_3D_CMD_DX_DISPATCH */
 391
 392typedef
 393#include "vmware_pack_begin.h"
 394struct SVGA3dCmdDXDispatchIndirect {
 395   SVGA3dSurfaceId argsBufferSid;
 396   uint32 byteOffsetForArgs;
 397}
 398#include "vmware_pack_end.h"
 399SVGA3dCmdDXDispatchIndirect;
 400/* SVGA_3D_CMD_DX_DISPATCH_INDIRECT */
 401
 402typedef
 403#include "vmware_pack_begin.h"
 404struct SVGA3dCmdDXSetInputLayout {
 405   SVGA3dElementLayoutId elementLayoutId;
 406}
 407#include "vmware_pack_end.h"
 408SVGA3dCmdDXSetInputLayout; /* SVGA_3D_CMD_DX_SET_INPUT_LAYOUT */
 409
 410typedef
 411#include "vmware_pack_begin.h"
 412struct SVGA3dVertexBuffer {
 413   SVGA3dSurfaceId sid;
 414   uint32 stride;
 415   uint32 offset;
 416}
 417#include "vmware_pack_end.h"
 418SVGA3dVertexBuffer;
 419
 420typedef
 421#include "vmware_pack_begin.h"
 422struct SVGA3dCmdDXSetVertexBuffers {
 423   uint32 startBuffer;
 424   /* Followed by a variable number of SVGA3dVertexBuffer's. */
 425}
 426#include "vmware_pack_end.h"
 427SVGA3dCmdDXSetVertexBuffers; /* SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS */
 428
 429typedef
 430#include "vmware_pack_begin.h"
 431struct SVGA3dCmdDXSetIndexBuffer {
 432   SVGA3dSurfaceId sid;
 433   SVGA3dSurfaceFormat format;
 434   uint32 offset;
 435}
 436#include "vmware_pack_end.h"
 437SVGA3dCmdDXSetIndexBuffer; /* SVGA_3D_CMD_DX_SET_INDEX_BUFFER */
 438
 439typedef
 440#include "vmware_pack_begin.h"
 441struct SVGA3dCmdDXSetTopology {
 442   SVGA3dPrimitiveType topology;
 443}
 444#include "vmware_pack_end.h"
 445SVGA3dCmdDXSetTopology; /* SVGA_3D_CMD_DX_SET_TOPOLOGY */
 446
 447typedef
 448#include "vmware_pack_begin.h"
 449struct SVGA3dCmdDXSetRenderTargets {
 450   SVGA3dDepthStencilViewId depthStencilViewId;
 451   /* Followed by a variable number of SVGA3dRenderTargetViewId's. */
 452}
 453#include "vmware_pack_end.h"
 454SVGA3dCmdDXSetRenderTargets; /* SVGA_3D_CMD_DX_SET_RENDERTARGETS */
 455
 456typedef
 457#include "vmware_pack_begin.h"
 458struct SVGA3dCmdDXSetBlendState {
 459   SVGA3dBlendStateId blendId;
 460   float blendFactor[4];
 461   uint32 sampleMask;
 462}
 463#include "vmware_pack_end.h"
 464SVGA3dCmdDXSetBlendState; /* SVGA_3D_CMD_DX_SET_BLEND_STATE */
 465
 466typedef
 467#include "vmware_pack_begin.h"
 468struct SVGA3dCmdDXSetDepthStencilState {
 469   SVGA3dDepthStencilStateId depthStencilId;
 470   uint32 stencilRef;
 471}
 472#include "vmware_pack_end.h"
 473SVGA3dCmdDXSetDepthStencilState; /* SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE */
 474
 475typedef
 476#include "vmware_pack_begin.h"
 477struct SVGA3dCmdDXSetRasterizerState {
 478   SVGA3dRasterizerStateId rasterizerId;
 479}
 480#include "vmware_pack_end.h"
 481SVGA3dCmdDXSetRasterizerState; /* SVGA_3D_CMD_DX_SET_RASTERIZER_STATE */
 482
 483#define SVGA3D_DXQUERY_FLAG_PREDICATEHINT (1 << 0)
 484typedef uint32 SVGA3dDXQueryFlags;
 485
 486/*
 487 * The SVGADXQueryDeviceState and SVGADXQueryDeviceBits are used by the device
 488 * to track query state transitions, but are not intended to be used by the
 489 * driver.
 490 */
 491#define SVGADX_QDSTATE_INVALID   ((uint8)-1) /* Query has no state */
 492#define SVGADX_QDSTATE_MIN       0
 493#define SVGADX_QDSTATE_IDLE      0   /* Query hasn't started yet */
 494#define SVGADX_QDSTATE_ACTIVE    1   /* Query is actively gathering data */
 495#define SVGADX_QDSTATE_PENDING   2   /* Query is waiting for results */
 496#define SVGADX_QDSTATE_FINISHED  3   /* Query has completed */
 497#define SVGADX_QDSTATE_MAX       4
 498typedef uint8 SVGADXQueryDeviceState;
 499
 500typedef
 501#include "vmware_pack_begin.h"
 502struct {
 503   SVGA3dQueryTypeUint8 type;
 504   uint16 pad0;
 505   SVGADXQueryDeviceState state;
 506   SVGA3dDXQueryFlags flags;
 507   SVGAMobId mobid;
 508   uint32 offset;
 509}
 510#include "vmware_pack_end.h"
 511SVGACOTableDXQueryEntry;
 512
 513typedef
 514#include "vmware_pack_begin.h"
 515struct SVGA3dCmdDXDefineQuery {
 516   SVGA3dQueryId queryId;
 517   SVGA3dQueryType type;
 518   SVGA3dDXQueryFlags flags;
 519}
 520#include "vmware_pack_end.h"
 521SVGA3dCmdDXDefineQuery; /* SVGA_3D_CMD_DX_DEFINE_QUERY */
 522
 523typedef
 524#include "vmware_pack_begin.h"
 525struct SVGA3dCmdDXDestroyQuery {
 526   SVGA3dQueryId queryId;
 527}
 528#include "vmware_pack_end.h"
 529SVGA3dCmdDXDestroyQuery; /* SVGA_3D_CMD_DX_DESTROY_QUERY */
 530
 531typedef
 532#include "vmware_pack_begin.h"
 533struct SVGA3dCmdDXBindQuery {
 534   SVGA3dQueryId queryId;
 535   SVGAMobId mobid;
 536}
 537#include "vmware_pack_end.h"
 538SVGA3dCmdDXBindQuery; /* SVGA_3D_CMD_DX_BIND_QUERY */
 539
 540typedef
 541#include "vmware_pack_begin.h"
 542struct SVGA3dCmdDXSetQueryOffset {
 543   SVGA3dQueryId queryId;
 544   uint32 mobOffset;
 545}
 546#include "vmware_pack_end.h"
 547SVGA3dCmdDXSetQueryOffset; /* SVGA_3D_CMD_DX_SET_QUERY_OFFSET */
 548
 549typedef
 550#include "vmware_pack_begin.h"
 551struct SVGA3dCmdDXBeginQuery {
 552   SVGA3dQueryId queryId;
 553}
 554#include "vmware_pack_end.h"
 555SVGA3dCmdDXBeginQuery; /* SVGA_3D_CMD_DX_QUERY_BEGIN */
 556
 557typedef
 558#include "vmware_pack_begin.h"
 559struct SVGA3dCmdDXEndQuery {
 560   SVGA3dQueryId queryId;
 561}
 562#include "vmware_pack_end.h"
 563SVGA3dCmdDXEndQuery; /* SVGA_3D_CMD_DX_QUERY_END */
 564
 565typedef
 566#include "vmware_pack_begin.h"
 567struct SVGA3dCmdDXReadbackQuery {
 568   SVGA3dQueryId queryId;
 569}
 570#include "vmware_pack_end.h"
 571SVGA3dCmdDXReadbackQuery; /* SVGA_3D_CMD_DX_READBACK_QUERY */
 572
 573typedef
 574#include "vmware_pack_begin.h"
 575struct SVGA3dCmdDXMoveQuery {
 576   SVGA3dQueryId queryId;
 577   SVGAMobId mobid;
 578   uint32 mobOffset;
 579}
 580#include "vmware_pack_end.h"
 581SVGA3dCmdDXMoveQuery; /* SVGA_3D_CMD_DX_MOVE_QUERY */
 582
 583typedef
 584#include "vmware_pack_begin.h"
 585struct SVGA3dCmdDXBindAllQuery {
 586   uint32 cid;
 587   SVGAMobId mobid;
 588}
 589#include "vmware_pack_end.h"
 590SVGA3dCmdDXBindAllQuery; /* SVGA_3D_CMD_DX_BIND_ALL_QUERY */
 591
 592typedef
 593#include "vmware_pack_begin.h"
 594struct SVGA3dCmdDXReadbackAllQuery {
 595   uint32 cid;
 596}
 597#include "vmware_pack_end.h"
 598SVGA3dCmdDXReadbackAllQuery; /* SVGA_3D_CMD_DX_READBACK_ALL_QUERY */
 599
 600typedef
 601#include "vmware_pack_begin.h"
 602struct SVGA3dCmdDXSetPredication {
 603   SVGA3dQueryId queryId;
 604   uint32 predicateValue;
 605}
 606#include "vmware_pack_end.h"
 607SVGA3dCmdDXSetPredication; /* SVGA_3D_CMD_DX_SET_PREDICATION */
 608
 609typedef
 610#include "vmware_pack_begin.h"
 611struct MKS3dDXSOState {
 612   uint32 offset;       /* Starting offset */
 613   uint32 intOffset;    /* Internal offset */
 614   uint32 vertexCount;  /* vertices written */
 615   uint32 dead;
 616}
 617#include "vmware_pack_end.h"
 618SVGA3dDXSOState;
 619
 620/* Set the offset field to this value to append SO values to the buffer */
 621#define SVGA3D_DX_SO_OFFSET_APPEND ((uint32) ~0u)
 622
 623typedef
 624#include "vmware_pack_begin.h"
 625struct SVGA3dSoTarget {
 626   SVGA3dSurfaceId sid;
 627   uint32 offset;
 628   uint32 sizeInBytes;
 629}
 630#include "vmware_pack_end.h"
 631SVGA3dSoTarget;
 632
 633typedef
 634#include "vmware_pack_begin.h"
 635struct SVGA3dCmdDXSetSOTargets {
 636   uint32 pad0;
 637   /* Followed by a variable number of SVGA3dSOTarget's. */
 638}
 639#include "vmware_pack_end.h"
 640SVGA3dCmdDXSetSOTargets; /* SVGA_3D_CMD_DX_SET_SOTARGETS */
 641
 642typedef
 643#include "vmware_pack_begin.h"
 644struct SVGA3dViewport
 645{
 646   float x;
 647   float y;
 648   float width;
 649   float height;
 650   float minDepth;
 651   float maxDepth;
 652}
 653#include "vmware_pack_end.h"
 654SVGA3dViewport;
 655
 656typedef
 657#include "vmware_pack_begin.h"
 658struct SVGA3dCmdDXSetViewports {
 659   uint32 pad0;
 660   /* Followed by a variable number of SVGA3dViewport's. */
 661}
 662#include "vmware_pack_end.h"
 663SVGA3dCmdDXSetViewports; /* SVGA_3D_CMD_DX_SET_VIEWPORTS */
 664
 665#define SVGA3D_DX_MAX_VIEWPORTS  16
 666
 667typedef
 668#include "vmware_pack_begin.h"
 669struct SVGA3dCmdDXSetScissorRects {
 670   uint32 pad0;
 671   /* Followed by a variable number of SVGASignedRect's. */
 672}
 673#include "vmware_pack_end.h"
 674SVGA3dCmdDXSetScissorRects; /* SVGA_3D_CMD_DX_SET_SCISSORRECTS */
 675
 676#define SVGA3D_DX_MAX_SCISSORRECTS  16
 677
 678typedef
 679#include "vmware_pack_begin.h"
 680struct SVGA3dCmdDXClearRenderTargetView {
 681   SVGA3dRenderTargetViewId renderTargetViewId;
 682   SVGA3dRGBAFloat rgba;
 683}
 684#include "vmware_pack_end.h"
 685SVGA3dCmdDXClearRenderTargetView; /* SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW */
 686
 687typedef
 688#include "vmware_pack_begin.h"
 689struct SVGA3dCmdDXClearDepthStencilView {
 690   uint16 flags;
 691   uint16 stencil;
 692   SVGA3dDepthStencilViewId depthStencilViewId;
 693   float depth;
 694}
 695#include "vmware_pack_end.h"
 696SVGA3dCmdDXClearDepthStencilView; /* SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW */
 697
 698typedef
 699#include "vmware_pack_begin.h"
 700struct SVGA3dCmdDXPredCopyRegion {
 701   SVGA3dSurfaceId dstSid;
 702   uint32 dstSubResource;
 703   SVGA3dSurfaceId srcSid;
 704   uint32 srcSubResource;
 705   SVGA3dCopyBox box;
 706}
 707#include "vmware_pack_end.h"
 708SVGA3dCmdDXPredCopyRegion;
 709/* SVGA_3D_CMD_DX_PRED_COPY_REGION */
 710
 711typedef
 712#include "vmware_pack_begin.h"
 713struct SVGA3dCmdDXPredCopy {
 714   SVGA3dSurfaceId dstSid;
 715   SVGA3dSurfaceId srcSid;
 716}
 717#include "vmware_pack_end.h"
 718SVGA3dCmdDXPredCopy; /* SVGA_3D_CMD_DX_PRED_COPY */
 719
 720typedef
 721#include "vmware_pack_begin.h"
 722struct SVGA3dCmdDXPredConvertRegion {
 723   SVGA3dSurfaceId dstSid;
 724   uint32 dstSubResource;
 725   SVGA3dBox destBox;
 726   SVGA3dSurfaceId srcSid;
 727   uint32 srcSubResource;
 728   SVGA3dBox srcBox;
 729}
 730#include "vmware_pack_end.h"
 731SVGA3dCmdDXPredConvertRegion; /* SVGA_3D_CMD_DX_PRED_CONVERT_REGION */
 732
 733typedef
 734#include "vmware_pack_begin.h"
 735struct SVGA3dCmdDXPredConvert {
 736   SVGA3dSurfaceId dstSid;
 737   SVGA3dSurfaceId srcSid;
 738}
 739#include "vmware_pack_end.h"
 740SVGA3dCmdDXPredConvert; /* SVGA_3D_CMD_DX_PRED_CONVERT */
 741
 742typedef
 743#include "vmware_pack_begin.h"
 744struct SVGA3dCmdDXBufferCopy {
 745   SVGA3dSurfaceId dest;
 746   SVGA3dSurfaceId src;
 747   uint32 destX;
 748   uint32 srcX;
 749   uint32 width;
 750}
 751#include "vmware_pack_end.h"
 752SVGA3dCmdDXBufferCopy;
 753/* SVGA_3D_CMD_DX_BUFFER_COPY */
 754
 755/*
 756 * Perform a surface copy between a multisample, and a non-multisampled
 757 * surface.
 758 */
 759typedef
 760#include "vmware_pack_begin.h"
 761struct {
 762   SVGA3dSurfaceId dstSid;
 763   uint32 dstSubResource;
 764   SVGA3dSurfaceId srcSid;
 765   uint32 srcSubResource;
 766   SVGA3dSurfaceFormat copyFormat;
 767}
 768#include "vmware_pack_end.h"
 769SVGA3dCmdDXResolveCopy;               /* SVGA_3D_CMD_DX_RESOLVE_COPY */
 770
 771/*
 772 * Perform a predicated surface copy between a multisample, and a
 773 * non-multisampled surface.
 774 */
 775typedef
 776#include "vmware_pack_begin.h"
 777struct {
 778   SVGA3dSurfaceId dstSid;
 779   uint32 dstSubResource;
 780   SVGA3dSurfaceId srcSid;
 781   uint32 srcSubResource;
 782   SVGA3dSurfaceFormat copyFormat;
 783}
 784#include "vmware_pack_end.h"
 785SVGA3dCmdDXPredResolveCopy;           /* SVGA_3D_CMD_DX_PRED_RESOLVE_COPY */
 786
 787typedef uint32 SVGA3dDXPresentBltMode;
 788#define SVGADX_PRESENTBLT_LINEAR           (1 << 0)
 789#define SVGADX_PRESENTBLT_FORCE_SRC_SRGB   (1 << 1)
 790#define SVGADX_PRESENTBLT_FORCE_SRC_XRBIAS (1 << 2)
 791#define SVGADX_PRESENTBLT_MODE_MAX         (1 << 3)
 792
 793typedef
 794#include "vmware_pack_begin.h"
 795struct SVGA3dCmdDXPresentBlt {
 796   SVGA3dSurfaceId srcSid;
 797   uint32 srcSubResource;
 798   SVGA3dSurfaceId dstSid;
 799   uint32 destSubResource;
 800   SVGA3dBox boxSrc;
 801   SVGA3dBox boxDest;
 802   SVGA3dDXPresentBltMode mode;
 803}
 804#include "vmware_pack_end.h"
 805SVGA3dCmdDXPresentBlt; /* SVGA_3D_CMD_DX_PRESENTBLT*/
 806
 807typedef
 808#include "vmware_pack_begin.h"
 809struct SVGA3dCmdDXGenMips {
 810   SVGA3dShaderResourceViewId shaderResourceViewId;
 811}
 812#include "vmware_pack_end.h"
 813SVGA3dCmdDXGenMips; /* SVGA_3D_CMD_DX_GENMIPS */
 814
 815/*
 816 * Update a sub-resource in a guest-backed resource.
 817 * (Inform the device that the guest-contents have been updated.)
 818 */
 819typedef
 820#include "vmware_pack_begin.h"
 821struct SVGA3dCmdDXUpdateSubResource {
 822   SVGA3dSurfaceId sid;
 823   uint32 subResource;
 824   SVGA3dBox box;
 825}
 826#include "vmware_pack_end.h"
 827SVGA3dCmdDXUpdateSubResource;   /* SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE */
 828
 829/*
 830 * Readback a subresource in a guest-backed resource.
 831 * (Request the device to flush the dirty contents into the guest.)
 832 */
 833typedef
 834#include "vmware_pack_begin.h"
 835struct SVGA3dCmdDXReadbackSubResource {
 836   SVGA3dSurfaceId sid;
 837   uint32 subResource;
 838}
 839#include "vmware_pack_end.h"
 840SVGA3dCmdDXReadbackSubResource;   /* SVGA_3D_CMD_DX_READBACK_SUBRESOURCE */
 841
 842/*
 843 * Invalidate an image in a guest-backed surface.
 844 * (Notify the device that the contents can be lost.)
 845 */
 846typedef
 847#include "vmware_pack_begin.h"
 848struct SVGA3dCmdDXInvalidateSubResource {
 849   SVGA3dSurfaceId sid;
 850   uint32 subResource;
 851}
 852#include "vmware_pack_end.h"
 853SVGA3dCmdDXInvalidateSubResource;   /* SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE */
 854
 855
 856/*
 857 * Raw byte wise transfer from a buffer surface into another surface
 858 * of the requested box.  Supported if 3d is enabled and SVGA_CAP_DX
 859 * is set.  This command does not take a context.
 860 */
 861typedef
 862#include "vmware_pack_begin.h"
 863struct SVGA3dCmdDXTransferFromBuffer {
 864   SVGA3dSurfaceId srcSid;
 865   uint32 srcOffset;
 866   uint32 srcPitch;
 867   uint32 srcSlicePitch;
 868   SVGA3dSurfaceId destSid;
 869   uint32 destSubResource;
 870   SVGA3dBox destBox;
 871}
 872#include "vmware_pack_end.h"
 873SVGA3dCmdDXTransferFromBuffer;   /* SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER */
 874
 875
 876#define SVGA3D_TRANSFER_TO_BUFFER_READBACK   (1 << 0)
 877#define SVGA3D_TRANSFER_TO_BUFFER_FLAGS_MASK (1 << 0)
 878typedef uint32 SVGA3dTransferToBufferFlags;
 879
 880/*
 881 * Raw byte wise transfer to a buffer surface from another surface
 882 * of the requested box.  Supported if SVGA_CAP_DX2 is set.  This
 883 * command does not take a context.
 884 */
 885typedef
 886#include "vmware_pack_begin.h"
 887struct SVGA3dCmdDXTransferToBuffer {
 888   SVGA3dSurfaceId srcSid;
 889   uint32 srcSubResource;
 890   SVGA3dBox srcBox;
 891   SVGA3dSurfaceId destSid;
 892   uint32 destOffset;
 893   uint32 destPitch;
 894   uint32 destSlicePitch;
 895   SVGA3dTransferToBufferFlags flags;
 896}
 897#include "vmware_pack_end.h"
 898SVGA3dCmdDXTransferToBuffer;   /* SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER */
 899
 900
 901/*
 902 * Raw byte wise transfer from a buffer surface into another surface
 903 * of the requested box.  Supported if SVGA3D_DEVCAP_DXCONTEXT is set.
 904 * The context is implied from the command buffer header.
 905 */
 906typedef
 907#include "vmware_pack_begin.h"
 908struct SVGA3dCmdDXPredTransferFromBuffer {
 909   SVGA3dSurfaceId srcSid;
 910   uint32 srcOffset;
 911   uint32 srcPitch;
 912   uint32 srcSlicePitch;
 913   SVGA3dSurfaceId destSid;
 914   uint32 destSubResource;
 915   SVGA3dBox destBox;
 916}
 917#include "vmware_pack_end.h"
 918SVGA3dCmdDXPredTransferFromBuffer;
 919/* SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER */
 920
 921
 922typedef
 923#include "vmware_pack_begin.h"
 924struct SVGA3dCmdDXSurfaceCopyAndReadback {
 925   SVGA3dSurfaceId srcSid;
 926   SVGA3dSurfaceId destSid;
 927   SVGA3dCopyBox box;
 928}
 929#include "vmware_pack_end.h"
 930SVGA3dCmdDXSurfaceCopyAndReadback;
 931/* SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK */
 932
 933/*
 934 * SVGA_DX_HINT_NONE: Does nothing.
 935 *
 936 * SVGA_DX_HINT_PREFETCH_OBJECT:
 937 * SVGA_DX_HINT_PREEVICT_OBJECT:
 938 *      Consumes a SVGAObjectRef, and hints that the host should consider
 939 *      fetching/evicting the specified object.
 940 *
 941 *      An id of SVGA3D_INVALID_ID can be used if the guest isn't sure
 942 *      what object was affected.  (For instance, if the guest knows that
 943 *      it is about to evict a DXShader, but doesn't know precisely which one,
 944 *      the device can still use this to help limit it's search, or track
 945 *      how many page-outs have happened.)
 946 *
 947 * SVGA_DX_HINT_PREFETCH_COBJECT:
 948 * SVGA_DX_HINT_PREEVICT_COBJECT:
 949 *      Same as the above, except they consume an SVGACObjectRef.
 950 */
 951typedef uint32 SVGADXHintId;
 952#define SVGA_DX_HINT_NONE              0
 953#define SVGA_DX_HINT_PREFETCH_OBJECT   1
 954#define SVGA_DX_HINT_PREEVICT_OBJECT   2
 955#define SVGA_DX_HINT_PREFETCH_COBJECT  3
 956#define SVGA_DX_HINT_PREEVICT_COBJECT  4
 957#define SVGA_DX_HINT_MAX               5
 958
 959typedef
 960#include "vmware_pack_begin.h"
 961struct SVGAObjectRef {
 962   SVGAOTableType type;
 963   uint32 id;
 964}
 965#include "vmware_pack_end.h"
 966SVGAObjectRef;
 967
 968typedef
 969#include "vmware_pack_begin.h"
 970struct SVGACObjectRef {
 971   SVGACOTableType type;
 972   uint32 cid;
 973   uint32 id;
 974}
 975#include "vmware_pack_end.h"
 976SVGACObjectRef;
 977
 978typedef
 979#include "vmware_pack_begin.h"
 980struct SVGA3dCmdDXHint {
 981   SVGADXHintId hintId;
 982
 983   /*
 984    * Followed by variable sized data depending on the hintId.
 985    */
 986}
 987#include "vmware_pack_end.h"
 988SVGA3dCmdDXHint;
 989/* SVGA_3D_CMD_DX_HINT */
 990
 991typedef
 992#include "vmware_pack_begin.h"
 993struct SVGA3dCmdDXBufferUpdate {
 994   SVGA3dSurfaceId sid;
 995   uint32 x;
 996   uint32 width;
 997}
 998#include "vmware_pack_end.h"
 999SVGA3dCmdDXBufferUpdate;
1000/* SVGA_3D_CMD_DX_BUFFER_UPDATE */
1001
1002typedef
1003#include "vmware_pack_begin.h"
1004struct SVGA3dCmdDXSetConstantBufferOffset {
1005   uint32 slot;
1006   uint32 offsetInBytes;
1007}
1008#include "vmware_pack_end.h"
1009SVGA3dCmdDXSetConstantBufferOffset;
1010
1011typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetVSConstantBufferOffset;
1012/* SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET */
1013
1014typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetPSConstantBufferOffset;
1015/* SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET */
1016
1017typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetGSConstantBufferOffset;
1018/* SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET */
1019
1020typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetHSConstantBufferOffset;
1021/* SVGA_3D_CMD_DX_SET_HS_CONSTANT_BUFFER_OFFSET */
1022
1023typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetDSConstantBufferOffset;
1024/* SVGA_3D_CMD_DX_SET_DS_CONSTANT_BUFFER_OFFSET */
1025
1026typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetCSConstantBufferOffset;
1027/* SVGA_3D_CMD_DX_SET_CS_CONSTANT_BUFFER_OFFSET */
1028
1029
1030#define SVGA3D_BUFFEREX_SRV_RAW        (1 << 0)
1031#define SVGA3D_BUFFEREX_SRV_FLAGS_MAX  (1 << 1)
1032#define SVGA3D_BUFFEREX_SRV_FLAGS_MASK (SVGA3D_BUFFEREX_SRV_FLAGS_MAX - 1)
1033typedef uint32 SVGA3dBufferExFlags;
1034
1035typedef
1036#include "vmware_pack_begin.h"
1037struct {
1038   union {
1039      struct {
1040         uint32 firstElement;
1041         uint32 numElements;
1042         uint32 pad0;
1043         uint32 pad1;
1044      } buffer;
1045      struct {
1046         uint32 mostDetailedMip;
1047         uint32 firstArraySlice;
1048         uint32 mipLevels;
1049         uint32 arraySize;
1050      } tex; /* 1d, 2d, 3d, cube */
1051      struct {
1052         uint32 firstElement;
1053         uint32 numElements;
1054         SVGA3dBufferExFlags flags;
1055         uint32 pad0;
1056      } bufferex;
1057   };
1058}
1059#include "vmware_pack_end.h"
1060SVGA3dShaderResourceViewDesc;
1061
1062typedef
1063#include "vmware_pack_begin.h"
1064struct {
1065   SVGA3dSurfaceId sid;
1066   SVGA3dSurfaceFormat format;
1067   SVGA3dResourceType resourceDimension;
1068   SVGA3dShaderResourceViewDesc desc;
1069   uint32 pad;
1070}
1071#include "vmware_pack_end.h"
1072SVGACOTableDXSRViewEntry;
1073
1074typedef
1075#include "vmware_pack_begin.h"
1076struct SVGA3dCmdDXDefineShaderResourceView {
1077   SVGA3dShaderResourceViewId shaderResourceViewId;
1078
1079   SVGA3dSurfaceId sid;
1080   SVGA3dSurfaceFormat format;
1081   SVGA3dResourceType resourceDimension;
1082
1083   SVGA3dShaderResourceViewDesc desc;
1084}
1085#include "vmware_pack_end.h"
1086SVGA3dCmdDXDefineShaderResourceView;
1087/* SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW */
1088
1089typedef
1090#include "vmware_pack_begin.h"
1091struct SVGA3dCmdDXDestroyShaderResourceView {
1092   SVGA3dShaderResourceViewId shaderResourceViewId;
1093}
1094#include "vmware_pack_end.h"
1095SVGA3dCmdDXDestroyShaderResourceView;
1096/* SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW */
1097
1098typedef
1099#include "vmware_pack_begin.h"
1100struct SVGA3dRenderTargetViewDesc {
1101   union {
1102      struct {
1103         uint32 firstElement;
1104         uint32 numElements;
1105         uint32 padding0;
1106      } buffer;
1107      struct {
1108         uint32 mipSlice;
1109         uint32 firstArraySlice;
1110         uint32 arraySize;
1111      } tex;                    /* 1d, 2d, cube */
1112      struct {
1113         uint32 mipSlice;
1114         uint32 firstW;
1115         uint32 wSize;
1116      } tex3D;
1117   };
1118}
1119#include "vmware_pack_end.h"
1120SVGA3dRenderTargetViewDesc;
1121
1122typedef
1123#include "vmware_pack_begin.h"
1124struct {
1125   SVGA3dSurfaceId sid;
1126   SVGA3dSurfaceFormat format;
1127   SVGA3dResourceType resourceDimension;
1128   SVGA3dRenderTargetViewDesc desc;
1129   uint32 pad[2];
1130}
1131#include "vmware_pack_end.h"
1132SVGACOTableDXRTViewEntry;
1133
1134typedef
1135#include "vmware_pack_begin.h"
1136struct SVGA3dCmdDXDefineRenderTargetView {
1137   SVGA3dRenderTargetViewId renderTargetViewId;
1138
1139   SVGA3dSurfaceId sid;
1140   SVGA3dSurfaceFormat format;
1141   SVGA3dResourceType resourceDimension;
1142
1143   SVGA3dRenderTargetViewDesc desc;
1144}
1145#include "vmware_pack_end.h"
1146SVGA3dCmdDXDefineRenderTargetView;
1147/* SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW */
1148
1149typedef
1150#include "vmware_pack_begin.h"
1151struct SVGA3dCmdDXDestroyRenderTargetView {
1152   SVGA3dRenderTargetViewId renderTargetViewId;
1153}
1154#include "vmware_pack_end.h"
1155SVGA3dCmdDXDestroyRenderTargetView;
1156/* SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW */
1157
1158/*
1159 */
1160#define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_DEPTH   0x01
1161#define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_STENCIL 0x02
1162#define SVGA3D_DXDSVIEW_CREATE_FLAG_MASK         0x03
1163typedef uint8 SVGA3DCreateDSViewFlags;
1164
1165typedef
1166#include "vmware_pack_begin.h"
1167struct {
1168   SVGA3dSurfaceId sid;
1169   SVGA3dSurfaceFormat format;
1170   SVGA3dResourceType resourceDimension;
1171   uint32 mipSlice;
1172   uint32 firstArraySlice;
1173   uint32 arraySize;
1174   SVGA3DCreateDSViewFlags flags;
1175   uint8 pad0;
1176   uint16 pad1;
1177   uint32 pad2;
1178}
1179#include "vmware_pack_end.h"
1180SVGACOTableDXDSViewEntry;
1181
1182typedef
1183#include "vmware_pack_begin.h"
1184struct SVGA3dCmdDXDefineDepthStencilView {
1185   SVGA3dDepthStencilViewId depthStencilViewId;
1186
1187   SVGA3dSurfaceId sid;
1188   SVGA3dSurfaceFormat format;
1189   SVGA3dResourceType resourceDimension;
1190   uint32 mipSlice;
1191   uint32 firstArraySlice;
1192   uint32 arraySize;
1193   SVGA3DCreateDSViewFlags flags;
1194   uint8 pad0;
1195   uint16 pad1;
1196}
1197#include "vmware_pack_end.h"
1198SVGA3dCmdDXDefineDepthStencilView;
1199/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW */
1200
1201/*
1202 * Version 2 needed in order to start validating and using the flags
1203 * field.  Unfortunately the device wasn't validating or using the
1204 * flags field and the driver wasn't initializing it in shipped code,
1205 * so a new version of the command is needed to allow that code to
1206 * continue to work.
1207 */
1208typedef
1209#include "vmware_pack_begin.h"
1210struct SVGA3dCmdDXDefineDepthStencilView_v2 {
1211   SVGA3dDepthStencilViewId depthStencilViewId;
1212
1213   SVGA3dSurfaceId sid;
1214   SVGA3dSurfaceFormat format;
1215   SVGA3dResourceType resourceDimension;
1216   uint32 mipSlice;
1217   uint32 firstArraySlice;
1218   uint32 arraySize;
1219   SVGA3DCreateDSViewFlags flags;
1220   uint8 pad0;
1221   uint16 pad1;
1222}
1223#include "vmware_pack_end.h"
1224SVGA3dCmdDXDefineDepthStencilView_v2;
1225/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2 */
1226
1227typedef
1228#include "vmware_pack_begin.h"
1229struct SVGA3dCmdDXDestroyDepthStencilView {
1230   SVGA3dDepthStencilViewId depthStencilViewId;
1231}
1232#include "vmware_pack_end.h"
1233SVGA3dCmdDXDestroyDepthStencilView;
1234/* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW */
1235
1236
1237#define SVGA3D_UABUFFER_RAW     (1 << 0)
1238#define SVGA3D_UABUFFER_APPEND  (1 << 1)
1239#define SVGA3D_UABUFFER_COUNTER (1 << 2)
1240typedef uint32 SVGA3dUABufferFlags;
1241
1242typedef
1243#include "vmware_pack_begin.h"
1244struct {
1245   union {
1246      struct {
1247         uint32 firstElement;
1248         uint32 numElements;
1249         SVGA3dUABufferFlags flags;
1250         uint32 padding0;
1251         uint32 padding1;
1252      } buffer;
1253      struct {
1254         uint32 mipSlice;
1255         uint32 firstArraySlice;
1256         uint32 arraySize;
1257         uint32 padding0;
1258         uint32 padding1;
1259      } tex;  /* 1d, 2d */
1260      struct {
1261         uint32 mipSlice;
1262         uint32 firstW;
1263         uint32 wSize;
1264         uint32 padding0;
1265         uint32 padding1;
1266      } tex3D;
1267   };
1268}
1269#include "vmware_pack_end.h"
1270SVGA3dUAViewDesc;
1271
1272typedef
1273#include "vmware_pack_begin.h"
1274struct {
1275   SVGA3dSurfaceId sid;
1276   SVGA3dSurfaceFormat format;
1277   SVGA3dResourceType resourceDimension;
1278   SVGA3dUAViewDesc desc;
1279   uint32 structureCount;
1280   uint32 pad[7];
1281}
1282#include "vmware_pack_end.h"
1283SVGACOTableDXUAViewEntry;
1284
1285typedef
1286#include "vmware_pack_begin.h"
1287struct SVGA3dCmdDXDefineUAView {
1288   SVGA3dUAViewId uaViewId;
1289
1290   SVGA3dSurfaceId sid;
1291   SVGA3dSurfaceFormat format;
1292   SVGA3dResourceType resourceDimension;
1293
1294   SVGA3dUAViewDesc desc;
1295}
1296#include "vmware_pack_end.h"
1297SVGA3dCmdDXDefineUAView;
1298/* SVGA_3D_CMD_DX_DEFINE_UA_VIEW */
1299
1300typedef
1301#include "vmware_pack_begin.h"
1302struct SVGA3dCmdDXDestroyUAView {
1303   SVGA3dUAViewId uaViewId;
1304}
1305#include "vmware_pack_end.h"
1306SVGA3dCmdDXDestroyUAView;
1307/* SVGA_3D_CMD_DX_DESTROY_UA_VIEW */
1308
1309typedef
1310#include "vmware_pack_begin.h"
1311struct SVGA3dCmdDXClearUAViewUint {
1312   SVGA3dUAViewId uaViewId;
1313   SVGA3dRGBAUint32 value;
1314}
1315#include "vmware_pack_end.h"
1316SVGA3dCmdDXClearUAViewUint;
1317/* SVGA_3D_CMD_DX_CLEAR_UA_VIEW_UINT */
1318
1319typedef
1320#include "vmware_pack_begin.h"
1321struct SVGA3dCmdDXClearUAViewFloat {
1322   SVGA3dUAViewId uaViewId;
1323   SVGA3dRGBAFloat value;
1324}
1325#include "vmware_pack_end.h"
1326SVGA3dCmdDXClearUAViewFloat;
1327/* SVGA_3D_CMD_DX_CLEAR_UA_VIEW_FLOAT */
1328
1329typedef
1330#include "vmware_pack_begin.h"
1331struct SVGA3dCmdDXCopyStructureCount {
1332   SVGA3dUAViewId srcUAViewId;
1333   SVGA3dSurfaceId destSid;
1334   uint32 destByteOffset;
1335}
1336#include "vmware_pack_end.h"
1337SVGA3dCmdDXCopyStructureCount;
1338/* SVGA_3D_CMD_DX_COPY_STRUCTURE_COUNT */
1339
1340typedef
1341#include "vmware_pack_begin.h"
1342struct SVGA3dCmdDXSetStructureCount {
1343   SVGA3dUAViewId uaViewId;
1344   uint32 structureCount;
1345}
1346#include "vmware_pack_end.h"
1347SVGA3dCmdDXSetStructureCount;
1348/* SVGA_3D_CMD_DX_SET_STRUCTURE_COUNT */
1349
1350typedef
1351#include "vmware_pack_begin.h"
1352struct SVGA3dCmdDXSetUAViews {
1353   uint32 uavSpliceIndex;
1354   /* Followed by a variable number of SVGA3dUAViewId's. */
1355}
1356#include "vmware_pack_end.h"
1357SVGA3dCmdDXSetUAViews; /* SVGA_3D_CMD_DX_SET_UA_VIEWS */
1358
1359typedef
1360#include "vmware_pack_begin.h"
1361struct SVGA3dCmdDXSetCSUAViews {
1362   uint32 startIndex;
1363   /* Followed by a variable number of SVGA3dUAViewId's. */
1364}
1365#include "vmware_pack_end.h"
1366SVGA3dCmdDXSetCSUAViews; /* SVGA_3D_CMD_DX_SET_CS_UA_VIEWS */
1367
1368typedef
1369#include "vmware_pack_begin.h"
1370struct SVGA3dInputElementDesc {
1371   uint32 inputSlot;
1372   uint32 alignedByteOffset;
1373   SVGA3dSurfaceFormat format;
1374   SVGA3dInputClassification inputSlotClass;
1375   uint32 instanceDataStepRate;
1376   uint32 inputRegister;
1377}
1378#include "vmware_pack_end.h"
1379SVGA3dInputElementDesc;
1380
1381typedef
1382#include "vmware_pack_begin.h"
1383struct {
1384   uint32 elid;
1385   uint32 numDescs;
1386   SVGA3dInputElementDesc descs[32];
1387   uint32 pad[62];
1388}
1389#include "vmware_pack_end.h"
1390SVGACOTableDXElementLayoutEntry;
1391
1392typedef
1393#include "vmware_pack_begin.h"
1394struct SVGA3dCmdDXDefineElementLayout {
1395   SVGA3dElementLayoutId elementLayoutId;
1396   /* Followed by a variable number of SVGA3dInputElementDesc's. */
1397}
1398#include "vmware_pack_end.h"
1399SVGA3dCmdDXDefineElementLayout;
1400/* SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT */
1401
1402typedef
1403#include "vmware_pack_begin.h"
1404struct SVGA3dCmdDXDestroyElementLayout {
1405   SVGA3dElementLayoutId elementLayoutId;
1406}
1407#include "vmware_pack_end.h"
1408SVGA3dCmdDXDestroyElementLayout;
1409/* SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT */
1410
1411
1412#define SVGA3D_DX_MAX_RENDER_TARGETS 8
1413
1414typedef
1415#include "vmware_pack_begin.h"
1416struct SVGA3dDXBlendStatePerRT {
1417      uint8 blendEnable;
1418      uint8 srcBlend;
1419      uint8 destBlend;
1420      uint8 blendOp;
1421      uint8 srcBlendAlpha;
1422      uint8 destBlendAlpha;
1423      uint8 blendOpAlpha;
1424      SVGA3dColorWriteEnable renderTargetWriteMask;
1425      uint8 logicOpEnable;
1426      uint8 logicOp;
1427      uint16 pad0;
1428}
1429#include "vmware_pack_end.h"
1430SVGA3dDXBlendStatePerRT;
1431
1432typedef
1433#include "vmware_pack_begin.h"
1434struct {
1435   uint8 alphaToCoverageEnable;
1436   uint8 independentBlendEnable;
1437   uint16 pad0;
1438   SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS];
1439   uint32 pad1[7];
1440}
1441#include "vmware_pack_end.h"
1442SVGACOTableDXBlendStateEntry;
1443
1444/*
1445 */
1446typedef
1447#include "vmware_pack_begin.h"
1448struct SVGA3dCmdDXDefineBlendState {
1449   SVGA3dBlendStateId blendId;
1450   uint8 alphaToCoverageEnable;
1451   uint8 independentBlendEnable;
1452   uint16 pad0;
1453   SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS];
1454}
1455#include "vmware_pack_end.h"
1456SVGA3dCmdDXDefineBlendState; /* SVGA_3D_CMD_DX_DEFINE_BLEND_STATE */
1457
1458typedef
1459#include "vmware_pack_begin.h"
1460struct SVGA3dCmdDXDestroyBlendState {
1461   SVGA3dBlendStateId blendId;
1462}
1463#include "vmware_pack_end.h"
1464SVGA3dCmdDXDestroyBlendState; /* SVGA_3D_CMD_DX_DESTROY_BLEND_STATE */
1465
1466typedef
1467#include "vmware_pack_begin.h"
1468struct {
1469   uint8 depthEnable;
1470   SVGA3dDepthWriteMask depthWriteMask;
1471   SVGA3dComparisonFunc depthFunc;
1472   uint8 stencilEnable;
1473   uint8 frontEnable;
1474   uint8 backEnable;
1475   uint8 stencilReadMask;
1476   uint8 stencilWriteMask;
1477
1478   uint8 frontStencilFailOp;
1479   uint8 frontStencilDepthFailOp;
1480   uint8 frontStencilPassOp;
1481   SVGA3dComparisonFunc frontStencilFunc;
1482
1483   uint8 backStencilFailOp;
1484   uint8 backStencilDepthFailOp;
1485   uint8 backStencilPassOp;
1486   SVGA3dComparisonFunc backStencilFunc;
1487}
1488#include "vmware_pack_end.h"
1489SVGACOTableDXDepthStencilEntry;
1490
1491/*
1492 */
1493typedef
1494#include "vmware_pack_begin.h"
1495struct SVGA3dCmdDXDefineDepthStencilState {
1496   SVGA3dDepthStencilStateId depthStencilId;
1497
1498   uint8 depthEnable;
1499   SVGA3dDepthWriteMask depthWriteMask;
1500   SVGA3dComparisonFunc depthFunc;
1501   uint8 stencilEnable;
1502   uint8 frontEnable;
1503   uint8 backEnable;
1504   uint8 stencilReadMask;
1505   uint8 stencilWriteMask;
1506
1507   uint8 frontStencilFailOp;
1508   uint8 frontStencilDepthFailOp;
1509   uint8 frontStencilPassOp;
1510   SVGA3dComparisonFunc frontStencilFunc;
1511
1512   uint8 backStencilFailOp;
1513   uint8 backStencilDepthFailOp;
1514   uint8 backStencilPassOp;
1515   SVGA3dComparisonFunc backStencilFunc;
1516}
1517#include "vmware_pack_end.h"
1518SVGA3dCmdDXDefineDepthStencilState;
1519/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE */
1520
1521typedef
1522#include "vmware_pack_begin.h"
1523struct SVGA3dCmdDXDestroyDepthStencilState {
1524   SVGA3dDepthStencilStateId depthStencilId;
1525}
1526#include "vmware_pack_end.h"
1527SVGA3dCmdDXDestroyDepthStencilState;
1528/* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE */
1529
1530typedef
1531#include "vmware_pack_begin.h"
1532struct {
1533   uint8 fillMode;
1534   SVGA3dCullMode cullMode;
1535   uint8 frontCounterClockwise;
1536   uint8 provokingVertexLast;
1537   int32 depthBias;
1538   float depthBiasClamp;
1539   float slopeScaledDepthBias;
1540   uint8 depthClipEnable;
1541   uint8 scissorEnable;
1542   SVGA3dMultisampleRastEnable multisampleEnable;
1543   uint8 antialiasedLineEnable;
1544   float lineWidth;
1545   uint8 lineStippleEnable;
1546   uint8 lineStippleFactor;
1547   uint16 lineStipplePattern;
1548   uint8 forcedSampleCount;
1549   uint8 mustBeZero[3];
1550}
1551#include "vmware_pack_end.h"
1552SVGACOTableDXRasterizerStateEntry;
1553
1554/*
1555 */
1556typedef
1557#include "vmware_pack_begin.h"
1558struct SVGA3dCmdDXDefineRasterizerState {
1559   SVGA3dRasterizerStateId rasterizerId;
1560
1561   uint8 fillMode;
1562   SVGA3dCullMode cullMode;
1563   uint8 frontCounterClockwise;
1564   uint8 provokingVertexLast;
1565   int32 depthBias;
1566   float depthBiasClamp;
1567   float slopeScaledDepthBias;
1568   uint8 depthClipEnable;
1569   uint8 scissorEnable;
1570   SVGA3dMultisampleRastEnable multisampleEnable;
1571   uint8 antialiasedLineEnable;
1572   float lineWidth;
1573   uint8 lineStippleEnable;
1574   uint8 lineStippleFactor;
1575   uint16 lineStipplePattern;
1576}
1577#include "vmware_pack_end.h"
1578SVGA3dCmdDXDefineRasterizerState;
1579/* SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE */
1580
1581typedef
1582#include "vmware_pack_begin.h"
1583struct SVGA3dCmdDXDestroyRasterizerState {
1584   SVGA3dRasterizerStateId rasterizerId;
1585}
1586#include "vmware_pack_end.h"
1587SVGA3dCmdDXDestroyRasterizerState;
1588/* SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE */
1589
1590typedef
1591#include "vmware_pack_begin.h"
1592struct {
1593   SVGA3dFilter filter;
1594   uint8 addressU;
1595   uint8 addressV;
1596   uint8 addressW;
1597   uint8 pad0;
1598   float mipLODBias;
1599   uint8 maxAnisotropy;
1600   SVGA3dComparisonFunc comparisonFunc;
1601   uint16 pad1;
1602   SVGA3dRGBAFloat borderColor;
1603   float minLOD;
1604   float maxLOD;
1605   uint32 pad2[6];
1606}
1607#include "vmware_pack_end.h"
1608SVGACOTableDXSamplerEntry;
1609
1610/*
1611 */
1612typedef
1613#include "vmware_pack_begin.h"
1614struct SVGA3dCmdDXDefineSamplerState {
1615   SVGA3dSamplerId samplerId;
1616   SVGA3dFilter filter;
1617   uint8 addressU;
1618   uint8 addressV;
1619   uint8 addressW;
1620   uint8 pad0;
1621   float mipLODBias;
1622   uint8 maxAnisotropy;
1623   SVGA3dComparisonFunc comparisonFunc;
1624   uint16 pad1;
1625   SVGA3dRGBAFloat borderColor;
1626   float minLOD;
1627   float maxLOD;
1628}
1629#include "vmware_pack_end.h"
1630SVGA3dCmdDXDefineSamplerState; /* SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE */
1631
1632typedef
1633#include "vmware_pack_begin.h"
1634struct SVGA3dCmdDXDestroySamplerState {
1635   SVGA3dSamplerId samplerId;
1636}
1637#include "vmware_pack_end.h"
1638SVGA3dCmdDXDestroySamplerState; /* SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE */
1639
1640
1641#define SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED                          0
1642#define SVGADX_SIGNATURE_SEMANTIC_NAME_POSITION                           1
1643#define SVGADX_SIGNATURE_SEMANTIC_NAME_CLIP_DISTANCE                      2
1644#define SVGADX_SIGNATURE_SEMANTIC_NAME_CULL_DISTANCE                      3
1645#define SVGADX_SIGNATURE_SEMANTIC_NAME_RENDER_TARGET_ARRAY_INDEX          4
1646#define SVGADX_SIGNATURE_SEMANTIC_NAME_VIEWPORT_ARRAY_INDEX               5
1647#define SVGADX_SIGNATURE_SEMANTIC_NAME_VERTEX_ID                          6
1648#define SVGADX_SIGNATURE_SEMANTIC_NAME_PRIMITIVE_ID                       7
1649#define SVGADX_SIGNATURE_SEMANTIC_NAME_INSTANCE_ID                        8
1650#define SVGADX_SIGNATURE_SEMANTIC_NAME_IS_FRONT_FACE                      9
1651#define SVGADX_SIGNATURE_SEMANTIC_NAME_SAMPLE_INDEX                       10
1652#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR  11
1653#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR  12
1654#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR  13
1655#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR  14
1656#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR     15
1657#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR     16
1658#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR   17
1659#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR   18
1660#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR   19
1661#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_INSIDE_TESSFACTOR        20
1662#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DETAIL_TESSFACTOR       21
1663#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DENSITY_TESSFACTOR      22
1664#define SVGADX_SIGNATURE_SEMANTIC_NAME_MAX                                23
1665typedef uint32 SVGA3dDXSignatureSemanticName;
1666
1667#define SVGADX_SIGNATURE_REGISTER_COMPONENT_UNKNOWN 0
1668typedef uint32 SVGA3dDXSignatureRegisterComponentType;
1669
1670#define SVGADX_SIGNATURE_MIN_PRECISION_DEFAULT 0
1671typedef uint32 SVGA3dDXSignatureMinPrecision;
1672
1673typedef
1674#include "vmware_pack_begin.h"
1675struct SVGA3dDXSignatureEntry {
1676   uint32 registerIndex;
1677   SVGA3dDXSignatureSemanticName semanticName;
1678   uint32 mask; /* Lower 4 bits represent X, Y, Z, W channels */
1679   SVGA3dDXSignatureRegisterComponentType componentType;
1680   SVGA3dDXSignatureMinPrecision minPrecision;
1681}
1682#include "vmware_pack_end.h"
1683SVGA3dDXShaderSignatureEntry;
1684
1685#define SVGADX_SIGNATURE_HEADER_VERSION_0 0x08a92d12
1686
1687/*
1688 * The SVGA3dDXSignatureHeader structure is added after the shader
1689 * body in the mob that is bound to the shader.  It is followed by the
1690 * specified number of SVGA3dDXSignatureEntry structures for each of
1691 * the three types of signatures in the order (input, output, patch
1692 * constants).
1693 */
1694typedef
1695#include "vmware_pack_begin.h"
1696struct SVGA3dDXSignatureHeader {
1697   uint32 headerVersion;
1698   uint32 numInputSignatures;
1699   uint32 numOutputSignatures;
1700   uint32 numPatchConstantSignatures;
1701}
1702#include "vmware_pack_end.h"
1703SVGA3dDXShaderSignatureHeader;
1704
1705typedef
1706#include "vmware_pack_begin.h"
1707struct SVGA3dCmdDXDefineShader {
1708   SVGA3dShaderId shaderId;
1709   SVGA3dShaderType type;
1710   uint32 sizeInBytes; /* Number of bytes of shader text. */
1711}
1712#include "vmware_pack_end.h"
1713SVGA3dCmdDXDefineShader; /* SVGA_3D_CMD_DX_DEFINE_SHADER */
1714
1715typedef
1716#include "vmware_pack_begin.h"
1717struct SVGACOTableDXShaderEntry {
1718   SVGA3dShaderType type;
1719   uint32 sizeInBytes;
1720   uint32 offsetInBytes;
1721   SVGAMobId mobid;
1722   uint32 pad[4];
1723}
1724#include "vmware_pack_end.h"
1725SVGACOTableDXShaderEntry;
1726
1727typedef
1728#include "vmware_pack_begin.h"
1729struct SVGA3dCmdDXDestroyShader {
1730   SVGA3dShaderId shaderId;
1731}
1732#include "vmware_pack_end.h"
1733SVGA3dCmdDXDestroyShader; /* SVGA_3D_CMD_DX_DESTROY_SHADER */
1734
1735typedef
1736#include "vmware_pack_begin.h"
1737struct SVGA3dCmdDXBindShader {
1738   uint32 cid;
1739   uint32 shid;
1740   SVGAMobId mobid;
1741   uint32 offsetInBytes;
1742}
1743#include "vmware_pack_end.h"
1744SVGA3dCmdDXBindShader;   /* SVGA_3D_CMD_DX_BIND_SHADER */
1745
1746typedef
1747#include "vmware_pack_begin.h"
1748struct SVGA3dCmdDXBindAllShader {
1749   uint32 cid;
1750   SVGAMobId mobid;
1751}
1752#include "vmware_pack_end.h"
1753SVGA3dCmdDXBindAllShader;   /* SVGA_3D_CMD_DX_BIND_ALL_SHADER */
1754
1755typedef
1756#include "vmware_pack_begin.h"
1757struct SVGA3dCmdDXCondBindAllShader {
1758   uint32 cid;
1759   SVGAMobId testMobid;
1760   SVGAMobId mobid;
1761}
1762#include "vmware_pack_end.h"
1763SVGA3dCmdDXCondBindAllShader;   /* SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER */
1764
1765/*
1766 * The maximum number of streamout decl's in each streamout entry.
1767 */
1768#define SVGA3D_MAX_DX10_STREAMOUT_DECLS 64
1769#define SVGA3D_MAX_STREAMOUT_DECLS 512
1770
1771typedef
1772#include "vmware_pack_begin.h"
1773struct SVGA3dStreamOutputDeclarationEntry {
1774   uint32 outputSlot;
1775   uint32 registerIndex;
1776   uint8  registerMask;
1777   uint8  pad0;
1778   uint16 pad1;
1779   uint32 stream;
1780}
1781#include "vmware_pack_end.h"
1782SVGA3dStreamOutputDeclarationEntry;
1783
1784typedef
1785#include "vmware_pack_begin.h"
1786struct SVGAOTableStreamOutputEntry {
1787   uint32 numOutputStreamEntries;
1788   SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_DX10_STREAMOUT_DECLS];
1789   uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
1790   uint32 rasterizedStream;
1791   uint32 numOutputStreamStrides;
1792   uint32 mobid;
1793   uint32 offsetInBytes;
1794   uint8 usesMob;
1795   uint8 pad0;
1796   uint16 pad1;
1797   uint32 pad2[246];
1798}
1799#include "vmware_pack_end.h"
1800SVGACOTableDXStreamOutputEntry;
1801
1802typedef
1803#include "vmware_pack_begin.h"
1804struct SVGA3dCmdDXDefineStreamOutput {
1805   SVGA3dStreamOutputId soid;
1806   uint32 numOutputStreamEntries;
1807   SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_DX10_STREAMOUT_DECLS];
1808   uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
1809   uint32 rasterizedStream;
1810}
1811#include "vmware_pack_end.h"
1812SVGA3dCmdDXDefineStreamOutput; /* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT */
1813
1814/*
1815 * Version 2 needed in order to start validating and using the
1816 * rasterizedStream field.  Unfortunately the device wasn't validating
1817 * or using this field and the driver wasn't initializing it in shipped
1818 * code, so a new version of the command is needed to allow that code
1819 * to continue to work.  Also added new numOutputStreamStrides field.
1820 */
1821
1822#define SVGA3D_DX_SO_NO_RASTERIZED_STREAM 0xFFFFFFFF
1823
1824typedef
1825#include "vmware_pack_begin.h"
1826struct SVGA3dCmdDXDefineStreamOutputWithMob {
1827   SVGA3dStreamOutputId soid;
1828   uint32 numOutputStreamEntries;
1829   uint32 numOutputStreamStrides;
1830   uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
1831   uint32 rasterizedStream;
1832}
1833#include "vmware_pack_end.h"
1834SVGA3dCmdDXDefineStreamOutputWithMob;
1835/* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT_WITH_MOB */
1836
1837typedef
1838#include "vmware_pack_begin.h"
1839struct SVGA3dCmdDXBindStreamOutput {
1840   SVGA3dStreamOutputId soid;
1841   uint32 mobid;
1842   uint32 offsetInBytes;
1843   uint32 sizeInBytes;
1844}
1845#include "vmware_pack_end.h"
1846SVGA3dCmdDXBindStreamOutput; /* SVGA_3D_CMD_DX_BIND_STREAMOUTPUT */
1847
1848typedef
1849#include "vmware_pack_begin.h"
1850struct SVGA3dCmdDXDestroyStreamOutput {
1851   SVGA3dStreamOutputId soid;
1852}
1853#include "vmware_pack_end.h"
1854SVGA3dCmdDXDestroyStreamOutput; /* SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT */
1855
1856typedef
1857#include "vmware_pack_begin.h"
1858struct SVGA3dCmdDXSetStreamOutput {
1859   SVGA3dStreamOutputId soid;
1860}
1861#include "vmware_pack_end.h"
1862SVGA3dCmdDXSetStreamOutput; /* SVGA_3D_CMD_DX_SET_STREAMOUTPUT */
1863
1864typedef
1865#include "vmware_pack_begin.h"
1866struct SVGA3dCmdDXSetMinLOD {
1867   SVGA3dSurfaceId sid;
1868   float minLOD;
1869}
1870#include "vmware_pack_end.h"
1871SVGA3dCmdDXSetMinLOD; /* SVGA_3D_CMD_DX_SET_MIN_LOD */
1872
1873typedef
1874#include "vmware_pack_begin.h"
1875struct {
1876   uint64 value;
1877   uint32 mobId;
1878   uint32 mobOffset;
1879}
1880#include "vmware_pack_end.h"
1881SVGA3dCmdDXMobFence64;  /* SVGA_3D_CMD_DX_MOB_FENCE_64 */
1882
1883/*
1884 * SVGA3dCmdSetCOTable --
1885 *
1886 * This command allows the guest to bind a mob to a context-object table.
1887 */
1888typedef
1889#include "vmware_pack_begin.h"
1890struct SVGA3dCmdDXSetCOTable {
1891   uint32 cid;
1892   uint32 mobid;
1893   SVGACOTableType type;
1894   uint32 validSizeInBytes;
1895}
1896#include "vmware_pack_end.h"
1897SVGA3dCmdDXSetCOTable; /* SVGA_3D_CMD_DX_SET_COTABLE */
1898
1899/*
1900 * Guests using SVGA_3D_CMD_DX_GROW_COTABLE are promising that
1901 * the new COTable contains the same contents as the old one, except possibly
1902 * for some new invalid entries at the end.
1903 *
1904 * If there is an old cotable mob bound, it also has to still be valid.
1905 *
1906 * (Otherwise, guests should use the DXSetCOTableBase command.)
1907 */
1908typedef
1909#include "vmware_pack_begin.h"
1910struct SVGA3dCmdDXGrowCOTable {
1911   uint32 cid;
1912   uint32 mobid;
1913   SVGACOTableType type;
1914   uint32 validSizeInBytes;
1915}
1916#include "vmware_pack_end.h"
1917SVGA3dCmdDXGrowCOTable; /* SVGA_3D_CMD_DX_GROW_COTABLE */
1918
1919typedef
1920#include "vmware_pack_begin.h"
1921struct SVGA3dCmdDXReadbackCOTable {
1922   uint32 cid;
1923   SVGACOTableType type;
1924}
1925#include "vmware_pack_end.h"
1926SVGA3dCmdDXReadbackCOTable; /* SVGA_3D_CMD_DX_READBACK_COTABLE */
1927
1928typedef
1929#include "vmware_pack_begin.h"
1930struct SVGA3dCOTableData {
1931   uint32 mobid;
1932}
1933#include "vmware_pack_end.h"
1934SVGA3dCOTableData;
1935
1936typedef
1937#include "vmware_pack_begin.h"
1938struct SVGA3dBufferBinding {
1939   uint32 bufferId;
1940   uint32 stride;
1941   uint32 offset;
1942}
1943#include "vmware_pack_end.h"
1944SVGA3dBufferBinding;
1945
1946typedef
1947#include "vmware_pack_begin.h"
1948struct SVGA3dConstantBufferBinding {
1949   uint32 sid;
1950   uint32 offsetInBytes;
1951   uint32 sizeInBytes;
1952}
1953#include "vmware_pack_end.h"
1954SVGA3dConstantBufferBinding;
1955
1956typedef
1957#include "vmware_pack_begin.h"
1958struct SVGADXInputAssemblyMobFormat {
1959   uint32 layoutId;
1960   SVGA3dBufferBinding vertexBuffers[SVGA3D_DX_MAX_VERTEXBUFFERS];
1961   uint32 indexBufferSid;
1962   uint32 pad;
1963   uint32 indexBufferOffset;
1964   uint32 indexBufferFormat;
1965   uint32 topology;
1966}
1967#include "vmware_pack_end.h"
1968SVGADXInputAssemblyMobFormat;
1969
1970typedef
1971#include "vmware_pack_begin.h"
1972struct SVGADXContextMobFormat {
1973   SVGADXInputAssemblyMobFormat inputAssembly;
1974
1975   struct {
1976      uint32 blendStateId;
1977      uint32 blendFactor[4];
1978      uint32 sampleMask;
1979      uint32 depthStencilStateId;
1980      uint32 stencilRef;
1981      uint32 rasterizerStateId;
1982      uint32 depthStencilViewId;
1983      uint32 renderTargetViewIds[SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS];
1984   } renderState;
1985
1986   uint32 pad0[8];
1987
1988   struct {
1989      uint32 targets[SVGA3D_DX_MAX_SOTARGETS];
1990      uint32 soid;
1991   } streamOut;
1992
1993   uint32 pad1[10];
1994
1995   uint32 uavSpliceIndex;
1996
1997   uint8 numViewports;
1998   uint8 numScissorRects;
1999   uint16 pad2[1];
2000
2001   uint32 pad3[3];
2002
2003   SVGA3dViewport viewports[SVGA3D_DX_MAX_VIEWPORTS];
2004   uint32 pad4[32];
2005
2006   SVGASignedRect scissorRects[SVGA3D_DX_MAX_SCISSORRECTS];
2007   uint32 pad5[64];
2008
2009   struct {
2010      uint32 queryID;
2011      uint32 value;
2012   } predication;
2013
2014   SVGAMobId shaderIfaceMobid;
2015   uint32 shaderIfaceOffset;
2016   struct {
2017      uint32 shaderId;
2018      SVGA3dConstantBufferBinding constantBuffers[SVGA3D_DX_MAX_CONSTBUFFERS];
2019      uint32 shaderResources[SVGA3D_DX_MAX_SRVIEWS];
2020      uint32 samplers[SVGA3D_DX_MAX_SAMPLERS];
2021   } shaderState[SVGA3D_NUM_SHADERTYPE];
2022   uint32 pad6[26];
2023
2024   SVGA3dQueryId queryID[SVGA3D_MAX_QUERY];
2025
2026   SVGA3dCOTableData cotables[SVGA_COTABLE_MAX];
2027
2028   uint32 pad7[64];
2029
2030   uint32 uaViewIds[SVGA3D_DX11_1_MAX_UAVIEWS];
2031   uint32 csuaViewIds[SVGA3D_DX11_1_MAX_UAVIEWS];
2032
2033   uint32 pad8[188];
2034}
2035#include "vmware_pack_end.h"
2036SVGADXContextMobFormat;
2037
2038/*
2039 * There is conflicting documentation on max class instances (253 vs 256).  The
2040 * lower value is the one used throughout the device, but since mob format is
2041 * more involved to increase if needed, conservatively use the higher one here.
2042 */
2043#define SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED 256
2044
2045typedef
2046#include "vmware_pack_begin.h"
2047struct SVGADXShaderIfaceMobFormat {
2048   struct {
2049      uint32 numClassInstances;
2050      uint32 iface[SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED];
2051      SVGA3dIfaceData data[SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED];
2052   } shaderIfaceState[SVGA3D_NUM_SHADERTYPE];
2053
2054   uint32 pad0[1018];
2055}
2056#include "vmware_pack_end.h"
2057SVGADXShaderIfaceMobFormat;
2058
2059typedef
2060#include "vmware_pack_begin.h"
2061struct SVGA3dCmdDXTempSetContext {
2062   uint32 dxcid;
2063}
2064#include "vmware_pack_end.h"
2065SVGA3dCmdDXTempSetContext; /* SVGA_3D_CMD_DX_TEMP_SET_CONTEXT */
2066
2067#endif /* _SVGA3D_DX_H_ */
2068