1 /*==========================================================================; 2 * 3 * Copyright (C) Microsoft Corporation. All Rights Reserved. 4 * 5 * File: d3d8types.h 6 * Content: Direct3D capabilities include file 7 * 8 ***************************************************************************/ 9 10 #ifndef _D3D8TYPES_H_ 11 #define _D3D8TYPES_H_ 12 13 #ifndef DIRECT3D_VERSION 14 #define DIRECT3D_VERSION 0x0800 15 #endif //DIRECT3D_VERSION 16 17 // include this file content only if compiling for DX8 interfaces 18 #if(DIRECT3D_VERSION >= 0x0800) 19 20 #include <float.h> 21 22 #if _MSC_VER >= 1200 23 #pragma warning(push) 24 #endif 25 #pragma warning(disable:4201) // anonymous unions warning 26 #if defined(_X86_) || defined(_IA64_) 27 #pragma pack(4) 28 #endif 29 30 // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8 31 #ifndef D3DCOLOR_DEFINED 32 typedef DWORD D3DCOLOR; 33 #define D3DCOLOR_DEFINED 34 #endif 35 36 // maps unsigned 8 bits/channel to D3DCOLOR 37 #define D3DCOLOR_ARGB(a,r,g,b) \ 38 ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff))) 39 #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b) 40 #define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) 41 42 // maps floating point channels (0.f to 1.f range) to D3DCOLOR 43 #define D3DCOLOR_COLORVALUE(r,g,b,a) \ 44 D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f)) 45 46 47 #ifndef D3DVECTOR_DEFINED 48 typedef struct _D3DVECTOR { 49 float x; 50 float y; 51 float z; 52 } D3DVECTOR; 53 #define D3DVECTOR_DEFINED 54 #endif 55 56 #ifndef D3DCOLORVALUE_DEFINED 57 typedef struct _D3DCOLORVALUE { 58 float r; 59 float g; 60 float b; 61 float a; 62 } D3DCOLORVALUE; 63 #define D3DCOLORVALUE_DEFINED 64 #endif 65 66 #ifndef D3DRECT_DEFINED 67 typedef struct _D3DRECT { 68 LONG x1; 69 LONG y1; 70 LONG x2; 71 LONG y2; 72 } D3DRECT; 73 #define D3DRECT_DEFINED 74 #endif 75 76 #ifndef D3DMATRIX_DEFINED 77 typedef struct _D3DMATRIX { 78 union { 79 struct { 80 float _11, _12, _13, _14; 81 float _21, _22, _23, _24; 82 float _31, _32, _33, _34; 83 float _41, _42, _43, _44; 84 85 }; 86 float m[4][4]; 87 }; 88 } D3DMATRIX; 89 #define D3DMATRIX_DEFINED 90 #endif 91 92 typedef struct _D3DVIEWPORT8 { 93 DWORD X; 94 DWORD Y; /* Viewport Top left */ 95 DWORD Width; 96 DWORD Height; /* Viewport Dimensions */ 97 float MinZ; /* Min/max of clip Volume */ 98 float MaxZ; 99 } D3DVIEWPORT8; 100 101 /* 102 * Values for clip fields. 103 */ 104 105 // Max number of user clipping planes, supported in D3D. 106 #define D3DMAXUSERCLIPPLANES 32 107 108 // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE 109 // 110 #define D3DCLIPPLANE0 (1 << 0) 111 #define D3DCLIPPLANE1 (1 << 1) 112 #define D3DCLIPPLANE2 (1 << 2) 113 #define D3DCLIPPLANE3 (1 << 3) 114 #define D3DCLIPPLANE4 (1 << 4) 115 #define D3DCLIPPLANE5 (1 << 5) 116 117 // The following bits are used in the ClipUnion and ClipIntersection 118 // members of the D3DCLIPSTATUS8 119 // 120 121 #define D3DCS_LEFT 0x00000001L 122 #define D3DCS_RIGHT 0x00000002L 123 #define D3DCS_TOP 0x00000004L 124 #define D3DCS_BOTTOM 0x00000008L 125 #define D3DCS_FRONT 0x00000010L 126 #define D3DCS_BACK 0x00000020L 127 #define D3DCS_PLANE0 0x00000040L 128 #define D3DCS_PLANE1 0x00000080L 129 #define D3DCS_PLANE2 0x00000100L 130 #define D3DCS_PLANE3 0x00000200L 131 #define D3DCS_PLANE4 0x00000400L 132 #define D3DCS_PLANE5 0x00000800L 133 134 #define D3DCS_ALL (D3DCS_LEFT | \ 135 D3DCS_RIGHT | \ 136 D3DCS_TOP | \ 137 D3DCS_BOTTOM | \ 138 D3DCS_FRONT | \ 139 D3DCS_BACK | \ 140 D3DCS_PLANE0 | \ 141 D3DCS_PLANE1 | \ 142 D3DCS_PLANE2 | \ 143 D3DCS_PLANE3 | \ 144 D3DCS_PLANE4 | \ 145 D3DCS_PLANE5) 146 147 typedef struct _D3DCLIPSTATUS8 { 148 DWORD ClipUnion; 149 DWORD ClipIntersection; 150 } D3DCLIPSTATUS8; 151 152 typedef struct _D3DMATERIAL8 { 153 D3DCOLORVALUE Diffuse; /* Diffuse color RGBA */ 154 D3DCOLORVALUE Ambient; /* Ambient color RGB */ 155 D3DCOLORVALUE Specular; /* Specular 'shininess' */ 156 D3DCOLORVALUE Emissive; /* Emissive color RGB */ 157 float Power; /* Sharpness if specular highlight */ 158 } D3DMATERIAL8; 159 160 typedef enum _D3DLIGHTTYPE { 161 D3DLIGHT_POINT = 1, 162 D3DLIGHT_SPOT = 2, 163 D3DLIGHT_DIRECTIONAL = 3, 164 D3DLIGHT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 165 } D3DLIGHTTYPE; 166 167 typedef struct _D3DLIGHT8 { 168 D3DLIGHTTYPE Type; /* Type of light source */ 169 D3DCOLORVALUE Diffuse; /* Diffuse color of light */ 170 D3DCOLORVALUE Specular; /* Specular color of light */ 171 D3DCOLORVALUE Ambient; /* Ambient color of light */ 172 D3DVECTOR Position; /* Position in world space */ 173 D3DVECTOR Direction; /* Direction in world space */ 174 float Range; /* Cutoff range */ 175 float Falloff; /* Falloff */ 176 float Attenuation0; /* Constant attenuation */ 177 float Attenuation1; /* Linear attenuation */ 178 float Attenuation2; /* Quadratic attenuation */ 179 float Theta; /* Inner angle of spotlight cone */ 180 float Phi; /* Outer angle of spotlight cone */ 181 } D3DLIGHT8; 182 183 /* 184 * Options for clearing 185 */ 186 #define D3DCLEAR_TARGET 0x00000001l /* Clear target surface */ 187 #define D3DCLEAR_ZBUFFER 0x00000002l /* Clear target z buffer */ 188 #define D3DCLEAR_STENCIL 0x00000004l /* Clear stencil planes */ 189 190 /* 191 * The following defines the rendering states 192 */ 193 194 typedef enum _D3DSHADEMODE { 195 D3DSHADE_FLAT = 1, 196 D3DSHADE_GOURAUD = 2, 197 D3DSHADE_PHONG = 3, 198 D3DSHADE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 199 } D3DSHADEMODE; 200 201 typedef enum _D3DFILLMODE { 202 D3DFILL_POINT = 1, 203 D3DFILL_WIREFRAME = 2, 204 D3DFILL_SOLID = 3, 205 D3DFILL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 206 } D3DFILLMODE; 207 208 typedef struct _D3DLINEPATTERN { 209 WORD wRepeatFactor; 210 WORD wLinePattern; 211 } D3DLINEPATTERN; 212 213 typedef enum _D3DBLEND { 214 D3DBLEND_ZERO = 1, 215 D3DBLEND_ONE = 2, 216 D3DBLEND_SRCCOLOR = 3, 217 D3DBLEND_INVSRCCOLOR = 4, 218 D3DBLEND_SRCALPHA = 5, 219 D3DBLEND_INVSRCALPHA = 6, 220 D3DBLEND_DESTALPHA = 7, 221 D3DBLEND_INVDESTALPHA = 8, 222 D3DBLEND_DESTCOLOR = 9, 223 D3DBLEND_INVDESTCOLOR = 10, 224 D3DBLEND_SRCALPHASAT = 11, 225 D3DBLEND_BOTHSRCALPHA = 12, 226 D3DBLEND_BOTHINVSRCALPHA = 13, 227 D3DBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 228 } D3DBLEND; 229 230 typedef enum _D3DBLENDOP { 231 D3DBLENDOP_ADD = 1, 232 D3DBLENDOP_SUBTRACT = 2, 233 D3DBLENDOP_REVSUBTRACT = 3, 234 D3DBLENDOP_MIN = 4, 235 D3DBLENDOP_MAX = 5, 236 D3DBLENDOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 237 } D3DBLENDOP; 238 239 typedef enum _D3DTEXTUREADDRESS { 240 D3DTADDRESS_WRAP = 1, 241 D3DTADDRESS_MIRROR = 2, 242 D3DTADDRESS_CLAMP = 3, 243 D3DTADDRESS_BORDER = 4, 244 D3DTADDRESS_MIRRORONCE = 5, 245 D3DTADDRESS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 246 } D3DTEXTUREADDRESS; 247 248 typedef enum _D3DCULL { 249 D3DCULL_NONE = 1, 250 D3DCULL_CW = 2, 251 D3DCULL_CCW = 3, 252 D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 253 } D3DCULL; 254 255 typedef enum _D3DCMPFUNC { 256 D3DCMP_NEVER = 1, 257 D3DCMP_LESS = 2, 258 D3DCMP_EQUAL = 3, 259 D3DCMP_LESSEQUAL = 4, 260 D3DCMP_GREATER = 5, 261 D3DCMP_NOTEQUAL = 6, 262 D3DCMP_GREATEREQUAL = 7, 263 D3DCMP_ALWAYS = 8, 264 D3DCMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 265 } D3DCMPFUNC; 266 267 typedef enum _D3DSTENCILOP { 268 D3DSTENCILOP_KEEP = 1, 269 D3DSTENCILOP_ZERO = 2, 270 D3DSTENCILOP_REPLACE = 3, 271 D3DSTENCILOP_INCRSAT = 4, 272 D3DSTENCILOP_DECRSAT = 5, 273 D3DSTENCILOP_INVERT = 6, 274 D3DSTENCILOP_INCR = 7, 275 D3DSTENCILOP_DECR = 8, 276 D3DSTENCILOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 277 } D3DSTENCILOP; 278 279 typedef enum _D3DFOGMODE { 280 D3DFOG_NONE = 0, 281 D3DFOG_EXP = 1, 282 D3DFOG_EXP2 = 2, 283 D3DFOG_LINEAR = 3, 284 D3DFOG_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 285 } D3DFOGMODE; 286 287 typedef enum _D3DZBUFFERTYPE { 288 D3DZB_FALSE = 0, 289 D3DZB_TRUE = 1, // Z buffering 290 D3DZB_USEW = 2, // W buffering 291 D3DZB_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 292 } D3DZBUFFERTYPE; 293 294 // Primitives supported by draw-primitive API 295 typedef enum _D3DPRIMITIVETYPE { 296 D3DPT_POINTLIST = 1, 297 D3DPT_LINELIST = 2, 298 D3DPT_LINESTRIP = 3, 299 D3DPT_TRIANGLELIST = 4, 300 D3DPT_TRIANGLESTRIP = 5, 301 D3DPT_TRIANGLEFAN = 6, 302 D3DPT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 303 } D3DPRIMITIVETYPE; 304 305 typedef enum _D3DTRANSFORMSTATETYPE { 306 D3DTS_VIEW = 2, 307 D3DTS_PROJECTION = 3, 308 D3DTS_TEXTURE0 = 16, 309 D3DTS_TEXTURE1 = 17, 310 D3DTS_TEXTURE2 = 18, 311 D3DTS_TEXTURE3 = 19, 312 D3DTS_TEXTURE4 = 20, 313 D3DTS_TEXTURE5 = 21, 314 D3DTS_TEXTURE6 = 22, 315 D3DTS_TEXTURE7 = 23, 316 D3DTS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 317 } D3DTRANSFORMSTATETYPE; 318 319 #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256) 320 #define D3DTS_WORLD D3DTS_WORLDMATRIX(0) 321 #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1) 322 #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2) 323 #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3) 324 325 typedef enum _D3DRENDERSTATETYPE { 326 D3DRS_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */ 327 D3DRS_FILLMODE = 8, /* D3DFILLMODE */ 328 D3DRS_SHADEMODE = 9, /* D3DSHADEMODE */ 329 D3DRS_LINEPATTERN = 10, /* D3DLINEPATTERN */ 330 D3DRS_ZWRITEENABLE = 14, /* TRUE to enable z writes */ 331 D3DRS_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */ 332 D3DRS_LASTPIXEL = 16, /* TRUE for last-pixel on lines */ 333 D3DRS_SRCBLEND = 19, /* D3DBLEND */ 334 D3DRS_DESTBLEND = 20, /* D3DBLEND */ 335 D3DRS_CULLMODE = 22, /* D3DCULL */ 336 D3DRS_ZFUNC = 23, /* D3DCMPFUNC */ 337 D3DRS_ALPHAREF = 24, /* D3DFIXED */ 338 D3DRS_ALPHAFUNC = 25, /* D3DCMPFUNC */ 339 D3DRS_DITHERENABLE = 26, /* TRUE to enable dithering */ 340 D3DRS_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */ 341 D3DRS_FOGENABLE = 28, /* TRUE to enable fog blending */ 342 D3DRS_SPECULARENABLE = 29, /* TRUE to enable specular */ 343 D3DRS_ZVISIBLE = 30, /* TRUE to enable z checking */ 344 D3DRS_FOGCOLOR = 34, /* D3DCOLOR */ 345 D3DRS_FOGTABLEMODE = 35, /* D3DFOGMODE */ 346 D3DRS_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */ 347 D3DRS_FOGEND = 37, /* Fog end */ 348 D3DRS_FOGDENSITY = 38, /* Fog density */ 349 D3DRS_EDGEANTIALIAS = 40, /* TRUE to enable edge antialiasing */ 350 D3DRS_ZBIAS = 47, /* LONG Z bias */ 351 D3DRS_RANGEFOGENABLE = 48, /* Enables range-based fog */ 352 D3DRS_STENCILENABLE = 52, /* BOOL enable/disable stenciling */ 353 D3DRS_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */ 354 D3DRS_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */ 355 D3DRS_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */ 356 D3DRS_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ 357 D3DRS_STENCILREF = 57, /* Reference value used in stencil test */ 358 D3DRS_STENCILMASK = 58, /* Mask value used in stencil test */ 359 D3DRS_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */ 360 D3DRS_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */ 361 D3DRS_WRAP0 = 128, /* wrap for 1st texture coord. set */ 362 D3DRS_WRAP1 = 129, /* wrap for 2nd texture coord. set */ 363 D3DRS_WRAP2 = 130, /* wrap for 3rd texture coord. set */ 364 D3DRS_WRAP3 = 131, /* wrap for 4th texture coord. set */ 365 D3DRS_WRAP4 = 132, /* wrap for 5th texture coord. set */ 366 D3DRS_WRAP5 = 133, /* wrap for 6th texture coord. set */ 367 D3DRS_WRAP6 = 134, /* wrap for 7th texture coord. set */ 368 D3DRS_WRAP7 = 135, /* wrap for 8th texture coord. set */ 369 D3DRS_CLIPPING = 136, 370 D3DRS_LIGHTING = 137, 371 D3DRS_AMBIENT = 139, 372 D3DRS_FOGVERTEXMODE = 140, 373 D3DRS_COLORVERTEX = 141, 374 D3DRS_LOCALVIEWER = 142, 375 D3DRS_NORMALIZENORMALS = 143, 376 D3DRS_DIFFUSEMATERIALSOURCE = 145, 377 D3DRS_SPECULARMATERIALSOURCE = 146, 378 D3DRS_AMBIENTMATERIALSOURCE = 147, 379 D3DRS_EMISSIVEMATERIALSOURCE = 148, 380 D3DRS_VERTEXBLEND = 151, 381 D3DRS_CLIPPLANEENABLE = 152, 382 D3DRS_SOFTWAREVERTEXPROCESSING = 153, 383 D3DRS_POINTSIZE = 154, /* float point size */ 384 D3DRS_POINTSIZE_MIN = 155, /* float point size min threshold */ 385 D3DRS_POINTSPRITEENABLE = 156, /* BOOL point texture coord control */ 386 D3DRS_POINTSCALEENABLE = 157, /* BOOL point size scale enable */ 387 D3DRS_POINTSCALE_A = 158, /* float point attenuation A value */ 388 D3DRS_POINTSCALE_B = 159, /* float point attenuation B value */ 389 D3DRS_POINTSCALE_C = 160, /* float point attenuation C value */ 390 D3DRS_MULTISAMPLEANTIALIAS = 161, // BOOL - set to do FSAA with multisample buffer 391 D3DRS_MULTISAMPLEMASK = 162, // DWORD - per-sample enable/disable 392 D3DRS_PATCHEDGESTYLE = 163, // Sets whether patch edges will use float style tessellation 393 D3DRS_PATCHSEGMENTS = 164, // Number of segments per edge when drawing patches 394 D3DRS_DEBUGMONITORTOKEN = 165, // DEBUG ONLY - token to debug monitor 395 D3DRS_POINTSIZE_MAX = 166, /* float point size max threshold */ 396 D3DRS_INDEXEDVERTEXBLENDENABLE = 167, 397 D3DRS_COLORWRITEENABLE = 168, // per-channel write enable 398 D3DRS_TWEENFACTOR = 170, // float tween factor 399 D3DRS_BLENDOP = 171, // D3DBLENDOP setting 400 D3DRS_POSITIONORDER = 172, // NPatch position interpolation order. D3DORDER_LINEAR or D3DORDER_CUBIC (default) 401 D3DRS_NORMALORDER = 173, // NPatch normal interpolation order. D3DORDER_LINEAR (default) or D3DORDER_QUADRATIC 402 403 D3DRS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 404 } D3DRENDERSTATETYPE; 405 406 // Values for material source 407 typedef enum _D3DMATERIALCOLORSOURCE 408 { 409 D3DMCS_MATERIAL = 0, // Color from material is used 410 D3DMCS_COLOR1 = 1, // Diffuse vertex color is used 411 D3DMCS_COLOR2 = 2, // Specular vertex color is used 412 D3DMCS_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 413 } D3DMATERIALCOLORSOURCE; 414 415 // Bias to apply to the texture coordinate set to apply a wrap to. 416 #define D3DRENDERSTATE_WRAPBIAS 128UL 417 418 /* Flags to construct the WRAP render states */ 419 #define D3DWRAP_U 0x00000001L 420 #define D3DWRAP_V 0x00000002L 421 #define D3DWRAP_W 0x00000004L 422 423 /* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */ 424 #define D3DWRAPCOORD_0 0x00000001L // same as D3DWRAP_U 425 #define D3DWRAPCOORD_1 0x00000002L // same as D3DWRAP_V 426 #define D3DWRAPCOORD_2 0x00000004L // same as D3DWRAP_W 427 #define D3DWRAPCOORD_3 0x00000008L 428 429 /* Flags to construct D3DRS_COLORWRITEENABLE */ 430 #define D3DCOLORWRITEENABLE_RED (1L<<0) 431 #define D3DCOLORWRITEENABLE_GREEN (1L<<1) 432 #define D3DCOLORWRITEENABLE_BLUE (1L<<2) 433 #define D3DCOLORWRITEENABLE_ALPHA (1L<<3) 434 435 /* 436 * State enumerants for per-stage texture processing. 437 */ 438 typedef enum _D3DTEXTURESTAGESTATETYPE 439 { 440 D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */ 441 D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */ 442 D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */ 443 D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */ 444 D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */ 445 D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */ 446 D3DTSS_BUMPENVMAT00 = 7, /* float (bump mapping matrix) */ 447 D3DTSS_BUMPENVMAT01 = 8, /* float (bump mapping matrix) */ 448 D3DTSS_BUMPENVMAT10 = 9, /* float (bump mapping matrix) */ 449 D3DTSS_BUMPENVMAT11 = 10, /* float (bump mapping matrix) */ 450 D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */ 451 D3DTSS_ADDRESSU = 13, /* D3DTEXTUREADDRESS for U coordinate */ 452 D3DTSS_ADDRESSV = 14, /* D3DTEXTUREADDRESS for V coordinate */ 453 D3DTSS_BORDERCOLOR = 15, /* D3DCOLOR */ 454 D3DTSS_MAGFILTER = 16, /* D3DTEXTUREFILTER filter to use for magnification */ 455 D3DTSS_MINFILTER = 17, /* D3DTEXTUREFILTER filter to use for minification */ 456 D3DTSS_MIPFILTER = 18, /* D3DTEXTUREFILTER filter to use between mipmaps during minification */ 457 D3DTSS_MIPMAPLODBIAS = 19, /* float Mipmap LOD bias */ 458 D3DTSS_MAXMIPLEVEL = 20, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */ 459 D3DTSS_MAXANISOTROPY = 21, /* DWORD maximum anisotropy */ 460 D3DTSS_BUMPENVLSCALE = 22, /* float scale for bump map luminance */ 461 D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */ 462 D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */ 463 D3DTSS_ADDRESSW = 25, /* D3DTEXTUREADDRESS for W coordinate */ 464 D3DTSS_COLORARG0 = 26, /* D3DTA_* third arg for triadic ops */ 465 D3DTSS_ALPHAARG0 = 27, /* D3DTA_* third arg for triadic ops */ 466 D3DTSS_RESULTARG = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */ 467 D3DTSS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ 468 } D3DTEXTURESTAGESTATETYPE; 469 470 // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position 471 // and normal in the camera space) should be taken as texture coordinates 472 // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from 473 // 474 #define D3DTSS_TCI_PASSTHRU 0x00000000 475 #define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 476 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 477 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 478 479 /* 480 * Enumerations for COLOROP and ALPHAOP texture blending operations set in 481 * texture processing stage controls in D3DTSS. 482 */ 483 typedef enum _D3DTEXTUREOP 484 { 485 // Control 486 D3DTOP_DISABLE = 1, // disables stage 487 D3DTOP_SELECTARG1 = 2, // the default 488 D3DTOP_SELECTARG2 = 3, 489 490 // Modulate 491 D3DTOP_MODULATE = 4, // multiply args together 492 D3DTOP_MODULATE2X = 5, // multiply and 1 bit 493 D3DTOP_MODULATE4X = 6, // multiply and 2 bits 494 495 // Add 496 D3DTOP_ADD = 7, // add arguments together 497 D3DTOP_ADDSIGNED = 8, // add with -0.5 bias 498 D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit 499 D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation 500 D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product 501 // Arg1 + Arg2 - Arg1*Arg2 502 // = Arg1 + (1-Arg1)*Arg2 503 504 // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) 505 D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha 506 D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha 507 D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRS_TEXTUREFACTOR 508 509 // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha) 510 D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha 511 D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color 512 513 // Specular mapping 514 D3DTOP_PREMODULATE = 17, // modulate with next texture before use 515 D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB 516 // COLOROP only 517 D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A 518 // COLOROP only 519 D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB 520 // COLOROP only 521 D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A 522 // COLOROP only 523 524 // Bump mapping 525 D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation 526 D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel 527 528 // This can do either diffuse or specular bump mapping with correct input. 529 // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B) 530 // where each component has been scaled and offset to make it signed. 531 // The result is replicated into all four (including alpha) channels. 532 // This is a valid COLOROP only. 533 D3DTOP_DOTPRODUCT3 = 24, 534 535 // Triadic ops 536 D3DTOP_MULTIPLYADD = 25, // Arg0 + Arg1*Arg2 537 D3DTOP_LERP = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2 538 539 D3DTOP_FORCE_DWORD = 0x7fffffff, 540 } D3DTEXTUREOP; 541 542 /* 543 * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending 544 * operations set in texture processing stage controls in D3DRENDERSTATE. 545 */ 546 #define D3DTA_SELECTMASK 0x0000000f // mask for arg selector 547 #define D3DTA_DIFFUSE 0x00000000 // select diffuse color (read only) 548 #define D3DTA_CURRENT 0x00000001 // select stage destination register (read/write) 549 #define D3DTA_TEXTURE 0x00000002 // select texture color (read only) 550 #define D3DTA_TFACTOR 0x00000003 // select D3DRS_TEXTUREFACTOR (read only) 551 #define D3DTA_SPECULAR 0x00000004 // select specular color (read only) 552 #define D3DTA_TEMP 0x00000005 // select temporary register color (read/write) 553 #define D3DTA_COMPLEMENT 0x00000010 // take 1.0 - x (read modifier) 554 #define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components (read modifier) 555 556 // 557 // Values for D3DTSS_***FILTER texture stage states 558 // 559 typedef enum _D3DTEXTUREFILTERTYPE 560 { 561 D3DTEXF_NONE = 0, // filtering disabled (valid for mip filter only) 562 D3DTEXF_POINT = 1, // nearest 563 D3DTEXF_LINEAR = 2, // linear interpolation 564 D3DTEXF_ANISOTROPIC = 3, // anisotropic 565 D3DTEXF_FLATCUBIC = 4, // cubic 566 D3DTEXF_GAUSSIANCUBIC = 5, // different cubic kernel 567 D3DTEXF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 568 } D3DTEXTUREFILTERTYPE; 569 570 /* Bits for Flags in ProcessVertices call */ 571 572 #define D3DPV_DONOTCOPYDATA (1 << 0) 573 574 //------------------------------------------------------------------- 575 576 // Flexible vertex format bits 577 // 578 #define D3DFVF_RESERVED0 0x001 579 #define D3DFVF_POSITION_MASK 0x00E 580 #define D3DFVF_XYZ 0x002 581 #define D3DFVF_XYZRHW 0x004 582 #define D3DFVF_XYZB1 0x006 583 #define D3DFVF_XYZB2 0x008 584 #define D3DFVF_XYZB3 0x00a 585 #define D3DFVF_XYZB4 0x00c 586 #define D3DFVF_XYZB5 0x00e 587 588 #define D3DFVF_NORMAL 0x010 589 #define D3DFVF_PSIZE 0x020 590 #define D3DFVF_DIFFUSE 0x040 591 #define D3DFVF_SPECULAR 0x080 592 593 #define D3DFVF_TEXCOUNT_MASK 0xf00 594 #define D3DFVF_TEXCOUNT_SHIFT 8 595 #define D3DFVF_TEX0 0x000 596 #define D3DFVF_TEX1 0x100 597 #define D3DFVF_TEX2 0x200 598 #define D3DFVF_TEX3 0x300 599 #define D3DFVF_TEX4 0x400 600 #define D3DFVF_TEX5 0x500 601 #define D3DFVF_TEX6 0x600 602 #define D3DFVF_TEX7 0x700 603 #define D3DFVF_TEX8 0x800 604 605 #define D3DFVF_LASTBETA_UBYTE4 0x1000 606 607 #define D3DFVF_RESERVED2 0xE000 // 4 reserved bits 608 609 //--------------------------------------------------------------------- 610 // Vertex Shaders 611 // 612 613 /* 614 615 Vertex Shader Declaration 616 617 The declaration portion of a vertex shader defines the static external 618 interface of the shader. The information in the declaration includes: 619 620 - Assignments of vertex shader input registers to data streams. These 621 assignments bind a specific vertex register to a single component within a 622 vertex stream. A vertex stream element is identified by a byte offset 623 within the stream and a type. The type specifies the arithmetic data type 624 plus the dimensionality (1, 2, 3, or 4 values). Stream data which is 625 less than 4 values are always expanded out to 4 values with zero or more 626 0.F values and one 1.F value. 627 628 - Assignment of vertex shader input registers to implicit data from the 629 primitive tessellator. This controls the loading of vertex data which is 630 not loaded from a stream, but rather is generated during primitive 631 tessellation prior to the vertex shader. 632 633 - Loading data into the constant memory at the time a shader is set as the 634 current shader. Each token specifies values for one or more contiguous 4 635 DWORD constant registers. This allows the shader to update an arbitrary 636 subset of the constant memory, overwriting the device state (which 637 contains the current values of the constant memory). Note that these 638 values can be subsequently overwritten (between DrawPrimitive calls) 639 during the time a shader is bound to a device via the 640 SetVertexShaderConstant method. 641 642 643 Declaration arrays are single-dimensional arrays of DWORDs composed of 644 multiple tokens each of which is one or more DWORDs. The single-DWORD 645 token value 0xFFFFFFFF is a special token used to indicate the end of the 646 declaration array. The single DWORD token value 0x00000000 is a NOP token 647 with is ignored during the declaration parsing. Note that 0x00000000 is a 648 valid value for DWORDs following the first DWORD for multiple word tokens. 649 650 [31:29] TokenType 651 0x0 - NOP (requires all DWORD bits to be zero) 652 0x1 - stream selector 653 0x2 - stream data definition (map to vertex input memory) 654 0x3 - vertex input memory from tessellator 655 0x4 - constant memory from shader 656 0x5 - extension 657 0x6 - reserved 658 0x7 - end-of-array (requires all DWORD bits to be 1) 659 660 NOP Token (single DWORD token) 661 [31:29] 0x0 662 [28:00] 0x0 663 664 Stream Selector (single DWORD token) 665 [31:29] 0x1 666 [28] indicates whether this is a tessellator stream 667 [27:04] 0x0 668 [03:00] stream selector (0..15) 669 670 Stream Data Definition (single DWORD token) 671 Vertex Input Register Load 672 [31:29] 0x2 673 [28] 0x0 674 [27:20] 0x0 675 [19:16] type (dimensionality and data type) 676 [15:04] 0x0 677 [03:00] vertex register address (0..15) 678 Data Skip (no register load) 679 [31:29] 0x2 680 [28] 0x1 681 [27:20] 0x0 682 [19:16] count of DWORDS to skip over (0..15) 683 [15:00] 0x0 684 Vertex Input Memory from Tessellator Data (single DWORD token) 685 [31:29] 0x3 686 [28] indicates whether data is normals or u/v 687 [27:24] 0x0 688 [23:20] vertex register address (0..15) 689 [19:16] type (dimensionality) 690 [15:04] 0x0 691 [03:00] vertex register address (0..15) 692 693 Constant Memory from Shader (multiple DWORD token) 694 [31:29] 0x4 695 [28:25] count of 4*DWORD constants to load (0..15) 696 [24:07] 0x0 697 [06:00] constant memory address (0..95) 698 699 Extension Token (single or multiple DWORD token) 700 [31:29] 0x5 701 [28:24] count of additional DWORDs in token (0..31) 702 [23:00] extension-specific information 703 704 End-of-array token (single DWORD token) 705 [31:29] 0x7 706 [28:00] 0x1fffffff 707 708 The stream selector token must be immediately followed by a contiguous set of stream data definition tokens. This token sequence fully defines that stream, including the set of elements within the stream, the order in which the elements appear, the type of each element, and the vertex register into which to load an element. 709 Streams are allowed to include data which is not loaded into a vertex register, thus allowing data which is not used for this shader to exist in the vertex stream. This skipped data is defined only by a count of DWORDs to skip over, since the type information is irrelevant. 710 The token sequence: 711 Stream Select: stream=0 712 Stream Data Definition (Load): type=FLOAT3; register=3 713 Stream Data Definition (Load): type=FLOAT3; register=4 714 Stream Data Definition (Skip): count=2 715 Stream Data Definition (Load): type=FLOAT2; register=7 716 717 defines stream zero to consist of 4 elements, 3 of which are loaded into registers and the fourth skipped over. Register 3 is loaded with the first three DWORDs in each vertex interpreted as FLOAT data. Register 4 is loaded with the 4th, 5th, and 6th DWORDs interpreted as FLOAT data. The next two DWORDs (7th and 8th) are skipped over and not loaded into any vertex input register. Register 7 is loaded with the 9th and 10th DWORDS interpreted as FLOAT data. 718 Placing of tokens other than NOPs between the Stream Selector and Stream Data Definition tokens is disallowed. 719 720 */ 721 722 typedef enum _D3DVSD_TOKENTYPE 723 { 724 D3DVSD_TOKEN_NOP = 0, // NOP or extension 725 D3DVSD_TOKEN_STREAM, // stream selector 726 D3DVSD_TOKEN_STREAMDATA, // stream data definition (map to vertex input memory) 727 D3DVSD_TOKEN_TESSELLATOR, // vertex input memory from tessellator 728 D3DVSD_TOKEN_CONSTMEM, // constant memory from shader 729 D3DVSD_TOKEN_EXT, // extension 730 D3DVSD_TOKEN_END = 7, // end-of-array (requires all DWORD bits to be 1) 731 D3DVSD_FORCE_DWORD = 0x7fffffff,// force 32-bit size enum 732 } D3DVSD_TOKENTYPE; 733 734 #define D3DVSD_TOKENTYPESHIFT 29 735 #define D3DVSD_TOKENTYPEMASK (7 << D3DVSD_TOKENTYPESHIFT) 736 737 #define D3DVSD_STREAMNUMBERSHIFT 0 738 #define D3DVSD_STREAMNUMBERMASK (0xF << D3DVSD_STREAMNUMBERSHIFT) 739 740 #define D3DVSD_DATALOADTYPESHIFT 28 741 #define D3DVSD_DATALOADTYPEMASK (0x1 << D3DVSD_DATALOADTYPESHIFT) 742 743 #define D3DVSD_DATATYPESHIFT 16 744 #define D3DVSD_DATATYPEMASK (0xF << D3DVSD_DATATYPESHIFT) 745 746 #define D3DVSD_SKIPCOUNTSHIFT 16 747 #define D3DVSD_SKIPCOUNTMASK (0xF << D3DVSD_SKIPCOUNTSHIFT) 748 749 #define D3DVSD_VERTEXREGSHIFT 0 750 #define D3DVSD_VERTEXREGMASK (0x1F << D3DVSD_VERTEXREGSHIFT) 751 752 #define D3DVSD_VERTEXREGINSHIFT 20 753 #define D3DVSD_VERTEXREGINMASK (0xF << D3DVSD_VERTEXREGINSHIFT) 754 755 #define D3DVSD_CONSTCOUNTSHIFT 25 756 #define D3DVSD_CONSTCOUNTMASK (0xF << D3DVSD_CONSTCOUNTSHIFT) 757 758 #define D3DVSD_CONSTADDRESSSHIFT 0 759 #define D3DVSD_CONSTADDRESSMASK (0x7F << D3DVSD_CONSTADDRESSSHIFT) 760 761 #define D3DVSD_CONSTRSSHIFT 16 762 #define D3DVSD_CONSTRSMASK (0x1FFF << D3DVSD_CONSTRSSHIFT) 763 764 #define D3DVSD_EXTCOUNTSHIFT 24 765 #define D3DVSD_EXTCOUNTMASK (0x1F << D3DVSD_EXTCOUNTSHIFT) 766 767 #define D3DVSD_EXTINFOSHIFT 0 768 #define D3DVSD_EXTINFOMASK (0xFFFFFF << D3DVSD_EXTINFOSHIFT) 769 770 #define D3DVSD_MAKETOKENTYPE(tokenType) ((tokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK) 771 772 // macros for generation of CreateVertexShader Declaration token array 773 774 // Set current stream 775 // _StreamNumber [0..(MaxStreams-1)] stream to get data from 776 // 777 #define D3DVSD_STREAM( _StreamNumber ) \ 778 (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (_StreamNumber)) 779 780 // Set tessellator stream 781 // 782 #define D3DVSD_STREAMTESSSHIFT 28 783 #define D3DVSD_STREAMTESSMASK (1 << D3DVSD_STREAMTESSSHIFT) 784 #define D3DVSD_STREAM_TESS( ) \ 785 (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK)) 786 787 // bind single vertex register to vertex element from vertex stream 788 // 789 // _VertexRegister [0..15] address of the vertex register 790 // _Type [D3DVSDT_*] dimensionality and arithmetic data type 791 792 #define D3DVSD_REG( _VertexRegister, _Type ) \ 793 (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | \ 794 ((_Type) << D3DVSD_DATATYPESHIFT) | (_VertexRegister)) 795 796 // Skip _DWORDCount DWORDs in vertex 797 // 798 #define D3DVSD_SKIP( _DWORDCount ) \ 799 (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | \ 800 ((_DWORDCount) << D3DVSD_SKIPCOUNTSHIFT)) 801 802 // load data into vertex shader constant memory 803 // 804 // _ConstantAddress [0..95] - address of constant array to begin filling data 805 // _Count [0..15] - number of constant vectors to load (4 DWORDs each) 806 // followed by 4*_Count DWORDS of data 807 // 808 #define D3DVSD_CONST( _ConstantAddress, _Count ) \ 809 (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | \ 810 ((_Count) << D3DVSD_CONSTCOUNTSHIFT) | (_ConstantAddress)) 811 812 // enable tessellator generated normals 813 // 814 // _VertexRegisterIn [0..15] address of vertex register whose input stream 815 // will be used in normal computation 816 // _VertexRegisterOut [0..15] address of vertex register to output the normal to 817 // 818 #define D3DVSD_TESSNORMAL( _VertexRegisterIn, _VertexRegisterOut ) \ 819 (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | \ 820 ((_VertexRegisterIn) << D3DVSD_VERTEXREGINSHIFT) | \ 821 ((0x02) << D3DVSD_DATATYPESHIFT) | (_VertexRegisterOut)) 822 823 // enable tessellator generated surface parameters 824 // 825 // _VertexRegister [0..15] address of vertex register to output parameters 826 // 827 #define D3DVSD_TESSUV( _VertexRegister ) \ 828 (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | \ 829 ((0x01) << D3DVSD_DATATYPESHIFT) | (_VertexRegister)) 830 831 // Generates END token 832 // 833 #define D3DVSD_END() 0xFFFFFFFF 834 835 // Generates NOP token 836 #define D3DVSD_NOP() 0x00000000 837 838 // bit declarations for _Type fields 839 #define D3DVSDT_FLOAT1 0x00 // 1D float expanded to (value, 0., 0., 1.) 840 #define D3DVSDT_FLOAT2 0x01 // 2D float expanded to (value, value, 0., 1.) 841 #define D3DVSDT_FLOAT3 0x02 // 3D float expanded to (value, value, value, 1.) 842 #define D3DVSDT_FLOAT4 0x03 // 4D float 843 #define D3DVSDT_D3DCOLOR 0x04 // 4D packed unsigned bytes mapped to 0. to 1. range 844 // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A) 845 #define D3DVSDT_UBYTE4 0x05 // 4D unsigned byte 846 #define D3DVSDT_SHORT2 0x06 // 2D signed short expanded to (value, value, 0., 1.) 847 #define D3DVSDT_SHORT4 0x07 // 4D signed short 848 849 // assignments of vertex input registers for fixed function vertex shader 850 // 851 #define D3DVSDE_POSITION 0 852 #define D3DVSDE_BLENDWEIGHT 1 853 #define D3DVSDE_BLENDINDICES 2 854 #define D3DVSDE_NORMAL 3 855 #define D3DVSDE_PSIZE 4 856 #define D3DVSDE_DIFFUSE 5 857 #define D3DVSDE_SPECULAR 6 858 #define D3DVSDE_TEXCOORD0 7 859 #define D3DVSDE_TEXCOORD1 8 860 #define D3DVSDE_TEXCOORD2 9 861 #define D3DVSDE_TEXCOORD3 10 862 #define D3DVSDE_TEXCOORD4 11 863 #define D3DVSDE_TEXCOORD5 12 864 #define D3DVSDE_TEXCOORD6 13 865 #define D3DVSDE_TEXCOORD7 14 866 #define D3DVSDE_POSITION2 15 867 #define D3DVSDE_NORMAL2 16 868 869 // Maximum supported number of texture coordinate sets 870 #define D3DDP_MAXTEXCOORD 8 871 872 873 // 874 // Instruction Token Bit Definitions 875 // 876 #define D3DSI_OPCODE_MASK 0x0000FFFF 877 878 typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE 879 { 880 D3DSIO_NOP = 0, // PS/VS 881 D3DSIO_MOV , // PS/VS 882 D3DSIO_ADD , // PS/VS 883 D3DSIO_SUB , // PS 884 D3DSIO_MAD , // PS/VS 885 D3DSIO_MUL , // PS/VS 886 D3DSIO_RCP , // VS 887 D3DSIO_RSQ , // VS 888 D3DSIO_DP3 , // PS/VS 889 D3DSIO_DP4 , // PS/VS 890 D3DSIO_MIN , // VS 891 D3DSIO_MAX , // VS 892 D3DSIO_SLT , // VS 893 D3DSIO_SGE , // VS 894 D3DSIO_EXP , // VS 895 D3DSIO_LOG , // VS 896 D3DSIO_LIT , // VS 897 D3DSIO_DST , // VS 898 D3DSIO_LRP , // PS 899 D3DSIO_FRC , // VS 900 D3DSIO_M4x4 , // VS 901 D3DSIO_M4x3 , // VS 902 D3DSIO_M3x4 , // VS 903 D3DSIO_M3x3 , // VS 904 D3DSIO_M3x2 , // VS 905 906 D3DSIO_TEXCOORD = 64, // PS 907 D3DSIO_TEXKILL , // PS 908 D3DSIO_TEX , // PS 909 D3DSIO_TEXBEM , // PS 910 D3DSIO_TEXBEML , // PS 911 D3DSIO_TEXREG2AR , // PS 912 D3DSIO_TEXREG2GB , // PS 913 D3DSIO_TEXM3x2PAD , // PS 914 D3DSIO_TEXM3x2TEX , // PS 915 D3DSIO_TEXM3x3PAD , // PS 916 D3DSIO_TEXM3x3TEX , // PS 917 D3DSIO_TEXM3x3DIFF , // PS 918 D3DSIO_TEXM3x3SPEC , // PS 919 D3DSIO_TEXM3x3VSPEC , // PS 920 D3DSIO_EXPP , // VS 921 D3DSIO_LOGP , // VS 922 D3DSIO_CND , // PS 923 D3DSIO_DEF , // PS 924 D3DSIO_TEXREG2RGB , // PS 925 D3DSIO_TEXDP3TEX , // PS 926 D3DSIO_TEXM3x2DEPTH , // PS 927 D3DSIO_TEXDP3 , // PS 928 D3DSIO_TEXM3x3 , // PS 929 D3DSIO_TEXDEPTH , // PS 930 D3DSIO_CMP , // PS 931 D3DSIO_BEM , // PS 932 933 D3DSIO_PHASE = 0xFFFD, 934 D3DSIO_COMMENT = 0xFFFE, 935 D3DSIO_END = 0xFFFF, 936 937 D3DSIO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 938 } D3DSHADER_INSTRUCTION_OPCODE_TYPE; 939 940 // 941 // Co-Issue Instruction Modifier - if set then this instruction is to be 942 // issued in parallel with the previous instruction(s) for which this bit 943 // is not set. 944 // 945 #define D3DSI_COISSUE 0x40000000 946 947 // 948 // Parameter Token Bit Definitions 949 // 950 #define D3DSP_REGNUM_MASK 0x00001FFF 951 952 // destination parameter write mask 953 #define D3DSP_WRITEMASK_0 0x00010000 // Component 0 (X;Red) 954 #define D3DSP_WRITEMASK_1 0x00020000 // Component 1 (Y;Green) 955 #define D3DSP_WRITEMASK_2 0x00040000 // Component 2 (Z;Blue) 956 #define D3DSP_WRITEMASK_3 0x00080000 // Component 3 (W;Alpha) 957 #define D3DSP_WRITEMASK_ALL 0x000F0000 // All Components 958 959 // destination parameter modifiers 960 #define D3DSP_DSTMOD_SHIFT 20 961 #define D3DSP_DSTMOD_MASK 0x00F00000 962 963 typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE 964 { 965 D3DSPDM_NONE = 0<<D3DSP_DSTMOD_SHIFT, // nop 966 D3DSPDM_SATURATE= 1<<D3DSP_DSTMOD_SHIFT, // clamp to 0. to 1. range 967 D3DSPDM_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 968 } D3DSHADER_PARAM_DSTMOD_TYPE; 969 970 // destination parameter 971 #define D3DSP_DSTSHIFT_SHIFT 24 972 #define D3DSP_DSTSHIFT_MASK 0x0F000000 973 974 // destination/source parameter register type 975 #define D3DSP_REGTYPE_SHIFT 28 976 #define D3DSP_REGTYPE_MASK 0x70000000 977 978 typedef enum _D3DSHADER_PARAM_REGISTER_TYPE 979 { 980 D3DSPR_TEMP = 0<<D3DSP_REGTYPE_SHIFT, // Temporary Register File 981 D3DSPR_INPUT = 1<<D3DSP_REGTYPE_SHIFT, // Input Register File 982 D3DSPR_CONST = 2<<D3DSP_REGTYPE_SHIFT, // Constant Register File 983 D3DSPR_ADDR = 3<<D3DSP_REGTYPE_SHIFT, // Address Register (VS) 984 D3DSPR_TEXTURE = 3<<D3DSP_REGTYPE_SHIFT, // Texture Register File (PS) 985 D3DSPR_RASTOUT = 4<<D3DSP_REGTYPE_SHIFT, // Rasterizer Register File 986 D3DSPR_ATTROUT = 5<<D3DSP_REGTYPE_SHIFT, // Attribute Output Register File 987 D3DSPR_TEXCRDOUT= 6<<D3DSP_REGTYPE_SHIFT, // Texture Coordinate Output Register File 988 D3DSPR_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 989 } D3DSHADER_PARAM_REGISTER_TYPE; 990 991 // Register offsets in the Rasterizer Register File 992 // 993 typedef enum _D3DVS_RASTOUT_OFFSETS 994 { 995 D3DSRO_POSITION = 0, 996 D3DSRO_FOG, 997 D3DSRO_POINT_SIZE, 998 D3DSRO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 999 } D3DVS_RASTOUT_OFFSETS; 1000 1001 // Source operand addressing modes 1002 1003 #define D3DVS_ADDRESSMODE_SHIFT 13 1004 #define D3DVS_ADDRESSMODE_MASK (1 << D3DVS_ADDRESSMODE_SHIFT) 1005 1006 typedef enum _D3DVS_ADDRESSMODE_TYPE 1007 { 1008 D3DVS_ADDRMODE_ABSOLUTE = (0 << D3DVS_ADDRESSMODE_SHIFT), 1009 D3DVS_ADDRMODE_RELATIVE = (1 << D3DVS_ADDRESSMODE_SHIFT), // Relative to register A0 1010 D3DVS_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 1011 } D3DVS_ADDRESSMODE_TYPE; 1012 1013 // Source operand swizzle definitions 1014 // 1015 #define D3DVS_SWIZZLE_SHIFT 16 1016 #define D3DVS_SWIZZLE_MASK 0x00FF0000 1017 1018 // The following bits define where to take component X from: 1019 1020 #define D3DVS_X_X (0 << D3DVS_SWIZZLE_SHIFT) 1021 #define D3DVS_X_Y (1 << D3DVS_SWIZZLE_SHIFT) 1022 #define D3DVS_X_Z (2 << D3DVS_SWIZZLE_SHIFT) 1023 #define D3DVS_X_W (3 << D3DVS_SWIZZLE_SHIFT) 1024 1025 // The following bits define where to take component Y from: 1026 1027 #define D3DVS_Y_X (0 << (D3DVS_SWIZZLE_SHIFT + 2)) 1028 #define D3DVS_Y_Y (1 << (D3DVS_SWIZZLE_SHIFT + 2)) 1029 #define D3DVS_Y_Z (2 << (D3DVS_SWIZZLE_SHIFT + 2)) 1030 #define D3DVS_Y_W (3 << (D3DVS_SWIZZLE_SHIFT + 2)) 1031 1032 // The following bits define where to take component Z from: 1033 1034 #define D3DVS_Z_X (0 << (D3DVS_SWIZZLE_SHIFT + 4)) 1035 #define D3DVS_Z_Y (1 << (D3DVS_SWIZZLE_SHIFT + 4)) 1036 #define D3DVS_Z_Z (2 << (D3DVS_SWIZZLE_SHIFT + 4)) 1037 #define D3DVS_Z_W (3 << (D3DVS_SWIZZLE_SHIFT + 4)) 1038 1039 // The following bits define where to take component W from: 1040 1041 #define D3DVS_W_X (0 << (D3DVS_SWIZZLE_SHIFT + 6)) 1042 #define D3DVS_W_Y (1 << (D3DVS_SWIZZLE_SHIFT + 6)) 1043 #define D3DVS_W_Z (2 << (D3DVS_SWIZZLE_SHIFT + 6)) 1044 #define D3DVS_W_W (3 << (D3DVS_SWIZZLE_SHIFT + 6)) 1045 1046 // Value when there is no swizzle (X is taken from X, Y is taken from Y, 1047 // Z is taken from Z, W is taken from W 1048 // 1049 #define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W) 1050 1051 // source parameter swizzle 1052 #define D3DSP_SWIZZLE_SHIFT 16 1053 #define D3DSP_SWIZZLE_MASK 0x00FF0000 1054 1055 #define D3DSP_NOSWIZZLE \ 1056 ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \ 1057 (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \ 1058 (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \ 1059 (3 << (D3DSP_SWIZZLE_SHIFT + 6)) ) 1060 1061 // pixel-shader swizzle ops 1062 #define D3DSP_REPLICATERED \ 1063 ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \ 1064 (0 << (D3DSP_SWIZZLE_SHIFT + 2)) | \ 1065 (0 << (D3DSP_SWIZZLE_SHIFT + 4)) | \ 1066 (0 << (D3DSP_SWIZZLE_SHIFT + 6)) ) 1067 1068 #define D3DSP_REPLICATEGREEN \ 1069 ( (1 << (D3DSP_SWIZZLE_SHIFT + 0)) | \ 1070 (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \ 1071 (1 << (D3DSP_SWIZZLE_SHIFT + 4)) | \ 1072 (1 << (D3DSP_SWIZZLE_SHIFT + 6)) ) 1073 1074 #define D3DSP_REPLICATEBLUE \ 1075 ( (2 << (D3DSP_SWIZZLE_SHIFT + 0)) | \ 1076 (2 << (D3DSP_SWIZZLE_SHIFT + 2)) | \ 1077 (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \ 1078 (2 << (D3DSP_SWIZZLE_SHIFT + 6)) ) 1079 1080 #define D3DSP_REPLICATEALPHA \ 1081 ( (3 << (D3DSP_SWIZZLE_SHIFT + 0)) | \ 1082 (3 << (D3DSP_SWIZZLE_SHIFT + 2)) | \ 1083 (3 << (D3DSP_SWIZZLE_SHIFT + 4)) | \ 1084 (3 << (D3DSP_SWIZZLE_SHIFT + 6)) ) 1085 1086 // source parameter modifiers 1087 #define D3DSP_SRCMOD_SHIFT 24 1088 #define D3DSP_SRCMOD_MASK 0x0F000000 1089 1090 typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE 1091 { 1092 D3DSPSM_NONE = 0<<D3DSP_SRCMOD_SHIFT, // nop 1093 D3DSPSM_NEG = 1<<D3DSP_SRCMOD_SHIFT, // negate 1094 D3DSPSM_BIAS = 2<<D3DSP_SRCMOD_SHIFT, // bias 1095 D3DSPSM_BIASNEG = 3<<D3DSP_SRCMOD_SHIFT, // bias and negate 1096 D3DSPSM_SIGN = 4<<D3DSP_SRCMOD_SHIFT, // sign 1097 D3DSPSM_SIGNNEG = 5<<D3DSP_SRCMOD_SHIFT, // sign and negate 1098 D3DSPSM_COMP = 6<<D3DSP_SRCMOD_SHIFT, // complement 1099 D3DSPSM_X2 = 7<<D3DSP_SRCMOD_SHIFT, // *2 1100 D3DSPSM_X2NEG = 8<<D3DSP_SRCMOD_SHIFT, // *2 and negate 1101 D3DSPSM_DZ = 9<<D3DSP_SRCMOD_SHIFT, // divide through by z component 1102 D3DSPSM_DW = 10<<D3DSP_SRCMOD_SHIFT, // divide through by w component 1103 D3DSPSM_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 1104 } D3DSHADER_PARAM_SRCMOD_TYPE; 1105 1106 // pixel shader version token 1107 #define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor)) 1108 1109 // vertex shader version token 1110 #define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor)) 1111 1112 // extract major/minor from version cap 1113 #define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF) 1114 #define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF) 1115 1116 // destination/source parameter register type 1117 #define D3DSI_COMMENTSIZE_SHIFT 16 1118 #define D3DSI_COMMENTSIZE_MASK 0x7FFF0000 1119 #define D3DSHADER_COMMENT(_DWordSize) \ 1120 ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT) 1121 1122 // pixel/vertex shader end token 1123 #define D3DPS_END() 0x0000FFFF 1124 #define D3DVS_END() 0x0000FFFF 1125 1126 //--------------------------------------------------------------------- 1127 1128 // High order surfaces 1129 // 1130 typedef enum _D3DBASISTYPE 1131 { 1132 D3DBASIS_BEZIER = 0, 1133 D3DBASIS_BSPLINE = 1, 1134 D3DBASIS_INTERPOLATE = 2, 1135 D3DBASIS_FORCE_DWORD = 0x7fffffff, 1136 } D3DBASISTYPE; 1137 1138 typedef enum _D3DORDERTYPE 1139 { 1140 D3DORDER_LINEAR = 1, 1141 D3DORDER_QUADRATIC = 2, 1142 D3DORDER_CUBIC = 3, 1143 D3DORDER_QUINTIC = 5, 1144 D3DORDER_FORCE_DWORD = 0x7fffffff, 1145 } D3DORDERTYPE; 1146 1147 typedef enum _D3DPATCHEDGESTYLE 1148 { 1149 D3DPATCHEDGE_DISCRETE = 0, 1150 D3DPATCHEDGE_CONTINUOUS = 1, 1151 D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff, 1152 } D3DPATCHEDGESTYLE; 1153 1154 typedef enum _D3DSTATEBLOCKTYPE 1155 { 1156 D3DSBT_ALL = 1, // capture all state 1157 D3DSBT_PIXELSTATE = 2, // capture pixel state 1158 D3DSBT_VERTEXSTATE = 3, // capture vertex state 1159 D3DSBT_FORCE_DWORD = 0x7fffffff, 1160 } D3DSTATEBLOCKTYPE; 1161 1162 // The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state. 1163 // 1164 typedef enum _D3DVERTEXBLENDFLAGS 1165 { 1166 D3DVBF_DISABLE = 0, // Disable vertex blending 1167 D3DVBF_1WEIGHTS = 1, // 2 matrix blending 1168 D3DVBF_2WEIGHTS = 2, // 3 matrix blending 1169 D3DVBF_3WEIGHTS = 3, // 4 matrix blending 1170 D3DVBF_TWEENING = 255, // blending using D3DRS_TWEENFACTOR 1171 D3DVBF_0WEIGHTS = 256, // one matrix is used with weight 1.0 1172 D3DVBF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum 1173 } D3DVERTEXBLENDFLAGS; 1174 1175 typedef enum _D3DTEXTURETRANSFORMFLAGS { 1176 D3DTTFF_DISABLE = 0, // texture coordinates are passed directly 1177 D3DTTFF_COUNT1 = 1, // rasterizer should expect 1-D texture coords 1178 D3DTTFF_COUNT2 = 2, // rasterizer should expect 2-D texture coords 1179 D3DTTFF_COUNT3 = 3, // rasterizer should expect 3-D texture coords 1180 D3DTTFF_COUNT4 = 4, // rasterizer should expect 4-D texture coords 1181 D3DTTFF_PROJECTED = 256, // texcoords to be divided by COUNTth element 1182 D3DTTFF_FORCE_DWORD = 0x7fffffff, 1183 } D3DTEXTURETRANSFORMFLAGS; 1184 1185 // Macros to set texture coordinate format bits in the FVF id 1186 1187 #define D3DFVF_TEXTUREFORMAT2 0 // Two floating point values 1188 #define D3DFVF_TEXTUREFORMAT1 3 // One floating point value 1189 #define D3DFVF_TEXTUREFORMAT3 1 // Three floating point values 1190 #define D3DFVF_TEXTUREFORMAT4 2 // Four floating point values 1191 1192 #define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16)) 1193 #define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2) 1194 #define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16)) 1195 #define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16)) 1196 1197 1198 //--------------------------------------------------------------------- 1199 1200 /* Direct3D8 Device types */ 1201 typedef enum _D3DDEVTYPE 1202 { 1203 D3DDEVTYPE_HAL = 1, 1204 D3DDEVTYPE_REF = 2, 1205 D3DDEVTYPE_SW = 3, 1206 1207 D3DDEVTYPE_FORCE_DWORD = 0x7fffffff 1208 } D3DDEVTYPE; 1209 1210 /* Multi-Sample buffer types */ 1211 typedef enum _D3DMULTISAMPLE_TYPE 1212 { 1213 D3DMULTISAMPLE_NONE = 0, 1214 D3DMULTISAMPLE_2_SAMPLES = 2, 1215 D3DMULTISAMPLE_3_SAMPLES = 3, 1216 D3DMULTISAMPLE_4_SAMPLES = 4, 1217 D3DMULTISAMPLE_5_SAMPLES = 5, 1218 D3DMULTISAMPLE_6_SAMPLES = 6, 1219 D3DMULTISAMPLE_7_SAMPLES = 7, 1220 D3DMULTISAMPLE_8_SAMPLES = 8, 1221 D3DMULTISAMPLE_9_SAMPLES = 9, 1222 D3DMULTISAMPLE_10_SAMPLES = 10, 1223 D3DMULTISAMPLE_11_SAMPLES = 11, 1224 D3DMULTISAMPLE_12_SAMPLES = 12, 1225 D3DMULTISAMPLE_13_SAMPLES = 13, 1226 D3DMULTISAMPLE_14_SAMPLES = 14, 1227 D3DMULTISAMPLE_15_SAMPLES = 15, 1228 D3DMULTISAMPLE_16_SAMPLES = 16, 1229 1230 D3DMULTISAMPLE_FORCE_DWORD = 0x7fffffff 1231 } D3DMULTISAMPLE_TYPE; 1232 1233 /* Formats 1234 * Most of these names have the following convention: 1235 * A = Alpha 1236 * R = Red 1237 * G = Green 1238 * B = Blue 1239 * X = Unused Bits 1240 * P = Palette 1241 * L = Luminance 1242 * U = dU coordinate for BumpMap 1243 * V = dV coordinate for BumpMap 1244 * S = Stencil 1245 * D = Depth (e.g. Z or W buffer) 1246 * 1247 * Further, the order of the pieces are from MSB first; hence 1248 * D3DFMT_A8L8 indicates that the high byte of this two byte 1249 * format is alpha. 1250 * 1251 * D16 indicates: 1252 * - An integer 16-bit value. 1253 * - An app-lockable surface. 1254 * 1255 * All Depth/Stencil formats except D3DFMT_D16_LOCKABLE indicate: 1256 * - no particular bit ordering per pixel, and 1257 * - are not app lockable, and 1258 * - the driver is allowed to consume more than the indicated 1259 * number of bits per Depth channel (but not Stencil channel). 1260 */ 1261 #ifndef MAKEFOURCC 1262 #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ 1263 ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ 1264 ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) 1265 #endif /* defined(MAKEFOURCC) */ 1266 1267 1268 typedef enum _D3DFORMAT 1269 { 1270 D3DFMT_UNKNOWN = 0, 1271 1272 D3DFMT_R8G8B8 = 20, 1273 D3DFMT_A8R8G8B8 = 21, 1274 D3DFMT_X8R8G8B8 = 22, 1275 D3DFMT_R5G6B5 = 23, 1276 D3DFMT_X1R5G5B5 = 24, 1277 D3DFMT_A1R5G5B5 = 25, 1278 D3DFMT_A4R4G4B4 = 26, 1279 D3DFMT_R3G3B2 = 27, 1280 D3DFMT_A8 = 28, 1281 D3DFMT_A8R3G3B2 = 29, 1282 D3DFMT_X4R4G4B4 = 30, 1283 D3DFMT_A2B10G10R10 = 31, 1284 D3DFMT_G16R16 = 34, 1285 1286 D3DFMT_A8P8 = 40, 1287 D3DFMT_P8 = 41, 1288 1289 D3DFMT_L8 = 50, 1290 D3DFMT_A8L8 = 51, 1291 D3DFMT_A4L4 = 52, 1292 1293 D3DFMT_V8U8 = 60, 1294 D3DFMT_L6V5U5 = 61, 1295 D3DFMT_X8L8V8U8 = 62, 1296 D3DFMT_Q8W8V8U8 = 63, 1297 D3DFMT_V16U16 = 64, 1298 D3DFMT_W11V11U10 = 65, 1299 D3DFMT_A2W10V10U10 = 67, 1300 1301 D3DFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'), 1302 D3DFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'), 1303 D3DFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'), 1304 D3DFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'), 1305 D3DFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'), 1306 D3DFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'), 1307 D3DFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'), 1308 1309 D3DFMT_D16_LOCKABLE = 70, 1310 D3DFMT_D32 = 71, 1311 D3DFMT_D15S1 = 73, 1312 D3DFMT_D24S8 = 75, 1313 D3DFMT_D16 = 80, 1314 D3DFMT_D24X8 = 77, 1315 D3DFMT_D24X4S4 = 79, 1316 1317 1318 D3DFMT_VERTEXDATA =100, 1319 D3DFMT_INDEX16 =101, 1320 D3DFMT_INDEX32 =102, 1321 1322 D3DFMT_FORCE_DWORD =0x7fffffff 1323 } D3DFORMAT; 1324 1325 /* Display Modes */ 1326 typedef struct _D3DDISPLAYMODE 1327 { 1328 UINT Width; 1329 UINT Height; 1330 UINT RefreshRate; 1331 D3DFORMAT Format; 1332 } D3DDISPLAYMODE; 1333 1334 /* Creation Parameters */ 1335 typedef struct _D3DDEVICE_CREATION_PARAMETERS 1336 { 1337 UINT AdapterOrdinal; 1338 D3DDEVTYPE DeviceType; 1339 HWND hFocusWindow; 1340 DWORD BehaviorFlags; 1341 } D3DDEVICE_CREATION_PARAMETERS; 1342 1343 1344 /* SwapEffects */ 1345 typedef enum _D3DSWAPEFFECT 1346 { 1347 D3DSWAPEFFECT_DISCARD = 1, 1348 D3DSWAPEFFECT_FLIP = 2, 1349 D3DSWAPEFFECT_COPY = 3, 1350 D3DSWAPEFFECT_COPY_VSYNC = 4, 1351 1352 D3DSWAPEFFECT_FORCE_DWORD = 0x7fffffff 1353 } D3DSWAPEFFECT; 1354 1355 /* Pool types */ 1356 typedef enum _D3DPOOL { 1357 D3DPOOL_DEFAULT = 0, 1358 D3DPOOL_MANAGED = 1, 1359 D3DPOOL_SYSTEMMEM = 2, 1360 D3DPOOL_SCRATCH = 3, 1361 1362 D3DPOOL_FORCE_DWORD = 0x7fffffff 1363 } D3DPOOL; 1364 1365 1366 /* RefreshRate pre-defines */ 1367 #define D3DPRESENT_RATE_DEFAULT 0x00000000 1368 #define D3DPRESENT_RATE_UNLIMITED 0x7fffffff 1369 1370 1371 /* Resize Optional Parameters */ 1372 typedef struct _D3DPRESENT_PARAMETERS_ 1373 { 1374 UINT BackBufferWidth; 1375 UINT BackBufferHeight; 1376 D3DFORMAT BackBufferFormat; 1377 UINT BackBufferCount; 1378 1379 D3DMULTISAMPLE_TYPE MultiSampleType; 1380 1381 D3DSWAPEFFECT SwapEffect; 1382 HWND hDeviceWindow; 1383 BOOL Windowed; 1384 BOOL EnableAutoDepthStencil; 1385 D3DFORMAT AutoDepthStencilFormat; 1386 DWORD Flags; 1387 1388 /* Following elements must be zero for Windowed mode */ 1389 UINT FullScreen_RefreshRateInHz; 1390 UINT FullScreen_PresentationInterval; 1391 1392 } D3DPRESENT_PARAMETERS; 1393 1394 // Values for D3DPRESENT_PARAMETERS.Flags 1395 1396 #define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x00000001 1397 1398 1399 /* Gamma Ramp: Same as DX7 */ 1400 1401 typedef struct _D3DGAMMARAMP 1402 { 1403 WORD red [256]; 1404 WORD green[256]; 1405 WORD blue [256]; 1406 } D3DGAMMARAMP; 1407 1408 /* Back buffer types */ 1409 typedef enum _D3DBACKBUFFER_TYPE 1410 { 1411 D3DBACKBUFFER_TYPE_MONO = 0, 1412 D3DBACKBUFFER_TYPE_LEFT = 1, 1413 D3DBACKBUFFER_TYPE_RIGHT = 2, 1414 1415 D3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff 1416 } D3DBACKBUFFER_TYPE; 1417 1418 1419 /* Types */ 1420 typedef enum _D3DRESOURCETYPE { 1421 D3DRTYPE_SURFACE = 1, 1422 D3DRTYPE_VOLUME = 2, 1423 D3DRTYPE_TEXTURE = 3, 1424 D3DRTYPE_VOLUMETEXTURE = 4, 1425 D3DRTYPE_CUBETEXTURE = 5, 1426 D3DRTYPE_VERTEXBUFFER = 6, 1427 D3DRTYPE_INDEXBUFFER = 7, 1428 1429 1430 D3DRTYPE_FORCE_DWORD = 0x7fffffff 1431 } D3DRESOURCETYPE; 1432 1433 /* Usages */ 1434 #define D3DUSAGE_RENDERTARGET (0x00000001L) 1435 #define D3DUSAGE_DEPTHSTENCIL (0x00000002L) 1436 1437 /* Usages for Vertex/Index buffers */ 1438 #define D3DUSAGE_WRITEONLY (0x00000008L) 1439 #define D3DUSAGE_SOFTWAREPROCESSING (0x00000010L) 1440 #define D3DUSAGE_DONOTCLIP (0x00000020L) 1441 #define D3DUSAGE_POINTS (0x00000040L) 1442 #define D3DUSAGE_RTPATCHES (0x00000080L) 1443 #define D3DUSAGE_NPATCHES (0x00000100L) 1444 #define D3DUSAGE_DYNAMIC (0x00000200L) 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 /* CubeMap Face identifiers */ 1455 typedef enum _D3DCUBEMAP_FACES 1456 { 1457 D3DCUBEMAP_FACE_POSITIVE_X = 0, 1458 D3DCUBEMAP_FACE_NEGATIVE_X = 1, 1459 D3DCUBEMAP_FACE_POSITIVE_Y = 2, 1460 D3DCUBEMAP_FACE_NEGATIVE_Y = 3, 1461 D3DCUBEMAP_FACE_POSITIVE_Z = 4, 1462 D3DCUBEMAP_FACE_NEGATIVE_Z = 5, 1463 1464 D3DCUBEMAP_FACE_FORCE_DWORD = 0x7fffffff 1465 } D3DCUBEMAP_FACES; 1466 1467 1468 /* Lock flags */ 1469 1470 #define D3DLOCK_READONLY 0x00000010L 1471 #define D3DLOCK_DISCARD 0x00002000L 1472 #define D3DLOCK_NOOVERWRITE 0x00001000L 1473 #define D3DLOCK_NOSYSLOCK 0x00000800L 1474 1475 #define D3DLOCK_NO_DIRTY_UPDATE 0x00008000L 1476 1477 1478 1479 1480 1481 1482 /* Vertex Buffer Description */ 1483 typedef struct _D3DVERTEXBUFFER_DESC 1484 { 1485 D3DFORMAT Format; 1486 D3DRESOURCETYPE Type; 1487 DWORD Usage; 1488 D3DPOOL Pool; 1489 UINT Size; 1490 1491 DWORD FVF; 1492 1493 } D3DVERTEXBUFFER_DESC; 1494 1495 /* Index Buffer Description */ 1496 typedef struct _D3DINDEXBUFFER_DESC 1497 { 1498 D3DFORMAT Format; 1499 D3DRESOURCETYPE Type; 1500 DWORD Usage; 1501 D3DPOOL Pool; 1502 UINT Size; 1503 } D3DINDEXBUFFER_DESC; 1504 1505 1506 /* Surface Description */ 1507 typedef struct _D3DSURFACE_DESC 1508 { 1509 D3DFORMAT Format; 1510 D3DRESOURCETYPE Type; 1511 DWORD Usage; 1512 D3DPOOL Pool; 1513 UINT Size; 1514 1515 D3DMULTISAMPLE_TYPE MultiSampleType; 1516 UINT Width; 1517 UINT Height; 1518 } D3DSURFACE_DESC; 1519 1520 typedef struct _D3DVOLUME_DESC 1521 { 1522 D3DFORMAT Format; 1523 D3DRESOURCETYPE Type; 1524 DWORD Usage; 1525 D3DPOOL Pool; 1526 UINT Size; 1527 1528 UINT Width; 1529 UINT Height; 1530 UINT Depth; 1531 } D3DVOLUME_DESC; 1532 1533 /* Structure for LockRect */ 1534 typedef struct _D3DLOCKED_RECT 1535 { 1536 INT Pitch; 1537 void* pBits; 1538 } D3DLOCKED_RECT; 1539 1540 /* Structures for LockBox */ 1541 typedef struct _D3DBOX 1542 { 1543 UINT Left; 1544 UINT Top; 1545 UINT Right; 1546 UINT Bottom; 1547 UINT Front; 1548 UINT Back; 1549 } D3DBOX; 1550 1551 typedef struct _D3DLOCKED_BOX 1552 { 1553 INT RowPitch; 1554 INT SlicePitch; 1555 void* pBits; 1556 } D3DLOCKED_BOX; 1557 1558 /* Structures for LockRange */ 1559 typedef struct _D3DRANGE 1560 { 1561 UINT Offset; 1562 UINT Size; 1563 } D3DRANGE; 1564 1565 /* Structures for high order primitives */ 1566 typedef struct _D3DRECTPATCH_INFO 1567 { 1568 UINT StartVertexOffsetWidth; 1569 UINT StartVertexOffsetHeight; 1570 UINT Width; 1571 UINT Height; 1572 UINT Stride; 1573 D3DBASISTYPE Basis; 1574 D3DORDERTYPE Order; 1575 } D3DRECTPATCH_INFO; 1576 1577 typedef struct _D3DTRIPATCH_INFO 1578 { 1579 UINT StartVertexOffset; 1580 UINT NumVertices; 1581 D3DBASISTYPE Basis; 1582 D3DORDERTYPE Order; 1583 } D3DTRIPATCH_INFO; 1584 1585 /* Adapter Identifier */ 1586 1587 #define MAX_DEVICE_IDENTIFIER_STRING 512 1588 typedef struct _D3DADAPTER_IDENTIFIER8 1589 { 1590 char Driver[MAX_DEVICE_IDENTIFIER_STRING]; 1591 char Description[MAX_DEVICE_IDENTIFIER_STRING]; 1592 1593 #ifdef _WIN32 1594 LARGE_INTEGER DriverVersion; /* Defined for 32 bit components */ 1595 #else 1596 DWORD DriverVersionLowPart; /* Defined for 16 bit driver components */ 1597 DWORD DriverVersionHighPart; 1598 #endif 1599 1600 DWORD VendorId; 1601 DWORD DeviceId; 1602 DWORD SubSysId; 1603 DWORD Revision; 1604 1605 GUID DeviceIdentifier; 1606 1607 DWORD WHQLLevel; 1608 1609 } D3DADAPTER_IDENTIFIER8; 1610 1611 1612 /* Raster Status structure returned by GetRasterStatus */ 1613 typedef struct _D3DRASTER_STATUS 1614 { 1615 BOOL InVBlank; 1616 UINT ScanLine; 1617 } D3DRASTER_STATUS; 1618 1619 1620 1621 /* Debug monitor tokens (DEBUG only) 1622 1623 Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as 1624 passing a token to the debug monitor. For example, if, after passing 1625 D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values 1626 are passed in, the enabled/disabled state of the debug 1627 monitor will still persist. 1628 1629 The debug monitor defaults to enabled. 1630 1631 Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use. 1632 */ 1633 typedef enum _D3DDEBUGMONITORTOKENS { 1634 D3DDMT_ENABLE = 0, // enable debug monitor 1635 D3DDMT_DISABLE = 1, // disable debug monitor 1636 D3DDMT_FORCE_DWORD = 0x7fffffff, 1637 } D3DDEBUGMONITORTOKENS; 1638 1639 // GetInfo IDs 1640 1641 #define D3DDEVINFOID_RESOURCEMANAGER 5 /* Used with D3DDEVINFO_RESOURCEMANAGER */ 1642 #define D3DDEVINFOID_VERTEXSTATS 6 /* Used with D3DDEVINFO_D3DVERTEXSTATS */ 1643 1644 typedef struct _D3DRESOURCESTATS 1645 { 1646 // Data collected since last Present() 1647 BOOL bThrashing; /* indicates if thrashing */ 1648 DWORD ApproxBytesDownloaded; /* Approximate number of bytes downloaded by resource manager */ 1649 DWORD NumEvicts; /* number of objects evicted */ 1650 DWORD NumVidCreates; /* number of objects created in video memory */ 1651 DWORD LastPri; /* priority of last object evicted */ 1652 DWORD NumUsed; /* number of objects set to the device */ 1653 DWORD NumUsedInVidMem; /* number of objects set to the device, which are already in video memory */ 1654 // Persistent data 1655 DWORD WorkingSet; /* number of objects in video memory */ 1656 DWORD WorkingSetBytes; /* number of bytes in video memory */ 1657 DWORD TotalManaged; /* total number of managed objects */ 1658 DWORD TotalBytes; /* total number of bytes of managed objects */ 1659 } D3DRESOURCESTATS; 1660 1661 #define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1) 1662 1663 typedef struct _D3DDEVINFO_RESOURCEMANAGER 1664 { 1665 D3DRESOURCESTATS stats[D3DRTYPECOUNT]; 1666 } D3DDEVINFO_RESOURCEMANAGER, *LPD3DDEVINFO_RESOURCEMANAGER; 1667 1668 typedef struct _D3DDEVINFO_D3DVERTEXSTATS 1669 { 1670 DWORD NumRenderedTriangles; /* total number of triangles that are not clipped in this frame */ 1671 DWORD NumExtraClippingTriangles; /* Number of new triangles generated by clipping */ 1672 } D3DDEVINFO_D3DVERTEXSTATS, *LPD3DDEVINFO_D3DVERTEXSTATS; 1673 1674 1675 #pragma pack() 1676 #if _MSC_VER >= 1200 1677 #pragma warning(pop) 1678 #else 1679 #pragma warning(default:4201) 1680 #endif 1681 1682 #endif /* (DIRECT3D_VERSION >= 0x0800) */ 1683 #endif /* _D3D8TYPES(P)_H_ */ 1684 1685