Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
gpu
drm
vmwgfx
svga3d_reg.h
Go to the documentation of this file.
1
/**********************************************************
2
* Copyright 1998-2009 VMware, Inc. All rights reserved.
3
*
4
* Permission is hereby granted, free of charge, to any person
5
* obtaining a copy of this software and associated documentation
6
* files (the "Software"), to deal in the Software without
7
* restriction, including without limitation the rights to use, copy,
8
* modify, merge, publish, distribute, sublicense, and/or sell copies
9
* of the Software, and to permit persons to whom the Software is
10
* furnished to do so, subject to the following conditions:
11
*
12
* The above copyright notice and this permission notice shall be
13
* included in all copies or substantial portions of the Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
* SOFTWARE.
23
*
24
**********************************************************/
25
26
/*
27
* svga3d_reg.h --
28
*
29
* SVGA 3D hardware definitions
30
*/
31
32
#ifndef _SVGA3D_REG_H_
33
#define _SVGA3D_REG_H_
34
35
#include "
svga_reg.h
"
36
37
38
/*
39
* 3D Hardware Version
40
*
41
* The hardware version is stored in the SVGA_FIFO_3D_HWVERSION fifo
42
* register. Is set by the host and read by the guest. This lets
43
* us make new guest drivers which are backwards-compatible with old
44
* SVGA hardware revisions. It does not let us support old guest
45
* drivers. Good enough for now.
46
*
47
*/
48
49
#define SVGA3D_MAKE_HWVERSION(major, minor) (((major) << 16) | ((minor) & 0xFF))
50
#define SVGA3D_MAJOR_HWVERSION(version) ((version) >> 16)
51
#define SVGA3D_MINOR_HWVERSION(version) ((version) & 0xFF)
52
53
typedef
enum
{
54
SVGA3D_HWVERSION_WS5_RC1
=
SVGA3D_MAKE_HWVERSION
(0, 1),
55
SVGA3D_HWVERSION_WS5_RC2
=
SVGA3D_MAKE_HWVERSION
(0, 2),
56
SVGA3D_HWVERSION_WS51_RC1
=
SVGA3D_MAKE_HWVERSION
(0, 3),
57
SVGA3D_HWVERSION_WS6_B1
=
SVGA3D_MAKE_HWVERSION
(1, 1),
58
SVGA3D_HWVERSION_FUSION_11
=
SVGA3D_MAKE_HWVERSION
(1, 4),
59
SVGA3D_HWVERSION_WS65_B1
=
SVGA3D_MAKE_HWVERSION
(2, 0),
60
SVGA3D_HWVERSION_WS8_B1
=
SVGA3D_MAKE_HWVERSION
(2, 1),
61
SVGA3D_HWVERSION_CURRENT
=
SVGA3D_HWVERSION_WS8_B1
,
62
}
SVGA3dHardwareVersion
;
63
64
/*
65
* Generic Types
66
*/
67
68
typedef
uint32
SVGA3dBool
;
/* 32-bit Bool definition */
69
#define SVGA3D_NUM_CLIPPLANES 6
70
#define SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS 8
71
#define SVGA3D_MAX_CONTEXT_IDS 256
72
#define SVGA3D_MAX_SURFACE_IDS (32 * 1024)
73
74
/*
75
* Surface formats.
76
*
77
* If you modify this list, be sure to keep GLUtil.c in sync. It
78
* includes the internal format definition of each surface in
79
* GLUtil_ConvertSurfaceFormat, and it contains a table of
80
* human-readable names in GLUtil_GetFormatName.
81
*/
82
83
typedef
enum
SVGA3dSurfaceFormat
{
84
SVGA3D_FORMAT_INVALID
= 0,
85
86
SVGA3D_X8R8G8B8
= 1,
87
SVGA3D_A8R8G8B8
= 2,
88
89
SVGA3D_R5G6B5
= 3,
90
SVGA3D_X1R5G5B5
= 4,
91
SVGA3D_A1R5G5B5
= 5,
92
SVGA3D_A4R4G4B4
= 6,
93
94
SVGA3D_Z_D32
= 7,
95
SVGA3D_Z_D16
= 8,
96
SVGA3D_Z_D24S8
= 9,
97
SVGA3D_Z_D15S1
= 10,
98
99
SVGA3D_LUMINANCE8
= 11,
100
SVGA3D_LUMINANCE4_ALPHA4
= 12,
101
SVGA3D_LUMINANCE16
= 13,
102
SVGA3D_LUMINANCE8_ALPHA8
= 14,
103
104
SVGA3D_DXT1
= 15,
105
SVGA3D_DXT2
= 16,
106
SVGA3D_DXT3
= 17,
107
SVGA3D_DXT4
= 18,
108
SVGA3D_DXT5
= 19,
109
110
SVGA3D_BUMPU8V8
= 20,
111
SVGA3D_BUMPL6V5U5
= 21,
112
SVGA3D_BUMPX8L8V8U8
= 22,
113
SVGA3D_BUMPL8V8U8
= 23,
114
115
SVGA3D_ARGB_S10E5
= 24,
/* 16-bit floating-point ARGB */
116
SVGA3D_ARGB_S23E8
= 25,
/* 32-bit floating-point ARGB */
117
118
SVGA3D_A2R10G10B10
= 26,
119
120
/* signed formats */
121
SVGA3D_V8U8
= 27,
122
SVGA3D_Q8W8V8U8
= 28,
123
SVGA3D_CxV8U8
= 29,
124
125
/* mixed formats */
126
SVGA3D_X8L8V8U8
= 30,
127
SVGA3D_A2W10V10U10
= 31,
128
129
SVGA3D_ALPHA8
= 32,
130
131
/* Single- and dual-component floating point formats */
132
SVGA3D_R_S10E5
= 33,
133
SVGA3D_R_S23E8
= 34,
134
SVGA3D_RG_S10E5
= 35,
135
SVGA3D_RG_S23E8
= 36,
136
137
/*
138
* Any surface can be used as a buffer object, but SVGA3D_BUFFER is
139
* the most efficient format to use when creating new surfaces
140
* expressly for index or vertex data.
141
*/
142
143
SVGA3D_BUFFER
= 37,
144
145
SVGA3D_Z_D24X8
= 38,
146
147
SVGA3D_V16U16
= 39,
148
149
SVGA3D_G16R16
= 40,
150
SVGA3D_A16B16G16R16
= 41,
151
152
/* Packed Video formats */
153
SVGA3D_UYVY
= 42,
154
SVGA3D_YUY2
= 43,
155
156
/* Planar video formats */
157
SVGA3D_NV12
= 44,
158
159
/* Video format with alpha */
160
SVGA3D_AYUV
= 45,
161
162
SVGA3D_BC4_UNORM
= 108,
163
SVGA3D_BC5_UNORM
= 111,
164
165
/* Advanced D3D9 depth formats. */
166
SVGA3D_Z_DF16
= 118,
167
SVGA3D_Z_DF24
= 119,
168
SVGA3D_Z_D24S8_INT
= 120,
169
170
SVGA3D_FORMAT_MAX
171
}
SVGA3dSurfaceFormat
;
172
173
typedef
uint32
SVGA3dColor
;
/* a, r, g, b */
174
175
/*
176
* These match the D3DFORMAT_OP definitions used by Direct3D. We need
177
* them so that we can query the host for what the supported surface
178
* operations are (when we're using the D3D backend, in particular),
179
* and so we can send those operations to the guest.
180
*/
181
typedef
enum
{
182
SVGA3DFORMAT_OP_TEXTURE
= 0x00000001,
183
SVGA3DFORMAT_OP_VOLUMETEXTURE
= 0x00000002,
184
SVGA3DFORMAT_OP_CUBETEXTURE
= 0x00000004,
185
SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
= 0x00000008,
186
SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
= 0x00000010,
187
SVGA3DFORMAT_OP_ZSTENCIL
= 0x00000040,
188
SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
= 0x00000080,
189
190
/*
191
* This format can be used as a render target if the current display mode
192
* is the same depth if the alpha channel is ignored. e.g. if the device
193
* can render to A8R8G8B8 when the display mode is X8R8G8B8, then the
194
* format op list entry for A8R8G8B8 should have this cap.
195
*/
196
SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET
= 0x00000100,
197
198
/*
199
* This format contains DirectDraw support (including Flip). This flag
200
* should not to be set on alpha formats.
201
*/
202
SVGA3DFORMAT_OP_DISPLAYMODE
= 0x00000400,
203
204
/*
205
* The rasterizer can support some level of Direct3D support in this format
206
* and implies that the driver can create a Context in this mode (for some
207
* render target format). When this flag is set, the SVGA3DFORMAT_OP_DISPLAYMODE
208
* flag must also be set.
209
*/
210
SVGA3DFORMAT_OP_3DACCELERATION
= 0x00000800,
211
212
/*
213
* This is set for a private format when the driver has put the bpp in
214
* the structure.
215
*/
216
SVGA3DFORMAT_OP_PIXELSIZE
= 0x00001000,
217
218
/*
219
* Indicates that this format can be converted to any RGB format for which
220
* SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB is specified
221
*/
222
SVGA3DFORMAT_OP_CONVERT_TO_ARGB
= 0x00002000,
223
224
/*
225
* Indicates that this format can be used to create offscreen plain surfaces.
226
*/
227
SVGA3DFORMAT_OP_OFFSCREENPLAIN
= 0x00004000,
228
229
/*
230
* Indicated that this format can be read as an SRGB texture (meaning that the
231
* sampler will linearize the looked up data)
232
*/
233
SVGA3DFORMAT_OP_SRGBREAD
= 0x00008000,
234
235
/*
236
* Indicates that this format can be used in the bumpmap instructions
237
*/
238
SVGA3DFORMAT_OP_BUMPMAP
= 0x00010000,
239
240
/*
241
* Indicates that this format can be sampled by the displacement map sampler
242
*/
243
SVGA3DFORMAT_OP_DMAP
= 0x00020000,
244
245
/*
246
* Indicates that this format cannot be used with texture filtering
247
*/
248
SVGA3DFORMAT_OP_NOFILTER
= 0x00040000,
249
250
/*
251
* Indicates that format conversions are supported to this RGB format if
252
* SVGA3DFORMAT_OP_CONVERT_TO_ARGB is specified in the source format.
253
*/
254
SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
= 0x00080000,
255
256
/*
257
* Indicated that this format can be written as an SRGB target (meaning that the
258
* pixel pipe will DE-linearize data on output to format)
259
*/
260
SVGA3DFORMAT_OP_SRGBWRITE
= 0x00100000,
261
262
/*
263
* Indicates that this format cannot be used with alpha blending
264
*/
265
SVGA3DFORMAT_OP_NOALPHABLEND
= 0x00200000,
266
267
/*
268
* Indicates that the device can auto-generated sublevels for resources
269
* of this format
270
*/
271
SVGA3DFORMAT_OP_AUTOGENMIPMAP
= 0x00400000,
272
273
/*
274
* Indicates that this format can be used by vertex texture sampler
275
*/
276
SVGA3DFORMAT_OP_VERTEXTEXTURE
= 0x00800000,
277
278
/*
279
* Indicates that this format supports neither texture coordinate wrap
280
* modes, nor mipmapping
281
*/
282
SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP
= 0x01000000
283
}
SVGA3dFormatOp
;
284
285
/*
286
* This structure is a conversion of SVGA3DFORMAT_OP_*.
287
* Entries must be located at the same position.
288
*/
289
typedef
union
{
290
uint32
value
;
291
struct
{
292
uint32
texture : 1;
293
uint32
volumeTexture : 1;
294
uint32
cubeTexture : 1;
295
uint32
offscreenRenderTarget : 1;
296
uint32
sameFormatRenderTarget : 1;
297
uint32
unknown1
: 1;
298
uint32
zStencil : 1;
299
uint32
zStencilArbitraryDepth : 1;
300
uint32
sameFormatUpToAlpha : 1;
301
uint32
unknown2
: 1;
302
uint32
displayMode : 1;
303
uint32
acceleration3d : 1;
304
uint32
pixelSize : 1;
305
uint32
convertToARGB : 1;
306
uint32
offscreenPlain : 1;
307
uint32
sRGBRead : 1;
308
uint32
bumpMap : 1;
309
uint32
dmap
: 1;
310
uint32
noFilter : 1;
311
uint32
memberOfGroupARGB : 1;
312
uint32
sRGBWrite : 1;
313
uint32
noAlphaBlend : 1;
314
uint32
autoGenMipMap : 1;
315
uint32
vertexTexture : 1;
316
uint32
noTexCoordWrapNorMip : 1;
317
};
318
}
SVGA3dSurfaceFormatCaps
;
319
320
/*
321
* SVGA_3D_CMD_SETRENDERSTATE Types. All value types
322
* must fit in a uint32.
323
*/
324
325
typedef
enum
{
326
SVGA3D_RS_INVALID
= 0,
327
SVGA3D_RS_ZENABLE
= 1,
/* SVGA3dBool */
328
SVGA3D_RS_ZWRITEENABLE
= 2,
/* SVGA3dBool */
329
SVGA3D_RS_ALPHATESTENABLE
= 3,
/* SVGA3dBool */
330
SVGA3D_RS_DITHERENABLE
= 4,
/* SVGA3dBool */
331
SVGA3D_RS_BLENDENABLE
= 5,
/* SVGA3dBool */
332
SVGA3D_RS_FOGENABLE
= 6,
/* SVGA3dBool */
333
SVGA3D_RS_SPECULARENABLE
= 7,
/* SVGA3dBool */
334
SVGA3D_RS_STENCILENABLE
= 8,
/* SVGA3dBool */
335
SVGA3D_RS_LIGHTINGENABLE
= 9,
/* SVGA3dBool */
336
SVGA3D_RS_NORMALIZENORMALS
= 10,
/* SVGA3dBool */
337
SVGA3D_RS_POINTSPRITEENABLE
= 11,
/* SVGA3dBool */
338
SVGA3D_RS_POINTSCALEENABLE
= 12,
/* SVGA3dBool */
339
SVGA3D_RS_STENCILREF
= 13,
/* uint32 */
340
SVGA3D_RS_STENCILMASK
= 14,
/* uint32 */
341
SVGA3D_RS_STENCILWRITEMASK
= 15,
/* uint32 */
342
SVGA3D_RS_FOGSTART
= 16,
/* float */
343
SVGA3D_RS_FOGEND
= 17,
/* float */
344
SVGA3D_RS_FOGDENSITY
= 18,
/* float */
345
SVGA3D_RS_POINTSIZE
= 19,
/* float */
346
SVGA3D_RS_POINTSIZEMIN
= 20,
/* float */
347
SVGA3D_RS_POINTSIZEMAX
= 21,
/* float */
348
SVGA3D_RS_POINTSCALE_A
= 22,
/* float */
349
SVGA3D_RS_POINTSCALE_B
= 23,
/* float */
350
SVGA3D_RS_POINTSCALE_C
= 24,
/* float */
351
SVGA3D_RS_FOGCOLOR
= 25,
/* SVGA3dColor */
352
SVGA3D_RS_AMBIENT
= 26,
/* SVGA3dColor */
353
SVGA3D_RS_CLIPPLANEENABLE
= 27,
/* SVGA3dClipPlanes */
354
SVGA3D_RS_FOGMODE
= 28,
/* SVGA3dFogMode */
355
SVGA3D_RS_FILLMODE
= 29,
/* SVGA3dFillMode */
356
SVGA3D_RS_SHADEMODE
= 30,
/* SVGA3dShadeMode */
357
SVGA3D_RS_LINEPATTERN
= 31,
/* SVGA3dLinePattern */
358
SVGA3D_RS_SRCBLEND
= 32,
/* SVGA3dBlendOp */
359
SVGA3D_RS_DSTBLEND
= 33,
/* SVGA3dBlendOp */
360
SVGA3D_RS_BLENDEQUATION
= 34,
/* SVGA3dBlendEquation */
361
SVGA3D_RS_CULLMODE
= 35,
/* SVGA3dFace */
362
SVGA3D_RS_ZFUNC
= 36,
/* SVGA3dCmpFunc */
363
SVGA3D_RS_ALPHAFUNC
= 37,
/* SVGA3dCmpFunc */
364
SVGA3D_RS_STENCILFUNC
= 38,
/* SVGA3dCmpFunc */
365
SVGA3D_RS_STENCILFAIL
= 39,
/* SVGA3dStencilOp */
366
SVGA3D_RS_STENCILZFAIL
= 40,
/* SVGA3dStencilOp */
367
SVGA3D_RS_STENCILPASS
= 41,
/* SVGA3dStencilOp */
368
SVGA3D_RS_ALPHAREF
= 42,
/* float (0.0 .. 1.0) */
369
SVGA3D_RS_FRONTWINDING
= 43,
/* SVGA3dFrontWinding */
370
SVGA3D_RS_COORDINATETYPE
= 44,
/* SVGA3dCoordinateType */
371
SVGA3D_RS_ZBIAS
= 45,
/* float */
372
SVGA3D_RS_RANGEFOGENABLE
= 46,
/* SVGA3dBool */
373
SVGA3D_RS_COLORWRITEENABLE
= 47,
/* SVGA3dColorMask */
374
SVGA3D_RS_VERTEXMATERIALENABLE
= 48,
/* SVGA3dBool */
375
SVGA3D_RS_DIFFUSEMATERIALSOURCE
= 49,
/* SVGA3dVertexMaterial */
376
SVGA3D_RS_SPECULARMATERIALSOURCE
= 50,
/* SVGA3dVertexMaterial */
377
SVGA3D_RS_AMBIENTMATERIALSOURCE
= 51,
/* SVGA3dVertexMaterial */
378
SVGA3D_RS_EMISSIVEMATERIALSOURCE
= 52,
/* SVGA3dVertexMaterial */
379
SVGA3D_RS_TEXTUREFACTOR
= 53,
/* SVGA3dColor */
380
SVGA3D_RS_LOCALVIEWER
= 54,
/* SVGA3dBool */
381
SVGA3D_RS_SCISSORTESTENABLE
= 55,
/* SVGA3dBool */
382
SVGA3D_RS_BLENDCOLOR
= 56,
/* SVGA3dColor */
383
SVGA3D_RS_STENCILENABLE2SIDED
= 57,
/* SVGA3dBool */
384
SVGA3D_RS_CCWSTENCILFUNC
= 58,
/* SVGA3dCmpFunc */
385
SVGA3D_RS_CCWSTENCILFAIL
= 59,
/* SVGA3dStencilOp */
386
SVGA3D_RS_CCWSTENCILZFAIL
= 60,
/* SVGA3dStencilOp */
387
SVGA3D_RS_CCWSTENCILPASS
= 61,
/* SVGA3dStencilOp */
388
SVGA3D_RS_VERTEXBLEND
= 62,
/* SVGA3dVertexBlendFlags */
389
SVGA3D_RS_SLOPESCALEDEPTHBIAS
= 63,
/* float */
390
SVGA3D_RS_DEPTHBIAS
= 64,
/* float */
391
392
393
/*
394
* Output Gamma Level
395
*
396
* Output gamma effects the gamma curve of colors that are output from the
397
* rendering pipeline. A value of 1.0 specifies a linear color space. If the
398
* value is <= 0.0, gamma correction is ignored and linear color space is
399
* used.
400
*/
401
402
SVGA3D_RS_OUTPUTGAMMA
= 65,
/* float */
403
SVGA3D_RS_ZVISIBLE
= 66,
/* SVGA3dBool */
404
SVGA3D_RS_LASTPIXEL
= 67,
/* SVGA3dBool */
405
SVGA3D_RS_CLIPPING
= 68,
/* SVGA3dBool */
406
SVGA3D_RS_WRAP0
= 69,
/* SVGA3dWrapFlags */
407
SVGA3D_RS_WRAP1
= 70,
/* SVGA3dWrapFlags */
408
SVGA3D_RS_WRAP2
= 71,
/* SVGA3dWrapFlags */
409
SVGA3D_RS_WRAP3
= 72,
/* SVGA3dWrapFlags */
410
SVGA3D_RS_WRAP4
= 73,
/* SVGA3dWrapFlags */
411
SVGA3D_RS_WRAP5
= 74,
/* SVGA3dWrapFlags */
412
SVGA3D_RS_WRAP6
= 75,
/* SVGA3dWrapFlags */
413
SVGA3D_RS_WRAP7
= 76,
/* SVGA3dWrapFlags */
414
SVGA3D_RS_WRAP8
= 77,
/* SVGA3dWrapFlags */
415
SVGA3D_RS_WRAP9
= 78,
/* SVGA3dWrapFlags */
416
SVGA3D_RS_WRAP10
= 79,
/* SVGA3dWrapFlags */
417
SVGA3D_RS_WRAP11
= 80,
/* SVGA3dWrapFlags */
418
SVGA3D_RS_WRAP12
= 81,
/* SVGA3dWrapFlags */
419
SVGA3D_RS_WRAP13
= 82,
/* SVGA3dWrapFlags */
420
SVGA3D_RS_WRAP14
= 83,
/* SVGA3dWrapFlags */
421
SVGA3D_RS_WRAP15
= 84,
/* SVGA3dWrapFlags */
422
SVGA3D_RS_MULTISAMPLEANTIALIAS
= 85,
/* SVGA3dBool */
423
SVGA3D_RS_MULTISAMPLEMASK
= 86,
/* uint32 */
424
SVGA3D_RS_INDEXEDVERTEXBLENDENABLE
= 87,
/* SVGA3dBool */
425
SVGA3D_RS_TWEENFACTOR
= 88,
/* float */
426
SVGA3D_RS_ANTIALIASEDLINEENABLE
= 89,
/* SVGA3dBool */
427
SVGA3D_RS_COLORWRITEENABLE1
= 90,
/* SVGA3dColorMask */
428
SVGA3D_RS_COLORWRITEENABLE2
= 91,
/* SVGA3dColorMask */
429
SVGA3D_RS_COLORWRITEENABLE3
= 92,
/* SVGA3dColorMask */
430
SVGA3D_RS_SEPARATEALPHABLENDENABLE
= 93,
/* SVGA3dBool */
431
SVGA3D_RS_SRCBLENDALPHA
= 94,
/* SVGA3dBlendOp */
432
SVGA3D_RS_DSTBLENDALPHA
= 95,
/* SVGA3dBlendOp */
433
SVGA3D_RS_BLENDEQUATIONALPHA
= 96,
/* SVGA3dBlendEquation */
434
SVGA3D_RS_TRANSPARENCYANTIALIAS
= 97,
/* SVGA3dTransparencyAntialiasType */
435
SVGA3D_RS_LINEAA
= 98,
/* SVGA3dBool */
436
SVGA3D_RS_LINEWIDTH
= 99,
/* float */
437
SVGA3D_RS_MAX
438
}
SVGA3dRenderStateName
;
439
440
typedef
enum
{
441
SVGA3D_TRANSPARENCYANTIALIAS_NORMAL
= 0,
442
SVGA3D_TRANSPARENCYANTIALIAS_ALPHATOCOVERAGE
= 1,
443
SVGA3D_TRANSPARENCYANTIALIAS_SUPERSAMPLE
= 2,
444
SVGA3D_TRANSPARENCYANTIALIAS_MAX
445
}
SVGA3dTransparencyAntialiasType
;
446
447
typedef
enum
{
448
SVGA3D_VERTEXMATERIAL_NONE
= 0,
/* Use the value in the current material */
449
SVGA3D_VERTEXMATERIAL_DIFFUSE
= 1,
/* Use the value in the diffuse component */
450
SVGA3D_VERTEXMATERIAL_SPECULAR
= 2,
/* Use the value in the specular component */
451
}
SVGA3dVertexMaterial
;
452
453
typedef
enum
{
454
SVGA3D_FILLMODE_INVALID
= 0,
455
SVGA3D_FILLMODE_POINT
= 1,
456
SVGA3D_FILLMODE_LINE
= 2,
457
SVGA3D_FILLMODE_FILL
= 3,
458
SVGA3D_FILLMODE_MAX
459
}
SVGA3dFillModeType
;
460
461
462
typedef
463
union
{
464
struct
{
465
uint16
mode
;
/* SVGA3dFillModeType */
466
uint16
face
;
/* SVGA3dFace */
467
};
468
uint32
uintValue
;
469
}
SVGA3dFillMode
;
470
471
typedef
enum
{
472
SVGA3D_SHADEMODE_INVALID
= 0,
473
SVGA3D_SHADEMODE_FLAT
= 1,
474
SVGA3D_SHADEMODE_SMOOTH
= 2,
475
SVGA3D_SHADEMODE_PHONG
= 3,
/* Not supported */
476
SVGA3D_SHADEMODE_MAX
477
}
SVGA3dShadeMode
;
478
479
typedef
480
union
{
481
struct
{
482
uint16
repeat
;
483
uint16
pattern
;
484
};
485
uint32
uintValue
;
486
}
SVGA3dLinePattern
;
487
488
typedef
enum
{
489
SVGA3D_BLENDOP_INVALID
= 0,
490
SVGA3D_BLENDOP_ZERO
= 1,
491
SVGA3D_BLENDOP_ONE
= 2,
492
SVGA3D_BLENDOP_SRCCOLOR
= 3,
493
SVGA3D_BLENDOP_INVSRCCOLOR
= 4,
494
SVGA3D_BLENDOP_SRCALPHA
= 5,
495
SVGA3D_BLENDOP_INVSRCALPHA
= 6,
496
SVGA3D_BLENDOP_DESTALPHA
= 7,
497
SVGA3D_BLENDOP_INVDESTALPHA
= 8,
498
SVGA3D_BLENDOP_DESTCOLOR
= 9,
499
SVGA3D_BLENDOP_INVDESTCOLOR
= 10,
500
SVGA3D_BLENDOP_SRCALPHASAT
= 11,
501
SVGA3D_BLENDOP_BLENDFACTOR
= 12,
502
SVGA3D_BLENDOP_INVBLENDFACTOR
= 13,
503
SVGA3D_BLENDOP_MAX
504
}
SVGA3dBlendOp
;
505
506
typedef
enum
{
507
SVGA3D_BLENDEQ_INVALID
= 0,
508
SVGA3D_BLENDEQ_ADD
= 1,
509
SVGA3D_BLENDEQ_SUBTRACT
= 2,
510
SVGA3D_BLENDEQ_REVSUBTRACT
= 3,
511
SVGA3D_BLENDEQ_MINIMUM
= 4,
512
SVGA3D_BLENDEQ_MAXIMUM
= 5,
513
SVGA3D_BLENDEQ_MAX
514
}
SVGA3dBlendEquation
;
515
516
typedef
enum
{
517
SVGA3D_FRONTWINDING_INVALID
= 0,
518
SVGA3D_FRONTWINDING_CW
= 1,
519
SVGA3D_FRONTWINDING_CCW
= 2,
520
SVGA3D_FRONTWINDING_MAX
521
}
SVGA3dFrontWinding
;
522
523
typedef
enum
{
524
SVGA3D_FACE_INVALID
= 0,
525
SVGA3D_FACE_NONE
= 1,
526
SVGA3D_FACE_FRONT
= 2,
527
SVGA3D_FACE_BACK
= 3,
528
SVGA3D_FACE_FRONT_BACK
= 4,
529
SVGA3D_FACE_MAX
530
}
SVGA3dFace
;
531
532
/*
533
* The order and the values should not be changed
534
*/
535
536
typedef
enum
{
537
SVGA3D_CMP_INVALID
= 0,
538
SVGA3D_CMP_NEVER
= 1,
539
SVGA3D_CMP_LESS
= 2,
540
SVGA3D_CMP_EQUAL
= 3,
541
SVGA3D_CMP_LESSEQUAL
= 4,
542
SVGA3D_CMP_GREATER
= 5,
543
SVGA3D_CMP_NOTEQUAL
= 6,
544
SVGA3D_CMP_GREATEREQUAL
= 7,
545
SVGA3D_CMP_ALWAYS
= 8,
546
SVGA3D_CMP_MAX
547
}
SVGA3dCmpFunc
;
548
549
/*
550
* SVGA3D_FOGFUNC_* specifies the fog equation, or PER_VERTEX which allows
551
* the fog factor to be specified in the alpha component of the specular
552
* (a.k.a. secondary) vertex color.
553
*/
554
typedef
enum
{
555
SVGA3D_FOGFUNC_INVALID
= 0,
556
SVGA3D_FOGFUNC_EXP
= 1,
557
SVGA3D_FOGFUNC_EXP2
= 2,
558
SVGA3D_FOGFUNC_LINEAR
= 3,
559
SVGA3D_FOGFUNC_PER_VERTEX
= 4
560
}
SVGA3dFogFunction
;
561
562
/*
563
* SVGA3D_FOGTYPE_* specifies if fog factors are computed on a per-vertex
564
* or per-pixel basis.
565
*/
566
typedef
enum
{
567
SVGA3D_FOGTYPE_INVALID
= 0,
568
SVGA3D_FOGTYPE_VERTEX
= 1,
569
SVGA3D_FOGTYPE_PIXEL
= 2,
570
SVGA3D_FOGTYPE_MAX
= 3
571
}
SVGA3dFogType
;
572
573
/*
574
* SVGA3D_FOGBASE_* selects depth or range-based fog. Depth-based fog is
575
* computed using the eye Z value of each pixel (or vertex), whereas range-
576
* based fog is computed using the actual distance (range) to the eye.
577
*/
578
typedef
enum
{
579
SVGA3D_FOGBASE_INVALID
= 0,
580
SVGA3D_FOGBASE_DEPTHBASED
= 1,
581
SVGA3D_FOGBASE_RANGEBASED
= 2,
582
SVGA3D_FOGBASE_MAX
= 3
583
}
SVGA3dFogBase
;
584
585
typedef
enum
{
586
SVGA3D_STENCILOP_INVALID
= 0,
587
SVGA3D_STENCILOP_KEEP
= 1,
588
SVGA3D_STENCILOP_ZERO
= 2,
589
SVGA3D_STENCILOP_REPLACE
= 3,
590
SVGA3D_STENCILOP_INCRSAT
= 4,
591
SVGA3D_STENCILOP_DECRSAT
= 5,
592
SVGA3D_STENCILOP_INVERT
= 6,
593
SVGA3D_STENCILOP_INCR
= 7,
594
SVGA3D_STENCILOP_DECR
= 8,
595
SVGA3D_STENCILOP_MAX
596
}
SVGA3dStencilOp
;
597
598
typedef
enum
{
599
SVGA3D_CLIPPLANE_0
= (1 << 0),
600
SVGA3D_CLIPPLANE_1
= (1 << 1),
601
SVGA3D_CLIPPLANE_2
= (1 << 2),
602
SVGA3D_CLIPPLANE_3
= (1 << 3),
603
SVGA3D_CLIPPLANE_4
= (1 << 4),
604
SVGA3D_CLIPPLANE_5
= (1 << 5),
605
}
SVGA3dClipPlanes
;
606
607
typedef
enum
{
608
SVGA3D_CLEAR_COLOR
= 0x1,
609
SVGA3D_CLEAR_DEPTH
= 0x2,
610
SVGA3D_CLEAR_STENCIL
= 0x4
611
}
SVGA3dClearFlag
;
612
613
typedef
enum
{
614
SVGA3D_RT_DEPTH
= 0,
615
SVGA3D_RT_STENCIL
= 1,
616
SVGA3D_RT_COLOR0
= 2,
617
SVGA3D_RT_COLOR1
= 3,
618
SVGA3D_RT_COLOR2
= 4,
619
SVGA3D_RT_COLOR3
= 5,
620
SVGA3D_RT_COLOR4
= 6,
621
SVGA3D_RT_COLOR5
= 7,
622
SVGA3D_RT_COLOR6
= 8,
623
SVGA3D_RT_COLOR7
= 9,
624
SVGA3D_RT_MAX
,
625
SVGA3D_RT_INVALID
= ((
uint32
)-1),
626
}
SVGA3dRenderTargetType
;
627
628
#define SVGA3D_MAX_RT_COLOR (SVGA3D_RT_COLOR7 - SVGA3D_RT_COLOR0 + 1)
629
630
typedef
631
union
{
632
struct
{
633
uint32
red
: 1;
634
uint32
green
: 1;
635
uint32
blue
: 1;
636
uint32
alpha
: 1;
637
};
638
uint32
uintValue
;
639
}
SVGA3dColorMask
;
640
641
typedef
enum
{
642
SVGA3D_VBLEND_DISABLE
= 0,
643
SVGA3D_VBLEND_1WEIGHT
= 1,
644
SVGA3D_VBLEND_2WEIGHT
= 2,
645
SVGA3D_VBLEND_3WEIGHT
= 3,
646
}
SVGA3dVertexBlendFlags
;
647
648
typedef
enum
{
649
SVGA3D_WRAPCOORD_0
= 1 << 0,
650
SVGA3D_WRAPCOORD_1
= 1 << 1,
651
SVGA3D_WRAPCOORD_2
= 1 << 2,
652
SVGA3D_WRAPCOORD_3
= 1 << 3,
653
SVGA3D_WRAPCOORD_ALL
= 0xF,
654
}
SVGA3dWrapFlags
;
655
656
/*
657
* SVGA_3D_CMD_TEXTURESTATE Types. All value types
658
* must fit in a uint32.
659
*/
660
661
typedef
enum
{
662
SVGA3D_TS_INVALID
= 0,
663
SVGA3D_TS_BIND_TEXTURE
= 1,
/* SVGA3dSurfaceId */
664
SVGA3D_TS_COLOROP
= 2,
/* SVGA3dTextureCombiner */
665
SVGA3D_TS_COLORARG1
= 3,
/* SVGA3dTextureArgData */
666
SVGA3D_TS_COLORARG2
= 4,
/* SVGA3dTextureArgData */
667
SVGA3D_TS_ALPHAOP
= 5,
/* SVGA3dTextureCombiner */
668
SVGA3D_TS_ALPHAARG1
= 6,
/* SVGA3dTextureArgData */
669
SVGA3D_TS_ALPHAARG2
= 7,
/* SVGA3dTextureArgData */
670
SVGA3D_TS_ADDRESSU
= 8,
/* SVGA3dTextureAddress */
671
SVGA3D_TS_ADDRESSV
= 9,
/* SVGA3dTextureAddress */
672
SVGA3D_TS_MIPFILTER
= 10,
/* SVGA3dTextureFilter */
673
SVGA3D_TS_MAGFILTER
= 11,
/* SVGA3dTextureFilter */
674
SVGA3D_TS_MINFILTER
= 12,
/* SVGA3dTextureFilter */
675
SVGA3D_TS_BORDERCOLOR
= 13,
/* SVGA3dColor */
676
SVGA3D_TS_TEXCOORDINDEX
= 14,
/* uint32 */
677
SVGA3D_TS_TEXTURETRANSFORMFLAGS
= 15,
/* SVGA3dTexTransformFlags */
678
SVGA3D_TS_TEXCOORDGEN
= 16,
/* SVGA3dTextureCoordGen */
679
SVGA3D_TS_BUMPENVMAT00
= 17,
/* float */
680
SVGA3D_TS_BUMPENVMAT01
= 18,
/* float */
681
SVGA3D_TS_BUMPENVMAT10
= 19,
/* float */
682
SVGA3D_TS_BUMPENVMAT11
= 20,
/* float */
683
SVGA3D_TS_TEXTURE_MIPMAP_LEVEL
= 21,
/* uint32 */
684
SVGA3D_TS_TEXTURE_LOD_BIAS
= 22,
/* float */
685
SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL
= 23,
/* uint32 */
686
SVGA3D_TS_ADDRESSW
= 24,
/* SVGA3dTextureAddress */
687
688
689
/*
690
* Sampler Gamma Level
691
*
692
* Sampler gamma effects the color of samples taken from the sampler. A
693
* value of 1.0 will produce linear samples. If the value is <= 0.0 the
694
* gamma value is ignored and a linear space is used.
695
*/
696
697
SVGA3D_TS_GAMMA
= 25,
/* float */
698
SVGA3D_TS_BUMPENVLSCALE
= 26,
/* float */
699
SVGA3D_TS_BUMPENVLOFFSET
= 27,
/* float */
700
SVGA3D_TS_COLORARG0
= 28,
/* SVGA3dTextureArgData */
701
SVGA3D_TS_ALPHAARG0
= 29,
/* SVGA3dTextureArgData */
702
SVGA3D_TS_MAX
703
}
SVGA3dTextureStateName
;
704
705
typedef
enum
{
706
SVGA3D_TC_INVALID
= 0,
707
SVGA3D_TC_DISABLE
= 1,
708
SVGA3D_TC_SELECTARG1
= 2,
709
SVGA3D_TC_SELECTARG2
= 3,
710
SVGA3D_TC_MODULATE
= 4,
711
SVGA3D_TC_ADD
= 5,
712
SVGA3D_TC_ADDSIGNED
= 6,
713
SVGA3D_TC_SUBTRACT
= 7,
714
SVGA3D_TC_BLENDTEXTUREALPHA
= 8,
715
SVGA3D_TC_BLENDDIFFUSEALPHA
= 9,
716
SVGA3D_TC_BLENDCURRENTALPHA
= 10,
717
SVGA3D_TC_BLENDFACTORALPHA
= 11,
718
SVGA3D_TC_MODULATE2X
= 12,
719
SVGA3D_TC_MODULATE4X
= 13,
720
SVGA3D_TC_DSDT
= 14,
721
SVGA3D_TC_DOTPRODUCT3
= 15,
722
SVGA3D_TC_BLENDTEXTUREALPHAPM
= 16,
723
SVGA3D_TC_ADDSIGNED2X
= 17,
724
SVGA3D_TC_ADDSMOOTH
= 18,
725
SVGA3D_TC_PREMODULATE
= 19,
726
SVGA3D_TC_MODULATEALPHA_ADDCOLOR
= 20,
727
SVGA3D_TC_MODULATECOLOR_ADDALPHA
= 21,
728
SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR
= 22,
729
SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA
= 23,
730
SVGA3D_TC_BUMPENVMAPLUMINANCE
= 24,
731
SVGA3D_TC_MULTIPLYADD
= 25,
732
SVGA3D_TC_LERP
= 26,
733
SVGA3D_TC_MAX
734
}
SVGA3dTextureCombiner
;
735
736
#define SVGA3D_TC_CAP_BIT(svga3d_tc_op) (svga3d_tc_op ? (1 << (svga3d_tc_op - 1)) : 0)
737
738
typedef
enum
{
739
SVGA3D_TEX_ADDRESS_INVALID
= 0,
740
SVGA3D_TEX_ADDRESS_WRAP
= 1,
741
SVGA3D_TEX_ADDRESS_MIRROR
= 2,
742
SVGA3D_TEX_ADDRESS_CLAMP
= 3,
743
SVGA3D_TEX_ADDRESS_BORDER
= 4,
744
SVGA3D_TEX_ADDRESS_MIRRORONCE
= 5,
745
SVGA3D_TEX_ADDRESS_EDGE
= 6,
746
SVGA3D_TEX_ADDRESS_MAX
747
}
SVGA3dTextureAddress
;
748
749
/*
750
* SVGA3D_TEX_FILTER_NONE as the minification filter means mipmapping is
751
* disabled, and the rasterizer should use the magnification filter instead.
752
*/
753
typedef
enum
{
754
SVGA3D_TEX_FILTER_NONE
= 0,
755
SVGA3D_TEX_FILTER_NEAREST
= 1,
756
SVGA3D_TEX_FILTER_LINEAR
= 2,
757
SVGA3D_TEX_FILTER_ANISOTROPIC
= 3,
758
SVGA3D_TEX_FILTER_FLATCUBIC
= 4,
/* Deprecated, not implemented */
759
SVGA3D_TEX_FILTER_GAUSSIANCUBIC
= 5,
/* Deprecated, not implemented */
760
SVGA3D_TEX_FILTER_PYRAMIDALQUAD
= 6,
/* Not currently implemented */
761
SVGA3D_TEX_FILTER_GAUSSIANQUAD
= 7,
/* Not currently implemented */
762
SVGA3D_TEX_FILTER_MAX
763
}
SVGA3dTextureFilter
;
764
765
typedef
enum
{
766
SVGA3D_TEX_TRANSFORM_OFF
= 0,
767
SVGA3D_TEX_TRANSFORM_S
= (1 << 0),
768
SVGA3D_TEX_TRANSFORM_T
= (1 << 1),
769
SVGA3D_TEX_TRANSFORM_R
= (1 << 2),
770
SVGA3D_TEX_TRANSFORM_Q
= (1 << 3),
771
SVGA3D_TEX_PROJECTED
= (1 << 15),
772
}
SVGA3dTexTransformFlags
;
773
774
typedef
enum
{
775
SVGA3D_TEXCOORD_GEN_OFF
= 0,
776
SVGA3D_TEXCOORD_GEN_EYE_POSITION
= 1,
777
SVGA3D_TEXCOORD_GEN_EYE_NORMAL
= 2,
778
SVGA3D_TEXCOORD_GEN_REFLECTIONVECTOR
= 3,
779
SVGA3D_TEXCOORD_GEN_SPHERE
= 4,
780
SVGA3D_TEXCOORD_GEN_MAX
781
}
SVGA3dTextureCoordGen
;
782
783
/*
784
* Texture argument constants for texture combiner
785
*/
786
typedef
enum
{
787
SVGA3D_TA_INVALID
= 0,
788
SVGA3D_TA_CONSTANT
= 1,
789
SVGA3D_TA_PREVIOUS
= 2,
790
SVGA3D_TA_DIFFUSE
= 3,
791
SVGA3D_TA_TEXTURE
= 4,
792
SVGA3D_TA_SPECULAR
= 5,
793
SVGA3D_TA_MAX
794
}
SVGA3dTextureArgData
;
795
796
#define SVGA3D_TM_MASK_LEN 4
797
798
/* Modifiers for texture argument constants defined above. */
799
typedef
enum
{
800
SVGA3D_TM_NONE
= 0,
801
SVGA3D_TM_ALPHA
= (1 <<
SVGA3D_TM_MASK_LEN
),
802
SVGA3D_TM_ONE_MINUS
= (2 <<
SVGA3D_TM_MASK_LEN
),
803
}
SVGA3dTextureArgModifier
;
804
805
#define SVGA3D_INVALID_ID ((uint32)-1)
806
#define SVGA3D_MAX_CLIP_PLANES 6
807
808
/*
809
* This is the limit to the number of fixed-function texture
810
* transforms and texture coordinates we can support. It does *not*
811
* correspond to the number of texture image units (samplers) we
812
* support!
813
*/
814
#define SVGA3D_MAX_TEXTURE_COORDS 8
815
816
/*
817
* Vertex declarations
818
*
819
* Notes:
820
*
821
* SVGA3D_DECLUSAGE_POSITIONT is for pre-transformed vertices. If you
822
* draw with any POSITIONT vertex arrays, the programmable vertex
823
* pipeline will be implicitly disabled. Drawing will take place as if
824
* no vertex shader was bound.
825
*/
826
827
typedef
enum
{
828
SVGA3D_DECLUSAGE_POSITION
= 0,
829
SVGA3D_DECLUSAGE_BLENDWEIGHT
,
/* 1 */
830
SVGA3D_DECLUSAGE_BLENDINDICES
,
/* 2 */
831
SVGA3D_DECLUSAGE_NORMAL
,
/* 3 */
832
SVGA3D_DECLUSAGE_PSIZE
,
/* 4 */
833
SVGA3D_DECLUSAGE_TEXCOORD
,
/* 5 */
834
SVGA3D_DECLUSAGE_TANGENT
,
/* 6 */
835
SVGA3D_DECLUSAGE_BINORMAL
,
/* 7 */
836
SVGA3D_DECLUSAGE_TESSFACTOR
,
/* 8 */
837
SVGA3D_DECLUSAGE_POSITIONT
,
/* 9 */
838
SVGA3D_DECLUSAGE_COLOR
,
/* 10 */
839
SVGA3D_DECLUSAGE_FOG
,
/* 11 */
840
SVGA3D_DECLUSAGE_DEPTH
,
/* 12 */
841
SVGA3D_DECLUSAGE_SAMPLE
,
/* 13 */
842
SVGA3D_DECLUSAGE_MAX
843
}
SVGA3dDeclUsage
;
844
845
typedef
enum
{
846
SVGA3D_DECLMETHOD_DEFAULT
= 0,
847
SVGA3D_DECLMETHOD_PARTIALU
,
848
SVGA3D_DECLMETHOD_PARTIALV
,
849
SVGA3D_DECLMETHOD_CROSSUV
,
/* Normal */
850
SVGA3D_DECLMETHOD_UV
,
851
SVGA3D_DECLMETHOD_LOOKUP
,
/* Lookup a displacement map */
852
SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED
,
/* Lookup a pre-sampled displacement map */
853
}
SVGA3dDeclMethod
;
854
855
typedef
enum
{
856
SVGA3D_DECLTYPE_FLOAT1
= 0,
857
SVGA3D_DECLTYPE_FLOAT2
= 1,
858
SVGA3D_DECLTYPE_FLOAT3
= 2,
859
SVGA3D_DECLTYPE_FLOAT4
= 3,
860
SVGA3D_DECLTYPE_D3DCOLOR
= 4,
861
SVGA3D_DECLTYPE_UBYTE4
= 5,
862
SVGA3D_DECLTYPE_SHORT2
= 6,
863
SVGA3D_DECLTYPE_SHORT4
= 7,
864
SVGA3D_DECLTYPE_UBYTE4N
= 8,
865
SVGA3D_DECLTYPE_SHORT2N
= 9,
866
SVGA3D_DECLTYPE_SHORT4N
= 10,
867
SVGA3D_DECLTYPE_USHORT2N
= 11,
868
SVGA3D_DECLTYPE_USHORT4N
= 12,
869
SVGA3D_DECLTYPE_UDEC3
= 13,
870
SVGA3D_DECLTYPE_DEC3N
= 14,
871
SVGA3D_DECLTYPE_FLOAT16_2
= 15,
872
SVGA3D_DECLTYPE_FLOAT16_4
= 16,
873
SVGA3D_DECLTYPE_MAX
,
874
}
SVGA3dDeclType
;
875
876
/*
877
* This structure is used for the divisor for geometry instancing;
878
* it's a direct translation of the Direct3D equivalent.
879
*/
880
typedef
union
{
881
struct
{
882
/*
883
* For index data, this number represents the number of instances to draw.
884
* For instance data, this number represents the number of
885
* instances/vertex in this stream
886
*/
887
uint32
count
: 30;
888
889
/*
890
* This is 1 if this is supposed to be the data that is repeated for
891
* every instance.
892
*/
893
uint32
indexedData : 1;
894
895
/*
896
* This is 1 if this is supposed to be the per-instance data.
897
*/
898
uint32
instanceData : 1;
899
};
900
901
uint32
value
;
902
}
SVGA3dVertexDivisor
;
903
904
typedef
enum
{
905
SVGA3D_PRIMITIVE_INVALID
= 0,
906
SVGA3D_PRIMITIVE_TRIANGLELIST
= 1,
907
SVGA3D_PRIMITIVE_POINTLIST
= 2,
908
SVGA3D_PRIMITIVE_LINELIST
= 3,
909
SVGA3D_PRIMITIVE_LINESTRIP
= 4,
910
SVGA3D_PRIMITIVE_TRIANGLESTRIP
= 5,
911
SVGA3D_PRIMITIVE_TRIANGLEFAN
= 6,
912
SVGA3D_PRIMITIVE_MAX
913
}
SVGA3dPrimitiveType
;
914
915
typedef
enum
{
916
SVGA3D_COORDINATE_INVALID
= 0,
917
SVGA3D_COORDINATE_LEFTHANDED
= 1,
918
SVGA3D_COORDINATE_RIGHTHANDED
= 2,
919
SVGA3D_COORDINATE_MAX
920
}
SVGA3dCoordinateType
;
921
922
typedef
enum
{
923
SVGA3D_TRANSFORM_INVALID
= 0,
924
SVGA3D_TRANSFORM_WORLD
= 1,
925
SVGA3D_TRANSFORM_VIEW
= 2,
926
SVGA3D_TRANSFORM_PROJECTION
= 3,
927
SVGA3D_TRANSFORM_TEXTURE0
= 4,
928
SVGA3D_TRANSFORM_TEXTURE1
= 5,
929
SVGA3D_TRANSFORM_TEXTURE2
= 6,
930
SVGA3D_TRANSFORM_TEXTURE3
= 7,
931
SVGA3D_TRANSFORM_TEXTURE4
= 8,
932
SVGA3D_TRANSFORM_TEXTURE5
= 9,
933
SVGA3D_TRANSFORM_TEXTURE6
= 10,
934
SVGA3D_TRANSFORM_TEXTURE7
= 11,
935
SVGA3D_TRANSFORM_WORLD1
= 12,
936
SVGA3D_TRANSFORM_WORLD2
= 13,
937
SVGA3D_TRANSFORM_WORLD3
= 14,
938
SVGA3D_TRANSFORM_MAX
939
}
SVGA3dTransformType
;
940
941
typedef
enum
{
942
SVGA3D_LIGHTTYPE_INVALID
= 0,
943
SVGA3D_LIGHTTYPE_POINT
= 1,
944
SVGA3D_LIGHTTYPE_SPOT1
= 2,
/* 1-cone, in degrees */
945
SVGA3D_LIGHTTYPE_SPOT2
= 3,
/* 2-cone, in radians */
946
SVGA3D_LIGHTTYPE_DIRECTIONAL
= 4,
947
SVGA3D_LIGHTTYPE_MAX
948
}
SVGA3dLightType
;
949
950
typedef
enum
{
951
SVGA3D_CUBEFACE_POSX
= 0,
952
SVGA3D_CUBEFACE_NEGX
= 1,
953
SVGA3D_CUBEFACE_POSY
= 2,
954
SVGA3D_CUBEFACE_NEGY
= 3,
955
SVGA3D_CUBEFACE_POSZ
= 4,
956
SVGA3D_CUBEFACE_NEGZ
= 5,
957
}
SVGA3dCubeFace
;
958
959
typedef
enum
{
960
SVGA3D_SHADERTYPE_VS
= 1,
961
SVGA3D_SHADERTYPE_PS
= 2,
962
SVGA3D_SHADERTYPE_MAX
963
}
SVGA3dShaderType
;
964
965
typedef
enum
{
966
SVGA3D_CONST_TYPE_FLOAT
= 0,
967
SVGA3D_CONST_TYPE_INT
= 1,
968
SVGA3D_CONST_TYPE_BOOL
= 2,
969
}
SVGA3dShaderConstType
;
970
971
#define SVGA3D_MAX_SURFACE_FACES 6
972
973
typedef
enum
{
974
SVGA3D_STRETCH_BLT_POINT
= 0,
975
SVGA3D_STRETCH_BLT_LINEAR
= 1,
976
SVGA3D_STRETCH_BLT_MAX
977
}
SVGA3dStretchBltMode
;
978
979
typedef
enum
{
980
SVGA3D_QUERYTYPE_OCCLUSION
= 0,
981
SVGA3D_QUERYTYPE_MAX
982
}
SVGA3dQueryType
;
983
984
typedef
enum
{
985
SVGA3D_QUERYSTATE_PENDING
= 0,
/* Waiting on the host (set by guest) */
986
SVGA3D_QUERYSTATE_SUCCEEDED
= 1,
/* Completed successfully (set by host) */
987
SVGA3D_QUERYSTATE_FAILED
= 2,
/* Completed unsuccessfully (set by host) */
988
SVGA3D_QUERYSTATE_NEW
= 3,
/* Never submitted (For guest use only) */
989
}
SVGA3dQueryState
;
990
991
typedef
enum
{
992
SVGA3D_WRITE_HOST_VRAM
= 1,
993
SVGA3D_READ_HOST_VRAM
= 2,
994
}
SVGA3dTransferType
;
995
996
/*
997
* The maximum number of vertex arrays we're guaranteed to support in
998
* SVGA_3D_CMD_DRAWPRIMITIVES.
999
*/
1000
#define SVGA3D_MAX_VERTEX_ARRAYS 32
1001
1002
/*
1003
* The maximum number of primitive ranges we're guaranteed to support
1004
* in SVGA_3D_CMD_DRAWPRIMITIVES.
1005
*/
1006
#define SVGA3D_MAX_DRAW_PRIMITIVE_RANGES 32
1007
1008
/*
1009
* Identifiers for commands in the command FIFO.
1010
*
1011
* IDs between 1000 and 1039 (inclusive) were used by obsolete versions of
1012
* the SVGA3D protocol and remain reserved; they should not be used in the
1013
* future.
1014
*
1015
* IDs between 1040 and 1999 (inclusive) are available for use by the
1016
* current SVGA3D protocol.
1017
*
1018
* FIFO clients other than SVGA3D should stay below 1000, or at 2000
1019
* and up.
1020
*/
1021
1022
#define SVGA_3D_CMD_LEGACY_BASE 1000
1023
#define SVGA_3D_CMD_BASE 1040
1024
1025
#define SVGA_3D_CMD_SURFACE_DEFINE SVGA_3D_CMD_BASE + 0
/* Deprecated */
1026
#define SVGA_3D_CMD_SURFACE_DESTROY SVGA_3D_CMD_BASE + 1
1027
#define SVGA_3D_CMD_SURFACE_COPY SVGA_3D_CMD_BASE + 2
1028
#define SVGA_3D_CMD_SURFACE_STRETCHBLT SVGA_3D_CMD_BASE + 3
1029
#define SVGA_3D_CMD_SURFACE_DMA SVGA_3D_CMD_BASE + 4
1030
#define SVGA_3D_CMD_CONTEXT_DEFINE SVGA_3D_CMD_BASE + 5
1031
#define SVGA_3D_CMD_CONTEXT_DESTROY SVGA_3D_CMD_BASE + 6
1032
#define SVGA_3D_CMD_SETTRANSFORM SVGA_3D_CMD_BASE + 7
1033
#define SVGA_3D_CMD_SETZRANGE SVGA_3D_CMD_BASE + 8
1034
#define SVGA_3D_CMD_SETRENDERSTATE SVGA_3D_CMD_BASE + 9
1035
#define SVGA_3D_CMD_SETRENDERTARGET SVGA_3D_CMD_BASE + 10
1036
#define SVGA_3D_CMD_SETTEXTURESTATE SVGA_3D_CMD_BASE + 11
1037
#define SVGA_3D_CMD_SETMATERIAL SVGA_3D_CMD_BASE + 12
1038
#define SVGA_3D_CMD_SETLIGHTDATA SVGA_3D_CMD_BASE + 13
1039
#define SVGA_3D_CMD_SETLIGHTENABLED SVGA_3D_CMD_BASE + 14
1040
#define SVGA_3D_CMD_SETVIEWPORT SVGA_3D_CMD_BASE + 15
1041
#define SVGA_3D_CMD_SETCLIPPLANE SVGA_3D_CMD_BASE + 16
1042
#define SVGA_3D_CMD_CLEAR SVGA_3D_CMD_BASE + 17
1043
#define SVGA_3D_CMD_PRESENT SVGA_3D_CMD_BASE + 18
/* Deprecated */
1044
#define SVGA_3D_CMD_SHADER_DEFINE SVGA_3D_CMD_BASE + 19
1045
#define SVGA_3D_CMD_SHADER_DESTROY SVGA_3D_CMD_BASE + 20
1046
#define SVGA_3D_CMD_SET_SHADER SVGA_3D_CMD_BASE + 21
1047
#define SVGA_3D_CMD_SET_SHADER_CONST SVGA_3D_CMD_BASE + 22
1048
#define SVGA_3D_CMD_DRAW_PRIMITIVES SVGA_3D_CMD_BASE + 23
1049
#define SVGA_3D_CMD_SETSCISSORRECT SVGA_3D_CMD_BASE + 24
1050
#define SVGA_3D_CMD_BEGIN_QUERY SVGA_3D_CMD_BASE + 25
1051
#define SVGA_3D_CMD_END_QUERY SVGA_3D_CMD_BASE + 26
1052
#define SVGA_3D_CMD_WAIT_FOR_QUERY SVGA_3D_CMD_BASE + 27
1053
#define SVGA_3D_CMD_PRESENT_READBACK SVGA_3D_CMD_BASE + 28
/* Deprecated */
1054
#define SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN SVGA_3D_CMD_BASE + 29
1055
#define SVGA_3D_CMD_SURFACE_DEFINE_V2 SVGA_3D_CMD_BASE + 30
1056
#define SVGA_3D_CMD_GENERATE_MIPMAPS SVGA_3D_CMD_BASE + 31
1057
#define SVGA_3D_CMD_ACTIVATE_SURFACE SVGA_3D_CMD_BASE + 40
1058
#define SVGA_3D_CMD_DEACTIVATE_SURFACE SVGA_3D_CMD_BASE + 41
1059
#define SVGA_3D_CMD_MAX SVGA_3D_CMD_BASE + 42
1060
1061
#define SVGA_3D_CMD_FUTURE_MAX 2000
1062
1063
/*
1064
* Common substructures used in multiple FIFO commands:
1065
*/
1066
1067
typedef
struct
{
1068
union
{
1069
struct
{
1070
uint16
function
;
/* SVGA3dFogFunction */
1071
uint8
type
;
/* SVGA3dFogType */
1072
uint8
base
;
/* SVGA3dFogBase */
1073
};
1074
uint32
uintValue
;
1075
};
1076
}
SVGA3dFogMode
;
1077
1078
/*
1079
* Uniquely identify one image (a 1D/2D/3D array) from a surface. This
1080
* is a surface ID as well as face/mipmap indices.
1081
*/
1082
1083
typedef
1084
struct
SVGA3dSurfaceImageId
{
1085
uint32
sid
;
1086
uint32
face
;
1087
uint32
mipmap
;
1088
}
SVGA3dSurfaceImageId
;
1089
1090
typedef
1091
struct
SVGA3dGuestImage
{
1092
SVGAGuestPtr
ptr
;
1093
1094
/*
1095
* A note on interpretation of pitch: This value of pitch is the
1096
* number of bytes between vertically adjacent image
1097
* blocks. Normally this is the number of bytes between the first
1098
* pixel of two adjacent scanlines. With compressed textures,
1099
* however, this may represent the number of bytes between
1100
* compression blocks rather than between rows of pixels.
1101
*
1102
* XXX: Compressed textures currently must be tightly packed in guest memory.
1103
*
1104
* If the image is 1-dimensional, pitch is ignored.
1105
*
1106
* If 'pitch' is zero, the SVGA3D device calculates a pitch value
1107
* assuming each row of blocks is tightly packed.
1108
*/
1109
uint32
pitch
;
1110
}
SVGA3dGuestImage
;
1111
1112
1113
/*
1114
* FIFO command format definitions:
1115
*/
1116
1117
/*
1118
* The data size header following cmdNum for every 3d command
1119
*/
1120
typedef
1121
struct
{
1122
uint32
id
;
1123
uint32
size
;
1124
}
SVGA3dCmdHeader
;
1125
1126
/*
1127
* A surface is a hierarchy of host VRAM surfaces: 1D, 2D, or 3D, with
1128
* optional mipmaps and cube faces.
1129
*/
1130
1131
typedef
1132
struct
{
1133
uint32
width
;
1134
uint32
height
;
1135
uint32
depth
;
1136
}
SVGA3dSize
;
1137
1138
typedef
enum
{
1139
SVGA3D_SURFACE_CUBEMAP
= (1 << 0),
1140
SVGA3D_SURFACE_HINT_STATIC
= (1 << 1),
1141
SVGA3D_SURFACE_HINT_DYNAMIC
= (1 << 2),
1142
SVGA3D_SURFACE_HINT_INDEXBUFFER
= (1 << 3),
1143
SVGA3D_SURFACE_HINT_VERTEXBUFFER
= (1 << 4),
1144
SVGA3D_SURFACE_HINT_TEXTURE
= (1 << 5),
1145
SVGA3D_SURFACE_HINT_RENDERTARGET
= (1 << 6),
1146
SVGA3D_SURFACE_HINT_DEPTHSTENCIL
= (1 << 7),
1147
SVGA3D_SURFACE_HINT_WRITEONLY
= (1 << 8),
1148
SVGA3D_SURFACE_MASKABLE_ANTIALIAS
= (1 << 9),
1149
SVGA3D_SURFACE_AUTOGENMIPMAPS
= (1 << 10),
1150
}
SVGA3dSurfaceFlags
;
1151
1152
typedef
1153
struct
{
1154
uint32
numMipLevels
;
1155
}
SVGA3dSurfaceFace
;
1156
1157
typedef
1158
struct
{
1159
uint32
sid
;
1160
SVGA3dSurfaceFlags
surfaceFlags
;
1161
SVGA3dSurfaceFormat
format
;
1162
/*
1163
* If surfaceFlags has SVGA3D_SURFACE_CUBEMAP bit set, all SVGA3dSurfaceFace
1164
* structures must have the same value of numMipLevels field.
1165
* Otherwise, all but the first SVGA3dSurfaceFace structures must have the
1166
* numMipLevels set to 0.
1167
*/
1168
SVGA3dSurfaceFace
face[
SVGA3D_MAX_SURFACE_FACES
];
1169
/*
1170
* Followed by an SVGA3dSize structure for each mip level in each face.
1171
*
1172
* A note on surface sizes: Sizes are always specified in pixels,
1173
* even if the true surface size is not a multiple of the minimum
1174
* block size of the surface's format. For example, a 3x3x1 DXT1
1175
* compressed texture would actually be stored as a 4x4x1 image in
1176
* memory.
1177
*/
1178
}
SVGA3dCmdDefineSurface
;
/* SVGA_3D_CMD_SURFACE_DEFINE */
1179
1180
typedef
1181
struct
{
1182
uint32
sid
;
1183
SVGA3dSurfaceFlags
surfaceFlags
;
1184
SVGA3dSurfaceFormat
format
;
1185
/*
1186
* If surfaceFlags has SVGA3D_SURFACE_CUBEMAP bit set, all SVGA3dSurfaceFace
1187
* structures must have the same value of numMipLevels field.
1188
* Otherwise, all but the first SVGA3dSurfaceFace structures must have the
1189
* numMipLevels set to 0.
1190
*/
1191
SVGA3dSurfaceFace
face[
SVGA3D_MAX_SURFACE_FACES
];
1192
uint32
multisampleCount
;
1193
SVGA3dTextureFilter
autogenFilter
;
1194
/*
1195
* Followed by an SVGA3dSize structure for each mip level in each face.
1196
*
1197
* A note on surface sizes: Sizes are always specified in pixels,
1198
* even if the true surface size is not a multiple of the minimum
1199
* block size of the surface's format. For example, a 3x3x1 DXT1
1200
* compressed texture would actually be stored as a 4x4x1 image in
1201
* memory.
1202
*/
1203
}
SVGA3dCmdDefineSurface_v2
;
/* SVGA_3D_CMD_SURFACE_DEFINE_V2 */
1204
1205
typedef
1206
struct
{
1207
uint32
sid
;
1208
}
SVGA3dCmdDestroySurface
;
/* SVGA_3D_CMD_SURFACE_DESTROY */
1209
1210
typedef
1211
struct
{
1212
uint32
cid
;
1213
}
SVGA3dCmdDefineContext
;
/* SVGA_3D_CMD_CONTEXT_DEFINE */
1214
1215
typedef
1216
struct
{
1217
uint32
cid
;
1218
}
SVGA3dCmdDestroyContext
;
/* SVGA_3D_CMD_CONTEXT_DESTROY */
1219
1220
typedef
1221
struct
{
1222
uint32
cid
;
1223
SVGA3dClearFlag
clearFlag
;
1224
uint32
color
;
1225
float
depth
;
1226
uint32
stencil
;
1227
/* Followed by variable number of SVGA3dRect structures */
1228
}
SVGA3dCmdClear
;
/* SVGA_3D_CMD_CLEAR */
1229
1230
typedef
1231
struct
SVGA3dCopyRect
{
1232
uint32
x
;
1233
uint32
y
;
1234
uint32
w
;
1235
uint32
h
;
1236
uint32
srcx
;
1237
uint32
srcy
;
1238
}
SVGA3dCopyRect
;
1239
1240
typedef
1241
struct
SVGA3dCopyBox
{
1242
uint32
x
;
1243
uint32
y
;
1244
uint32
z
;
1245
uint32
w
;
1246
uint32
h
;
1247
uint32
d
;
1248
uint32
srcx
;
1249
uint32
srcy
;
1250
uint32
srcz
;
1251
}
SVGA3dCopyBox
;
1252
1253
typedef
1254
struct
{
1255
uint32
x
;
1256
uint32
y
;
1257
uint32
w
;
1258
uint32
h
;
1259
}
SVGA3dRect
;
1260
1261
typedef
1262
struct
{
1263
uint32
x
;
1264
uint32
y
;
1265
uint32
z
;
1266
uint32
w
;
1267
uint32
h
;
1268
uint32
d
;
1269
}
SVGA3dBox
;
1270
1271
typedef
1272
struct
{
1273
uint32
x
;
1274
uint32
y
;
1275
uint32
z
;
1276
}
SVGA3dPoint
;
1277
1278
typedef
1279
struct
{
1280
SVGA3dLightType
type
;
1281
SVGA3dBool
inWorldSpace
;
1282
float
diffuse[4];
1283
float
specular[4];
1284
float
ambient[4];
1285
float
position[4];
1286
float
direction
[4];
1287
float
range
;
1288
float
falloff
;
1289
float
attenuation0
;
1290
float
attenuation1
;
1291
float
attenuation2
;
1292
float
theta
;
1293
float
phi
;
1294
}
SVGA3dLightData
;
1295
1296
typedef
1297
struct
{
1298
uint32
sid
;
1299
/* Followed by variable number of SVGA3dCopyRect structures */
1300
}
SVGA3dCmdPresent
;
/* SVGA_3D_CMD_PRESENT */
1301
1302
typedef
1303
struct
{
1304
SVGA3dRenderStateName
state
;
1305
union
{
1306
uint32
uintValue
;
1307
float
floatValue
;
1308
};
1309
}
SVGA3dRenderState
;
1310
1311
typedef
1312
struct
{
1313
uint32
cid
;
1314
/* Followed by variable number of SVGA3dRenderState structures */
1315
}
SVGA3dCmdSetRenderState
;
/* SVGA_3D_CMD_SETRENDERSTATE */
1316
1317
typedef
1318
struct
{
1319
uint32
cid
;
1320
SVGA3dRenderTargetType
type
;
1321
SVGA3dSurfaceImageId
target
;
1322
}
SVGA3dCmdSetRenderTarget
;
/* SVGA_3D_CMD_SETRENDERTARGET */
1323
1324
typedef
1325
struct
{
1326
SVGA3dSurfaceImageId
src
;
1327
SVGA3dSurfaceImageId
dest
;
1328
/* Followed by variable number of SVGA3dCopyBox structures */
1329
}
SVGA3dCmdSurfaceCopy
;
/* SVGA_3D_CMD_SURFACE_COPY */
1330
1331
typedef
1332
struct
{
1333
SVGA3dSurfaceImageId
src
;
1334
SVGA3dSurfaceImageId
dest
;
1335
SVGA3dBox
boxSrc
;
1336
SVGA3dBox
boxDest
;
1337
SVGA3dStretchBltMode
mode
;
1338
}
SVGA3dCmdSurfaceStretchBlt
;
/* SVGA_3D_CMD_SURFACE_STRETCHBLT */
1339
1340
typedef
1341
struct
{
1342
/*
1343
* If the discard flag is present in a surface DMA operation, the host may
1344
* discard the contents of the current mipmap level and face of the target
1345
* surface before applying the surface DMA contents.
1346
*/
1347
uint32
discard
: 1;
1348
1349
/*
1350
* If the unsynchronized flag is present, the host may perform this upload
1351
* without syncing to pending reads on this surface.
1352
*/
1353
uint32
unsynchronized : 1;
1354
1355
/*
1356
* Guests *MUST* set the reserved bits to 0 before submitting the command
1357
* suffix as future flags may occupy these bits.
1358
*/
1359
uint32
reserved
: 30;
1360
}
SVGA3dSurfaceDMAFlags
;
1361
1362
typedef
1363
struct
{
1364
SVGA3dGuestImage
guest
;
1365
SVGA3dSurfaceImageId
host
;
1366
SVGA3dTransferType
transfer
;
1367
/*
1368
* Followed by variable number of SVGA3dCopyBox structures. For consistency
1369
* in all clipping logic and coordinate translation, we define the
1370
* "source" in each copyBox as the guest image and the
1371
* "destination" as the host image, regardless of transfer
1372
* direction.
1373
*
1374
* For efficiency, the SVGA3D device is free to copy more data than
1375
* specified. For example, it may round copy boxes outwards such
1376
* that they lie on particular alignment boundaries.
1377
*/
1378
}
SVGA3dCmdSurfaceDMA
;
/* SVGA_3D_CMD_SURFACE_DMA */
1379
1380
/*
1381
* SVGA3dCmdSurfaceDMASuffix --
1382
*
1383
* This is a command suffix that will appear after a SurfaceDMA command in
1384
* the FIFO. It contains some extra information that hosts may use to
1385
* optimize performance or protect the guest. This suffix exists to preserve
1386
* backwards compatibility while also allowing for new functionality to be
1387
* implemented.
1388
*/
1389
1390
typedef
1391
struct
{
1392
uint32
suffixSize
;
1393
1394
/*
1395
* The maximum offset is used to determine the maximum offset from the
1396
* guestPtr base address that will be accessed or written to during this
1397
* surfaceDMA. If the suffix is supported, the host will respect this
1398
* boundary while performing surface DMAs.
1399
*
1400
* Defaults to MAX_UINT32
1401
*/
1402
uint32
maximumOffset
;
1403
1404
/*
1405
* A set of flags that describes optimizations that the host may perform
1406
* while performing this surface DMA operation. The guest should never rely
1407
* on behaviour that is different when these flags are set for correctness.
1408
*
1409
* Defaults to 0
1410
*/
1411
SVGA3dSurfaceDMAFlags
flags
;
1412
}
SVGA3dCmdSurfaceDMASuffix
;
1413
1414
/*
1415
* SVGA_3D_CMD_DRAW_PRIMITIVES --
1416
*
1417
* This command is the SVGA3D device's generic drawing entry point.
1418
* It can draw multiple ranges of primitives, optionally using an
1419
* index buffer, using an arbitrary collection of vertex buffers.
1420
*
1421
* Each SVGA3dVertexDecl defines a distinct vertex array to bind
1422
* during this draw call. The declarations specify which surface
1423
* the vertex data lives in, what that vertex data is used for,
1424
* and how to interpret it.
1425
*
1426
* Each SVGA3dPrimitiveRange defines a collection of primitives
1427
* to render using the same vertex arrays. An index buffer is
1428
* optional.
1429
*/
1430
1431
typedef
1432
struct
{
1433
/*
1434
* A range hint is an optional specification for the range of indices
1435
* in an SVGA3dArray that will be used. If 'last' is zero, it is assumed
1436
* that the entire array will be used.
1437
*
1438
* These are only hints. The SVGA3D device may use them for
1439
* performance optimization if possible, but it's also allowed to
1440
* ignore these values.
1441
*/
1442
uint32
first
;
1443
uint32
last
;
1444
}
SVGA3dArrayRangeHint
;
1445
1446
typedef
1447
struct
{
1448
/*
1449
* Define the origin and shape of a vertex or index array. Both
1450
* 'offset' and 'stride' are in bytes. The provided surface will be
1451
* reinterpreted as a flat array of bytes in the same format used
1452
* by surface DMA operations. To avoid unnecessary conversions, the
1453
* surface should be created with the SVGA3D_BUFFER format.
1454
*
1455
* Index 0 in the array starts 'offset' bytes into the surface.
1456
* Index 1 begins at byte 'offset + stride', etc. Array indices may
1457
* not be negative.
1458
*/
1459
uint32
surfaceId
;
1460
uint32
offset
;
1461
uint32
stride
;
1462
}
SVGA3dArray
;
1463
1464
typedef
1465
struct
{
1466
/*
1467
* Describe a vertex array's data type, and define how it is to be
1468
* used by the fixed function pipeline or the vertex shader. It
1469
* isn't useful to have two VertexDecls with the same
1470
* VertexArrayIdentity in one draw call.
1471
*/
1472
SVGA3dDeclType
type
;
1473
SVGA3dDeclMethod
method
;
1474
SVGA3dDeclUsage
usage
;
1475
uint32
usageIndex
;
1476
}
SVGA3dVertexArrayIdentity
;
1477
1478
typedef
1479
struct
{
1480
SVGA3dVertexArrayIdentity
identity
;
1481
SVGA3dArray
array
;
1482
SVGA3dArrayRangeHint
rangeHint
;
1483
}
SVGA3dVertexDecl
;
1484
1485
typedef
1486
struct
{
1487
/*
1488
* Define a group of primitives to render, from sequential indices.
1489
*
1490
* The value of 'primitiveType' and 'primitiveCount' imply the
1491
* total number of vertices that will be rendered.
1492
*/
1493
SVGA3dPrimitiveType
primType
;
1494
uint32
primitiveCount
;
1495
1496
/*
1497
* Optional index buffer. If indexArray.surfaceId is
1498
* SVGA3D_INVALID_ID, we render without an index buffer. Rendering
1499
* without an index buffer is identical to rendering with an index
1500
* buffer containing the sequence [0, 1, 2, 3, ...].
1501
*
1502
* If an index buffer is in use, indexWidth specifies the width in
1503
* bytes of each index value. It must be less than or equal to
1504
* indexArray.stride.
1505
*
1506
* (Currently, the SVGA3D device requires index buffers to be tightly
1507
* packed. In other words, indexWidth == indexArray.stride)
1508
*/
1509
SVGA3dArray
indexArray
;
1510
uint32
indexWidth
;
1511
1512
/*
1513
* Optional index bias. This number is added to all indices from
1514
* indexArray before they are used as vertex array indices. This
1515
* can be used in multiple ways:
1516
*
1517
* - When not using an indexArray, this bias can be used to
1518
* specify where in the vertex arrays to begin rendering.
1519
*
1520
* - A positive number here is equivalent to increasing the
1521
* offset in each vertex array.
1522
*
1523
* - A negative number can be used to render using a small
1524
* vertex array and an index buffer that contains large
1525
* values. This may be used by some applications that
1526
* crop a vertex buffer without modifying their index
1527
* buffer.
1528
*
1529
* Note that rendering with a negative bias value may be slower and
1530
* use more memory than rendering with a positive or zero bias.
1531
*/
1532
int32
indexBias
;
1533
}
SVGA3dPrimitiveRange
;
1534
1535
typedef
1536
struct
{
1537
uint32
cid
;
1538
uint32
numVertexDecls
;
1539
uint32
numRanges
;
1540
1541
/*
1542
* There are two variable size arrays after the
1543
* SVGA3dCmdDrawPrimitives structure. In order,
1544
* they are:
1545
*
1546
* 1. SVGA3dVertexDecl, quantity 'numVertexDecls', but no more than
1547
* SVGA3D_MAX_VERTEX_ARRAYS;
1548
* 2. SVGA3dPrimitiveRange, quantity 'numRanges', but no more than
1549
* SVGA3D_MAX_DRAW_PRIMITIVE_RANGES;
1550
* 3. Optionally, SVGA3dVertexDivisor, quantity 'numVertexDecls' (contains
1551
* the frequency divisor for the corresponding vertex decl).
1552
*/
1553
}
SVGA3dCmdDrawPrimitives
;
/* SVGA_3D_CMD_DRAWPRIMITIVES */
1554
1555
typedef
1556
struct
{
1557
uint32
stage
;
1558
SVGA3dTextureStateName
name
;
1559
union
{
1560
uint32
value
;
1561
float
floatValue
;
1562
};
1563
}
SVGA3dTextureState
;
1564
1565
typedef
1566
struct
{
1567
uint32
cid
;
1568
/* Followed by variable number of SVGA3dTextureState structures */
1569
}
SVGA3dCmdSetTextureState
;
/* SVGA_3D_CMD_SETTEXTURESTATE */
1570
1571
typedef
1572
struct
{
1573
uint32
cid
;
1574
SVGA3dTransformType
type
;
1575
float
matrix[16];
1576
}
SVGA3dCmdSetTransform
;
/* SVGA_3D_CMD_SETTRANSFORM */
1577
1578
typedef
1579
struct
{
1580
float
min
;
1581
float
max
;
1582
}
SVGA3dZRange
;
1583
1584
typedef
1585
struct
{
1586
uint32
cid
;
1587
SVGA3dZRange
zRange
;
1588
}
SVGA3dCmdSetZRange
;
/* SVGA_3D_CMD_SETZRANGE */
1589
1590
typedef
1591
struct
{
1592
float
diffuse[4];
1593
float
ambient[4];
1594
float
specular[4];
1595
float
emissive[4];
1596
float
shininess
;
1597
}
SVGA3dMaterial
;
1598
1599
typedef
1600
struct
{
1601
uint32
cid
;
1602
SVGA3dFace
face
;
1603
SVGA3dMaterial
material
;
1604
}
SVGA3dCmdSetMaterial
;
/* SVGA_3D_CMD_SETMATERIAL */
1605
1606
typedef
1607
struct
{
1608
uint32
cid
;
1609
uint32
index
;
1610
SVGA3dLightData
data
;
1611
}
SVGA3dCmdSetLightData
;
/* SVGA_3D_CMD_SETLIGHTDATA */
1612
1613
typedef
1614
struct
{
1615
uint32
cid
;
1616
uint32
index
;
1617
uint32
enabled
;
1618
}
SVGA3dCmdSetLightEnabled
;
/* SVGA_3D_CMD_SETLIGHTENABLED */
1619
1620
typedef
1621
struct
{
1622
uint32
cid
;
1623
SVGA3dRect
rect
;
1624
}
SVGA3dCmdSetViewport
;
/* SVGA_3D_CMD_SETVIEWPORT */
1625
1626
typedef
1627
struct
{
1628
uint32
cid
;
1629
SVGA3dRect
rect
;
1630
}
SVGA3dCmdSetScissorRect
;
/* SVGA_3D_CMD_SETSCISSORRECT */
1631
1632
typedef
1633
struct
{
1634
uint32
cid
;
1635
uint32
index
;
1636
float
plane
[4];
1637
}
SVGA3dCmdSetClipPlane
;
/* SVGA_3D_CMD_SETCLIPPLANE */
1638
1639
typedef
1640
struct
{
1641
uint32
cid
;
1642
uint32
shid
;
1643
SVGA3dShaderType
type
;
1644
/* Followed by variable number of DWORDs for shader bycode */
1645
}
SVGA3dCmdDefineShader
;
/* SVGA_3D_CMD_SHADER_DEFINE */
1646
1647
typedef
1648
struct
{
1649
uint32
cid
;
1650
uint32
shid
;
1651
SVGA3dShaderType
type
;
1652
}
SVGA3dCmdDestroyShader
;
/* SVGA_3D_CMD_SHADER_DESTROY */
1653
1654
typedef
1655
struct
{
1656
uint32
cid
;
1657
uint32
reg
;
/* register number */
1658
SVGA3dShaderType
type
;
1659
SVGA3dShaderConstType
ctype
;
1660
uint32
values
[4];
1661
}
SVGA3dCmdSetShaderConst
;
/* SVGA_3D_CMD_SET_SHADER_CONST */
1662
1663
typedef
1664
struct
{
1665
uint32
cid
;
1666
SVGA3dShaderType
type
;
1667
uint32
shid
;
1668
}
SVGA3dCmdSetShader
;
/* SVGA_3D_CMD_SET_SHADER */
1669
1670
typedef
1671
struct
{
1672
uint32
cid
;
1673
SVGA3dQueryType
type
;
1674
}
SVGA3dCmdBeginQuery
;
/* SVGA_3D_CMD_BEGIN_QUERY */
1675
1676
typedef
1677
struct
{
1678
uint32
cid
;
1679
SVGA3dQueryType
type
;
1680
SVGAGuestPtr
guestResult
;
/* Points to an SVGA3dQueryResult structure */
1681
}
SVGA3dCmdEndQuery
;
/* SVGA_3D_CMD_END_QUERY */
1682
1683
typedef
1684
struct
{
1685
uint32
cid
;
/* Same parameters passed to END_QUERY */
1686
SVGA3dQueryType
type
;
1687
SVGAGuestPtr
guestResult
;
1688
}
SVGA3dCmdWaitForQuery
;
/* SVGA_3D_CMD_WAIT_FOR_QUERY */
1689
1690
typedef
1691
struct
{
1692
uint32
totalSize
;
/* Set by guest before query is ended. */
1693
SVGA3dQueryState
state
;
/* Set by host or guest. See SVGA3dQueryState. */
1694
union
{
/* Set by host on exit from PENDING state */
1695
uint32
result32
;
1696
};
1697
}
SVGA3dQueryResult
;
1698
1699
/*
1700
* SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN --
1701
*
1702
* This is a blit from an SVGA3D surface to a Screen Object. Just
1703
* like GMR-to-screen blits, this blit may be directed at a
1704
* specific screen or to the virtual coordinate space.
1705
*
1706
* The blit copies from a rectangular region of an SVGA3D surface
1707
* image to a rectangular region of a screen or screens.
1708
*
1709
* This command takes an optional variable-length list of clipping
1710
* rectangles after the body of the command. If no rectangles are
1711
* specified, there is no clipping region. The entire destRect is
1712
* drawn to. If one or more rectangles are included, they describe
1713
* a clipping region. The clip rectangle coordinates are measured
1714
* relative to the top-left corner of destRect.
1715
*
1716
* This clipping region serves multiple purposes:
1717
*
1718
* - It can be used to perform an irregularly shaped blit more
1719
* efficiently than by issuing many separate blit commands.
1720
*
1721
* - It is equivalent to allowing blits with non-integer
1722
* source coordinates. You could blit just one half-pixel
1723
* of a source, for example, by specifying a larger
1724
* destination rectangle than you need, then removing
1725
* part of it using a clip rectangle.
1726
*
1727
* Availability:
1728
* SVGA_FIFO_CAP_SCREEN_OBJECT
1729
*
1730
* Limitations:
1731
*
1732
* - Currently, no backend supports blits from a mipmap or face
1733
* other than the first one.
1734
*/
1735
1736
typedef
1737
struct
{
1738
SVGA3dSurfaceImageId
srcImage
;
1739
SVGASignedRect
srcRect
;
1740
uint32
destScreenId
;
/* Screen ID or SVGA_ID_INVALID for virt. coords */
1741
SVGASignedRect
destRect
;
/* Supports scaling if src/rest different size */
1742
/* Clipping: zero or more SVGASignedRects follow */
1743
}
SVGA3dCmdBlitSurfaceToScreen
;
/* SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN */
1744
1745
typedef
1746
struct
{
1747
uint32
sid
;
1748
SVGA3dTextureFilter
filter
;
1749
}
SVGA3dCmdGenerateMipmaps
;
/* SVGA_3D_CMD_GENERATE_MIPMAPS */
1750
1751
1752
/*
1753
* Capability query index.
1754
*
1755
* Notes:
1756
*
1757
* 1. SVGA3D_DEVCAP_MAX_TEXTURES reflects the maximum number of
1758
* fixed-function texture units available. Each of these units
1759
* work in both FFP and Shader modes, and they support texture
1760
* transforms and texture coordinates. The host may have additional
1761
* texture image units that are only usable with shaders.
1762
*
1763
* 2. The BUFFER_FORMAT capabilities are deprecated, and they always
1764
* return TRUE. Even on physical hardware that does not support
1765
* these formats natively, the SVGA3D device will provide an emulation
1766
* which should be invisible to the guest OS.
1767
*
1768
* In general, the SVGA3D device should support any operation on
1769
* any surface format, it just may perform some of these
1770
* operations in software depending on the capabilities of the
1771
* available physical hardware.
1772
*
1773
* XXX: In the future, we will add capabilities that describe in
1774
* detail what formats are supported in hardware for what kinds
1775
* of operations.
1776
*/
1777
1778
typedef
enum
{
1779
SVGA3D_DEVCAP_3D
= 0,
1780
SVGA3D_DEVCAP_MAX_LIGHTS
= 1,
1781
SVGA3D_DEVCAP_MAX_TEXTURES
= 2,
/* See note (1) */
1782
SVGA3D_DEVCAP_MAX_CLIP_PLANES
= 3,
1783
SVGA3D_DEVCAP_VERTEX_SHADER_VERSION
= 4,
1784
SVGA3D_DEVCAP_VERTEX_SHADER
= 5,
1785
SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION
= 6,
1786
SVGA3D_DEVCAP_FRAGMENT_SHADER
= 7,
1787
SVGA3D_DEVCAP_MAX_RENDER_TARGETS
= 8,
1788
SVGA3D_DEVCAP_S23E8_TEXTURES
= 9,
1789
SVGA3D_DEVCAP_S10E5_TEXTURES
= 10,
1790
SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND
= 11,
1791
SVGA3D_DEVCAP_D16_BUFFER_FORMAT
= 12,
/* See note (2) */
1792
SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT
= 13,
/* See note (2) */
1793
SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT
= 14,
/* See note (2) */
1794
SVGA3D_DEVCAP_QUERY_TYPES
= 15,
1795
SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING
= 16,
1796
SVGA3D_DEVCAP_MAX_POINT_SIZE
= 17,
1797
SVGA3D_DEVCAP_MAX_SHADER_TEXTURES
= 18,
1798
SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH
= 19,
1799
SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT
= 20,
1800
SVGA3D_DEVCAP_MAX_VOLUME_EXTENT
= 21,
1801
SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT
= 22,
1802
SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO
= 23,
1803
SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY
= 24,
1804
SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT
= 25,
1805
SVGA3D_DEVCAP_MAX_VERTEX_INDEX
= 26,
1806
SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS
= 27,
1807
SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS
= 28,
1808
SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS
= 29,
1809
SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS
= 30,
1810
SVGA3D_DEVCAP_TEXTURE_OPS
= 31,
1811
SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8
= 32,
1812
SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8
= 33,
1813
SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10
= 34,
1814
SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5
= 35,
1815
SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5
= 36,
1816
SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4
= 37,
1817
SVGA3D_DEVCAP_SURFACEFMT_R5G6B5
= 38,
1818
SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16
= 39,
1819
SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8
= 40,
1820
SVGA3D_DEVCAP_SURFACEFMT_ALPHA8
= 41,
1821
SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8
= 42,
1822
SVGA3D_DEVCAP_SURFACEFMT_Z_D16
= 43,
1823
SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8
= 44,
1824
SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8
= 45,
1825
SVGA3D_DEVCAP_SURFACEFMT_DXT1
= 46,
1826
SVGA3D_DEVCAP_SURFACEFMT_DXT2
= 47,
1827
SVGA3D_DEVCAP_SURFACEFMT_DXT3
= 48,
1828
SVGA3D_DEVCAP_SURFACEFMT_DXT4
= 49,
1829
SVGA3D_DEVCAP_SURFACEFMT_DXT5
= 50,
1830
SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8
= 51,
1831
SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10
= 52,
1832
SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8
= 53,
1833
SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8
= 54,
1834
SVGA3D_DEVCAP_SURFACEFMT_CxV8U8
= 55,
1835
SVGA3D_DEVCAP_SURFACEFMT_R_S10E5
= 56,
1836
SVGA3D_DEVCAP_SURFACEFMT_R_S23E8
= 57,
1837
SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5
= 58,
1838
SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8
= 59,
1839
SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5
= 60,
1840
SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8
= 61,
1841
SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES
= 63,
1842
1843
/*
1844
* Note that MAX_SIMULTANEOUS_RENDER_TARGETS is a maximum count of color
1845
* render targets. This does no include the depth or stencil targets.
1846
*/
1847
SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS
= 64,
1848
1849
SVGA3D_DEVCAP_SURFACEFMT_V16U16
= 65,
1850
SVGA3D_DEVCAP_SURFACEFMT_G16R16
= 66,
1851
SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16
= 67,
1852
SVGA3D_DEVCAP_SURFACEFMT_UYVY
= 68,
1853
SVGA3D_DEVCAP_SURFACEFMT_YUY2
= 69,
1854
SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES
= 70,
1855
SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES
= 71,
1856
SVGA3D_DEVCAP_ALPHATOCOVERAGE
= 72,
1857
SVGA3D_DEVCAP_SUPERSAMPLE
= 73,
1858
SVGA3D_DEVCAP_AUTOGENMIPMAPS
= 74,
1859
SVGA3D_DEVCAP_SURFACEFMT_NV12
= 75,
1860
SVGA3D_DEVCAP_SURFACEFMT_AYUV
= 76,
1861
1862
/*
1863
* This is the maximum number of SVGA context IDs that the guest
1864
* can define using SVGA_3D_CMD_CONTEXT_DEFINE.
1865
*/
1866
SVGA3D_DEVCAP_MAX_CONTEXT_IDS
= 77,
1867
1868
/*
1869
* This is the maximum number of SVGA surface IDs that the guest
1870
* can define using SVGA_3D_CMD_SURFACE_DEFINE*.
1871
*/
1872
SVGA3D_DEVCAP_MAX_SURFACE_IDS
= 78,
1873
1874
SVGA3D_DEVCAP_SURFACEFMT_Z_DF16
= 79,
1875
SVGA3D_DEVCAP_SURFACEFMT_Z_DF24
= 80,
1876
SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT
= 81,
1877
1878
SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM
= 82,
1879
SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM
= 83,
1880
1881
/*
1882
* Don't add new caps into the previous section; the values in this
1883
* enumeration must not change. You can put new values right before
1884
* SVGA3D_DEVCAP_MAX.
1885
*/
1886
SVGA3D_DEVCAP_MAX
/* This must be the last index. */
1887
}
SVGA3dDevCapIndex
;
1888
1889
typedef
union
{
1890
Bool
b
;
1891
uint32
u
;
1892
int32
i
;
1893
float
f
;
1894
}
SVGA3dDevCapResult
;
1895
1896
#endif
/* _SVGA3D_REG_H_ */
Generated on Thu Jan 10 2013 13:33:49 for Linux Kernel by
1.8.2