Home | History | Annotate | Download | only in D3D9
      1 /*
      2  * Copyright 2011 Joakim Sindholt <opensource (at) zhasha.com>
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a
      5  * copy of this software and associated documentation files (the "Software"),
      6  * to deal in the Software without restriction, including without limitation
      7  * on the rights to use, copy, modify, merge, publish, distribute, sub
      8  * license, and/or sell copies of the Software, and to permit persons to whom
      9  * the Software is furnished to do so, subject to the following conditions:
     10  *
     11  * The above copyright notice and this permission notice (including the next
     12  * paragraph) shall be included in all copies or substantial portions of the
     13  * Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
     18  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
     19  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
     20  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
     21  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
     22 
     23 #ifndef _D3D9TYPES_H_
     24 #define _D3D9TYPES_H_
     25 
     26 #ifdef _WIN32
     27 #include <windows.h>
     28 #else /* _WIN32 */
     29 #include <stdint.h>
     30 
     31 #ifndef NULL
     32 #define NULL 0
     33 #endif
     34 
     35 /********************************************************
     36  * Windows types                                        *
     37  ********************************************************/
     38 /* Function macros */
     39 #define FAILED(x)    ((HRESULT)(x) < 0)
     40 #define SUCCEEDED(x) ((HRESULT)(x) >= 0)
     41 
     42 #define MAKE_HRESULT(sev,fac,code) \
     43     ( \
     44         ((HRESULT)(sev) << 31) | \
     45         ((HRESULT)(fac) << 16) | \
     46          (HRESULT)(code) \
     47     )
     48 
     49 /* Windows errors */
     50 #define E_OUTOFMEMORY MAKE_HRESULT(1, 0x007, 14)
     51 #define E_NOINTERFACE MAKE_HRESULT(1, 0x000, 0x4002)
     52 #define E_POINTER     MAKE_HRESULT(1, 0x000, 0x4003)
     53 #define E_FAIL        MAKE_HRESULT(1, 0x000, 0x4005)
     54 
     55 #define S_OK          ((HRESULT)0)
     56 #define S_FALSE       ((HRESULT)1)
     57 
     58 /* WORD types */
     59 typedef uint8_t BYTE;
     60 typedef uint16_t WORD;
     61 typedef uint32_t DWORD;
     62 
     63 /* Renamed types */
     64 typedef int BOOL;
     65 #ifndef FALSE
     66 #define FALSE 0
     67 #define TRUE (!FALSE)
     68 #endif
     69 
     70 typedef uint32_t UINT32;
     71 typedef uint64_t UINT64;
     72 
     73 typedef unsigned short USHORT;
     74 typedef unsigned int UINT;
     75 typedef unsigned int ULONG;
     76 typedef unsigned long long ULONGLONG;
     77 
     78 typedef short SHORT;
     79 typedef int INT;
     80 typedef int LONG;
     81 typedef long long LONGLONG;
     82 typedef float FLOAT;
     83 
     84 /* Windows types */
     85 typedef void *HANDLE;
     86 typedef int32_t HRESULT;
     87 typedef HANDLE HWND;
     88 typedef HANDLE HMONITOR;
     89 typedef HANDLE HDC;
     90 
     91 /* Unions */
     92 typedef union {
     93     struct {
     94         DWORD LowPart;
     95         LONG HighPart;
     96     };
     97 
     98     struct {
     99         DWORD LowPart;
    100         LONG HighPart;
    101     } u;
    102 
    103     LONGLONG QuadPart;
    104 } LARGE_INTEGER, *LPLARGE_INTEGER;
    105 
    106 /* Structs */
    107 
    108 typedef struct _GUID {
    109     DWORD Data1;
    110     WORD Data2;
    111     WORD Data3;
    112     BYTE Data4[8];
    113 } GUID, IID, *LPGUID, *REFGUID, *REFIID;
    114 
    115 typedef struct _LUID {
    116     DWORD LowPart;
    117     LONG HighPart;
    118 } LUID, *LPLUID, *PLUID;
    119 
    120 typedef struct _PALETTEENTRY {
    121     BYTE peRed;
    122     BYTE peGreen;
    123     BYTE peBlue;
    124     BYTE peFlags;
    125 } PALETTEENTRY, *LPPALETTEENTRY;
    126 
    127 typedef struct _POINT {
    128     LONG x;
    129     LONG y;
    130 } POINT, *LPPOINT;
    131 
    132 typedef struct _RECT {
    133     LONG left;
    134     LONG top;
    135     LONG right;
    136     LONG bottom;
    137 } RECT, *LPRECT;
    138 
    139 typedef struct _RGNDATAHEADER {
    140     DWORD dwSize;
    141     DWORD iType;
    142     DWORD nCount;
    143     DWORD nRgnSize;
    144     RECT rcBound;
    145 } RGNDATAHEADER, *LPRGNDATAHEADER;
    146 
    147 typedef struct _RGNDATA {
    148     RGNDATAHEADER rdh;
    149     char Buffer[1];
    150 } RGNDATA, *LPRGNDATA;
    151 #endif /* _WIN32 */
    152 
    153 #ifndef MAKEFOURCC
    154 #define MAKEFOURCC(a, b, c, d) \
    155     ( \
    156          (DWORD)(BYTE)(a) | \
    157         ((DWORD)(BYTE)(b) << 8) | \
    158         ((DWORD)(BYTE)(c) << 16) | \
    159         ((DWORD)(BYTE)(d) << 24) \
    160     )
    161 #endif /* MAKEFOURCC */
    162 
    163 
    164 #define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER             0x00000001
    165 #define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL            0x00000002
    166 #define D3DPRESENTFLAG_DEVICECLIP                      0x00000004
    167 #define D3DPRESENTFLAG_VIDEO                           0x00000010
    168 #define D3DPRESENTFLAG_NOAUTOROTATE                    0x00000020
    169 #define D3DPRESENTFLAG_UNPRUNEDMODE                    0x00000040
    170 #define D3DPRESENTFLAG_OVERLAY_LIMITEDRGB              0x00000080
    171 #define D3DPRESENTFLAG_OVERLAY_YCbCr_BT709             0x00000100
    172 #define D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC             0x00000200
    173 #define D3DPRESENTFLAG_RESTRICTED_CONTENT              0x00000400
    174 #define D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER 0x00000800
    175 
    176 /* Windows calling convention */
    177 #ifndef WINAPI
    178   #if defined(__x86_64__) && !defined(__ILP32__)
    179     #define WINAPI __attribute__((ms_abi))
    180   #elif defined(__i386__)
    181     #define WINAPI __attribute__((__stdcall__))
    182   #else /* neither amd64 nor i386 */
    183     #define WINAPI
    184   #endif
    185 #endif /* WINAPI */
    186 
    187 /* Implementation caps */
    188 #define D3DPRESENT_BACK_BUFFERS_MAX    3
    189 #define D3DPRESENT_BACK_BUFFERS_MAX_EX 30
    190 
    191 /* Functions */
    192 #define MAKE_D3DHRESULT(code) MAKE_HRESULT(1, 0x876, code)
    193 #define MAKE_D3DSTATUS(code)  MAKE_HRESULT(0, 0x876, code)
    194 
    195 /* SDK version */
    196 #define D3D_SDK_VERSION 32
    197 
    198 /* Adapter */
    199 #define D3DADAPTER_DEFAULT 0
    200 
    201 /********************************************************
    202  * Return codes                                         *
    203  ********************************************************/
    204 #define D3D_OK                           S_OK
    205 #define D3DOK_NOAUTOGEN                  MAKE_D3DSTATUS(2159)
    206 #define D3DERR_OUTOFVIDEOMEMORY          MAKE_D3DHRESULT(380)
    207 #define D3DERR_WASSTILLDRAWING           MAKE_D3DHRESULT(540)
    208 #define D3DERR_WRONGTEXTUREFORMAT        MAKE_D3DHRESULT(2072)
    209 #define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073)
    210 #define D3DERR_UNSUPPORTEDCOLORARG       MAKE_D3DHRESULT(2074)
    211 #define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075)
    212 #define D3DERR_UNSUPPORTEDALPHAARG       MAKE_D3DHRESULT(2076)
    213 #define D3DERR_TOOMANYOPERATIONS         MAKE_D3DHRESULT(2077)
    214 #define D3DERR_CONFLICTINGTEXTUREFILTER  MAKE_D3DHRESULT(2078)
    215 #define D3DERR_UNSUPPORTEDFACTORVALUE    MAKE_D3DHRESULT(2079)
    216 #define D3DERR_CONFLICTINGRENDERSTATE    MAKE_D3DHRESULT(2081)
    217 #define D3DERR_UNSUPPORTEDTEXTUREFILTER  MAKE_D3DHRESULT(2082)
    218 #define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086)
    219 #define D3DERR_DRIVERINTERNALERROR       MAKE_D3DHRESULT(2087)
    220 #define D3DERR_NOTFOUND                  MAKE_D3DHRESULT(2150)
    221 #define D3DERR_MOREDATA                  MAKE_D3DHRESULT(2151)
    222 #define D3DERR_DEVICELOST                MAKE_D3DHRESULT(2152)
    223 #define D3DERR_DEVICENOTRESET            MAKE_D3DHRESULT(2153)
    224 #define D3DERR_NOTAVAILABLE              MAKE_D3DHRESULT(2154)
    225 #define D3DERR_INVALIDDEVICE             MAKE_D3DHRESULT(2155)
    226 #define D3DERR_INVALIDCALL               MAKE_D3DHRESULT(2156)
    227 #define D3DERR_DRIVERINVALIDCALL         MAKE_D3DHRESULT(2157)
    228 #define D3DERR_DEVICEREMOVED             MAKE_D3DHRESULT(2160)
    229 #define D3DERR_DEVICEHUNG                MAKE_D3DHRESULT(2164)
    230 #define S_PRESENT_OCCLUDED               MAKE_D3DSTATUS(2168)
    231 
    232 /********************************************************
    233  * Bitmasks                                             *
    234  *******************************************************/
    235 /* IDirect3DDevice9::Clear */
    236 #define D3DCLEAR_TARGET  0x00000001
    237 #define D3DCLEAR_ZBUFFER 0x00000002
    238 #define D3DCLEAR_STENCIL 0x00000004
    239 
    240 /* Usage */
    241 /* http://msdn.microsoft.com/en-us/library/ee416659(VS.85).aspx */
    242 #define D3DUSAGE_RENDERTARGET                    0x00000001
    243 #define D3DUSAGE_DEPTHSTENCIL                    0x00000002
    244 #define D3DUSAGE_WRITEONLY                       0x00000008
    245 #define D3DUSAGE_SOFTWAREPROCESSING              0x00000010
    246 #define D3DUSAGE_DONOTCLIP                       0x00000020
    247 #define D3DUSAGE_POINTS                          0x00000040
    248 #define D3DUSAGE_RTPATCHES                       0x00000080
    249 #define D3DUSAGE_NPATCHES                        0x00000100
    250 #define D3DUSAGE_DYNAMIC                         0x00000200
    251 #define D3DUSAGE_AUTOGENMIPMAP                   0x00000400
    252 #ifndef D3D_DISABLE_9EX
    253 #define D3DUSAGE_RESTRICTED_CONTENT              0x00000800
    254 #define D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER 0x00001000
    255 #define D3DUSAGE_RESTRICT_SHARED_RESOURCE        0x00002000
    256 #endif
    257 #define D3DUSAGE_DMAP                            0x00004000
    258 #define D3DUSAGE_QUERY_LEGACYBUMPMAP             0x00008000
    259 #define D3DUSAGE_QUERY_SRGBREAD                  0x00010000
    260 #define D3DUSAGE_QUERY_FILTER                    0x00020000
    261 #define D3DUSAGE_QUERY_SRGBWRITE                 0x00040000
    262 #define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING  0x00080000
    263 #define D3DUSAGE_QUERY_VERTEXTEXTURE             0x00100000
    264 #define D3DUSAGE_QUERY_WRAPANDMIP	             0x00200000
    265 #ifndef D3D_DISABLE_9EX
    266 #define D3DUSAGE_NONSECURE                       0x00800000
    267 #define D3DUSAGE_TEXTAPI                         0x10000000
    268 #endif
    269 
    270 /* Buffer locking */
    271 /* http://msdn.microsoft.com/en-us/library/ee416503(VS.85).aspx */
    272 #define D3DLOCK_READONLY        0x00000010
    273 #define D3DLOCK_NOSYSLOCK       0x00000800
    274 #define D3DLOCK_NOOVERWRITE     0x00001000
    275 #define D3DLOCK_DISCARD         0x00002000
    276 #define D3DLOCK_DONOTWAIT       0x00004000
    277 #define D3DLOCK_NO_DIRTY_UPDATE 0x00008000
    278 
    279 /* FVF */
    280 /* http://msdn.microsoft.com/en-us/library/ee416490(VS.85).aspx */
    281 /* http://msdn.microsoft.com/en-us/library/ms791638.aspx */
    282 #define D3DFVF_XYZ              0x00000002
    283 #define D3DFVF_XYZRHW           0x00000004
    284 #define D3DFVF_XYZB1            0x00000006
    285 #define D3DFVF_XYZB2            0x00000008
    286 #define D3DFVF_XYZB3            0x0000000A
    287 #define D3DFVF_XYZB4            0x0000000C
    288 #define D3DFVF_XYZB5            0x0000000E
    289 #define D3DFVF_XYZW             0x00004002
    290 #define D3DFVF_POSITION_MASK    0x0000400E
    291 
    292 #define D3DFVF_NORMAL           0x00000010
    293 #define D3DFVF_PSIZE            0x00000020
    294 #define D3DFVF_DIFFUSE          0x00000040
    295 #define D3DFVF_SPECULAR         0x00000080
    296 
    297 #define D3DFVF_TEX0             0x00000000
    298 #define D3DFVF_TEX1             0x00000100
    299 #define D3DFVF_TEX2             0x00000200
    300 #define D3DFVF_TEX3             0x00000300
    301 #define D3DFVF_TEX4             0x00000400
    302 #define D3DFVF_TEX5             0x00000500
    303 #define D3DFVF_TEX6             0x00000600
    304 #define D3DFVF_TEX7             0x00000700
    305 #define D3DFVF_TEX8             0x00000800
    306 #define D3DFVF_TEXCOUNT_MASK    0x00000F00
    307 #define D3DFVF_TEXCOUNT_SHIFT            8
    308 #define D3DFVF_TEXTUREFORMAT1   0x00000003
    309 #define D3DFVF_TEXTUREFORMAT2   0x00000000
    310 #define D3DFVF_TEXTUREFORMAT3   0x00000001
    311 #define D3DFVF_TEXTUREFORMAT4   0x00000002
    312 
    313 #define D3DFVF_POSITION_MASK  0x0000400E
    314 #define D3DFVF_TEXCOUNT_MASK  0x00000F00
    315 #define D3DFVF_TEXCOUNT_SHIFT 8
    316 
    317 #define D3DFVF_LASTBETA_UBYTE4   0x00001000
    318 #define D3DFVF_LASTBETA_D3DCOLOR 0x00008000
    319 
    320 #define D3DFVF_RESERVED0 0x00000001
    321 #define D3DFVF_RESERVED2 0x00006000
    322 
    323 #define D3DTA_SELECTMASK        0x0000000f
    324 #define D3DTA_DIFFUSE           0x00000000
    325 #define D3DTA_CURRENT           0x00000001
    326 #define D3DTA_TEXTURE           0x00000002
    327 #define D3DTA_TFACTOR           0x00000003
    328 #define D3DTA_SPECULAR          0x00000004
    329 #define D3DTA_TEMP              0x00000005
    330 #define D3DTA_CONSTANT          0x00000006
    331 #define D3DTA_COMPLEMENT        0x00000010
    332 #define D3DTA_ALPHAREPLICATE    0x00000020
    333 
    334 #define D3DSPD_IUNKNOWN 0x00000001
    335 
    336 #define D3DPRESENT_DONOTWAIT      0x00000001
    337 #define D3DPRESENT_LINEAR_CONTENT 0x00000002
    338 #define D3DPRESENT_RATE_DEFAULT            0
    339 
    340 #define D3DCREATE_FPU_PRESERVE              0x00000002
    341 #define D3DCREATE_MULTITHREADED             0x00000004
    342 #define D3DCREATE_PUREDEVICE                0x00000010
    343 #define D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x00000020
    344 #define D3DCREATE_HARDWARE_VERTEXPROCESSING 0x00000040
    345 #define D3DCREATE_MIXED_VERTEXPROCESSING    0x00000080
    346 #define D3DCREATE_DISABLE_DRIVER_MANAGEMENT 0x00000100
    347 #define D3DCREATE_ADAPTERGROUP_DEVICE       0x00000200
    348 
    349 #define D3DSTREAMSOURCE_INDEXEDDATA  (1 << 30)
    350 #define D3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
    351 
    352 /* D3DRS_COLORWRITEENABLE */
    353 #define D3DCOLORWRITEENABLE_RED     (1L << 0)
    354 #define D3DCOLORWRITEENABLE_GREEN   (1L << 1)
    355 #define D3DCOLORWRITEENABLE_BLUE    (1L << 2)
    356 #define D3DCOLORWRITEENABLE_ALPHA   (1L << 3)
    357 
    358 
    359 /********************************************************
    360  * Function macros                                      *
    361  *******************************************************/
    362 
    363 /* Colors */
    364 #define D3DCOLOR_ARGB(a,r,g,b) \
    365     ((D3DCOLOR)( \
    366         (((a) & 0xFF) << 24) | \
    367         (((r) & 0xFF) << 16) | \
    368         (((g) & 0xFF) << 8) | \
    369          ((b) & 0xFF) \
    370     ))
    371 
    372 #define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
    373 #define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xFF,r,g,b)
    374 #define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)
    375 #define D3DCOLOR_XYUV(y,u,v)   D3DCOLOR_ARGB(0xFF,y,u,v)
    376 
    377 #define D3DCOLOR_COLORVALUE(r,g,b,a) \
    378     D3DCOLOR_RGBA( \
    379         (DWORD)((r) * 255.0f), \
    380         (DWORD)((g) * 255.0f), \
    381         (DWORD)((b) * 255.0f), \
    382         (DWORD)((a) * 255.0f) \
    383     )
    384 
    385 /* Shaders */
    386 #define D3DDECL_END() { 0xFF, 0, D3DDECLTYPE_UNUSED, 0, 0, 0 }
    387 
    388 /*****************************************************************************
    389  * Typedefs                                                                  *
    390  *****************************************************************************/
    391 typedef DWORD D3DCOLOR;
    392 
    393 /*****************************************************************************
    394  * Enums                                                                     *
    395  *****************************************************************************/
    396 typedef enum D3DDISPLAYROTATION {
    397     D3DDISPLAYROTATION_IDENTITY = 1,
    398     D3DDISPLAYROTATION_90 = 2,
    399     D3DDISPLAYROTATION_180 = 3,
    400     D3DDISPLAYROTATION_270 = 4
    401 } D3DDISPLAYROTATION;
    402 
    403 typedef enum D3DSCANLINEORDERING {
    404     D3DSCANLINEORDERING_UNKNOWN = 0,
    405     D3DSCANLINEORDERING_PROGRESSIVE = 1,
    406     D3DSCANLINEORDERING_INTERLACED = 2
    407 } D3DSCANLINEORDERING;
    408 
    409 typedef enum _D3DAUTHENTICATEDCHANNELTYPE {
    410     D3DAUTHENTICATEDCHANNEL_D3D9 = 1,
    411     D3DAUTHENTICATEDCHANNEL_DRIVER_SOFTWARE = 2,
    412     D3DAUTHENTICATEDCHANNEL_DRIVER_HARDWARE = 3
    413 } D3DAUTHENTICATEDCHANNELTYPE;
    414 
    415 typedef enum _D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE {
    416     PROCESSIDTYPE_UNKNOWN = 0,
    417     PROCESSIDTYPE_DWM = 1,
    418     PROCESSIDTYPE_HANDLE = 2
    419 } D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE;
    420 
    421 typedef enum _D3DBACKBUFFER_TYPE {
    422     D3DBACKBUFFER_TYPE_MONO = 0,
    423     D3DBACKBUFFER_TYPE_LEFT = 1,
    424     D3DBACKBUFFER_TYPE_RIGHT = 2
    425 } D3DBACKBUFFER_TYPE;
    426 
    427 typedef enum _D3DBASISTYPE {
    428    D3DBASIS_BEZIER = 0,
    429    D3DBASIS_BSPLINE = 1,
    430    D3DBASIS_CATMULL_ROM = 2
    431 } D3DBASISTYPE;
    432 
    433 typedef enum _D3DBLEND {
    434     D3DBLEND_ZERO = 1,
    435     D3DBLEND_ONE = 2,
    436     D3DBLEND_SRCCOLOR = 3,
    437     D3DBLEND_INVSRCCOLOR = 4,
    438     D3DBLEND_SRCALPHA = 5,
    439     D3DBLEND_INVSRCALPHA = 6,
    440     D3DBLEND_DESTALPHA = 7,
    441     D3DBLEND_INVDESTALPHA = 8,
    442     D3DBLEND_DESTCOLOR = 9,
    443     D3DBLEND_INVDESTCOLOR = 10,
    444     D3DBLEND_SRCALPHASAT = 11,
    445     D3DBLEND_BOTHSRCALPHA = 12,
    446     D3DBLEND_BOTHINVSRCALPHA = 13,
    447     D3DBLEND_BLENDFACTOR = 14,
    448     D3DBLEND_INVBLENDFACTOR = 15,
    449     D3DBLEND_SRCCOLOR2 = 16,
    450     D3DBLEND_INVSRCCOLOR2 = 17
    451 } D3DBLEND;
    452 
    453 typedef enum _D3DBLENDOP {
    454     D3DBLENDOP_ADD = 1,
    455     D3DBLENDOP_SUBTRACT = 2,
    456     D3DBLENDOP_REVSUBTRACT = 3,
    457     D3DBLENDOP_MIN = 4,
    458     D3DBLENDOP_MAX = 5
    459 } D3DBLENDOP;
    460 
    461 typedef enum _D3DBUSTYPE {
    462     D3DBUSTYPE_OTHER = 0x00000000,
    463     D3DBUSTYPE_PCI = 0x00000001,
    464     D3DBUSTYPE_PCIX = 0x00000002,
    465     D3DBUSTYPE_PCIEXPRESS = 0x00000003,
    466     D3DBUSTYPE_AGP = 0x00000004,
    467     D3DBUSIMPL_MODIFIER_INSIDE_OF_CHIPSET = 0x00010000,
    468     D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP = 0x00020000,
    469     D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET = 0x00030000,
    470     D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR = 0x00040000,
    471     D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE = 0x00050000,
    472     D3DBUSIMPL_MODIFIER_NON_STANDARD = 0x80000000
    473 } D3DBUSTYPE;
    474 
    475 typedef enum _D3DCMPFUNC {
    476     D3DCMP_NEVER_ZERO = 0, //Needed to avoid warnings
    477     D3DCMP_NEVER = 1,
    478     D3DCMP_LESS = 2,
    479     D3DCMP_EQUAL = 3,
    480     D3DCMP_LESSEQUAL = 4,
    481     D3DCMP_GREATER = 5,
    482     D3DCMP_NOTEQUAL = 6,
    483     D3DCMP_GREATEREQUAL = 7,
    484     D3DCMP_ALWAYS = 8
    485 } D3DCMPFUNC;
    486 
    487 typedef enum _D3DCOMPOSERECTSOP{
    488     D3DCOMPOSERECTS_COPY = 1,
    489     D3DCOMPOSERECTS_OR = 2,
    490     D3DCOMPOSERECTS_AND = 3,
    491     D3DCOMPOSERECTS_NEG = 4
    492 } D3DCOMPOSERECTSOP;
    493 
    494 typedef enum _D3DCUBEMAP_FACES {
    495     D3DCUBEMAP_FACE_POSITIVE_X = 0,
    496     D3DCUBEMAP_FACE_NEGATIVE_X = 1,
    497     D3DCUBEMAP_FACE_POSITIVE_Y = 2,
    498     D3DCUBEMAP_FACE_NEGATIVE_Y = 3,
    499     D3DCUBEMAP_FACE_POSITIVE_Z = 4,
    500     D3DCUBEMAP_FACE_NEGATIVE_Z = 5
    501 } D3DCUBEMAP_FACES;
    502 
    503 typedef enum _D3DCULL {
    504     D3DCULL_NONE = 1,
    505     D3DCULL_CW = 2,
    506     D3DCULL_CCW = 3
    507 } D3DCULL;
    508 
    509 typedef enum _D3DDEBUGMONITORTOKENS {
    510     D3DDMT_ENABLE = 0,
    511     D3DDMT_DISABLE = 1
    512 } D3DDEBUGMONITORTOKENS;
    513 
    514 typedef enum _D3DDECLMETHOD {
    515     D3DDECLMETHOD_DEFAULT = 0,
    516     D3DDECLMETHOD_PARTIALU = 1,
    517     D3DDECLMETHOD_PARTIALV = 2,
    518     D3DDECLMETHOD_CROSSUV = 3,
    519     D3DDECLMETHOD_UV = 4,
    520     D3DDECLMETHOD_LOOKUP = 5,
    521     D3DDECLMETHOD_LOOKUPPRESAMPLED = 6
    522 } D3DDECLMETHOD;
    523 
    524 typedef enum _D3DDECLTYPE {
    525     D3DDECLTYPE_FLOAT1 = 0,
    526     D3DDECLTYPE_FLOAT2 = 1,
    527     D3DDECLTYPE_FLOAT3 = 2,
    528     D3DDECLTYPE_FLOAT4 = 3,
    529     D3DDECLTYPE_D3DCOLOR = 4,
    530     D3DDECLTYPE_UBYTE4 = 5,
    531     D3DDECLTYPE_SHORT2 = 6,
    532     D3DDECLTYPE_SHORT4 = 7,
    533     D3DDECLTYPE_UBYTE4N = 8,
    534     D3DDECLTYPE_SHORT2N = 9,
    535     D3DDECLTYPE_SHORT4N = 10,
    536     D3DDECLTYPE_USHORT2N = 11,
    537     D3DDECLTYPE_USHORT4N = 12,
    538     D3DDECLTYPE_UDEC3 = 13,
    539     D3DDECLTYPE_DEC3N = 14,
    540     D3DDECLTYPE_FLOAT16_2 = 15,
    541     D3DDECLTYPE_FLOAT16_4 = 16,
    542     D3DDECLTYPE_UNUSED = 17
    543 } D3DDECLTYPE;
    544 
    545 typedef enum _D3DDECLUSAGE {
    546     D3DDECLUSAGE_POSITION = 0,
    547     D3DDECLUSAGE_BLENDWEIGHT = 1,
    548     D3DDECLUSAGE_BLENDINDICES = 2,
    549     D3DDECLUSAGE_NORMAL = 3,
    550     D3DDECLUSAGE_PSIZE = 4,
    551     D3DDECLUSAGE_TEXCOORD = 5,
    552     D3DDECLUSAGE_TANGENT = 6,
    553     D3DDECLUSAGE_BINORMAL = 7,
    554     D3DDECLUSAGE_TESSFACTOR = 8,
    555     D3DDECLUSAGE_POSITIONT = 9,
    556     D3DDECLUSAGE_COLOR = 10,
    557     D3DDECLUSAGE_FOG = 11,
    558     D3DDECLUSAGE_DEPTH = 12,
    559     D3DDECLUSAGE_SAMPLE = 13
    560 } D3DDECLUSAGE;
    561 
    562 typedef enum _D3DDEGREETYPE {
    563    D3DDEGREE_LINEAR = 1,
    564    D3DDEGREE_QUADRATIC = 2,
    565    D3DDEGREE_CUBIC = 3,
    566    D3DDEGREE_QUINTIC = 5
    567 } D3DDEGREETYPE;
    568 
    569 typedef enum _D3DDEVTYPE {
    570     D3DDEVTYPE_HAL = 1,
    571     D3DDEVTYPE_REF = 2,
    572     D3DDEVTYPE_SW = 3,
    573     D3DDEVTYPE_NULLREF = 4
    574 } D3DDEVTYPE;
    575 
    576 typedef enum _D3DFILLMODE {
    577     D3DFILL_SOLID_ZERO = 0,
    578     D3DFILL_POINT = 1,
    579     D3DFILL_WIREFRAME = 2,
    580     D3DFILL_SOLID = 3
    581 } D3DFILLMODE;
    582 
    583 typedef enum _D3DFOGMODE {
    584     D3DFOG_NONE = 0,
    585     D3DFOG_EXP = 1,
    586     D3DFOG_EXP2 = 2,
    587     D3DFOG_LINEAR = 3
    588 } D3DFOGMODE;
    589 
    590 typedef enum _D3DFORMAT {
    591     D3DFMT_UNKNOWN = 0,
    592     D3DFMT_R8G8B8 = 20,
    593     D3DFMT_A8R8G8B8 = 21,
    594     D3DFMT_X8R8G8B8 = 22,
    595     D3DFMT_R5G6B5 = 23,
    596     D3DFMT_X1R5G5B5 = 24,
    597     D3DFMT_A1R5G5B5 = 25,
    598     D3DFMT_A4R4G4B4 = 26,
    599     D3DFMT_R3G3B2 = 27,
    600     D3DFMT_A8 = 28,
    601     D3DFMT_A8R3G3B2 = 29,
    602     D3DFMT_X4R4G4B4 = 30,
    603     D3DFMT_A2B10G10R10 = 31,
    604     D3DFMT_A8B8G8R8 = 32,
    605     D3DFMT_X8B8G8R8 = 33,
    606     D3DFMT_G16R16 = 34,
    607     D3DFMT_A2R10G10B10 = 35,
    608     D3DFMT_A16B16G16R16 = 36,
    609     D3DFMT_A8P8 = 40,
    610     D3DFMT_P8 = 41,
    611     D3DFMT_L8 = 50,
    612     D3DFMT_A8L8 = 51,
    613     D3DFMT_A4L4 = 52,
    614     D3DFMT_V8U8 = 60,
    615     D3DFMT_L6V5U5 = 61,
    616     D3DFMT_X8L8V8U8 = 62,
    617     D3DFMT_Q8W8V8U8 = 63,
    618     D3DFMT_V16U16 = 64,
    619     D3DFMT_A2W10V10U10 = 67,
    620     D3DFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'),
    621     D3DFMT_R8G8_B8G8 = MAKEFOURCC('R', 'G', 'B', 'G'),
    622     D3DFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'),
    623     D3DFMT_G8R8_G8B8 = MAKEFOURCC('G', 'R', 'G', 'B'),
    624     D3DFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'),
    625     D3DFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'),
    626     D3DFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'),
    627     D3DFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'),
    628     D3DFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'),
    629     D3DFMT_D16_LOCKABLE = 70,
    630     D3DFMT_D32 = 71,
    631     D3DFMT_D15S1 = 73,
    632     D3DFMT_D24S8 = 75,
    633     D3DFMT_D24X8 = 77,
    634     D3DFMT_D24X4S4 = 79,
    635     D3DFMT_D16 = 80,
    636     D3DFMT_D32F_LOCKABLE = 82,
    637     D3DFMT_D24FS8 = 83,
    638     D3DFMT_D32_LOCKABLE = 84,
    639     D3DFMT_S8_LOCKABLE = 85,
    640     D3DFMT_L16 = 81,
    641     D3DFMT_VERTEXDATA = 100,
    642     D3DFMT_INDEX16 = 101,
    643     D3DFMT_INDEX32 = 102,
    644     D3DFMT_Q16W16V16U16 = 110,
    645     D3DFMT_MULTI2_ARGB8 = MAKEFOURCC('M','E','T','1'),
    646     D3DFMT_R16F = 111,
    647     D3DFMT_G16R16F = 112,
    648     D3DFMT_A16B16G16R16F = 113,
    649     D3DFMT_R32F = 114,
    650     D3DFMT_G32R32F = 115,
    651     D3DFMT_A32B32G32R32F = 116,
    652     D3DFMT_CxV8U8 = 117,
    653     D3DFMT_A1 = 118,
    654     D3DFMT_A2B10G10R10_XR_BIAS = 119,
    655     D3DFMT_BINARYBUFFER = 199,
    656     D3DFMT_ATI1 = MAKEFOURCC('A', 'T', 'I', '1'),
    657     D3DFMT_ATI2 = MAKEFOURCC('A', 'T', 'I', '2'),
    658     D3DFMT_ATOC = MAKEFOURCC('A', 'T', 'O', 'C'),
    659     D3DFMT_DF16 = MAKEFOURCC('D', 'F', '1', '6'),
    660     D3DFMT_DF24 = MAKEFOURCC('D', 'F', '2', '4'),
    661     D3DFMT_INTZ = MAKEFOURCC('I', 'N', 'T', 'Z'),
    662     D3DFMT_NULL = MAKEFOURCC('N', 'U', 'L', 'L'),
    663     D3DFMT_NVDB = MAKEFOURCC('N', 'V', 'D', 'B'),
    664     D3DFMT_NV11 = MAKEFOURCC('N', 'V', '1', '1'),
    665     D3DFMT_NV12 = MAKEFOURCC('N', 'V', '1', '2'),
    666     D3DFMT_RESZ = MAKEFOURCC('R', 'E', 'S', 'Z'),
    667     D3DFMT_Y210 = MAKEFOURCC('Y', '2', '1', '0'),
    668     D3DFMT_Y216 = MAKEFOURCC('Y', '2', '1', '6'),
    669     D3DFMT_Y410 = MAKEFOURCC('Y', '4', '1', '0')
    670 } D3DFORMAT;
    671 
    672 typedef enum _D3DLIGHTTYPE {
    673     D3DLIGHT_POINT = 1,
    674     D3DLIGHT_SPOT = 2,
    675     D3DLIGHT_DIRECTIONAL = 3
    676 } D3DLIGHTTYPE;
    677 
    678 typedef enum _D3DMATERIALCOLORSOURCE {
    679     D3DMCS_MATERIAL = 0,
    680     D3DMCS_COLOR1 = 1,
    681     D3DMCS_COLOR2 = 2
    682 } D3DMATERIALCOLORSOURCE;
    683 
    684 typedef enum _D3DMULTISAMPLE_TYPE {
    685     D3DMULTISAMPLE_NONE = 0,
    686     D3DMULTISAMPLE_NONMASKABLE = 1,
    687     D3DMULTISAMPLE_2_SAMPLES = 2,
    688     D3DMULTISAMPLE_3_SAMPLES = 3,
    689     D3DMULTISAMPLE_4_SAMPLES = 4,
    690     D3DMULTISAMPLE_5_SAMPLES = 5,
    691     D3DMULTISAMPLE_6_SAMPLES = 6,
    692     D3DMULTISAMPLE_7_SAMPLES = 7,
    693     D3DMULTISAMPLE_8_SAMPLES = 8,
    694     D3DMULTISAMPLE_9_SAMPLES = 9,
    695     D3DMULTISAMPLE_10_SAMPLES = 10,
    696     D3DMULTISAMPLE_11_SAMPLES = 11,
    697     D3DMULTISAMPLE_12_SAMPLES = 12,
    698     D3DMULTISAMPLE_13_SAMPLES = 13,
    699     D3DMULTISAMPLE_14_SAMPLES = 14,
    700     D3DMULTISAMPLE_15_SAMPLES = 15,
    701     D3DMULTISAMPLE_16_SAMPLES = 16
    702 } D3DMULTISAMPLE_TYPE;
    703 
    704 typedef enum _D3DPATCHEDGESTYLE {
    705    D3DPATCHEDGE_DISCRETE = 0,
    706    D3DPATCHEDGE_CONTINUOUS = 1
    707 } D3DPATCHEDGESTYLE;
    708 
    709 typedef enum _D3DPOOL {
    710     D3DPOOL_DEFAULT = 0,
    711     D3DPOOL_MANAGED = 1,
    712     D3DPOOL_SYSTEMMEM = 2,
    713     D3DPOOL_SCRATCH = 3
    714 } D3DPOOL;
    715 
    716 typedef enum _D3DPRIMITIVETYPE {
    717     D3DPT_POINTLIST = 1,
    718     D3DPT_LINELIST = 2,
    719     D3DPT_LINESTRIP = 3,
    720     D3DPT_TRIANGLELIST = 4,
    721     D3DPT_TRIANGLESTRIP = 5,
    722     D3DPT_TRIANGLEFAN = 6
    723 } D3DPRIMITIVETYPE;
    724 
    725 typedef enum _D3DQUERYTYPE {
    726     D3DQUERYTYPE_VCACHE = 4,
    727     D3DQUERYTYPE_RESOURCEMANAGER = 5,
    728     D3DQUERYTYPE_VERTEXSTATS = 6,
    729     D3DQUERYTYPE_EVENT = 8,
    730     D3DQUERYTYPE_OCCLUSION = 9,
    731     D3DQUERYTYPE_TIMESTAMP = 10,
    732     D3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
    733     D3DQUERYTYPE_TIMESTAMPFREQ = 12,
    734     D3DQUERYTYPE_PIPELINETIMINGS = 13,
    735     D3DQUERYTYPE_INTERFACETIMINGS = 14,
    736     D3DQUERYTYPE_VERTEXTIMINGS = 15,
    737     D3DQUERYTYPE_PIXELTIMINGS = 16,
    738     D3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
    739     D3DQUERYTYPE_CACHEUTILIZATION = 18,
    740     D3DQUERYTYPE_MEMORYPRESSURE = 19
    741 } D3DQUERYTYPE;
    742 
    743 #define D3DISSUE_BEGIN   (1 << 1)
    744 #define D3DISSUE_END     (1 << 0)
    745 #define D3DGETDATA_FLUSH (1 << 0)
    746 
    747 
    748 typedef enum _D3DRENDERSTATETYPE {
    749     D3DRS_ZENABLE = 7,
    750     D3DRS_FILLMODE = 8,
    751     D3DRS_SHADEMODE = 9,
    752     D3DRS_ZWRITEENABLE = 14,
    753     D3DRS_ALPHATESTENABLE = 15,
    754     D3DRS_LASTPIXEL = 16,
    755     D3DRS_SRCBLEND = 19,
    756     D3DRS_DESTBLEND = 20,
    757     D3DRS_CULLMODE = 22,
    758     D3DRS_ZFUNC = 23,
    759     D3DRS_ALPHAREF = 24,
    760     D3DRS_ALPHAFUNC = 25,
    761     D3DRS_DITHERENABLE = 26,
    762     D3DRS_ALPHABLENDENABLE = 27,
    763     D3DRS_FOGENABLE = 28,
    764     D3DRS_SPECULARENABLE = 29,
    765     D3DRS_FOGCOLOR = 34,
    766     D3DRS_FOGTABLEMODE = 35,
    767     D3DRS_FOGSTART = 36,
    768     D3DRS_FOGEND = 37,
    769     D3DRS_FOGDENSITY = 38,
    770     D3DRS_RANGEFOGENABLE = 48,
    771     D3DRS_STENCILENABLE = 52,
    772     D3DRS_STENCILFAIL = 53,
    773     D3DRS_STENCILZFAIL = 54,
    774     D3DRS_STENCILPASS = 55,
    775     D3DRS_STENCILFUNC = 56,
    776     D3DRS_STENCILREF = 57,
    777     D3DRS_STENCILMASK = 58,
    778     D3DRS_STENCILWRITEMASK = 59,
    779     D3DRS_TEXTUREFACTOR = 60,
    780     D3DRS_WRAP0 = 128,
    781     D3DRS_WRAP1 = 129,
    782     D3DRS_WRAP2 = 130,
    783     D3DRS_WRAP3 = 131,
    784     D3DRS_WRAP4 = 132,
    785     D3DRS_WRAP5 = 133,
    786     D3DRS_WRAP6 = 134,
    787     D3DRS_WRAP7 = 135,
    788     D3DRS_CLIPPING = 136,
    789     D3DRS_LIGHTING = 137,
    790     D3DRS_AMBIENT = 139,
    791     D3DRS_FOGVERTEXMODE = 140,
    792     D3DRS_COLORVERTEX = 141,
    793     D3DRS_LOCALVIEWER = 142,
    794     D3DRS_NORMALIZENORMALS = 143,
    795     D3DRS_DIFFUSEMATERIALSOURCE = 145,
    796     D3DRS_SPECULARMATERIALSOURCE = 146,
    797     D3DRS_AMBIENTMATERIALSOURCE = 147,
    798     D3DRS_EMISSIVEMATERIALSOURCE = 148,
    799     D3DRS_VERTEXBLEND = 151,
    800     D3DRS_CLIPPLANEENABLE = 152,
    801     D3DRS_POINTSIZE = 154,
    802     D3DRS_POINTSIZE_MIN = 155,
    803     D3DRS_POINTSPRITEENABLE = 156,
    804     D3DRS_POINTSCALEENABLE = 157,
    805     D3DRS_POINTSCALE_A = 158,
    806     D3DRS_POINTSCALE_B = 159,
    807     D3DRS_POINTSCALE_C = 160,
    808     D3DRS_MULTISAMPLEANTIALIAS = 161,
    809     D3DRS_MULTISAMPLEMASK = 162,
    810     D3DRS_PATCHEDGESTYLE = 163,
    811     D3DRS_DEBUGMONITORTOKEN = 165,
    812     D3DRS_POINTSIZE_MAX = 166,
    813     D3DRS_INDEXEDVERTEXBLENDENABLE = 167,
    814     D3DRS_COLORWRITEENABLE = 168,
    815     D3DRS_TWEENFACTOR = 170,
    816     D3DRS_BLENDOP = 171,
    817     D3DRS_POSITIONDEGREE = 172,
    818     D3DRS_NORMALDEGREE = 173,
    819     D3DRS_SCISSORTESTENABLE = 174,
    820     D3DRS_SLOPESCALEDEPTHBIAS = 175,
    821     D3DRS_ANTIALIASEDLINEENABLE = 176,
    822     D3DRS_MINTESSELLATIONLEVEL = 178,
    823     D3DRS_MAXTESSELLATIONLEVEL = 179,
    824     D3DRS_ADAPTIVETESS_X = 180,
    825     D3DRS_ADAPTIVETESS_Y = 181,
    826     D3DRS_ADAPTIVETESS_Z = 182,
    827     D3DRS_ADAPTIVETESS_W = 183,
    828     D3DRS_ENABLEADAPTIVETESSELLATION = 184,
    829     D3DRS_TWOSIDEDSTENCILMODE = 185,
    830     D3DRS_CCW_STENCILFAIL = 186,
    831     D3DRS_CCW_STENCILZFAIL = 187,
    832     D3DRS_CCW_STENCILPASS = 188,
    833     D3DRS_CCW_STENCILFUNC = 189,
    834     D3DRS_COLORWRITEENABLE1 = 190,
    835     D3DRS_COLORWRITEENABLE2 = 191,
    836     D3DRS_COLORWRITEENABLE3 = 192,
    837     D3DRS_BLENDFACTOR = 193,
    838     D3DRS_SRGBWRITEENABLE = 194,
    839     D3DRS_DEPTHBIAS = 195,
    840     D3DRS_WRAP8 = 198,
    841     D3DRS_WRAP9 = 199,
    842     D3DRS_WRAP10 = 200,
    843     D3DRS_WRAP11 = 201,
    844     D3DRS_WRAP12 = 202,
    845     D3DRS_WRAP13 = 203,
    846     D3DRS_WRAP14 = 204,
    847     D3DRS_WRAP15 = 205,
    848     D3DRS_SEPARATEALPHABLENDENABLE = 206,
    849     D3DRS_SRCBLENDALPHA = 207,
    850     D3DRS_DESTBLENDALPHA = 208,
    851     D3DRS_BLENDOPALPHA = 209
    852 } D3DRENDERSTATETYPE;
    853 
    854 typedef enum _D3DRESOURCETYPE {
    855     D3DRTYPE_SURFACE = 1,
    856     D3DRTYPE_VOLUME = 2,
    857     D3DRTYPE_TEXTURE = 3,
    858     D3DRTYPE_VOLUMETEXTURE = 4,
    859     D3DRTYPE_CUBETEXTURE = 5,
    860     D3DRTYPE_VERTEXBUFFER = 6,
    861     D3DRTYPE_INDEXBUFFER = 7
    862 } D3DRESOURCETYPE;
    863 #define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1)
    864 
    865 typedef enum _D3DSAMPLERSTATETYPE {
    866     D3DSAMP_ADDRESSU = 1,
    867     D3DSAMP_ADDRESSV = 2,
    868     D3DSAMP_ADDRESSW = 3,
    869     D3DSAMP_BORDERCOLOR = 4,
    870     D3DSAMP_MAGFILTER = 5,
    871     D3DSAMP_MINFILTER = 6,
    872     D3DSAMP_MIPFILTER = 7,
    873     D3DSAMP_MIPMAPLODBIAS = 8,
    874     D3DSAMP_MAXMIPLEVEL = 9,
    875     D3DSAMP_MAXANISOTROPY = 10,
    876     D3DSAMP_SRGBTEXTURE = 11,
    877     D3DSAMP_ELEMENTINDEX = 12,
    878     D3DSAMP_DMAPOFFSET = 13
    879 } D3DSAMPLERSTATETYPE;
    880 
    881 typedef enum _D3DSAMPLER_TEXTURE_TYPE {
    882     D3DSTT_UNKNOWN = 0<<27,
    883     D3DSTT_1D = 1<<27,
    884     D3DSTT_2D = 2<<27,
    885     D3DSTT_CUBE = 3<<27,
    886     D3DSTT_VOLUME = 4<<27
    887 } D3DSAMPLER_TEXTURE_TYPE;
    888 
    889 typedef enum _D3DSHADEMODE {
    890     D3DSHADE_FLAT = 1,
    891     D3DSHADE_GOURAUD = 2,
    892     D3DSHADE_PHONG = 3
    893 } D3DSHADEMODE;
    894 
    895 typedef enum _D3DSHADER_ADDRESSMODE_TYPE {
    896     D3DSHADER_ADDRMODE_ABSOLUTE = 0<<13,
    897     D3DSHADER_ADDRMODE_RELATIVE = 1<<13
    898 } D3DSHADER_ADDRESSMODE_TYPE;
    899 
    900 typedef enum _D3DSHADER_COMPARISON {
    901     D3DSPC_RESERVED0 = 0,
    902     D3DSPC_GT = 1,
    903     D3DSPC_EQ = 2,
    904     D3DSPC_GE = 3,
    905     D3DSPC_LT = 4,
    906     D3DSPC_NE = 5,
    907     D3DSPC_LE = 6,
    908     D3DSPC_RESERVED1 = 7
    909 } D3DSHADER_COMPARISON;
    910 
    911 #define D3DDP_MAXTEXCOORD   8
    912 
    913 #define D3DSI_OPCODE_MASK       0x0000FFFF
    914 #define D3DSI_INSTLENGTH_MASK   0x0F000000
    915 #define D3DSI_INSTLENGTH_SHIFT  24
    916 
    917 typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE {
    918     D3DSIO_NOP = 0,
    919     D3DSIO_MOV = 1,
    920     D3DSIO_ADD = 2,
    921     D3DSIO_SUB = 3,
    922     D3DSIO_MAD = 4,
    923     D3DSIO_MUL = 5,
    924     D3DSIO_RCP = 6,
    925     D3DSIO_RSQ = 7,
    926     D3DSIO_DP3 = 8,
    927     D3DSIO_DP4 = 9,
    928     D3DSIO_MIN = 10,
    929     D3DSIO_MAX = 11,
    930     D3DSIO_SLT = 12,
    931     D3DSIO_SGE = 13,
    932     D3DSIO_EXP = 14,
    933     D3DSIO_LOG = 15,
    934     D3DSIO_LIT = 16,
    935     D3DSIO_DST = 17,
    936     D3DSIO_LRP = 18,
    937     D3DSIO_FRC = 19,
    938     D3DSIO_M4x4 = 20,
    939     D3DSIO_M4x3 = 21,
    940     D3DSIO_M3x4 = 22,
    941     D3DSIO_M3x3 = 23,
    942     D3DSIO_M3x2 = 24,
    943     D3DSIO_CALL = 25,
    944     D3DSIO_CALLNZ = 26,
    945     D3DSIO_LOOP = 27,
    946     D3DSIO_RET = 28,
    947     D3DSIO_ENDLOOP = 29,
    948     D3DSIO_LABEL = 30,
    949     D3DSIO_DCL = 31,
    950     D3DSIO_POW = 32,
    951     D3DSIO_CRS = 33,
    952     D3DSIO_SGN = 34,
    953     D3DSIO_ABS = 35,
    954     D3DSIO_NRM = 36,
    955     D3DSIO_SINCOS = 37,
    956     D3DSIO_REP = 38,
    957     D3DSIO_ENDREP = 39,
    958     D3DSIO_IF = 40,
    959     D3DSIO_IFC = 41,
    960     D3DSIO_ELSE = 42,
    961     D3DSIO_ENDIF = 43,
    962     D3DSIO_BREAK = 44,
    963     D3DSIO_BREAKC = 45,
    964     D3DSIO_MOVA = 46,
    965     D3DSIO_DEFB = 47,
    966     D3DSIO_DEFI = 48,
    967     D3DSIO_TEXCOORD = 64,
    968     D3DSIO_TEXKILL = 65,
    969     D3DSIO_TEX = 66,
    970     D3DSIO_TEXBEM = 67,
    971     D3DSIO_TEXBEML = 68,
    972     D3DSIO_TEXREG2AR = 69,
    973     D3DSIO_TEXREG2GB = 70,
    974     D3DSIO_TEXM3x2PAD = 71,
    975     D3DSIO_TEXM3x2TEX = 72,
    976     D3DSIO_TEXM3x3PAD = 73,
    977     D3DSIO_TEXM3x3TEX = 74,
    978     D3DSIO_RESERVED0 = 75,
    979     D3DSIO_TEXM3x3SPEC = 76,
    980     D3DSIO_TEXM3x3VSPEC = 77,
    981     D3DSIO_EXPP = 78,
    982     D3DSIO_LOGP = 79,
    983     D3DSIO_CND = 80,
    984     D3DSIO_DEF = 81,
    985     D3DSIO_TEXREG2RGB = 82,
    986     D3DSIO_TEXDP3TEX = 83,
    987     D3DSIO_TEXM3x2DEPTH = 84,
    988     D3DSIO_TEXDP3 = 85,
    989     D3DSIO_TEXM3x3 = 86,
    990     D3DSIO_TEXDEPTH = 87,
    991     D3DSIO_CMP = 88,
    992     D3DSIO_BEM = 89,
    993     D3DSIO_DP2ADD = 90,
    994     D3DSIO_DSX = 91,
    995     D3DSIO_DSY = 92,
    996     D3DSIO_TEXLDD = 93,
    997     D3DSIO_SETP = 94,
    998     D3DSIO_TEXLDL = 95,
    999     D3DSIO_BREAKP = 96,
   1000     D3DSIO_PHASE = 0xFFFD,
   1001     D3DSIO_COMMENT = 0xFFFE,
   1002     D3DSIO_END = 0xFFFF
   1003 } D3DSHADER_INSTRUCTION_OPCODE_TYPE;
   1004 
   1005 #define D3DSI_COISSUE 0x40000000
   1006 
   1007 #define D3DSP_DCL_USAGE_SHIFT 0
   1008 #define D3DSP_DCL_USAGE_MASK  0x0000000f
   1009 
   1010 #define D3DSP_DCL_USAGEINDEX_SHIFT 16
   1011 #define D3DSP_DCL_USAGEINDEX_MASK  0x000f0000
   1012 
   1013 #define D3DSP_TEXTURETYPE_SHIFT 27
   1014 #define D3DSP_TEXTURETYPE_MASK  0x78000000
   1015 
   1016 #define D3DSP_REGNUM_MASK       0x000007FF
   1017 
   1018 #define D3DSP_WRITEMASK_0       0x00010000
   1019 #define D3DSP_WRITEMASK_1       0x00020000
   1020 #define D3DSP_WRITEMASK_2       0x00040000
   1021 #define D3DSP_WRITEMASK_3       0x00080000
   1022 #define D3DSP_WRITEMASK_ALL     0x000F0000
   1023 
   1024 #define D3DSP_DSTMOD_SHIFT      20
   1025 #define D3DSP_DSTMOD_MASK       (0xF << D3DSP_DSTMOD_SHIFT)
   1026 
   1027 typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE {
   1028     D3DSPDM_NONE             = 0 << D3DSP_DSTMOD_SHIFT,
   1029     D3DSPDM_SATURATE         = 1 << D3DSP_DSTMOD_SHIFT,
   1030     D3DSPDM_PARTIALPRECISION = 2 << D3DSP_DSTMOD_SHIFT,
   1031     D3DSPDM_MSAMPCENTROID    = 4 << D3DSP_DSTMOD_SHIFT,
   1032     D3DSPDM_FORCE_DWORD  = 0x7FFFFFFF
   1033 } D3DSHADER_PARAM_DSTMOD_TYPE;
   1034 
   1035 #define D3DSP_DSTSHIFT_SHIFT     24
   1036 #define D3DSP_DSTSHIFT_MASK      (0xF << D3DSP_DSTSHIFT_SHIFT)
   1037 
   1038 #define D3DSP_REGTYPE_SHIFT      28
   1039 #define D3DSP_REGTYPE_SHIFT2     8
   1040 #define D3DSP_REGTYPE_MASK       (0x7 << D3DSP_REGTYPE_SHIFT)
   1041 #define D3DSP_REGTYPE_MASK2      0x00001800
   1042 
   1043 typedef enum _D3DSHADER_MISCTYPE_OFFSETS {
   1044     D3DSMO_POSITION = 0,
   1045     D3DSMO_FACE = 1
   1046 } D3DSHADER_MISCTYPE_OFFSETS;
   1047 
   1048 typedef enum _D3DSHADER_PARAM_REGISTER_TYPE {
   1049     D3DSPR_TEMP = 0,
   1050     D3DSPR_INPUT = 1,
   1051     D3DSPR_CONST = 2,
   1052     D3DSPR_ADDR = 3,
   1053     D3DSPR_TEXTURE = 3,
   1054     D3DSPR_RASTOUT = 4,
   1055     D3DSPR_ATTROUT = 5,
   1056     D3DSPR_TEXCRDOUT = 6,
   1057     D3DSPR_OUTPUT = 6,
   1058     D3DSPR_CONSTINT = 7,
   1059     D3DSPR_COLOROUT = 8,
   1060     D3DSPR_DEPTHOUT = 9,
   1061     D3DSPR_SAMPLER = 10,
   1062     D3DSPR_CONST2 = 11,
   1063     D3DSPR_CONST3 = 12,
   1064     D3DSPR_CONST4 = 13,
   1065     D3DSPR_CONSTBOOL = 14,
   1066     D3DSPR_LOOP = 15,
   1067     D3DSPR_TEMPFLOAT16 = 16,
   1068     D3DSPR_MISCTYPE = 17,
   1069     D3DSPR_LABEL = 18,
   1070     D3DSPR_PREDICATE = 19
   1071 } D3DSHADER_PARAM_REGISTER_TYPE;
   1072 
   1073 #define D3DSP_SWIZZLE_SHIFT      16
   1074 #define D3DSP_SWIZZLE_MASK       (0xFF << D3DSP_SWIZZLE_SHIFT)
   1075 
   1076 #define D3DSP_NOSWIZZLE \
   1077     ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))
   1078 
   1079 #define D3DSP_SRCMOD_SHIFT      24
   1080 #define D3DSP_SRCMOD_MASK       (0xF << D3DSP_SRCMOD_SHIFT)
   1081 
   1082 typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE {
   1083     D3DSPSM_NONE = 0<<24,
   1084     D3DSPSM_NEG = 1<<24,
   1085     D3DSPSM_BIAS = 2<<24,
   1086     D3DSPSM_BIASNEG = 3<<24,
   1087     D3DSPSM_SIGN = 4<<24,
   1088     D3DSPSM_SIGNNEG = 5<<24,
   1089     D3DSPSM_COMP = 6<<24,
   1090     D3DSPSM_X2 = 7<<24,
   1091     D3DSPSM_X2NEG = 8<<24,
   1092     D3DSPSM_DZ = 9<<24,
   1093     D3DSPSM_DW = 10<<24,
   1094     D3DSPSM_ABS = 11<<24,
   1095     D3DSPSM_ABSNEG = 12<<24,
   1096     D3DSPSM_NOT = 13<<24
   1097 } D3DSHADER_PARAM_SRCMOD_TYPE;
   1098 
   1099 #define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor))
   1100 #define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor))
   1101 #define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF)
   1102 #define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF)
   1103 
   1104 #define D3DSI_COMMENTSIZE_SHIFT 16
   1105 #define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT)
   1106 
   1107 typedef enum _D3DSTATEBLOCKTYPE {
   1108     D3DSBT_ALL = 1,
   1109     D3DSBT_PIXELSTATE = 2,
   1110     D3DSBT_VERTEXSTATE = 3
   1111 } D3DSTATEBLOCKTYPE;
   1112 
   1113 typedef enum _D3DSTENCILOP {
   1114     D3DSTENCILOP_KEEP = 1,
   1115     D3DSTENCILOP_ZERO = 2,
   1116     D3DSTENCILOP_REPLACE = 3,
   1117     D3DSTENCILOP_INCRSAT = 4,
   1118     D3DSTENCILOP_DECRSAT = 5,
   1119     D3DSTENCILOP_INVERT = 6,
   1120     D3DSTENCILOP_INCR = 7,
   1121     D3DSTENCILOP_DECR = 8
   1122 } D3DSTENCILOP;
   1123 
   1124 typedef enum _D3DSWAPEFFECT {
   1125     D3DSWAPEFFECT_DISCARD = 1,
   1126     D3DSWAPEFFECT_FLIP = 2,
   1127     D3DSWAPEFFECT_COPY = 3,
   1128     D3DSWAPEFFECT_OVERLAY = 4,
   1129     D3DSWAPEFFECT_FLIPEX = 5
   1130 } D3DSWAPEFFECT;
   1131 
   1132 typedef enum _D3DTEXTUREADDRESS {
   1133     D3DTADDRESS_WRAP = 1,
   1134     D3DTADDRESS_MIRROR = 2,
   1135     D3DTADDRESS_CLAMP = 3,
   1136     D3DTADDRESS_BORDER = 4,
   1137     D3DTADDRESS_MIRRORONCE = 5
   1138 } D3DTEXTUREADDRESS;
   1139 
   1140 typedef enum _D3DTEXTUREFILTERTYPE {
   1141     D3DTEXF_NONE = 0,
   1142     D3DTEXF_POINT = 1,
   1143     D3DTEXF_LINEAR = 2,
   1144     D3DTEXF_ANISOTROPIC = 3,
   1145     D3DTEXF_PYRAMIDALQUAD = 6,
   1146     D3DTEXF_GAUSSIANQUAD = 7,
   1147     D3DTEXF_CONVOLUTIONMONO = 8
   1148 } D3DTEXTUREFILTERTYPE;
   1149 
   1150 typedef enum _D3DTEXTUREOP {
   1151     D3DTOP_DISABLE = 1,
   1152     D3DTOP_SELECTARG1 = 2,
   1153     D3DTOP_SELECTARG2 = 3,
   1154     D3DTOP_MODULATE = 4,
   1155     D3DTOP_MODULATE2X = 5,
   1156     D3DTOP_MODULATE4X = 6,
   1157     D3DTOP_ADD = 7,
   1158     D3DTOP_ADDSIGNED = 8,
   1159     D3DTOP_ADDSIGNED2X = 9,
   1160     D3DTOP_SUBTRACT = 10,
   1161     D3DTOP_ADDSMOOTH = 11,
   1162     D3DTOP_BLENDDIFFUSEALPHA = 12,
   1163     D3DTOP_BLENDTEXTUREALPHA = 13,
   1164     D3DTOP_BLENDFACTORALPHA = 14,
   1165     D3DTOP_BLENDTEXTUREALPHAPM = 15,
   1166     D3DTOP_BLENDCURRENTALPHA = 16,
   1167     D3DTOP_PREMODULATE = 17,
   1168     D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
   1169     D3DTOP_MODULATECOLOR_ADDALPHA = 19,
   1170     D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
   1171     D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
   1172     D3DTOP_BUMPENVMAP = 22,
   1173     D3DTOP_BUMPENVMAPLUMINANCE = 23,
   1174     D3DTOP_DOTPRODUCT3 = 24,
   1175     D3DTOP_MULTIPLYADD = 25,
   1176     D3DTOP_LERP = 26
   1177 } D3DTEXTUREOP;
   1178 
   1179 typedef enum _D3DTEXTURESTAGESTATETYPE {
   1180     D3DTSS_COLOROP = 1,
   1181     D3DTSS_COLORARG1 = 2,
   1182     D3DTSS_COLORARG2 = 3,
   1183     D3DTSS_ALPHAOP = 4,
   1184     D3DTSS_ALPHAARG1 = 5,
   1185     D3DTSS_ALPHAARG2 = 6,
   1186     D3DTSS_BUMPENVMAT00 = 7,
   1187     D3DTSS_BUMPENVMAT01 = 8,
   1188     D3DTSS_BUMPENVMAT10 = 9,
   1189     D3DTSS_BUMPENVMAT11 = 10,
   1190     D3DTSS_TEXCOORDINDEX = 11,
   1191     D3DTSS_BUMPENVLSCALE = 22,
   1192     D3DTSS_BUMPENVLOFFSET = 23,
   1193     D3DTSS_TEXTURETRANSFORMFLAGS = 24,
   1194     D3DTSS_COLORARG0 = 26,
   1195     D3DTSS_ALPHAARG0 = 27,
   1196     D3DTSS_RESULTARG = 28,
   1197     D3DTSS_CONSTANT = 32
   1198 } D3DTEXTURESTAGESTATETYPE;
   1199 
   1200 /* MSDN has this in d3d9caps.h, but it should be here */
   1201 #define D3DTSS_TCI_PASSTHRU                       0x00000
   1202 #define D3DTSS_TCI_CAMERASPACENORMAL              0x10000
   1203 #define D3DTSS_TCI_CAMERASPACEPOSITION            0x20000
   1204 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR    0x30000
   1205 #define D3DTSS_TCI_SPHEREMAP                      0x40000
   1206 
   1207 typedef enum _D3DTEXTURETRANSFORMFLAGS {
   1208     D3DTTFF_DISABLE = 0,
   1209     D3DTTFF_COUNT1 = 1,
   1210     D3DTTFF_COUNT2 = 2,
   1211     D3DTTFF_COUNT3 = 3,
   1212     D3DTTFF_COUNT4 = 4,
   1213     D3DTTFF_PROJECTED = 256
   1214 } D3DTEXTURETRANSFORMFLAGS;
   1215 
   1216 typedef enum _D3DTRANSFORMSTATETYPE {
   1217     D3DTS_VIEW = 2,
   1218     D3DTS_PROJECTION = 3,
   1219     D3DTS_TEXTURE0 = 16,
   1220     D3DTS_TEXTURE1 = 17,
   1221     D3DTS_TEXTURE2 = 18,
   1222     D3DTS_TEXTURE3 = 19,
   1223     D3DTS_TEXTURE4 = 20,
   1224     D3DTS_TEXTURE5 = 21,
   1225     D3DTS_TEXTURE6 = 22,
   1226     D3DTS_TEXTURE7 = 23
   1227 } D3DTRANSFORMSTATETYPE;
   1228 
   1229 #define D3DDMAPSAMPLER 256
   1230 #define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
   1231 #define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
   1232 #define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
   1233 #define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
   1234 
   1235 #define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)
   1236 #define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
   1237 #define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
   1238 #define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
   1239 #define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
   1240 
   1241 typedef enum _D3DVERTEXBLENDFLAGS {
   1242     D3DVBF_DISABLE = 0,
   1243     D3DVBF_1WEIGHTS = 1,
   1244     D3DVBF_2WEIGHTS = 2,
   1245     D3DVBF_3WEIGHTS = 3,
   1246     D3DVBF_TWEENING = 255,
   1247     D3DVBF_0WEIGHTS = 256
   1248 } D3DVERTEXBLENDFLAGS;
   1249 
   1250 typedef enum _D3DVS_ADDRESSMODE_TYPE {
   1251     D3DVS_ADDRMODE_ABSOLUTE = 0<<13,
   1252     D3DVS_ADDRMODE_RELATIVE = 1<<13
   1253 } D3DVS_ADDRESSMODE_TYPE;
   1254 
   1255 typedef enum _D3DVS_RASTOUT_OFFSETS {
   1256     D3DSRO_POSITION = 0,
   1257     D3DSRO_FOG = 1,
   1258     D3DSRO_POINT_SIZE = 2
   1259 } D3DVS_RASTOUT_OFFSETS;
   1260 
   1261 typedef enum _D3DZBUFFERTYPE {
   1262     D3DZB_FALSE = 0,
   1263     D3DZB_TRUE = 1,
   1264     D3DZB_USEW = 2
   1265 } D3DZBUFFERTYPE;
   1266 
   1267 /*****************************************************************************
   1268  * Structs                                                                   *
   1269  *****************************************************************************/
   1270 typedef struct D3DDISPLAYMODEEX {
   1271     UINT Size;
   1272     UINT Width;
   1273     UINT Height;
   1274     UINT RefreshRate;
   1275     D3DFORMAT Format;
   1276     D3DSCANLINEORDERING ScanLineOrdering;
   1277 } D3DDISPLAYMODEEX, *PD3DDISPLAYMODEEX, *LPD3DDISPLAYMODEEX;
   1278 
   1279 typedef struct D3DDISPLAYMODEFILTER {
   1280     UINT Size;
   1281     D3DFORMAT Format;
   1282     D3DSCANLINEORDERING ScanLineOrdering;
   1283 } D3DDISPLAYMODEFILTER, *PD3DDISPLAYMODEFILTER, *LPD3DDISPLAYMODEFILTER;
   1284 
   1285 typedef struct _D3D_OMAC {
   1286     BYTE Omac[16];
   1287 } D3D_OMAC, *PD3D_OMAC, *LPD3D_OMAC;
   1288 
   1289 typedef struct _D3DADAPTER_IDENTIFIER9 {
   1290     char Driver[512];
   1291     char Description[512];
   1292     char DeviceName[32];
   1293     DWORD DriverVersionLowPart;
   1294     DWORD DriverVersionHighPart;
   1295     DWORD VendorId;
   1296     DWORD DeviceId;
   1297     DWORD SubSysId;
   1298     DWORD Revision;
   1299     GUID DeviceIdentifier;
   1300     DWORD WHQLLevel;
   1301 } D3DADAPTER_IDENTIFIER9, *PD3DADAPTER_IDENTIFIER9, *LPD3DADAPTER_IDENTIFIER9;
   1302 
   1303 typedef struct _D3DAES_CTR_IV {
   1304     UINT64 IV;
   1305     UINT64 Count;
   1306 } D3DAES_CTR_IV, *PD3DAES_CTR_IV, *LPD3DAES_CTR_IV;
   1307 
   1308 typedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT {
   1309     D3D_OMAC omac;
   1310     GUID ConfigureType;
   1311     HANDLE hChannel;
   1312     UINT SequenceNumber;
   1313 } D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT, *PD3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT, *LPD3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT;
   1314 
   1315 typedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION {
   1316     D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT Parameters;
   1317     HANDLE DXVA2DecodeHandle;
   1318     HANDLE CryptoSessionHandle;
   1319     HANDLE DeviceHandle;
   1320 } D3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION, *PD3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION, *LPD3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION;
   1321 
   1322 typedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE {
   1323     D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT Parameters;
   1324     UINT StartSequenceQuery;
   1325     UINT StartSequenceConfigure;
   1326 } D3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE, *PD3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE, *LPD3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE;
   1327 
   1328 typedef struct _D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS {
   1329     union {
   1330         struct {
   1331             UINT ProtectionEnabled : 1;
   1332             UINT OverlayOrFullscreenRequired : 1;
   1333             UINT Reserved : 30;
   1334         };
   1335         UINT Value;
   1336     };
   1337 } D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS, *PD3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS, *LPD3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS;
   1338 
   1339 typedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION {
   1340     D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT Parameters;
   1341     D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS Protections;
   1342 } D3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION, *PD3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION, *LPD3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION;
   1343 
   1344 typedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE {
   1345     D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT Parameters;
   1346     D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE ProcessIdentiferType;
   1347     HANDLE ProcessHandle;
   1348     BOOL AllowAccess;
   1349 } D3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE, *PD3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE, *LPD3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE;
   1350 
   1351 typedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION {
   1352     D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT Parameters;
   1353     GUID EncryptionGuid;
   1354 } D3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION, *PD3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION, *LPD3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION;
   1355 
   1356 typedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT {
   1357     D3D_OMAC omac;
   1358     GUID ConfigureType;
   1359     HANDLE hChannel;
   1360     UINT SequenceNumber;
   1361     HRESULT ReturnCode;
   1362 } D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT;
   1363 
   1364 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERY_INPUT {
   1365     GUID QueryType;
   1366     HANDLE hChannel;
   1367     UINT SequenceNumber;
   1368 } D3DAUTHENTICATEDCHANNEL_QUERY_INPUT, *PD3DAUTHENTICATEDCHANNEL_QUERY_INPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERY_INPUT;
   1369 
   1370 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT {
   1371     D3D_OMAC omac;
   1372     GUID QueryType;
   1373     HANDLE hChannel;
   1374     UINT SequenceNumber;
   1375     HRESULT ReturnCode;
   1376 } D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;
   1377 
   1378 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT {
   1379     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1380     D3DAUTHENTICATEDCHANNELTYPE ChannelType;
   1381 } D3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT;
   1382 
   1383 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT {
   1384     D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;
   1385     HANDLE DXVA2DecodeHandle;
   1386 } D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT;
   1387 
   1388 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT {
   1389     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1390     HANDLE DXVA2DecodeHandle;
   1391     HANDLE CryptoSessionHandle;
   1392     HANDLE DeviceHandle;
   1393 } D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT;
   1394 
   1395 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT {
   1396     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1397     HANDLE DeviceHandle;
   1398 } D3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT;
   1399 
   1400 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT {
   1401     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1402     UINT NumEncryptionGuids;
   1403 } D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT;
   1404 
   1405 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT {
   1406     D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;
   1407     UINT EncryptionGuidIndex;
   1408 } D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT;
   1409 
   1410 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT {
   1411     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1412     UINT EncryptionGuidIndex;
   1413     GUID EncryptionGuid;
   1414 } D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT;
   1415 
   1416 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT {
   1417     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1418     D3DBUSTYPE BusType;
   1419     BOOL bAccessibleInContiguousBlocks;
   1420     BOOL bAccessibleInNonContiguousBlocks;
   1421 } D3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT;
   1422 
   1423 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT {
   1424     D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;
   1425     HANDLE DeviceHandle;
   1426     HANDLE CryptoSessionHandle;
   1427 } D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT;
   1428 
   1429 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT {
   1430     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1431     HANDLE DeviceHandle;
   1432     HANDLE CryptoSessionHandle;
   1433     UINT NumOutputIDs;
   1434 } D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT;
   1435 
   1436 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT {
   1437     D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;
   1438     HANDLE DeviceHandle;
   1439     HANDLE CryptoSessionHandle;
   1440     UINT OutputIDIndex;
   1441 } D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT;
   1442 
   1443 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT {
   1444     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1445     HANDLE DeviceHandle;
   1446     HANDLE CryptoSessionHandle;
   1447     UINT OutputIDIndex;
   1448     UINT64 OutputID;
   1449 } D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT;
   1450 
   1451 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT {
   1452     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1453     D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS ProtectionFlags;
   1454 } D3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT;
   1455 
   1456 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT {
   1457     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1458     UINT NumRestrictedSharedResourceProcesses;
   1459 } D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT;
   1460 
   1461 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT {
   1462     D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;
   1463     UINT ProcessIndex;
   1464 } D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT;
   1465 
   1466 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT {
   1467     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1468     UINT ProcessIndex;
   1469     D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE ProcessIdentifer;
   1470     HANDLE ProcessHandle;
   1471 } D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT;
   1472 
   1473 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT {
   1474     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1475     GUID EncryptionGuid;
   1476 } D3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT;
   1477 
   1478 typedef struct _D3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT {
   1479     D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;
   1480     UINT NumUnrestrictedProtectedSharedResources;
   1481 } D3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT, *PD3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT, *LPD3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT;
   1482 
   1483 typedef struct _D3DBOX {
   1484     UINT Left;
   1485     UINT Top;
   1486     UINT Right;
   1487     UINT Bottom;
   1488     UINT Front;
   1489     UINT Back;
   1490 } D3DBOX, *PD3DBOX, *LPD3DBOX;
   1491 
   1492 typedef struct _D3DCLIPSTATUS9 {
   1493     DWORD ClipUnion;
   1494     DWORD ClipIntersection;
   1495 } D3DCLIPSTATUS9, *PD3DCLIPSTATUS9, *LPD3DCLIPSTATUS9;
   1496 
   1497 typedef struct _D3DCOLORVALUE {
   1498     float r;
   1499     float g;
   1500     float b;
   1501     float a;
   1502 } D3DCOLORVALUE, *PD3DCOLORVALUE, *LPD3DCOLORVALUE;
   1503 
   1504 typedef struct _D3DCOMPOSERECTDESC {
   1505     USHORT X, Y;
   1506     USHORT Width, Height;
   1507 } D3DCOMPOSERECTDESC, *PD3DCOMPOSERECTDESC, *LPD3DCOMPOSERECTDESC;
   1508 
   1509 typedef struct _D3DCOMPOSERECTDESTINATION {
   1510     USHORT SrcRectIndex;
   1511     USHORT Reserved;
   1512     SHORT X, Y;
   1513 } D3DCOMPOSERECTDESTINATION, *PD3DCOMPOSERECTDESTINATION, *LPD3DCOMPOSERECTDESTINATION;
   1514 
   1515 typedef struct _D3DDEVICE_CREATION_PARAMETERS {
   1516     UINT AdapterOrdinal;
   1517     D3DDEVTYPE DeviceType;
   1518     HWND hFocusWindow;
   1519     DWORD BehaviorFlags;
   1520 } D3DDEVICE_CREATION_PARAMETERS, *PD3DDEVICE_CREATION_PARAMETERS, *LPD3DDEVICE_CREATION_PARAMETERS;
   1521 
   1522 typedef struct _D3DDEVINFO_D3D9BANDWIDTHTIMINGS {
   1523     FLOAT MaxBandwidthUtilized;
   1524     FLOAT FrontEndUploadMemoryUtilizedPercent;
   1525     FLOAT VertexRateUtilizedPercent;
   1526     FLOAT TriangleSetupRateUtilizedPercent;
   1527     FLOAT FillRateUtilizedPercent;
   1528 } D3DDEVINFO_D3D9BANDWIDTHTIMINGS, *PD3DDEVINFO_D3D9BANDWIDTHTIMINGS, *LPD3DDEVINFO_D3D9BANDWIDTHTIMINGS;
   1529 
   1530 typedef struct _D3DDEVINFO_D3D9CACHEUTILIZATION {
   1531     FLOAT TextureCacheHitRate;
   1532     FLOAT PostTransformVertexCacheHitRate;
   1533 } D3DDEVINFO_D3D9CACHEUTILIZATION, *PD3DDEVINFO_D3D9CACHEUTILIZATION, *LPD3DDEVINFO_D3D9CACHEUTILIZATION;
   1534 
   1535 typedef struct _D3DDEVINFO_D3D9INTERFACETIMINGS {
   1536     FLOAT WaitingForGPUToUseApplicationResourceTimePercent;
   1537     FLOAT WaitingForGPUToAcceptMoreCommandsTimePercent;
   1538     FLOAT WaitingForGPUToStayWithinLatencyTimePercent;
   1539     FLOAT WaitingForGPUExclusiveResourceTimePercent;
   1540     FLOAT WaitingForGPUOtherTimePercent;
   1541 } D3DDEVINFO_D3D9INTERFACETIMINGS, *PD3DDEVINFO_D3D9INTERFACETIMINGS, *LPD3DDEVINFO_D3D9INTERFACETIMINGS;
   1542 
   1543 typedef struct _D3DDEVINFO_D3D9PIPELINETIMINGS {
   1544     FLOAT VertexProcessingTimePercent;
   1545     FLOAT PixelProcessingTimePercent;
   1546     FLOAT OtherGPUProcessingTimePercent;
   1547     FLOAT GPUIdleTimePercent;
   1548 } D3DDEVINFO_D3D9PIPELINETIMINGS, *PD3DDEVINFO_D3D9PIPELINETIMINGS, *LPD3DDEVINFO_D3D9PIPELINETIMINGS;
   1549 
   1550 typedef struct _D3DDEVINFO_D3D9STAGETIMINGS {
   1551     FLOAT MemoryProcessingPercent;
   1552     FLOAT ComputationProcessingPercent;
   1553 } D3DDEVINFO_D3D9STAGETIMINGS, *PD3DDEVINFO_D3D9STAGETIMINGS, *LPD3DDEVINFO_D3D9STAGETIMINGS;
   1554 
   1555 typedef struct _D3DDEVINFO_D3DVERTEXSTATS {
   1556     DWORD NumRenderedTriangles;
   1557     DWORD NumExtraClippingTriangles;
   1558 } D3DDEVINFO_D3DVERTEXSTATS, *LPD3DDEVINFO_D3DVERTEXSTATS;
   1559 
   1560 typedef struct _D3DRESOURCESTATS {
   1561     BOOL bThrashing;
   1562     DWORD ApproxBytesDownloaded;
   1563     DWORD NumEvicts;
   1564     DWORD NumVidCreates;
   1565     DWORD LastPri;
   1566     DWORD NumUsed;
   1567     DWORD NumUsedInVidMem;
   1568     DWORD WorkingSet;
   1569     DWORD WorkingSetBytes;
   1570     DWORD TotalManaged;
   1571     DWORD TotalBytes;
   1572 } D3DRESOURCESTATS, *PD3DRESOURCESTATS, *LPD3DRESOURCESTATS;
   1573 
   1574 typedef struct _D3DDEVINFO_RESOURCEMANAGER {
   1575     D3DRESOURCESTATS stats[(D3DRTYPE_INDEXBUFFER+1)];
   1576 } D3DDEVINFO_RESOURCEMANAGER, *LPD3DDEVINFO_RESOURCEMANAGER;
   1577 
   1578 typedef struct _D3DDEVINFO_VCACHE {
   1579     DWORD Pattern;
   1580     DWORD OptMethod;
   1581     DWORD CacheSize;
   1582     DWORD MagicNumber;
   1583 } D3DDEVINFO_VCACHE, *LPD3DDEVINFO_VCACHE;
   1584 
   1585 typedef struct _D3DDISPLAYMODE {
   1586     UINT Width;
   1587     UINT Height;
   1588     UINT RefreshRate;
   1589     D3DFORMAT Format;
   1590 } D3DDISPLAYMODE, *PD3DDISPLAYMODE, *LPD3DDISPLAYMODE;
   1591 
   1592 typedef struct _D3DENCRYPTED_BLOCK_INFO {
   1593     UINT NumEncryptedBytesAtBeginning;
   1594     UINT NumBytesInSkipPattern;
   1595     UINT NumBytesInEncryptPattern;
   1596 } D3DENCRYPTED_BLOCK_INFO, *PD3DENCRYPTED_BLOCK_INFO, *LPD3DENCRYPTED_BLOCK_INFO;
   1597 
   1598 typedef struct _D3DGAMMARAMP {
   1599     WORD red [256];
   1600     WORD green[256];
   1601     WORD blue [256];
   1602 } D3DGAMMARAMP, *PD3DGAMMARAMP, *LPD3DGAMMARAMP;
   1603 
   1604 typedef struct _D3DINDEXBUFFER_DESC {
   1605     D3DFORMAT Format;
   1606     D3DRESOURCETYPE Type;
   1607     DWORD Usage;
   1608     D3DPOOL Pool;
   1609     UINT Size;
   1610 } D3DINDEXBUFFER_DESC, *PD3DINDEXBUFFER_DESC, *LPD3DINDEXBUFFER_DESC;
   1611 
   1612 typedef struct _D3DVECTOR {
   1613     float x;
   1614     float y;
   1615     float z;
   1616 } D3DVECTOR, *PD3DVECTOR, *LPD3DVECTOR;
   1617 
   1618 typedef struct _D3DLIGHT9 {
   1619     D3DLIGHTTYPE Type;
   1620     D3DCOLORVALUE Diffuse;
   1621     D3DCOLORVALUE Specular;
   1622     D3DCOLORVALUE Ambient;
   1623     D3DVECTOR Position;
   1624     D3DVECTOR Direction;
   1625     float Range;
   1626     float Falloff;
   1627     float Attenuation0;
   1628     float Attenuation1;
   1629     float Attenuation2;
   1630     float Theta;
   1631     float Phi;
   1632 } D3DLIGHT9, *PD3DLIGHT9, *LPD3DLIGHT9;
   1633 
   1634 typedef struct _D3DLOCKED_BOX {
   1635     INT RowPitch;
   1636     INT SlicePitch;
   1637     void* pBits;
   1638 } D3DLOCKED_BOX, *PD3DLOCKED_BOX, *LPD3DLOCKED_BOX;
   1639 
   1640 typedef struct _D3DLOCKED_RECT {
   1641     INT Pitch;
   1642     void* pBits;
   1643 } D3DLOCKED_RECT, *PD3DLOCKED_RECT, *LPD3DLOCKED_RECT;
   1644 
   1645 typedef struct _D3DMATERIAL9 {
   1646     D3DCOLORVALUE Diffuse;
   1647     D3DCOLORVALUE Ambient;
   1648     D3DCOLORVALUE Specular;
   1649     D3DCOLORVALUE Emissive;
   1650     float Power;
   1651 } D3DMATERIAL9, *PD3DMATERIAL9, *LPD3DMATERIAL9;
   1652 
   1653 typedef struct _D3DMATRIX {
   1654     union {
   1655         struct {
   1656             float _11, _12, _13, _14;
   1657             float _21, _22, _23, _24;
   1658             float _31, _32, _33, _34;
   1659             float _41, _42, _43, _44;
   1660         };
   1661         float m[4][4];
   1662     };
   1663 } D3DMATRIX, *PD3DMATRIX, *LPD3DMATRIX;
   1664 
   1665 typedef struct _D3DMEMORYPRESSURE {
   1666     UINT64 BytesEvictedFromProcess;
   1667     UINT64 SizeOfInefficientAllocation;
   1668     DWORD LevelOfEfficiency;
   1669 } D3DMEMORYPRESSURE, *PD3DMEMORYPRESSURE, *LPD3DMEMORYPRESSURE;
   1670 
   1671 typedef struct _D3DPRESENTSTATS {
   1672     UINT PresentCount;
   1673     UINT PresentRefreshCount;
   1674     UINT SyncRefreshCount;
   1675     LARGE_INTEGER SyncQPCTime;
   1676     LARGE_INTEGER SyncGPUTime;
   1677 } D3DPRESENTSTATS, *PD3DPRESENTSTATS, *LPD3DPRESENTSTATS;
   1678 
   1679 typedef struct _D3DPRESENT_PARAMETERS_ {
   1680     UINT BackBufferWidth;
   1681     UINT BackBufferHeight;
   1682     D3DFORMAT BackBufferFormat;
   1683     UINT BackBufferCount;
   1684     D3DMULTISAMPLE_TYPE MultiSampleType;
   1685     DWORD MultiSampleQuality;
   1686     D3DSWAPEFFECT SwapEffect;
   1687     HWND hDeviceWindow;
   1688     BOOL Windowed;
   1689     BOOL EnableAutoDepthStencil;
   1690     D3DFORMAT AutoDepthStencilFormat;
   1691     DWORD Flags;
   1692     UINT FullScreen_RefreshRateInHz;
   1693     UINT PresentationInterval;
   1694 } D3DPRESENT_PARAMETERS, *PD3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS;
   1695 
   1696 typedef struct _D3DRANGE {
   1697     UINT Offset;
   1698     UINT Size;
   1699 } D3DRANGE, *PD3DRANGE, *LPD3DRANGE;
   1700 
   1701 typedef struct _D3DRASTER_STATUS {
   1702     BOOL InVBlank;
   1703     UINT ScanLine;
   1704 } D3DRASTER_STATUS, *PD3DRASTER_STATUS, *LPD3DRASTER_STATUS;
   1705 
   1706 typedef struct _D3DRECT {
   1707     LONG x1;
   1708     LONG y1;
   1709     LONG x2;
   1710     LONG y2;
   1711 } D3DRECT, *PD3DRECT, *LPD3DRECT;
   1712 
   1713 typedef struct _D3DRECTPATCH_INFO {
   1714     UINT StartVertexOffsetWidth;
   1715     UINT StartVertexOffsetHeight;
   1716     UINT Width;
   1717     UINT Height;
   1718     UINT Stride;
   1719     D3DBASISTYPE Basis;
   1720     D3DDEGREETYPE Degree;
   1721 } D3DRECTPATCH_INFO, *PD3DRECTPATCH_INFO, *LPD3DRECTPATCH_INFO;
   1722 
   1723 typedef struct _D3DSURFACE_DESC {
   1724     D3DFORMAT Format;
   1725     D3DRESOURCETYPE Type;
   1726     DWORD Usage;
   1727     D3DPOOL Pool;
   1728     D3DMULTISAMPLE_TYPE MultiSampleType;
   1729     DWORD MultiSampleQuality;
   1730     UINT Width;
   1731     UINT Height;
   1732 } D3DSURFACE_DESC, *PD3DSURFACE_DESC, *LPD3DSURFACE_DESC;
   1733 
   1734 typedef struct _D3DTRIPATCH_INFO {
   1735     UINT StartVertexOffset;
   1736     UINT NumVertices;
   1737     D3DBASISTYPE Basis;
   1738     D3DDEGREETYPE Degree;
   1739 } D3DTRIPATCH_INFO, *PD3DTRIPATCH_INFO, *LPD3DTRIPATCH_INFO;
   1740 
   1741 typedef struct _D3DVERTEXBUFFER_DESC {
   1742     D3DFORMAT Format;
   1743     D3DRESOURCETYPE Type;
   1744     DWORD Usage;
   1745     D3DPOOL Pool;
   1746     UINT Size;
   1747     DWORD FVF;
   1748 } D3DVERTEXBUFFER_DESC, *PD3DVERTEXBUFFER_DESC, *LPD3DVERTEXBUFFER_DESC;
   1749 
   1750 typedef struct _D3DVERTEXELEMENT9 {
   1751     WORD Stream;
   1752     WORD Offset;
   1753     BYTE Type;
   1754     BYTE Method;
   1755     BYTE Usage;
   1756     BYTE UsageIndex;
   1757 } D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;
   1758 
   1759 typedef struct _D3DVIEWPORT9 {
   1760     DWORD X;
   1761     DWORD Y;
   1762     DWORD Width;
   1763     DWORD Height;
   1764     float MinZ;
   1765     float MaxZ;
   1766 } D3DVIEWPORT9, *PD3DVIEWPORT9, *LPD3DVIEWPORT9;
   1767 
   1768 typedef struct _D3DVOLUME_DESC {
   1769     D3DFORMAT Format;
   1770     D3DRESOURCETYPE Type;
   1771     DWORD Usage;
   1772     D3DPOOL Pool;
   1773     UINT Width;
   1774     UINT Height;
   1775     UINT Depth;
   1776 } D3DVOLUME_DESC, *PD3DVOLUME_DESC, *LPD3DVOLUME_DESC;
   1777 
   1778 #ifndef _WIN32
   1779 /* If _WIN32 isn't declared it means only internal header files are used. To
   1780  * avoid a conflict, IUnknown is declared here rather than in d3d9.h */
   1781 
   1782 typedef struct IUnknown IUnknown, *PUNKNOWN, *LPUNKNOWN;
   1783 
   1784 #ifdef __cplusplus
   1785 extern "C" const GUID IID_IUnknown;
   1786 
   1787 struct IUnknown
   1788 {
   1789 	virtual HRESULT WINAPI QueryInterface(REFIID riid, void **ppvObject) = 0;
   1790 	virtual ULONG WINAPI AddRef() = 0;
   1791 	virtual ULONG WINAPI Release() = 0;
   1792 };
   1793 #else /* __cplusplus */
   1794 extern const GUID IID_IUnknown;
   1795 
   1796 typedef struct IUnknownVtbl
   1797 {
   1798 	/* IUnknown */
   1799 	HRESULT (WINAPI *QueryInterface)(IUnknown *This, REFIID riid, void **ppvObject);
   1800 	ULONG (WINAPI *AddRef)(IUnknown *This);
   1801 	ULONG (WINAPI *Release)(IUnknown *This);
   1802 } IUnknownVtbl;
   1803 
   1804 struct IUnknown
   1805 {
   1806 	IUnknownVtbl *lpVtbl;
   1807 };
   1808 
   1809 /* IUnknown macros */
   1810 #define IUnknown_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
   1811 #define IUnknown_AddRef(p) (p)->lpVtbl->AddRef(p)
   1812 #define IUnknown_Release(p) (p)->lpVtbl->Release(p)
   1813 #endif /* __cplusplus */
   1814 #endif /* _WIN32 */
   1815 
   1816 #endif /* _D3D9TYPES_H_ */
   1817