1/* SPDX-License-Identifier: GPL-2.0 OR MIT */
2/*
3 * Copyright 2012-2021 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
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
46typedef 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)
55typedef uint8 SVGA3dColorWriteEnable;
56
57#define SVGA3D_DEPTH_WRITE_MASK_ZERO 0
58#define SVGA3D_DEPTH_WRITE_MASK_ALL 1
59typedef 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)
66typedef 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
74typedef 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
87typedef 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
94typedef 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
107typedef uint32 SVGA3dShaderResourceViewId;
108typedef uint32 SVGA3dRenderTargetViewId;
109typedef uint32 SVGA3dDepthStencilViewId;
110typedef uint32 SVGA3dUAViewId;
111
112typedef uint32 SVGA3dShaderId;
113typedef uint32 SVGA3dElementLayoutId;
114typedef uint32 SVGA3dSamplerId;
115typedef uint32 SVGA3dBlendStateId;
116typedef uint32 SVGA3dDepthStencilStateId;
117typedef uint32 SVGA3dRasterizerStateId;
118typedef uint32 SVGA3dQueryId;
119typedef uint32 SVGA3dStreamOutputId;
120
121typedef 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)
133typedef struct {
134	uint32 cid;
135	SVGAMobId mobid;
136} SVGAOTableDXContextEntry;
137#pragma pack(pop)
138
139#pragma pack(push, 1)
140typedef struct SVGA3dCmdDXDefineContext {
141	uint32 cid;
142} SVGA3dCmdDXDefineContext;
143#pragma pack(pop)
144
145#pragma pack(push, 1)
146typedef struct SVGA3dCmdDXDestroyContext {
147	uint32 cid;
148} SVGA3dCmdDXDestroyContext;
149#pragma pack(pop)
150
151#pragma pack(push, 1)
152typedef struct SVGA3dCmdDXBindContext {
153	uint32 cid;
154	SVGAMobId mobid;
155	uint32 validContents;
156} SVGA3dCmdDXBindContext;
157#pragma pack(pop)
158
159#pragma pack(push, 1)
160typedef struct SVGA3dCmdDXReadbackContext {
161	uint32 cid;
162} SVGA3dCmdDXReadbackContext;
163#pragma pack(pop)
164
165#pragma pack(push, 1)
166typedef struct SVGA3dCmdDXInvalidateContext {
167	uint32 cid;
168} SVGA3dCmdDXInvalidateContext;
169#pragma pack(pop)
170
171#pragma pack(push, 1)
172typedef 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)
182typedef struct SVGA3dCmdDXSetShaderResources {
183	uint32 startView;
184	SVGA3dShaderType type;
185
186} SVGA3dCmdDXSetShaderResources;
187#pragma pack(pop)
188
189#pragma pack(push, 1)
190typedef struct SVGA3dCmdDXSetShader {
191	SVGA3dShaderId shaderId;
192	SVGA3dShaderType type;
193} SVGA3dCmdDXSetShader;
194#pragma pack(pop)
195
196typedef 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)
208typedef 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)
218typedef struct SVGA3dCmdDXBindShaderIface {
219	uint32 cid;
220	SVGAMobId mobid;
221	uint32 offsetInBytes;
222} SVGA3dCmdDXBindShaderIface;
223#pragma pack(pop)
224
225#pragma pack(push, 1)
226typedef struct SVGA3dCmdDXSetSamplers {
227	uint32 startSampler;
228	SVGA3dShaderType type;
229
230} SVGA3dCmdDXSetSamplers;
231#pragma pack(pop)
232
233#pragma pack(push, 1)
234typedef struct SVGA3dCmdDXDraw {
235	uint32 vertexCount;
236	uint32 startVertexLocation;
237} SVGA3dCmdDXDraw;
238#pragma pack(pop)
239
240#pragma pack(push, 1)
241typedef struct SVGA3dCmdDXDrawIndexed {
242	uint32 indexCount;
243	uint32 startIndexLocation;
244	int32 baseVertexLocation;
245} SVGA3dCmdDXDrawIndexed;
246#pragma pack(pop)
247
248#pragma pack(push, 1)
249typedef 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)
258typedef 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)
268typedef struct SVGA3dCmdDXDrawIndexedInstancedIndirect {
269	SVGA3dSurfaceId argsBufferSid;
270	uint32 byteOffsetForArgs;
271} SVGA3dCmdDXDrawIndexedInstancedIndirect;
272#pragma pack(pop)
273
274#pragma pack(push, 1)
275typedef struct SVGA3dCmdDXDrawInstancedIndirect {
276	SVGA3dSurfaceId argsBufferSid;
277	uint32 byteOffsetForArgs;
278} SVGA3dCmdDXDrawInstancedIndirect;
279#pragma pack(pop)
280
281#pragma pack(push, 1)
282typedef struct SVGA3dCmdDXDrawAuto {
283	uint32 pad0;
284} SVGA3dCmdDXDrawAuto;
285#pragma pack(pop)
286
287#pragma pack(push, 1)
288typedef struct SVGA3dCmdDXDispatch {
289	uint32 threadGroupCountX;
290	uint32 threadGroupCountY;
291	uint32 threadGroupCountZ;
292} SVGA3dCmdDXDispatch;
293#pragma pack(pop)
294
295#pragma pack(push, 1)
296typedef struct SVGA3dCmdDXDispatchIndirect {
297	SVGA3dSurfaceId argsBufferSid;
298	uint32 byteOffsetForArgs;
299} SVGA3dCmdDXDispatchIndirect;
300#pragma pack(pop)
301
302#pragma pack(push, 1)
303typedef struct SVGA3dCmdDXSetInputLayout {
304	SVGA3dElementLayoutId elementLayoutId;
305} SVGA3dCmdDXSetInputLayout;
306#pragma pack(pop)
307
308#pragma pack(push, 1)
309typedef struct SVGA3dVertexBuffer {
310	SVGA3dSurfaceId sid;
311	uint32 stride;
312	uint32 offset;
313} SVGA3dVertexBuffer;
314#pragma pack(pop)
315
316#pragma pack(push, 1)
317typedef struct SVGA3dCmdDXSetVertexBuffers {
318	uint32 startBuffer;
319
320} SVGA3dCmdDXSetVertexBuffers;
321#pragma pack(pop)
322
323#pragma pack(push, 1)
324typedef 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)
333typedef struct SVGA3dCmdDXSetVertexBuffers_v2 {
334	uint32 startBuffer;
335
336} SVGA3dCmdDXSetVertexBuffers_v2;
337#pragma pack(pop)
338
339#pragma pack(push, 1)
340typedef struct SVGA3dVertexBufferOffsetAndSize {
341	uint32 stride;
342	uint32 offset;
343	uint32 sizeInBytes;
344} SVGA3dVertexBufferOffsetAndSize;
345#pragma pack(pop)
346
347#pragma pack(push, 1)
348typedef struct SVGA3dCmdDXSetVertexBuffersOffsetAndSize {
349	uint32 startBuffer;
350
351} SVGA3dCmdDXSetVertexBuffersOffsetAndSize;
352#pragma pack(pop)
353
354#pragma pack(push, 1)
355typedef struct SVGA3dCmdDXSetIndexBuffer {
356	SVGA3dSurfaceId sid;
357	SVGA3dSurfaceFormat format;
358	uint32 offset;
359} SVGA3dCmdDXSetIndexBuffer;
360#pragma pack(pop)
361
362#pragma pack(push, 1)
363typedef 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)
372typedef struct SVGA3dCmdDXSetIndexBufferOffsetAndSize {
373	SVGA3dSurfaceFormat format;
374	uint32 offset;
375	uint32 sizeInBytes;
376} SVGA3dCmdDXSetIndexBufferOffsetAndSize;
377#pragma pack(pop)
378
379#pragma pack(push, 1)
380typedef struct SVGA3dCmdDXSetTopology {
381	SVGA3dPrimitiveType topology;
382} SVGA3dCmdDXSetTopology;
383#pragma pack(pop)
384
385#pragma pack(push, 1)
386typedef struct SVGA3dCmdDXSetRenderTargets {
387	SVGA3dDepthStencilViewId depthStencilViewId;
388
389} SVGA3dCmdDXSetRenderTargets;
390#pragma pack(pop)
391
392#pragma pack(push, 1)
393typedef struct SVGA3dCmdDXSetBlendState {
394	SVGA3dBlendStateId blendId;
395	float blendFactor[4];
396	uint32 sampleMask;
397} SVGA3dCmdDXSetBlendState;
398#pragma pack(pop)
399
400#pragma pack(push, 1)
401typedef struct SVGA3dCmdDXSetDepthStencilState {
402	SVGA3dDepthStencilStateId depthStencilId;
403	uint32 stencilRef;
404} SVGA3dCmdDXSetDepthStencilState;
405#pragma pack(pop)
406
407#pragma pack(push, 1)
408typedef struct SVGA3dCmdDXSetRasterizerState {
409	SVGA3dRasterizerStateId rasterizerId;
410} SVGA3dCmdDXSetRasterizerState;
411#pragma pack(pop)
412
413#define SVGA3D_DXQUERY_FLAG_PREDICATEHINT (1 << 0)
414typedef 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
423typedef uint8 SVGADXQueryDeviceState;
424
425#pragma pack(push, 1)
426typedef 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)
437typedef struct SVGA3dCmdDXDefineQuery {
438	SVGA3dQueryId queryId;
439	SVGA3dQueryType type;
440	SVGA3dDXQueryFlags flags;
441} SVGA3dCmdDXDefineQuery;
442#pragma pack(pop)
443
444#pragma pack(push, 1)
445typedef struct SVGA3dCmdDXDestroyQuery {
446	SVGA3dQueryId queryId;
447} SVGA3dCmdDXDestroyQuery;
448#pragma pack(pop)
449
450#pragma pack(push, 1)
451typedef struct SVGA3dCmdDXBindQuery {
452	SVGA3dQueryId queryId;
453	SVGAMobId mobid;
454} SVGA3dCmdDXBindQuery;
455#pragma pack(pop)
456
457#pragma pack(push, 1)
458typedef struct SVGA3dCmdDXSetQueryOffset {
459	SVGA3dQueryId queryId;
460	uint32 mobOffset;
461} SVGA3dCmdDXSetQueryOffset;
462#pragma pack(pop)
463
464#pragma pack(push, 1)
465typedef struct SVGA3dCmdDXBeginQuery {
466	SVGA3dQueryId queryId;
467} SVGA3dCmdDXBeginQuery;
468#pragma pack(pop)
469
470#pragma pack(push, 1)
471typedef struct SVGA3dCmdDXEndQuery {
472	SVGA3dQueryId queryId;
473} SVGA3dCmdDXEndQuery;
474#pragma pack(pop)
475
476#pragma pack(push, 1)
477typedef struct SVGA3dCmdDXReadbackQuery {
478	SVGA3dQueryId queryId;
479} SVGA3dCmdDXReadbackQuery;
480#pragma pack(pop)
481
482#pragma pack(push, 1)
483typedef struct SVGA3dCmdDXMoveQuery {
484	SVGA3dQueryId queryId;
485	SVGAMobId mobid;
486	uint32 mobOffset;
487} SVGA3dCmdDXMoveQuery;
488#pragma pack(pop)
489
490#pragma pack(push, 1)
491typedef struct SVGA3dCmdDXBindAllQuery {
492	uint32 cid;
493	SVGAMobId mobid;
494} SVGA3dCmdDXBindAllQuery;
495#pragma pack(pop)
496
497#pragma pack(push, 1)
498typedef struct SVGA3dCmdDXReadbackAllQuery {
499	uint32 cid;
500} SVGA3dCmdDXReadbackAllQuery;
501#pragma pack(pop)
502
503#pragma pack(push, 1)
504typedef struct SVGA3dCmdDXSetPredication {
505	SVGA3dQueryId queryId;
506	uint32 predicateValue;
507} SVGA3dCmdDXSetPredication;
508#pragma pack(pop)
509
510#pragma pack(push, 1)
511typedef struct SVGA3dDXSOState {
512	uint32 offset;
513	uint32 intOffset;
514	uint32 dead1;
515	uint32 dead2;
516} SVGA3dDXSOState;
517#pragma pack(pop)
518
519#define SVGA3D_DX_SO_OFFSET_APPEND ((uint32)~0u)
520
521#pragma pack(push, 1)
522typedef struct SVGA3dSoTarget {
523	SVGA3dSurfaceId sid;
524	uint32 offset;
525	uint32 sizeInBytes;
526} SVGA3dSoTarget;
527#pragma pack(pop)
528
529#pragma pack(push, 1)
530typedef struct SVGA3dCmdDXSetSOTargets {
531	uint32 pad0;
532
533} SVGA3dCmdDXSetSOTargets;
534#pragma pack(pop)
535
536#pragma pack(push, 1)
537typedef 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)
548typedef 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)
557typedef 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)
566typedef struct SVGA3dCmdDXClearRenderTargetView {
567	SVGA3dRenderTargetViewId renderTargetViewId;
568	SVGA3dRGBAFloat rgba;
569} SVGA3dCmdDXClearRenderTargetView;
570#pragma pack(pop)
571
572#pragma pack(push, 1)
573typedef 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)
582typedef 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)
592typedef 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)
605typedef struct SVGA3dCmdDXPredCopy {
606	SVGA3dSurfaceId dstSid;
607	SVGA3dSurfaceId srcSid;
608} SVGA3dCmdDXPredCopy;
609#pragma pack(pop)
610
611#pragma pack(push, 1)
612typedef 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)
623typedef 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)
637typedef struct SVGA3dCmdDXPredConvert {
638	SVGA3dSurfaceId dstSid;
639	SVGA3dSurfaceId srcSid;
640} SVGA3dCmdDXPredConvert;
641#pragma pack(pop)
642
643#pragma pack(push, 1)
644typedef 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)
654typedef 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)
664typedef 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)
677typedef 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)
687typedef struct {
688	SVGA3dSurfaceId dstSid;
689	uint32 dstSubResource;
690	SVGA3dSurfaceId srcSid;
691	uint32 srcSubResource;
692	SVGA3dSurfaceFormat copyFormat;
693} SVGA3dCmdDXPredResolveCopy;
694#pragma pack(pop)
695
696typedef 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)
703typedef 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)
715typedef struct SVGA3dCmdDXGenMips {
716	SVGA3dShaderResourceViewId shaderResourceViewId;
717} SVGA3dCmdDXGenMips;
718#pragma pack(pop)
719
720#pragma pack(push, 1)
721typedef struct SVGA3dCmdDXUpdateSubResource {
722	SVGA3dSurfaceId sid;
723	uint32 subResource;
724	SVGA3dBox box;
725} SVGA3dCmdDXUpdateSubResource;
726#pragma pack(pop)
727
728#pragma pack(push, 1)
729typedef struct SVGA3dCmdDXReadbackSubResource {
730	SVGA3dSurfaceId sid;
731	uint32 subResource;
732} SVGA3dCmdDXReadbackSubResource;
733#pragma pack(pop)
734
735#pragma pack(push, 1)
736typedef struct SVGA3dCmdDXInvalidateSubResource {
737	SVGA3dSurfaceId sid;
738	uint32 subResource;
739} SVGA3dCmdDXInvalidateSubResource;
740#pragma pack(pop)
741
742#pragma pack(push, 1)
743typedef 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)
756typedef uint32 SVGA3dTransferToBufferFlags;
757
758#pragma pack(push, 1)
759typedef 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)
772typedef 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)
784typedef struct SVGA3dCmdDXSurfaceCopyAndReadback {
785	SVGA3dSurfaceId srcSid;
786	SVGA3dSurfaceId destSid;
787	SVGA3dCopyBox box;
788} SVGA3dCmdDXSurfaceCopyAndReadback;
789#pragma pack(pop)
790
791typedef 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)
800typedef struct SVGAObjectRef {
801	SVGAOTableType type;
802	uint32 id;
803} SVGAObjectRef;
804#pragma pack(pop)
805
806#pragma pack(push, 1)
807typedef struct SVGACObjectRef {
808	SVGACOTableType type;
809	uint32 cid;
810	uint32 id;
811} SVGACObjectRef;
812#pragma pack(pop)
813
814#pragma pack(push, 1)
815typedef struct SVGA3dCmdDXHint {
816	SVGADXHintId hintId;
817
818} SVGA3dCmdDXHint;
819#pragma pack(pop)
820
821#pragma pack(push, 1)
822typedef struct SVGA3dCmdDXBufferUpdate {
823	SVGA3dSurfaceId sid;
824	uint32 x;
825	uint32 width;
826} SVGA3dCmdDXBufferUpdate;
827#pragma pack(pop)
828
829#pragma pack(push, 1)
830typedef struct SVGA3dCmdDXSetConstantBufferOffset {
831	uint32 slot;
832	uint32 offsetInBytes;
833} SVGA3dCmdDXSetConstantBufferOffset;
834#pragma pack(pop)
835
836typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetVSConstantBufferOffset;
837
838typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetPSConstantBufferOffset;
839
840typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetGSConstantBufferOffset;
841
842typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetHSConstantBufferOffset;
843
844typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetDSConstantBufferOffset;
845
846typedef 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)
851typedef uint32 SVGA3dBufferExFlags;
852
853#pragma pack(push, 1)
854typedef 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)
879typedef 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)
889typedef 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)
901typedef struct SVGA3dCmdDXDestroyShaderResourceView {
902	SVGA3dShaderResourceViewId shaderResourceViewId;
903} SVGA3dCmdDXDestroyShaderResourceView;
904#pragma pack(pop)
905
906#pragma pack(push, 1)
907typedef 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)
929typedef 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)
939typedef 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)
951typedef 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
959typedef uint8 SVGA3DCreateDSViewFlags;
960
961#pragma pack(push, 1)
962typedef 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)
977typedef 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)
993typedef 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)
1009typedef 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)
1017typedef uint32 SVGA3dUABufferFlags;
1018
1019#pragma pack(push, 1)
1020typedef 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)
1048typedef 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)
1059typedef 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)
1071typedef struct SVGA3dCmdDXDestroyUAView {
1072	SVGA3dUAViewId uaViewId;
1073} SVGA3dCmdDXDestroyUAView;
1074#pragma pack(pop)
1075
1076#pragma pack(push, 1)
1077typedef struct SVGA3dCmdDXClearUAViewUint {
1078	SVGA3dUAViewId uaViewId;
1079	SVGA3dRGBAUint32 value;
1080} SVGA3dCmdDXClearUAViewUint;
1081#pragma pack(pop)
1082
1083#pragma pack(push, 1)
1084typedef struct SVGA3dCmdDXClearUAViewFloat {
1085	SVGA3dUAViewId uaViewId;
1086	SVGA3dRGBAFloat value;
1087} SVGA3dCmdDXClearUAViewFloat;
1088#pragma pack(pop)
1089
1090#pragma pack(push, 1)
1091typedef struct SVGA3dCmdDXCopyStructureCount {
1092	SVGA3dUAViewId srcUAViewId;
1093	SVGA3dSurfaceId destSid;
1094	uint32 destByteOffset;
1095} SVGA3dCmdDXCopyStructureCount;
1096#pragma pack(pop)
1097
1098#pragma pack(push, 1)
1099typedef struct SVGA3dCmdDXSetStructureCount {
1100	SVGA3dUAViewId uaViewId;
1101	uint32 structureCount;
1102} SVGA3dCmdDXSetStructureCount;
1103#pragma pack(pop)
1104
1105#pragma pack(push, 1)
1106typedef struct SVGA3dCmdDXSetUAViews {
1107	uint32 uavSpliceIndex;
1108
1109} SVGA3dCmdDXSetUAViews;
1110#pragma pack(pop)
1111
1112#pragma pack(push, 1)
1113typedef struct SVGA3dCmdDXSetCSUAViews {
1114	uint32 startIndex;
1115
1116} SVGA3dCmdDXSetCSUAViews;
1117#pragma pack(pop)
1118
1119#pragma pack(push, 1)
1120typedef 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)
1131typedef 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)
1140typedef struct SVGA3dCmdDXDefineElementLayout {
1141	SVGA3dElementLayoutId elementLayoutId;
1142
1143} SVGA3dCmdDXDefineElementLayout;
1144#pragma pack(pop)
1145
1146#pragma pack(push, 1)
1147typedef 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)
1155typedef 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)
1171typedef 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)
1181typedef 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)
1191typedef struct SVGA3dCmdDXDestroyBlendState {
1192	SVGA3dBlendStateId blendId;
1193} SVGA3dCmdDXDestroyBlendState;
1194#pragma pack(pop)
1195
1196#pragma pack(push, 1)
1197typedef 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)
1220typedef 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)
1245typedef struct SVGA3dCmdDXDestroyDepthStencilState {
1246	SVGA3dDepthStencilStateId depthStencilId;
1247} SVGA3dCmdDXDestroyDepthStencilState;
1248#pragma pack(pop)
1249
1250#pragma pack(push, 1)
1251typedef 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)
1273typedef 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)
1295typedef 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)
1318typedef struct SVGA3dCmdDXDestroyRasterizerState {
1319	SVGA3dRasterizerStateId rasterizerId;
1320} SVGA3dCmdDXDestroyRasterizerState;
1321#pragma pack(pop)
1322
1323#pragma pack(push, 1)
1324typedef 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)
1342typedef 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)
1360typedef 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
1389typedef uint32 SVGA3dDXSignatureSemanticName;
1390
1391#define SVGADX_SIGNATURE_REGISTER_COMPONENT_UNKNOWN 0
1392typedef uint32 SVGA3dDXSignatureRegisterComponentType;
1393
1394#define SVGADX_SIGNATURE_MIN_PRECISION_DEFAULT 0
1395typedef uint32 SVGA3dDXSignatureMinPrecision;
1396
1397#pragma pack(push, 1)
1398typedef 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)
1410typedef 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)
1419typedef struct SVGA3dCmdDXDefineShader {
1420	SVGA3dShaderId shaderId;
1421	SVGA3dShaderType type;
1422	uint32 sizeInBytes;
1423} SVGA3dCmdDXDefineShader;
1424#pragma pack(pop)
1425
1426#pragma pack(push, 1)
1427typedef 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)
1437typedef struct SVGA3dCmdDXDestroyShader {
1438	SVGA3dShaderId shaderId;
1439} SVGA3dCmdDXDestroyShader;
1440#pragma pack(pop)
1441
1442#pragma pack(push, 1)
1443typedef 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)
1452typedef struct SVGA3dCmdDXBindAllShader {
1453	uint32 cid;
1454	SVGAMobId mobid;
1455} SVGA3dCmdDXBindAllShader;
1456#pragma pack(pop)
1457
1458#pragma pack(push, 1)
1459typedef 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)
1470typedef 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)
1481typedef 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)
1497typedef 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)
1509typedef 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)
1519typedef 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)
1528typedef struct SVGA3dCmdDXDestroyStreamOutput {
1529	SVGA3dStreamOutputId soid;
1530} SVGA3dCmdDXDestroyStreamOutput;
1531#pragma pack(pop)
1532
1533#pragma pack(push, 1)
1534typedef struct SVGA3dCmdDXSetStreamOutput {
1535	SVGA3dStreamOutputId soid;
1536} SVGA3dCmdDXSetStreamOutput;
1537#pragma pack(pop)
1538
1539#pragma pack(push, 1)
1540typedef struct SVGA3dCmdDXSetMinLOD {
1541	SVGA3dSurfaceId sid;
1542	float minLOD;
1543} SVGA3dCmdDXSetMinLOD;
1544#pragma pack(pop)
1545
1546#pragma pack(push, 1)
1547typedef struct {
1548	uint64 value;
1549	uint32 mobId;
1550	uint32 mobOffset;
1551} SVGA3dCmdDXMobFence64;
1552#pragma pack(pop)
1553
1554#pragma pack(push, 1)
1555typedef 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)
1564typedef 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)
1573typedef struct SVGA3dCmdDXReadbackCOTable {
1574	uint32 cid;
1575	SVGACOTableType type;
1576} SVGA3dCmdDXReadbackCOTable;
1577#pragma pack(pop)
1578
1579#pragma pack(push, 1)
1580typedef struct SVGA3dCmdDXCopyCOTableIntoMob {
1581	uint32 cid;
1582	SVGACOTableType type;
1583	uint32 mobid;
1584} SVGA3dCmdDXCopyCOTableIntoMob;
1585#pragma pack(pop)
1586
1587#pragma pack(push, 1)
1588typedef 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)
1599typedef 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)
1610typedef struct SVGA3dCOTableData {
1611	uint32 mobid;
1612} SVGA3dCOTableData;
1613#pragma pack(pop)
1614
1615#pragma pack(push, 1)
1616typedef struct SVGA3dBufferBinding {
1617	uint32 bufferId;
1618	uint32 stride;
1619	uint32 offset;
1620} SVGA3dBufferBinding;
1621#pragma pack(pop)
1622
1623#pragma pack(push, 1)
1624typedef struct SVGA3dConstantBufferBinding {
1625	uint32 sid;
1626	uint32 offsetInBytes;
1627	uint32 sizeInBytes;
1628} SVGA3dConstantBufferBinding;
1629#pragma pack(pop)
1630
1631#pragma pack(push, 1)
1632typedef 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)
1644typedef 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)
1713typedef 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