1696Spaul/*	$NetBSD: svga3d_dx.h,v 1.3 2021/12/18 23:45:45 riastradh Exp $	*/
2696Spaul
3696Spaul/* SPDX-License-Identifier: GPL-2.0 OR MIT */
4696Spaul/**********************************************************
5696Spaul * Copyright 2012-2015 VMware, Inc.
6696Spaul *
7696Spaul * Permission is hereby granted, free of charge, to any person
8696Spaul * obtaining a copy of this software and associated documentation
9696Spaul * files (the "Software"), to deal in the Software without
10696Spaul * restriction, including without limitation the rights to use, copy,
11696Spaul * modify, merge, publish, distribute, sublicense, and/or sell copies
12696Spaul * of the Software, and to permit persons to whom the Software is
13696Spaul * furnished to do so, subject to the following conditions:
14696Spaul *
15696Spaul * The above copyright notice and this permission notice shall be
16696Spaul * included in all copies or substantial portions of the Software.
171153Sjkh *
18696Spaul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19696Spaul * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20696Spaul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21696Spaul * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
22696Spaul * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
23696Spaul * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24696Spaul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25696Spaul * SOFTWARE.
26696Spaul *
27696Spaul **********************************************************/
28696Spaul
29696Spaul/*
30696Spaul * svga3d_dx.h --
3195648Smarkm *
3295648Smarkm *       SVGA 3d hardware definitions for DX10 support.
3369827Scharnier */
34696Spaul
3595648Smarkm#ifndef _SVGA3D_DX_H_
3676224Sobrien#define _SVGA3D_DX_H_
3795648Smarkm
3895153Smike#define INCLUDE_ALLOW_MODULE
3995648Smarkm#define INCLUDE_ALLOW_USERLEVEL
40696Spaul#define INCLUDE_ALLOW_VMCORE
4190172Ssobomax#include "includeCheck.h"
421741Srich
43180236Sedwin#include "svga3d_limits.h"
441741Srich
451741Srich#define SVGA3D_INPUT_MIN               0
461741Srich#define SVGA3D_INPUT_PER_VERTEX_DATA   0
47181136Sjhb#define SVGA3D_INPUT_PER_INSTANCE_DATA 1
481741Srich#define SVGA3D_INPUT_MAX               2
49696Spaultypedef uint32 SVGA3dInputClassification;
5095648Smarkm
5118600Speter#define SVGA3D_RESOURCE_TYPE_MIN      1
52180646Sedwin#define SVGA3D_RESOURCE_BUFFER        1
53180877Sedwin#define SVGA3D_RESOURCE_TEXTURE1D     2
54180877Sedwin#define SVGA3D_RESOURCE_TEXTURE2D     3
55180877Sedwin#define SVGA3D_RESOURCE_TEXTURE3D     4
56180646Sedwin#define SVGA3D_RESOURCE_TEXTURECUBE   5
57180877Sedwin#define SVGA3D_RESOURCE_TYPE_DX10_MAX 6
58180877Sedwin#define SVGA3D_RESOURCE_BUFFEREX      6
59180646Sedwin#define SVGA3D_RESOURCE_TYPE_MAX      7
60180646Sedwintypedef uint32 SVGA3dResourceType;
61254018Smarkj
62254018Smarkj#define SVGA3D_COLOR_WRITE_ENABLE_RED     (1 << 0)
63254018Smarkj#define SVGA3D_COLOR_WRITE_ENABLE_GREEN   (1 << 1)
64254018Smarkj#define SVGA3D_COLOR_WRITE_ENABLE_BLUE    (1 << 2)
65254018Smarkj#define SVGA3D_COLOR_WRITE_ENABLE_ALPHA   (1 << 3)
66254018Smarkj#define SVGA3D_COLOR_WRITE_ENABLE_ALL     (SVGA3D_COLOR_WRITE_ENABLE_RED |   \
67254018Smarkj                                           SVGA3D_COLOR_WRITE_ENABLE_GREEN | \
68254018Smarkj                                           SVGA3D_COLOR_WRITE_ENABLE_BLUE |  \
69254018Smarkj                                           SVGA3D_COLOR_WRITE_ENABLE_ALPHA)
70254018Smarkjtypedef uint8 SVGA3dColorWriteEnable;
71180235Sedwin
72180235Sedwin#define SVGA3D_DEPTH_WRITE_MASK_ZERO   0
73180235Sedwin#define SVGA3D_DEPTH_WRITE_MASK_ALL    1
74180234Sedwintypedef uint8 SVGA3dDepthWriteMask;
75180235Sedwin
76180235Sedwin#define SVGA3D_FILTER_MIP_LINEAR  (1 << 0)
77180235Sedwin#define SVGA3D_FILTER_MAG_LINEAR  (1 << 2)
78180646Sedwin#define SVGA3D_FILTER_MIN_LINEAR  (1 << 4)
79180236Sedwin#define SVGA3D_FILTER_ANISOTROPIC (1 << 6)
80696Spaul#define SVGA3D_FILTER_COMPARE     (1 << 7)
81181136Sjhbtypedef uint32 SVGA3dFilter;
82180235Sedwin
83181136Sjhb#define SVGA3D_CULL_INVALID 0
84181136Sjhb#define SVGA3D_CULL_MIN     1
85181136Sjhb#define SVGA3D_CULL_NONE    1
86300458Struckman#define SVGA3D_CULL_FRONT   2
87181136Sjhb#define SVGA3D_CULL_BACK    3
88181136Sjhb#define SVGA3D_CULL_MAX     4
89254018Smarkjtypedef uint8 SVGA3dCullMode;
90181136Sjhb
91181136Sjhb#define SVGA3D_COMPARISON_INVALID         0
92181136Sjhb#define SVGA3D_COMPARISON_MIN             1
93181136Sjhb#define SVGA3D_COMPARISON_NEVER           1
94181136Sjhb#define SVGA3D_COMPARISON_LESS            2
95181136Sjhb#define SVGA3D_COMPARISON_EQUAL           3
96181136Sjhb#define SVGA3D_COMPARISON_LESS_EQUAL      4
97181161Sjhb#define SVGA3D_COMPARISON_GREATER         5
98181136Sjhb#define SVGA3D_COMPARISON_NOT_EQUAL       6
99181136Sjhb#define SVGA3D_COMPARISON_GREATER_EQUAL   7
100181136Sjhb#define SVGA3D_COMPARISON_ALWAYS          8
101181161Sjhb#define SVGA3D_COMPARISON_MAX             9
102181136Sjhbtypedef uint8 SVGA3dComparisonFunc;
103181136Sjhb
104181136Sjhb/*
105181136Sjhb * SVGA3D_MULTISAMPLE_RAST_DISABLE disables MSAA for all primitives.
106181136Sjhb * SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE, which is supported in SM41,
107181136Sjhb * disables MSAA for lines only.
108181136Sjhb */
109181136Sjhb#define SVGA3D_MULTISAMPLE_RAST_DISABLE        0
110181136Sjhb#define SVGA3D_MULTISAMPLE_RAST_ENABLE         1
111181136Sjhb#define SVGA3D_MULTISAMPLE_RAST_DX_MAX         1
112181136Sjhb#define SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE   2
113181136Sjhb#define SVGA3D_MULTISAMPLE_RAST_MAX            2
114181136Sjhbtypedef uint8 SVGA3dMultisampleRastEnable;
115181161Sjhb
116181136Sjhb#define SVGA3D_DX_MAX_VERTEXBUFFERS 32
117181136Sjhb#define SVGA3D_DX_MAX_VERTEXINPUTREGISTERS 16
118181161Sjhb#define SVGA3D_DX_SM41_MAX_VERTEXINPUTREGISTERS 32
119181136Sjhb#define SVGA3D_DX_MAX_SOTARGETS 4
120181161Sjhb#define SVGA3D_DX_MAX_SRVIEWS 128
121181136Sjhb#define SVGA3D_DX_MAX_CONSTBUFFERS 16
122181161Sjhb#define SVGA3D_DX_MAX_SAMPLERS 16
123181136Sjhb
124181136Sjhb#define SVGA3D_DX_MAX_CONSTBUF_BINDING_SIZE (4096 * 4 * (uint32)sizeof(uint32))
125181136Sjhb
126181136Sjhbtypedef uint32 SVGA3dShaderResourceViewId;
127181136Sjhbtypedef uint32 SVGA3dRenderTargetViewId;
128254018Smarkjtypedef uint32 SVGA3dDepthStencilViewId;
129181136Sjhb
130181136Sjhbtypedef uint32 SVGA3dShaderId;
131180236Sedwintypedef uint32 SVGA3dElementLayoutId;
132180235Sedwintypedef uint32 SVGA3dSamplerId;
133696Spaultypedef uint32 SVGA3dBlendStateId;
13495648Smarkmtypedef uint32 SVGA3dDepthStencilStateId;
135696Spaultypedef uint32 SVGA3dRasterizerStateId;
136180234Sedwintypedef uint32 SVGA3dQueryId;
137180234Sedwintypedef uint32 SVGA3dStreamOutputId;
138696Spaul
13990755Sobrientypedef union {
140180234Sedwin   struct {
14190755Sobrien      float r;
142180234Sedwin      float g;
143696Spaul      float b;
14490755Sobrien      float a;
14590755Sobrien   };
14690755Sobrien
14718598Speter   float value[4];
148180234Sedwin} SVGA3dRGBAFloat;
149180234Sedwin
15069827Scharniertypedef
15118598Speter#include "vmware_pack_begin.h"
15218598Speterstruct {
15318598Speter   uint32 cid;
15418598Speter   SVGAMobId mobid;
155180234Sedwin}
156180234Sedwin#include "vmware_pack_end.h"
157180234SedwinSVGAOTableDXContextEntry;
158696Spaul
159696Spaultypedef
160180234Sedwin#include "vmware_pack_begin.h"
161696Spaulstruct SVGA3dCmdDXDefineContext {
162696Spaul   uint32 cid;
163696Spaul}
164696Spaul#include "vmware_pack_end.h"
165696SpaulSVGA3dCmdDXDefineContext;   /* SVGA_3D_CMD_DX_DEFINE_CONTEXT */
166180234Sedwin
16718600Spetertypedef
16818600Speter#include "vmware_pack_begin.h"
169696Spaulstruct SVGA3dCmdDXDestroyContext {
170696Spaul   uint32 cid;
171180234Sedwin}
172696Spaul#include "vmware_pack_end.h"
173696SpaulSVGA3dCmdDXDestroyContext;   /* SVGA_3D_CMD_DX_DESTROY_CONTEXT */
17439354Sdfr
17518600Speter/*
17618600Speter * Bind a DX context.
17718600Speter *
17818600Speter * validContents should be set to 0 for new contexts,
17918600Speter * and 1 if this is an old context which is getting paged
18039354Sdfr * back on to the device.
18118600Speter *
1821741Srich * For new contexts, it is recommended that the driver
183180234Sedwin * issue commands to initialize all interesting state
184180235Sedwin * prior to rendering.
185696Spaul */
186696Spaultypedef
1871741Srich#include "vmware_pack_begin.h"
188696Spaulstruct SVGA3dCmdDXBindContext {
189696Spaul   uint32 cid;
190696Spaul   SVGAMobId mobid;
191180235Sedwin   uint32 validContents;
192180235Sedwin}
193180235Sedwin#include "vmware_pack_end.h"
194696SpaulSVGA3dCmdDXBindContext;   /* SVGA_3D_CMD_DX_BIND_CONTEXT */
195696Spaul
196696Spaul/*
19735575Sdfr * Readback a DX context.
198180236Sedwin * (Request that the device flush the contents back into guest memory.)
199180236Sedwin */
200180236Sedwintypedef
201180236Sedwin#include "vmware_pack_begin.h"
202180646Sedwinstruct SVGA3dCmdDXReadbackContext {
203180236Sedwin   uint32 cid;
204181136Sjhb}
205181136Sjhb#include "vmware_pack_end.h"
206180236SedwinSVGA3dCmdDXReadbackContext;   /* SVGA_3D_CMD_DX_READBACK_CONTEXT */
207180236Sedwin
208180236Sedwin/*
209180236Sedwin * Invalidate a guest-backed context.
210180236Sedwin */
211180236Sedwintypedef
212180236Sedwin#include "vmware_pack_begin.h"
213180236Sedwinstruct SVGA3dCmdDXInvalidateContext {
214180236Sedwin   uint32 cid;
215180236Sedwin}
216180235Sedwin#include "vmware_pack_end.h"
217254018SmarkjSVGA3dCmdDXInvalidateContext;   /* SVGA_3D_CMD_DX_INVALIDATE_CONTEXT */
218180235Sedwin
219254018Smarkjtypedef
220180235Sedwin#include "vmware_pack_begin.h"
221254018Smarkjstruct SVGA3dCmdDXSetSingleConstantBuffer {
22235575Sdfr   uint32 slot;
223254018Smarkj   SVGA3dShaderType type;
224180234Sedwin   SVGA3dSurfaceId sid;
225254018Smarkj   uint32 offsetInBytes;
22690755Sobrien   uint32 sizeInBytes;
22718598Speter}
22818598Speter#include "vmware_pack_end.h"
2291153SjkhSVGA3dCmdDXSetSingleConstantBuffer;
230696Spaul/* SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER */
231696Spaul
232696Spaultypedef
2331741Srich#include "vmware_pack_begin.h"
234696Spaulstruct SVGA3dCmdDXSetShaderResources {
235696Spaul   uint32 startView;
236181161Sjhb   SVGA3dShaderType type;
2371741Srich
2381741Srich   /*
2391741Srich    * Followed by a variable number of SVGA3dShaderResourceViewId's.
240180234Sedwin    */
241180234Sedwin}
242696Spaul#include "vmware_pack_end.h"
243181161SjhbSVGA3dCmdDXSetShaderResources; /* SVGA_3D_CMD_DX_SET_SHADER_RESOURCES */
244181161Sjhb
245180234Sedwintypedef
246180234Sedwin#include "vmware_pack_begin.h"
247696Spaulstruct SVGA3dCmdDXSetShader {
248696Spaul   SVGA3dShaderId shaderId;
249696Spaul   SVGA3dShaderType type;
250696Spaul}
251105439Ssobomax#include "vmware_pack_end.h"
25290172SsobomaxSVGA3dCmdDXSetShader; /* SVGA_3D_CMD_DX_SET_SHADER */
25390172Ssobomax
254105439Ssobomaxtypedef
255105439Ssobomax#include "vmware_pack_begin.h"
256105439Ssobomaxstruct SVGA3dCmdDXSetSamplers {
25790172Ssobomax   uint32 startSampler;
258696Spaul   SVGA3dShaderType type;
259696Spaul
260696Spaul   /*
261696Spaul    * Followed by a variable number of SVGA3dSamplerId's.
262696Spaul    */
263696Spaul}
264180235Sedwin#include "vmware_pack_end.h"
265180235SedwinSVGA3dCmdDXSetSamplers; /* SVGA_3D_CMD_DX_SET_SAMPLERS */
266180235Sedwin
267180235Sedwintypedef
268180235Sedwin#include "vmware_pack_begin.h"
269180235Sedwinstruct SVGA3dCmdDXDraw {
270180235Sedwin   uint32 vertexCount;
271180235Sedwin   uint32 startVertexLocation;
272180235Sedwin}
273180235Sedwin#include "vmware_pack_end.h"
274180235SedwinSVGA3dCmdDXDraw; /* SVGA_3D_CMD_DX_DRAW */
275180235Sedwin
276180235Sedwintypedef
277180235Sedwin#include "vmware_pack_begin.h"
278180646Sedwinstruct SVGA3dCmdDXDrawIndexed {
279180236Sedwin   uint32 indexCount;
280180646Sedwin   uint32 startIndexLocation;
281180235Sedwin   int32  baseVertexLocation;
282180235Sedwin}
283180235Sedwin#include "vmware_pack_end.h"
284180235SedwinSVGA3dCmdDXDrawIndexed; /* SVGA_3D_CMD_DX_DRAW_INDEXED */
285180235Sedwin
286180235Sedwintypedef
287180235Sedwin#include "vmware_pack_begin.h"
288180235Sedwinstruct SVGA3dCmdDXDrawInstanced {
289180235Sedwin   uint32 vertexCountPerInstance;
290180235Sedwin   uint32 instanceCount;
291180235Sedwin   uint32 startVertexLocation;
292180235Sedwin   uint32 startInstanceLocation;
293180235Sedwin}
294180235Sedwin#include "vmware_pack_end.h"
295180235SedwinSVGA3dCmdDXDrawInstanced; /* SVGA_3D_CMD_DX_DRAW_INSTANCED */
296180235Sedwin
297180235Sedwintypedef
298180235Sedwin#include "vmware_pack_begin.h"
299180235Sedwinstruct SVGA3dCmdDXDrawIndexedInstanced {
300180235Sedwin   uint32 indexCountPerInstance;
301180235Sedwin   uint32 instanceCount;
302180235Sedwin   uint32 startIndexLocation;
303180235Sedwin   int32  baseVertexLocation;
304180235Sedwin   uint32 startInstanceLocation;
305180235Sedwin}
306180235Sedwin#include "vmware_pack_end.h"
307180646SedwinSVGA3dCmdDXDrawIndexedInstanced; /* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED */
308180236Sedwin
309180236Sedwintypedef
310180236Sedwin#include "vmware_pack_begin.h"
311180236Sedwinstruct SVGA3dCmdDXDrawAuto {
312180236Sedwin   uint32 pad0;
313180236Sedwin}
314180236Sedwin#include "vmware_pack_end.h"
315180236SedwinSVGA3dCmdDXDrawAuto; /* SVGA_3D_CMD_DX_DRAW_AUTO */
316180236Sedwin
317180236Sedwintypedef
318180236Sedwin#include "vmware_pack_begin.h"
319180236Sedwinstruct SVGA3dCmdDXSetInputLayout {
320180236Sedwin   SVGA3dElementLayoutId elementLayoutId;
321180236Sedwin}
322180236Sedwin#include "vmware_pack_end.h"
323180236SedwinSVGA3dCmdDXSetInputLayout; /* SVGA_3D_CMD_DX_SET_INPUT_LAYOUT */
324180236Sedwin
325180236Sedwintypedef
326180236Sedwin#include "vmware_pack_begin.h"
327180236Sedwinstruct SVGA3dVertexBuffer {
328180236Sedwin   SVGA3dSurfaceId sid;
329180236Sedwin   uint32 stride;
330180236Sedwin   uint32 offset;
331180236Sedwin}
332180236Sedwin#include "vmware_pack_end.h"
333180236SedwinSVGA3dVertexBuffer;
334180236Sedwin
335180236Sedwintypedef
336180236Sedwin#include "vmware_pack_begin.h"
337180236Sedwinstruct SVGA3dCmdDXSetVertexBuffers {
338215705Sbrucec   uint32 startBuffer;
339180236Sedwin   /* Followed by a variable number of SVGA3dVertexBuffer's. */
340180236Sedwin}
341180236Sedwin#include "vmware_pack_end.h"
342180236SedwinSVGA3dCmdDXSetVertexBuffers; /* SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS */
343180236Sedwin
344180236Sedwintypedef
345180236Sedwin#include "vmware_pack_begin.h"
346180236Sedwinstruct SVGA3dCmdDXSetIndexBuffer {
347180236Sedwin   SVGA3dSurfaceId sid;
348180236Sedwin   SVGA3dSurfaceFormat format;
349180236Sedwin   uint32 offset;
350180235Sedwin}
351180235Sedwin#include "vmware_pack_end.h"
352180235SedwinSVGA3dCmdDXSetIndexBuffer; /* SVGA_3D_CMD_DX_SET_INDEX_BUFFER */
353180235Sedwin
354180235Sedwintypedef
355180235Sedwin#include "vmware_pack_begin.h"
356180235Sedwinstruct SVGA3dCmdDXSetTopology {
357180235Sedwin   SVGA3dPrimitiveType topology;
358180235Sedwin}
359180235Sedwin#include "vmware_pack_end.h"
360180235SedwinSVGA3dCmdDXSetTopology; /* SVGA_3D_CMD_DX_SET_TOPOLOGY */
361180235Sedwin
362180235Sedwintypedef
363180235Sedwin#include "vmware_pack_begin.h"
364180235Sedwinstruct SVGA3dCmdDXSetRenderTargets {
365180235Sedwin   SVGA3dDepthStencilViewId depthStencilViewId;
366180235Sedwin   /* Followed by a variable number of SVGA3dRenderTargetViewId's. */
367180235Sedwin}
368180235Sedwin#include "vmware_pack_end.h"
369180235SedwinSVGA3dCmdDXSetRenderTargets; /* SVGA_3D_CMD_DX_SET_RENDERTARGETS */
370180235Sedwin
371180235Sedwintypedef
372180235Sedwin#include "vmware_pack_begin.h"
373180235Sedwinstruct SVGA3dCmdDXSetBlendState {
374180235Sedwin   SVGA3dBlendStateId blendId;
375180235Sedwin   float blendFactor[4];
376180235Sedwin   uint32 sampleMask;
377180235Sedwin}
378180235Sedwin#include "vmware_pack_end.h"
379180235SedwinSVGA3dCmdDXSetBlendState; /* SVGA_3D_CMD_DX_SET_BLEND_STATE */
380291268Sjkim
381291268Sjkimtypedef
382180235Sedwin#include "vmware_pack_begin.h"
383180235Sedwinstruct SVGA3dCmdDXSetDepthStencilState {
384291268Sjkim   SVGA3dDepthStencilStateId depthStencilId;
385291268Sjkim   uint32 stencilRef;
386291268Sjkim}
387291268Sjkim#include "vmware_pack_end.h"
388291268SjkimSVGA3dCmdDXSetDepthStencilState; /* SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE */
389291268Sjkim
390291268Sjkimtypedef
391291268Sjkim#include "vmware_pack_begin.h"
392291268Sjkimstruct SVGA3dCmdDXSetRasterizerState {
393180235Sedwin   SVGA3dRasterizerStateId rasterizerId;
394180235Sedwin}
395180235Sedwin#include "vmware_pack_end.h"
396180235SedwinSVGA3dCmdDXSetRasterizerState; /* SVGA_3D_CMD_DX_SET_RASTERIZER_STATE */
397180235Sedwin
398180235Sedwin#define SVGA3D_DXQUERY_FLAG_PREDICATEHINT (1 << 0)
399180235Sedwintypedef uint32 SVGA3dDXQueryFlags;
400180235Sedwin
401180235Sedwin/*
402180235Sedwin * The SVGADXQueryDeviceState and SVGADXQueryDeviceBits are used by the device
403180235Sedwin * to track query state transitions, but are not intended to be used by the
404 * driver.
405 */
406#define SVGADX_QDSTATE_INVALID   ((uint8)-1) /* Query has no state */
407#define SVGADX_QDSTATE_MIN       0
408#define SVGADX_QDSTATE_IDLE      0   /* Query hasn't started yet */
409#define SVGADX_QDSTATE_ACTIVE    1   /* Query is actively gathering data */
410#define SVGADX_QDSTATE_PENDING   2   /* Query is waiting for results */
411#define SVGADX_QDSTATE_FINISHED  3   /* Query has completed */
412#define SVGADX_QDSTATE_MAX       4
413typedef uint8 SVGADXQueryDeviceState;
414
415typedef
416#include "vmware_pack_begin.h"
417struct {
418   SVGA3dQueryTypeUint8 type;
419   uint16 pad0;
420   SVGADXQueryDeviceState state;
421   SVGA3dDXQueryFlags flags;
422   SVGAMobId mobid;
423   uint32 offset;
424}
425#include "vmware_pack_end.h"
426SVGACOTableDXQueryEntry;
427
428typedef
429#include "vmware_pack_begin.h"
430struct SVGA3dCmdDXDefineQuery {
431   SVGA3dQueryId queryId;
432   SVGA3dQueryType type;
433   SVGA3dDXQueryFlags flags;
434}
435#include "vmware_pack_end.h"
436SVGA3dCmdDXDefineQuery; /* SVGA_3D_CMD_DX_DEFINE_QUERY */
437
438typedef
439#include "vmware_pack_begin.h"
440struct SVGA3dCmdDXDestroyQuery {
441   SVGA3dQueryId queryId;
442}
443#include "vmware_pack_end.h"
444SVGA3dCmdDXDestroyQuery; /* SVGA_3D_CMD_DX_DESTROY_QUERY */
445
446typedef
447#include "vmware_pack_begin.h"
448struct SVGA3dCmdDXBindQuery {
449   SVGA3dQueryId queryId;
450   SVGAMobId mobid;
451}
452#include "vmware_pack_end.h"
453SVGA3dCmdDXBindQuery; /* SVGA_3D_CMD_DX_BIND_QUERY */
454
455typedef
456#include "vmware_pack_begin.h"
457struct SVGA3dCmdDXSetQueryOffset {
458   SVGA3dQueryId queryId;
459   uint32 mobOffset;
460}
461#include "vmware_pack_end.h"
462SVGA3dCmdDXSetQueryOffset; /* SVGA_3D_CMD_DX_SET_QUERY_OFFSET */
463
464typedef
465#include "vmware_pack_begin.h"
466struct SVGA3dCmdDXBeginQuery {
467   SVGA3dQueryId queryId;
468}
469#include "vmware_pack_end.h"
470SVGA3dCmdDXBeginQuery; /* SVGA_3D_CMD_DX_QUERY_BEGIN */
471
472typedef
473#include "vmware_pack_begin.h"
474struct SVGA3dCmdDXEndQuery {
475   SVGA3dQueryId queryId;
476}
477#include "vmware_pack_end.h"
478SVGA3dCmdDXEndQuery; /* SVGA_3D_CMD_DX_QUERY_END */
479
480typedef
481#include "vmware_pack_begin.h"
482struct SVGA3dCmdDXReadbackQuery {
483   SVGA3dQueryId queryId;
484}
485#include "vmware_pack_end.h"
486SVGA3dCmdDXReadbackQuery; /* SVGA_3D_CMD_DX_READBACK_QUERY */
487
488typedef
489#include "vmware_pack_begin.h"
490struct SVGA3dCmdDXMoveQuery {
491   SVGA3dQueryId queryId;
492   SVGAMobId mobid;
493   uint32 mobOffset;
494}
495#include "vmware_pack_end.h"
496SVGA3dCmdDXMoveQuery; /* SVGA_3D_CMD_DX_MOVE_QUERY */
497
498typedef
499#include "vmware_pack_begin.h"
500struct SVGA3dCmdDXBindAllQuery {
501   uint32 cid;
502   SVGAMobId mobid;
503}
504#include "vmware_pack_end.h"
505SVGA3dCmdDXBindAllQuery; /* SVGA_3D_CMD_DX_BIND_ALL_QUERY */
506
507typedef
508#include "vmware_pack_begin.h"
509struct SVGA3dCmdDXReadbackAllQuery {
510   uint32 cid;
511}
512#include "vmware_pack_end.h"
513SVGA3dCmdDXReadbackAllQuery; /* SVGA_3D_CMD_DX_READBACK_ALL_QUERY */
514
515typedef
516#include "vmware_pack_begin.h"
517struct SVGA3dCmdDXSetPredication {
518   SVGA3dQueryId queryId;
519   uint32 predicateValue;
520}
521#include "vmware_pack_end.h"
522SVGA3dCmdDXSetPredication; /* SVGA_3D_CMD_DX_SET_PREDICATION */
523
524typedef
525#include "vmware_pack_begin.h"
526struct MKS3dDXSOState {
527   uint32 offset;       /* Starting offset */
528   uint32 intOffset;    /* Internal offset */
529   uint32 vertexCount;  /* vertices written */
530   uint32 sizeInBytes;  /* max bytes to write */
531}
532#include "vmware_pack_end.h"
533SVGA3dDXSOState;
534
535/* Set the offset field to this value to append SO values to the buffer */
536#define SVGA3D_DX_SO_OFFSET_APPEND ((uint32) ~0u)
537
538typedef
539#include "vmware_pack_begin.h"
540struct SVGA3dSoTarget {
541   SVGA3dSurfaceId sid;
542   uint32 offset;
543   uint32 sizeInBytes;
544}
545#include "vmware_pack_end.h"
546SVGA3dSoTarget;
547
548typedef
549#include "vmware_pack_begin.h"
550struct SVGA3dCmdDXSetSOTargets {
551   uint32 pad0;
552   /* Followed by a variable number of SVGA3dSOTarget's. */
553}
554#include "vmware_pack_end.h"
555SVGA3dCmdDXSetSOTargets; /* SVGA_3D_CMD_DX_SET_SOTARGETS */
556
557typedef
558#include "vmware_pack_begin.h"
559struct SVGA3dViewport
560{
561   float x;
562   float y;
563   float width;
564   float height;
565   float minDepth;
566   float maxDepth;
567}
568#include "vmware_pack_end.h"
569SVGA3dViewport;
570
571typedef
572#include "vmware_pack_begin.h"
573struct SVGA3dCmdDXSetViewports {
574   uint32 pad0;
575   /* Followed by a variable number of SVGA3dViewport's. */
576}
577#include "vmware_pack_end.h"
578SVGA3dCmdDXSetViewports; /* SVGA_3D_CMD_DX_SET_VIEWPORTS */
579
580#define SVGA3D_DX_MAX_VIEWPORTS  16
581
582typedef
583#include "vmware_pack_begin.h"
584struct SVGA3dCmdDXSetScissorRects {
585   uint32 pad0;
586   /* Followed by a variable number of SVGASignedRect's. */
587}
588#include "vmware_pack_end.h"
589SVGA3dCmdDXSetScissorRects; /* SVGA_3D_CMD_DX_SET_SCISSORRECTS */
590
591#define SVGA3D_DX_MAX_SCISSORRECTS  16
592
593typedef
594#include "vmware_pack_begin.h"
595struct SVGA3dCmdDXClearRenderTargetView {
596   SVGA3dRenderTargetViewId renderTargetViewId;
597   SVGA3dRGBAFloat rgba;
598}
599#include "vmware_pack_end.h"
600SVGA3dCmdDXClearRenderTargetView; /* SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW */
601
602typedef
603#include "vmware_pack_begin.h"
604struct SVGA3dCmdDXClearDepthStencilView {
605   uint16 flags;
606   uint16 stencil;
607   SVGA3dDepthStencilViewId depthStencilViewId;
608   float depth;
609}
610#include "vmware_pack_end.h"
611SVGA3dCmdDXClearDepthStencilView; /* SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW */
612
613typedef
614#include "vmware_pack_begin.h"
615struct SVGA3dCmdDXPredCopyRegion {
616   SVGA3dSurfaceId dstSid;
617   uint32 dstSubResource;
618   SVGA3dSurfaceId srcSid;
619   uint32 srcSubResource;
620   SVGA3dCopyBox box;
621}
622#include "vmware_pack_end.h"
623SVGA3dCmdDXPredCopyRegion;
624/* SVGA_3D_CMD_DX_PRED_COPY_REGION */
625
626typedef
627#include "vmware_pack_begin.h"
628struct SVGA3dCmdDXPredCopy {
629   SVGA3dSurfaceId dstSid;
630   SVGA3dSurfaceId srcSid;
631}
632#include "vmware_pack_end.h"
633SVGA3dCmdDXPredCopy; /* SVGA_3D_CMD_DX_PRED_COPY */
634
635typedef
636#include "vmware_pack_begin.h"
637struct SVGA3dCmdDXPredConvertRegion {
638   SVGA3dSurfaceId dstSid;
639   uint32 dstSubResource;
640   SVGA3dBox destBox;
641   SVGA3dSurfaceId srcSid;
642   uint32 srcSubResource;
643   SVGA3dBox srcBox;
644}
645#include "vmware_pack_end.h"
646SVGA3dCmdDXPredConvertRegion; /* SVGA_3D_CMD_DX_PRED_CONVERT_REGION */
647
648typedef
649#include "vmware_pack_begin.h"
650struct SVGA3dCmdDXPredConvert {
651   SVGA3dSurfaceId dstSid;
652   SVGA3dSurfaceId srcSid;
653}
654#include "vmware_pack_end.h"
655SVGA3dCmdDXPredConvert; /* SVGA_3D_CMD_DX_PRED_CONVERT */
656
657typedef
658#include "vmware_pack_begin.h"
659struct SVGA3dCmdDXBufferCopy {
660   SVGA3dSurfaceId dest;
661   SVGA3dSurfaceId src;
662   uint32 destX;
663   uint32 srcX;
664   uint32 width;
665}
666#include "vmware_pack_end.h"
667SVGA3dCmdDXBufferCopy;
668/* SVGA_3D_CMD_DX_BUFFER_COPY */
669
670/*
671 * Perform a surface copy between a multisample, and a non-multisampled
672 * surface.
673 */
674typedef
675#include "vmware_pack_begin.h"
676struct {
677   SVGA3dSurfaceId dstSid;
678   uint32 dstSubResource;
679   SVGA3dSurfaceId srcSid;
680   uint32 srcSubResource;
681   SVGA3dSurfaceFormat copyFormat;
682}
683#include "vmware_pack_end.h"
684SVGA3dCmdDXResolveCopy;               /* SVGA_3D_CMD_DX_RESOLVE_COPY */
685
686/*
687 * Perform a predicated surface copy between a multisample, and a
688 * non-multisampled surface.
689 */
690typedef
691#include "vmware_pack_begin.h"
692struct {
693   SVGA3dSurfaceId dstSid;
694   uint32 dstSubResource;
695   SVGA3dSurfaceId srcSid;
696   uint32 srcSubResource;
697   SVGA3dSurfaceFormat copyFormat;
698}
699#include "vmware_pack_end.h"
700SVGA3dCmdDXPredResolveCopy;           /* SVGA_3D_CMD_DX_PRED_RESOLVE_COPY */
701
702typedef uint32 SVGA3dDXPresentBltMode;
703#define SVGADX_PRESENTBLT_LINEAR           (1 << 0)
704#define SVGADX_PRESENTBLT_FORCE_SRC_SRGB   (1 << 1)
705#define SVGADX_PRESENTBLT_FORCE_SRC_XRBIAS (1 << 2)
706#define SVGADX_PRESENTBLT_MODE_MAX         (1 << 3)
707
708typedef
709#include "vmware_pack_begin.h"
710struct SVGA3dCmdDXPresentBlt {
711   SVGA3dSurfaceId srcSid;
712   uint32 srcSubResource;
713   SVGA3dSurfaceId dstSid;
714   uint32 destSubResource;
715   SVGA3dBox boxSrc;
716   SVGA3dBox boxDest;
717   SVGA3dDXPresentBltMode mode;
718}
719#include "vmware_pack_end.h"
720SVGA3dCmdDXPresentBlt; /* SVGA_3D_CMD_DX_PRESENTBLT*/
721
722typedef
723#include "vmware_pack_begin.h"
724struct SVGA3dCmdDXGenMips {
725   SVGA3dShaderResourceViewId shaderResourceViewId;
726}
727#include "vmware_pack_end.h"
728SVGA3dCmdDXGenMips; /* SVGA_3D_CMD_DX_GENMIPS */
729
730/*
731 * Update a sub-resource in a guest-backed resource.
732 * (Inform the device that the guest-contents have been updated.)
733 */
734typedef
735#include "vmware_pack_begin.h"
736struct SVGA3dCmdDXUpdateSubResource {
737   SVGA3dSurfaceId sid;
738   uint32 subResource;
739   SVGA3dBox box;
740}
741#include "vmware_pack_end.h"
742SVGA3dCmdDXUpdateSubResource;   /* SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE */
743
744/*
745 * Readback a subresource in a guest-backed resource.
746 * (Request the device to flush the dirty contents into the guest.)
747 */
748typedef
749#include "vmware_pack_begin.h"
750struct SVGA3dCmdDXReadbackSubResource {
751   SVGA3dSurfaceId sid;
752   uint32 subResource;
753}
754#include "vmware_pack_end.h"
755SVGA3dCmdDXReadbackSubResource;   /* SVGA_3D_CMD_DX_READBACK_SUBRESOURCE */
756
757/*
758 * Invalidate an image in a guest-backed surface.
759 * (Notify the device that the contents can be lost.)
760 */
761typedef
762#include "vmware_pack_begin.h"
763struct SVGA3dCmdDXInvalidateSubResource {
764   SVGA3dSurfaceId sid;
765   uint32 subResource;
766}
767#include "vmware_pack_end.h"
768SVGA3dCmdDXInvalidateSubResource;   /* SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE */
769
770
771/*
772 * Raw byte wise transfer from a buffer surface into another surface
773 * of the requested box.  Supported if 3d is enabled and SVGA_CAP_DX
774 * is set.  This command does not take a context.
775 */
776typedef
777#include "vmware_pack_begin.h"
778struct SVGA3dCmdDXTransferFromBuffer {
779   SVGA3dSurfaceId srcSid;
780   uint32 srcOffset;
781   uint32 srcPitch;
782   uint32 srcSlicePitch;
783   SVGA3dSurfaceId destSid;
784   uint32 destSubResource;
785   SVGA3dBox destBox;
786}
787#include "vmware_pack_end.h"
788SVGA3dCmdDXTransferFromBuffer;   /* SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER */
789
790
791/*
792 * Raw byte wise transfer from a buffer surface into another surface
793 * of the requested box.  Supported if SVGA3D_DEVCAP_DXCONTEXT is set.
794 * The context is implied from the command buffer header.
795 */
796typedef
797#include "vmware_pack_begin.h"
798struct SVGA3dCmdDXPredTransferFromBuffer {
799   SVGA3dSurfaceId srcSid;
800   uint32 srcOffset;
801   uint32 srcPitch;
802   uint32 srcSlicePitch;
803   SVGA3dSurfaceId destSid;
804   uint32 destSubResource;
805   SVGA3dBox destBox;
806}
807#include "vmware_pack_end.h"
808SVGA3dCmdDXPredTransferFromBuffer;
809/* SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER */
810
811
812typedef
813#include "vmware_pack_begin.h"
814struct SVGA3dCmdDXSurfaceCopyAndReadback {
815   SVGA3dSurfaceId srcSid;
816   SVGA3dSurfaceId destSid;
817   SVGA3dCopyBox box;
818}
819#include "vmware_pack_end.h"
820SVGA3dCmdDXSurfaceCopyAndReadback;
821/* SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK */
822
823/*
824 * SVGA_DX_HINT_NONE: Does nothing.
825 *
826 * SVGA_DX_HINT_PREFETCH_OBJECT:
827 * SVGA_DX_HINT_PREEVICT_OBJECT:
828 *      Consumes a SVGAObjectRef, and hints that the host should consider
829 *      fetching/evicting the specified object.
830 *
831 *      An id of SVGA3D_INVALID_ID can be used if the guest isn't sure
832 *      what object was affected.  (For instance, if the guest knows that
833 *      it is about to evict a DXShader, but doesn't know precisely which one,
834 *      the device can still use this to help limit it's search, or track
835 *      how many page-outs have happened.)
836 *
837 * SVGA_DX_HINT_PREFETCH_COBJECT:
838 * SVGA_DX_HINT_PREEVICT_COBJECT:
839 *      Same as the above, except they consume an SVGACObjectRef.
840 */
841typedef uint32 SVGADXHintId;
842#define SVGA_DX_HINT_NONE              0
843#define SVGA_DX_HINT_PREFETCH_OBJECT   1
844#define SVGA_DX_HINT_PREEVICT_OBJECT   2
845#define SVGA_DX_HINT_PREFETCH_COBJECT  3
846#define SVGA_DX_HINT_PREEVICT_COBJECT  4
847#define SVGA_DX_HINT_MAX               5
848
849typedef
850#include "vmware_pack_begin.h"
851struct SVGAObjectRef {
852   SVGAOTableType type;
853   uint32 id;
854}
855#include "vmware_pack_end.h"
856SVGAObjectRef;
857
858typedef
859#include "vmware_pack_begin.h"
860struct SVGACObjectRef {
861   SVGACOTableType type;
862   uint32 cid;
863   uint32 id;
864}
865#include "vmware_pack_end.h"
866SVGACObjectRef;
867
868typedef
869#include "vmware_pack_begin.h"
870struct SVGA3dCmdDXHint {
871   SVGADXHintId hintId;
872
873   /*
874    * Followed by variable sized data depending on the hintId.
875    */
876}
877#include "vmware_pack_end.h"
878SVGA3dCmdDXHint;
879/* SVGA_3D_CMD_DX_HINT */
880
881typedef
882#include "vmware_pack_begin.h"
883struct SVGA3dCmdDXBufferUpdate {
884   SVGA3dSurfaceId sid;
885   uint32 x;
886   uint32 width;
887}
888#include "vmware_pack_end.h"
889SVGA3dCmdDXBufferUpdate;
890/* SVGA_3D_CMD_DX_BUFFER_UPDATE */
891
892typedef
893#include "vmware_pack_begin.h"
894struct SVGA3dCmdDXSetConstantBufferOffset {
895   uint32 slot;
896   uint32 offsetInBytes;
897}
898#include "vmware_pack_end.h"
899SVGA3dCmdDXSetConstantBufferOffset;
900
901typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetVSConstantBufferOffset;
902/* SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET */
903
904typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetPSConstantBufferOffset;
905/* SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET */
906
907typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetGSConstantBufferOffset;
908/* SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET */
909
910
911typedef
912#include "vmware_pack_begin.h"
913struct {
914   union {
915      struct {
916         uint32 firstElement;
917         uint32 numElements;
918         uint32 pad0;
919         uint32 pad1;
920      } buffer;
921      struct {
922         uint32 mostDetailedMip;
923         uint32 firstArraySlice;
924         uint32 mipLevels;
925         uint32 arraySize;
926      } tex; /* 1d, 2d, 3d, cube */
927      struct {
928         uint32 firstElement;
929         uint32 numElements;
930         uint32 flags;
931         uint32 pad0;
932      } bufferex;
933   };
934}
935#include "vmware_pack_end.h"
936SVGA3dShaderResourceViewDesc;
937
938typedef
939#include "vmware_pack_begin.h"
940struct {
941   SVGA3dSurfaceId sid;
942   SVGA3dSurfaceFormat format;
943   SVGA3dResourceType resourceDimension;
944   SVGA3dShaderResourceViewDesc desc;
945   uint32 pad;
946}
947#include "vmware_pack_end.h"
948SVGACOTableDXSRViewEntry;
949
950typedef
951#include "vmware_pack_begin.h"
952struct SVGA3dCmdDXDefineShaderResourceView {
953   SVGA3dShaderResourceViewId shaderResourceViewId;
954
955   SVGA3dSurfaceId sid;
956   SVGA3dSurfaceFormat format;
957   SVGA3dResourceType resourceDimension;
958
959   SVGA3dShaderResourceViewDesc desc;
960}
961#include "vmware_pack_end.h"
962SVGA3dCmdDXDefineShaderResourceView;
963/* SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW */
964
965typedef
966#include "vmware_pack_begin.h"
967struct SVGA3dCmdDXDestroyShaderResourceView {
968   SVGA3dShaderResourceViewId shaderResourceViewId;
969}
970#include "vmware_pack_end.h"
971SVGA3dCmdDXDestroyShaderResourceView;
972/* SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW */
973
974typedef
975#include "vmware_pack_begin.h"
976struct SVGA3dRenderTargetViewDesc {
977   union {
978      struct {
979         uint32 firstElement;
980         uint32 numElements;
981         uint32 padding0;
982      } buffer;
983      struct {
984         uint32 mipSlice;
985         uint32 firstArraySlice;
986         uint32 arraySize;
987      } tex;                    /* 1d, 2d, cube */
988      struct {
989         uint32 mipSlice;
990         uint32 firstW;
991         uint32 wSize;
992      } tex3D;
993   };
994}
995#include "vmware_pack_end.h"
996SVGA3dRenderTargetViewDesc;
997
998typedef
999#include "vmware_pack_begin.h"
1000struct {
1001   SVGA3dSurfaceId sid;
1002   SVGA3dSurfaceFormat format;
1003   SVGA3dResourceType resourceDimension;
1004   SVGA3dRenderTargetViewDesc desc;
1005   uint32 pad[2];
1006}
1007#include "vmware_pack_end.h"
1008SVGACOTableDXRTViewEntry;
1009
1010typedef
1011#include "vmware_pack_begin.h"
1012struct SVGA3dCmdDXDefineRenderTargetView {
1013   SVGA3dRenderTargetViewId renderTargetViewId;
1014
1015   SVGA3dSurfaceId sid;
1016   SVGA3dSurfaceFormat format;
1017   SVGA3dResourceType resourceDimension;
1018
1019   SVGA3dRenderTargetViewDesc desc;
1020}
1021#include "vmware_pack_end.h"
1022SVGA3dCmdDXDefineRenderTargetView;
1023/* SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW */
1024
1025typedef
1026#include "vmware_pack_begin.h"
1027struct SVGA3dCmdDXDestroyRenderTargetView {
1028   SVGA3dRenderTargetViewId renderTargetViewId;
1029}
1030#include "vmware_pack_end.h"
1031SVGA3dCmdDXDestroyRenderTargetView;
1032/* SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW */
1033
1034/*
1035 */
1036#define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_DEPTH   0x01
1037#define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_STENCIL 0x02
1038#define SVGA3D_DXDSVIEW_CREATE_FLAG_MASK         0x03
1039typedef uint8 SVGA3DCreateDSViewFlags;
1040
1041typedef
1042#include "vmware_pack_begin.h"
1043struct {
1044   SVGA3dSurfaceId sid;
1045   SVGA3dSurfaceFormat format;
1046   SVGA3dResourceType resourceDimension;
1047   uint32 mipSlice;
1048   uint32 firstArraySlice;
1049   uint32 arraySize;
1050   SVGA3DCreateDSViewFlags flags;
1051   uint8 pad0;
1052   uint16 pad1;
1053   uint32 pad2;
1054}
1055#include "vmware_pack_end.h"
1056SVGACOTableDXDSViewEntry;
1057
1058typedef
1059#include "vmware_pack_begin.h"
1060struct SVGA3dCmdDXDefineDepthStencilView {
1061   SVGA3dDepthStencilViewId depthStencilViewId;
1062
1063   SVGA3dSurfaceId sid;
1064   SVGA3dSurfaceFormat format;
1065   SVGA3dResourceType resourceDimension;
1066   uint32 mipSlice;
1067   uint32 firstArraySlice;
1068   uint32 arraySize;
1069   SVGA3DCreateDSViewFlags flags;
1070   uint8 pad0;
1071   uint16 pad1;
1072}
1073#include "vmware_pack_end.h"
1074SVGA3dCmdDXDefineDepthStencilView;
1075/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW */
1076
1077typedef
1078#include "vmware_pack_begin.h"
1079struct SVGA3dCmdDXDestroyDepthStencilView {
1080   SVGA3dDepthStencilViewId depthStencilViewId;
1081}
1082#include "vmware_pack_end.h"
1083SVGA3dCmdDXDestroyDepthStencilView;
1084/* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW */
1085
1086typedef
1087#include "vmware_pack_begin.h"
1088struct SVGA3dInputElementDesc {
1089   uint32 inputSlot;
1090   uint32 alignedByteOffset;
1091   SVGA3dSurfaceFormat format;
1092   SVGA3dInputClassification inputSlotClass;
1093   uint32 instanceDataStepRate;
1094   uint32 inputRegister;
1095}
1096#include "vmware_pack_end.h"
1097SVGA3dInputElementDesc;
1098
1099typedef
1100#include "vmware_pack_begin.h"
1101struct {
1102   uint32 elid;
1103   uint32 numDescs;
1104   SVGA3dInputElementDesc desc[32];
1105   uint32 pad[62];
1106}
1107#include "vmware_pack_end.h"
1108SVGACOTableDXElementLayoutEntry;
1109
1110typedef
1111#include "vmware_pack_begin.h"
1112struct SVGA3dCmdDXDefineElementLayout {
1113   SVGA3dElementLayoutId elementLayoutId;
1114   /* Followed by a variable number of SVGA3dInputElementDesc's. */
1115}
1116#include "vmware_pack_end.h"
1117SVGA3dCmdDXDefineElementLayout;
1118/* SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT */
1119
1120typedef
1121#include "vmware_pack_begin.h"
1122struct SVGA3dCmdDXDestroyElementLayout {
1123   SVGA3dElementLayoutId elementLayoutId;
1124}
1125#include "vmware_pack_end.h"
1126SVGA3dCmdDXDestroyElementLayout;
1127/* SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT */
1128
1129
1130#define SVGA3D_DX_MAX_RENDER_TARGETS 8
1131
1132typedef
1133#include "vmware_pack_begin.h"
1134struct SVGA3dDXBlendStatePerRT {
1135      uint8 blendEnable;
1136      uint8 srcBlend;
1137      uint8 destBlend;
1138      uint8 blendOp;
1139      uint8 srcBlendAlpha;
1140      uint8 destBlendAlpha;
1141      uint8 blendOpAlpha;
1142      SVGA3dColorWriteEnable renderTargetWriteMask;
1143      uint8 logicOpEnable;
1144      uint8 logicOp;
1145      uint16 pad0;
1146}
1147#include "vmware_pack_end.h"
1148SVGA3dDXBlendStatePerRT;
1149
1150typedef
1151#include "vmware_pack_begin.h"
1152struct {
1153   uint8 alphaToCoverageEnable;
1154   uint8 independentBlendEnable;
1155   uint16 pad0;
1156   SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS];
1157   uint32 pad1[7];
1158}
1159#include "vmware_pack_end.h"
1160SVGACOTableDXBlendStateEntry;
1161
1162/*
1163 */
1164typedef
1165#include "vmware_pack_begin.h"
1166struct SVGA3dCmdDXDefineBlendState {
1167   SVGA3dBlendStateId blendId;
1168   uint8 alphaToCoverageEnable;
1169   uint8 independentBlendEnable;
1170   uint16 pad0;
1171   SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS];
1172}
1173#include "vmware_pack_end.h"
1174SVGA3dCmdDXDefineBlendState; /* SVGA_3D_CMD_DX_DEFINE_BLEND_STATE */
1175
1176typedef
1177#include "vmware_pack_begin.h"
1178struct SVGA3dCmdDXDestroyBlendState {
1179   SVGA3dBlendStateId blendId;
1180}
1181#include "vmware_pack_end.h"
1182SVGA3dCmdDXDestroyBlendState; /* SVGA_3D_CMD_DX_DESTROY_BLEND_STATE */
1183
1184typedef
1185#include "vmware_pack_begin.h"
1186struct {
1187   uint8 depthEnable;
1188   SVGA3dDepthWriteMask depthWriteMask;
1189   SVGA3dComparisonFunc depthFunc;
1190   uint8 stencilEnable;
1191   uint8 frontEnable;
1192   uint8 backEnable;
1193   uint8 stencilReadMask;
1194   uint8 stencilWriteMask;
1195
1196   uint8 frontStencilFailOp;
1197   uint8 frontStencilDepthFailOp;
1198   uint8 frontStencilPassOp;
1199   SVGA3dComparisonFunc frontStencilFunc;
1200
1201   uint8 backStencilFailOp;
1202   uint8 backStencilDepthFailOp;
1203   uint8 backStencilPassOp;
1204   SVGA3dComparisonFunc backStencilFunc;
1205}
1206#include "vmware_pack_end.h"
1207SVGACOTableDXDepthStencilEntry;
1208
1209/*
1210 */
1211typedef
1212#include "vmware_pack_begin.h"
1213struct SVGA3dCmdDXDefineDepthStencilState {
1214   SVGA3dDepthStencilStateId depthStencilId;
1215
1216   uint8 depthEnable;
1217   SVGA3dDepthWriteMask depthWriteMask;
1218   SVGA3dComparisonFunc depthFunc;
1219   uint8 stencilEnable;
1220   uint8 frontEnable;
1221   uint8 backEnable;
1222   uint8 stencilReadMask;
1223   uint8 stencilWriteMask;
1224
1225   uint8 frontStencilFailOp;
1226   uint8 frontStencilDepthFailOp;
1227   uint8 frontStencilPassOp;
1228   SVGA3dComparisonFunc frontStencilFunc;
1229
1230   uint8 backStencilFailOp;
1231   uint8 backStencilDepthFailOp;
1232   uint8 backStencilPassOp;
1233   SVGA3dComparisonFunc backStencilFunc;
1234}
1235#include "vmware_pack_end.h"
1236SVGA3dCmdDXDefineDepthStencilState;
1237/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE */
1238
1239typedef
1240#include "vmware_pack_begin.h"
1241struct SVGA3dCmdDXDestroyDepthStencilState {
1242   SVGA3dDepthStencilStateId depthStencilId;
1243}
1244#include "vmware_pack_end.h"
1245SVGA3dCmdDXDestroyDepthStencilState;
1246/* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE */
1247
1248typedef
1249#include "vmware_pack_begin.h"
1250struct {
1251   uint8 fillMode;
1252   SVGA3dCullMode cullMode;
1253   uint8 frontCounterClockwise;
1254   uint8 provokingVertexLast;
1255   int32 depthBias;
1256   float depthBiasClamp;
1257   float slopeScaledDepthBias;
1258   uint8 depthClipEnable;
1259   uint8 scissorEnable;
1260   SVGA3dMultisampleRastEnable multisampleEnable;
1261   uint8 antialiasedLineEnable;
1262   float lineWidth;
1263   uint8 lineStippleEnable;
1264   uint8 lineStippleFactor;
1265   uint16 lineStipplePattern;
1266   uint32 forcedSampleCount;
1267}
1268#include "vmware_pack_end.h"
1269SVGACOTableDXRasterizerStateEntry;
1270
1271/*
1272 */
1273typedef
1274#include "vmware_pack_begin.h"
1275struct SVGA3dCmdDXDefineRasterizerState {
1276   SVGA3dRasterizerStateId rasterizerId;
1277
1278   uint8 fillMode;
1279   SVGA3dCullMode cullMode;
1280   uint8 frontCounterClockwise;
1281   uint8 provokingVertexLast;
1282   int32 depthBias;
1283   float depthBiasClamp;
1284   float slopeScaledDepthBias;
1285   uint8 depthClipEnable;
1286   uint8 scissorEnable;
1287   SVGA3dMultisampleRastEnable multisampleEnable;
1288   uint8 antialiasedLineEnable;
1289   float lineWidth;
1290   uint8 lineStippleEnable;
1291   uint8 lineStippleFactor;
1292   uint16 lineStipplePattern;
1293}
1294#include "vmware_pack_end.h"
1295SVGA3dCmdDXDefineRasterizerState;
1296/* SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE */
1297
1298typedef
1299#include "vmware_pack_begin.h"
1300struct SVGA3dCmdDXDestroyRasterizerState {
1301   SVGA3dRasterizerStateId rasterizerId;
1302}
1303#include "vmware_pack_end.h"
1304SVGA3dCmdDXDestroyRasterizerState;
1305/* SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE */
1306
1307typedef
1308#include "vmware_pack_begin.h"
1309struct {
1310   SVGA3dFilter filter;
1311   uint8 addressU;
1312   uint8 addressV;
1313   uint8 addressW;
1314   uint8 pad0;
1315   float mipLODBias;
1316   uint8 maxAnisotropy;
1317   SVGA3dComparisonFunc comparisonFunc;
1318   uint16 pad1;
1319   SVGA3dRGBAFloat borderColor;
1320   float minLOD;
1321   float maxLOD;
1322   uint32 pad2[6];
1323}
1324#include "vmware_pack_end.h"
1325SVGACOTableDXSamplerEntry;
1326
1327/*
1328 */
1329typedef
1330#include "vmware_pack_begin.h"
1331struct SVGA3dCmdDXDefineSamplerState {
1332   SVGA3dSamplerId samplerId;
1333   SVGA3dFilter filter;
1334   uint8 addressU;
1335   uint8 addressV;
1336   uint8 addressW;
1337   uint8 pad0;
1338   float mipLODBias;
1339   uint8 maxAnisotropy;
1340   SVGA3dComparisonFunc comparisonFunc;
1341   uint16 pad1;
1342   SVGA3dRGBAFloat borderColor;
1343   float minLOD;
1344   float maxLOD;
1345}
1346#include "vmware_pack_end.h"
1347SVGA3dCmdDXDefineSamplerState; /* SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE */
1348
1349typedef
1350#include "vmware_pack_begin.h"
1351struct SVGA3dCmdDXDestroySamplerState {
1352   SVGA3dSamplerId samplerId;
1353}
1354#include "vmware_pack_end.h"
1355SVGA3dCmdDXDestroySamplerState; /* SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE */
1356
1357typedef
1358#include "vmware_pack_begin.h"
1359struct SVGA3dCmdDXDefineShader {
1360   SVGA3dShaderId shaderId;
1361   SVGA3dShaderType type;
1362   uint32 sizeInBytes; /* Number of bytes of shader text. */
1363}
1364#include "vmware_pack_end.h"
1365SVGA3dCmdDXDefineShader; /* SVGA_3D_CMD_DX_DEFINE_SHADER */
1366
1367typedef
1368#include "vmware_pack_begin.h"
1369struct SVGACOTableDXShaderEntry {
1370   SVGA3dShaderType type;
1371   uint32 sizeInBytes;
1372   uint32 offsetInBytes;
1373   SVGAMobId mobid;
1374   uint32 pad[4];
1375}
1376#include "vmware_pack_end.h"
1377SVGACOTableDXShaderEntry;
1378
1379typedef
1380#include "vmware_pack_begin.h"
1381struct SVGA3dCmdDXDestroyShader {
1382   SVGA3dShaderId shaderId;
1383}
1384#include "vmware_pack_end.h"
1385SVGA3dCmdDXDestroyShader; /* SVGA_3D_CMD_DX_DESTROY_SHADER */
1386
1387typedef
1388#include "vmware_pack_begin.h"
1389struct SVGA3dCmdDXBindShader {
1390   uint32 cid;
1391   uint32 shid;
1392   SVGAMobId mobid;
1393   uint32 offsetInBytes;
1394}
1395#include "vmware_pack_end.h"
1396SVGA3dCmdDXBindShader;   /* SVGA_3D_CMD_DX_BIND_SHADER */
1397
1398typedef
1399#include "vmware_pack_begin.h"
1400struct SVGA3dCmdDXBindAllShader {
1401   uint32 cid;
1402   SVGAMobId mobid;
1403}
1404#include "vmware_pack_end.h"
1405SVGA3dCmdDXBindAllShader;   /* SVGA_3D_CMD_DX_BIND_ALL_SHADER */
1406
1407typedef
1408#include "vmware_pack_begin.h"
1409struct SVGA3dCmdDXCondBindAllShader {
1410   uint32 cid;
1411   SVGAMobId testMobid;
1412   SVGAMobId mobid;
1413}
1414#include "vmware_pack_end.h"
1415SVGA3dCmdDXCondBindAllShader;   /* SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER */
1416
1417/*
1418 * The maximum number of streamout decl's in each streamout entry.
1419 */
1420#define SVGA3D_MAX_STREAMOUT_DECLS 64
1421
1422typedef
1423#include "vmware_pack_begin.h"
1424struct SVGA3dStreamOutputDeclarationEntry {
1425   uint32 outputSlot;
1426   uint32 registerIndex;
1427   uint8  registerMask;
1428   uint8  pad0;
1429   uint16 pad1;
1430   uint32 stream;
1431}
1432#include "vmware_pack_end.h"
1433SVGA3dStreamOutputDeclarationEntry;
1434
1435typedef
1436#include "vmware_pack_begin.h"
1437struct SVGAOTableStreamOutputEntry {
1438   uint32 numOutputStreamEntries;
1439   SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_STREAMOUT_DECLS];
1440   uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
1441   uint32 rasterizedStream;
1442   uint32 pad[250];
1443}
1444#include "vmware_pack_end.h"
1445SVGACOTableDXStreamOutputEntry;
1446
1447typedef
1448#include "vmware_pack_begin.h"
1449struct SVGA3dCmdDXDefineStreamOutput {
1450   SVGA3dStreamOutputId soid;
1451   uint32 numOutputStreamEntries;
1452   SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_STREAMOUT_DECLS];
1453   uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
1454   uint32 rasterizedStream;
1455}
1456#include "vmware_pack_end.h"
1457SVGA3dCmdDXDefineStreamOutput; /* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT */
1458
1459typedef
1460#include "vmware_pack_begin.h"
1461struct SVGA3dCmdDXDestroyStreamOutput {
1462   SVGA3dStreamOutputId soid;
1463}
1464#include "vmware_pack_end.h"
1465SVGA3dCmdDXDestroyStreamOutput; /* SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT */
1466
1467typedef
1468#include "vmware_pack_begin.h"
1469struct SVGA3dCmdDXSetStreamOutput {
1470   SVGA3dStreamOutputId soid;
1471}
1472#include "vmware_pack_end.h"
1473SVGA3dCmdDXSetStreamOutput; /* SVGA_3D_CMD_DX_SET_STREAMOUTPUT */
1474
1475typedef
1476#include "vmware_pack_begin.h"
1477struct {
1478   uint64 value;
1479   uint32 mobId;
1480   uint32 mobOffset;
1481}
1482#include "vmware_pack_end.h"
1483SVGA3dCmdDXMobFence64;  /* SVGA_3D_CMD_DX_MOB_FENCE_64 */
1484
1485/*
1486 * SVGA3dCmdSetCOTable --
1487 *
1488 * This command allows the guest to bind a mob to a context-object table.
1489 */
1490typedef
1491#include "vmware_pack_begin.h"
1492struct SVGA3dCmdDXSetCOTable {
1493   uint32 cid;
1494   uint32 mobid;
1495   SVGACOTableType type;
1496   uint32 validSizeInBytes;
1497}
1498#include "vmware_pack_end.h"
1499SVGA3dCmdDXSetCOTable; /* SVGA_3D_CMD_DX_SET_COTABLE */
1500
1501/*
1502 * Guests using SVGA_3D_CMD_DX_GROW_COTABLE are promising that
1503 * the new COTable contains the same contents as the old one, except possibly
1504 * for some new invalid entries at the end.
1505 *
1506 * If there is an old cotable mob bound, it also has to still be valid.
1507 *
1508 * (Otherwise, guests should use the DXSetCOTableBase command.)
1509 */
1510typedef
1511#include "vmware_pack_begin.h"
1512struct SVGA3dCmdDXGrowCOTable {
1513   uint32 cid;
1514   uint32 mobid;
1515   SVGACOTableType type;
1516   uint32 validSizeInBytes;
1517}
1518#include "vmware_pack_end.h"
1519SVGA3dCmdDXGrowCOTable; /* SVGA_3D_CMD_DX_GROW_COTABLE */
1520
1521typedef
1522#include "vmware_pack_begin.h"
1523struct SVGA3dCmdDXReadbackCOTable {
1524   uint32 cid;
1525   SVGACOTableType type;
1526}
1527#include "vmware_pack_end.h"
1528SVGA3dCmdDXReadbackCOTable; /* SVGA_3D_CMD_DX_READBACK_COTABLE */
1529
1530typedef
1531#include "vmware_pack_begin.h"
1532struct SVGA3dCOTableData {
1533   uint32 mobid;
1534}
1535#include "vmware_pack_end.h"
1536SVGA3dCOTableData;
1537
1538typedef
1539#include "vmware_pack_begin.h"
1540struct SVGA3dBufferBinding {
1541   uint32 bufferId;
1542   uint32 stride;
1543   uint32 offset;
1544}
1545#include "vmware_pack_end.h"
1546SVGA3dBufferBinding;
1547
1548typedef
1549#include "vmware_pack_begin.h"
1550struct SVGA3dConstantBufferBinding {
1551   uint32 sid;
1552   uint32 offsetInBytes;
1553   uint32 sizeInBytes;
1554}
1555#include "vmware_pack_end.h"
1556SVGA3dConstantBufferBinding;
1557
1558typedef
1559#include "vmware_pack_begin.h"
1560struct SVGADXInputAssemblyMobFormat {
1561   uint32 layoutId;
1562   SVGA3dBufferBinding vertexBuffers[SVGA3D_DX_MAX_VERTEXBUFFERS];
1563   uint32 indexBufferSid;
1564   uint32 pad;
1565   uint32 indexBufferOffset;
1566   uint32 indexBufferFormat;
1567   uint32 topology;
1568}
1569#include "vmware_pack_end.h"
1570SVGADXInputAssemblyMobFormat;
1571
1572typedef
1573#include "vmware_pack_begin.h"
1574struct SVGADXContextMobFormat {
1575   SVGADXInputAssemblyMobFormat inputAssembly;
1576
1577   struct {
1578      uint32 blendStateId;
1579      uint32 blendFactor[4];
1580      uint32 sampleMask;
1581      uint32 depthStencilStateId;
1582      uint32 stencilRef;
1583      uint32 rasterizerStateId;
1584      uint32 depthStencilViewId;
1585      uint32 renderTargetViewIds[SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS];
1586      uint32 unorderedAccessViewIds[SVGA3D_MAX_UAVIEWS];
1587   } renderState;
1588
1589   struct {
1590      uint32 targets[SVGA3D_DX_MAX_SOTARGETS];
1591      uint32 soid;
1592   } streamOut;
1593   uint32 pad0[11];
1594
1595   uint8 numViewports;
1596   uint8 numScissorRects;
1597   uint16 pad1[1];
1598
1599   uint32 pad2[3];
1600
1601   SVGA3dViewport viewports[SVGA3D_DX_MAX_VIEWPORTS];
1602   uint32 pad3[32];
1603
1604   SVGASignedRect scissorRects[SVGA3D_DX_MAX_SCISSORRECTS];
1605   uint32 pad4[64];
1606
1607   struct {
1608      uint32 queryID;
1609      uint32 value;
1610   } predication;
1611   uint32 pad5[2];
1612
1613   struct {
1614      uint32 shaderId;
1615      SVGA3dConstantBufferBinding constantBuffers[SVGA3D_DX_MAX_CONSTBUFFERS];
1616      uint32 shaderResources[SVGA3D_DX_MAX_SRVIEWS];
1617      uint32 samplers[SVGA3D_DX_MAX_SAMPLERS];
1618   } shaderState[SVGA3D_NUM_SHADERTYPE];
1619   uint32 pad6[26];
1620
1621   SVGA3dQueryId queryID[SVGA3D_MAX_QUERY];
1622
1623   SVGA3dCOTableData cotables[SVGA_COTABLE_MAX];
1624   uint32 pad7[380];
1625}
1626#include "vmware_pack_end.h"
1627SVGADXContextMobFormat;
1628
1629typedef
1630#include "vmware_pack_begin.h"
1631struct SVGA3dCmdDXTempSetContext {
1632   uint32 dxcid;
1633}
1634#include "vmware_pack_end.h"
1635SVGA3dCmdDXTempSetContext; /* SVGA_3D_CMD_DX_TEMP_SET_CONTEXT */
1636
1637#endif /* _SVGA3D_DX_H_ */
1638