Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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