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