1 /**********************************************************
2  * Copyright 2012-2021 VMware, Inc.
3  * SPDX-License-Identifier: GPL-2.0 OR MIT
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 
34 
35 #ifndef _SVGA3D_DX_H_
36 #define _SVGA3D_DX_H_
37 
38 #include "svga_reg.h"
39 #include "svga3d_limits.h"
40 #include "svga3d_types.h"
41 
42 #define SVGA3D_INPUT_MIN 0
43 #define SVGA3D_INPUT_PER_VERTEX_DATA 0
44 #define SVGA3D_INPUT_PER_INSTANCE_DATA 1
45 #define SVGA3D_INPUT_MAX 2
46 typedef uint32 SVGA3dInputClassification;
47 
48 #define SVGA3D_COLOR_WRITE_ENABLE_RED (1 << 0)
49 #define SVGA3D_COLOR_WRITE_ENABLE_GREEN (1 << 1)
50 #define SVGA3D_COLOR_WRITE_ENABLE_BLUE (1 << 2)
51 #define SVGA3D_COLOR_WRITE_ENABLE_ALPHA (1 << 3)
52 #define SVGA3D_COLOR_WRITE_ENABLE_ALL                                          \
53 	(SVGA3D_COLOR_WRITE_ENABLE_RED | SVGA3D_COLOR_WRITE_ENABLE_GREEN |     \
54 	 SVGA3D_COLOR_WRITE_ENABLE_BLUE | SVGA3D_COLOR_WRITE_ENABLE_ALPHA)
55 typedef uint8 SVGA3dColorWriteEnable;
56 
57 #define SVGA3D_DEPTH_WRITE_MASK_ZERO 0
58 #define SVGA3D_DEPTH_WRITE_MASK_ALL 1
59 typedef uint8 SVGA3dDepthWriteMask;
60 
61 #define SVGA3D_FILTER_MIP_LINEAR (1 << 0)
62 #define SVGA3D_FILTER_MAG_LINEAR (1 << 2)
63 #define SVGA3D_FILTER_MIN_LINEAR (1 << 4)
64 #define SVGA3D_FILTER_ANISOTROPIC (1 << 6)
65 #define SVGA3D_FILTER_COMPARE (1 << 7)
66 typedef uint32 SVGA3dFilter;
67 
68 #define SVGA3D_CULL_INVALID 0
69 #define SVGA3D_CULL_MIN 1
70 #define SVGA3D_CULL_NONE 1
71 #define SVGA3D_CULL_FRONT 2
72 #define SVGA3D_CULL_BACK 3
73 #define SVGA3D_CULL_MAX 4
74 typedef uint8 SVGA3dCullMode;
75 
76 #define SVGA3D_COMPARISON_INVALID 0
77 #define SVGA3D_COMPARISON_MIN 1
78 #define SVGA3D_COMPARISON_NEVER 1
79 #define SVGA3D_COMPARISON_LESS 2
80 #define SVGA3D_COMPARISON_EQUAL 3
81 #define SVGA3D_COMPARISON_LESS_EQUAL 4
82 #define SVGA3D_COMPARISON_GREATER 5
83 #define SVGA3D_COMPARISON_NOT_EQUAL 6
84 #define SVGA3D_COMPARISON_GREATER_EQUAL 7
85 #define SVGA3D_COMPARISON_ALWAYS 8
86 #define SVGA3D_COMPARISON_MAX 9
87 typedef uint8 SVGA3dComparisonFunc;
88 
89 #define SVGA3D_MULTISAMPLE_RAST_DISABLE 0
90 #define SVGA3D_MULTISAMPLE_RAST_ENABLE 1
91 #define SVGA3D_MULTISAMPLE_RAST_DX_MAX 1
92 #define SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE 2
93 #define SVGA3D_MULTISAMPLE_RAST_MAX 2
94 typedef uint8 SVGA3dMultisampleRastEnable;
95 
96 #define SVGA3D_DX_MAX_VERTEXBUFFERS 32
97 #define SVGA3D_DX_MAX_VERTEXINPUTREGISTERS 16
98 #define SVGA3D_DX_SM41_MAX_VERTEXINPUTREGISTERS 32
99 #define SVGA3D_DX_MAX_SOTARGETS 4
100 #define SVGA3D_DX_MAX_SRVIEWS 128
101 #define SVGA3D_DX_MAX_CONSTBUFFERS 16
102 #define SVGA3D_DX_MAX_SAMPLERS 16
103 #define SVGA3D_DX_MAX_CLASS_INSTANCES 253
104 
105 #define SVGA3D_DX_MAX_CONSTBUF_BINDING_SIZE (4096 * 4 * (uint32)sizeof(uint32))
106 
107 typedef uint32 SVGA3dShaderResourceViewId;
108 typedef uint32 SVGA3dRenderTargetViewId;
109 typedef uint32 SVGA3dDepthStencilViewId;
110 typedef uint32 SVGA3dUAViewId;
111 
112 typedef uint32 SVGA3dShaderId;
113 typedef uint32 SVGA3dElementLayoutId;
114 typedef uint32 SVGA3dSamplerId;
115 typedef uint32 SVGA3dBlendStateId;
116 typedef uint32 SVGA3dDepthStencilStateId;
117 typedef uint32 SVGA3dRasterizerStateId;
118 typedef uint32 SVGA3dQueryId;
119 typedef uint32 SVGA3dStreamOutputId;
120 
121 typedef union {
122 	struct {
123 		uint32 r;
124 		uint32 g;
125 		uint32 b;
126 		uint32 a;
127 	};
128 
129 	uint32 value[4];
130 } SVGA3dRGBAUint32;
131 
132 #pragma pack(push, 1)
133 typedef struct {
134 	uint32 cid;
135 	SVGAMobId mobid;
136 } SVGAOTableDXContextEntry;
137 #pragma pack(pop)
138 
139 #pragma pack(push, 1)
140 typedef struct SVGA3dCmdDXDefineContext {
141 	uint32 cid;
142 } SVGA3dCmdDXDefineContext;
143 #pragma pack(pop)
144 
145 #pragma pack(push, 1)
146 typedef struct SVGA3dCmdDXDestroyContext {
147 	uint32 cid;
148 } SVGA3dCmdDXDestroyContext;
149 #pragma pack(pop)
150 
151 #pragma pack(push, 1)
152 typedef struct SVGA3dCmdDXBindContext {
153 	uint32 cid;
154 	SVGAMobId mobid;
155 	uint32 validContents;
156 } SVGA3dCmdDXBindContext;
157 #pragma pack(pop)
158 
159 #pragma pack(push, 1)
160 typedef struct SVGA3dCmdDXReadbackContext {
161 	uint32 cid;
162 } SVGA3dCmdDXReadbackContext;
163 #pragma pack(pop)
164 
165 #pragma pack(push, 1)
166 typedef struct SVGA3dCmdDXInvalidateContext {
167 	uint32 cid;
168 } SVGA3dCmdDXInvalidateContext;
169 #pragma pack(pop)
170 
171 #pragma pack(push, 1)
172 typedef struct SVGA3dCmdDXSetSingleConstantBuffer {
173 	uint32 slot;
174 	SVGA3dShaderType type;
175 	SVGA3dSurfaceId sid;
176 	uint32 offsetInBytes;
177 	uint32 sizeInBytes;
178 } SVGA3dCmdDXSetSingleConstantBuffer;
179 #pragma pack(pop)
180 
181 #pragma pack(push, 1)
182 typedef struct SVGA3dCmdDXSetShaderResources {
183 	uint32 startView;
184 	SVGA3dShaderType type;
185 
186 } SVGA3dCmdDXSetShaderResources;
187 #pragma pack(pop)
188 
189 #pragma pack(push, 1)
190 typedef struct SVGA3dCmdDXSetShader {
191 	SVGA3dShaderId shaderId;
192 	SVGA3dShaderType type;
193 } SVGA3dCmdDXSetShader;
194 #pragma pack(pop)
195 
196 typedef union {
197 	struct {
198 		uint32 cbOffset : 12;
199 		uint32 cbId : 4;
200 		uint32 baseSamp : 4;
201 		uint32 baseTex : 7;
202 		uint32 reserved : 5;
203 	};
204 	uint32 value;
205 } SVGA3dIfaceData;
206 
207 #pragma pack(push, 1)
208 typedef struct SVGA3dCmdDXSetShaderIface {
209 	SVGA3dShaderType type;
210 	uint32 numClassInstances;
211 	uint32 index;
212 	uint32 iface;
213 	SVGA3dIfaceData data;
214 } SVGA3dCmdDXSetShaderIface;
215 #pragma pack(pop)
216 
217 #pragma pack(push, 1)
218 typedef struct SVGA3dCmdDXBindShaderIface {
219 	uint32 cid;
220 	SVGAMobId mobid;
221 	uint32 offsetInBytes;
222 } SVGA3dCmdDXBindShaderIface;
223 #pragma pack(pop)
224 
225 #pragma pack(push, 1)
226 typedef struct SVGA3dCmdDXSetSamplers {
227 	uint32 startSampler;
228 	SVGA3dShaderType type;
229 
230 } SVGA3dCmdDXSetSamplers;
231 #pragma pack(pop)
232 
233 #pragma pack(push, 1)
234 typedef struct SVGA3dCmdDXDraw {
235 	uint32 vertexCount;
236 	uint32 startVertexLocation;
237 } SVGA3dCmdDXDraw;
238 #pragma pack(pop)
239 
240 #pragma pack(push, 1)
241 typedef struct SVGA3dCmdDXDrawIndexed {
242 	uint32 indexCount;
243 	uint32 startIndexLocation;
244 	int32 baseVertexLocation;
245 } SVGA3dCmdDXDrawIndexed;
246 #pragma pack(pop)
247 
248 #pragma pack(push, 1)
249 typedef struct SVGA3dCmdDXDrawInstanced {
250 	uint32 vertexCountPerInstance;
251 	uint32 instanceCount;
252 	uint32 startVertexLocation;
253 	uint32 startInstanceLocation;
254 } SVGA3dCmdDXDrawInstanced;
255 #pragma pack(pop)
256 
257 #pragma pack(push, 1)
258 typedef struct SVGA3dCmdDXDrawIndexedInstanced {
259 	uint32 indexCountPerInstance;
260 	uint32 instanceCount;
261 	uint32 startIndexLocation;
262 	int32 baseVertexLocation;
263 	uint32 startInstanceLocation;
264 } SVGA3dCmdDXDrawIndexedInstanced;
265 #pragma pack(pop)
266 
267 #pragma pack(push, 1)
268 typedef struct SVGA3dCmdDXDrawIndexedInstancedIndirect {
269 	SVGA3dSurfaceId argsBufferSid;
270 	uint32 byteOffsetForArgs;
271 } SVGA3dCmdDXDrawIndexedInstancedIndirect;
272 #pragma pack(pop)
273 
274 #pragma pack(push, 1)
275 typedef struct SVGA3dCmdDXDrawInstancedIndirect {
276 	SVGA3dSurfaceId argsBufferSid;
277 	uint32 byteOffsetForArgs;
278 } SVGA3dCmdDXDrawInstancedIndirect;
279 #pragma pack(pop)
280 
281 #pragma pack(push, 1)
282 typedef struct SVGA3dCmdDXDrawAuto {
283 	uint32 pad0;
284 } SVGA3dCmdDXDrawAuto;
285 #pragma pack(pop)
286 
287 #pragma pack(push, 1)
288 typedef struct SVGA3dCmdDXDispatch {
289 	uint32 threadGroupCountX;
290 	uint32 threadGroupCountY;
291 	uint32 threadGroupCountZ;
292 } SVGA3dCmdDXDispatch;
293 #pragma pack(pop)
294 
295 #pragma pack(push, 1)
296 typedef struct SVGA3dCmdDXDispatchIndirect {
297 	SVGA3dSurfaceId argsBufferSid;
298 	uint32 byteOffsetForArgs;
299 } SVGA3dCmdDXDispatchIndirect;
300 #pragma pack(pop)
301 
302 #pragma pack(push, 1)
303 typedef struct SVGA3dCmdDXSetInputLayout {
304 	SVGA3dElementLayoutId elementLayoutId;
305 } SVGA3dCmdDXSetInputLayout;
306 #pragma pack(pop)
307 
308 #pragma pack(push, 1)
309 typedef struct SVGA3dVertexBuffer {
310 	SVGA3dSurfaceId sid;
311 	uint32 stride;
312 	uint32 offset;
313 } SVGA3dVertexBuffer;
314 #pragma pack(pop)
315 
316 #pragma pack(push, 1)
317 typedef struct SVGA3dCmdDXSetVertexBuffers {
318 	uint32 startBuffer;
319 
320 } SVGA3dCmdDXSetVertexBuffers;
321 #pragma pack(pop)
322 
323 #pragma pack(push, 1)
324 typedef struct SVGA3dVertexBuffer_v2 {
325 	SVGA3dSurfaceId sid;
326 	uint32 stride;
327 	uint32 offset;
328 	uint32 sizeInBytes;
329 } SVGA3dVertexBuffer_v2;
330 #pragma pack(pop)
331 
332 #pragma pack(push, 1)
333 typedef struct SVGA3dCmdDXSetVertexBuffers_v2 {
334 	uint32 startBuffer;
335 
336 } SVGA3dCmdDXSetVertexBuffers_v2;
337 #pragma pack(pop)
338 
339 #pragma pack(push, 1)
340 typedef struct SVGA3dVertexBufferOffsetAndSize {
341 	uint32 stride;
342 	uint32 offset;
343 	uint32 sizeInBytes;
344 } SVGA3dVertexBufferOffsetAndSize;
345 #pragma pack(pop)
346 
347 #pragma pack(push, 1)
348 typedef struct SVGA3dCmdDXSetVertexBuffersOffsetAndSize {
349 	uint32 startBuffer;
350 
351 } SVGA3dCmdDXSetVertexBuffersOffsetAndSize;
352 #pragma pack(pop)
353 
354 #pragma pack(push, 1)
355 typedef struct SVGA3dCmdDXSetIndexBuffer {
356 	SVGA3dSurfaceId sid;
357 	SVGA3dSurfaceFormat format;
358 	uint32 offset;
359 } SVGA3dCmdDXSetIndexBuffer;
360 #pragma pack(pop)
361 
362 #pragma pack(push, 1)
363 typedef struct SVGA3dCmdDXSetIndexBuffer_v2 {
364 	SVGA3dSurfaceId sid;
365 	SVGA3dSurfaceFormat format;
366 	uint32 offset;
367 	uint32 sizeInBytes;
368 } SVGA3dCmdDXSetIndexBuffer_v2;
369 #pragma pack(pop)
370 
371 #pragma pack(push, 1)
372 typedef struct SVGA3dCmdDXSetIndexBufferOffsetAndSize {
373 	SVGA3dSurfaceFormat format;
374 	uint32 offset;
375 	uint32 sizeInBytes;
376 } SVGA3dCmdDXSetIndexBufferOffsetAndSize;
377 #pragma pack(pop)
378 
379 #pragma pack(push, 1)
380 typedef struct SVGA3dCmdDXSetTopology {
381 	SVGA3dPrimitiveType topology;
382 } SVGA3dCmdDXSetTopology;
383 #pragma pack(pop)
384 
385 #pragma pack(push, 1)
386 typedef struct SVGA3dCmdDXSetRenderTargets {
387 	SVGA3dDepthStencilViewId depthStencilViewId;
388 
389 } SVGA3dCmdDXSetRenderTargets;
390 #pragma pack(pop)
391 
392 #pragma pack(push, 1)
393 typedef struct SVGA3dCmdDXSetBlendState {
394 	SVGA3dBlendStateId blendId;
395 	float blendFactor[4];
396 	uint32 sampleMask;
397 } SVGA3dCmdDXSetBlendState;
398 #pragma pack(pop)
399 
400 #pragma pack(push, 1)
401 typedef struct SVGA3dCmdDXSetDepthStencilState {
402 	SVGA3dDepthStencilStateId depthStencilId;
403 	uint32 stencilRef;
404 } SVGA3dCmdDXSetDepthStencilState;
405 #pragma pack(pop)
406 
407 #pragma pack(push, 1)
408 typedef struct SVGA3dCmdDXSetRasterizerState {
409 	SVGA3dRasterizerStateId rasterizerId;
410 } SVGA3dCmdDXSetRasterizerState;
411 #pragma pack(pop)
412 
413 #define SVGA3D_DXQUERY_FLAG_PREDICATEHINT (1 << 0)
414 typedef uint32 SVGA3dDXQueryFlags;
415 
416 #define SVGADX_QDSTATE_INVALID ((uint8)-1)
417 #define SVGADX_QDSTATE_MIN 0
418 #define SVGADX_QDSTATE_IDLE 0
419 #define SVGADX_QDSTATE_ACTIVE 1
420 #define SVGADX_QDSTATE_PENDING 2
421 #define SVGADX_QDSTATE_FINISHED 3
422 #define SVGADX_QDSTATE_MAX 4
423 typedef uint8 SVGADXQueryDeviceState;
424 
425 #pragma pack(push, 1)
426 typedef struct {
427 	SVGA3dQueryTypeUint8 type;
428 	uint16 pad0;
429 	SVGADXQueryDeviceState state;
430 	SVGA3dDXQueryFlags flags;
431 	SVGAMobId mobid;
432 	uint32 offset;
433 } SVGACOTableDXQueryEntry;
434 #pragma pack(pop)
435 
436 #pragma pack(push, 1)
437 typedef struct SVGA3dCmdDXDefineQuery {
438 	SVGA3dQueryId queryId;
439 	SVGA3dQueryType type;
440 	SVGA3dDXQueryFlags flags;
441 } SVGA3dCmdDXDefineQuery;
442 #pragma pack(pop)
443 
444 #pragma pack(push, 1)
445 typedef struct SVGA3dCmdDXDestroyQuery {
446 	SVGA3dQueryId queryId;
447 } SVGA3dCmdDXDestroyQuery;
448 #pragma pack(pop)
449 
450 #pragma pack(push, 1)
451 typedef struct SVGA3dCmdDXBindQuery {
452 	SVGA3dQueryId queryId;
453 	SVGAMobId mobid;
454 } SVGA3dCmdDXBindQuery;
455 #pragma pack(pop)
456 
457 #pragma pack(push, 1)
458 typedef struct SVGA3dCmdDXSetQueryOffset {
459 	SVGA3dQueryId queryId;
460 	uint32 mobOffset;
461 } SVGA3dCmdDXSetQueryOffset;
462 #pragma pack(pop)
463 
464 #pragma pack(push, 1)
465 typedef struct SVGA3dCmdDXBeginQuery {
466 	SVGA3dQueryId queryId;
467 } SVGA3dCmdDXBeginQuery;
468 #pragma pack(pop)
469 
470 #pragma pack(push, 1)
471 typedef struct SVGA3dCmdDXEndQuery {
472 	SVGA3dQueryId queryId;
473 } SVGA3dCmdDXEndQuery;
474 #pragma pack(pop)
475 
476 #pragma pack(push, 1)
477 typedef struct SVGA3dCmdDXReadbackQuery {
478 	SVGA3dQueryId queryId;
479 } SVGA3dCmdDXReadbackQuery;
480 #pragma pack(pop)
481 
482 #pragma pack(push, 1)
483 typedef struct SVGA3dCmdDXMoveQuery {
484 	SVGA3dQueryId queryId;
485 	SVGAMobId mobid;
486 	uint32 mobOffset;
487 } SVGA3dCmdDXMoveQuery;
488 #pragma pack(pop)
489 
490 #pragma pack(push, 1)
491 typedef struct SVGA3dCmdDXBindAllQuery {
492 	uint32 cid;
493 	SVGAMobId mobid;
494 } SVGA3dCmdDXBindAllQuery;
495 #pragma pack(pop)
496 
497 #pragma pack(push, 1)
498 typedef struct SVGA3dCmdDXReadbackAllQuery {
499 	uint32 cid;
500 } SVGA3dCmdDXReadbackAllQuery;
501 #pragma pack(pop)
502 
503 #pragma pack(push, 1)
504 typedef struct SVGA3dCmdDXSetPredication {
505 	SVGA3dQueryId queryId;
506 	uint32 predicateValue;
507 } SVGA3dCmdDXSetPredication;
508 #pragma pack(pop)
509 
510 #pragma pack(push, 1)
511 typedef struct MKS3dDXSOState {
512 	uint32 offset;
513 	uint32 intOffset;
514 	uint32 vertexCount;
515 	uint32 dead;
516 } SVGA3dDXSOState;
517 #pragma pack(pop)
518 
519 #define SVGA3D_DX_SO_OFFSET_APPEND ((uint32)~0u)
520 
521 #pragma pack(push, 1)
522 typedef struct SVGA3dSoTarget {
523 	SVGA3dSurfaceId sid;
524 	uint32 offset;
525 	uint32 sizeInBytes;
526 } SVGA3dSoTarget;
527 #pragma pack(pop)
528 
529 #pragma pack(push, 1)
530 typedef struct SVGA3dCmdDXSetSOTargets {
531 	uint32 pad0;
532 
533 } SVGA3dCmdDXSetSOTargets;
534 #pragma pack(pop)
535 
536 #pragma pack(push, 1)
537 typedef struct SVGA3dViewport {
538 	float x;
539 	float y;
540 	float width;
541 	float height;
542 	float minDepth;
543 	float maxDepth;
544 } SVGA3dViewport;
545 #pragma pack(pop)
546 
547 #pragma pack(push, 1)
548 typedef struct SVGA3dCmdDXSetViewports {
549 	uint32 pad0;
550 
551 } SVGA3dCmdDXSetViewports;
552 #pragma pack(pop)
553 
554 #define SVGA3D_DX_MAX_VIEWPORTS 16
555 
556 #pragma pack(push, 1)
557 typedef struct SVGA3dCmdDXSetScissorRects {
558 	uint32 pad0;
559 
560 } SVGA3dCmdDXSetScissorRects;
561 #pragma pack(pop)
562 
563 #define SVGA3D_DX_MAX_SCISSORRECTS 16
564 
565 #pragma pack(push, 1)
566 typedef struct SVGA3dCmdDXClearRenderTargetView {
567 	SVGA3dRenderTargetViewId renderTargetViewId;
568 	SVGA3dRGBAFloat rgba;
569 } SVGA3dCmdDXClearRenderTargetView;
570 #pragma pack(pop)
571 
572 #pragma pack(push, 1)
573 typedef struct SVGA3dCmdDXClearDepthStencilView {
574 	uint16 flags;
575 	uint16 stencil;
576 	SVGA3dDepthStencilViewId depthStencilViewId;
577 	float depth;
578 } SVGA3dCmdDXClearDepthStencilView;
579 #pragma pack(pop)
580 
581 #pragma pack(push, 1)
582 typedef struct SVGA3dCmdDXPredCopyRegion {
583 	SVGA3dSurfaceId dstSid;
584 	uint32 dstSubResource;
585 	SVGA3dSurfaceId srcSid;
586 	uint32 srcSubResource;
587 	SVGA3dCopyBox box;
588 } SVGA3dCmdDXPredCopyRegion;
589 #pragma pack(pop)
590 
591 #pragma pack(push, 1)
592 typedef struct SVGA3dCmdDXPredStagingCopyRegion {
593 	SVGA3dSurfaceId dstSid;
594 	uint32 dstSubResource;
595 	SVGA3dSurfaceId srcSid;
596 	uint32 srcSubResource;
597 	SVGA3dCopyBox box;
598 	uint8 readback;
599 	uint8 unsynchronized;
600 	uint8 mustBeZero[2];
601 } SVGA3dCmdDXPredStagingCopyRegion;
602 #pragma pack(pop)
603 
604 #pragma pack(push, 1)
605 typedef struct SVGA3dCmdDXPredCopy {
606 	SVGA3dSurfaceId dstSid;
607 	SVGA3dSurfaceId srcSid;
608 } SVGA3dCmdDXPredCopy;
609 #pragma pack(pop)
610 
611 #pragma pack(push, 1)
612 typedef struct SVGA3dCmdDXPredConvertRegion {
613 	SVGA3dSurfaceId dstSid;
614 	uint32 dstSubResource;
615 	SVGA3dBox destBox;
616 	SVGA3dSurfaceId srcSid;
617 	uint32 srcSubResource;
618 	SVGA3dBox srcBox;
619 } SVGA3dCmdDXPredConvertRegion;
620 #pragma pack(pop)
621 
622 #pragma pack(push, 1)
623 typedef struct SVGA3dCmdDXPredStagingConvertRegion {
624 	SVGA3dSurfaceId dstSid;
625 	uint32 dstSubResource;
626 	SVGA3dBox destBox;
627 	SVGA3dSurfaceId srcSid;
628 	uint32 srcSubResource;
629 	SVGA3dBox srcBox;
630 	uint8 readback;
631 	uint8 unsynchronized;
632 	uint8 mustBeZero[2];
633 } SVGA3dCmdDXPredStagingConvertRegion;
634 #pragma pack(pop)
635 
636 #pragma pack(push, 1)
637 typedef struct SVGA3dCmdDXPredConvert {
638 	SVGA3dSurfaceId dstSid;
639 	SVGA3dSurfaceId srcSid;
640 } SVGA3dCmdDXPredConvert;
641 #pragma pack(pop)
642 
643 #pragma pack(push, 1)
644 typedef struct SVGA3dCmdDXPredStagingConvert {
645 	SVGA3dSurfaceId dstSid;
646 	SVGA3dSurfaceId srcSid;
647 	uint8 readback;
648 	uint8 unsynchronized;
649 	uint8 mustBeZero[2];
650 } SVGA3dCmdDXPredStagingConvert;
651 #pragma pack(pop)
652 
653 #pragma pack(push, 1)
654 typedef struct SVGA3dCmdDXBufferCopy {
655 	SVGA3dSurfaceId dest;
656 	SVGA3dSurfaceId src;
657 	uint32 destX;
658 	uint32 srcX;
659 	uint32 width;
660 } SVGA3dCmdDXBufferCopy;
661 #pragma pack(pop)
662 
663 #pragma pack(push, 1)
664 typedef struct SVGA3dCmdDXStagingBufferCopy {
665 	SVGA3dSurfaceId dest;
666 	SVGA3dSurfaceId src;
667 	uint32 destX;
668 	uint32 srcX;
669 	uint32 width;
670 	uint8 readback;
671 	uint8 unsynchronized;
672 	uint8 mustBeZero[2];
673 } SVGA3dCmdDXStagingBufferCopy;
674 #pragma pack(pop)
675 
676 #pragma pack(push, 1)
677 typedef struct {
678 	SVGA3dSurfaceId dstSid;
679 	uint32 dstSubResource;
680 	SVGA3dSurfaceId srcSid;
681 	uint32 srcSubResource;
682 	SVGA3dSurfaceFormat copyFormat;
683 } SVGA3dCmdDXResolveCopy;
684 #pragma pack(pop)
685 
686 #pragma pack(push, 1)
687 typedef struct {
688 	SVGA3dSurfaceId dstSid;
689 	uint32 dstSubResource;
690 	SVGA3dSurfaceId srcSid;
691 	uint32 srcSubResource;
692 	SVGA3dSurfaceFormat copyFormat;
693 } SVGA3dCmdDXPredResolveCopy;
694 #pragma pack(pop)
695 
696 typedef uint32 SVGA3dDXPresentBltMode;
697 #define SVGADX_PRESENTBLT_LINEAR (1 << 0)
698 #define SVGADX_PRESENTBLT_FORCE_SRC_SRGB (1 << 1)
699 #define SVGADX_PRESENTBLT_FORCE_SRC_XRBIAS (1 << 2)
700 #define SVGADX_PRESENTBLT_MODE_MAX (1 << 3)
701 
702 #pragma pack(push, 1)
703 typedef struct SVGA3dCmdDXPresentBlt {
704 	SVGA3dSurfaceId srcSid;
705 	uint32 srcSubResource;
706 	SVGA3dSurfaceId dstSid;
707 	uint32 destSubResource;
708 	SVGA3dBox boxSrc;
709 	SVGA3dBox boxDest;
710 	SVGA3dDXPresentBltMode mode;
711 } SVGA3dCmdDXPresentBlt;
712 #pragma pack(pop)
713 
714 #pragma pack(push, 1)
715 typedef struct SVGA3dCmdDXGenMips {
716 	SVGA3dShaderResourceViewId shaderResourceViewId;
717 } SVGA3dCmdDXGenMips;
718 #pragma pack(pop)
719 
720 #pragma pack(push, 1)
721 typedef struct SVGA3dCmdDXUpdateSubResource {
722 	SVGA3dSurfaceId sid;
723 	uint32 subResource;
724 	SVGA3dBox box;
725 } SVGA3dCmdDXUpdateSubResource;
726 #pragma pack(pop)
727 
728 #pragma pack(push, 1)
729 typedef struct SVGA3dCmdDXReadbackSubResource {
730 	SVGA3dSurfaceId sid;
731 	uint32 subResource;
732 } SVGA3dCmdDXReadbackSubResource;
733 #pragma pack(pop)
734 
735 #pragma pack(push, 1)
736 typedef struct SVGA3dCmdDXInvalidateSubResource {
737 	SVGA3dSurfaceId sid;
738 	uint32 subResource;
739 } SVGA3dCmdDXInvalidateSubResource;
740 #pragma pack(pop)
741 
742 #pragma pack(push, 1)
743 typedef struct SVGA3dCmdDXTransferFromBuffer {
744 	SVGA3dSurfaceId srcSid;
745 	uint32 srcOffset;
746 	uint32 srcPitch;
747 	uint32 srcSlicePitch;
748 	SVGA3dSurfaceId destSid;
749 	uint32 destSubResource;
750 	SVGA3dBox destBox;
751 } SVGA3dCmdDXTransferFromBuffer;
752 #pragma pack(pop)
753 
754 #define SVGA3D_TRANSFER_TO_BUFFER_READBACK (1 << 0)
755 #define SVGA3D_TRANSFER_TO_BUFFER_FLAGS_MASK (1 << 0)
756 typedef uint32 SVGA3dTransferToBufferFlags;
757 
758 #pragma pack(push, 1)
759 typedef struct SVGA3dCmdDXTransferToBuffer {
760 	SVGA3dSurfaceId srcSid;
761 	uint32 srcSubResource;
762 	SVGA3dBox srcBox;
763 	SVGA3dSurfaceId destSid;
764 	uint32 destOffset;
765 	uint32 destPitch;
766 	uint32 destSlicePitch;
767 	SVGA3dTransferToBufferFlags flags;
768 } SVGA3dCmdDXTransferToBuffer;
769 #pragma pack(pop)
770 
771 #pragma pack(push, 1)
772 typedef struct SVGA3dCmdDXPredTransferFromBuffer {
773 	SVGA3dSurfaceId srcSid;
774 	uint32 srcOffset;
775 	uint32 srcPitch;
776 	uint32 srcSlicePitch;
777 	SVGA3dSurfaceId destSid;
778 	uint32 destSubResource;
779 	SVGA3dBox destBox;
780 } SVGA3dCmdDXPredTransferFromBuffer;
781 #pragma pack(pop)
782 
783 #pragma pack(push, 1)
784 typedef struct SVGA3dCmdDXSurfaceCopyAndReadback {
785 	SVGA3dSurfaceId srcSid;
786 	SVGA3dSurfaceId destSid;
787 	SVGA3dCopyBox box;
788 } SVGA3dCmdDXSurfaceCopyAndReadback;
789 #pragma pack(pop)
790 
791 typedef uint32 SVGADXHintId;
792 #define SVGA_DX_HINT_NONE 0
793 #define SVGA_DX_HINT_PREFETCH_OBJECT 1
794 #define SVGA_DX_HINT_PREEVICT_OBJECT 2
795 #define SVGA_DX_HINT_PREFETCH_COBJECT 3
796 #define SVGA_DX_HINT_PREEVICT_COBJECT 4
797 #define SVGA_DX_HINT_MAX 5
798 
799 #pragma pack(push, 1)
800 typedef struct SVGAObjectRef {
801 	SVGAOTableType type;
802 	uint32 id;
803 } SVGAObjectRef;
804 #pragma pack(pop)
805 
806 #pragma pack(push, 1)
807 typedef struct SVGACObjectRef {
808 	SVGACOTableType type;
809 	uint32 cid;
810 	uint32 id;
811 } SVGACObjectRef;
812 #pragma pack(pop)
813 
814 #pragma pack(push, 1)
815 typedef struct SVGA3dCmdDXHint {
816 	SVGADXHintId hintId;
817 
818 } SVGA3dCmdDXHint;
819 #pragma pack(pop)
820 
821 #pragma pack(push, 1)
822 typedef struct SVGA3dCmdDXBufferUpdate {
823 	SVGA3dSurfaceId sid;
824 	uint32 x;
825 	uint32 width;
826 } SVGA3dCmdDXBufferUpdate;
827 #pragma pack(pop)
828 
829 #pragma pack(push, 1)
830 typedef struct SVGA3dCmdDXSetConstantBufferOffset {
831 	uint32 slot;
832 	uint32 offsetInBytes;
833 } SVGA3dCmdDXSetConstantBufferOffset;
834 #pragma pack(pop)
835 
836 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetVSConstantBufferOffset;
837 
838 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetPSConstantBufferOffset;
839 
840 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetGSConstantBufferOffset;
841 
842 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetHSConstantBufferOffset;
843 
844 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetDSConstantBufferOffset;
845 
846 typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetCSConstantBufferOffset;
847 
848 #define SVGA3D_BUFFEREX_SRV_RAW (1 << 0)
849 #define SVGA3D_BUFFEREX_SRV_FLAGS_MAX (1 << 1)
850 #define SVGA3D_BUFFEREX_SRV_FLAGS_MASK (SVGA3D_BUFFEREX_SRV_FLAGS_MAX - 1)
851 typedef uint32 SVGA3dBufferExFlags;
852 
853 #pragma pack(push, 1)
854 typedef struct {
855 	union {
856 		struct {
857 			uint32 firstElement;
858 			uint32 numElements;
859 			uint32 pad0;
860 			uint32 pad1;
861 		} buffer;
862 		struct {
863 			uint32 mostDetailedMip;
864 			uint32 firstArraySlice;
865 			uint32 mipLevels;
866 			uint32 arraySize;
867 		} tex;
868 		struct {
869 			uint32 firstElement;
870 			uint32 numElements;
871 			SVGA3dBufferExFlags flags;
872 			uint32 pad0;
873 		} bufferex;
874 	};
875 } SVGA3dShaderResourceViewDesc;
876 #pragma pack(pop)
877 
878 #pragma pack(push, 1)
879 typedef struct {
880 	SVGA3dSurfaceId sid;
881 	SVGA3dSurfaceFormat format;
882 	SVGA3dResourceType resourceDimension;
883 	SVGA3dShaderResourceViewDesc desc;
884 	uint32 pad;
885 } SVGACOTableDXSRViewEntry;
886 #pragma pack(pop)
887 
888 #pragma pack(push, 1)
889 typedef struct SVGA3dCmdDXDefineShaderResourceView {
890 	SVGA3dShaderResourceViewId shaderResourceViewId;
891 
892 	SVGA3dSurfaceId sid;
893 	SVGA3dSurfaceFormat format;
894 	SVGA3dResourceType resourceDimension;
895 
896 	SVGA3dShaderResourceViewDesc desc;
897 } SVGA3dCmdDXDefineShaderResourceView;
898 #pragma pack(pop)
899 
900 #pragma pack(push, 1)
901 typedef struct SVGA3dCmdDXDestroyShaderResourceView {
902 	SVGA3dShaderResourceViewId shaderResourceViewId;
903 } SVGA3dCmdDXDestroyShaderResourceView;
904 #pragma pack(pop)
905 
906 #pragma pack(push, 1)
907 typedef struct SVGA3dRenderTargetViewDesc {
908 	union {
909 		struct {
910 			uint32 firstElement;
911 			uint32 numElements;
912 			uint32 padding0;
913 		} buffer;
914 		struct {
915 			uint32 mipSlice;
916 			uint32 firstArraySlice;
917 			uint32 arraySize;
918 		} tex;
919 		struct {
920 			uint32 mipSlice;
921 			uint32 firstW;
922 			uint32 wSize;
923 		} tex3D;
924 	};
925 } SVGA3dRenderTargetViewDesc;
926 #pragma pack(pop)
927 
928 #pragma pack(push, 1)
929 typedef struct {
930 	SVGA3dSurfaceId sid;
931 	SVGA3dSurfaceFormat format;
932 	SVGA3dResourceType resourceDimension;
933 	SVGA3dRenderTargetViewDesc desc;
934 	uint32 pad[2];
935 } SVGACOTableDXRTViewEntry;
936 #pragma pack(pop)
937 
938 #pragma pack(push, 1)
939 typedef struct SVGA3dCmdDXDefineRenderTargetView {
940 	SVGA3dRenderTargetViewId renderTargetViewId;
941 
942 	SVGA3dSurfaceId sid;
943 	SVGA3dSurfaceFormat format;
944 	SVGA3dResourceType resourceDimension;
945 
946 	SVGA3dRenderTargetViewDesc desc;
947 } SVGA3dCmdDXDefineRenderTargetView;
948 #pragma pack(pop)
949 
950 #pragma pack(push, 1)
951 typedef struct SVGA3dCmdDXDestroyRenderTargetView {
952 	SVGA3dRenderTargetViewId renderTargetViewId;
953 } SVGA3dCmdDXDestroyRenderTargetView;
954 #pragma pack(pop)
955 
956 #define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_DEPTH 0x01
957 #define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_STENCIL 0x02
958 #define SVGA3D_DXDSVIEW_CREATE_FLAG_MASK 0x03
959 typedef uint8 SVGA3DCreateDSViewFlags;
960 
961 #pragma pack(push, 1)
962 typedef struct {
963 	SVGA3dSurfaceId sid;
964 	SVGA3dSurfaceFormat format;
965 	SVGA3dResourceType resourceDimension;
966 	uint32 mipSlice;
967 	uint32 firstArraySlice;
968 	uint32 arraySize;
969 	SVGA3DCreateDSViewFlags flags;
970 	uint8 pad0;
971 	uint16 pad1;
972 	uint32 pad2;
973 } SVGACOTableDXDSViewEntry;
974 #pragma pack(pop)
975 
976 #pragma pack(push, 1)
977 typedef struct SVGA3dCmdDXDefineDepthStencilView {
978 	SVGA3dDepthStencilViewId depthStencilViewId;
979 
980 	SVGA3dSurfaceId sid;
981 	SVGA3dSurfaceFormat format;
982 	SVGA3dResourceType resourceDimension;
983 	uint32 mipSlice;
984 	uint32 firstArraySlice;
985 	uint32 arraySize;
986 	SVGA3DCreateDSViewFlags flags;
987 	uint8 pad0;
988 	uint16 pad1;
989 } SVGA3dCmdDXDefineDepthStencilView;
990 #pragma pack(pop)
991 
992 #pragma pack(push, 1)
993 typedef struct SVGA3dCmdDXDefineDepthStencilView_v2 {
994 	SVGA3dDepthStencilViewId depthStencilViewId;
995 
996 	SVGA3dSurfaceId sid;
997 	SVGA3dSurfaceFormat format;
998 	SVGA3dResourceType resourceDimension;
999 	uint32 mipSlice;
1000 	uint32 firstArraySlice;
1001 	uint32 arraySize;
1002 	SVGA3DCreateDSViewFlags flags;
1003 	uint8 pad0;
1004 	uint16 pad1;
1005 } SVGA3dCmdDXDefineDepthStencilView_v2;
1006 #pragma pack(pop)
1007 
1008 #pragma pack(push, 1)
1009 typedef struct SVGA3dCmdDXDestroyDepthStencilView {
1010 	SVGA3dDepthStencilViewId depthStencilViewId;
1011 } SVGA3dCmdDXDestroyDepthStencilView;
1012 #pragma pack(pop)
1013 
1014 #define SVGA3D_UABUFFER_RAW (1 << 0)
1015 #define SVGA3D_UABUFFER_APPEND (1 << 1)
1016 #define SVGA3D_UABUFFER_COUNTER (1 << 2)
1017 typedef uint32 SVGA3dUABufferFlags;
1018 
1019 #pragma pack(push, 1)
1020 typedef struct {
1021 	union {
1022 		struct {
1023 			uint32 firstElement;
1024 			uint32 numElements;
1025 			SVGA3dUABufferFlags flags;
1026 			uint32 padding0;
1027 			uint32 padding1;
1028 		} buffer;
1029 		struct {
1030 			uint32 mipSlice;
1031 			uint32 firstArraySlice;
1032 			uint32 arraySize;
1033 			uint32 padding0;
1034 			uint32 padding1;
1035 		} tex;
1036 		struct {
1037 			uint32 mipSlice;
1038 			uint32 firstW;
1039 			uint32 wSize;
1040 			uint32 padding0;
1041 			uint32 padding1;
1042 		} tex3D;
1043 	};
1044 } SVGA3dUAViewDesc;
1045 #pragma pack(pop)
1046 
1047 #pragma pack(push, 1)
1048 typedef struct {
1049 	SVGA3dSurfaceId sid;
1050 	SVGA3dSurfaceFormat format;
1051 	SVGA3dResourceType resourceDimension;
1052 	SVGA3dUAViewDesc desc;
1053 	uint32 structureCount;
1054 	uint32 pad[7];
1055 } SVGACOTableDXUAViewEntry;
1056 #pragma pack(pop)
1057 
1058 #pragma pack(push, 1)
1059 typedef struct SVGA3dCmdDXDefineUAView {
1060 	SVGA3dUAViewId uaViewId;
1061 
1062 	SVGA3dSurfaceId sid;
1063 	SVGA3dSurfaceFormat format;
1064 	SVGA3dResourceType resourceDimension;
1065 
1066 	SVGA3dUAViewDesc desc;
1067 } SVGA3dCmdDXDefineUAView;
1068 #pragma pack(pop)
1069 
1070 #pragma pack(push, 1)
1071 typedef struct SVGA3dCmdDXDestroyUAView {
1072 	SVGA3dUAViewId uaViewId;
1073 } SVGA3dCmdDXDestroyUAView;
1074 #pragma pack(pop)
1075 
1076 #pragma pack(push, 1)
1077 typedef struct SVGA3dCmdDXClearUAViewUint {
1078 	SVGA3dUAViewId uaViewId;
1079 	SVGA3dRGBAUint32 value;
1080 } SVGA3dCmdDXClearUAViewUint;
1081 #pragma pack(pop)
1082 
1083 #pragma pack(push, 1)
1084 typedef struct SVGA3dCmdDXClearUAViewFloat {
1085 	SVGA3dUAViewId uaViewId;
1086 	SVGA3dRGBAFloat value;
1087 } SVGA3dCmdDXClearUAViewFloat;
1088 #pragma pack(pop)
1089 
1090 #pragma pack(push, 1)
1091 typedef struct SVGA3dCmdDXCopyStructureCount {
1092 	SVGA3dUAViewId srcUAViewId;
1093 	SVGA3dSurfaceId destSid;
1094 	uint32 destByteOffset;
1095 } SVGA3dCmdDXCopyStructureCount;
1096 #pragma pack(pop)
1097 
1098 #pragma pack(push, 1)
1099 typedef struct SVGA3dCmdDXSetStructureCount {
1100 	SVGA3dUAViewId uaViewId;
1101 	uint32 structureCount;
1102 } SVGA3dCmdDXSetStructureCount;
1103 #pragma pack(pop)
1104 
1105 #pragma pack(push, 1)
1106 typedef struct SVGA3dCmdDXSetUAViews {
1107 	uint32 uavSpliceIndex;
1108 
1109 } SVGA3dCmdDXSetUAViews;
1110 #pragma pack(pop)
1111 
1112 #pragma pack(push, 1)
1113 typedef struct SVGA3dCmdDXSetCSUAViews {
1114 	uint32 startIndex;
1115 
1116 } SVGA3dCmdDXSetCSUAViews;
1117 #pragma pack(pop)
1118 
1119 #pragma pack(push, 1)
1120 typedef struct SVGA3dInputElementDesc {
1121 	uint32 inputSlot;
1122 	uint32 alignedByteOffset;
1123 	SVGA3dSurfaceFormat format;
1124 	SVGA3dInputClassification inputSlotClass;
1125 	uint32 instanceDataStepRate;
1126 	uint32 inputRegister;
1127 } SVGA3dInputElementDesc;
1128 #pragma pack(pop)
1129 
1130 #pragma pack(push, 1)
1131 typedef struct {
1132 	uint32 elid;
1133 	uint32 numDescs;
1134 	SVGA3dInputElementDesc descs[32];
1135 	uint32 pad[62];
1136 } SVGACOTableDXElementLayoutEntry;
1137 #pragma pack(pop)
1138 
1139 #pragma pack(push, 1)
1140 typedef struct SVGA3dCmdDXDefineElementLayout {
1141 	SVGA3dElementLayoutId elementLayoutId;
1142 
1143 } SVGA3dCmdDXDefineElementLayout;
1144 #pragma pack(pop)
1145 
1146 #pragma pack(push, 1)
1147 typedef struct SVGA3dCmdDXDestroyElementLayout {
1148 	SVGA3dElementLayoutId elementLayoutId;
1149 } SVGA3dCmdDXDestroyElementLayout;
1150 #pragma pack(pop)
1151 
1152 #define SVGA3D_DX_MAX_RENDER_TARGETS 8
1153 
1154 #pragma pack(push, 1)
1155 typedef struct SVGA3dDXBlendStatePerRT {
1156 	uint8 blendEnable;
1157 	uint8 srcBlend;
1158 	uint8 destBlend;
1159 	uint8 blendOp;
1160 	uint8 srcBlendAlpha;
1161 	uint8 destBlendAlpha;
1162 	uint8 blendOpAlpha;
1163 	SVGA3dColorWriteEnable renderTargetWriteMask;
1164 	uint8 logicOpEnable;
1165 	uint8 logicOp;
1166 	uint16 pad0;
1167 } SVGA3dDXBlendStatePerRT;
1168 #pragma pack(pop)
1169 
1170 #pragma pack(push, 1)
1171 typedef struct {
1172 	uint8 alphaToCoverageEnable;
1173 	uint8 independentBlendEnable;
1174 	uint16 pad0;
1175 	SVGA3dDXBlendStatePerRT perRT[SVGA3D_DX_MAX_RENDER_TARGETS];
1176 	uint32 pad1[7];
1177 } SVGACOTableDXBlendStateEntry;
1178 #pragma pack(pop)
1179 
1180 #pragma pack(push, 1)
1181 typedef struct SVGA3dCmdDXDefineBlendState {
1182 	SVGA3dBlendStateId blendId;
1183 	uint8 alphaToCoverageEnable;
1184 	uint8 independentBlendEnable;
1185 	uint16 pad0;
1186 	SVGA3dDXBlendStatePerRT perRT[SVGA3D_DX_MAX_RENDER_TARGETS];
1187 } SVGA3dCmdDXDefineBlendState;
1188 #pragma pack(pop)
1189 
1190 #pragma pack(push, 1)
1191 typedef struct SVGA3dCmdDXDestroyBlendState {
1192 	SVGA3dBlendStateId blendId;
1193 } SVGA3dCmdDXDestroyBlendState;
1194 #pragma pack(pop)
1195 
1196 #pragma pack(push, 1)
1197 typedef struct {
1198 	uint8 depthEnable;
1199 	SVGA3dDepthWriteMask depthWriteMask;
1200 	SVGA3dComparisonFunc depthFunc;
1201 	uint8 stencilEnable;
1202 	uint8 frontEnable;
1203 	uint8 backEnable;
1204 	uint8 stencilReadMask;
1205 	uint8 stencilWriteMask;
1206 
1207 	uint8 frontStencilFailOp;
1208 	uint8 frontStencilDepthFailOp;
1209 	uint8 frontStencilPassOp;
1210 	SVGA3dComparisonFunc frontStencilFunc;
1211 
1212 	uint8 backStencilFailOp;
1213 	uint8 backStencilDepthFailOp;
1214 	uint8 backStencilPassOp;
1215 	SVGA3dComparisonFunc backStencilFunc;
1216 } SVGACOTableDXDepthStencilEntry;
1217 #pragma pack(pop)
1218 
1219 #pragma pack(push, 1)
1220 typedef struct SVGA3dCmdDXDefineDepthStencilState {
1221 	SVGA3dDepthStencilStateId depthStencilId;
1222 
1223 	uint8 depthEnable;
1224 	SVGA3dDepthWriteMask depthWriteMask;
1225 	SVGA3dComparisonFunc depthFunc;
1226 	uint8 stencilEnable;
1227 	uint8 frontEnable;
1228 	uint8 backEnable;
1229 	uint8 stencilReadMask;
1230 	uint8 stencilWriteMask;
1231 
1232 	uint8 frontStencilFailOp;
1233 	uint8 frontStencilDepthFailOp;
1234 	uint8 frontStencilPassOp;
1235 	SVGA3dComparisonFunc frontStencilFunc;
1236 
1237 	uint8 backStencilFailOp;
1238 	uint8 backStencilDepthFailOp;
1239 	uint8 backStencilPassOp;
1240 	SVGA3dComparisonFunc backStencilFunc;
1241 } SVGA3dCmdDXDefineDepthStencilState;
1242 #pragma pack(pop)
1243 
1244 #pragma pack(push, 1)
1245 typedef struct SVGA3dCmdDXDestroyDepthStencilState {
1246 	SVGA3dDepthStencilStateId depthStencilId;
1247 } SVGA3dCmdDXDestroyDepthStencilState;
1248 #pragma pack(pop)
1249 
1250 #pragma pack(push, 1)
1251 typedef struct {
1252 	uint8 fillMode;
1253 	SVGA3dCullMode cullMode;
1254 	uint8 frontCounterClockwise;
1255 	uint8 provokingVertexLast;
1256 	int32 depthBias;
1257 	float depthBiasClamp;
1258 	float slopeScaledDepthBias;
1259 	uint8 depthClipEnable;
1260 	uint8 scissorEnable;
1261 	SVGA3dMultisampleRastEnable multisampleEnable;
1262 	uint8 antialiasedLineEnable;
1263 	float lineWidth;
1264 	uint8 lineStippleEnable;
1265 	uint8 lineStippleFactor;
1266 	uint16 lineStipplePattern;
1267 	uint8 forcedSampleCount;
1268 	uint8 mustBeZero[3];
1269 } SVGACOTableDXRasterizerStateEntry;
1270 #pragma pack(pop)
1271 
1272 #pragma pack(push, 1)
1273 typedef 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 } SVGA3dCmdDXDefineRasterizerState;
1292 #pragma pack(pop)
1293 
1294 #pragma pack(push, 1)
1295 typedef struct SVGA3dCmdDXDefineRasterizerState_v2 {
1296 	SVGA3dRasterizerStateId rasterizerId;
1297 
1298 	uint8 fillMode;
1299 	SVGA3dCullMode cullMode;
1300 	uint8 frontCounterClockwise;
1301 	uint8 provokingVertexLast;
1302 	int32 depthBias;
1303 	float depthBiasClamp;
1304 	float slopeScaledDepthBias;
1305 	uint8 depthClipEnable;
1306 	uint8 scissorEnable;
1307 	SVGA3dMultisampleRastEnable multisampleEnable;
1308 	uint8 antialiasedLineEnable;
1309 	float lineWidth;
1310 	uint8 lineStippleEnable;
1311 	uint8 lineStippleFactor;
1312 	uint16 lineStipplePattern;
1313 	uint32 forcedSampleCount;
1314 } SVGA3dCmdDXDefineRasterizerState_v2;
1315 #pragma pack(pop)
1316 
1317 #pragma pack(push, 1)
1318 typedef struct SVGA3dCmdDXDestroyRasterizerState {
1319 	SVGA3dRasterizerStateId rasterizerId;
1320 } SVGA3dCmdDXDestroyRasterizerState;
1321 #pragma pack(pop)
1322 
1323 #pragma pack(push, 1)
1324 typedef struct {
1325 	SVGA3dFilter filter;
1326 	uint8 addressU;
1327 	uint8 addressV;
1328 	uint8 addressW;
1329 	uint8 pad0;
1330 	float mipLODBias;
1331 	uint8 maxAnisotropy;
1332 	SVGA3dComparisonFunc comparisonFunc;
1333 	uint16 pad1;
1334 	SVGA3dRGBAFloat borderColor;
1335 	float minLOD;
1336 	float maxLOD;
1337 	uint32 pad2[6];
1338 } SVGACOTableDXSamplerEntry;
1339 #pragma pack(pop)
1340 
1341 #pragma pack(push, 1)
1342 typedef struct SVGA3dCmdDXDefineSamplerState {
1343 	SVGA3dSamplerId samplerId;
1344 	SVGA3dFilter filter;
1345 	uint8 addressU;
1346 	uint8 addressV;
1347 	uint8 addressW;
1348 	uint8 pad0;
1349 	float mipLODBias;
1350 	uint8 maxAnisotropy;
1351 	SVGA3dComparisonFunc comparisonFunc;
1352 	uint16 pad1;
1353 	SVGA3dRGBAFloat borderColor;
1354 	float minLOD;
1355 	float maxLOD;
1356 } SVGA3dCmdDXDefineSamplerState;
1357 #pragma pack(pop)
1358 
1359 #pragma pack(push, 1)
1360 typedef struct SVGA3dCmdDXDestroySamplerState {
1361 	SVGA3dSamplerId samplerId;
1362 } SVGA3dCmdDXDestroySamplerState;
1363 #pragma pack(pop)
1364 
1365 #define SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED 0
1366 #define SVGADX_SIGNATURE_SEMANTIC_NAME_POSITION 1
1367 #define SVGADX_SIGNATURE_SEMANTIC_NAME_CLIP_DISTANCE 2
1368 #define SVGADX_SIGNATURE_SEMANTIC_NAME_CULL_DISTANCE 3
1369 #define SVGADX_SIGNATURE_SEMANTIC_NAME_RENDER_TARGET_ARRAY_INDEX 4
1370 #define SVGADX_SIGNATURE_SEMANTIC_NAME_VIEWPORT_ARRAY_INDEX 5
1371 #define SVGADX_SIGNATURE_SEMANTIC_NAME_VERTEX_ID 6
1372 #define SVGADX_SIGNATURE_SEMANTIC_NAME_PRIMITIVE_ID 7
1373 #define SVGADX_SIGNATURE_SEMANTIC_NAME_INSTANCE_ID 8
1374 #define SVGADX_SIGNATURE_SEMANTIC_NAME_IS_FRONT_FACE 9
1375 #define SVGADX_SIGNATURE_SEMANTIC_NAME_SAMPLE_INDEX 10
1376 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR 11
1377 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR 12
1378 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR 13
1379 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR 14
1380 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR 15
1381 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR 16
1382 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR 17
1383 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR 18
1384 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR 19
1385 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_INSIDE_TESSFACTOR 20
1386 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DETAIL_TESSFACTOR 21
1387 #define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DENSITY_TESSFACTOR 22
1388 #define SVGADX_SIGNATURE_SEMANTIC_NAME_MAX 23
1389 typedef uint32 SVGA3dDXSignatureSemanticName;
1390 
1391 #define SVGADX_SIGNATURE_REGISTER_COMPONENT_UNKNOWN 0
1392 typedef uint32 SVGA3dDXSignatureRegisterComponentType;
1393 
1394 #define SVGADX_SIGNATURE_MIN_PRECISION_DEFAULT 0
1395 typedef uint32 SVGA3dDXSignatureMinPrecision;
1396 
1397 #pragma pack(push, 1)
1398 typedef struct SVGA3dDXSignatureEntry {
1399 	uint32 registerIndex;
1400 	SVGA3dDXSignatureSemanticName semanticName;
1401 	uint32 mask;
1402 	SVGA3dDXSignatureRegisterComponentType componentType;
1403 	SVGA3dDXSignatureMinPrecision minPrecision;
1404 } SVGA3dDXShaderSignatureEntry;
1405 #pragma pack(pop)
1406 
1407 #define SVGADX_SIGNATURE_HEADER_VERSION_0 0x08a92d12
1408 
1409 #pragma pack(push, 1)
1410 typedef struct SVGA3dDXSignatureHeader {
1411 	uint32 headerVersion;
1412 	uint32 numInputSignatures;
1413 	uint32 numOutputSignatures;
1414 	uint32 numPatchConstantSignatures;
1415 } SVGA3dDXShaderSignatureHeader;
1416 #pragma pack(pop)
1417 
1418 #pragma pack(push, 1)
1419 typedef struct SVGA3dCmdDXDefineShader {
1420 	SVGA3dShaderId shaderId;
1421 	SVGA3dShaderType type;
1422 	uint32 sizeInBytes;
1423 } SVGA3dCmdDXDefineShader;
1424 #pragma pack(pop)
1425 
1426 #pragma pack(push, 1)
1427 typedef struct SVGACOTableDXShaderEntry {
1428 	SVGA3dShaderType type;
1429 	uint32 sizeInBytes;
1430 	uint32 offsetInBytes;
1431 	SVGAMobId mobid;
1432 	uint32 pad[4];
1433 } SVGACOTableDXShaderEntry;
1434 #pragma pack(pop)
1435 
1436 #pragma pack(push, 1)
1437 typedef struct SVGA3dCmdDXDestroyShader {
1438 	SVGA3dShaderId shaderId;
1439 } SVGA3dCmdDXDestroyShader;
1440 #pragma pack(pop)
1441 
1442 #pragma pack(push, 1)
1443 typedef struct SVGA3dCmdDXBindShader {
1444 	uint32 cid;
1445 	uint32 shid;
1446 	SVGAMobId mobid;
1447 	uint32 offsetInBytes;
1448 } SVGA3dCmdDXBindShader;
1449 #pragma pack(pop)
1450 
1451 #pragma pack(push, 1)
1452 typedef struct SVGA3dCmdDXBindAllShader {
1453 	uint32 cid;
1454 	SVGAMobId mobid;
1455 } SVGA3dCmdDXBindAllShader;
1456 #pragma pack(pop)
1457 
1458 #pragma pack(push, 1)
1459 typedef struct SVGA3dCmdDXCondBindAllShader {
1460 	uint32 cid;
1461 	SVGAMobId testMobid;
1462 	SVGAMobId mobid;
1463 } SVGA3dCmdDXCondBindAllShader;
1464 #pragma pack(pop)
1465 
1466 #define SVGA3D_MAX_DX10_STREAMOUT_DECLS 64
1467 #define SVGA3D_MAX_STREAMOUT_DECLS 512
1468 
1469 #pragma pack(push, 1)
1470 typedef struct SVGA3dStreamOutputDeclarationEntry {
1471 	uint32 outputSlot;
1472 	uint32 registerIndex;
1473 	uint8 registerMask;
1474 	uint8 pad0;
1475 	uint16 pad1;
1476 	uint32 stream;
1477 } SVGA3dStreamOutputDeclarationEntry;
1478 #pragma pack(pop)
1479 
1480 #pragma pack(push, 1)
1481 typedef struct SVGAOTableStreamOutputEntry {
1482 	uint32 numOutputStreamEntries;
1483 	SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_DX10_STREAMOUT_DECLS];
1484 	uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
1485 	uint32 rasterizedStream;
1486 	uint32 numOutputStreamStrides;
1487 	uint32 mobid;
1488 	uint32 offsetInBytes;
1489 	uint8 usesMob;
1490 	uint8 pad0;
1491 	uint16 pad1;
1492 	uint32 pad2[246];
1493 } SVGACOTableDXStreamOutputEntry;
1494 #pragma pack(pop)
1495 
1496 #pragma pack(push, 1)
1497 typedef struct SVGA3dCmdDXDefineStreamOutput {
1498 	SVGA3dStreamOutputId soid;
1499 	uint32 numOutputStreamEntries;
1500 	SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_DX10_STREAMOUT_DECLS];
1501 	uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
1502 	uint32 rasterizedStream;
1503 } SVGA3dCmdDXDefineStreamOutput;
1504 #pragma pack(pop)
1505 
1506 #define SVGA3D_DX_SO_NO_RASTERIZED_STREAM 0xFFFFFFFF
1507 
1508 #pragma pack(push, 1)
1509 typedef struct SVGA3dCmdDXDefineStreamOutputWithMob {
1510 	SVGA3dStreamOutputId soid;
1511 	uint32 numOutputStreamEntries;
1512 	uint32 numOutputStreamStrides;
1513 	uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
1514 	uint32 rasterizedStream;
1515 } SVGA3dCmdDXDefineStreamOutputWithMob;
1516 #pragma pack(pop)
1517 
1518 #pragma pack(push, 1)
1519 typedef struct SVGA3dCmdDXBindStreamOutput {
1520 	SVGA3dStreamOutputId soid;
1521 	uint32 mobid;
1522 	uint32 offsetInBytes;
1523 	uint32 sizeInBytes;
1524 } SVGA3dCmdDXBindStreamOutput;
1525 #pragma pack(pop)
1526 
1527 #pragma pack(push, 1)
1528 typedef struct SVGA3dCmdDXDestroyStreamOutput {
1529 	SVGA3dStreamOutputId soid;
1530 } SVGA3dCmdDXDestroyStreamOutput;
1531 #pragma pack(pop)
1532 
1533 #pragma pack(push, 1)
1534 typedef struct SVGA3dCmdDXSetStreamOutput {
1535 	SVGA3dStreamOutputId soid;
1536 } SVGA3dCmdDXSetStreamOutput;
1537 #pragma pack(pop)
1538 
1539 #pragma pack(push, 1)
1540 typedef struct SVGA3dCmdDXSetMinLOD {
1541 	SVGA3dSurfaceId sid;
1542 	float minLOD;
1543 } SVGA3dCmdDXSetMinLOD;
1544 #pragma pack(pop)
1545 
1546 #pragma pack(push, 1)
1547 typedef struct {
1548 	uint64 value;
1549 	uint32 mobId;
1550 	uint32 mobOffset;
1551 } SVGA3dCmdDXMobFence64;
1552 #pragma pack(pop)
1553 
1554 #pragma pack(push, 1)
1555 typedef struct SVGA3dCmdDXSetCOTable {
1556 	uint32 cid;
1557 	uint32 mobid;
1558 	SVGACOTableType type;
1559 	uint32 validSizeInBytes;
1560 } SVGA3dCmdDXSetCOTable;
1561 #pragma pack(pop)
1562 
1563 #pragma pack(push, 1)
1564 typedef struct SVGA3dCmdDXGrowCOTable {
1565 	uint32 cid;
1566 	uint32 mobid;
1567 	SVGACOTableType type;
1568 	uint32 validSizeInBytes;
1569 } SVGA3dCmdDXGrowCOTable;
1570 #pragma pack(pop)
1571 
1572 #pragma pack(push, 1)
1573 typedef struct SVGA3dCmdDXReadbackCOTable {
1574 	uint32 cid;
1575 	SVGACOTableType type;
1576 } SVGA3dCmdDXReadbackCOTable;
1577 #pragma pack(pop)
1578 
1579 #pragma pack(push, 1)
1580 typedef struct SVGA3dCmdDXCopyCOTableIntoMob {
1581 	uint32 cid;
1582 	SVGACOTableType type;
1583 	uint32 mobid;
1584 } SVGA3dCmdDXCopyCOTableIntoMob;
1585 #pragma pack(pop)
1586 
1587 #pragma pack(push, 1)
1588 typedef struct SVGA3dCmdDXPredStagingCopy {
1589 	SVGA3dSurfaceId dstSid;
1590 	SVGA3dSurfaceId srcSid;
1591 	uint8 readback;
1592 	uint8 unsynchronized;
1593 	uint8 mustBeZero[2];
1594 
1595 } SVGA3dCmdDXPredStagingCopy;
1596 #pragma pack(pop)
1597 
1598 #pragma pack(push, 1)
1599 typedef struct SVGA3dCmdDXStagingCopy {
1600 	SVGA3dSurfaceId dstSid;
1601 	SVGA3dSurfaceId srcSid;
1602 	uint8 readback;
1603 	uint8 unsynchronized;
1604 	uint8 mustBeZero[2];
1605 
1606 } SVGA3dCmdDXStagingCopy;
1607 #pragma pack(pop)
1608 
1609 #pragma pack(push, 1)
1610 typedef struct SVGA3dCOTableData {
1611 	uint32 mobid;
1612 } SVGA3dCOTableData;
1613 #pragma pack(pop)
1614 
1615 #pragma pack(push, 1)
1616 typedef struct SVGA3dBufferBinding {
1617 	uint32 bufferId;
1618 	uint32 stride;
1619 	uint32 offset;
1620 } SVGA3dBufferBinding;
1621 #pragma pack(pop)
1622 
1623 #pragma pack(push, 1)
1624 typedef struct SVGA3dConstantBufferBinding {
1625 	uint32 sid;
1626 	uint32 offsetInBytes;
1627 	uint32 sizeInBytes;
1628 } SVGA3dConstantBufferBinding;
1629 #pragma pack(pop)
1630 
1631 #pragma pack(push, 1)
1632 typedef struct SVGADXInputAssemblyMobFormat {
1633 	uint32 layoutId;
1634 	SVGA3dBufferBinding vertexBuffers[SVGA3D_DX_MAX_VERTEXBUFFERS];
1635 	uint32 indexBufferSid;
1636 	uint32 pad;
1637 	uint32 indexBufferOffset;
1638 	uint32 indexBufferFormat;
1639 	uint32 topology;
1640 } SVGADXInputAssemblyMobFormat;
1641 #pragma pack(pop)
1642 
1643 #pragma pack(push, 1)
1644 typedef struct SVGADXContextMobFormat {
1645 	SVGADXInputAssemblyMobFormat inputAssembly;
1646 
1647 	struct {
1648 		uint32 blendStateId;
1649 		uint32 blendFactor[4];
1650 		uint32 sampleMask;
1651 		uint32 depthStencilStateId;
1652 		uint32 stencilRef;
1653 		uint32 rasterizerStateId;
1654 		uint32 depthStencilViewId;
1655 		uint32 renderTargetViewIds[SVGA3D_DX_MAX_RENDER_TARGETS];
1656 	} renderState;
1657 
1658 	uint32 pad0[8];
1659 
1660 	struct {
1661 		uint32 targets[SVGA3D_DX_MAX_SOTARGETS];
1662 		uint32 soid;
1663 	} streamOut;
1664 
1665 	uint32 pad1[10];
1666 
1667 	uint32 uavSpliceIndex;
1668 
1669 	uint8 numViewports;
1670 	uint8 numScissorRects;
1671 	uint16 pad2[1];
1672 
1673 	uint32 pad3[3];
1674 
1675 	SVGA3dViewport viewports[SVGA3D_DX_MAX_VIEWPORTS];
1676 	uint32 pad4[32];
1677 
1678 	SVGASignedRect scissorRects[SVGA3D_DX_MAX_SCISSORRECTS];
1679 	uint32 pad5[64];
1680 
1681 	struct {
1682 		uint32 queryID;
1683 		uint32 value;
1684 	} predication;
1685 
1686 	SVGAMobId shaderIfaceMobid;
1687 	uint32 shaderIfaceOffset;
1688 	struct {
1689 		uint32 shaderId;
1690 		SVGA3dConstantBufferBinding
1691 			constantBuffers[SVGA3D_DX_MAX_CONSTBUFFERS];
1692 		uint32 shaderResources[SVGA3D_DX_MAX_SRVIEWS];
1693 		uint32 samplers[SVGA3D_DX_MAX_SAMPLERS];
1694 	} shaderState[SVGA3D_NUM_SHADERTYPE];
1695 	uint32 pad6[26];
1696 
1697 	SVGA3dQueryId queryID[SVGA3D_MAX_QUERY];
1698 
1699 	SVGA3dCOTableData cotables[SVGA_COTABLE_MAX];
1700 
1701 	uint32 pad7[64];
1702 
1703 	uint32 uaViewIds[SVGA3D_DX11_1_MAX_UAVIEWS];
1704 	uint32 csuaViewIds[SVGA3D_DX11_1_MAX_UAVIEWS];
1705 
1706 	uint32 pad8[188];
1707 } SVGADXContextMobFormat;
1708 #pragma pack(pop)
1709 
1710 #define SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED 256
1711 
1712 #pragma pack(push, 1)
1713 typedef struct SVGADXShaderIfaceMobFormat {
1714 	struct {
1715 		uint32 numClassInstances;
1716 		uint32 iface[SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED];
1717 		SVGA3dIfaceData data[SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED];
1718 	} shaderIfaceState[SVGA3D_NUM_SHADERTYPE];
1719 
1720 	uint32 pad0[1018];
1721 } SVGADXShaderIfaceMobFormat;
1722 #pragma pack(pop)
1723 
1724 #endif
1725