Home | History | Annotate | Line # | Download | only in device_include
      1 /*	$NetBSD: svga3d_dx.h,v 1.3 2021/12/18 23:45:45 riastradh Exp $	*/
      2 
      3 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
      4 /**********************************************************
      5  * Copyright 2012-2015 VMware, Inc.
      6  *
      7  * Permission is hereby granted, free of charge, to any person
      8  * obtaining a copy of this software and associated documentation
      9  * files (the "Software"), to deal in the Software without
     10  * restriction, including without limitation the rights to use, copy,
     11  * modify, merge, publish, distribute, sublicense, and/or sell copies
     12  * of the Software, and to permit persons to whom the Software is
     13  * furnished to do so, subject to the following conditions:
     14  *
     15  * The above copyright notice and this permission notice shall be
     16  * included in all copies or substantial portions of the Software.
     17  *
     18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     19  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     21  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
     22  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
     23  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     24  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     25  * SOFTWARE.
     26  *
     27  **********************************************************/
     28 
     29 /*
     30  * svga3d_dx.h --
     31  *
     32  *       SVGA 3d hardware definitions for DX10 support.
     33  */
     34 
     35 #ifndef _SVGA3D_DX_H_
     36 #define _SVGA3D_DX_H_
     37 
     38 #define INCLUDE_ALLOW_MODULE
     39 #define INCLUDE_ALLOW_USERLEVEL
     40 #define INCLUDE_ALLOW_VMCORE
     41 #include "includeCheck.h"
     42 
     43 #include "svga3d_limits.h"
     44 
     45 #define SVGA3D_INPUT_MIN               0
     46 #define SVGA3D_INPUT_PER_VERTEX_DATA   0
     47 #define SVGA3D_INPUT_PER_INSTANCE_DATA 1
     48 #define SVGA3D_INPUT_MAX               2
     49 typedef uint32 SVGA3dInputClassification;
     50 
     51 #define SVGA3D_RESOURCE_TYPE_MIN      1
     52 #define SVGA3D_RESOURCE_BUFFER        1
     53 #define SVGA3D_RESOURCE_TEXTURE1D     2
     54 #define SVGA3D_RESOURCE_TEXTURE2D     3
     55 #define SVGA3D_RESOURCE_TEXTURE3D     4
     56 #define SVGA3D_RESOURCE_TEXTURECUBE   5
     57 #define SVGA3D_RESOURCE_TYPE_DX10_MAX 6
     58 #define SVGA3D_RESOURCE_BUFFEREX      6
     59 #define SVGA3D_RESOURCE_TYPE_MAX      7
     60 typedef uint32 SVGA3dResourceType;
     61 
     62 #define SVGA3D_COLOR_WRITE_ENABLE_RED     (1 << 0)
     63 #define SVGA3D_COLOR_WRITE_ENABLE_GREEN   (1 << 1)
     64 #define SVGA3D_COLOR_WRITE_ENABLE_BLUE    (1 << 2)
     65 #define SVGA3D_COLOR_WRITE_ENABLE_ALPHA   (1 << 3)
     66 #define SVGA3D_COLOR_WRITE_ENABLE_ALL     (SVGA3D_COLOR_WRITE_ENABLE_RED |   \
     67                                            SVGA3D_COLOR_WRITE_ENABLE_GREEN | \
     68                                            SVGA3D_COLOR_WRITE_ENABLE_BLUE |  \
     69                                            SVGA3D_COLOR_WRITE_ENABLE_ALPHA)
     70 typedef uint8 SVGA3dColorWriteEnable;
     71 
     72 #define SVGA3D_DEPTH_WRITE_MASK_ZERO   0
     73 #define SVGA3D_DEPTH_WRITE_MASK_ALL    1
     74 typedef uint8 SVGA3dDepthWriteMask;
     75 
     76 #define SVGA3D_FILTER_MIP_LINEAR  (1 << 0)
     77 #define SVGA3D_FILTER_MAG_LINEAR  (1 << 2)
     78 #define SVGA3D_FILTER_MIN_LINEAR  (1 << 4)
     79 #define SVGA3D_FILTER_ANISOTROPIC (1 << 6)
     80 #define SVGA3D_FILTER_COMPARE     (1 << 7)
     81 typedef uint32 SVGA3dFilter;
     82 
     83 #define SVGA3D_CULL_INVALID 0
     84 #define SVGA3D_CULL_MIN     1
     85 #define SVGA3D_CULL_NONE    1
     86 #define SVGA3D_CULL_FRONT   2
     87 #define SVGA3D_CULL_BACK    3
     88 #define SVGA3D_CULL_MAX     4
     89 typedef uint8 SVGA3dCullMode;
     90 
     91 #define SVGA3D_COMPARISON_INVALID         0
     92 #define SVGA3D_COMPARISON_MIN             1
     93 #define SVGA3D_COMPARISON_NEVER           1
     94 #define SVGA3D_COMPARISON_LESS            2
     95 #define SVGA3D_COMPARISON_EQUAL           3
     96 #define SVGA3D_COMPARISON_LESS_EQUAL      4
     97 #define SVGA3D_COMPARISON_GREATER         5
     98 #define SVGA3D_COMPARISON_NOT_EQUAL       6
     99 #define SVGA3D_COMPARISON_GREATER_EQUAL   7
    100 #define SVGA3D_COMPARISON_ALWAYS          8
    101 #define SVGA3D_COMPARISON_MAX             9
    102 typedef uint8 SVGA3dComparisonFunc;
    103 
    104 /*
    105  * SVGA3D_MULTISAMPLE_RAST_DISABLE disables MSAA for all primitives.
    106  * SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE, which is supported in SM41,
    107  * disables MSAA for lines only.
    108  */
    109 #define SVGA3D_MULTISAMPLE_RAST_DISABLE        0
    110 #define SVGA3D_MULTISAMPLE_RAST_ENABLE         1
    111 #define SVGA3D_MULTISAMPLE_RAST_DX_MAX         1
    112 #define SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE   2
    113 #define SVGA3D_MULTISAMPLE_RAST_MAX            2
    114 typedef uint8 SVGA3dMultisampleRastEnable;
    115 
    116 #define SVGA3D_DX_MAX_VERTEXBUFFERS 32
    117 #define SVGA3D_DX_MAX_VERTEXINPUTREGISTERS 16
    118 #define SVGA3D_DX_SM41_MAX_VERTEXINPUTREGISTERS 32
    119 #define SVGA3D_DX_MAX_SOTARGETS 4
    120 #define SVGA3D_DX_MAX_SRVIEWS 128
    121 #define SVGA3D_DX_MAX_CONSTBUFFERS 16
    122 #define SVGA3D_DX_MAX_SAMPLERS 16
    123 
    124 #define SVGA3D_DX_MAX_CONSTBUF_BINDING_SIZE (4096 * 4 * (uint32)sizeof(uint32))
    125 
    126 typedef uint32 SVGA3dShaderResourceViewId;
    127 typedef uint32 SVGA3dRenderTargetViewId;
    128 typedef uint32 SVGA3dDepthStencilViewId;
    129 
    130 typedef uint32 SVGA3dShaderId;
    131 typedef uint32 SVGA3dElementLayoutId;
    132 typedef uint32 SVGA3dSamplerId;
    133 typedef uint32 SVGA3dBlendStateId;
    134 typedef uint32 SVGA3dDepthStencilStateId;
    135 typedef uint32 SVGA3dRasterizerStateId;
    136 typedef uint32 SVGA3dQueryId;
    137 typedef uint32 SVGA3dStreamOutputId;
    138 
    139 typedef union {
    140    struct {
    141       float r;
    142       float g;
    143       float b;
    144       float a;
    145    };
    146 
    147    float value[4];
    148 } SVGA3dRGBAFloat;
    149 
    150 typedef
    151 #include "vmware_pack_begin.h"
    152 struct {
    153    uint32 cid;
    154    SVGAMobId mobid;
    155 }
    156 #include "vmware_pack_end.h"
    157 SVGAOTableDXContextEntry;
    158 
    159 typedef
    160 #include "vmware_pack_begin.h"
    161 struct SVGA3dCmdDXDefineContext {
    162    uint32 cid;
    163 }
    164 #include "vmware_pack_end.h"
    165 SVGA3dCmdDXDefineContext;   /* SVGA_3D_CMD_DX_DEFINE_CONTEXT */
    166 
    167 typedef
    168 #include "vmware_pack_begin.h"
    169 struct SVGA3dCmdDXDestroyContext {
    170    uint32 cid;
    171 }
    172 #include "vmware_pack_end.h"
    173 SVGA3dCmdDXDestroyContext;   /* SVGA_3D_CMD_DX_DESTROY_CONTEXT */
    174 
    175 /*
    176  * Bind a DX context.
    177  *
    178  * validContents should be set to 0 for new contexts,
    179  * and 1 if this is an old context which is getting paged
    180  * back on to the device.
    181  *
    182  * For new contexts, it is recommended that the driver
    183  * issue commands to initialize all interesting state
    184  * prior to rendering.
    185  */
    186 typedef
    187 #include "vmware_pack_begin.h"
    188 struct SVGA3dCmdDXBindContext {
    189    uint32 cid;
    190    SVGAMobId mobid;
    191    uint32 validContents;
    192 }
    193 #include "vmware_pack_end.h"
    194 SVGA3dCmdDXBindContext;   /* SVGA_3D_CMD_DX_BIND_CONTEXT */
    195 
    196 /*
    197  * Readback a DX context.
    198  * (Request that the device flush the contents back into guest memory.)
    199  */
    200 typedef
    201 #include "vmware_pack_begin.h"
    202 struct SVGA3dCmdDXReadbackContext {
    203    uint32 cid;
    204 }
    205 #include "vmware_pack_end.h"
    206 SVGA3dCmdDXReadbackContext;   /* SVGA_3D_CMD_DX_READBACK_CONTEXT */
    207 
    208 /*
    209  * Invalidate a guest-backed context.
    210  */
    211 typedef
    212 #include "vmware_pack_begin.h"
    213 struct SVGA3dCmdDXInvalidateContext {
    214    uint32 cid;
    215 }
    216 #include "vmware_pack_end.h"
    217 SVGA3dCmdDXInvalidateContext;   /* SVGA_3D_CMD_DX_INVALIDATE_CONTEXT */
    218 
    219 typedef
    220 #include "vmware_pack_begin.h"
    221 struct SVGA3dCmdDXSetSingleConstantBuffer {
    222    uint32 slot;
    223    SVGA3dShaderType type;
    224    SVGA3dSurfaceId sid;
    225    uint32 offsetInBytes;
    226    uint32 sizeInBytes;
    227 }
    228 #include "vmware_pack_end.h"
    229 SVGA3dCmdDXSetSingleConstantBuffer;
    230 /* SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER */
    231 
    232 typedef
    233 #include "vmware_pack_begin.h"
    234 struct SVGA3dCmdDXSetShaderResources {
    235    uint32 startView;
    236    SVGA3dShaderType type;
    237 
    238    /*
    239     * Followed by a variable number of SVGA3dShaderResourceViewId's.
    240     */
    241 }
    242 #include "vmware_pack_end.h"
    243 SVGA3dCmdDXSetShaderResources; /* SVGA_3D_CMD_DX_SET_SHADER_RESOURCES */
    244 
    245 typedef
    246 #include "vmware_pack_begin.h"
    247 struct SVGA3dCmdDXSetShader {
    248    SVGA3dShaderId shaderId;
    249    SVGA3dShaderType type;
    250 }
    251 #include "vmware_pack_end.h"
    252 SVGA3dCmdDXSetShader; /* SVGA_3D_CMD_DX_SET_SHADER */
    253 
    254 typedef
    255 #include "vmware_pack_begin.h"
    256 struct SVGA3dCmdDXSetSamplers {
    257    uint32 startSampler;
    258    SVGA3dShaderType type;
    259 
    260    /*
    261     * Followed by a variable number of SVGA3dSamplerId's.
    262     */
    263 }
    264 #include "vmware_pack_end.h"
    265 SVGA3dCmdDXSetSamplers; /* SVGA_3D_CMD_DX_SET_SAMPLERS */
    266 
    267 typedef
    268 #include "vmware_pack_begin.h"
    269 struct SVGA3dCmdDXDraw {
    270    uint32 vertexCount;
    271    uint32 startVertexLocation;
    272 }
    273 #include "vmware_pack_end.h"
    274 SVGA3dCmdDXDraw; /* SVGA_3D_CMD_DX_DRAW */
    275 
    276 typedef
    277 #include "vmware_pack_begin.h"
    278 struct SVGA3dCmdDXDrawIndexed {
    279    uint32 indexCount;
    280    uint32 startIndexLocation;
    281    int32  baseVertexLocation;
    282 }
    283 #include "vmware_pack_end.h"
    284 SVGA3dCmdDXDrawIndexed; /* SVGA_3D_CMD_DX_DRAW_INDEXED */
    285 
    286 typedef
    287 #include "vmware_pack_begin.h"
    288 struct SVGA3dCmdDXDrawInstanced {
    289    uint32 vertexCountPerInstance;
    290    uint32 instanceCount;
    291    uint32 startVertexLocation;
    292    uint32 startInstanceLocation;
    293 }
    294 #include "vmware_pack_end.h"
    295 SVGA3dCmdDXDrawInstanced; /* SVGA_3D_CMD_DX_DRAW_INSTANCED */
    296 
    297 typedef
    298 #include "vmware_pack_begin.h"
    299 struct SVGA3dCmdDXDrawIndexedInstanced {
    300    uint32 indexCountPerInstance;
    301    uint32 instanceCount;
    302    uint32 startIndexLocation;
    303    int32  baseVertexLocation;
    304    uint32 startInstanceLocation;
    305 }
    306 #include "vmware_pack_end.h"
    307 SVGA3dCmdDXDrawIndexedInstanced; /* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED */
    308 
    309 typedef
    310 #include "vmware_pack_begin.h"
    311 struct SVGA3dCmdDXDrawAuto {
    312    uint32 pad0;
    313 }
    314 #include "vmware_pack_end.h"
    315 SVGA3dCmdDXDrawAuto; /* SVGA_3D_CMD_DX_DRAW_AUTO */
    316 
    317 typedef
    318 #include "vmware_pack_begin.h"
    319 struct SVGA3dCmdDXSetInputLayout {
    320    SVGA3dElementLayoutId elementLayoutId;
    321 }
    322 #include "vmware_pack_end.h"
    323 SVGA3dCmdDXSetInputLayout; /* SVGA_3D_CMD_DX_SET_INPUT_LAYOUT */
    324 
    325 typedef
    326 #include "vmware_pack_begin.h"
    327 struct SVGA3dVertexBuffer {
    328    SVGA3dSurfaceId sid;
    329    uint32 stride;
    330    uint32 offset;
    331 }
    332 #include "vmware_pack_end.h"
    333 SVGA3dVertexBuffer;
    334 
    335 typedef
    336 #include "vmware_pack_begin.h"
    337 struct SVGA3dCmdDXSetVertexBuffers {
    338    uint32 startBuffer;
    339    /* Followed by a variable number of SVGA3dVertexBuffer's. */
    340 }
    341 #include "vmware_pack_end.h"
    342 SVGA3dCmdDXSetVertexBuffers; /* SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS */
    343 
    344 typedef
    345 #include "vmware_pack_begin.h"
    346 struct SVGA3dCmdDXSetIndexBuffer {
    347    SVGA3dSurfaceId sid;
    348    SVGA3dSurfaceFormat format;
    349    uint32 offset;
    350 }
    351 #include "vmware_pack_end.h"
    352 SVGA3dCmdDXSetIndexBuffer; /* SVGA_3D_CMD_DX_SET_INDEX_BUFFER */
    353 
    354 typedef
    355 #include "vmware_pack_begin.h"
    356 struct SVGA3dCmdDXSetTopology {
    357    SVGA3dPrimitiveType topology;
    358 }
    359 #include "vmware_pack_end.h"
    360 SVGA3dCmdDXSetTopology; /* SVGA_3D_CMD_DX_SET_TOPOLOGY */
    361 
    362 typedef
    363 #include "vmware_pack_begin.h"
    364 struct SVGA3dCmdDXSetRenderTargets {
    365    SVGA3dDepthStencilViewId depthStencilViewId;
    366    /* Followed by a variable number of SVGA3dRenderTargetViewId's. */
    367 }
    368 #include "vmware_pack_end.h"
    369 SVGA3dCmdDXSetRenderTargets; /* SVGA_3D_CMD_DX_SET_RENDERTARGETS */
    370 
    371 typedef
    372 #include "vmware_pack_begin.h"
    373 struct SVGA3dCmdDXSetBlendState {
    374    SVGA3dBlendStateId blendId;
    375    float blendFactor[4];
    376    uint32 sampleMask;
    377 }
    378 #include "vmware_pack_end.h"
    379 SVGA3dCmdDXSetBlendState; /* SVGA_3D_CMD_DX_SET_BLEND_STATE */
    380 
    381 typedef
    382 #include "vmware_pack_begin.h"
    383 struct SVGA3dCmdDXSetDepthStencilState {
    384    SVGA3dDepthStencilStateId depthStencilId;
    385    uint32 stencilRef;
    386 }
    387 #include "vmware_pack_end.h"
    388 SVGA3dCmdDXSetDepthStencilState; /* SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE */
    389 
    390 typedef
    391 #include "vmware_pack_begin.h"
    392 struct SVGA3dCmdDXSetRasterizerState {
    393    SVGA3dRasterizerStateId rasterizerId;
    394 }
    395 #include "vmware_pack_end.h"
    396 SVGA3dCmdDXSetRasterizerState; /* SVGA_3D_CMD_DX_SET_RASTERIZER_STATE */
    397 
    398 #define SVGA3D_DXQUERY_FLAG_PREDICATEHINT (1 << 0)
    399 typedef uint32 SVGA3dDXQueryFlags;
    400 
    401 /*
    402  * The SVGADXQueryDeviceState and SVGADXQueryDeviceBits are used by the device
    403  * to track query state transitions, but are not intended to be used by the
    404  * driver.
    405  */
    406 #define SVGADX_QDSTATE_INVALID   ((uint8)-1) /* Query has no state */
    407 #define SVGADX_QDSTATE_MIN       0
    408 #define SVGADX_QDSTATE_IDLE      0   /* Query hasn't started yet */
    409 #define SVGADX_QDSTATE_ACTIVE    1   /* Query is actively gathering data */
    410 #define SVGADX_QDSTATE_PENDING   2   /* Query is waiting for results */
    411 #define SVGADX_QDSTATE_FINISHED  3   /* Query has completed */
    412 #define SVGADX_QDSTATE_MAX       4
    413 typedef uint8 SVGADXQueryDeviceState;
    414 
    415 typedef
    416 #include "vmware_pack_begin.h"
    417 struct {
    418    SVGA3dQueryTypeUint8 type;
    419    uint16 pad0;
    420    SVGADXQueryDeviceState state;
    421    SVGA3dDXQueryFlags flags;
    422    SVGAMobId mobid;
    423    uint32 offset;
    424 }
    425 #include "vmware_pack_end.h"
    426 SVGACOTableDXQueryEntry;
    427 
    428 typedef
    429 #include "vmware_pack_begin.h"
    430 struct SVGA3dCmdDXDefineQuery {
    431    SVGA3dQueryId queryId;
    432    SVGA3dQueryType type;
    433    SVGA3dDXQueryFlags flags;
    434 }
    435 #include "vmware_pack_end.h"
    436 SVGA3dCmdDXDefineQuery; /* SVGA_3D_CMD_DX_DEFINE_QUERY */
    437 
    438 typedef
    439 #include "vmware_pack_begin.h"
    440 struct SVGA3dCmdDXDestroyQuery {
    441    SVGA3dQueryId queryId;
    442 }
    443 #include "vmware_pack_end.h"
    444 SVGA3dCmdDXDestroyQuery; /* SVGA_3D_CMD_DX_DESTROY_QUERY */
    445 
    446 typedef
    447 #include "vmware_pack_begin.h"
    448 struct SVGA3dCmdDXBindQuery {
    449    SVGA3dQueryId queryId;
    450    SVGAMobId mobid;
    451 }
    452 #include "vmware_pack_end.h"
    453 SVGA3dCmdDXBindQuery; /* SVGA_3D_CMD_DX_BIND_QUERY */
    454 
    455 typedef
    456 #include "vmware_pack_begin.h"
    457 struct SVGA3dCmdDXSetQueryOffset {
    458    SVGA3dQueryId queryId;
    459    uint32 mobOffset;
    460 }
    461 #include "vmware_pack_end.h"
    462 SVGA3dCmdDXSetQueryOffset; /* SVGA_3D_CMD_DX_SET_QUERY_OFFSET */
    463 
    464 typedef
    465 #include "vmware_pack_begin.h"
    466 struct SVGA3dCmdDXBeginQuery {
    467    SVGA3dQueryId queryId;
    468 }
    469 #include "vmware_pack_end.h"
    470 SVGA3dCmdDXBeginQuery; /* SVGA_3D_CMD_DX_QUERY_BEGIN */
    471 
    472 typedef
    473 #include "vmware_pack_begin.h"
    474 struct SVGA3dCmdDXEndQuery {
    475    SVGA3dQueryId queryId;
    476 }
    477 #include "vmware_pack_end.h"
    478 SVGA3dCmdDXEndQuery; /* SVGA_3D_CMD_DX_QUERY_END */
    479 
    480 typedef
    481 #include "vmware_pack_begin.h"
    482 struct SVGA3dCmdDXReadbackQuery {
    483    SVGA3dQueryId queryId;
    484 }
    485 #include "vmware_pack_end.h"
    486 SVGA3dCmdDXReadbackQuery; /* SVGA_3D_CMD_DX_READBACK_QUERY */
    487 
    488 typedef
    489 #include "vmware_pack_begin.h"
    490 struct SVGA3dCmdDXMoveQuery {
    491    SVGA3dQueryId queryId;
    492    SVGAMobId mobid;
    493    uint32 mobOffset;
    494 }
    495 #include "vmware_pack_end.h"
    496 SVGA3dCmdDXMoveQuery; /* SVGA_3D_CMD_DX_MOVE_QUERY */
    497 
    498 typedef
    499 #include "vmware_pack_begin.h"
    500 struct SVGA3dCmdDXBindAllQuery {
    501    uint32 cid;
    502    SVGAMobId mobid;
    503 }
    504 #include "vmware_pack_end.h"
    505 SVGA3dCmdDXBindAllQuery; /* SVGA_3D_CMD_DX_BIND_ALL_QUERY */
    506 
    507 typedef
    508 #include "vmware_pack_begin.h"
    509 struct SVGA3dCmdDXReadbackAllQuery {
    510    uint32 cid;
    511 }
    512 #include "vmware_pack_end.h"
    513 SVGA3dCmdDXReadbackAllQuery; /* SVGA_3D_CMD_DX_READBACK_ALL_QUERY */
    514 
    515 typedef
    516 #include "vmware_pack_begin.h"
    517 struct SVGA3dCmdDXSetPredication {
    518    SVGA3dQueryId queryId;
    519    uint32 predicateValue;
    520 }
    521 #include "vmware_pack_end.h"
    522 SVGA3dCmdDXSetPredication; /* SVGA_3D_CMD_DX_SET_PREDICATION */
    523 
    524 typedef
    525 #include "vmware_pack_begin.h"
    526 struct MKS3dDXSOState {
    527    uint32 offset;       /* Starting offset */
    528    uint32 intOffset;    /* Internal offset */
    529    uint32 vertexCount;  /* vertices written */
    530    uint32 sizeInBytes;  /* max bytes to write */
    531 }
    532 #include "vmware_pack_end.h"
    533 SVGA3dDXSOState;
    534 
    535 /* Set the offset field to this value to append SO values to the buffer */
    536 #define SVGA3D_DX_SO_OFFSET_APPEND ((uint32) ~0u)
    537 
    538 typedef
    539 #include "vmware_pack_begin.h"
    540 struct SVGA3dSoTarget {
    541    SVGA3dSurfaceId sid;
    542    uint32 offset;
    543    uint32 sizeInBytes;
    544 }
    545 #include "vmware_pack_end.h"
    546 SVGA3dSoTarget;
    547 
    548 typedef
    549 #include "vmware_pack_begin.h"
    550 struct SVGA3dCmdDXSetSOTargets {
    551    uint32 pad0;
    552    /* Followed by a variable number of SVGA3dSOTarget's. */
    553 }
    554 #include "vmware_pack_end.h"
    555 SVGA3dCmdDXSetSOTargets; /* SVGA_3D_CMD_DX_SET_SOTARGETS */
    556 
    557 typedef
    558 #include "vmware_pack_begin.h"
    559 struct SVGA3dViewport
    560 {
    561    float x;
    562    float y;
    563    float width;
    564    float height;
    565    float minDepth;
    566    float maxDepth;
    567 }
    568 #include "vmware_pack_end.h"
    569 SVGA3dViewport;
    570 
    571 typedef
    572 #include "vmware_pack_begin.h"
    573 struct SVGA3dCmdDXSetViewports {
    574    uint32 pad0;
    575    /* Followed by a variable number of SVGA3dViewport's. */
    576 }
    577 #include "vmware_pack_end.h"
    578 SVGA3dCmdDXSetViewports; /* SVGA_3D_CMD_DX_SET_VIEWPORTS */
    579 
    580 #define SVGA3D_DX_MAX_VIEWPORTS  16
    581 
    582 typedef
    583 #include "vmware_pack_begin.h"
    584 struct SVGA3dCmdDXSetScissorRects {
    585    uint32 pad0;
    586    /* Followed by a variable number of SVGASignedRect's. */
    587 }
    588 #include "vmware_pack_end.h"
    589 SVGA3dCmdDXSetScissorRects; /* SVGA_3D_CMD_DX_SET_SCISSORRECTS */
    590 
    591 #define SVGA3D_DX_MAX_SCISSORRECTS  16
    592 
    593 typedef
    594 #include "vmware_pack_begin.h"
    595 struct SVGA3dCmdDXClearRenderTargetView {
    596    SVGA3dRenderTargetViewId renderTargetViewId;
    597    SVGA3dRGBAFloat rgba;
    598 }
    599 #include "vmware_pack_end.h"
    600 SVGA3dCmdDXClearRenderTargetView; /* SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW */
    601 
    602 typedef
    603 #include "vmware_pack_begin.h"
    604 struct SVGA3dCmdDXClearDepthStencilView {
    605    uint16 flags;
    606    uint16 stencil;
    607    SVGA3dDepthStencilViewId depthStencilViewId;
    608    float depth;
    609 }
    610 #include "vmware_pack_end.h"
    611 SVGA3dCmdDXClearDepthStencilView; /* SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW */
    612 
    613 typedef
    614 #include "vmware_pack_begin.h"
    615 struct SVGA3dCmdDXPredCopyRegion {
    616    SVGA3dSurfaceId dstSid;
    617    uint32 dstSubResource;
    618    SVGA3dSurfaceId srcSid;
    619    uint32 srcSubResource;
    620    SVGA3dCopyBox box;
    621 }
    622 #include "vmware_pack_end.h"
    623 SVGA3dCmdDXPredCopyRegion;
    624 /* SVGA_3D_CMD_DX_PRED_COPY_REGION */
    625 
    626 typedef
    627 #include "vmware_pack_begin.h"
    628 struct SVGA3dCmdDXPredCopy {
    629    SVGA3dSurfaceId dstSid;
    630    SVGA3dSurfaceId srcSid;
    631 }
    632 #include "vmware_pack_end.h"
    633 SVGA3dCmdDXPredCopy; /* SVGA_3D_CMD_DX_PRED_COPY */
    634 
    635 typedef
    636 #include "vmware_pack_begin.h"
    637 struct SVGA3dCmdDXPredConvertRegion {
    638    SVGA3dSurfaceId dstSid;
    639    uint32 dstSubResource;
    640    SVGA3dBox destBox;
    641    SVGA3dSurfaceId srcSid;
    642    uint32 srcSubResource;
    643    SVGA3dBox srcBox;
    644 }
    645 #include "vmware_pack_end.h"
    646 SVGA3dCmdDXPredConvertRegion; /* SVGA_3D_CMD_DX_PRED_CONVERT_REGION */
    647 
    648 typedef
    649 #include "vmware_pack_begin.h"
    650 struct SVGA3dCmdDXPredConvert {
    651    SVGA3dSurfaceId dstSid;
    652    SVGA3dSurfaceId srcSid;
    653 }
    654 #include "vmware_pack_end.h"
    655 SVGA3dCmdDXPredConvert; /* SVGA_3D_CMD_DX_PRED_CONVERT */
    656 
    657 typedef
    658 #include "vmware_pack_begin.h"
    659 struct SVGA3dCmdDXBufferCopy {
    660    SVGA3dSurfaceId dest;
    661    SVGA3dSurfaceId src;
    662    uint32 destX;
    663    uint32 srcX;
    664    uint32 width;
    665 }
    666 #include "vmware_pack_end.h"
    667 SVGA3dCmdDXBufferCopy;
    668 /* SVGA_3D_CMD_DX_BUFFER_COPY */
    669 
    670 /*
    671  * Perform a surface copy between a multisample, and a non-multisampled
    672  * surface.
    673  */
    674 typedef
    675 #include "vmware_pack_begin.h"
    676 struct {
    677    SVGA3dSurfaceId dstSid;
    678    uint32 dstSubResource;
    679    SVGA3dSurfaceId srcSid;
    680    uint32 srcSubResource;
    681    SVGA3dSurfaceFormat copyFormat;
    682 }
    683 #include "vmware_pack_end.h"
    684 SVGA3dCmdDXResolveCopy;               /* SVGA_3D_CMD_DX_RESOLVE_COPY */
    685 
    686 /*
    687  * Perform a predicated surface copy between a multisample, and a
    688  * non-multisampled surface.
    689  */
    690 typedef
    691 #include "vmware_pack_begin.h"
    692 struct {
    693    SVGA3dSurfaceId dstSid;
    694    uint32 dstSubResource;
    695    SVGA3dSurfaceId srcSid;
    696    uint32 srcSubResource;
    697    SVGA3dSurfaceFormat copyFormat;
    698 }
    699 #include "vmware_pack_end.h"
    700 SVGA3dCmdDXPredResolveCopy;           /* SVGA_3D_CMD_DX_PRED_RESOLVE_COPY */
    701 
    702 typedef uint32 SVGA3dDXPresentBltMode;
    703 #define SVGADX_PRESENTBLT_LINEAR           (1 << 0)
    704 #define SVGADX_PRESENTBLT_FORCE_SRC_SRGB   (1 << 1)
    705 #define SVGADX_PRESENTBLT_FORCE_SRC_XRBIAS (1 << 2)
    706 #define SVGADX_PRESENTBLT_MODE_MAX         (1 << 3)
    707 
    708 typedef
    709 #include "vmware_pack_begin.h"
    710 struct SVGA3dCmdDXPresentBlt {
    711    SVGA3dSurfaceId srcSid;
    712    uint32 srcSubResource;
    713    SVGA3dSurfaceId dstSid;
    714    uint32 destSubResource;
    715    SVGA3dBox boxSrc;
    716    SVGA3dBox boxDest;
    717    SVGA3dDXPresentBltMode mode;
    718 }
    719 #include "vmware_pack_end.h"
    720 SVGA3dCmdDXPresentBlt; /* SVGA_3D_CMD_DX_PRESENTBLT*/
    721 
    722 typedef
    723 #include "vmware_pack_begin.h"
    724 struct SVGA3dCmdDXGenMips {
    725    SVGA3dShaderResourceViewId shaderResourceViewId;
    726 }
    727 #include "vmware_pack_end.h"
    728 SVGA3dCmdDXGenMips; /* SVGA_3D_CMD_DX_GENMIPS */
    729 
    730 /*
    731  * Update a sub-resource in a guest-backed resource.
    732  * (Inform the device that the guest-contents have been updated.)
    733  */
    734 typedef
    735 #include "vmware_pack_begin.h"
    736 struct SVGA3dCmdDXUpdateSubResource {
    737    SVGA3dSurfaceId sid;
    738    uint32 subResource;
    739    SVGA3dBox box;
    740 }
    741 #include "vmware_pack_end.h"
    742 SVGA3dCmdDXUpdateSubResource;   /* SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE */
    743 
    744 /*
    745  * Readback a subresource in a guest-backed resource.
    746  * (Request the device to flush the dirty contents into the guest.)
    747  */
    748 typedef
    749 #include "vmware_pack_begin.h"
    750 struct SVGA3dCmdDXReadbackSubResource {
    751    SVGA3dSurfaceId sid;
    752    uint32 subResource;
    753 }
    754 #include "vmware_pack_end.h"
    755 SVGA3dCmdDXReadbackSubResource;   /* SVGA_3D_CMD_DX_READBACK_SUBRESOURCE */
    756 
    757 /*
    758  * Invalidate an image in a guest-backed surface.
    759  * (Notify the device that the contents can be lost.)
    760  */
    761 typedef
    762 #include "vmware_pack_begin.h"
    763 struct SVGA3dCmdDXInvalidateSubResource {
    764    SVGA3dSurfaceId sid;
    765    uint32 subResource;
    766 }
    767 #include "vmware_pack_end.h"
    768 SVGA3dCmdDXInvalidateSubResource;   /* SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE */
    769 
    770 
    771 /*
    772  * Raw byte wise transfer from a buffer surface into another surface
    773  * of the requested box.  Supported if 3d is enabled and SVGA_CAP_DX
    774  * is set.  This command does not take a context.
    775  */
    776 typedef
    777 #include "vmware_pack_begin.h"
    778 struct SVGA3dCmdDXTransferFromBuffer {
    779    SVGA3dSurfaceId srcSid;
    780    uint32 srcOffset;
    781    uint32 srcPitch;
    782    uint32 srcSlicePitch;
    783    SVGA3dSurfaceId destSid;
    784    uint32 destSubResource;
    785    SVGA3dBox destBox;
    786 }
    787 #include "vmware_pack_end.h"
    788 SVGA3dCmdDXTransferFromBuffer;   /* SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER */
    789 
    790 
    791 /*
    792  * Raw byte wise transfer from a buffer surface into another surface
    793  * of the requested box.  Supported if SVGA3D_DEVCAP_DXCONTEXT is set.
    794  * The context is implied from the command buffer header.
    795  */
    796 typedef
    797 #include "vmware_pack_begin.h"
    798 struct SVGA3dCmdDXPredTransferFromBuffer {
    799    SVGA3dSurfaceId srcSid;
    800    uint32 srcOffset;
    801    uint32 srcPitch;
    802    uint32 srcSlicePitch;
    803    SVGA3dSurfaceId destSid;
    804    uint32 destSubResource;
    805    SVGA3dBox destBox;
    806 }
    807 #include "vmware_pack_end.h"
    808 SVGA3dCmdDXPredTransferFromBuffer;
    809 /* SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER */
    810 
    811 
    812 typedef
    813 #include "vmware_pack_begin.h"
    814 struct SVGA3dCmdDXSurfaceCopyAndReadback {
    815    SVGA3dSurfaceId srcSid;
    816    SVGA3dSurfaceId destSid;
    817    SVGA3dCopyBox box;
    818 }
    819 #include "vmware_pack_end.h"
    820 SVGA3dCmdDXSurfaceCopyAndReadback;
    821 /* SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK */
    822 
    823 /*
    824  * SVGA_DX_HINT_NONE: Does nothing.
    825  *
    826  * SVGA_DX_HINT_PREFETCH_OBJECT:
    827  * SVGA_DX_HINT_PREEVICT_OBJECT:
    828  *      Consumes a SVGAObjectRef, and hints that the host should consider
    829  *      fetching/evicting the specified object.
    830  *
    831  *      An id of SVGA3D_INVALID_ID can be used if the guest isn't sure
    832  *      what object was affected.  (For instance, if the guest knows that
    833  *      it is about to evict a DXShader, but doesn't know precisely which one,
    834  *      the device can still use this to help limit it's search, or track
    835  *      how many page-outs have happened.)
    836  *
    837  * SVGA_DX_HINT_PREFETCH_COBJECT:
    838  * SVGA_DX_HINT_PREEVICT_COBJECT:
    839  *      Same as the above, except they consume an SVGACObjectRef.
    840  */
    841 typedef uint32 SVGADXHintId;
    842 #define SVGA_DX_HINT_NONE              0
    843 #define SVGA_DX_HINT_PREFETCH_OBJECT   1
    844 #define SVGA_DX_HINT_PREEVICT_OBJECT   2
    845 #define SVGA_DX_HINT_PREFETCH_COBJECT  3
    846 #define SVGA_DX_HINT_PREEVICT_COBJECT  4
    847 #define SVGA_DX_HINT_MAX               5
    848 
    849 typedef
    850 #include "vmware_pack_begin.h"
    851 struct SVGAObjectRef {
    852    SVGAOTableType type;
    853    uint32 id;
    854 }
    855 #include "vmware_pack_end.h"
    856 SVGAObjectRef;
    857 
    858 typedef
    859 #include "vmware_pack_begin.h"
    860 struct SVGACObjectRef {
    861    SVGACOTableType type;
    862    uint32 cid;
    863    uint32 id;
    864 }
    865 #include "vmware_pack_end.h"
    866 SVGACObjectRef;
    867 
    868 typedef
    869 #include "vmware_pack_begin.h"
    870 struct SVGA3dCmdDXHint {
    871    SVGADXHintId hintId;
    872 
    873    /*
    874     * Followed by variable sized data depending on the hintId.
    875     */
    876 }
    877 #include "vmware_pack_end.h"
    878 SVGA3dCmdDXHint;
    879 /* SVGA_3D_CMD_DX_HINT */
    880 
    881 typedef
    882 #include "vmware_pack_begin.h"
    883 struct SVGA3dCmdDXBufferUpdate {
    884    SVGA3dSurfaceId sid;
    885    uint32 x;
    886    uint32 width;
    887 }
    888 #include "vmware_pack_end.h"
    889 SVGA3dCmdDXBufferUpdate;
    890 /* SVGA_3D_CMD_DX_BUFFER_UPDATE */
    891 
    892 typedef
    893 #include "vmware_pack_begin.h"
    894 struct SVGA3dCmdDXSetConstantBufferOffset {
    895    uint32 slot;
    896    uint32 offsetInBytes;
    897 }
    898 #include "vmware_pack_end.h"
    899 SVGA3dCmdDXSetConstantBufferOffset;
    900 
    901 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetVSConstantBufferOffset;
    902 /* SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET */
    903 
    904 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetPSConstantBufferOffset;
    905 /* SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET */
    906 
    907 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetGSConstantBufferOffset;
    908 /* SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET */
    909 
    910 
    911 typedef
    912 #include "vmware_pack_begin.h"
    913 struct {
    914    union {
    915       struct {
    916          uint32 firstElement;
    917          uint32 numElements;
    918          uint32 pad0;
    919          uint32 pad1;
    920       } buffer;
    921       struct {
    922          uint32 mostDetailedMip;
    923          uint32 firstArraySlice;
    924          uint32 mipLevels;
    925          uint32 arraySize;
    926       } tex; /* 1d, 2d, 3d, cube */
    927       struct {
    928          uint32 firstElement;
    929          uint32 numElements;
    930          uint32 flags;
    931          uint32 pad0;
    932       } bufferex;
    933    };
    934 }
    935 #include "vmware_pack_end.h"
    936 SVGA3dShaderResourceViewDesc;
    937 
    938 typedef
    939 #include "vmware_pack_begin.h"
    940 struct {
    941    SVGA3dSurfaceId sid;
    942    SVGA3dSurfaceFormat format;
    943    SVGA3dResourceType resourceDimension;
    944    SVGA3dShaderResourceViewDesc desc;
    945    uint32 pad;
    946 }
    947 #include "vmware_pack_end.h"
    948 SVGACOTableDXSRViewEntry;
    949 
    950 typedef
    951 #include "vmware_pack_begin.h"
    952 struct SVGA3dCmdDXDefineShaderResourceView {
    953    SVGA3dShaderResourceViewId shaderResourceViewId;
    954 
    955    SVGA3dSurfaceId sid;
    956    SVGA3dSurfaceFormat format;
    957    SVGA3dResourceType resourceDimension;
    958 
    959    SVGA3dShaderResourceViewDesc desc;
    960 }
    961 #include "vmware_pack_end.h"
    962 SVGA3dCmdDXDefineShaderResourceView;
    963 /* SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW */
    964 
    965 typedef
    966 #include "vmware_pack_begin.h"
    967 struct SVGA3dCmdDXDestroyShaderResourceView {
    968    SVGA3dShaderResourceViewId shaderResourceViewId;
    969 }
    970 #include "vmware_pack_end.h"
    971 SVGA3dCmdDXDestroyShaderResourceView;
    972 /* SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW */
    973 
    974 typedef
    975 #include "vmware_pack_begin.h"
    976 struct SVGA3dRenderTargetViewDesc {
    977    union {
    978       struct {
    979          uint32 firstElement;
    980          uint32 numElements;
    981          uint32 padding0;
    982       } buffer;
    983       struct {
    984          uint32 mipSlice;
    985          uint32 firstArraySlice;
    986          uint32 arraySize;
    987       } tex;                    /* 1d, 2d, cube */
    988       struct {
    989          uint32 mipSlice;
    990          uint32 firstW;
    991          uint32 wSize;
    992       } tex3D;
    993    };
    994 }
    995 #include "vmware_pack_end.h"
    996 SVGA3dRenderTargetViewDesc;
    997 
    998 typedef
    999 #include "vmware_pack_begin.h"
   1000 struct {
   1001    SVGA3dSurfaceId sid;
   1002    SVGA3dSurfaceFormat format;
   1003    SVGA3dResourceType resourceDimension;
   1004    SVGA3dRenderTargetViewDesc desc;
   1005    uint32 pad[2];
   1006 }
   1007 #include "vmware_pack_end.h"
   1008 SVGACOTableDXRTViewEntry;
   1009 
   1010 typedef
   1011 #include "vmware_pack_begin.h"
   1012 struct SVGA3dCmdDXDefineRenderTargetView {
   1013    SVGA3dRenderTargetViewId renderTargetViewId;
   1014 
   1015    SVGA3dSurfaceId sid;
   1016    SVGA3dSurfaceFormat format;
   1017    SVGA3dResourceType resourceDimension;
   1018 
   1019    SVGA3dRenderTargetViewDesc desc;
   1020 }
   1021 #include "vmware_pack_end.h"
   1022 SVGA3dCmdDXDefineRenderTargetView;
   1023 /* SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW */
   1024 
   1025 typedef
   1026 #include "vmware_pack_begin.h"
   1027 struct SVGA3dCmdDXDestroyRenderTargetView {
   1028    SVGA3dRenderTargetViewId renderTargetViewId;
   1029 }
   1030 #include "vmware_pack_end.h"
   1031 SVGA3dCmdDXDestroyRenderTargetView;
   1032 /* SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW */
   1033 
   1034 /*
   1035  */
   1036 #define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_DEPTH   0x01
   1037 #define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_STENCIL 0x02
   1038 #define SVGA3D_DXDSVIEW_CREATE_FLAG_MASK         0x03
   1039 typedef uint8 SVGA3DCreateDSViewFlags;
   1040 
   1041 typedef
   1042 #include "vmware_pack_begin.h"
   1043 struct {
   1044    SVGA3dSurfaceId sid;
   1045    SVGA3dSurfaceFormat format;
   1046    SVGA3dResourceType resourceDimension;
   1047    uint32 mipSlice;
   1048    uint32 firstArraySlice;
   1049    uint32 arraySize;
   1050    SVGA3DCreateDSViewFlags flags;
   1051    uint8 pad0;
   1052    uint16 pad1;
   1053    uint32 pad2;
   1054 }
   1055 #include "vmware_pack_end.h"
   1056 SVGACOTableDXDSViewEntry;
   1057 
   1058 typedef
   1059 #include "vmware_pack_begin.h"
   1060 struct SVGA3dCmdDXDefineDepthStencilView {
   1061    SVGA3dDepthStencilViewId depthStencilViewId;
   1062 
   1063    SVGA3dSurfaceId sid;
   1064    SVGA3dSurfaceFormat format;
   1065    SVGA3dResourceType resourceDimension;
   1066    uint32 mipSlice;
   1067    uint32 firstArraySlice;
   1068    uint32 arraySize;
   1069    SVGA3DCreateDSViewFlags flags;
   1070    uint8 pad0;
   1071    uint16 pad1;
   1072 }
   1073 #include "vmware_pack_end.h"
   1074 SVGA3dCmdDXDefineDepthStencilView;
   1075 /* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW */
   1076 
   1077 typedef
   1078 #include "vmware_pack_begin.h"
   1079 struct SVGA3dCmdDXDestroyDepthStencilView {
   1080    SVGA3dDepthStencilViewId depthStencilViewId;
   1081 }
   1082 #include "vmware_pack_end.h"
   1083 SVGA3dCmdDXDestroyDepthStencilView;
   1084 /* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW */
   1085 
   1086 typedef
   1087 #include "vmware_pack_begin.h"
   1088 struct SVGA3dInputElementDesc {
   1089    uint32 inputSlot;
   1090    uint32 alignedByteOffset;
   1091    SVGA3dSurfaceFormat format;
   1092    SVGA3dInputClassification inputSlotClass;
   1093    uint32 instanceDataStepRate;
   1094    uint32 inputRegister;
   1095 }
   1096 #include "vmware_pack_end.h"
   1097 SVGA3dInputElementDesc;
   1098 
   1099 typedef
   1100 #include "vmware_pack_begin.h"
   1101 struct {
   1102    uint32 elid;
   1103    uint32 numDescs;
   1104    SVGA3dInputElementDesc desc[32];
   1105    uint32 pad[62];
   1106 }
   1107 #include "vmware_pack_end.h"
   1108 SVGACOTableDXElementLayoutEntry;
   1109 
   1110 typedef
   1111 #include "vmware_pack_begin.h"
   1112 struct SVGA3dCmdDXDefineElementLayout {
   1113    SVGA3dElementLayoutId elementLayoutId;
   1114    /* Followed by a variable number of SVGA3dInputElementDesc's. */
   1115 }
   1116 #include "vmware_pack_end.h"
   1117 SVGA3dCmdDXDefineElementLayout;
   1118 /* SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT */
   1119 
   1120 typedef
   1121 #include "vmware_pack_begin.h"
   1122 struct SVGA3dCmdDXDestroyElementLayout {
   1123    SVGA3dElementLayoutId elementLayoutId;
   1124 }
   1125 #include "vmware_pack_end.h"
   1126 SVGA3dCmdDXDestroyElementLayout;
   1127 /* SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT */
   1128 
   1129 
   1130 #define SVGA3D_DX_MAX_RENDER_TARGETS 8
   1131 
   1132 typedef
   1133 #include "vmware_pack_begin.h"
   1134 struct SVGA3dDXBlendStatePerRT {
   1135       uint8 blendEnable;
   1136       uint8 srcBlend;
   1137       uint8 destBlend;
   1138       uint8 blendOp;
   1139       uint8 srcBlendAlpha;
   1140       uint8 destBlendAlpha;
   1141       uint8 blendOpAlpha;
   1142       SVGA3dColorWriteEnable renderTargetWriteMask;
   1143       uint8 logicOpEnable;
   1144       uint8 logicOp;
   1145       uint16 pad0;
   1146 }
   1147 #include "vmware_pack_end.h"
   1148 SVGA3dDXBlendStatePerRT;
   1149 
   1150 typedef
   1151 #include "vmware_pack_begin.h"
   1152 struct {
   1153    uint8 alphaToCoverageEnable;
   1154    uint8 independentBlendEnable;
   1155    uint16 pad0;
   1156    SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS];
   1157    uint32 pad1[7];
   1158 }
   1159 #include "vmware_pack_end.h"
   1160 SVGACOTableDXBlendStateEntry;
   1161 
   1162 /*
   1163  */
   1164 typedef
   1165 #include "vmware_pack_begin.h"
   1166 struct SVGA3dCmdDXDefineBlendState {
   1167    SVGA3dBlendStateId blendId;
   1168    uint8 alphaToCoverageEnable;
   1169    uint8 independentBlendEnable;
   1170    uint16 pad0;
   1171    SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS];
   1172 }
   1173 #include "vmware_pack_end.h"
   1174 SVGA3dCmdDXDefineBlendState; /* SVGA_3D_CMD_DX_DEFINE_BLEND_STATE */
   1175 
   1176 typedef
   1177 #include "vmware_pack_begin.h"
   1178 struct SVGA3dCmdDXDestroyBlendState {
   1179    SVGA3dBlendStateId blendId;
   1180 }
   1181 #include "vmware_pack_end.h"
   1182 SVGA3dCmdDXDestroyBlendState; /* SVGA_3D_CMD_DX_DESTROY_BLEND_STATE */
   1183 
   1184 typedef
   1185 #include "vmware_pack_begin.h"
   1186 struct {
   1187    uint8 depthEnable;
   1188    SVGA3dDepthWriteMask depthWriteMask;
   1189    SVGA3dComparisonFunc depthFunc;
   1190    uint8 stencilEnable;
   1191    uint8 frontEnable;
   1192    uint8 backEnable;
   1193    uint8 stencilReadMask;
   1194    uint8 stencilWriteMask;
   1195 
   1196    uint8 frontStencilFailOp;
   1197    uint8 frontStencilDepthFailOp;
   1198    uint8 frontStencilPassOp;
   1199    SVGA3dComparisonFunc frontStencilFunc;
   1200 
   1201    uint8 backStencilFailOp;
   1202    uint8 backStencilDepthFailOp;
   1203    uint8 backStencilPassOp;
   1204    SVGA3dComparisonFunc backStencilFunc;
   1205 }
   1206 #include "vmware_pack_end.h"
   1207 SVGACOTableDXDepthStencilEntry;
   1208 
   1209 /*
   1210  */
   1211 typedef
   1212 #include "vmware_pack_begin.h"
   1213 struct SVGA3dCmdDXDefineDepthStencilState {
   1214    SVGA3dDepthStencilStateId depthStencilId;
   1215 
   1216    uint8 depthEnable;
   1217    SVGA3dDepthWriteMask depthWriteMask;
   1218    SVGA3dComparisonFunc depthFunc;
   1219    uint8 stencilEnable;
   1220    uint8 frontEnable;
   1221    uint8 backEnable;
   1222    uint8 stencilReadMask;
   1223    uint8 stencilWriteMask;
   1224 
   1225    uint8 frontStencilFailOp;
   1226    uint8 frontStencilDepthFailOp;
   1227    uint8 frontStencilPassOp;
   1228    SVGA3dComparisonFunc frontStencilFunc;
   1229 
   1230    uint8 backStencilFailOp;
   1231    uint8 backStencilDepthFailOp;
   1232    uint8 backStencilPassOp;
   1233    SVGA3dComparisonFunc backStencilFunc;
   1234 }
   1235 #include "vmware_pack_end.h"
   1236 SVGA3dCmdDXDefineDepthStencilState;
   1237 /* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE */
   1238 
   1239 typedef
   1240 #include "vmware_pack_begin.h"
   1241 struct SVGA3dCmdDXDestroyDepthStencilState {
   1242    SVGA3dDepthStencilStateId depthStencilId;
   1243 }
   1244 #include "vmware_pack_end.h"
   1245 SVGA3dCmdDXDestroyDepthStencilState;
   1246 /* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE */
   1247 
   1248 typedef
   1249 #include "vmware_pack_begin.h"
   1250 struct {
   1251    uint8 fillMode;
   1252    SVGA3dCullMode cullMode;
   1253    uint8 frontCounterClockwise;
   1254    uint8 provokingVertexLast;
   1255    int32 depthBias;
   1256    float depthBiasClamp;
   1257    float slopeScaledDepthBias;
   1258    uint8 depthClipEnable;
   1259    uint8 scissorEnable;
   1260    SVGA3dMultisampleRastEnable multisampleEnable;
   1261    uint8 antialiasedLineEnable;
   1262    float lineWidth;
   1263    uint8 lineStippleEnable;
   1264    uint8 lineStippleFactor;
   1265    uint16 lineStipplePattern;
   1266    uint32 forcedSampleCount;
   1267 }
   1268 #include "vmware_pack_end.h"
   1269 SVGACOTableDXRasterizerStateEntry;
   1270 
   1271 /*
   1272  */
   1273 typedef
   1274 #include "vmware_pack_begin.h"
   1275 struct SVGA3dCmdDXDefineRasterizerState {
   1276    SVGA3dRasterizerStateId rasterizerId;
   1277 
   1278    uint8 fillMode;
   1279    SVGA3dCullMode cullMode;
   1280    uint8 frontCounterClockwise;
   1281    uint8 provokingVertexLast;
   1282    int32 depthBias;
   1283    float depthBiasClamp;
   1284    float slopeScaledDepthBias;
   1285    uint8 depthClipEnable;
   1286    uint8 scissorEnable;
   1287    SVGA3dMultisampleRastEnable multisampleEnable;
   1288    uint8 antialiasedLineEnable;
   1289    float lineWidth;
   1290    uint8 lineStippleEnable;
   1291    uint8 lineStippleFactor;
   1292    uint16 lineStipplePattern;
   1293 }
   1294 #include "vmware_pack_end.h"
   1295 SVGA3dCmdDXDefineRasterizerState;
   1296 /* SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE */
   1297 
   1298 typedef
   1299 #include "vmware_pack_begin.h"
   1300 struct SVGA3dCmdDXDestroyRasterizerState {
   1301    SVGA3dRasterizerStateId rasterizerId;
   1302 }
   1303 #include "vmware_pack_end.h"
   1304 SVGA3dCmdDXDestroyRasterizerState;
   1305 /* SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE */
   1306 
   1307 typedef
   1308 #include "vmware_pack_begin.h"
   1309 struct {
   1310    SVGA3dFilter filter;
   1311    uint8 addressU;
   1312    uint8 addressV;
   1313    uint8 addressW;
   1314    uint8 pad0;
   1315    float mipLODBias;
   1316    uint8 maxAnisotropy;
   1317    SVGA3dComparisonFunc comparisonFunc;
   1318    uint16 pad1;
   1319    SVGA3dRGBAFloat borderColor;
   1320    float minLOD;
   1321    float maxLOD;
   1322    uint32 pad2[6];
   1323 }
   1324 #include "vmware_pack_end.h"
   1325 SVGACOTableDXSamplerEntry;
   1326 
   1327 /*
   1328  */
   1329 typedef
   1330 #include "vmware_pack_begin.h"
   1331 struct SVGA3dCmdDXDefineSamplerState {
   1332    SVGA3dSamplerId samplerId;
   1333    SVGA3dFilter filter;
   1334    uint8 addressU;
   1335    uint8 addressV;
   1336    uint8 addressW;
   1337    uint8 pad0;
   1338    float mipLODBias;
   1339    uint8 maxAnisotropy;
   1340    SVGA3dComparisonFunc comparisonFunc;
   1341    uint16 pad1;
   1342    SVGA3dRGBAFloat borderColor;
   1343    float minLOD;
   1344    float maxLOD;
   1345 }
   1346 #include "vmware_pack_end.h"
   1347 SVGA3dCmdDXDefineSamplerState; /* SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE */
   1348 
   1349 typedef
   1350 #include "vmware_pack_begin.h"
   1351 struct SVGA3dCmdDXDestroySamplerState {
   1352    SVGA3dSamplerId samplerId;
   1353 }
   1354 #include "vmware_pack_end.h"
   1355 SVGA3dCmdDXDestroySamplerState; /* SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE */
   1356 
   1357 typedef
   1358 #include "vmware_pack_begin.h"
   1359 struct SVGA3dCmdDXDefineShader {
   1360    SVGA3dShaderId shaderId;
   1361    SVGA3dShaderType type;
   1362    uint32 sizeInBytes; /* Number of bytes of shader text. */
   1363 }
   1364 #include "vmware_pack_end.h"
   1365 SVGA3dCmdDXDefineShader; /* SVGA_3D_CMD_DX_DEFINE_SHADER */
   1366 
   1367 typedef
   1368 #include "vmware_pack_begin.h"
   1369 struct SVGACOTableDXShaderEntry {
   1370    SVGA3dShaderType type;
   1371    uint32 sizeInBytes;
   1372    uint32 offsetInBytes;
   1373    SVGAMobId mobid;
   1374    uint32 pad[4];
   1375 }
   1376 #include "vmware_pack_end.h"
   1377 SVGACOTableDXShaderEntry;
   1378 
   1379 typedef
   1380 #include "vmware_pack_begin.h"
   1381 struct SVGA3dCmdDXDestroyShader {
   1382    SVGA3dShaderId shaderId;
   1383 }
   1384 #include "vmware_pack_end.h"
   1385 SVGA3dCmdDXDestroyShader; /* SVGA_3D_CMD_DX_DESTROY_SHADER */
   1386 
   1387 typedef
   1388 #include "vmware_pack_begin.h"
   1389 struct SVGA3dCmdDXBindShader {
   1390    uint32 cid;
   1391    uint32 shid;
   1392    SVGAMobId mobid;
   1393    uint32 offsetInBytes;
   1394 }
   1395 #include "vmware_pack_end.h"
   1396 SVGA3dCmdDXBindShader;   /* SVGA_3D_CMD_DX_BIND_SHADER */
   1397 
   1398 typedef
   1399 #include "vmware_pack_begin.h"
   1400 struct SVGA3dCmdDXBindAllShader {
   1401    uint32 cid;
   1402    SVGAMobId mobid;
   1403 }
   1404 #include "vmware_pack_end.h"
   1405 SVGA3dCmdDXBindAllShader;   /* SVGA_3D_CMD_DX_BIND_ALL_SHADER */
   1406 
   1407 typedef
   1408 #include "vmware_pack_begin.h"
   1409 struct SVGA3dCmdDXCondBindAllShader {
   1410    uint32 cid;
   1411    SVGAMobId testMobid;
   1412    SVGAMobId mobid;
   1413 }
   1414 #include "vmware_pack_end.h"
   1415 SVGA3dCmdDXCondBindAllShader;   /* SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER */
   1416 
   1417 /*
   1418  * The maximum number of streamout decl's in each streamout entry.
   1419  */
   1420 #define SVGA3D_MAX_STREAMOUT_DECLS 64
   1421 
   1422 typedef
   1423 #include "vmware_pack_begin.h"
   1424 struct SVGA3dStreamOutputDeclarationEntry {
   1425    uint32 outputSlot;
   1426    uint32 registerIndex;
   1427    uint8  registerMask;
   1428    uint8  pad0;
   1429    uint16 pad1;
   1430    uint32 stream;
   1431 }
   1432 #include "vmware_pack_end.h"
   1433 SVGA3dStreamOutputDeclarationEntry;
   1434 
   1435 typedef
   1436 #include "vmware_pack_begin.h"
   1437 struct SVGAOTableStreamOutputEntry {
   1438    uint32 numOutputStreamEntries;
   1439    SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_STREAMOUT_DECLS];
   1440    uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
   1441    uint32 rasterizedStream;
   1442    uint32 pad[250];
   1443 }
   1444 #include "vmware_pack_end.h"
   1445 SVGACOTableDXStreamOutputEntry;
   1446 
   1447 typedef
   1448 #include "vmware_pack_begin.h"
   1449 struct SVGA3dCmdDXDefineStreamOutput {
   1450    SVGA3dStreamOutputId soid;
   1451    uint32 numOutputStreamEntries;
   1452    SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_STREAMOUT_DECLS];
   1453    uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
   1454    uint32 rasterizedStream;
   1455 }
   1456 #include "vmware_pack_end.h"
   1457 SVGA3dCmdDXDefineStreamOutput; /* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT */
   1458 
   1459 typedef
   1460 #include "vmware_pack_begin.h"
   1461 struct SVGA3dCmdDXDestroyStreamOutput {
   1462    SVGA3dStreamOutputId soid;
   1463 }
   1464 #include "vmware_pack_end.h"
   1465 SVGA3dCmdDXDestroyStreamOutput; /* SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT */
   1466 
   1467 typedef
   1468 #include "vmware_pack_begin.h"
   1469 struct SVGA3dCmdDXSetStreamOutput {
   1470    SVGA3dStreamOutputId soid;
   1471 }
   1472 #include "vmware_pack_end.h"
   1473 SVGA3dCmdDXSetStreamOutput; /* SVGA_3D_CMD_DX_SET_STREAMOUTPUT */
   1474 
   1475 typedef
   1476 #include "vmware_pack_begin.h"
   1477 struct {
   1478    uint64 value;
   1479    uint32 mobId;
   1480    uint32 mobOffset;
   1481 }
   1482 #include "vmware_pack_end.h"
   1483 SVGA3dCmdDXMobFence64;  /* SVGA_3D_CMD_DX_MOB_FENCE_64 */
   1484 
   1485 /*
   1486  * SVGA3dCmdSetCOTable --
   1487  *
   1488  * This command allows the guest to bind a mob to a context-object table.
   1489  */
   1490 typedef
   1491 #include "vmware_pack_begin.h"
   1492 struct SVGA3dCmdDXSetCOTable {
   1493    uint32 cid;
   1494    uint32 mobid;
   1495    SVGACOTableType type;
   1496    uint32 validSizeInBytes;
   1497 }
   1498 #include "vmware_pack_end.h"
   1499 SVGA3dCmdDXSetCOTable; /* SVGA_3D_CMD_DX_SET_COTABLE */
   1500 
   1501 /*
   1502  * Guests using SVGA_3D_CMD_DX_GROW_COTABLE are promising that
   1503  * the new COTable contains the same contents as the old one, except possibly
   1504  * for some new invalid entries at the end.
   1505  *
   1506  * If there is an old cotable mob bound, it also has to still be valid.
   1507  *
   1508  * (Otherwise, guests should use the DXSetCOTableBase command.)
   1509  */
   1510 typedef
   1511 #include "vmware_pack_begin.h"
   1512 struct SVGA3dCmdDXGrowCOTable {
   1513    uint32 cid;
   1514    uint32 mobid;
   1515    SVGACOTableType type;
   1516    uint32 validSizeInBytes;
   1517 }
   1518 #include "vmware_pack_end.h"
   1519 SVGA3dCmdDXGrowCOTable; /* SVGA_3D_CMD_DX_GROW_COTABLE */
   1520 
   1521 typedef
   1522 #include "vmware_pack_begin.h"
   1523 struct SVGA3dCmdDXReadbackCOTable {
   1524    uint32 cid;
   1525    SVGACOTableType type;
   1526 }
   1527 #include "vmware_pack_end.h"
   1528 SVGA3dCmdDXReadbackCOTable; /* SVGA_3D_CMD_DX_READBACK_COTABLE */
   1529 
   1530 typedef
   1531 #include "vmware_pack_begin.h"
   1532 struct SVGA3dCOTableData {
   1533    uint32 mobid;
   1534 }
   1535 #include "vmware_pack_end.h"
   1536 SVGA3dCOTableData;
   1537 
   1538 typedef
   1539 #include "vmware_pack_begin.h"
   1540 struct SVGA3dBufferBinding {
   1541    uint32 bufferId;
   1542    uint32 stride;
   1543    uint32 offset;
   1544 }
   1545 #include "vmware_pack_end.h"
   1546 SVGA3dBufferBinding;
   1547 
   1548 typedef
   1549 #include "vmware_pack_begin.h"
   1550 struct SVGA3dConstantBufferBinding {
   1551    uint32 sid;
   1552    uint32 offsetInBytes;
   1553    uint32 sizeInBytes;
   1554 }
   1555 #include "vmware_pack_end.h"
   1556 SVGA3dConstantBufferBinding;
   1557 
   1558 typedef
   1559 #include "vmware_pack_begin.h"
   1560 struct SVGADXInputAssemblyMobFormat {
   1561    uint32 layoutId;
   1562    SVGA3dBufferBinding vertexBuffers[SVGA3D_DX_MAX_VERTEXBUFFERS];
   1563    uint32 indexBufferSid;
   1564    uint32 pad;
   1565    uint32 indexBufferOffset;
   1566    uint32 indexBufferFormat;
   1567    uint32 topology;
   1568 }
   1569 #include "vmware_pack_end.h"
   1570 SVGADXInputAssemblyMobFormat;
   1571 
   1572 typedef
   1573 #include "vmware_pack_begin.h"
   1574 struct SVGADXContextMobFormat {
   1575    SVGADXInputAssemblyMobFormat inputAssembly;
   1576 
   1577    struct {
   1578       uint32 blendStateId;
   1579       uint32 blendFactor[4];
   1580       uint32 sampleMask;
   1581       uint32 depthStencilStateId;
   1582       uint32 stencilRef;
   1583       uint32 rasterizerStateId;
   1584       uint32 depthStencilViewId;
   1585       uint32 renderTargetViewIds[SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS];
   1586       uint32 unorderedAccessViewIds[SVGA3D_MAX_UAVIEWS];
   1587    } renderState;
   1588 
   1589    struct {
   1590       uint32 targets[SVGA3D_DX_MAX_SOTARGETS];
   1591       uint32 soid;
   1592    } streamOut;
   1593    uint32 pad0[11];
   1594 
   1595    uint8 numViewports;
   1596    uint8 numScissorRects;
   1597    uint16 pad1[1];
   1598 
   1599    uint32 pad2[3];
   1600 
   1601    SVGA3dViewport viewports[SVGA3D_DX_MAX_VIEWPORTS];
   1602    uint32 pad3[32];
   1603 
   1604    SVGASignedRect scissorRects[SVGA3D_DX_MAX_SCISSORRECTS];
   1605    uint32 pad4[64];
   1606 
   1607    struct {
   1608       uint32 queryID;
   1609       uint32 value;
   1610    } predication;
   1611    uint32 pad5[2];
   1612 
   1613    struct {
   1614       uint32 shaderId;
   1615       SVGA3dConstantBufferBinding constantBuffers[SVGA3D_DX_MAX_CONSTBUFFERS];
   1616       uint32 shaderResources[SVGA3D_DX_MAX_SRVIEWS];
   1617       uint32 samplers[SVGA3D_DX_MAX_SAMPLERS];
   1618    } shaderState[SVGA3D_NUM_SHADERTYPE];
   1619    uint32 pad6[26];
   1620 
   1621    SVGA3dQueryId queryID[SVGA3D_MAX_QUERY];
   1622 
   1623    SVGA3dCOTableData cotables[SVGA_COTABLE_MAX];
   1624    uint32 pad7[380];
   1625 }
   1626 #include "vmware_pack_end.h"
   1627 SVGADXContextMobFormat;
   1628 
   1629 typedef
   1630 #include "vmware_pack_begin.h"
   1631 struct SVGA3dCmdDXTempSetContext {
   1632    uint32 dxcid;
   1633 }
   1634 #include "vmware_pack_end.h"
   1635 SVGA3dCmdDXTempSetContext; /* SVGA_3D_CMD_DX_TEMP_SET_CONTEXT */
   1636 
   1637 #endif /* _SVGA3D_DX_H_ */
   1638