Thread overview
directX9 SDK in d but with out any use
Aug 31, 2004
aelmetwaly
Aug 31, 2004
Q
Aug 31, 2004
J C Calvarese
Aug 31, 2004
Brad Anderson
Aug 31, 2004
J C Calvarese
August 31, 2004
Hi there,
I translated d3d9.h and d3d9caps.h and d3d9types.h into d but when i compile
my program I can't simply link with d3d9.lib and dxguid.lib. the linker give
invalid lib error :-(
It's a major drawback for d language that it doesn't support microsoft libs.
But these are the files for those interseted. I posted here because I don't
know how to add it to dsource. they have no automatic registeration of
projects.
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
d3d9.d
////////////////////////////////////////

// Author : Ahmed El-Metwaly
// contact : aelmetwaly@gawa.com
// Lic     : GPL


/*==========================================================================
;
 *
 *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
 *
 *  File:   d3d9.h
 *  Content:    Direct3D include file
 *

**************************************************************************** /


const int DIRECT3D_VERSION =  0x0900;

// include this file content only if compiling for DX9 interfaces
//#if(DIRECT3D_VERSION >= 0x0900)
//version( DIRECT3D_VERSION)
//{

 /* This identifier is passed to Direct3DCreate9 in order to ensure that an
  * application was built against the correct header files. This number is
  * incremented whenever a header (or other) change would require
applications
  * to be rebuilt. If the version doesn't match, Direct3DCreate9 will fail.
  * (The number itself has no meaning.)*/

 const int D3D_SDK_VERSION = 31;


 import std.c.stdio;
 import std.c.stdlib;
 import std.string;
 import std.c.windows.windows;
 import std.c.windows.com;
 //import win32.wingdi; //too many conflicts with phobos std.c.windows

 // from win32.wingdi
 struct _RGNDATAHEADER {
   DWORD dwSize;
   DWORD iType;
   DWORD nCount;
   DWORD nRgnSize;
   RECT rcBound;
 }
 alias _RGNDATAHEADER RGNDATAHEADER;
 alias _RGNDATAHEADER* PRGNDATAHEADER;

 struct _RGNDATA {
   RGNDATAHEADER rdh;
   char Buffer[1];
 }
 alias _RGNDATA RGNDATA;
 alias _RGNDATA* PRGNDATA;
 alias _RGNDATA* NPRGNDATA;
 alias _RGNDATA* LPRGNDATA;

 alias GUID* REFIID;


 alias HANDLE HMONITOR;
 //alias WINAPI D3DAPI;



 /*
  * Interface IID's
  */


 /* IID_IDirect3D9 */
 /* {81BDCBCA-64D4-426d-AE8D-AD0147F4275C} */
 GUID IID_IDirect3D9 = { 0x81BDCBCA, 0x64D4, 0x426D, [ 0xAE, 0x8D, 0xAD,
0x1, 0x47, 0xF4, 0x27, 0x5C] };

 /* IID_IDirect3DDevice9 */
 // {D0223B96-BF7A-43fd-92BD-A43B0D82B9EB} */
 GUID IID_IDirect3DDevice9 = { 0xd0223b96, 0xbf7a, 0x43fd, [ 0x92, 0xbd,
0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb] };

 /* IID_IDirect3DResource9 */
 // {05EEC05D-8F7D-4362-B999-D1BAF357C704}
 GUID IID_IDirect3DResource9 = { 0x5eec05d, 0x8f7d, 0x4362, [ 0xb9,  0x99,
0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4]};

 /* IID_IDirect3DBaseTexture9 */
 /* {580CA87E-1D3C-4d54-991D-B7D3E3C298CE} */
 GUID IID_IDirect3DBaseTexture9 ={ 0x580ca87e, 0x1d3c, 0x4d54, [ 0x99, 0x1d,
0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce]};

 /* IID_IDirect3DTexture9 */
 /* {85C31227-3DE5-4f00-9B3A-F11AC38C18B5} */
 GUID IID_IDirect3DTexture9 = { 0x85c31227, 0x3de5, 0x4f00,[ 0x9b, 0x3a,
0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5]};

 /* IID_IDirect3DCubeTexture9 */
 /* {FFF32F81-D953-473a-9223-93D652ABA93F} */
 GUID IID_IDirect3DCubeTexture9 = { 0xfff32f81, 0xd953, 0x473a, [0x92, 0x23,
0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f]};

 /* IID_IDirect3DVolumeTexture9 */
 /* {2518526C-E789-4111-A7B9-47EF328D13E6} */
 GUID IID_IDirect3DVolumeTexture9 = { 0x2518526c, 0xe789, 0x4111, [0xa7,
0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6]};

 /* IID_IDirect3DVertexBuffer9 */
 /* {B64BB1B5-FD70-4df6-BF91-19D0A12455E3} */
 GUID IID_IDirect3DVertexBuffer9 = { 0xb64bb1b5, 0xfd70, 0x4df6, [0xbf,
0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3]};

 /* IID_IDirect3DIndexBuffer9 */
 /* {7C9DD65E-D3F7-4529-ACEE-785830ACDE35} */
 GUID IID_IDirect3DIndexBuffer9 = { 0x7c9dd65e, 0xd3f7, 0x4529, [0xac,
0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35]};

 /* IID_IDirect3DSurface9 */
 /* {0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B} */
 GUID IID_IDirect3DSurface9 = { 0xcfbaf3a, 0x9ff6, 0x429a, [0x99,  0xb3,
0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b]};

 /* IID_IDirect3DVolume9 */
 /* {24F416E6-1F67-4aa7-B88E-D33F6F3128A1} */
 GUID IID_IDirect3DVolume9 = { 0x24f416e6, 0x1f67, 0x4aa7, [0xb8,  0x8e,
0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1]};

 /* IID_IDirect3DSwapChain9 */
 /* {794950F2-ADFC-458a-905E-10A10B0B503B} */
 GUID IID_IDirect3DSwapChain9 = { 0x794950f2, 0xadfc, 0x458a, [0x90, 0x5e,
0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b]};

 /* IID_IDirect3DVertexDeclaration9 */
 /* {DD13C59C-36FA-4098-A8FB-C7ED39DC8546} */
 GUID IID_IDirect3DVertexDeclaration9 = { 0xdd13c59c, 0x36fa, 0x4098, [0xa8,
0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46]};

 /* IID_IDirect3DVertexShader9 */
 /* {EFC5557E-6265-4613-8A94-43857889EB36} */
 GUID IID_IDirect3DVertexShader9 = { 0xefc5557e, 0x6265, 0x4613, [0x8a,
0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36]};

 /* IID_IDirect3DPixelShader9 */
 /* {6D3BDBDC-5B02-4415-B852-CE5E8BCCB289} */
 GUID IID_IDirect3DPixelShader9 = { 0x6d3bdbdc, 0x5b02, 0x4415, [0xb8,
0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89]};

 /* IID_IDirect3DStateBlock9 */
 /* {B07C4FE5-310D-4ba8-A23C-4F0F206F218B} */
 GUID IID_IDirect3DStateBlock9 = { 0xb07c4fe5, 0x310d, 0x4ba8, [ 0xa2, 0x3c,
0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b]};

 /* IID_IDirect3DQuery9 */
 /* {d9771460-a695-4f26-bbd3-27b840b541cc} */
 GUID IID_IDirect3DQuery9 = { 0xd9771460, 0xa695, 0x4f26, [0xbb,  0xd3,
0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc]};




 //interface /*DECLSPEC_UUID("81BDCBCA-64D4-426d-AE8D-AD0147F4275C")*/
IDirect3D9;
 //interface /*DECLSPEC_UUID("D0223B96-BF7A-43fd-92BD-A43B0D82B9EB")*/
IDirect3DDevice9;

 //interface /*DECLSPEC_UUID("B07C4FE5-310D-4ba8-A23C-4F0F206F218B")*/
IDirect3DStateBlock9;
 //interface /*DECLSPEC_UUID("05EEC05D-8F7D-4362-B999-D1BAF357C704")*/
IDirect3DResource9;
 //interface /*DECLSPEC_UUID("DD13C59C-36FA-4098-A8FB-C7ED39DC8546")*/
IDirect3DVertexDeclaration9;
 //interface /*DECLSPEC_UUID("EFC5557E-6265-4613-8A94-43857889EB36")*/
IDirect3DVertexShader9;
 //interface /*DECLSPEC_UUID("6D3BDBDC-5B02-4415-B852-CE5E8BCCB289")*/
IDirect3DPixelShader9;
 //interface /*DECLSPEC_UUID("580CA87E-1D3C-4d54-991D-B7D3E3C298CE")*/
IDirect3DBaseTexture9;
 //interface /*DECLSPEC_UUID("85C31227-3DE5-4f00-9B3A-F11AC38C18B5")*/
IDirect3DTexture9;
 //interface /*DECLSPEC_UUID("2518526C-E789-4111-A7B9-47EF328D13E6")*/
IDirect3DVolumeTexture9;
 //interface /*DECLSPEC_UUID("FFF32F81-D953-473a-9223-93D652ABA93F")*/
IDirect3DCubeTexture9;

 //interface /*DECLSPEC_UUID("B64BB1B5-FD70-4df6-BF91-19D0A12455E3")*/
IDirect3DVertexBuffer9;
 //interface /*DECLSPEC_UUID("7C9DD65E-D3F7-4529-ACEE-785830ACDE35")*/
IDirect3DIndexBuffer9;

 //interface /*DECLSPEC_UUID("0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B")*/
IDirect3DSurface9;
 //interface /*DECLSPEC_UUID("24F416E6-1F67-4aa7-B88E-D33F6F3128A1")*/
IDirect3DVolume9;

 //interface /*DECLSPEC_UUID("794950F2-ADFC-458a-905E-10A10B0B503B")*/
IDirect3DSwapChain9;
 //interface /*DECLSPEC_UUID("d9771460-a695-4f26-bbd3-27b840b541cc")*/
IDirect3DQuery9;




 import d3d9types;
 import d3d9caps;


 extern (C) {


 /*
  * DLL Function for creating a Direct3D9 object. This object supports
  * enumeration and allows the creation of Direct3DDevice9 objects.
  * Pass the value of the constant D3D_SDK_VERSION to this function, so
  * that the run-time can validate that your application was compiled
  * against the right headers.
  */

 IDirect3D9 * Direct3DCreate9(UINT SDKVersion);


 /*
  * Direct3D interfaces
  */



 interface IDirect3D9 : IUnknown
 {
     /*** IUnknown methods ***/
     HRESULT QueryInterface (REFIID riid, void** ppvObj);
     ULONG AddRef () ;
     ULONG Release () ;

     /*** IDirect3D9 methods ***/
     HRESULT RegisterSoftwareDevice ( void* pInitializeFunction) ;
     UINT  GetAdapterCount () ;
     HRESULT GetAdapterIdentifier ( UINT Adapter,DWORD
Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) ;
     UINT  GetAdapterModeCount ( UINT Adapter,D3DFORMAT Format) ;
     HRESULT EnumAdapterModes ( UINT Adapter,D3DFORMAT Format,UINT
Mode,D3DDISPLAYMODE* pMode) ;
     HRESULT GetAdapterDisplayMode ( UINT Adapter,D3DDISPLAYMODE* pMode) ;
     HRESULT CheckDeviceType ( UINT iAdapter,D3DDEVTYPE DevType,D3DFORMAT
DisplayFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) ;
     HRESULT CheckDeviceFormat ( UINT Adapter,D3DDEVTYPE
DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE
RType,D3DFORMAT CheckFormat) ;
     HRESULT CheckDeviceMultiSampleType ( UINT Adapter,D3DDEVTYPE
DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE
MultiSampleType,DWORD* pQualityLevels) ;
     HRESULT CheckDepthStencilMatch ( UINT Adapter,D3DDEVTYPE
DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT
DepthStencilFormat) ;
     HRESULT CheckDeviceFormatConversion ( UINT Adapter,D3DDEVTYPE
DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) ;
     HRESULT GetDeviceCaps ( UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9*
pCaps) ;
     HMONITOR  GetAdapterMonitor ( UINT Adapter) ;
     HRESULT CreateDevice ( UINT Adapter,D3DDEVTYPE DeviceType,HWND
hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS*
pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) ;
 }

 alias IDirect3D9 * LPDIRECT3D9 /*, PDIRECT3D9 */;





 /* SwapChain */



 interface IDirect3DDevice9 : IUnknown
 {
     /*** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

     /*** IDirect3DDevice9 methods ***/
     HRESULT TestCooperativeLevel () ;
     UINT  GetAvailableTextureMem () ;
     HRESULT EvictManagedResources () ;
     HRESULT GetDirect3D ( IDirect3D9** ppD3D9) ;
     HRESULT GetDeviceCaps ( D3DCAPS9* pCaps) ;
     HRESULT GetDisplayMode ( UINT iSwapChain,D3DDISPLAYMODE* pMode) ;
     HRESULT GetCreationParameters ( D3DDEVICE_CREATION_PARAMETERS
*pParameters) ;
     HRESULT SetCursorProperties ( UINT XHotSpot,UINT
YHotSpot,IDirect3DSurface9* pCursorBitmap) ;
     void  SetCursorPosition ( int X,int Y,DWORD Flags) ;
     BOOL  ShowCursor ( BOOL bShow) ;
     HRESULT CreateAdditionalSwapChain ( D3DPRESENT_PARAMETERS*
pPresentationParameters,IDirect3DSwapChain9** pSwapChain) ;
     HRESULT GetSwapChain ( UINT iSwapChain,IDirect3DSwapChain9**
pSwapChain) ;
     UINT  GetNumberOfSwapChains () ;
     HRESULT Reset ( D3DPRESENT_PARAMETERS* pPresentationParameters) ;
     HRESULT Present (  RECT* pSourceRect, RECT* pDestRect,HWND
hDestWindowOverride, RGNDATA* pDirtyRegion) ;
     HRESULT GetBackBuffer ( UINT iSwapChain,UINT
iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) ;
     HRESULT GetRasterStatus ( UINT iSwapChain,D3DRASTER_STATUS*
pRasterStatus) ;
     HRESULT SetDialogBoxMode ( BOOL bEnableDialogs) ;
     void  SetGammaRamp ( UINT iSwapChain,DWORD Flags, D3DGAMMARAMP* pRamp)
;
     void  GetGammaRamp ( UINT iSwapChain,D3DGAMMARAMP* pRamp) ;
     HRESULT CreateTexture ( UINT Width,UINT Height,UINT Levels,DWORD
Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE*
pSharedHandle) ;
     HRESULT CreateVolumeTexture ( UINT Width,UINT Height,UINT Depth,UINT
Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9**
ppVolumeTexture,HANDLE* pSharedHandle) ;
     HRESULT CreateCubeTexture ( UINT EdgeLength,UINT Levels,DWORD
Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9**
ppCubeTexture,HANDLE* pSharedHandle) ;
     HRESULT CreateVertexBuffer ( UINT Length,DWORD Usage,DWORD FVF,D3DPOOL
Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle) ;
     HRESULT CreateIndexBuffer ( UINT Length,DWORD Usage,D3DFORMAT
Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE*
pSharedHandle) ;
     HRESULT CreateRenderTarget ( UINT Width,UINT Height,D3DFORMAT
Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL
Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) ;
     HRESULT CreateDepthStencilSurface ( UINT Width,UINT Height,D3DFORMAT
Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL
Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) ;
     HRESULT UpdateSurface ( IDirect3DSurface9* pSourceSurface, RECT*
pSourceRect,IDirect3DSurface9* pDestinationSurface, POINT* pDestPoint) ;
     HRESULT UpdateTexture ( IDirect3DBaseTexture9*
pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture) ;
     HRESULT GetRenderTargetData ( IDirect3DSurface9*
pRenderTarget,IDirect3DSurface9* pDestSurface) ;
     HRESULT GetFrontBufferData ( UINT iSwapChain,IDirect3DSurface9*
pDestSurface) ;
     HRESULT StretchRect ( IDirect3DSurface9* pSourceSurface, RECT*
pSourceRect,IDirect3DSurface9* pDestSurface, RECT*
pDestRect,D3DTEXTUREFILTERTYPE Filter) ;
     HRESULT ColorFill ( IDirect3DSurface9* pSurface, RECT* pRect,D3DCOLOR
color) ;
     HRESULT CreateOffscreenPlainSurface ( UINT Width,UINT Height,D3DFORMAT
Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) ;
     HRESULT SetRenderTarget ( DWORD RenderTargetIndex,IDirect3DSurface9*
pRenderTarget) ;
     HRESULT GetRenderTarget ( DWORD RenderTargetIndex,IDirect3DSurface9**
ppRenderTarget) ;
     HRESULT SetDepthStencilSurface ( IDirect3DSurface9* pNewZStencil) ;
     HRESULT GetDepthStencilSurface ( IDirect3DSurface9** ppZStencilSurface)
;
     HRESULT BeginScene () ;
     HRESULT EndScene () ;
     HRESULT Clear ( DWORD Count, D3DRECT* pRects,DWORD Flags,D3DCOLOR
Color,float Z,DWORD Stencil) ;
     HRESULT SetTransform ( D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix)
;
     HRESULT GetTransform ( D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix)
;
     HRESULT MultiplyTransform ( D3DTRANSFORMSTATETYPE, D3DMATRIX*) ;
     HRESULT SetViewport (  D3DVIEWPORT9* pViewport) ;
     HRESULT GetViewport ( D3DVIEWPORT9* pViewport) ;
     HRESULT SetMaterial (  D3DMATERIAL9* pMaterial) ;
     HRESULT GetMaterial ( D3DMATERIAL9* pMaterial) ;
     HRESULT SetLight ( DWORD Index, D3DLIGHT9*) ;
     HRESULT GetLight ( DWORD Index,D3DLIGHT9*) ;
     HRESULT LightEnable ( DWORD Index,BOOL Enable) ;
     HRESULT GetLightEnable ( DWORD Index,BOOL* pEnable) ;
     HRESULT SetClipPlane ( DWORD Index, float* pPlane) ;
     HRESULT GetClipPlane ( DWORD Index,float* pPlane) ;
     HRESULT SetRenderState ( D3DRENDERSTATETYPE State,DWORD Value) ;
     HRESULT GetRenderState ( D3DRENDERSTATETYPE State,DWORD* pValue) ;
     HRESULT CreateStateBlock ( D3DSTATEBLOCKTYPE
Type,IDirect3DStateBlock9** ppSB) ;
     HRESULT BeginStateBlock () ;
     HRESULT EndStateBlock ( IDirect3DStateBlock9** ppSB) ;
     HRESULT SetClipStatus (  D3DCLIPSTATUS9* pClipStatus) ;
     HRESULT GetClipStatus ( D3DCLIPSTATUS9* pClipStatus) ;
     HRESULT GetTexture ( DWORD Stage,IDirect3DBaseTexture9** ppTexture) ;
     HRESULT SetTexture ( DWORD Stage,IDirect3DBaseTexture9* pTexture) ;
     HRESULT GetTextureStageState ( DWORD Stage,D3DTEXTURESTAGESTATETYPE
Type,DWORD* pValue) ;
     HRESULT SetTextureStageState ( DWORD Stage,D3DTEXTURESTAGESTATETYPE
Type,DWORD Value) ;
     HRESULT GetSamplerState ( DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD*
pValue) ;
     HRESULT SetSamplerState ( DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD
Value) ;
     HRESULT ValidateDevice ( DWORD* pNumPasses) ;
     HRESULT SetPaletteEntries ( UINT PaletteNumber, PALETTEENTRY* pEntries)
;
     HRESULT GetPaletteEntries ( UINT PaletteNumber,PALETTEENTRY* pEntries)
;
     HRESULT SetCurrentTexturePalette ( UINT PaletteNumber) ;
     HRESULT GetCurrentTexturePalette ( UINT *PaletteNumber) ;
     HRESULT SetScissorRect (  RECT* pRect) ;
     HRESULT GetScissorRect ( RECT* pRect) ;
     HRESULT SetSoftwareVertexProcessing ( BOOL bSoftware) ;
     BOOL  GetSoftwareVertexProcessing () ;
     HRESULT SetNPatchMode ( float nSegments) ;
     float  GetNPatchMode () ;
     HRESULT DrawPrimitive ( D3DPRIMITIVETYPE PrimitiveType,UINT
StartVertex,UINT PrimitiveCount) ;
     HRESULT DrawIndexedPrimitive ( D3DPRIMITIVETYPE,INT
BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT
primCount) ;
     HRESULT DrawPrimitiveUP ( D3DPRIMITIVETYPE PrimitiveType,UINT
PrimitiveCount, void* pVertexStreamZeroData,UINT VertexStreamZeroStride) ;
     HRESULT DrawIndexedPrimitiveUP ( D3DPRIMITIVETYPE PrimitiveType,UINT
MinVertexIndex,UINT NumVertices,UINT PrimitiveCount, void*
pIndexData,D3DFORMAT IndexDataFormat, void* pVertexStreamZeroData,UINT
VertexStreamZeroStride) ;
     HRESULT ProcessVertices ( UINT SrcStartIndex,UINT DestIndex,UINT
VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9*
pVertexDecl,DWORD Flags) ;
     HRESULT CreateVertexDeclaration (  D3DVERTEXELEMENT9*
pVertexElements,IDirect3DVertexDeclaration9** ppDecl) ;
     HRESULT SetVertexDeclaration ( IDirect3DVertexDeclaration9* pDecl) ;
     HRESULT GetVertexDeclaration ( IDirect3DVertexDeclaration9** ppDecl) ;
     HRESULT SetFVF ( DWORD FVF) ;
     HRESULT GetFVF ( DWORD* pFVF) ;
     HRESULT CreateVertexShader (  DWORD* pFunction,IDirect3DVertexShader9**
ppShader) ;
     HRESULT SetVertexShader ( IDirect3DVertexShader9* pShader) ;
     HRESULT GetVertexShader ( IDirect3DVertexShader9** ppShader) ;
     HRESULT SetVertexShaderConstantF ( UINT StartRegister, float*
pConstantData,UINT Vector4fCount) ;
     HRESULT GetVertexShaderConstantF ( UINT StartRegister,float*
pConstantData,UINT Vector4fCount) ;
     HRESULT SetVertexShaderConstantI ( UINT StartRegister, int*
pConstantData,UINT Vector4iCount) ;
     HRESULT GetVertexShaderConstantI ( UINT StartRegister,int*
pConstantData,UINT Vector4iCount) ;
     HRESULT SetVertexShaderConstantB ( UINT StartRegister, BOOL*
pConstantData,UINT  BoolCount) ;
     HRESULT GetVertexShaderConstantB ( UINT StartRegister,BOOL*
pConstantData,UINT BoolCount) ;
     HRESULT SetStreamSource ( UINT StreamNumber,IDirect3DVertexBuffer9*
pStreamData,UINT OffsetInBytes,UINT Stride) ;
     HRESULT GetStreamSource ( UINT StreamNumber,IDirect3DVertexBuffer9**
ppStreamData,UINT* OffsetInBytes,UINT* pStride) ;
     HRESULT SetStreamSourceFreq ( UINT StreamNumber,UINT Divider) ;
     HRESULT GetStreamSourceFreq ( UINT StreamNumber,UINT* Divider) ;
     HRESULT SetIndices ( IDirect3DIndexBuffer9* pIndexData) ;
     HRESULT GetIndices ( IDirect3DIndexBuffer9** ppIndexData) ;
     HRESULT CreatePixelShader (  DWORD* pFunction,IDirect3DPixelShader9**
ppShader) ;
     HRESULT SetPixelShader ( IDirect3DPixelShader9* pShader) ;
     HRESULT GetPixelShader ( IDirect3DPixelShader9** ppShader) ;
     HRESULT SetPixelShaderConstantF ( UINT StartRegister, float*
pConstantData,UINT Vector4fCount) ;
     HRESULT GetPixelShaderConstantF ( UINT StartRegister,float*
pConstantData,UINT Vector4fCount) ;
     HRESULT SetPixelShaderConstantI ( UINT StartRegister, int*
pConstantData,UINT Vector4iCount) ;
     HRESULT GetPixelShaderConstantI ( UINT StartRegister,int*
pConstantData,UINT Vector4iCount) ;
     HRESULT SetPixelShaderConstantB ( UINT StartRegister, BOOL*
pConstantData,UINT  BoolCount) ;
     HRESULT GetPixelShaderConstantB ( UINT StartRegister,BOOL*
pConstantData,UINT BoolCount) ;
     HRESULT DrawRectPatch ( UINT Handle, float* pNumSegs,
D3DRECTPATCH_INFO* pRectPatchInfo) ;
     HRESULT DrawTriPatch ( UINT Handle, float* pNumSegs, D3DTRIPATCH_INFO*
pTriPatchInfo) ;
     HRESULT DeletePatch ( UINT Handle) ;
     HRESULT CreateQuery ( D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) ;
 }

 alias IDirect3DDevice9* LPDIRECT3DDEVICE9, PDIRECT3DDEVICE9;



 interface IDirect3DStateBlock9 : IUnknown
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DStateBlock9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT Capture () ;
     HRESULT Apply () ;
 }

 alias IDirect3DStateBlock9* LPDIRECT3DSTATEBLOCK9, PDIRECT3DSTATEBLOCK9;




 interface IDirect3DSwapChain9 : IUnknown
 {
     /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DSwapChain9 methods ***/
     HRESULT Present (  RECT* pSourceRect, RECT* pDestRect,HWND
hDestWindowOverride, RGNDATA* pDirtyRegion,DWORD dwFlags) ;
     HRESULT GetFrontBufferData ( IDirect3DSurface9* pDestSurface) ;
     HRESULT GetBackBuffer ( UINT iBackBuffer,D3DBACKBUFFER_TYPE
Type,IDirect3DSurface9** ppBackBuffer) ;
     HRESULT GetRasterStatus ( D3DRASTER_STATUS* pRasterStatus) ;
     HRESULT GetDisplayMode ( D3DDISPLAYMODE* pMode) ;
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT GetPresentParameters ( D3DPRESENT_PARAMETERS*
pPresentationParameters) ;
 }

 alias IDirect3DSwapChain9* LPDIRECT3DSWAPCHAIN9, PDIRECT3DSWAPCHAIN9;



 interface IDirect3DResource9 : IUnknown
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DResource9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
;
     HRESULT FreePrivateData ( REFIID refguid) ;
     DWORD  SetPriority ( DWORD PriorityNew) ;
     DWORD  GetPriority () ;
     void  PreLoad () ;
     D3DRESOURCETYPE  GetType () ;
 }

 alias IDirect3DResource9* LPDIRECT3DRESOURCE9, PDIRECT3DRESOURCE9;




 interface IDirect3DVertexDeclaration9 : IUnknown
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DVertexDeclaration9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT GetDeclaration ( D3DVERTEXELEMENT9*,UINT* pNumElements) ;
 }

 alias IDirect3DVertexDeclaration9* LPDIRECT3DVERTEXDECLARATION9,
PDIRECT3DVERTEXDECLARATION9;




 interface IDirect3DVertexShader9 : IUnknown
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DVertexShader9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT GetFunction ( void*,UINT* pSizeOfData) ;
 }

 alias IDirect3DVertexShader9* LPDIRECT3DVERTEXSHADER9,
PDIRECT3DVERTEXSHADER9;




 interface IDirect3DPixelShader9 : IUnknown
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DPixelShader9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT GetFunction ( void*,UINT* pSizeOfData) ;
 }

 alias IDirect3DPixelShader9* LPDIRECT3DPIXELSHADER9, PDIRECT3DPIXELSHADER9;




 interface IDirect3DBaseTexture9 : IDirect3DResource9
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DResource9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
;
     HRESULT FreePrivateData ( REFIID refguid) ;
     DWORD  SetPriority ( DWORD PriorityNew) ;
     DWORD  GetPriority () ;
     void  PreLoad () ;
     D3DRESOURCETYPE  GetType () ;
     DWORD  SetLOD ( DWORD LODNew) ;
     DWORD  GetLOD () ;
     DWORD  GetLevelCount () ;
     HRESULT SetAutoGenFilterType ( D3DTEXTUREFILTERTYPE FilterType) ;
     D3DTEXTUREFILTERTYPE  GetAutoGenFilterType () ;
     void  GenerateMipSubLevels () ;
 }

 alias IDirect3DBaseTexture9* LPDIRECT3DBASETEXTURE9, PDIRECT3DBASETEXTURE9;




 interface IDirect3DTexture9 : IDirect3DBaseTexture9
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DBaseTexture9 methods ***/
     HRESULT  GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT  SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT  GetPrivateData ( REFIID refguid,void* pData,DWORD*
pSizeOfData) ;
     HRESULT  FreePrivateData ( REFIID refguid) ;
     DWORD  SetPriority ( DWORD PriorityNew) ;
     DWORD  GetPriority () ;
     void  PreLoad () ;
     D3DRESOURCETYPE  GetType () ;
     DWORD  SetLOD ( DWORD LODNew) ;
     DWORD  GetLOD () ;
     DWORD  GetLevelCount () ;
     HRESULT SetAutoGenFilterType ( D3DTEXTUREFILTERTYPE FilterType) ;
     D3DTEXTUREFILTERTYPE  GetAutoGenFilterType () ;
     void  GenerateMipSubLevels () ;
     HRESULT  GetLevelDesc ( UINT Level,D3DSURFACE_DESC *pDesc) ;
     HRESULT  GetSurfaceLevel ( UINT Level,IDirect3DSurface9**
ppSurfaceLevel) ;
     HRESULT  LockRect ( UINT Level,D3DLOCKED_RECT* pLockedRect, RECT*
pRect,DWORD Flags) ;
     HRESULT  UnlockRect ( UINT Level) ;
     HRESULT  AddDirtyRect (  RECT* pDirtyRect) ;
 }

 alias IDirect3DTexture9* LPDIRECT3DTEXTURE9, PDIRECT3DTEXTURE9;





 interface IDirect3DVolumeTexture9 : IDirect3DBaseTexture9
 {
      /* ** IUnknown methods ***/
     HRESULT  QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DBaseTexture9 methods ***/
     HRESULT  GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT  SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT  GetPrivateData ( REFIID refguid,void* pData,DWORD*
pSizeOfData) ;
     HRESULT  FreePrivateData ( REFIID refguid) ;
     DWORD  SetPriority ( DWORD PriorityNew) ;
     DWORD  GetPriority () ;
     void  PreLoad () ;
     D3DRESOURCETYPE  GetType () ;
     DWORD  SetLOD ( DWORD LODNew) ;
     DWORD  GetLOD () ;
     DWORD  GetLevelCount () ;
     HRESULT  SetAutoGenFilterType ( D3DTEXTUREFILTERTYPE FilterType) ;
     D3DTEXTUREFILTERTYPE  GetAutoGenFilterType () ;
     void  GenerateMipSubLevels () ;
     HRESULT  GetLevelDesc ( UINT Level,D3DVOLUME_DESC *pDesc) ;
     HRESULT  GetVolumeLevel ( UINT Level,IDirect3DVolume9** ppVolumeLevel)
;
     HRESULT  LockBox ( UINT Level,D3DLOCKED_BOX* pLockedVolume, D3DBOX*
pBox,DWORD Flags) ;
     HRESULT  UnlockBox ( UINT Level) ;
     HRESULT  AddDirtyBox (  D3DBOX* pDirtyBox) ;
 }

 alias IDirect3DVolumeTexture9* LPDIRECT3DVOLUMETEXTURE9,
PDIRECT3DVOLUMETEXTURE9;





 interface IDirect3DCubeTexture9 : IDirect3DBaseTexture9
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DBaseTexture9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
;
     HRESULT FreePrivateData ( REFIID refguid) ;
     DWORD  SetPriority ( DWORD PriorityNew) ;
     DWORD  GetPriority () ;
     void  PreLoad () ;
     D3DRESOURCETYPE  GetType () ;
     DWORD  SetLOD ( DWORD LODNew) ;
     DWORD  GetLOD () ;
     DWORD  GetLevelCount () ;
     HRESULT SetAutoGenFilterType ( D3DTEXTUREFILTERTYPE FilterType) ;
     D3DTEXTUREFILTERTYPE  GetAutoGenFilterType () ;
     void  GenerateMipSubLevels () ;
     HRESULT GetLevelDesc ( UINT Level,D3DSURFACE_DESC *pDesc) ;
     HRESULT GetCubeMapSurface ( D3DCUBEMAP_FACES FaceType,UINT
Level,IDirect3DSurface9** ppCubeMapSurface) ;
     HRESULT LockRect ( D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT*
pLockedRect, RECT* pRect,DWORD Flags) ;
     HRESULT UnlockRect ( D3DCUBEMAP_FACES FaceType,UINT Level) ;
     HRESULT AddDirtyRect ( D3DCUBEMAP_FACES FaceType, RECT* pDirtyRect) ;
 }

 alias IDirect3DCubeTexture9* LPDIRECT3DCUBETEXTURE9, PDIRECT3DCUBETEXTURE9;




 interface IDirect3DVertexBuffer9  : IDirect3DResource9
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DResource9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
;
     HRESULT FreePrivateData ( REFIID refguid) ;
     DWORD  SetPriority ( DWORD PriorityNew) ;
     DWORD  GetPriority () ;
     void  PreLoad () ;
     D3DRESOURCETYPE  GetType () ;
     HRESULT Lock ( UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD
Flags) ;
     HRESULT Unlock () ;
     HRESULT GetDesc ( D3DVERTEXBUFFER_DESC *pDesc) ;
 }

 alias IDirect3DVertexBuffer9* LPDIRECT3DVERTEXBUFFER9,
PDIRECT3DVERTEXBUFFER9;




 interface IDirect3DIndexBuffer9 : IDirect3DResource9
 {
     /*** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

     /*** IDirect3DResource9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
;
     HRESULT FreePrivateData ( REFIID refguid) ;
     DWORD  SetPriority ( DWORD PriorityNew) ;
     DWORD  GetPriority () ;
     void  PreLoad () ;
     D3DRESOURCETYPE  GetType () ;
     HRESULT Lock ( UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD
Flags) ;
     HRESULT Unlock () ;
     HRESULT GetDesc ( D3DINDEXBUFFER_DESC *pDesc) ;
 }

 alias IDirect3DIndexBuffer9* LPDIRECT3DINDEXBUFFER9, PDIRECT3DINDEXBUFFER9;




 interface IDirect3DSurface9 : IDirect3DResource9
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DResource9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
;
     HRESULT FreePrivateData ( REFIID refguid) ;
     DWORD  SetPriority ( DWORD PriorityNew) ;
     DWORD  GetPriority () ;
     void  PreLoad () ;
     D3DRESOURCETYPE  GetType () ;
     HRESULT GetContainer ( REFIID riid,void** ppContainer) ;
     HRESULT GetDesc ( D3DSURFACE_DESC *pDesc) ;
     HRESULT LockRect ( D3DLOCKED_RECT* pLockedRect, RECT* pRect,DWORD
Flags) ;
     HRESULT UnlockRect () ;
     HRESULT GetDC ( HDC *phdc) ;
     HRESULT ReleaseDC ( HDC hdc) ;
 }

 alias IDirect3DSurface9* LPDIRECT3DSURFACE9, PDIRECT3DSURFACE9;




 interface IDirect3DVolume9 : IUnknown
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DVolume9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
SizeOfData,DWORD Flags) ;
     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
;
     HRESULT FreePrivateData ( REFIID refguid) ;
     HRESULT GetContainer ( REFIID riid,void** ppContainer) ;
     HRESULT GetDesc ( D3DVOLUME_DESC *pDesc) ;
     HRESULT LockBox ( D3DLOCKED_BOX * pLockedVolume, D3DBOX* pBox,DWORD
Flags) ;
     HRESULT UnlockBox () ;
 }

 alias IDirect3DVolume9* LPDIRECT3DVOLUME9, PDIRECT3DVOLUME9;





 interface IDirect3DQuery9 : IUnknown
 {
      /* ** IUnknown methods ***/
     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
     ULONG AddRef () ;
     ULONG Release () ;

      /* ** IDirect3DQuery9 methods ***/
     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
     D3DQUERYTYPE  GetType () ;
     DWORD  GetDataSize () ;
     HRESULT Issue ( DWORD dwIssueFlags) ;
     HRESULT GetData ( void* pData,DWORD dwSize,DWORD dwGetDataFlags) ;
 }

 alias IDirect3DQuery9* LPDIRECT3DQUERY9, PDIRECT3DQUERY9;





/***************************************************************************
*
  * Flags for SetPrivateData method on all D3D9 interfaces
  *
  * The passed pointer is an IUnknown ptr. The SizeOfData argument to
SetPrivateData
  * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this
  * pointer and Release when the private data is destroyed. The data will be
  * destroyed when another SetPrivateData with the same GUID is set, when
  * FreePrivateData is called, or when the D3D9 object is freed.

****************************************************************************
/
 const int D3DSPD_IUNKNOWN                  =    0x00000001L;


/***************************************************************************
*
  *
  *  Flags for IDirect3D9::CreateDevice's BehaviorFlags
  *

**************************************************************************** /

 const int D3DCREATE_FPU_PRESERVE               =   0x00000002L;
 const int D3DCREATE_MULTITHREADED              =   0x00000004L;

 const int D3DCREATE_PUREDEVICE                 =   0x00000010L;
 const int D3DCREATE_SOFTWARE_VERTEXPROCESSING  =   0x00000020L;
 const int D3DCREATE_HARDWARE_VERTEXPROCESSING  =   0x00000040L;
 const int D3DCREATE_MIXED_VERTEXPROCESSING     =   0x00000080L;

 const int D3DCREATE_DISABLE_DRIVER_MANAGEMENT  =   0x00000100L;
 const int D3DCREATE_ADAPTERGROUP_DEVICE        =   0x00000200L;



/***************************************************************************
*
  *
  *  Parameter for IDirect3D9::CreateDevice's iAdapter
  *

**************************************************************************** /

 const int D3DADAPTER_DEFAULT                   =  0;


/***************************************************************************
*
  *
  *  Flags for IDirect3D9::EnumAdapters
  *

**************************************************************************** /

 const int D3DENUM_WHQL_LEVEL                   =   0x00000002L;


/***************************************************************************
*
  *
  *  Maximum number of back-buffers supported in DX8
  *

**************************************************************************** /

 const int D3DPRESENT_BACK_BUFFERS_MAX          =   3L;


/***************************************************************************
*
  *
  *  Flags for IDirect3DDevice9::SetGammaRamp
  *

**************************************************************************** /

 const int D3DSGR_NO_CALIBRATION                =  0x00000000L;
 const int D3DSGR_CALIBRATE                     =  0x00000001L;


/***************************************************************************
*
  *
  *  Flags for IDirect3DDevice9::SetCursorPosition
  *

**************************************************************************** /

 const int D3DCURSOR_IMMEDIATE_UPDATE           =  0x00000001L;


/***************************************************************************
*
  *
  *  Flags for IDirect3DSwapChain9::Present
  *

**************************************************************************** /

 const int D3DPRESENT_DONOTWAIT                 =  0x00000001L;
 const int D3DPRESENT_LINEAR_CONTENT            =  0x00000002L;


/***************************************************************************
*
  *
  *  Flags for DrawPrimitive/DrawIndexedPrimitive
  *   Also valid for Begin/BeginIndexed
  *   Also valid for VertexBuffer::CreateVertexBuffer

**************************************************************************** /


 /*
  *  DirectDraw error codes
  */
 const int _FACD3D   = 0x876;
 /*
 #define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
 #define MAKE_D3DSTATUS( code )  MAKE_HRESULT( 0, _FACD3D, code )

 /*
  * Direct3D Errors
  */
 /*
 #define D3D_OK                              S_OK

 #define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)
 #define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)
 #define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)
 #define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)
 #define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)
 #define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)
 #define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)
 #define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)
 #define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)
 #define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)
 #define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)
 #define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)

 #define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)
 #define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)
 #define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)
 #define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)
 #define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)
 #define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)
 #define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)
 #define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
 #define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)
 #define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)
 #define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)

 */


 }  //  extern (C)

//} // version DIRECTX9 //////////////////////////////////////////////////////////////////////////// //////


////
d3d9caps.d
/////////////////////////////////////////////////

// Author : Ahmed El-Metwaly
// contact : aelmetwaly@gawa.com
// Lic     : GPL

/*==========================================================================
;
 *
 *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
 *
 *  File:       d3d9caps.h
 *  Content:    Direct3D capabilities include file
 *

***************************************************************************/

import std.c.stdio;
import std.c.stdlib;
import std.string;
import std.c.windows.windows;
import std.c.windows.com;
import d3d9types;

const int DIRECT3D_VERSION     =    0x0900;


// include this file content only if compiling for DX9 interfaces
//version(DIRECT3D_VERSION )
//{
 align (4){


 struct _D3DVSHADERCAPS2_0
 {
         DWORD Caps;
         INT DynamicFlowControlDepth;
         INT NumTemps;
         INT StaticFlowControlDepth;
 }

 alias _D3DVSHADERCAPS2_0 D3DVSHADERCAPS2_0;

 const int D3DVS20CAPS_PREDICATION     =        (1<<0);

 const int D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH = 24;
 const int D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH = 0;
 const int D3DVS20_MAX_NUMTEMPS  =  32;
 const int D3DVS20_MIN_NUMTEMPS  =  12;
 const int D3DVS20_MAX_STATICFLOWCONTROLDEPTH  =  4;
 const int D3DVS20_MIN_STATICFLOWCONTROLDEPTH  =  1;

 struct _D3DPSHADERCAPS2_0
 {
     DWORD Caps;
     INT DynamicFlowControlDepth;
     INT NumTemps;
     INT StaticFlowControlDepth;
     INT NumInstructionSlots;
 }

 alias _D3DPSHADERCAPS2_0 D3DPSHADERCAPS2_0;

 const int D3DPS20CAPS_ARBITRARYSWIZZLE       = (1<<0);
 const int D3DPS20CAPS_GRADIENTINSTRUCTIONS   = (1<<1);
 const int D3DPS20CAPS_PREDICATION            = (1<<2);
 const int D3DPS20CAPS_NODEPENDENTREADLIMIT   = (1<<3);
 const int D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT  = (1<<4);

 const int D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH   = 24;
 const int D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH   = 0;
 const int D3DPS20_MAX_NUMTEMPS   = 32;
 const int D3DPS20_MIN_NUMTEMPS   = 12;
 const int D3DPS20_MAX_STATICFLOWCONTROLDEPTH  =  4;
 const int D3DPS20_MIN_STATICFLOWCONTROLDEPTH  =  0;
 const int D3DPS20_MAX_NUMINSTRUCTIONSLOTS   = 512;
 const int D3DPS20_MIN_NUMINSTRUCTIONSLOTS   = 96;

 const int D3DMIN30SHADERINSTRUCTIONS = 512;
 const int D3DMAX30SHADERINSTRUCTIONS = 32768;

 struct _D3DCAPS9
 {
     /* Device Info */
     D3DDEVTYPE  DeviceType;
     UINT        AdapterOrdinal;

     /* Caps from DX7 Draw */
     DWORD   Caps;
     DWORD   Caps2;
     DWORD   Caps3;
     DWORD   PresentationIntervals;

     /* Cursor Caps */
     DWORD   CursorCaps;

     /* 3D Device Caps */
     DWORD   DevCaps;

     DWORD   PrimitiveMiscCaps;
     DWORD   RasterCaps;
     DWORD   ZCmpCaps;
     DWORD   SrcBlendCaps;
     DWORD   DestBlendCaps;
     DWORD   AlphaCmpCaps;
     DWORD   ShadeCaps;
     DWORD   TextureCaps;
     DWORD   TextureFilterCaps;          // D3DPTFILTERCAPS for
IDirect3DTexture9's
     DWORD   CubeTextureFilterCaps;      // D3DPTFILTERCAPS for
IDirect3DCubeTexture9's
     DWORD   VolumeTextureFilterCaps;    // D3DPTFILTERCAPS for
IDirect3DVolumeTexture9's
     DWORD   TextureAddressCaps;         // D3DPTADDRESSCAPS for
IDirect3DTexture9's
     DWORD   VolumeTextureAddressCaps;   // D3DPTADDRESSCAPS for
IDirect3DVolumeTexture9's

     DWORD   LineCaps;                   // D3DLINECAPS

     DWORD   MaxTextureWidth, MaxTextureHeight;
     DWORD   MaxVolumeExtent;

     DWORD   MaxTextureRepeat;
     DWORD   MaxTextureAspectRatio;
     DWORD   MaxAnisotropy;
     float   MaxVertexW;

     float   GuardBandLeft;
     float   GuardBandTop;
     float   GuardBandRight;
     float   GuardBandBottom;

     float   ExtentsAdjust;
     DWORD   StencilCaps;

     DWORD   FVFCaps;
     DWORD   TextureOpCaps;
     DWORD   MaxTextureBlendStages;
     DWORD   MaxSimultaneousTextures;

     DWORD   VertexProcessingCaps;
     DWORD   MaxActiveLights;
     DWORD   MaxUserClipPlanes;
     DWORD   MaxVertexBlendMatrices;
     DWORD   MaxVertexBlendMatrixIndex;

     float   MaxPointSize;

     DWORD   MaxPrimitiveCount;          // max number of primitives per
DrawPrimitive call
     DWORD   MaxVertexIndex;
     DWORD   MaxStreams;
     DWORD   MaxStreamStride;            // max stride for SetStreamSource

     DWORD   VertexShaderVersion;
     DWORD   MaxVertexShaderConst;       // number of vertex shader constant
registers

     DWORD   PixelShaderVersion;
     float   PixelShader1xMaxValue;      // max value storable in registers
of ps.1.x shaders

     // Here are the DX9 specific ones
     DWORD   DevCaps2;

     float   MaxNpatchTessellationLevel;
     DWORD   Reserved5;

     UINT    MasterAdapterOrdinal;       // ordinal of master adaptor for
adapter group
     UINT    AdapterOrdinalInGroup;      // ordinal inside the adapter group
     UINT    NumberOfAdaptersInGroup;    // number of adapters in this
adapter group (only if master)
     DWORD   DeclTypes;                  // Data types, supported in vertex
declarations
     DWORD   NumSimultaneousRTs;         // Will be at least 1
     DWORD   StretchRectFilterCaps;      // Filter caps supported by
StretchRect
     D3DVSHADERCAPS2_0 VS20Caps;
     D3DPSHADERCAPS2_0 PS20Caps;
     DWORD   VertexTextureFilterCaps;    // D3DPTFILTERCAPS for
IDirect3DTexture9's for texture, used in vertex shaders
     DWORD   MaxVShaderInstructionsExecuted; // maximum number of vertex
shader instructions that can be executed
     DWORD   MaxPShaderInstructionsExecuted; // maximum number of pixel
shader instructions that can be executed
     DWORD   MaxVertexShader30InstructionSlots;
     DWORD   MaxPixelShader30InstructionSlots;
 }

 alias _D3DCAPS9 D3DCAPS9;

 //
 // BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS
 //

 //
 // Caps
 //
 const int D3DCAPS_READ_SCANLINE        =   0x00020000L;

 //
 // Caps2
 //
 const int D3DCAPS2_FULLSCREENGAMMA     =   0x00020000L;
 const int D3DCAPS2_CANCALIBRATEGAMMA   =   0x00100000L;
 const int D3DCAPS2_RESERVED            =   0x02000000L;
 const int D3DCAPS2_CANMANAGERESOURCE   =   0x10000000L;
 const int D3DCAPS2_DYNAMICTEXTURES     =   0x20000000L;
 const int D3DCAPS2_CANAUTOGENMIPMAP    =   0x40000000L;

 //
 // Caps3
 //
 const long D3DCAPS3_RESERVED            =   0x8000001fL;

 // Indicates that the device can respect the ALPHABLENDENABLE render state
 // when fullscreen while using the FLIP or DISCARD swap effect.
 // COPY and COPYVSYNC swap effects work whether or not this flag is set.
 const int D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD  = 0x00000020L;

 // Indicates that the device can perform a gamma correction from
 // a windowed back buffer containing linear content to the sRGB desktop.
 const int D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION = 0x00000080L;

 const int D3DCAPS3_COPY_TO_VIDMEM       =  0x00000100L; /* Device can
acclerate copies from sysmem to local vidmem */
 const int D3DCAPS3_COPY_TO_SYSTEMMEM    =  0x00000200L; /* Device can
acclerate copies from local vidmem to sysmem */


 //
 // PresentationIntervals
 //
 const int D3DPRESENT_INTERVAL_DEFAULT   =  0x00000000L;
 const int D3DPRESENT_INTERVAL_ONE       =  0x00000001L;
 const int D3DPRESENT_INTERVAL_TWO       =  0x00000002L;
 const int D3DPRESENT_INTERVAL_THREE     =  0x00000004L;
 const int D3DPRESENT_INTERVAL_FOUR      =  0x00000008L;
 const long D3DPRESENT_INTERVAL_IMMEDIATE =  0x80000000L;

 //
 // CursorCaps
 //
 // Driver supports HW color cursor in at least hi-res modes(height >=400)
 const int D3DCURSORCAPS_COLOR          =   0x00000001L;
 // Driver supports HW cursor also in low-res modes(height < 400)
 const int D3DCURSORCAPS_LOWRES         =   0x00000002L;

 //
 // DevCaps
 //
 const int D3DDEVCAPS_EXECUTESYSTEMMEMORY = 0x00000010L; /* Device can use
execute buffers from system memory */
 const int D3DDEVCAPS_EXECUTEVIDEOMEMORY  = 0x00000020L; /* Device can use
execute buffers from video memory */
 const int D3DDEVCAPS_TLVERTEXSYSTEMMEMORY = 0x00000040L; /* Device can use
TL buffers from system memory */
 const int D3DDEVCAPS_TLVERTEXVIDEOMEMORY = 0x00000080L; /* Device can use
TL buffers from video memory */
 const int D3DDEVCAPS_TEXTURESYSTEMMEMORY = 0x00000100L; /* Device can
texture from system memory */
 const int D3DDEVCAPS_TEXTUREVIDEOMEMORY  = 0x00000200L; /* Device can
texture from device memory */
 const int D3DDEVCAPS_DRAWPRIMTLVERTEX    = 0x00000400L; /* Device can draw
TLVERTEX primitives */
 const int D3DDEVCAPS_CANRENDERAFTERFLIP  = 0x00000800L; /* Device can
render without waiting for flip to complete */
 const int D3DDEVCAPS_TEXTURENONLOCALVIDMEM = 0x00001000L; /* Device can
texture from nonlocal video memory */
 const int D3DDEVCAPS_DRAWPRIMITIVES2    =  0x00002000L; /* Device can
support DrawPrimitives2 */
 const int D3DDEVCAPS_SEPARATETEXTUREMEMORIES = 0x00004000L; /* Device is
texturing from separate memory pools */
 const int D3DDEVCAPS_DRAWPRIMITIVES2EX  =  0x00008000L; /* Device can
support Extended DrawPrimitives2 i.e. DX7 compliant driver*/
 const int D3DDEVCAPS_HWTRANSFORMANDLIGHT = 0x00010000L; /* Device can
support transformation and lighting in hardware and DRAWPRIMITIVES2EX must
be also */
 const int D3DDEVCAPS_CANBLTSYSTONONLOCAL = 0x00020000L; /* Device supports
a Tex Blt from system memory to non-local vidmem */
 const int D3DDEVCAPS_HWRASTERIZATION     = 0x00080000L; /* Device has HW
acceleration for rasterization */
 const int D3DDEVCAPS_PUREDEVICE          = 0x00100000L; /* Device supports
D3DCREATE_PUREDEVICE */
 const int D3DDEVCAPS_QUINTICRTPATCHES    = 0x00200000L; /* Device supports
quintic Beziers and BSplines */
 const int D3DDEVCAPS_RTPATCHES           = 0x00400000L; /* Device supports
Rect and Tri patches */
 const int D3DDEVCAPS_RTPATCHHANDLEZERO   = 0x00800000L; /* Indicates that
RT Patches may be drawn efficiently using handle 0 */
 const int D3DDEVCAPS_NPATCHES            = 0x01000000L; /* Device supports
N-Patches */

 //
 // PrimitiveMiscCaps
 //
 const int D3DPMISCCAPS_MASKZ           =   0x00000002L;
 const int D3DPMISCCAPS_CULLNONE        =   0x00000010L;
 const int D3DPMISCCAPS_CULLCW          =   0x00000020L;
 const int D3DPMISCCAPS_CULLCCW         =   0x00000040L;
 const int D3DPMISCCAPS_COLORWRITEENABLE =  0x00000080L;
 const int D3DPMISCCAPS_CLIPPLANESCALEDPOINTS = 0x00000100L; /* Device
correctly clips scaled points to clip planes */
 const int D3DPMISCCAPS_CLIPTLVERTS     =   0x00000200L; /* device will clip
post-transformed vertex primitives */
 const int D3DPMISCCAPS_TSSARGTEMP      =   0x00000400L; /* device supports
D3DTA_TEMP for temporary register */
 const int D3DPMISCCAPS_BLENDOP         =   0x00000800L; /* device supports
D3DRS_BLENDOP */
 const int D3DPMISCCAPS_NULLREFERENCE   =   0x00001000L; /* Reference Device
that doesnt render */
 const int D3DPMISCCAPS_INDEPENDENTWRITEMASKS =    0x00004000L; /* Device
supports independent write masks for MET or MRT */
 const int D3DPMISCCAPS_PERSTAGECONSTANT =  0x00008000L; /* Device supports
per-stage constants */
 const int D3DPMISCCAPS_FOGANDSPECULARALPHA =  0x00010000L; /* Device
supports separate fog and specular alpha (many devices
                                                           use the specular
alpha channel to store fog factor) */
 const int D3DPMISCCAPS_SEPARATEALPHABLEND    =     0x00020000L; /* Device
supports separate blend settings for the alpha channel */
 const int D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS  =  0x00040000L; /* Device
supports different bit depths for MRT */
 const int D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING = 0x00080000L; /* Device
supports post-pixel shader operations for MRT */
 const int D3DPMISCCAPS_FOGVERTEXCLAMPED        =   0x00100000L; /* Device
clamps fog blend factor per vertex */

 //
 // LineCaps
 //
 const int D3DLINECAPS_TEXTURE        =     0x00000001L;
 const int D3DLINECAPS_ZTEST          =     0x00000002L;
 const int D3DLINECAPS_BLEND          =     0x00000004L;
 const int D3DLINECAPS_ALPHACMP       =     0x00000008L;
 const int D3DLINECAPS_FOG            =     0x00000010L;
 const int D3DLINECAPS_ANTIALIAS      =     0x00000020L;

 //
 // RasterCaps
 //
 const int D3DPRASTERCAPS_DITHER          =       0x00000001L;
 const int D3DPRASTERCAPS_ZTEST           =       0x00000010L;
 const int D3DPRASTERCAPS_FOGVERTEX       =       0x00000080L;
 const int D3DPRASTERCAPS_FOGTABLE        =       0x00000100L;
 const int D3DPRASTERCAPS_MIPMAPLODBIAS   =       0x00002000L;
 const int D3DPRASTERCAPS_ZBUFFERLESSHSR  =       0x00008000L;
 const int D3DPRASTERCAPS_FOGRANGE        =       0x00010000L;
 const int D3DPRASTERCAPS_ANISOTROPY      =       0x00020000L;
 const int D3DPRASTERCAPS_WBUFFER         =       0x00040000L;
 const int D3DPRASTERCAPS_WFOG            =       0x00100000L;
 const int D3DPRASTERCAPS_ZFOG            =       0x00200000L;
 const int D3DPRASTERCAPS_COLORPERSPECTIVE    =   0x00400000L; /* Device
iterates colors perspective correct */
 const int D3DPRASTERCAPS_SCISSORTEST         =   0x01000000L;
 const int D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS =   0x02000000L;
 const int D3DPRASTERCAPS_DEPTHBIAS           =   0x04000000L;
 const int D3DPRASTERCAPS_MULTISAMPLE_TOGGLE  =   0x08000000L;

 //
 // ZCmpCaps, AlphaCmpCaps
 //
 const int D3DPCMPCAPS_NEVER         =      0x00000001L;
 const int D3DPCMPCAPS_LESS          =      0x00000002L;
 const int D3DPCMPCAPS_EQUAL         =      0x00000004L;
 const int D3DPCMPCAPS_LESSEQUAL     =      0x00000008L;
 const int D3DPCMPCAPS_GREATER       =      0x00000010L;
 const int D3DPCMPCAPS_NOTEQUAL      =      0x00000020L;
 const int D3DPCMPCAPS_GREATEREQUAL  =      0x00000040L;
 const int D3DPCMPCAPS_ALWAYS        =      0x00000080L;

 //
 // SourceBlendCaps, DestBlendCaps
 //
 const int D3DPBLENDCAPS_ZERO           =   0x00000001L;
 const int D3DPBLENDCAPS_ONE            =   0x00000002L;
 const int D3DPBLENDCAPS_SRCCOLOR       =   0x00000004L;
 const int D3DPBLENDCAPS_INVSRCCOLOR    =   0x00000008L;
 const int D3DPBLENDCAPS_SRCALPHA       =   0x00000010L;
 const int D3DPBLENDCAPS_INVSRCALPHA    =   0x00000020L;
 const int D3DPBLENDCAPS_DESTALPHA      =   0x00000040L;
 const int D3DPBLENDCAPS_INVDESTALPHA   =   0x00000080L;
 const int D3DPBLENDCAPS_DESTCOLOR      =   0x00000100L;
 const int D3DPBLENDCAPS_INVDESTCOLOR   =   0x00000200L;
 const int D3DPBLENDCAPS_SRCALPHASAT    =   0x00000400L;
 const int D3DPBLENDCAPS_BOTHSRCALPHA   =   0x00000800L;
 const int D3DPBLENDCAPS_BOTHINVSRCALPHA =  0x00001000L;
 const int D3DPBLENDCAPS_BLENDFACTOR     =  0x00002000L; /* Supports both
D3DBLEND_BLENDFACTOR and D3DBLEND_INVBLENDFACTOR */

 //
 // ShadeCaps
 //
 const int D3DPSHADECAPS_COLORGOURAUDRGB     =  0x00000008L;
 const int D3DPSHADECAPS_SPECULARGOURAUDRGB  =  0x00000200L;
 const int D3DPSHADECAPS_ALPHAGOURAUDBLEND   =  0x00004000L;
 const int D3DPSHADECAPS_FOGGOURAUD          =  0x00080000L;

 //
 // TextureCaps
 //
 const int D3DPTEXTURECAPS_PERSPECTIVE       =  0x00000001L; /*
Perspective-correct texturing is supported */
 const int D3DPTEXTURECAPS_POW2              =  0x00000002L; /* Power-of-2
texture dimensions are required - applies to non-Cube/Volume textures only.
*/
 const int D3DPTEXTURECAPS_ALPHA             =  0x00000004L; /* Alpha in
texture pixels is supported */
 const int D3DPTEXTURECAPS_SQUAREONLY        =  0x00000020L; /* Only square
textures are supported */
 const int D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE = 0x00000040L; /*
Texture indices are not scaled by the texture size prior to interpolation */
 const int D3DPTEXTURECAPS_ALPHAPALETTE      =  0x00000080L; /* Device can
draw alpha from texture palettes */
 // Device can use non-POW2 textures if:
 //  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
 //  2) D3DRS_WRAP(N) is zero for this texture's coordinates
 //  3) mip mapping is not enabled (use magnification filter only)
 const int D3DPTEXTURECAPS_NONPOW2CONDITIONAL = 0x00000100L;
 const int D3DPTEXTURECAPS_PROJECTED          = 0x00000400L; /* Device can
do D3DTTFF_PROJECTED */
 const int D3DPTEXTURECAPS_CUBEMAP            = 0x00000800L; /* Device can
do cubemap textures */
 const int D3DPTEXTURECAPS_VOLUMEMAP         =  0x00002000L; /* Device can
do volume textures */
 const int D3DPTEXTURECAPS_MIPMAP             = 0x00004000L; /* Device can
do mipmapped textures */
 const int D3DPTEXTURECAPS_MIPVOLUMEMAP       = 0x00008000L; /* Device can
do mipmapped volume textures */
 const int D3DPTEXTURECAPS_MIPCUBEMAP         = 0x00010000L; /* Device can
do mipmapped cube maps */
 const int D3DPTEXTURECAPS_CUBEMAP_POW2       = 0x00020000L; /* Device
requires that cubemaps be power-of-2 dimension */
 const int D3DPTEXTURECAPS_VOLUMEMAP_POW2     = 0x00040000L; /* Device
requires that volume maps be power-of-2 dimension */
 const int D3DPTEXTURECAPS_NOPROJECTEDBUMPENV = 0x00200000L; /* Device does
not support projected bump env lookup operation
                                                           in programmable
and fixed function pixel shaders */

 //
 // TextureFilterCaps, StretchRectFilterCaps
 //
 const int D3DPTFILTERCAPS_MINFPOINT         =  0x00000100L; /* Min Filter
*/
 const int D3DPTFILTERCAPS_MINFLINEAR        =  0x00000200L;
 const int D3DPTFILTERCAPS_MINFANISOTROPIC   =  0x00000400L;
 const int D3DPTFILTERCAPS_MINFPYRAMIDALQUAD =  0x00000800L;
 const int D3DPTFILTERCAPS_MINFGAUSSIANQUAD  =  0x00001000L;
 const int D3DPTFILTERCAPS_MIPFPOINT         =  0x00010000L; /* Mip Filter
*/
 const int D3DPTFILTERCAPS_MIPFLINEAR        =  0x00020000L;
 const int D3DPTFILTERCAPS_MAGFPOINT         =  0x01000000L; /* Mag Filter
*/
 const int D3DPTFILTERCAPS_MAGFLINEAR        =  0x02000000L;
 const int D3DPTFILTERCAPS_MAGFANISOTROPIC   =  0x04000000L;
 const int D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD =  0x08000000L;
 const int D3DPTFILTERCAPS_MAGFGAUSSIANQUAD  =  0x10000000L;

 //
 // TextureAddressCaps
 //
 const int D3DPTADDRESSCAPS_WRAP         =  0x00000001L;
 const int D3DPTADDRESSCAPS_MIRROR       =  0x00000002L;
 const int D3DPTADDRESSCAPS_CLAMP        =  0x00000004L;
 const int D3DPTADDRESSCAPS_BORDER        = 0x00000008L;
 const int D3DPTADDRESSCAPS_INDEPENDENTUV = 0x00000010L;
 const int D3DPTADDRESSCAPS_MIRRORONCE    = 0x00000020L;

 //
 // StencilCaps
 //
 const int D3DSTENCILCAPS_KEEP          =   0x00000001L;
 const int D3DSTENCILCAPS_ZERO          =   0x00000002L;
 const int D3DSTENCILCAPS_REPLACE       =   0x00000004L;
 const int D3DSTENCILCAPS_INCRSAT       =   0x00000008L;
 const int D3DSTENCILCAPS_DECRSAT       =   0x00000010L;
 const int D3DSTENCILCAPS_INVERT        =   0x00000020L;
 const int D3DSTENCILCAPS_INCR          =   0x00000040L;
 const int D3DSTENCILCAPS_DECR          =   0x00000080L;
 const int D3DSTENCILCAPS_TWOSIDED      =   0x00000100L;

 //
 // TextureOpCaps
 //
 const int D3DTEXOPCAPS_DISABLE                  =  0x00000001L;
 const int D3DTEXOPCAPS_SELECTARG1               =  0x00000002L;
 const int D3DTEXOPCAPS_SELECTARG2               =  0x00000004L;
 const int D3DTEXOPCAPS_MODULATE                 =  0x00000008L;
 const int D3DTEXOPCAPS_MODULATE2X               =  0x00000010L;
 const int D3DTEXOPCAPS_MODULATE4X               =  0x00000020L;
 const int D3DTEXOPCAPS_ADD                      =  0x00000040L;
 const int D3DTEXOPCAPS_ADDSIGNED                =  0x00000080L;
 const int D3DTEXOPCAPS_ADDSIGNED2X              =  0x00000100L;
 const int D3DTEXOPCAPS_SUBTRACT                 =  0x00000200L;
 const int D3DTEXOPCAPS_ADDSMOOTH                =  0x00000400L;
 const int D3DTEXOPCAPS_BLENDDIFFUSEALPHA        =  0x00000800L;
 const int D3DTEXOPCAPS_BLENDTEXTUREALPHA        =  0x00001000L;
 const int D3DTEXOPCAPS_BLENDFACTORALPHA         =  0x00002000L;
 const int D3DTEXOPCAPS_BLENDTEXTUREALPHAPM      =  0x00004000L;
 const int D3DTEXOPCAPS_BLENDCURRENTALPHA        =  0x00008000L;
 const int D3DTEXOPCAPS_PREMODULATE              =  0x00010000L;
 const int D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR   =  0x00020000L;
 const int D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA   =  0x00040000L;
 const int D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR =  0x00080000L;
 const int D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA = 0x00100000L;
 const int D3DTEXOPCAPS_BUMPENVMAP               =  0x00200000L;
 const int D3DTEXOPCAPS_BUMPENVMAPLUMINANCE      =  0x00400000L;
 const int D3DTEXOPCAPS_DOTPRODUCT3              =  0x00800000L;
 const int D3DTEXOPCAPS_MULTIPLYADD              =  0x01000000L;
 const int D3DTEXOPCAPS_LERP                     =  0x02000000L;

 //
 // FVFCaps
 //
 const int D3DFVFCAPS_TEXCOORDCOUNTMASK   = 0x0000ffffL; /* mask for texture
coordinate count field */
 const int D3DFVFCAPS_DONOTSTRIPELEMENTS  = 0x00080000L; /* Device prefers
that vertex elements not be stripped */
 const int D3DFVFCAPS_PSIZE               = 0x00100000L; /* Device can
receive point size */

 //
 // VertexProcessingCaps
 //
 const int D3DVTXPCAPS_TEXGEN             = 0x00000001L; /* device can do
texgen */
 const int D3DVTXPCAPS_MATERIALSOURCE7    = 0x00000002L; /* device can do
DX7-level colormaterialsource ops */
 const int D3DVTXPCAPS_DIRECTIONALLIGHTS  = 0x00000008L; /* device can do
directional lights */
 const int D3DVTXPCAPS_POSITIONALLIGHTS   = 0x00000010L; /* device can do
positional lights (includes point and spot) */
 const int D3DVTXPCAPS_LOCALVIEWER        = 0x00000020L; /* device can do
local viewer */
 const int D3DVTXPCAPS_TWEENING           = 0x00000040L; /* device can do
vertex tweening */
 const int D3DVTXPCAPS_TEXGEN_SPHEREMAP   = 0x00000100L; /* device supports
D3DTSS_TCI_SPHEREMAP */
 const int D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER  = 0x00000200L; /* device
does not support TexGen in non-local
                                                             viewer mode */

 //
 // DevCaps2
 //
 const int D3DDEVCAPS2_STREAMOFFSET                      =  0x00000001L; /*
Device supports offsets in streams. Must be set by DX9 drivers */
 const int D3DDEVCAPS2_DMAPNPATCH                        =  0x00000002L; /*
Device supports displacement maps for N-Patches*/
 const int D3DDEVCAPS2_ADAPTIVETESSRTPATCH               =  0x00000004L; /*
Device supports adaptive tesselation of RT-patches*/
 const int D3DDEVCAPS2_ADAPTIVETESSNPATCH                =  0x00000008L; /*
Device supports adaptive tesselation of N-patches*/
 const int D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES     =  0x00000010L; /*
Device supports StretchRect calls with a texture as the source*/
 const int D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH               = 0x00000020L; /*
Device supports presampled displacement maps for N-Patches */
 const int D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET = 0x00000040L; /*
Vertex elements in a vertex declaration can share the same stream offset */

 //
 // DeclTypes
 //
 const int D3DDTCAPS_UBYTE4    = 0x00000001L;
 const int D3DDTCAPS_UBYTE4N   = 0x00000002L;
 const int D3DDTCAPS_SHORT2N   = 0x00000004L;
 const int D3DDTCAPS_SHORT4N   = 0x00000008L;
 const int D3DDTCAPS_USHORT2N  = 0x00000010L;
 const int D3DDTCAPS_USHORT4N  = 0x00000020L;
 const int D3DDTCAPS_UDEC3     = 0x00000040L;
 const int D3DDTCAPS_DEC3N     = 0x00000080L;
 const int D3DDTCAPS_FLOAT16_2 = 0x00000100L;
 const int D3DDTCAPS_FLOAT16_4 = 0x00000200L;


 } //align (4)




//} /* (DIRECT3D_VERSION >= 0x0900) */


////////////////////////////////////////////////
d3d9types.d
///////////////////////////

// Author : Ahmed El-Metwaly
// contact : aelmetwaly@gawa.com
// Lic     : GPL

/*==========================================================================
;
 *
 *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
 *
 *  File:       d3d9types.h
 *  Content:    Direct3D capabilities include file
 *

***************************************************************************/


import std.c.stdio;
import std.c.stdlib;
import std.string;
import std.c.windows.windows;
import std.c.windows.com;


const int DIRECT3D_VERSION    =     0x0900;


// include this file content only if compiling for DX9 interfaces
//version(DIRECT3D_VERSION )
//{
 //#include <float.h>

 align(4){


 // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8

 alias DWORD D3DCOLOR;



 // maps unsigned 8 bits/channel to D3DCOLOR
 //#define D3DCOLOR_ARGB(a,r,g,b) \
 //
((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
 D3DCOLOR D3DCOLOR_ARGB(ubyte a, ubyte r, ubyte g, ubyte b)
 {
  return (cast(D3DCOLOR)(((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g &
0xff) << 8) | (b & 0xff)));
 }


 //#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
 D3DCOLOR D3DCOLOR_RGBA (ubyte r, ubyte g, ubyte b, ubyte  a)
 {
  return D3DCOLOR_ARGB(a, r, g, b);
 }

 //#define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)
 D3DCOLOR D3DCOLOR_XRGB (ubyte r, ubyte g, ubyte b)
 {
  return D3DCOLOR_ARGB( 0xff, r, g, b);
 }

 //#define D3DCOLOR_XYUV(y,u,v)   D3DCOLOR_ARGB(0xff,y,u,v)
 D3DCOLOR D3DCOLOR_XYUV (ubyte y, ubyte u, ubyte v)
 {
  return D3DCOLOR_ARGB (0xff, y, u, v);
 }

 //#define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)
 D3DCOLOR D3DCOLOR_AYUV (ubyte a, ubyte y, ubyte u, ubyte v)
 {
  return D3DCOLOR_ARGB (a, y, u, v);
 }

 // maps floating point channels (0.f to 1.f range) to D3DCOLOR
 //#define D3DCOLOR_COLORVALUE(r,g,b,a) \
 //
D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWOR
D)((a)*255.f))
 D3DCOLOR D3DCOLOR_COLORVALUE ( float r , float g, float b, float a)
 {
  return D3DCOLOR_RGBA( cast(DWORD) ( r * 255.f), cast(DWORD)( g * 255.f ),
cast(DWORD)( b *255.f), cast(DWORD)(a *255.f));
 }



 struct _D3DVECTOR {
     float x;
     float y;
     float z;
 }
 alias _D3DVECTOR D3DVECTOR;




 struct _D3DCOLORVALUE {
     float r;
     float g;
     float b;
     float a;
 }
 alias _D3DCOLORVALUE D3DCOLORVALUE;




 struct _D3DRECT {
     LONG x1;
     LONG y1;
     LONG x2;
     LONG y2;
 }
 alias _D3DRECT D3DRECT;




 struct _D3DMATRIX {
     union {
         struct {
             float        _11, _12, _13, _14;
             float        _21, _22, _23, _24;
             float        _31, _32, _33, _34;
             float        _41, _42, _43, _44;

         };
         float m[4][4];
     };
 }
 alias _D3DMATRIX D3DMATRIX;



 struct _D3DVIEWPORT9 {
     DWORD       X;
     DWORD       Y;            /* Viewport Top left */
     DWORD       Width;
     DWORD       Height;       /* Viewport Dimensions */
     float       MinZ;         /* Min/max of clip Volume */
     float       MaxZ;
 }
 alias _D3DVIEWPORT9 D3DVIEWPORT9;

 /*
  * Values for clip fields.
  */

 // Max number of user clipping planes, supported in D3D.
 const int D3DMAXUSERCLIPPLANES  = 32;

 // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE
 //
 const int D3DCLIPPLANE0  = (1 << 0);
 const int D3DCLIPPLANE1  = (1 << 1);
 const int D3DCLIPPLANE2  = (1 << 2);
 const int D3DCLIPPLANE3  = (1 << 3);
 const int D3DCLIPPLANE4  = (1 << 4);
 const int D3DCLIPPLANE5  = (1 << 5);

 // The following bits are used in the ClipUnion and ClipIntersection
 // members of the D3DCLIPSTATUS9
 //

 const int D3DCS_LEFT      =  0x00000001L;
 const int D3DCS_RIGHT     =  0x00000002L;
 const int D3DCS_TOP       =  0x00000004L;
 const int D3DCS_BOTTOM    =  0x00000008L;
 const int D3DCS_FRONT     =  0x00000010L;
 const int D3DCS_BACK      =  0x00000020L;
 const int D3DCS_PLANE0    =  0x00000040L;
 const int D3DCS_PLANE1    =  0x00000080L;
 const int D3DCS_PLANE2    =  0x00000100L;
 const int D3DCS_PLANE3    =  0x00000200L;
 const int D3DCS_PLANE4    =  0x00000400L;
 const int D3DCS_PLANE5    =  0x00000800L;

 const int D3DCS_ALL = (D3DCS_LEFT   |
                     D3DCS_RIGHT  |
                     D3DCS_TOP    |
                     D3DCS_BOTTOM |
                     D3DCS_FRONT  |
                     D3DCS_BACK   |
                     D3DCS_PLANE0 |
                     D3DCS_PLANE1 |
                     D3DCS_PLANE2 |
                     D3DCS_PLANE3 |
                     D3DCS_PLANE4 |
                     D3DCS_PLANE5);

 struct _D3DCLIPSTATUS9 {
     DWORD ClipUnion;
     DWORD ClipIntersection;
 }
 alias _D3DCLIPSTATUS9 D3DCLIPSTATUS9;

 struct _D3DMATERIAL9 {
     D3DCOLORVALUE   Diffuse;        /* Diffuse color RGBA */
     D3DCOLORVALUE   Ambient;        /* Ambient color RGB */
     D3DCOLORVALUE   Specular;       /* Specular 'shininess' */
     D3DCOLORVALUE   Emissive;       /* Emissive color RGB */
     float           Power;          /* Sharpness if specular highlight */
 }
 alias _D3DMATERIAL9 D3DMATERIAL9;

 enum _D3DLIGHTTYPE {
     D3DLIGHT_POINT          = 1,
     D3DLIGHT_SPOT           = 2,
     D3DLIGHT_DIRECTIONAL    = 3,
     D3DLIGHT_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DLIGHTTYPE D3DLIGHTTYPE;

 struct _D3DLIGHT9 {
     D3DLIGHTTYPE    Type;            /* Type of light source */
     D3DCOLORVALUE   Diffuse;         /* Diffuse color of light */
     D3DCOLORVALUE   Specular;        /* Specular color of light */
     D3DCOLORVALUE   Ambient;         /* Ambient color of light */
     D3DVECTOR       Position;         /* Position in world space */
     D3DVECTOR       Direction;        /* Direction in world space */
     float           Range;            /* Cutoff range */
     float           Falloff;          /* Falloff */
     float           Attenuation0;     /* Constant attenuation */
     float           Attenuation1;     /* Linear attenuation */
     float           Attenuation2;     /* Quadratic attenuation */
     float           Theta;            /* Inner angle of spotlight cone */
     float           Phi;              /* Outer angle of spotlight cone */
 }
 alias _D3DLIGHT9 D3DLIGHT9;

 /*
  * Options for clearing
  */
 const int D3DCLEAR_TARGET        =    0x00000001;  /* Clear target surface
*/
 const int D3DCLEAR_ZBUFFER       =    0x00000002;  /* Clear target z buffer
*/
 const int D3DCLEAR_STENCIL       =    0x00000004;  /* Clear stencil planes
*/

 /*
  * The following defines the rendering states
  */

 enum _D3DSHADEMODE {
     D3DSHADE_FLAT               = 1,
     D3DSHADE_GOURAUD            = 2,
     D3DSHADE_PHONG              = 3,
     D3DSHADE_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DSHADEMODE D3DSHADEMODE;

 enum _D3DFILLMODE {
     D3DFILL_POINT               = 1,
     D3DFILL_WIREFRAME           = 2,
     D3DFILL_SOLID               = 3,
     D3DFILL_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DFILLMODE D3DFILLMODE;

 enum _D3DBLEND {
     D3DBLEND_ZERO               = 1,
     D3DBLEND_ONE                = 2,
     D3DBLEND_SRCCOLOR           = 3,
     D3DBLEND_INVSRCCOLOR        = 4,
     D3DBLEND_SRCALPHA           = 5,
     D3DBLEND_INVSRCALPHA        = 6,
     D3DBLEND_DESTALPHA          = 7,
     D3DBLEND_INVDESTALPHA       = 8,
     D3DBLEND_DESTCOLOR          = 9,
     D3DBLEND_INVDESTCOLOR       = 10,
     D3DBLEND_SRCALPHASAT        = 11,
     D3DBLEND_BOTHSRCALPHA       = 12,
     D3DBLEND_BOTHINVSRCALPHA    = 13,
     D3DBLEND_BLENDFACTOR        = 14, /* Only supported if
D3DPBLENDCAPS_BLENDFACTOR is on */
     D3DBLEND_INVBLENDFACTOR     = 15, /* Only supported if
D3DPBLENDCAPS_BLENDFACTOR is on */
     D3DBLEND_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DBLEND D3DBLEND;





 enum _D3DBLENDOP {
     D3DBLENDOP_ADD              = 1,
     D3DBLENDOP_SUBTRACT         = 2,
     D3DBLENDOP_REVSUBTRACT      = 3,
     D3DBLENDOP_MIN              = 4,
     D3DBLENDOP_MAX              = 5,
     D3DBLENDOP_FORCE_DWORD      = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DBLENDOP D3DBLENDOP;




enum _D3DTEXTUREADDRESS {
     D3DTADDRESS_WRAP            = 1,
     D3DTADDRESS_MIRROR          = 2,
     D3DTADDRESS_CLAMP           = 3,
     D3DTADDRESS_BORDER          = 4,
     D3DTADDRESS_MIRRORONCE      = 5,
     D3DTADDRESS_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DTEXTUREADDRESS D3DTEXTUREADDRESS;

 enum _D3DCULL {
     D3DCULL_NONE                = 1,
     D3DCULL_CW                  = 2,
     D3DCULL_CCW                 = 3,
     D3DCULL_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DCULL D3DCULL;



 enum _D3DCMPFUNC {
     D3DCMP_NEVER                = 1,
     D3DCMP_LESS                 = 2,
     D3DCMP_EQUAL                = 3,
     D3DCMP_LESSEQUAL            = 4,
     D3DCMP_GREATER              = 5,
     D3DCMP_NOTEQUAL             = 6,
     D3DCMP_GREATEREQUAL         = 7,
     D3DCMP_ALWAYS               = 8,
     D3DCMP_FORCE_DWORD          = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DCMPFUNC D3DCMPFUNC;




 enum _D3DSTENCILOP {
     D3DSTENCILOP_KEEP           = 1,
     D3DSTENCILOP_ZERO           = 2,
     D3DSTENCILOP_REPLACE        = 3,
     D3DSTENCILOP_INCRSAT        = 4,
     D3DSTENCILOP_DECRSAT        = 5,
     D3DSTENCILOP_INVERT         = 6,
     D3DSTENCILOP_INCR           = 7,
     D3DSTENCILOP_DECR           = 8,
     D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DSTENCILOP D3DSTENCILOP;




 enum _D3DFOGMODE {
     D3DFOG_NONE                 = 0,
     D3DFOG_EXP                  = 1,
     D3DFOG_EXP2                 = 2,
     D3DFOG_LINEAR               = 3,
     D3DFOG_FORCE_DWORD          = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DFOGMODE D3DFOGMODE;





 enum _D3DZBUFFERTYPE {
     D3DZB_FALSE                 = 0,
     D3DZB_TRUE                  = 1, // Z buffering
     D3DZB_USEW                  = 2, // W buffering
     D3DZB_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DZBUFFERTYPE D3DZBUFFERTYPE;

 // Primitives supported by draw-primitive API
 enum _D3DPRIMITIVETYPE {
     D3DPT_POINTLIST             = 1,
     D3DPT_LINELIST              = 2,
     D3DPT_LINESTRIP             = 3,
     D3DPT_TRIANGLELIST          = 4,
     D3DPT_TRIANGLESTRIP         = 5,
     D3DPT_TRIANGLEFAN           = 6,
     D3DPT_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DPRIMITIVETYPE D3DPRIMITIVETYPE;

 enum _D3DTRANSFORMSTATETYPE {
     D3DTS_VIEW          = 2,
     D3DTS_PROJECTION    = 3,
     D3DTS_TEXTURE0      = 16,
     D3DTS_TEXTURE1      = 17,
     D3DTS_TEXTURE2      = 18,
     D3DTS_TEXTURE3      = 19,
     D3DTS_TEXTURE4      = 20,
     D3DTS_TEXTURE5      = 21,
     D3DTS_TEXTURE6      = 22,
     D3DTS_TEXTURE7      = 23,
     D3DTS_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DTRANSFORMSTATETYPE D3DTRANSFORMSTATETYPE;




 /** FIXME : convert these !! */
 //#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
 //#define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)
 //#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
 //#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
 //#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)

 enum _D3DRENDERSTATETYPE {
     D3DRS_ZENABLE                   = 7,    /* D3DZBUFFERTYPE (or
TRUE/FALSE for legacy) */
     D3DRS_FILLMODE                  = 8,    /* D3DFILLMODE */
     D3DRS_SHADEMODE                 = 9,    /* D3DSHADEMODE */
     D3DRS_ZWRITEENABLE              = 14,   /* TRUE to enable z writes */
     D3DRS_ALPHATESTENABLE           = 15,   /* TRUE to enable alpha tests
*/
     D3DRS_LASTPIXEL                 = 16,   /* TRUE for last-pixel on lines
*/
     D3DRS_SRCBLEND                  = 19,   /* D3DBLEND */
     D3DRS_DESTBLEND                 = 20,   /* D3DBLEND */
     D3DRS_CULLMODE                  = 22,   /* D3DCULL */
     D3DRS_ZFUNC                     = 23,   /* D3DCMPFUNC */
     D3DRS_ALPHAREF                  = 24,   /* D3DFIXED */
     D3DRS_ALPHAFUNC                 = 25,   /* D3DCMPFUNC */
     D3DRS_DITHERENABLE              = 26,   /* TRUE to enable dithering */
     D3DRS_ALPHABLENDENABLE          = 27,   /* TRUE to enable alpha
blending */
     D3DRS_FOGENABLE                 = 28,   /* TRUE to enable fog blending
*/
     D3DRS_SPECULARENABLE            = 29,   /* TRUE to enable specular */
     D3DRS_FOGCOLOR                  = 34,   /* D3DCOLOR */
     D3DRS_FOGTABLEMODE              = 35,   /* D3DFOGMODE */
     D3DRS_FOGSTART                  = 36,   /* Fog start (for both vertex
and pixel fog) */
     D3DRS_FOGEND                    = 37,   /* Fog end      */
     D3DRS_FOGDENSITY                = 38,   /* Fog density  */
     D3DRS_RANGEFOGENABLE            = 48,   /* Enables range-based fog */
     D3DRS_STENCILENABLE             = 52,   /* BOOL enable/disable
stenciling */
     D3DRS_STENCILFAIL               = 53,   /* D3DSTENCILOP to do if
stencil test fails */
     D3DRS_STENCILZFAIL              = 54,   /* D3DSTENCILOP to do if
stencil test passes and Z test fails */
     D3DRS_STENCILPASS               = 55,   /* D3DSTENCILOP to do if both
stencil and Z tests pass */
     D3DRS_STENCILFUNC               = 56,   /* D3DCMPFUNC fn.  Stencil Test
passes if ((ref & mask) stencilfn (stencil & mask)) is true */
     D3DRS_STENCILREF                = 57,   /* Reference value used in
stencil test */
     D3DRS_STENCILMASK               = 58,   /* Mask value used in stencil
test */
     D3DRS_STENCILWRITEMASK          = 59,   /* Write mask applied to values
written to stencil buffer */
     D3DRS_TEXTUREFACTOR             = 60,   /* D3DCOLOR used for
multi-texture blend */
     D3DRS_WRAP0                     = 128,  /* wrap for 1st texture coord.
set */
     D3DRS_WRAP1                     = 129,  /* wrap for 2nd texture coord.
set */
     D3DRS_WRAP2                     = 130,  /* wrap for 3rd texture coord.
set */
     D3DRS_WRAP3                     = 131,  /* wrap for 4th texture coord.
set */
     D3DRS_WRAP4                     = 132,  /* wrap for 5th texture coord.
set */
     D3DRS_WRAP5                     = 133,  /* wrap for 6th texture coord.
set */
     D3DRS_WRAP6                     = 134,  /* wrap for 7th texture coord.
set */
     D3DRS_WRAP7                     = 135,  /* wrap for 8th texture coord.
set */
     D3DRS_CLIPPING                  = 136,
     D3DRS_LIGHTING                  = 137,
     D3DRS_AMBIENT                   = 139,
     D3DRS_FOGVERTEXMODE             = 140,
     D3DRS_COLORVERTEX               = 141,
     D3DRS_LOCALVIEWER               = 142,
     D3DRS_NORMALIZENORMALS          = 143,
     D3DRS_DIFFUSEMATERIALSOURCE     = 145,
     D3DRS_SPECULARMATERIALSOURCE    = 146,
     D3DRS_AMBIENTMATERIALSOURCE     = 147,
     D3DRS_EMISSIVEMATERIALSOURCE    = 148,
     D3DRS_VERTEXBLEND               = 151,
     D3DRS_CLIPPLANEENABLE           = 152,
     D3DRS_POINTSIZE                 = 154,   /* float point size */
     D3DRS_POINTSIZE_MIN             = 155,   /* float point size min
threshold */
     D3DRS_POINTSPRITEENABLE         = 156,   /* BOOL point texture coord
control */
     D3DRS_POINTSCALEENABLE          = 157,   /* BOOL point size scale
enable */
     D3DRS_POINTSCALE_A              = 158,   /* float point attenuation A
value */
     D3DRS_POINTSCALE_B              = 159,   /* float point attenuation B
value */
     D3DRS_POINTSCALE_C              = 160,   /* float point attenuation C
value */
     D3DRS_MULTISAMPLEANTIALIAS      = 161,  // BOOL - set to do FSAA with
multisample buffer
     D3DRS_MULTISAMPLEMASK           = 162,  // DWORD - per-sample
enable/disable
     D3DRS_PATCHEDGESTYLE            = 163,  // Sets whether patch edges
will use float style tessellation
     D3DRS_DEBUGMONITORTOKEN         = 165,  // DEBUG ONLY - token to debug
monitor
     D3DRS_POINTSIZE_MAX             = 166,   /* float point size max
threshold */
     D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,
     D3DRS_COLORWRITEENABLE          = 168,  // per-channel write enable
     D3DRS_TWEENFACTOR               = 170,   // float tween factor
     D3DRS_BLENDOP                   = 171,   // D3DBLENDOP setting
     D3DRS_POSITIONDEGREE            = 172,   // NPatch position
interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default)
     D3DRS_NORMALDEGREE              = 173,   // NPatch normal interpolation
degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC
     D3DRS_SCISSORTESTENABLE         = 174,
     D3DRS_SLOPESCALEDEPTHBIAS       = 175,
     D3DRS_ANTIALIASEDLINEENABLE     = 176,
     D3DRS_MINTESSELLATIONLEVEL      = 178,
     D3DRS_MAXTESSELLATIONLEVEL      = 179,
     D3DRS_ADAPTIVETESS_X            = 180,
     D3DRS_ADAPTIVETESS_Y            = 181,
     D3DRS_ADAPTIVETESS_Z            = 182,
     D3DRS_ADAPTIVETESS_W            = 183,
     D3DRS_ENABLEADAPTIVETESSELLATION = 184,
     D3DRS_TWOSIDEDSTENCILMODE       = 185,   /* BOOL enable/disable 2 sided
stenciling */
     D3DRS_CCW_STENCILFAIL           = 186,   /* D3DSTENCILOP to do if ccw
stencil test fails */
     D3DRS_CCW_STENCILZFAIL          = 187,   /* D3DSTENCILOP to do if ccw
stencil test passes and Z test fails */
     D3DRS_CCW_STENCILPASS           = 188,   /* D3DSTENCILOP to do if both
ccw stencil and Z tests pass */
     D3DRS_CCW_STENCILFUNC           = 189,   /* D3DCMPFUNC fn.  ccw Stencil
Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
     D3DRS_COLORWRITEENABLE1         = 190,   /* Additional
ColorWriteEnables for the devices that support
D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
     D3DRS_COLORWRITEENABLE2         = 191,   /* Additional
ColorWriteEnables for the devices that support
D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
     D3DRS_COLORWRITEENABLE3         = 192,   /* Additional
ColorWriteEnables for the devices that support
D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
     D3DRS_BLENDFACTOR               = 193,   /* D3DCOLOR used for a
constant blend factor during alpha blending for devices that support
D3DPBLENDCAPS_BLENDFACTOR */
     D3DRS_SRGBWRITEENABLE           = 194,   /* Enable rendertarget writes
to be DE-linearized to SRGB (for formats that expose
D3DUSAGE_QUERY_SRGBWRITE) */
     D3DRS_DEPTHBIAS                 = 195,
     D3DRS_WRAP8                     = 198,   /* Additional wrap states for
vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD */
     D3DRS_WRAP9                     = 199,
     D3DRS_WRAP10                    = 200,
     D3DRS_WRAP11                    = 201,
     D3DRS_WRAP12                    = 202,
     D3DRS_WRAP13                    = 203,
     D3DRS_WRAP14                    = 204,
     D3DRS_WRAP15                    = 205,
     D3DRS_SEPARATEALPHABLENDENABLE  = 206,  /* TRUE to enable a separate
blending function for the alpha channel */
     D3DRS_SRCBLENDALPHA             = 207,  /* SRC blend factor for the
alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */
     D3DRS_DESTBLENDALPHA            = 208,  /* DST blend factor for the
alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */
     D3DRS_BLENDOPALPHA              = 209,  /* Blending operation for the
alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */


     D3DRS_FORCE_DWORD               = 0x7fffffff, /* force 32-bit size enum
*/
 }
 alias _D3DRENDERSTATETYPE D3DRENDERSTATETYPE;





 // Maximum number of simultaneous render targets D3D supports
 const int D3D_MAX_SIMULTANEOUS_RENDERTARGETS  = 4;

 // Values for material source
 enum _D3DMATERIALCOLORSOURCE
 {
     D3DMCS_MATERIAL         = 0,            // Color from material is used
     D3DMCS_COLOR1           = 1,            // Diffuse vertex color is used
     D3DMCS_COLOR2           = 2,            // Specular vertex color is
used
     D3DMCS_FORCE_DWORD      = 0x7fffffff,   // force 32-bit size enum
 }
 alias _D3DMATERIALCOLORSOURCE D3DMATERIALCOLORSOURCE;

 // Bias to apply to the texture coordinate set to apply a wrap to.
 const int D3DRENDERSTATE_WRAPBIAS            =     128;

 /* Flags to construct the WRAP render states */
 const int D3DWRAP_U  = 0x00000001;
 const int D3DWRAP_V  = 0x00000002;
 const int D3DWRAP_W  = 0x00000004;

 /* Flags to construct the WRAP render states for 1D thru 4D texture
coordinates */
 const int D3DWRAPCOORD_0  = 0x00000001;    // same as D3DWRAP_U
 const int D3DWRAPCOORD_1  = 0x00000002;    // same as D3DWRAP_V
 const int D3DWRAPCOORD_2  = 0x00000004;    // same as D3DWRAP_W
 const int D3DWRAPCOORD_3  = 0x00000008;

 /* Flags to construct D3DRS_COLORWRITEENABLE */
 const int D3DCOLORWRITEENABLE_RED    = (1<<0);
 const int D3DCOLORWRITEENABLE_GREEN  = (1<<1);
 const int D3DCOLORWRITEENABLE_BLUE   = (1<<2);
 const int D3DCOLORWRITEENABLE_ALPHA  = (1<<3);

 /*
  * State enumerants for per-stage processing of fixed function pixel
processing
  * Two of these affect fixed function vertex processing as well:
TEXTURETRANSFORMFLAGS and TEXCOORDINDEX.
  */
 enum _D3DTEXTURESTAGESTATETYPE
 {
     D3DTSS_COLOROP        =  1, /* D3DTEXTUREOP - per-stage blending
controls for color channels */
     D3DTSS_COLORARG1      =  2, /* D3DTA_* (texture arg) */
     D3DTSS_COLORARG2      =  3, /* D3DTA_* (texture arg) */
     D3DTSS_ALPHAOP        =  4, /* D3DTEXTUREOP - per-stage blending
controls for alpha channel */
     D3DTSS_ALPHAARG1      =  5, /* D3DTA_* (texture arg) */
     D3DTSS_ALPHAARG2      =  6, /* D3DTA_* (texture arg) */
     D3DTSS_BUMPENVMAT00   =  7, /* float (bump mapping matrix) */
     D3DTSS_BUMPENVMAT01   =  8, /* float (bump mapping matrix) */
     D3DTSS_BUMPENVMAT10   =  9, /* float (bump mapping matrix) */
     D3DTSS_BUMPENVMAT11   = 10, /* float (bump mapping matrix) */
     D3DTSS_TEXCOORDINDEX  = 11, /* identifies which set of texture
coordinates index this texture */
     D3DTSS_BUMPENVLSCALE  = 22, /* float scale for bump map luminance */
     D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */
     D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls
texture transform */
     D3DTSS_COLORARG0      = 26, /* D3DTA_* third arg for triadic ops */
     D3DTSS_ALPHAARG0      = 27, /* D3DTA_* third arg for triadic ops */
     D3DTSS_RESULTARG      = 28, /* D3DTA_* arg for result (CURRENT or TEMP)
*/
     D3DTSS_CONSTANT       = 32, /* Per-stage constant D3DTA_CONSTANT */


     D3DTSS_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DTEXTURESTAGESTATETYPE D3DTEXTURESTAGESTATETYPE;

 /*
  * State enumerants for per-sampler texture processing.
  */
 enum _D3DSAMPLERSTATETYPE
 {
     D3DSAMP_ADDRESSU       = 1,  /* D3DTEXTUREADDRESS for U coordinate */
     D3DSAMP_ADDRESSV       = 2,  /* D3DTEXTUREADDRESS for V coordinate */
     D3DSAMP_ADDRESSW       = 3,  /* D3DTEXTUREADDRESS for W coordinate */
     D3DSAMP_BORDERCOLOR    = 4,  /* D3DCOLOR */
     D3DSAMP_MAGFILTER      = 5,  /* D3DTEXTUREFILTER filter to use for
magnification */
     D3DSAMP_MINFILTER      = 6,  /* D3DTEXTUREFILTER filter to use for
minification */
     D3DSAMP_MIPFILTER      = 7,  /* D3DTEXTUREFILTER filter to use between
mipmaps during minification */
     D3DSAMP_MIPMAPLODBIAS  = 8,  /* float Mipmap LOD bias */
     D3DSAMP_MAXMIPLEVEL    = 9,  /* DWORD 0..(n-1) LOD index of largest map
to use (0 == largest) */
     D3DSAMP_MAXANISOTROPY  = 10, /* DWORD maximum anisotropy */
     D3DSAMP_SRGBTEXTURE    = 11, /* Default = 0 (which means Gamma 1.0,
                                    no correction required.) else correct
for
                                    Gamma = 2.2 */
     D3DSAMP_ELEMENTINDEX   = 12, /* When multi-element texture is assigned
to sampler, this
                                     indicates which element index to use.
Default = 0.  */
     D3DSAMP_DMAPOFFSET     = 13, /* Offset in vertices in the pre-sampled
displacement map.
                                     Only valid for D3DDMAPSAMPLER sampler
*/
     D3DSAMP_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */
 }
 alias _D3DSAMPLERSTATETYPE D3DSAMPLERSTATETYPE;

 /* Special sampler which is used in the tesselator */
 const int D3DDMAPSAMPLER  = 256;

 // Samplers used in vertex shaders
 const int D3DVERTEXTEXTURESAMPLER0  = (D3DDMAPSAMPLER+1);
 const int D3DVERTEXTEXTURESAMPLER1  = (D3DDMAPSAMPLER+2);
 const int D3DVERTEXTEXTURESAMPLER2  = (D3DDMAPSAMPLER+3);
 const int D3DVERTEXTEXTURESAMPLER3  = (D3DDMAPSAMPLER+4);

 // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex
data(position
 // and normal in the camera space) should be taken as texture coordinates
 // Low 16 bits are used to specify texture coordinate index, to take the
WRAP mode from
 //
 const int D3DTSS_TCI_PASSTHRU                        =     0x00000000;
 const int D3DTSS_TCI_CAMERASPACENORMAL               =     0x00010000;
 const int D3DTSS_TCI_CAMERASPACEPOSITION             =     0x00020000;
 const int D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR     =     0x00030000;
 const int D3DTSS_TCI_SPHEREMAP                       =     0x00040000;

 /*
  * Enumerations for COLOROP and ALPHAOP texture blending operations set in
  * texture processing stage controls in D3DTSS.
  */
 enum _D3DTEXTUREOP
 {
     // Control
     D3DTOP_DISABLE              = 1,      // disables stage
     D3DTOP_SELECTARG1           = 2,      // the default
     D3DTOP_SELECTARG2           = 3,

     // Modulate
     D3DTOP_MODULATE             = 4,      // multiply args together
     D3DTOP_MODULATE2X           = 5,      // multiply and  1 bit
     D3DTOP_MODULATE4X           = 6,      // multiply and  2 bits

     // Add
     D3DTOP_ADD                  =  7,   // add arguments together
     D3DTOP_ADDSIGNED            =  8,   // add with -0.5 bias
     D3DTOP_ADDSIGNED2X          =  9,   // as above but left  1 bit
     D3DTOP_SUBTRACT             = 10,   // Arg1 - Arg2, with no saturation
     D3DTOP_ADDSMOOTH            = 11,   // add 2 args, subtract product
                                         // Arg1 + Arg2 - Arg1*Arg2
                                         // = Arg1 + (1-Arg1)*Arg2

     // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
     D3DTOP_BLENDDIFFUSEALPHA    = 12, // iterated alpha
     D3DTOP_BLENDTEXTUREALPHA    = 13, // texture alpha
     D3DTOP_BLENDFACTORALPHA     = 14, // alpha from D3DRS_TEXTUREFACTOR

     // Linear alpha blend with pre-multiplied arg1 input: Arg1 +
Arg2*(1-Alpha)
     D3DTOP_BLENDTEXTUREALPHAPM  = 15, // texture alpha
     D3DTOP_BLENDCURRENTALPHA    = 16, // by alpha of current color

     // Specular mapping
     D3DTOP_PREMODULATE            = 17,     // modulate with next texture
before use
     D3DTOP_MODULATEALPHA_ADDCOLOR = 18,     // Arg1.RGB + Arg1.A*Arg2.RGB
                                             // COLOROP only
     D3DTOP_MODULATECOLOR_ADDALPHA = 19,     // Arg1.RGB*Arg2.RGB + Arg1.A
                                             // COLOROP only
     D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,  // (1-Arg1.A)*Arg2.RGB +
Arg1.RGB
                                             // COLOROP only
     D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,  // (1-Arg1.RGB)*Arg2.RGB +
Arg1.A
                                             // COLOROP only

     // Bump mapping
     D3DTOP_BUMPENVMAP           = 22, // per pixel env map perturbation
     D3DTOP_BUMPENVMAPLUMINANCE  = 23, // with luminance channel

     // This can do either diffuse or specular bump mapping with correct
input.
     // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G +
Arg1.B*Arg2.B)
     // where each component has been scaled and offset to make it signed.
     // The result is replicated into all four (including alpha) channels.
     // This is a valid COLOROP only.
     D3DTOP_DOTPRODUCT3          = 24,

     // Triadic ops
     D3DTOP_MULTIPLYADD          = 25, // Arg0 + Arg1*Arg2
     D3DTOP_LERP                 = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2

     D3DTOP_FORCE_DWORD = 0x7fffffff,
 }
 alias _D3DTEXTUREOP D3DTEXTUREOP;

 /*
  * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending
  * operations set in texture processing stage controls in D3DRENDERSTATE.
  */
 const int D3DTA_SELECTMASK     =   0x0000000f;  // mask for arg selector
 const int D3DTA_DIFFUSE        =   0x00000000;  // select diffuse color
(read only)
 const int D3DTA_CURRENT        =   0x00000001;  // select stage destination
register (read/write)
 const int D3DTA_TEXTURE        =   0x00000002;  // select texture color
(read only)
 const int D3DTA_TFACTOR        =   0x00000003;  // select
D3DRS_TEXTUREFACTOR (read only)
 const int D3DTA_SPECULAR       =   0x00000004;  // select specular color
(read only)
 const int D3DTA_TEMP           =   0x00000005;  // select temporary
register color (read/write)
 const int D3DTA_CONSTANT       =   0x00000006;  // select texture stage
constant
 const int D3DTA_COMPLEMENT     =   0x00000010;  // take 1.0 - x (read
modifier)
 const int D3DTA_ALPHAREPLICATE =   0x00000020;  // replicate alpha to color
components (read modifier)

 //
 // Values for D3DSAMP_***FILTER texture stage states
 //
 enum _D3DTEXTUREFILTERTYPE
 {
     D3DTEXF_NONE            = 0,    // filtering disabled (valid for mip
filter only)
     D3DTEXF_POINT           = 1,    // nearest
     D3DTEXF_LINEAR          = 2,    // linear interpolation
     D3DTEXF_ANISOTROPIC     = 3,    // anisotropic
     D3DTEXF_PYRAMIDALQUAD   = 6,    // 4-sample tent
     D3DTEXF_GAUSSIANQUAD    = 7,    // 4-sample gaussian
     D3DTEXF_FORCE_DWORD     = 0x7fffffff,   // force 32-bit size enum
 }
 alias _D3DTEXTUREFILTERTYPE D3DTEXTUREFILTERTYPE;

 /* Bits for Flags in ProcessVertices call */

 const int D3DPV_DONOTCOPYDATA    = (1 << 0);

 //-------------------------------------------------------------------

 // Flexible vertex format bits
 //
 const int D3DFVF_RESERVED0       = 0x001;
 const int D3DFVF_POSITION_MASK   = 0x400E;
 const int D3DFVF_XYZ             = 0x002;
 const int D3DFVF_XYZRHW          = 0x004;
 const int D3DFVF_XYZB1           = 0x006;
 const int D3DFVF_XYZB2           = 0x008;
 const int D3DFVF_XYZB3           = 0x00a;
 const int D3DFVF_XYZB4           = 0x00c;
 const int D3DFVF_XYZB5           = 0x00e;
 const int D3DFVF_XYZW            = 0x4002;

 const int D3DFVF_NORMAL          = 0x010;
 const int D3DFVF_PSIZE           = 0x020;
 const int D3DFVF_DIFFUSE         = 0x040;
 const int D3DFVF_SPECULAR        = 0x080;

 const int D3DFVF_TEXCOUNT_MASK   = 0xf00;
 const int D3DFVF_TEXCOUNT_SHIFT  = 8;
 const int D3DFVF_TEX0            = 0x000;
 const int D3DFVF_TEX1            = 0x100;
 const int D3DFVF_TEX2            = 0x200;
 const int D3DFVF_TEX3            = 0x300;
 const int D3DFVF_TEX4            = 0x400;
 const int D3DFVF_TEX5            = 0x500;
 const int D3DFVF_TEX6            = 0x600;
 const int D3DFVF_TEX7            = 0x700;
 const int D3DFVF_TEX8            = 0x800;

 const int D3DFVF_LASTBETA_UBYTE4  = 0x1000;
 const int D3DFVF_LASTBETA_D3DCOLOR = 0x8000;

 const int D3DFVF_RESERVED2       =  0x6000;  // 2 reserved bits

 //---------------------------------------------------------------------
 // Vertex Shaders
 //

 // Vertex shader declaration

 // Vertex element semantics
 //
 enum _D3DDECLUSAGE
 {
     D3DDECLUSAGE_POSITION = 0,
     D3DDECLUSAGE_BLENDWEIGHT,   // 1
     D3DDECLUSAGE_BLENDINDICES,  // 2
     D3DDECLUSAGE_NORMAL,        // 3
     D3DDECLUSAGE_PSIZE,         // 4
     D3DDECLUSAGE_TEXCOORD,      // 5
     D3DDECLUSAGE_TANGENT,       // 6
     D3DDECLUSAGE_BINORMAL,      // 7
     D3DDECLUSAGE_TESSFACTOR,    // 8
     D3DDECLUSAGE_POSITIONT,     // 9
     D3DDECLUSAGE_COLOR,         // 10
     D3DDECLUSAGE_FOG,           // 11
     D3DDECLUSAGE_DEPTH,         // 12
     D3DDECLUSAGE_SAMPLE,        // 13
 }
 alias _D3DDECLUSAGE D3DDECLUSAGE;

 const int MAXD3DDECLUSAGE      =   D3DDECLUSAGE.D3DDECLUSAGE_SAMPLE;
 const int MAXD3DDECLUSAGEINDEX =   15;
 const int MAXD3DDECLLENGTH     =   64; // does not include "end" marker
vertex element

 enum _D3DDECLMETHOD
 {
     D3DDECLMETHOD_DEFAULT = 0,
     D3DDECLMETHOD_PARTIALU,
     D3DDECLMETHOD_PARTIALV,
     D3DDECLMETHOD_CROSSUV,    // Normal
     D3DDECLMETHOD_UV,
     D3DDECLMETHOD_LOOKUP,               // Lookup a displacement map
     D3DDECLMETHOD_LOOKUPPRESAMPLED,     // Lookup a pre-sampled
displacement map
 }
 alias _D3DDECLMETHOD D3DDECLMETHOD;
 const int MAXD3DDECLMETHOD = D3DDECLMETHOD.D3DDECLMETHOD_LOOKUPPRESAMPLED;



 // Declarations for _Type fields
 //
 enum _D3DDECLTYPE
 {
     D3DDECLTYPE_FLOAT1    =  0,  // 1D float expanded to (value, 0., 0.,
1.)
     D3DDECLTYPE_FLOAT2    =  1,  // 2D float expanded to (value, value, 0.,
1.)
     D3DDECLTYPE_FLOAT3    =  2,  // 3D float expanded to (value, value,
value, 1.)
     D3DDECLTYPE_FLOAT4    =  3,  // 4D float
     D3DDECLTYPE_D3DCOLOR  =  4,  // 4D packed unsigned bytes mapped to 0.
to 1. range
                                  // Input is in D3DCOLOR format (ARGB)
expanded to (R, G, B, A)
     D3DDECLTYPE_UBYTE4    =  5,  // 4D unsigned byte
     D3DDECLTYPE_SHORT2    =  6,  // 2D signed short expanded to (value,
value, 0., 1.)
     D3DDECLTYPE_SHORT4    =  7,  // 4D signed short

 // The following types are valid only with vertex shaders >= 2.0


     D3DDECLTYPE_UBYTE4N   =  8,  // Each of 4 bytes is normalized by
dividing to 255.0
     D3DDECLTYPE_SHORT2N   =  9,  // 2D signed short normalized
(v[0]/32767.0,v[1]/32767.0,0,1)
     D3DDECLTYPE_SHORT4N   = 10,  // 4D signed short normalized
(v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0)
     D3DDECLTYPE_USHORT2N  = 11,  // 2D unsigned short normalized
(v[0]/65535.0,v[1]/65535.0,0,1)
     D3DDECLTYPE_USHORT4N  = 12,  // 4D unsigned short normalized
(v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0)
     D3DDECLTYPE_UDEC3     = 13,  // 3D unsigned 10 10 10 format expanded to
(value, value, value, 1)
     D3DDECLTYPE_DEC3N     = 14,  // 3D signed 10 10 10 format normalized
and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)
     D3DDECLTYPE_FLOAT16_2 = 15,  // Two 16-bit floating point values,
expanded to (value, value, 0, 1)
     D3DDECLTYPE_FLOAT16_4 = 16,  // Four 16-bit floating point values
     D3DDECLTYPE_UNUSED    = 17,  // When the type field in a decl is
unused.
 }
 alias _D3DDECLTYPE D3DDECLTYPE;

 const int MAXD3DDECLTYPE = D3DDECLTYPE.D3DDECLTYPE_UNUSED;

 struct _D3DVERTEXELEMENT9
 {
     WORD    Stream;     // Stream index
     WORD    Offset;     // Offset in the stream in bytes
     BYTE    Type;       // Data type
     BYTE    Method;     // Processing method
     BYTE    Usage;      // Semantics
     BYTE    UsageIndex; // Semantic index
 }
 alias _D3DVERTEXELEMENT9 D3DVERTEXELEMENT9;
 alias D3DVERTEXELEMENT9* LPD3DVERTEXELEMENT9;


 // This is used to initialize the last vertex element in a vertex
declaration
 // array
 //
 //#define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0}
 D3DVERTEXELEMENT9 D3DDECL_END ()
 {
  static D3DVERTEXELEMENT9 d3dVerElement =
   { Stream : 0xFF, Offset : 0, Type : D3DDECLTYPE.D3DDECLTYPE_UNUSED,
Method : 0, Usage : 0, UsageIndex : 0};
  return d3dVerElement;
 }

 // Maximum supported number of texture coordinate sets
 const int D3DDP_MAXTEXCOORD =  8;


 //---------------------------------------------------------------------
 //
 // The internal format of Pixel Shader (PS) & Vertex Shader (VS)
 // Instruction Tokens is defined in the Direct3D Device Driver Kit
 //
 //---------------------------------------------------------------------

 //
 // Instruction Token Bit Definitions
 //
 const int D3DSI_OPCODE_MASK      = 0x0000FFFF;

 const int D3DSI_INSTLENGTH_MASK  = 0x0F000000;
 const int D3DSI_INSTLENGTH_SHIFT = 24;

 enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE
 {
     D3DSIO_NOP          = 0,
     D3DSIO_MOV          ,
     D3DSIO_ADD          ,
     D3DSIO_SUB          ,
     D3DSIO_MAD          ,
     D3DSIO_MUL          ,
     D3DSIO_RCP          ,
     D3DSIO_RSQ          ,
     D3DSIO_DP3          ,
     D3DSIO_DP4          ,
     D3DSIO_MIN          ,
     D3DSIO_MAX          ,
     D3DSIO_SLT          ,
     D3DSIO_SGE          ,
     D3DSIO_EXP          ,
     D3DSIO_LOG          ,
     D3DSIO_LIT          ,
     D3DSIO_DST          ,
     D3DSIO_LRP          ,
     D3DSIO_FRC          ,
     D3DSIO_M4x4         ,
     D3DSIO_M4x3         ,
     D3DSIO_M3x4         ,
     D3DSIO_M3x3         ,
     D3DSIO_M3x2         ,
     D3DSIO_CALL         ,
     D3DSIO_CALLNZ       ,
     D3DSIO_LOOP         ,
     D3DSIO_RET          ,
     D3DSIO_ENDLOOP      ,
     D3DSIO_LABEL        ,
     D3DSIO_DCL          ,
     D3DSIO_POW          ,
     D3DSIO_CRS          ,
     D3DSIO_SGN          ,
     D3DSIO_ABS          ,
     D3DSIO_NRM          ,
     D3DSIO_SINCOS       ,
     D3DSIO_REP          ,
     D3DSIO_ENDREP       ,
     D3DSIO_IF           ,
     D3DSIO_IFC          ,
     D3DSIO_ELSE         ,
     D3DSIO_ENDIF        ,
     D3DSIO_BREAK        ,
     D3DSIO_BREAKC       ,
     D3DSIO_MOVA         ,
     D3DSIO_DEFB         ,
     D3DSIO_DEFI         ,

     D3DSIO_TEXCOORD     = 64,
     D3DSIO_TEXKILL      ,
     D3DSIO_TEX          ,
     D3DSIO_TEXBEM       ,
     D3DSIO_TEXBEML      ,
     D3DSIO_TEXREG2AR    ,
     D3DSIO_TEXREG2GB    ,
     D3DSIO_TEXM3x2PAD   ,
     D3DSIO_TEXM3x2TEX   ,
     D3DSIO_TEXM3x3PAD   ,
     D3DSIO_TEXM3x3TEX   ,
     D3DSIO_RESERVED0    ,
     D3DSIO_TEXM3x3SPEC  ,
     D3DSIO_TEXM3x3VSPEC ,
     D3DSIO_EXPP         ,
     D3DSIO_LOGP         ,
     D3DSIO_CND          ,
     D3DSIO_DEF          ,
     D3DSIO_TEXREG2RGB   ,
     D3DSIO_TEXDP3TEX    ,
     D3DSIO_TEXM3x2DEPTH ,
     D3DSIO_TEXDP3       ,
     D3DSIO_TEXM3x3      ,
     D3DSIO_TEXDEPTH     ,
     D3DSIO_CMP          ,
     D3DSIO_BEM          ,
     D3DSIO_DP2ADD       ,
     D3DSIO_DSX          ,
     D3DSIO_DSY          ,
     D3DSIO_TEXLDD       ,
     D3DSIO_SETP         ,
     D3DSIO_TEXLDL       ,
     D3DSIO_BREAKP       ,

     D3DSIO_PHASE        = 0xFFFD,
     D3DSIO_COMMENT      = 0xFFFE,
     D3DSIO_END          = 0xFFFF,

     D3DSIO_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum
 }
 alias _D3DSHADER_INSTRUCTION_OPCODE_TYPE D3DSHADER_INSTRUCTION_OPCODE_TYPE;

 //---------------------------------------------------------------------
 // Use these constants with D3DSIO_SINCOS macro as SRC2, SRC3
 //
 /** ATTENTION !! : I don't know how to convert these 2 lines. */
 //#define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f,
0.0026041667f, 0.00026041668f
 //const char[] D3DSINCOSCONST1 = "-1.5500992e-006f, -2.1701389e-005f,
0.0026041667f, 0.00026041668f";
 const float[4] D3DSINCOSCONST1 = [ -1.5500992e-006f, -2.1701389e-005f,
0.0026041667f, 0.00026041668f ];
 //#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f
 //const char[] D3DSINCOSCONST2 = "-0.020833334f, -0.12500000f, 1.0f,
0.50000000f";
 const float[4] D3DSINCOSCONST2 = [ -0.020833334f, -0.12500000f, 1.0f,
0.50000000f ];


 //---------------------------------------------------------------------
 // Co-Issue Instruction Modifier - if set then this instruction is to be
 // issued in parallel with the previous instruction(s) for which this bit
 // is not set.
 //
 const int D3DSI_COISSUE        =   0x40000000;

 //---------------------------------------------------------------------
 // Opcode specific controls

 const int D3DSP_OPCODESPECIFICCONTROL_MASK = 0x00ff0000;
 const int D3DSP_OPCODESPECIFICCONTROL_SHIFT = 16;

 // ps_2_0 texld controls
 const int D3DSI_TEXLD_PROJECT = (0x01 <<
D3DSP_OPCODESPECIFICCONTROL_SHIFT);
 const int D3DSI_TEXLD_BIAS    = (0x02 <<
D3DSP_OPCODESPECIFICCONTROL_SHIFT);

 // Comparison for dynamic conditional instruction opcodes (i.e. if, breakc)
 enum _D3DSHADER_COMPARISON
 {
                          // < = >
     D3DSPC_RESERVED0= 0, // 0 0 0
     D3DSPC_GT       = 1, // 0 0 1
     D3DSPC_EQ       = 2, // 0 1 0
     D3DSPC_GE       = 3, // 0 1 1
     D3DSPC_LT       = 4, // 1 0 0
     D3DSPC_NE       = 5, // 1 0 1
     D3DSPC_LE       = 6, // 1 1 0
     D3DSPC_RESERVED1= 7  // 1 1 1
 }
 alias _D3DSHADER_COMPARISON D3DSHADER_COMPARISON;

 // Comparison is part of instruction opcode token:
 const int D3DSHADER_COMPARISON_SHIFT = D3DSP_OPCODESPECIFICCONTROL_SHIFT;
 const int D3DSHADER_COMPARISON_MASK = (0x7<<D3DSHADER_COMPARISON_SHIFT);

 //---------------------------------------------------------------------
 // Predication flags on instruction token
 const int D3DSHADER_INSTRUCTION_PREDICATED   = (0x1 << 28);

 //---------------------------------------------------------------------
 // DCL Info Token Controls

 // For dcl info tokens requiring a semantic (usage + index)
 const int D3DSP_DCL_USAGE_SHIFT = 0;
 const int D3DSP_DCL_USAGE_MASK  = 0x0000000f;

 const int D3DSP_DCL_USAGEINDEX_SHIFT = 16;
 const int D3DSP_DCL_USAGEINDEX_MASK  = 0x000f0000;

 // DCL pixel shader sampler info token.
 const int D3DSP_TEXTURETYPE_SHIFT = 27;
 const int D3DSP_TEXTURETYPE_MASK  = 0x78000000;

 enum _D3DSAMPLER_TEXTURE_TYPE
 {
     D3DSTT_UNKNOWN = 0<<D3DSP_TEXTURETYPE_SHIFT, // uninitialized value
     D3DSTT_2D      = 2<<D3DSP_TEXTURETYPE_SHIFT, // dcl_2d s# (for
declaring a 2-D texture)
     D3DSTT_CUBE    = 3<<D3DSP_TEXTURETYPE_SHIFT, // dcl_cube s# (for
declaring a cube texture)
     D3DSTT_VOLUME  = 4<<D3DSP_TEXTURETYPE_SHIFT, // dcl_volume s# (for
declaring a volume texture)
     D3DSTT_FORCE_DWORD  = 0x7fffffff,      // force 32-bit size enum
 }
 alias _D3DSAMPLER_TEXTURE_TYPE D3DSAMPLER_TEXTURE_TYPE;

 //---------------------------------------------------------------------
 // Parameter Token Bit Definitions
 //
 const int D3DSP_REGNUM_MASK   =    0x000007FF;

 // destination parameter write mask
 const int D3DSP_WRITEMASK_0    =   0x00010000;  // Component 0 (X;Red)
 const int D3DSP_WRITEMASK_1    =   0x00020000;  // Component 1 (Y;Green)
 const int D3DSP_WRITEMASK_2    =   0x00040000;  // Component 2 (Z;Blue)
 const int D3DSP_WRITEMASK_3    =   0x00080000;  // Component 3 (W;Alpha)
 const int D3DSP_WRITEMASK_ALL  =   0x000F0000;  // All Components

 // destination parameter modifiers
 const int D3DSP_DSTMOD_SHIFT   =   20;
 const int D3DSP_DSTMOD_MASK    =   0x00F00000;

 // Bit masks for destination parameter modifiers
 const int    D3DSPDM_NONE              =   (0<<D3DSP_DSTMOD_SHIFT); // nop
 const int    D3DSPDM_SATURATE          =   (1<<D3DSP_DSTMOD_SHIFT); //
clamp to 0. to 1. range
 const int    D3DSPDM_PARTIALPRECISION  =   (2<<D3DSP_DSTMOD_SHIFT); //
Partial precision hint
 const int    D3DSPDM_MSAMPCENTROID     =   (4<<D3DSP_DSTMOD_SHIFT); //
Relevant to multisampling only:
                                                                  //
When the pixel center is not covered, sample
                                                                  //
attribute or compute gradients/LOD
                                                                  //
using multisample "centroid" location.
                                                                  //
"Centroid" is some location within the covered
                                                                  //
region of the pixel.

 // destination parameter
 const int D3DSP_DSTSHIFT_SHIFT  =  24;
 const int D3DSP_DSTSHIFT_MASK   =  0x0F000000;

 // destination/source parameter register type
 const int D3DSP_REGTYPE_SHIFT   =  28;
 const int D3DSP_REGTYPE_SHIFT2  =  8;
 const int D3DSP_REGTYPE_MASK    =  0x70000000;
 const int D3DSP_REGTYPE_MASK2   =  0x00001800;

 enum _D3DSHADER_PARAM_REGISTER_TYPE
 {
     D3DSPR_TEMP           =  0, // Temporary Register File
     D3DSPR_INPUT          =  1, // Input Register File
     D3DSPR_CONST          =  2, // Constant Register File
     D3DSPR_ADDR           =  3, // Address Register (VS)
     D3DSPR_TEXTURE        =  3, // Texture Register File (PS)
     D3DSPR_RASTOUT        =  4, // Rasterizer Register File
     D3DSPR_ATTROUT        =  5, // Attribute Output Register File
     D3DSPR_TEXCRDOUT      =  6, // Texture Coordinate Output Register File
     D3DSPR_OUTPUT         =  6, // Output register file for VS3.0+
     D3DSPR_CONSTINT       =  7, // Constant Integer Vector Register File
     D3DSPR_COLOROUT       =  8, // Color Output Register File
     D3DSPR_DEPTHOUT       =  9, // Depth Output Register File
     D3DSPR_SAMPLER        = 10, // Sampler State Register File
     D3DSPR_CONST2         = 11, // Constant Register File  2048 - 4095
     D3DSPR_CONST3         = 12, // Constant Register File  4096 - 6143
     D3DSPR_CONST4         = 13, // Constant Register File  6144 - 8191
     D3DSPR_CONSTBOOL      = 14, // Constant Boolean register file
     D3DSPR_LOOP           = 15, // Loop counter register file
     D3DSPR_TEMPFLOAT16    = 16, // 16-bit float temp register file
     D3DSPR_MISCTYPE       = 17, // Miscellaneous (single) registers.
     D3DSPR_LABEL          = 18, // Label
     D3DSPR_PREDICATE      = 19, // Predicate register
     D3DSPR_FORCE_DWORD  = 0x7fffffff,         // force 32-bit size enum
 }
 alias _D3DSHADER_PARAM_REGISTER_TYPE D3DSHADER_PARAM_REGISTER_TYPE;

 // The miscellaneous register file (D3DSPR_MISCTYPES)
 // contains register types for which there is only ever one
 // register (i.e. the register # is not needed).
 // Rather than use up additional register types for such
 // registers, they are defined
 // as particular offsets into the misc. register file:
 enum _D3DSHADER_MISCTYPE_OFFSETS
 {
     D3DSMO_POSITION   = 0, // Input position x,y,z,rhw (PS)
     D3DSMO_FACE   = 1, // Floating point primitive area (PS)
 }
 alias _D3DSHADER_MISCTYPE_OFFSETS D3DSHADER_MISCTYPE_OFFSETS;

 // Register offsets in the Rasterizer Register File
 //
 enum _D3DVS_RASTOUT_OFFSETS
 {
     D3DSRO_POSITION = 0,
     D3DSRO_FOG,
     D3DSRO_POINT_SIZE,
     D3DSRO_FORCE_DWORD  = 0x7fffffff,         // force 32-bit size enum
 }
 alias _D3DVS_RASTOUT_OFFSETS D3DVS_RASTOUT_OFFSETS;

 // Source operand addressing modes

 const int D3DVS_ADDRESSMODE_SHIFT = 13;
 const int D3DVS_ADDRESSMODE_MASK  = (1 << D3DVS_ADDRESSMODE_SHIFT);

 enum _D3DVS_ADDRESSMODE_TYPE
 {
     D3DVS_ADDRMODE_ABSOLUTE  = (0 << D3DVS_ADDRESSMODE_SHIFT),
     D3DVS_ADDRMODE_RELATIVE  = (1 << D3DVS_ADDRESSMODE_SHIFT),
     D3DVS_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
 }
 alias _D3DVS_ADDRESSMODE_TYPE D3DVS_ADDRESSMODE_TYPE;

 const int D3DSHADER_ADDRESSMODE_SHIFT = 13;
 const int D3DSHADER_ADDRESSMODE_MASK  = (1 << D3DSHADER_ADDRESSMODE_SHIFT);

 enum _D3DSHADER_ADDRESSMODE_TYPE
 {
     D3DSHADER_ADDRMODE_ABSOLUTE  = (0 << D3DSHADER_ADDRESSMODE_SHIFT),
     D3DSHADER_ADDRMODE_RELATIVE  = (1 << D3DSHADER_ADDRESSMODE_SHIFT),
     D3DSHADER_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
 }
 alias _D3DSHADER_ADDRESSMODE_TYPE D3DSHADER_ADDRESSMODE_TYPE;

 // Source operand swizzle definitions
 //
 const int D3DVS_SWIZZLE_SHIFT   =  16;
 const int D3DVS_SWIZZLE_MASK    =  0x00FF0000;

 // The following bits define where to take component X from:

 const int D3DVS_X_X     =  (0 << D3DVS_SWIZZLE_SHIFT);
 const int D3DVS_X_Y     =  (1 << D3DVS_SWIZZLE_SHIFT);
 const int D3DVS_X_Z     =  (2 << D3DVS_SWIZZLE_SHIFT);
 const int D3DVS_X_W     =  (3 << D3DVS_SWIZZLE_SHIFT);

 // The following bits define where to take component Y from:

 const int D3DVS_Y_X     =  (0 << (D3DVS_SWIZZLE_SHIFT + 2));
 const int D3DVS_Y_Y     =  (1 << (D3DVS_SWIZZLE_SHIFT + 2));
 const int D3DVS_Y_Z     =  (2 << (D3DVS_SWIZZLE_SHIFT + 2));
 const int D3DVS_Y_W     =  (3 << (D3DVS_SWIZZLE_SHIFT + 2));

 // The following bits define where to take component Z from:

 const int D3DVS_Z_X     =  (0 << (D3DVS_SWIZZLE_SHIFT + 4));
 const int D3DVS_Z_Y     =  (1 << (D3DVS_SWIZZLE_SHIFT + 4));
 const int D3DVS_Z_Z     =  (2 << (D3DVS_SWIZZLE_SHIFT + 4));
 const int D3DVS_Z_W     =  (3 << (D3DVS_SWIZZLE_SHIFT + 4));

 // The following bits define where to take component W from:

 const int D3DVS_W_X     =  (0 << (D3DVS_SWIZZLE_SHIFT + 6));
 const int D3DVS_W_Y     =  (1 << (D3DVS_SWIZZLE_SHIFT + 6));
 const int D3DVS_W_Z     =  (2 << (D3DVS_SWIZZLE_SHIFT + 6));
 const int D3DVS_W_W     =  (3 << (D3DVS_SWIZZLE_SHIFT + 6));

 // Value when there is no swizzle (X is taken from X, Y is taken from Y,
 // Z is taken from Z, W is taken from W
 //
 const int D3DVS_NOSWIZZLE = (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z |
D3DVS_W_W);

 // source parameter swizzle
 const int D3DSP_SWIZZLE_SHIFT   =  16;
 const int D3DSP_SWIZZLE_MASK    =  0x00FF0000;

 //#define D3DSP_NOSWIZZLE \
 //    ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
 //      (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
 //      (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
 //      (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )
 const int D3DSP_NOSWIZZLE =
     ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) |
       (1 << (D3DSP_SWIZZLE_SHIFT + 2)) |
       (2 << (D3DSP_SWIZZLE_SHIFT + 4)) |
       (3 << (D3DSP_SWIZZLE_SHIFT + 6)) );

 // pixel-shader swizzle ops
 //#define D3DSP_REPLICATERED \
 //    ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
 //      (0 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
 //      (0 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
 //      (0 << (D3DSP_SWIZZLE_SHIFT + 6)) )
 const int D3DSP_REPLICATERED =
     ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) |
       (0 << (D3DSP_SWIZZLE_SHIFT + 2)) |
       (0 << (D3DSP_SWIZZLE_SHIFT + 4)) |
       (0 << (D3DSP_SWIZZLE_SHIFT + 6)) );



 //#define D3DSP_REPLICATEGREEN \
 //    ( (1 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
 //      (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
 //      (1 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
 //      (1 << (D3DSP_SWIZZLE_SHIFT + 6)) )
 const int D3DSP_REPLICATEGREEN =
  ( (1 << (D3DSP_SWIZZLE_SHIFT + 0)) |
       (1 << (D3DSP_SWIZZLE_SHIFT + 2)) |
       (1 << (D3DSP_SWIZZLE_SHIFT + 4)) |
       (1 << (D3DSP_SWIZZLE_SHIFT + 6)) );



 //#define D3DSP_REPLICATEBLUE \
 //    ( (2 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
 //      (2 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
 //      (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
 //      (2 << (D3DSP_SWIZZLE_SHIFT + 6)) )
 const int D3DSP_REPLICATEBLUE = ( (2 << (D3DSP_SWIZZLE_SHIFT + 0)) |
                (2 << (D3DSP_SWIZZLE_SHIFT + 2)) |
                (2 << (D3DSP_SWIZZLE_SHIFT + 4)) |
                (2 << (D3DSP_SWIZZLE_SHIFT + 6)) );


 //#define D3DSP_REPLICATEALPHA \
 //    ( (3 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
 //      (3 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
 //      (3 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
 //      (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )
 const int D3DSP_REPLICATEALPHA = ( (3 << (D3DSP_SWIZZLE_SHIFT + 0)) |
               (3 << (D3DSP_SWIZZLE_SHIFT + 2)) |
               (3 << (D3DSP_SWIZZLE_SHIFT + 4)) |
               (3 << (D3DSP_SWIZZLE_SHIFT + 6)) );


 // source parameter modifiers
 const int D3DSP_SRCMOD_SHIFT   =   24;
 const int D3DSP_SRCMOD_MASK    =   0x0F000000;

 enum _D3DSHADER_PARAM_SRCMOD_TYPE
 {
     D3DSPSM_NONE    = 0<<D3DSP_SRCMOD_SHIFT, // nop
     D3DSPSM_NEG     = 1<<D3DSP_SRCMOD_SHIFT, // negate
     D3DSPSM_BIAS    = 2<<D3DSP_SRCMOD_SHIFT, // bias
     D3DSPSM_BIASNEG = 3<<D3DSP_SRCMOD_SHIFT, // bias and negate
     D3DSPSM_SIGN    = 4<<D3DSP_SRCMOD_SHIFT, // sign
     D3DSPSM_SIGNNEG = 5<<D3DSP_SRCMOD_SHIFT, // sign and negate
     D3DSPSM_COMP    = 6<<D3DSP_SRCMOD_SHIFT, // complement
     D3DSPSM_X2      = 7<<D3DSP_SRCMOD_SHIFT, // *2
     D3DSPSM_X2NEG   = 8<<D3DSP_SRCMOD_SHIFT, // *2 and negate
     D3DSPSM_DZ      = 9<<D3DSP_SRCMOD_SHIFT, // divide through by z
component
     D3DSPSM_DW      = 10<<D3DSP_SRCMOD_SHIFT, // divide through by w
component
     D3DSPSM_ABS     = 11<<D3DSP_SRCMOD_SHIFT, // abs()
     D3DSPSM_ABSNEG  = 12<<D3DSP_SRCMOD_SHIFT, // -abs()
     D3DSPSM_NOT     = 13<<D3DSP_SRCMOD_SHIFT, // for predicate register:
"!p0"
     D3DSPSM_FORCE_DWORD = 0x7fffffff,        // force 32-bit size enum
 }
 alias _D3DSHADER_PARAM_SRCMOD_TYPE D3DSHADER_PARAM_SRCMOD_TYPE;

 // pixel shader version token
 //#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))
 int D3DPS_VERSION (int _Major, int _Minor)
 {
  return (0xFFFF0000|((_Major)<<8)|(_Minor));
 }

 // vertex shader version token
 //#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))
 int D3DVS_VERSION (int _Major , int _Minor)
 {
  return (0xFFFE0000|((_Major)<<8)|(_Minor));
 }

 // extract major/minor from version cap
 //#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
 int D3DSHADER_VERSION_MAJOR (int _Version)
 {
  return  (((_Version)>>8) & 0xFF);
 }

 //#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
 int D3DSHADER_VERSION_MINOR (int _Version)
 {
  return (((_Version)>>0)&0xFF);
 }

 // destination/source parameter register type
 const int D3DSI_COMMENTSIZE_SHIFT   =  16;
 const int D3DSI_COMMENTSIZE_MASK    =  0x7FFF0000;

 //#define D3DSHADER_COMMENT(_DWordSize) \
 //
((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COM
MENT)
 int D3DSHADER_COMMENT (DWORD _DWordSize)
 {
  return ((((_DWordSize) << D3DSI_COMMENTSIZE_SHIFT) &
D3DSI_COMMENTSIZE_MASK) | D3DSHADER_INSTRUCTION_OPCODE_TYPE.D3DSIO_COMMENT);
 }

 // pixel/vertex shader end token
 //#define D3DPS_END()  0x0000FFFF
 int D3DPS_END ()
 {
  return 0x0000FFFF;
 }

 //#define D3DVS_END()  0x0000FFFF
 int D3DVS_END ()
 {
  return 0x0000FFFF;
 }


 //---------------------------------------------------------------------

 // High order surfaces
 //
 enum _D3DBASISTYPE
 {
    D3DBASIS_BEZIER      = 0,
    D3DBASIS_BSPLINE     = 1,
    D3DBASIS_CATMULL_ROM = 2, /* In D3D8 this used to be
D3DBASIS_INTERPOLATE */
    D3DBASIS_FORCE_DWORD = 0x7fffffff,
 }
 alias _D3DBASISTYPE D3DBASISTYPE;

 enum _D3DDEGREETYPE
 {
    D3DDEGREE_LINEAR      = 1,
    D3DDEGREE_QUADRATIC   = 2,
    D3DDEGREE_CUBIC       = 3,
    D3DDEGREE_QUINTIC     = 5,
    D3DDEGREE_FORCE_DWORD = 0x7fffffff,
 }
 alias _D3DDEGREETYPE D3DDEGREETYPE;

 enum _D3DPATCHEDGESTYLE
 {
    D3DPATCHEDGE_DISCRETE    = 0,
    D3DPATCHEDGE_CONTINUOUS  = 1,
    D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,
 }
 alias _D3DPATCHEDGESTYLE D3DPATCHEDGESTYLE;

 enum _D3DSTATEBLOCKTYPE
 {
     D3DSBT_ALL           = 1, // capture all state
     D3DSBT_PIXELSTATE    = 2, // capture pixel state
     D3DSBT_VERTEXSTATE   = 3, // capture vertex state
     D3DSBT_FORCE_DWORD   = 0x7fffffff,
 }
 alias _D3DSTATEBLOCKTYPE D3DSTATEBLOCKTYPE;

 // The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state.
 //
 enum _D3DVERTEXBLENDFLAGS
 {
     D3DVBF_DISABLE  = 0,     // Disable vertex blending
     D3DVBF_1WEIGHTS = 1,     // 2 matrix blending
     D3DVBF_2WEIGHTS = 2,     // 3 matrix blending
     D3DVBF_3WEIGHTS = 3,     // 4 matrix blending
     D3DVBF_TWEENING = 255,   // blending using D3DRS_TWEENFACTOR
     D3DVBF_0WEIGHTS = 256,   // one matrix is used with weight 1.0
     D3DVBF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
 }
 alias _D3DVERTEXBLENDFLAGS D3DVERTEXBLENDFLAGS;

 enum _D3DTEXTURETRANSFORMFLAGS
 {
     D3DTTFF_DISABLE         = 0,    // texture coordinates are passed
directly
     D3DTTFF_COUNT1          = 1,    // rasterizer should expect 1-D texture
coords
     D3DTTFF_COUNT2          = 2,    // rasterizer should expect 2-D texture
coords
     D3DTTFF_COUNT3          = 3,    // rasterizer should expect 3-D texture
coords
     D3DTTFF_COUNT4          = 4,    // rasterizer should expect 4-D texture
coords
     D3DTTFF_PROJECTED       = 256,  // texcoords to be divided by COUNTth
element
     D3DTTFF_FORCE_DWORD     = 0x7fffffff,
 }
 alias _D3DTEXTURETRANSFORMFLAGS D3DTEXTURETRANSFORMFLAGS;

 // Macros to set texture coordinate format bits in the FVF id

 const int D3DFVF_TEXTUREFORMAT2 = 0;         // Two floating point values
 const int D3DFVF_TEXTUREFORMAT1 = 3;         // One floating point value
 const int D3DFVF_TEXTUREFORMAT3 = 1;         // Three floating point values
 const int D3DFVF_TEXTUREFORMAT4 = 2;         // Four floating point values

 //#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 <<
(CoordIndex*2 + 16))
 int D3DFVF_TEXCOORDSIZE3 (int CoordIndex)
 {
  return (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16));
 }

 //#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
 int D3DFVF_TEXCOORDSIZE2 (int CoordIndex)
 {
  return (D3DFVF_TEXTUREFORMAT2);
 }

 //#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 <<
(CoordIndex*2 + 16))
 int D3DFVF_TEXCOORDSIZE4 (int CoordIndex)
 {
  return  (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16));
 }

 //#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 <<
(CoordIndex*2 + 16))
 int D3DFVF_TEXCOORDSIZE1 (int CoordIndex)
 {
  return (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16));
 }


 //---------------------------------------------------------------------

 /* Direct3D9 Device types */
 enum _D3DDEVTYPE
 {
     D3DDEVTYPE_HAL         = 1,
     D3DDEVTYPE_REF         = 2,
     D3DDEVTYPE_SW          = 3,

     D3DDEVTYPE_FORCE_DWORD  = 0x7fffffff
 }
 alias _D3DDEVTYPE D3DDEVTYPE;

 /* Multi-Sample buffer types */
 enum _D3DMULTISAMPLE_TYPE
 {
     D3DMULTISAMPLE_NONE            =  0,
     D3DMULTISAMPLE_NONMASKABLE     =  1,
     D3DMULTISAMPLE_2_SAMPLES       =  2,
     D3DMULTISAMPLE_3_SAMPLES       =  3,
     D3DMULTISAMPLE_4_SAMPLES       =  4,
     D3DMULTISAMPLE_5_SAMPLES       =  5,
     D3DMULTISAMPLE_6_SAMPLES       =  6,
     D3DMULTISAMPLE_7_SAMPLES       =  7,
     D3DMULTISAMPLE_8_SAMPLES       =  8,
     D3DMULTISAMPLE_9_SAMPLES       =  9,
     D3DMULTISAMPLE_10_SAMPLES      = 10,
     D3DMULTISAMPLE_11_SAMPLES      = 11,
     D3DMULTISAMPLE_12_SAMPLES      = 12,
     D3DMULTISAMPLE_13_SAMPLES      = 13,
     D3DMULTISAMPLE_14_SAMPLES      = 14,
     D3DMULTISAMPLE_15_SAMPLES      = 15,
     D3DMULTISAMPLE_16_SAMPLES      = 16,

     D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff
 }
 alias _D3DMULTISAMPLE_TYPE D3DMULTISAMPLE_TYPE;

 /* Formats
  * Most of these names have the following convention:
  *      A = Alpha
  *      R = Red
  *      G = Green
  *      B = Blue
  *      X = Unused Bits
  *      P = Palette
  *      L = Luminance
  *      U = dU coordinate for BumpMap
  *      V = dV coordinate for BumpMap
  *      S = Stencil
  *      D = Depth (e.g. Z or W buffer)
  *      C = Computed from other channels (typically on certain read
operations)
  *
  *      Further, the order of the pieces are from MSB first; hence
  *      D3DFMT_A8L8 indicates that the high byte of this two byte
  *      format is alpha.
  *
  *      D16 indicates:
  *           - An integer 16-bit value.
  *           - An app-lockable surface.
  *
  *      All Depth/Stencil formats except D3DFMT_D16_LOCKABLE indicate:
  *          - no particular bit ordering per pixel, and
  *          - are not app lockable, and
  *          - the driver is allowed to consume more than the indicated
  *            number of bits per Depth channel (but not Stencil channel).
  */

  //   #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
  //               ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |       \
  //               ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
  int MAKEFOURCC ( char ch0, char ch1, char ch2, char ch3)
  {
   return ( cast(DWORD)( cast(BYTE)((ch0)) | ( cast(DWORD) (cast(BYTE)((ch1
<< 8))) ) |
       ( cast(DWORD)( cast(BYTE)(( ch2 << 16))) ) | ( cast(DWORD)(
cast(BYTE)((ch3 << 24)))) ));
  }



 enum _D3DFORMAT
 {
     D3DFMT_UNKNOWN              =  0,

     D3DFMT_R8G8B8               = 20,
     D3DFMT_A8R8G8B8             = 21,
     D3DFMT_X8R8G8B8             = 22,
     D3DFMT_R5G6B5               = 23,
     D3DFMT_X1R5G5B5             = 24,
     D3DFMT_A1R5G5B5             = 25,
     D3DFMT_A4R4G4B4             = 26,
     D3DFMT_R3G3B2               = 27,
     D3DFMT_A8                   = 28,
     D3DFMT_A8R3G3B2             = 29,
     D3DFMT_X4R4G4B4             = 30,
     D3DFMT_A2B10G10R10          = 31,
     D3DFMT_A8B8G8R8             = 32,
     D3DFMT_X8B8G8R8             = 33,
     D3DFMT_G16R16               = 34,
     D3DFMT_A2R10G10B10          = 35,
     D3DFMT_A16B16G16R16         = 36,

     D3DFMT_A8P8                 = 40,
     D3DFMT_P8                   = 41,

     D3DFMT_L8                   = 50,
     D3DFMT_A8L8                 = 51,
     D3DFMT_A4L4                 = 52,

     D3DFMT_V8U8                 = 60,
     D3DFMT_L6V5U5               = 61,
     D3DFMT_X8L8V8U8             = 62,
     D3DFMT_Q8W8V8U8             = 63,
     D3DFMT_V16U16               = 64,
     D3DFMT_A2W10V10U10          = 67,

     D3DFMT_UYVY                 = 85, //MAKEFOURCC('U', 'Y', 'V', 'Y'),
     D3DFMT_R8G8_B8G8            = 82, //MAKEFOURCC('R', 'G', 'B', 'G'),
     D3DFMT_YUY2                 = 89, //MAKEFOURCC('Y', 'U', 'Y', '2'),
     D3DFMT_G8R8_G8B8            = 71, //MAKEFOURCC('G', 'R', 'G', 'B'),
     D3DFMT_DXT1                 = 68, //MAKEFOURCC('D', 'X', 'T', '1'),
     D3DFMT_DXT2                 = 68, //MAKEFOURCC('D', 'X', 'T', '2'),
     D3DFMT_DXT3                 = 68, //MAKEFOURCC('D', 'X', 'T', '3'),
     D3DFMT_DXT4                 = 68, //MAKEFOURCC('D', 'X', 'T', '4'),
     D3DFMT_DXT5                 = 68, //MAKEFOURCC('D', 'X', 'T', '5'),

     D3DFMT_D16_LOCKABLE         = 70,
     D3DFMT_D32                  = 71,
     D3DFMT_D15S1                = 73,
     D3DFMT_D24S8                = 75,
     D3DFMT_D24X8                = 77,
     D3DFMT_D24X4S4              = 79,
     D3DFMT_D16                  = 80,

     D3DFMT_D32F_LOCKABLE        = 82,
     D3DFMT_D24FS8               = 83,


     D3DFMT_L16                  = 81,

     D3DFMT_VERTEXDATA           =100,
     D3DFMT_INDEX16              =101,
     D3DFMT_INDEX32              =102,

     D3DFMT_Q16W16V16U16         =110,

     D3DFMT_MULTI2_ARGB8         = 68, //MAKEFOURCC('M','E','T','1'),

     // Floating point surface formats

     // s10e5 formats (16-bits per channel)
     D3DFMT_R16F                 = 111,
     D3DFMT_G16R16F              = 112,
     D3DFMT_A16B16G16R16F        = 113,

     // IEEE s23e8 formats (32-bits per channel)
     D3DFMT_R32F                 = 114,
     D3DFMT_G32R32F              = 115,
     D3DFMT_A32B32G32R32F        = 116,

     D3DFMT_CxV8U8               = 117,


     D3DFMT_FORCE_DWORD          =0x7fffffff
 }
 alias _D3DFORMAT D3DFORMAT;

 /* Display Modes */
 struct _D3DDISPLAYMODE
 {
     UINT            Width;
     UINT            Height;
     UINT            RefreshRate;
     D3DFORMAT       Format;
 }
 alias _D3DDISPLAYMODE D3DDISPLAYMODE;

 /* Creation Parameters */
 struct _D3DDEVICE_CREATION_PARAMETERS
 {
     UINT            AdapterOrdinal;
     D3DDEVTYPE      DeviceType;
     HWND            hFocusWindow;
     DWORD           BehaviorFlags;
 }
 alias _D3DDEVICE_CREATION_PARAMETERS D3DDEVICE_CREATION_PARAMETERS;


 /* SwapEffects */
 enum _D3DSWAPEFFECT
 {
     D3DSWAPEFFECT_DISCARD           = 1,
     D3DSWAPEFFECT_FLIP              = 2,
     D3DSWAPEFFECT_COPY              = 3,

     D3DSWAPEFFECT_FORCE_DWORD       = 0x7fffffff
 }
 alias _D3DSWAPEFFECT D3DSWAPEFFECT;

 /* Pool types */
 enum _D3DPOOL
 {
     D3DPOOL_DEFAULT                 = 0,
     D3DPOOL_MANAGED                 = 1,
     D3DPOOL_SYSTEMMEM               = 2,
     D3DPOOL_SCRATCH                 = 3,

     D3DPOOL_FORCE_DWORD             = 0x7fffffff
 }
 alias _D3DPOOL D3DPOOL;


 /* RefreshRate pre-defines */
 const int D3DPRESENT_RATE_DEFAULT      =   0x00000000;


 /* Resize Optional Parameters */
 struct _D3DPRESENT_PARAMETERS_
 {
     UINT                BackBufferWidth;
     UINT                BackBufferHeight;
     D3DFORMAT           BackBufferFormat;
     UINT                BackBufferCount;

     D3DMULTISAMPLE_TYPE MultiSampleType;
     DWORD               MultiSampleQuality;

     D3DSWAPEFFECT       SwapEffect;
     HWND                hDeviceWindow;
     BOOL                Windowed;
     BOOL                EnableAutoDepthStencil;
     D3DFORMAT           AutoDepthStencilFormat;
     DWORD               Flags;

     /* FullScreen_RefreshRateInHz must be zero for Windowed mode */
     UINT                FullScreen_RefreshRateInHz;
     UINT                PresentationInterval;
 }
 alias _D3DPRESENT_PARAMETERS_ D3DPRESENT_PARAMETERS;

 // Values for D3DPRESENT_PARAMETERS.Flags

 const int D3DPRESENTFLAG_LOCKABLE_BACKBUFFER    =  0x00000001;
 const int D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL   =  0x00000002;
 const int D3DPRESENTFLAG_DEVICECLIP             =  0x00000004;
 const int D3DPRESENTFLAG_VIDEO                  =  0x00000010;

 /* Gamma Ramp: Same as DX7 */

 struct _D3DGAMMARAMP
 {
     WORD                red  [256];
     WORD                green[256];
     WORD                blue [256];
 }
 alias _D3DGAMMARAMP D3DGAMMARAMP;

 /* Back buffer types */
 enum _D3DBACKBUFFER_TYPE
 {
     D3DBACKBUFFER_TYPE_MONO         = 0,
     D3DBACKBUFFER_TYPE_LEFT         = 1,
     D3DBACKBUFFER_TYPE_RIGHT        = 2,

     D3DBACKBUFFER_TYPE_FORCE_DWORD  = 0x7fffffff
 }
 alias _D3DBACKBUFFER_TYPE D3DBACKBUFFER_TYPE;


 /* Types */
 enum _D3DRESOURCETYPE
 {
     D3DRTYPE_SURFACE                =  1,
     D3DRTYPE_VOLUME                 =  2,
     D3DRTYPE_TEXTURE                =  3,
     D3DRTYPE_VOLUMETEXTURE          =  4,
     D3DRTYPE_CUBETEXTURE            =  5,
     D3DRTYPE_VERTEXBUFFER           =  6,
     D3DRTYPE_INDEXBUFFER            =  7,


     D3DRTYPE_FORCE_DWORD            = 0x7fffffff
 }
 alias _D3DRESOURCETYPE D3DRESOURCETYPE;

 /* Usages */
 const int D3DUSAGE_RENDERTARGET     =  0x00000001;
 const int D3DUSAGE_DEPTHSTENCIL     =  0x00000002;
 const int D3DUSAGE_DYNAMIC          =  0x00000200;

 // When passed to CheckDeviceFormat, D3DUSAGE_AUTOGENMIPMAP may return
 // D3DOK_NOAUTOGEN if the device doesn't support autogeneration for that
format.
 // D3DOK_NOAUTOGEN is a success code, not a failure code... the SUCCEEDED
and FAILED macros
 // will return true and false respectively for this code.
 const int D3DUSAGE_AUTOGENMIPMAP     = 0x00000400;
 const int D3DUSAGE_DMAP              = 0x00004000;

 // The following usages are valid only for querying CheckDeviceFormat
 const int D3DUSAGE_QUERY_LEGACYBUMPMAP          =  0x00008000;
 const int D3DUSAGE_QUERY_SRGBREAD               =  0x00010000;
 const int D3DUSAGE_QUERY_FILTER                 =  0x00020000;
 const int D3DUSAGE_QUERY_SRGBWRITE              =  0x00040000;
 const int D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING = 0x00080000;
 const int D3DUSAGE_QUERY_VERTEXTEXTURE          =  0x00100000;

 /* Usages for Vertex/Index buffers */
 const int D3DUSAGE_WRITEONLY         = 0x00000008;
 const int D3DUSAGE_SOFTWAREPROCESSING = 0x00000010;
 const int D3DUSAGE_DONOTCLIP         = 0x00000020;
 const int D3DUSAGE_POINTS            = 0x00000040;
 const int D3DUSAGE_RTPATCHES         = 0x00000080;
 const int D3DUSAGE_NPATCHES          = 0x00000100;










 /* CubeMap Face identifiers */
 enum _D3DCUBEMAP_FACES
 {
     D3DCUBEMAP_FACE_POSITIVE_X     = 0,
     D3DCUBEMAP_FACE_NEGATIVE_X     = 1,
     D3DCUBEMAP_FACE_POSITIVE_Y     = 2,
     D3DCUBEMAP_FACE_NEGATIVE_Y     = 3,
     D3DCUBEMAP_FACE_POSITIVE_Z     = 4,
     D3DCUBEMAP_FACE_NEGATIVE_Z     = 5,

     D3DCUBEMAP_FACE_FORCE_DWORD    = 0x7fffffff
 }
 alias _D3DCUBEMAP_FACES D3DCUBEMAP_FACES;


 /* Lock flags */

 const int D3DLOCK_READONLY         =  0x00000010;
 const int D3DLOCK_DISCARD          =  0x00002000;
 const int D3DLOCK_NOOVERWRITE      =  0x00001000;
 const int D3DLOCK_NOSYSLOCK        =  0x00000800;
 const int D3DLOCK_DONOTWAIT        =  0x00004000;

 const int D3DLOCK_NO_DIRTY_UPDATE  =   0x00008000;







 /* Vertex Buffer Description */
 struct _D3DVERTEXBUFFER_DESC
 {
     D3DFORMAT           Format;
     D3DRESOURCETYPE     Type;
     DWORD               Usage;
     D3DPOOL             Pool;
     UINT                Size;

     DWORD               FVF;

 }
 alias _D3DVERTEXBUFFER_DESC D3DVERTEXBUFFER_DESC;

 /* Index Buffer Description */
 struct _D3DINDEXBUFFER_DESC
 {
     D3DFORMAT           Format;
     D3DRESOURCETYPE     Type;
     DWORD               Usage;
     D3DPOOL             Pool;
     UINT                Size;
 }
 alias _D3DINDEXBUFFER_DESC D3DINDEXBUFFER_DESC;


 /* Surface Description */
 struct _D3DSURFACE_DESC
 {
     D3DFORMAT           Format;
     D3DRESOURCETYPE     Type;
     DWORD               Usage;
     D3DPOOL             Pool;

     D3DMULTISAMPLE_TYPE MultiSampleType;
     DWORD               MultiSampleQuality;
     UINT                Width;
     UINT                Height;
 }
 alias _D3DSURFACE_DESC D3DSURFACE_DESC;

 struct _D3DVOLUME_DESC
 {
     D3DFORMAT           Format;
     D3DRESOURCETYPE     Type;
     DWORD               Usage;
     D3DPOOL             Pool;

     UINT                Width;
     UINT                Height;
     UINT                Depth;
 }
 alias _D3DVOLUME_DESC D3DVOLUME_DESC;

 /* Structure for LockRect */
 struct _D3DLOCKED_RECT
 {
     INT                 Pitch;
     void*               pBits;
 }
 alias _D3DLOCKED_RECT D3DLOCKED_RECT;

 /* Structures for LockBox */
 struct _D3DBOX
 {
     UINT                Left;
     UINT                Top;
     UINT                Right;
     UINT                Bottom;
     UINT                Front;
     UINT                Back;
 }
 alias _D3DBOX D3DBOX;

 struct _D3DLOCKED_BOX
 {
     INT                 RowPitch;
     INT                 SlicePitch;
     void*               pBits;
 }
 alias _D3DLOCKED_BOX D3DLOCKED_BOX;

 /* Structures for LockRange */
 struct _D3DRANGE
 {
     UINT                Offset;
     UINT                Size;
 }
 alias _D3DRANGE D3DRANGE;

 /* Structures for high order primitives */
 struct _D3DRECTPATCH_INFO
 {
     UINT                StartVertexOffsetWidth;
     UINT                StartVertexOffsetHeight;
     UINT                Width;
     UINT                Height;
     UINT                Stride;
     D3DBASISTYPE        Basis;
     D3DDEGREETYPE       Degree;
 }
 alias _D3DRECTPATCH_INFO D3DRECTPATCH_INFO;

 struct _D3DTRIPATCH_INFO
 {
     UINT                StartVertexOffset;
     UINT                NumVertices;
     D3DBASISTYPE        Basis;
     D3DDEGREETYPE       Degree;
 }
 alias _D3DTRIPATCH_INFO D3DTRIPATCH_INFO;

 /* Adapter Identifier */

 const int MAX_DEVICE_IDENTIFIER_STRING    =    512;
 struct _D3DADAPTER_IDENTIFIER9
 {
     char            Driver[MAX_DEVICE_IDENTIFIER_STRING];
     char            Description[MAX_DEVICE_IDENTIFIER_STRING];
     char            DeviceName[32];         /* Device name for GDI (ex.
\\.\DISPLAY1) */

 //#ifdef _WIN32
     int   DriverVersion;          /* Defined for 32 bit components */
 //#else
 //    DWORD           DriverVersionLowPart;   ///* Defined for 16 bit
driver components*/
 //    DWORD           DriverVersionHighPart;
 //#endif

     DWORD           VendorId;
     DWORD           DeviceId;
     DWORD           SubSysId;
     DWORD           Revision;

     GUID            DeviceIdentifier;

     DWORD           WHQLLevel;

 }
 alias _D3DADAPTER_IDENTIFIER9 D3DADAPTER_IDENTIFIER9;


 /* Raster Status structure returned by GetRasterStatus */
 struct _D3DRASTER_STATUS
 {
     BOOL            InVBlank;
     UINT            ScanLine;
 }
 alias _D3DRASTER_STATUS D3DRASTER_STATUS;



 /* Debug monitor tokens (DEBUG only)

    Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as
    passing a token to the debug monitor.  For example, if, after passing
    D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values
    are passed in, the enabled/disabled state of the debug
    monitor will still persist.

    The debug monitor defaults to enabled.

    Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use.
 */
 enum _D3DDEBUGMONITORTOKENS
 {
     D3DDMT_ENABLE            = 0,    // enable debug monitor
     D3DDMT_DISABLE           = 1,    // disable debug monitor
     D3DDMT_FORCE_DWORD     = 0x7fffffff,
 }
 alias _D3DDEBUGMONITORTOKENS D3DDEBUGMONITORTOKENS;

 // Async feedback

 enum _D3DQUERYTYPE {
     D3DQUERYTYPE_VCACHE                 = 4, /* D3DISSUE_END */
     D3DQUERYTYPE_RESOURCEMANAGER        = 5, /* D3DISSUE_END */
     D3DQUERYTYPE_VERTEXSTATS            = 6, /* D3DISSUE_END */
     D3DQUERYTYPE_EVENT                  = 8, /* D3DISSUE_END */
     D3DQUERYTYPE_OCCLUSION              = 9, /* D3DISSUE_BEGIN,
D3DISSUE_END */
 }
 alias _D3DQUERYTYPE D3DQUERYTYPE;

 // Flags field for Issue
 const int D3DISSUE_END   = (1 << 0); // Tells the runtime to issue the end
of a query, changing it's state to "non-signaled".
 const int D3DISSUE_BEGIN  = (1 << 1); // Tells the runtime to issue the
beginng of a query.


 // Flags field for GetData
 const int D3DGETDATA_FLUSH  = (1 << 0); // Tells the runtime to flush if
the query is outstanding.


 struct _D3DRESOURCESTATS
 {
 // Data collected since last Present()
     BOOL    bThrashing;             /* indicates if thrashing */
     DWORD   ApproxBytesDownloaded;  /* Approximate number of bytes
downloaded by resource manager */
     DWORD   NumEvicts;              /* number of objects evicted */
     DWORD   NumVidCreates;          /* number of objects created in video
memory */
     DWORD   LastPri;                /* priority of last object evicted */
     DWORD   NumUsed;                /* number of objects set to the device
*/
     DWORD   NumUsedInVidMem;        /* number of objects set to the device,
which are already in video memory */
 // Persistent data
     DWORD   WorkingSet;             /* number of objects in video memory */
     DWORD   WorkingSetBytes;        /* number of bytes in video memory */
     DWORD   TotalManaged;           /* total number of managed objects */
     DWORD   TotalBytes;             /* total number of bytes of managed
objects */
 }
 alias _D3DRESOURCESTATS D3DRESOURCESTATS;

 const int D3DRTYPECOUNT = D3DRESOURCETYPE.D3DRTYPE_INDEXBUFFER + 1;

 struct _D3DDEVINFO_RESOURCEMANAGER
 {
     D3DRESOURCESTATS    stats[D3DRTYPECOUNT];
 }
 alias _D3DDEVINFO_RESOURCEMANAGER D3DDEVINFO_RESOURCEMANAGER;
 alias D3DDEVINFO_RESOURCEMANAGER* LPD3DDEVINFO_RESOURCEMANAGER;

 struct _D3DDEVINFO_D3DVERTEXSTATS
 {
     DWORD   NumRenderedTriangles;       /* total number of triangles that
are not clipped in this frame */
     DWORD   NumExtraClippingTriangles;  /* Number of new triangles
generated by clipping */
 }
 alias _D3DDEVINFO_D3DVERTEXSTATS D3DDEVINFO_D3DVERTEXSTATS;
 alias D3DDEVINFO_D3DVERTEXSTATS* LPD3DDEVINFO_D3DVERTEXSTATS;


 struct _D3DDEVINFO_VCACHE {
     DWORD   Pattern;                    /* bit pattern, return value must
be FOUR_CC(?C?, ?A?, ?C?, ?H?) */
     DWORD   OptMethod;                  /* optimization method 0 means
longest strips, 1 means vertex cache based */
     DWORD   CacheSize;                  /* cache size to optimize for
(only required if type is 1) */
     DWORD   MagicNumber;                /* used to determine when to
restart strips (only required if type is 1)*/
 }
 alias _D3DDEVINFO_VCACHE D3DDEVINFO_VCACHE;
 alias D3DDEVINFO_VCACHE* LPD3DDEVINFO_VCACHE;

 } // align (4)


//} /* (DIRECT3D_VERSION) */






August 31, 2004
You can't use the libs in there original form but you have 2 options, run implib that comes with DM on the DLL for aresulting lib, or runn coff2omf on the static lib of MS's.

Q

In article <ch2nro$16p4$1@digitaldaemon.com>, aelmetwaly says...
>
>Hi there,
>I translated d3d9.h and d3d9caps.h and d3d9types.h into d but when i compile
>my program I can't simply link with d3d9.lib and dxguid.lib. the linker give
>invalid lib error :-(
>It's a major drawback for d language that it doesn't support microsoft libs.
>But these are the files for those interseted. I posted here because I don't
>know how to add it to dsource. they have no automatic registeration of
>projects.
>////////////////////////////////////////////////////////////////////////////
>//////////////////////////////////////////////////////////////////////
>d3d9.d
>////////////////////////////////////////
>
>// Author : Ahmed El-Metwaly
>// contact : aelmetwaly@gawa.com
>// Lic     : GPL
>
>
>/*========================================================================== ;
> *
> *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
> *
> *  File:   d3d9.h
> *  Content:    Direct3D include file
> *
>
>**************************************************************************** /
>
>
>const int DIRECT3D_VERSION =  0x0900;
>
>// include this file content only if compiling for DX9 interfaces
>//#if(DIRECT3D_VERSION >= 0x0900)
>//version( DIRECT3D_VERSION)
>//{
>
> /* This identifier is passed to Direct3DCreate9 in order to ensure that an
>  * application was built against the correct header files. This number is
>  * incremented whenever a header (or other) change would require
>applications
>  * to be rebuilt. If the version doesn't match, Direct3DCreate9 will fail.
>  * (The number itself has no meaning.)*/
>
> const int D3D_SDK_VERSION = 31;
>
>
> import std.c.stdio;
> import std.c.stdlib;
> import std.string;
> import std.c.windows.windows;
> import std.c.windows.com;
> //import win32.wingdi; //too many conflicts with phobos std.c.windows
>
> // from win32.wingdi
> struct _RGNDATAHEADER {
>   DWORD dwSize;
>   DWORD iType;
>   DWORD nCount;
>   DWORD nRgnSize;
>   RECT rcBound;
> }
> alias _RGNDATAHEADER RGNDATAHEADER;
> alias _RGNDATAHEADER* PRGNDATAHEADER;
>
> struct _RGNDATA {
>   RGNDATAHEADER rdh;
>   char Buffer[1];
> }
> alias _RGNDATA RGNDATA;
> alias _RGNDATA* PRGNDATA;
> alias _RGNDATA* NPRGNDATA;
> alias _RGNDATA* LPRGNDATA;
>
> alias GUID* REFIID;
>
>
> alias HANDLE HMONITOR;
> //alias WINAPI D3DAPI;
>
>
>
> /*
>  * Interface IID's
>  */
>
>
> /* IID_IDirect3D9 */
> /* {81BDCBCA-64D4-426d-AE8D-AD0147F4275C} */
> GUID IID_IDirect3D9 = { 0x81BDCBCA, 0x64D4, 0x426D, [ 0xAE, 0x8D, 0xAD,
>0x1, 0x47, 0xF4, 0x27, 0x5C] };
>
> /* IID_IDirect3DDevice9 */
> // {D0223B96-BF7A-43fd-92BD-A43B0D82B9EB} */
> GUID IID_IDirect3DDevice9 = { 0xd0223b96, 0xbf7a, 0x43fd, [ 0x92, 0xbd,
>0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb] };
>
> /* IID_IDirect3DResource9 */
> // {05EEC05D-8F7D-4362-B999-D1BAF357C704}
> GUID IID_IDirect3DResource9 = { 0x5eec05d, 0x8f7d, 0x4362, [ 0xb9,  0x99,
>0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4]};
>
> /* IID_IDirect3DBaseTexture9 */
> /* {580CA87E-1D3C-4d54-991D-B7D3E3C298CE} */
> GUID IID_IDirect3DBaseTexture9 ={ 0x580ca87e, 0x1d3c, 0x4d54, [ 0x99, 0x1d,
>0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce]};
>
> /* IID_IDirect3DTexture9 */
> /* {85C31227-3DE5-4f00-9B3A-F11AC38C18B5} */
> GUID IID_IDirect3DTexture9 = { 0x85c31227, 0x3de5, 0x4f00,[ 0x9b, 0x3a,
>0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5]};
>
> /* IID_IDirect3DCubeTexture9 */
> /* {FFF32F81-D953-473a-9223-93D652ABA93F} */
> GUID IID_IDirect3DCubeTexture9 = { 0xfff32f81, 0xd953, 0x473a, [0x92, 0x23,
>0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f]};
>
> /* IID_IDirect3DVolumeTexture9 */
> /* {2518526C-E789-4111-A7B9-47EF328D13E6} */
> GUID IID_IDirect3DVolumeTexture9 = { 0x2518526c, 0xe789, 0x4111, [0xa7,
>0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6]};
>
> /* IID_IDirect3DVertexBuffer9 */
> /* {B64BB1B5-FD70-4df6-BF91-19D0A12455E3} */
> GUID IID_IDirect3DVertexBuffer9 = { 0xb64bb1b5, 0xfd70, 0x4df6, [0xbf,
>0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3]};
>
> /* IID_IDirect3DIndexBuffer9 */
> /* {7C9DD65E-D3F7-4529-ACEE-785830ACDE35} */
> GUID IID_IDirect3DIndexBuffer9 = { 0x7c9dd65e, 0xd3f7, 0x4529, [0xac,
>0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35]};
>
> /* IID_IDirect3DSurface9 */
> /* {0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B} */
> GUID IID_IDirect3DSurface9 = { 0xcfbaf3a, 0x9ff6, 0x429a, [0x99,  0xb3,
>0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b]};
>
> /* IID_IDirect3DVolume9 */
> /* {24F416E6-1F67-4aa7-B88E-D33F6F3128A1} */
> GUID IID_IDirect3DVolume9 = { 0x24f416e6, 0x1f67, 0x4aa7, [0xb8,  0x8e,
>0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1]};
>
> /* IID_IDirect3DSwapChain9 */
> /* {794950F2-ADFC-458a-905E-10A10B0B503B} */
> GUID IID_IDirect3DSwapChain9 = { 0x794950f2, 0xadfc, 0x458a, [0x90, 0x5e,
>0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b]};
>
> /* IID_IDirect3DVertexDeclaration9 */
> /* {DD13C59C-36FA-4098-A8FB-C7ED39DC8546} */
> GUID IID_IDirect3DVertexDeclaration9 = { 0xdd13c59c, 0x36fa, 0x4098, [0xa8,
>0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46]};
>
> /* IID_IDirect3DVertexShader9 */
> /* {EFC5557E-6265-4613-8A94-43857889EB36} */
> GUID IID_IDirect3DVertexShader9 = { 0xefc5557e, 0x6265, 0x4613, [0x8a,
>0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36]};
>
> /* IID_IDirect3DPixelShader9 */
> /* {6D3BDBDC-5B02-4415-B852-CE5E8BCCB289} */
> GUID IID_IDirect3DPixelShader9 = { 0x6d3bdbdc, 0x5b02, 0x4415, [0xb8,
>0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89]};
>
> /* IID_IDirect3DStateBlock9 */
> /* {B07C4FE5-310D-4ba8-A23C-4F0F206F218B} */
> GUID IID_IDirect3DStateBlock9 = { 0xb07c4fe5, 0x310d, 0x4ba8, [ 0xa2, 0x3c,
>0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b]};
>
> /* IID_IDirect3DQuery9 */
> /* {d9771460-a695-4f26-bbd3-27b840b541cc} */
> GUID IID_IDirect3DQuery9 = { 0xd9771460, 0xa695, 0x4f26, [0xbb,  0xd3,
>0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc]};
>
>
>
>
> //interface /*DECLSPEC_UUID("81BDCBCA-64D4-426d-AE8D-AD0147F4275C")*/
>IDirect3D9;
> //interface /*DECLSPEC_UUID("D0223B96-BF7A-43fd-92BD-A43B0D82B9EB")*/
>IDirect3DDevice9;
>
> //interface /*DECLSPEC_UUID("B07C4FE5-310D-4ba8-A23C-4F0F206F218B")*/
>IDirect3DStateBlock9;
> //interface /*DECLSPEC_UUID("05EEC05D-8F7D-4362-B999-D1BAF357C704")*/
>IDirect3DResource9;
> //interface /*DECLSPEC_UUID("DD13C59C-36FA-4098-A8FB-C7ED39DC8546")*/
>IDirect3DVertexDeclaration9;
> //interface /*DECLSPEC_UUID("EFC5557E-6265-4613-8A94-43857889EB36")*/
>IDirect3DVertexShader9;
> //interface /*DECLSPEC_UUID("6D3BDBDC-5B02-4415-B852-CE5E8BCCB289")*/
>IDirect3DPixelShader9;
> //interface /*DECLSPEC_UUID("580CA87E-1D3C-4d54-991D-B7D3E3C298CE")*/
>IDirect3DBaseTexture9;
> //interface /*DECLSPEC_UUID("85C31227-3DE5-4f00-9B3A-F11AC38C18B5")*/
>IDirect3DTexture9;
> //interface /*DECLSPEC_UUID("2518526C-E789-4111-A7B9-47EF328D13E6")*/
>IDirect3DVolumeTexture9;
> //interface /*DECLSPEC_UUID("FFF32F81-D953-473a-9223-93D652ABA93F")*/
>IDirect3DCubeTexture9;
>
> //interface /*DECLSPEC_UUID("B64BB1B5-FD70-4df6-BF91-19D0A12455E3")*/
>IDirect3DVertexBuffer9;
> //interface /*DECLSPEC_UUID("7C9DD65E-D3F7-4529-ACEE-785830ACDE35")*/
>IDirect3DIndexBuffer9;
>
> //interface /*DECLSPEC_UUID("0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B")*/
>IDirect3DSurface9;
> //interface /*DECLSPEC_UUID("24F416E6-1F67-4aa7-B88E-D33F6F3128A1")*/
>IDirect3DVolume9;
>
> //interface /*DECLSPEC_UUID("794950F2-ADFC-458a-905E-10A10B0B503B")*/
>IDirect3DSwapChain9;
> //interface /*DECLSPEC_UUID("d9771460-a695-4f26-bbd3-27b840b541cc")*/
>IDirect3DQuery9;
>
>
>
>
> import d3d9types;
> import d3d9caps;
>
>
> extern (C) {
>
>
> /*
>  * DLL Function for creating a Direct3D9 object. This object supports
>  * enumeration and allows the creation of Direct3DDevice9 objects.
>  * Pass the value of the constant D3D_SDK_VERSION to this function, so
>  * that the run-time can validate that your application was compiled
>  * against the right headers.
>  */
>
> IDirect3D9 * Direct3DCreate9(UINT SDKVersion);
>
>
> /*
>  * Direct3D interfaces
>  */
>
>
>
> interface IDirect3D9 : IUnknown
> {
>     /*** IUnknown methods ***/
>     HRESULT QueryInterface (REFIID riid, void** ppvObj);
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>     /*** IDirect3D9 methods ***/
>     HRESULT RegisterSoftwareDevice ( void* pInitializeFunction) ;
>     UINT  GetAdapterCount () ;
>     HRESULT GetAdapterIdentifier ( UINT Adapter,DWORD
>Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) ;
>     UINT  GetAdapterModeCount ( UINT Adapter,D3DFORMAT Format) ;
>     HRESULT EnumAdapterModes ( UINT Adapter,D3DFORMAT Format,UINT
>Mode,D3DDISPLAYMODE* pMode) ;
>     HRESULT GetAdapterDisplayMode ( UINT Adapter,D3DDISPLAYMODE* pMode) ;
>     HRESULT CheckDeviceType ( UINT iAdapter,D3DDEVTYPE DevType,D3DFORMAT
>DisplayFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) ;
>     HRESULT CheckDeviceFormat ( UINT Adapter,D3DDEVTYPE
>DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) ;
>     HRESULT CheckDeviceMultiSampleType ( UINT Adapter,D3DDEVTYPE
>DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) ;
>     HRESULT CheckDepthStencilMatch ( UINT Adapter,D3DDEVTYPE
>DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) ;
>     HRESULT CheckDeviceFormatConversion ( UINT Adapter,D3DDEVTYPE
>DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) ;
>     HRESULT GetDeviceCaps ( UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9*
>pCaps) ;
>     HMONITOR  GetAdapterMonitor ( UINT Adapter) ;
>     HRESULT CreateDevice ( UINT Adapter,D3DDEVTYPE DeviceType,HWND
>hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) ;
> }
>
> alias IDirect3D9 * LPDIRECT3D9 /*, PDIRECT3D9 */;
>
>
>
>
>
> /* SwapChain */
>
>
>
> interface IDirect3DDevice9 : IUnknown
> {
>     /*** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>     /*** IDirect3DDevice9 methods ***/
>     HRESULT TestCooperativeLevel () ;
>     UINT  GetAvailableTextureMem () ;
>     HRESULT EvictManagedResources () ;
>     HRESULT GetDirect3D ( IDirect3D9** ppD3D9) ;
>     HRESULT GetDeviceCaps ( D3DCAPS9* pCaps) ;
>     HRESULT GetDisplayMode ( UINT iSwapChain,D3DDISPLAYMODE* pMode) ;
>     HRESULT GetCreationParameters ( D3DDEVICE_CREATION_PARAMETERS
>*pParameters) ;
>     HRESULT SetCursorProperties ( UINT XHotSpot,UINT
>YHotSpot,IDirect3DSurface9* pCursorBitmap) ;
>     void  SetCursorPosition ( int X,int Y,DWORD Flags) ;
>     BOOL  ShowCursor ( BOOL bShow) ;
>     HRESULT CreateAdditionalSwapChain ( D3DPRESENT_PARAMETERS*
>pPresentationParameters,IDirect3DSwapChain9** pSwapChain) ;
>     HRESULT GetSwapChain ( UINT iSwapChain,IDirect3DSwapChain9**
>pSwapChain) ;
>     UINT  GetNumberOfSwapChains () ;
>     HRESULT Reset ( D3DPRESENT_PARAMETERS* pPresentationParameters) ;
>     HRESULT Present (  RECT* pSourceRect, RECT* pDestRect,HWND
>hDestWindowOverride, RGNDATA* pDirtyRegion) ;
>     HRESULT GetBackBuffer ( UINT iSwapChain,UINT
>iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) ;
>     HRESULT GetRasterStatus ( UINT iSwapChain,D3DRASTER_STATUS*
>pRasterStatus) ;
>     HRESULT SetDialogBoxMode ( BOOL bEnableDialogs) ;
>     void  SetGammaRamp ( UINT iSwapChain,DWORD Flags, D3DGAMMARAMP* pRamp)
>;
>     void  GetGammaRamp ( UINT iSwapChain,D3DGAMMARAMP* pRamp) ;
>     HRESULT CreateTexture ( UINT Width,UINT Height,UINT Levels,DWORD
>Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE* pSharedHandle) ;
>     HRESULT CreateVolumeTexture ( UINT Width,UINT Height,UINT Depth,UINT
>Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9** ppVolumeTexture,HANDLE* pSharedHandle) ;
>     HRESULT CreateCubeTexture ( UINT EdgeLength,UINT Levels,DWORD
>Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9** ppCubeTexture,HANDLE* pSharedHandle) ;
>     HRESULT CreateVertexBuffer ( UINT Length,DWORD Usage,DWORD FVF,D3DPOOL
>Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle) ;
>     HRESULT CreateIndexBuffer ( UINT Length,DWORD Usage,D3DFORMAT
>Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE* pSharedHandle) ;
>     HRESULT CreateRenderTarget ( UINT Width,UINT Height,D3DFORMAT
>Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) ;
>     HRESULT CreateDepthStencilSurface ( UINT Width,UINT Height,D3DFORMAT
>Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) ;
>     HRESULT UpdateSurface ( IDirect3DSurface9* pSourceSurface, RECT*
>pSourceRect,IDirect3DSurface9* pDestinationSurface, POINT* pDestPoint) ;
>     HRESULT UpdateTexture ( IDirect3DBaseTexture9*
>pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture) ;
>     HRESULT GetRenderTargetData ( IDirect3DSurface9*
>pRenderTarget,IDirect3DSurface9* pDestSurface) ;
>     HRESULT GetFrontBufferData ( UINT iSwapChain,IDirect3DSurface9*
>pDestSurface) ;
>     HRESULT StretchRect ( IDirect3DSurface9* pSourceSurface, RECT*
>pSourceRect,IDirect3DSurface9* pDestSurface, RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter) ;
>     HRESULT ColorFill ( IDirect3DSurface9* pSurface, RECT* pRect,D3DCOLOR
>color) ;
>     HRESULT CreateOffscreenPlainSurface ( UINT Width,UINT Height,D3DFORMAT
>Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) ;
>     HRESULT SetRenderTarget ( DWORD RenderTargetIndex,IDirect3DSurface9*
>pRenderTarget) ;
>     HRESULT GetRenderTarget ( DWORD RenderTargetIndex,IDirect3DSurface9**
>ppRenderTarget) ;
>     HRESULT SetDepthStencilSurface ( IDirect3DSurface9* pNewZStencil) ;
>     HRESULT GetDepthStencilSurface ( IDirect3DSurface9** ppZStencilSurface)
>;
>     HRESULT BeginScene () ;
>     HRESULT EndScene () ;
>     HRESULT Clear ( DWORD Count, D3DRECT* pRects,DWORD Flags,D3DCOLOR
>Color,float Z,DWORD Stencil) ;
>     HRESULT SetTransform ( D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix)
>;
>     HRESULT GetTransform ( D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix)
>;
>     HRESULT MultiplyTransform ( D3DTRANSFORMSTATETYPE, D3DMATRIX*) ;
>     HRESULT SetViewport (  D3DVIEWPORT9* pViewport) ;
>     HRESULT GetViewport ( D3DVIEWPORT9* pViewport) ;
>     HRESULT SetMaterial (  D3DMATERIAL9* pMaterial) ;
>     HRESULT GetMaterial ( D3DMATERIAL9* pMaterial) ;
>     HRESULT SetLight ( DWORD Index, D3DLIGHT9*) ;
>     HRESULT GetLight ( DWORD Index,D3DLIGHT9*) ;
>     HRESULT LightEnable ( DWORD Index,BOOL Enable) ;
>     HRESULT GetLightEnable ( DWORD Index,BOOL* pEnable) ;
>     HRESULT SetClipPlane ( DWORD Index, float* pPlane) ;
>     HRESULT GetClipPlane ( DWORD Index,float* pPlane) ;
>     HRESULT SetRenderState ( D3DRENDERSTATETYPE State,DWORD Value) ;
>     HRESULT GetRenderState ( D3DRENDERSTATETYPE State,DWORD* pValue) ;
>     HRESULT CreateStateBlock ( D3DSTATEBLOCKTYPE
>Type,IDirect3DStateBlock9** ppSB) ;
>     HRESULT BeginStateBlock () ;
>     HRESULT EndStateBlock ( IDirect3DStateBlock9** ppSB) ;
>     HRESULT SetClipStatus (  D3DCLIPSTATUS9* pClipStatus) ;
>     HRESULT GetClipStatus ( D3DCLIPSTATUS9* pClipStatus) ;
>     HRESULT GetTexture ( DWORD Stage,IDirect3DBaseTexture9** ppTexture) ;
>     HRESULT SetTexture ( DWORD Stage,IDirect3DBaseTexture9* pTexture) ;
>     HRESULT GetTextureStageState ( DWORD Stage,D3DTEXTURESTAGESTATETYPE
>Type,DWORD* pValue) ;
>     HRESULT SetTextureStageState ( DWORD Stage,D3DTEXTURESTAGESTATETYPE
>Type,DWORD Value) ;
>     HRESULT GetSamplerState ( DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD*
>pValue) ;
>     HRESULT SetSamplerState ( DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD
>Value) ;
>     HRESULT ValidateDevice ( DWORD* pNumPasses) ;
>     HRESULT SetPaletteEntries ( UINT PaletteNumber, PALETTEENTRY* pEntries)
>;
>     HRESULT GetPaletteEntries ( UINT PaletteNumber,PALETTEENTRY* pEntries)
>;
>     HRESULT SetCurrentTexturePalette ( UINT PaletteNumber) ;
>     HRESULT GetCurrentTexturePalette ( UINT *PaletteNumber) ;
>     HRESULT SetScissorRect (  RECT* pRect) ;
>     HRESULT GetScissorRect ( RECT* pRect) ;
>     HRESULT SetSoftwareVertexProcessing ( BOOL bSoftware) ;
>     BOOL  GetSoftwareVertexProcessing () ;
>     HRESULT SetNPatchMode ( float nSegments) ;
>     float  GetNPatchMode () ;
>     HRESULT DrawPrimitive ( D3DPRIMITIVETYPE PrimitiveType,UINT
>StartVertex,UINT PrimitiveCount) ;
>     HRESULT DrawIndexedPrimitive ( D3DPRIMITIVETYPE,INT
>BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount) ;
>     HRESULT DrawPrimitiveUP ( D3DPRIMITIVETYPE PrimitiveType,UINT
>PrimitiveCount, void* pVertexStreamZeroData,UINT VertexStreamZeroStride) ;
>     HRESULT DrawIndexedPrimitiveUP ( D3DPRIMITIVETYPE PrimitiveType,UINT
>MinVertexIndex,UINT NumVertices,UINT PrimitiveCount, void* pIndexData,D3DFORMAT IndexDataFormat, void* pVertexStreamZeroData,UINT VertexStreamZeroStride) ;
>     HRESULT ProcessVertices ( UINT SrcStartIndex,UINT DestIndex,UINT
>VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9* pVertexDecl,DWORD Flags) ;
>     HRESULT CreateVertexDeclaration (  D3DVERTEXELEMENT9*
>pVertexElements,IDirect3DVertexDeclaration9** ppDecl) ;
>     HRESULT SetVertexDeclaration ( IDirect3DVertexDeclaration9* pDecl) ;
>     HRESULT GetVertexDeclaration ( IDirect3DVertexDeclaration9** ppDecl) ;
>     HRESULT SetFVF ( DWORD FVF) ;
>     HRESULT GetFVF ( DWORD* pFVF) ;
>     HRESULT CreateVertexShader (  DWORD* pFunction,IDirect3DVertexShader9**
>ppShader) ;
>     HRESULT SetVertexShader ( IDirect3DVertexShader9* pShader) ;
>     HRESULT GetVertexShader ( IDirect3DVertexShader9** ppShader) ;
>     HRESULT SetVertexShaderConstantF ( UINT StartRegister, float*
>pConstantData,UINT Vector4fCount) ;
>     HRESULT GetVertexShaderConstantF ( UINT StartRegister,float*
>pConstantData,UINT Vector4fCount) ;
>     HRESULT SetVertexShaderConstantI ( UINT StartRegister, int*
>pConstantData,UINT Vector4iCount) ;
>     HRESULT GetVertexShaderConstantI ( UINT StartRegister,int*
>pConstantData,UINT Vector4iCount) ;
>     HRESULT SetVertexShaderConstantB ( UINT StartRegister, BOOL*
>pConstantData,UINT  BoolCount) ;
>     HRESULT GetVertexShaderConstantB ( UINT StartRegister,BOOL*
>pConstantData,UINT BoolCount) ;
>     HRESULT SetStreamSource ( UINT StreamNumber,IDirect3DVertexBuffer9*
>pStreamData,UINT OffsetInBytes,UINT Stride) ;
>     HRESULT GetStreamSource ( UINT StreamNumber,IDirect3DVertexBuffer9**
>ppStreamData,UINT* OffsetInBytes,UINT* pStride) ;
>     HRESULT SetStreamSourceFreq ( UINT StreamNumber,UINT Divider) ;
>     HRESULT GetStreamSourceFreq ( UINT StreamNumber,UINT* Divider) ;
>     HRESULT SetIndices ( IDirect3DIndexBuffer9* pIndexData) ;
>     HRESULT GetIndices ( IDirect3DIndexBuffer9** ppIndexData) ;
>     HRESULT CreatePixelShader (  DWORD* pFunction,IDirect3DPixelShader9**
>ppShader) ;
>     HRESULT SetPixelShader ( IDirect3DPixelShader9* pShader) ;
>     HRESULT GetPixelShader ( IDirect3DPixelShader9** ppShader) ;
>     HRESULT SetPixelShaderConstantF ( UINT StartRegister, float*
>pConstantData,UINT Vector4fCount) ;
>     HRESULT GetPixelShaderConstantF ( UINT StartRegister,float*
>pConstantData,UINT Vector4fCount) ;
>     HRESULT SetPixelShaderConstantI ( UINT StartRegister, int*
>pConstantData,UINT Vector4iCount) ;
>     HRESULT GetPixelShaderConstantI ( UINT StartRegister,int*
>pConstantData,UINT Vector4iCount) ;
>     HRESULT SetPixelShaderConstantB ( UINT StartRegister, BOOL*
>pConstantData,UINT  BoolCount) ;
>     HRESULT GetPixelShaderConstantB ( UINT StartRegister,BOOL*
>pConstantData,UINT BoolCount) ;
>     HRESULT DrawRectPatch ( UINT Handle, float* pNumSegs,
>D3DRECTPATCH_INFO* pRectPatchInfo) ;
>     HRESULT DrawTriPatch ( UINT Handle, float* pNumSegs, D3DTRIPATCH_INFO*
>pTriPatchInfo) ;
>     HRESULT DeletePatch ( UINT Handle) ;
>     HRESULT CreateQuery ( D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) ;
> }
>
> alias IDirect3DDevice9* LPDIRECT3DDEVICE9, PDIRECT3DDEVICE9;
>
>
>
> interface IDirect3DStateBlock9 : IUnknown
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DStateBlock9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT Capture () ;
>     HRESULT Apply () ;
> }
>
> alias IDirect3DStateBlock9* LPDIRECT3DSTATEBLOCK9, PDIRECT3DSTATEBLOCK9;
>
>
>
>
> interface IDirect3DSwapChain9 : IUnknown
> {
>     /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DSwapChain9 methods ***/
>     HRESULT Present (  RECT* pSourceRect, RECT* pDestRect,HWND
>hDestWindowOverride, RGNDATA* pDirtyRegion,DWORD dwFlags) ;
>     HRESULT GetFrontBufferData ( IDirect3DSurface9* pDestSurface) ;
>     HRESULT GetBackBuffer ( UINT iBackBuffer,D3DBACKBUFFER_TYPE
>Type,IDirect3DSurface9** ppBackBuffer) ;
>     HRESULT GetRasterStatus ( D3DRASTER_STATUS* pRasterStatus) ;
>     HRESULT GetDisplayMode ( D3DDISPLAYMODE* pMode) ;
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT GetPresentParameters ( D3DPRESENT_PARAMETERS*
>pPresentationParameters) ;
> }
>
> alias IDirect3DSwapChain9* LPDIRECT3DSWAPCHAIN9, PDIRECT3DSWAPCHAIN9;
>
>
>
> interface IDirect3DResource9 : IUnknown
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DResource9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
>;
>     HRESULT FreePrivateData ( REFIID refguid) ;
>     DWORD  SetPriority ( DWORD PriorityNew) ;
>     DWORD  GetPriority () ;
>     void  PreLoad () ;
>     D3DRESOURCETYPE  GetType () ;
> }
>
> alias IDirect3DResource9* LPDIRECT3DRESOURCE9, PDIRECT3DRESOURCE9;
>
>
>
>
> interface IDirect3DVertexDeclaration9 : IUnknown
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DVertexDeclaration9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT GetDeclaration ( D3DVERTEXELEMENT9*,UINT* pNumElements) ;
> }
>
> alias IDirect3DVertexDeclaration9* LPDIRECT3DVERTEXDECLARATION9,
>PDIRECT3DVERTEXDECLARATION9;
>
>
>
>
> interface IDirect3DVertexShader9 : IUnknown
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DVertexShader9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT GetFunction ( void*,UINT* pSizeOfData) ;
> }
>
> alias IDirect3DVertexShader9* LPDIRECT3DVERTEXSHADER9,
>PDIRECT3DVERTEXSHADER9;
>
>
>
>
> interface IDirect3DPixelShader9 : IUnknown
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DPixelShader9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT GetFunction ( void*,UINT* pSizeOfData) ;
> }
>
> alias IDirect3DPixelShader9* LPDIRECT3DPIXELSHADER9, PDIRECT3DPIXELSHADER9;
>
>
>
>
> interface IDirect3DBaseTexture9 : IDirect3DResource9
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DResource9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
>;
>     HRESULT FreePrivateData ( REFIID refguid) ;
>     DWORD  SetPriority ( DWORD PriorityNew) ;
>     DWORD  GetPriority () ;
>     void  PreLoad () ;
>     D3DRESOURCETYPE  GetType () ;
>     DWORD  SetLOD ( DWORD LODNew) ;
>     DWORD  GetLOD () ;
>     DWORD  GetLevelCount () ;
>     HRESULT SetAutoGenFilterType ( D3DTEXTUREFILTERTYPE FilterType) ;
>     D3DTEXTUREFILTERTYPE  GetAutoGenFilterType () ;
>     void  GenerateMipSubLevels () ;
> }
>
> alias IDirect3DBaseTexture9* LPDIRECT3DBASETEXTURE9, PDIRECT3DBASETEXTURE9;
>
>
>
>
> interface IDirect3DTexture9 : IDirect3DBaseTexture9
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DBaseTexture9 methods ***/
>     HRESULT  GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT  SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT  GetPrivateData ( REFIID refguid,void* pData,DWORD*
>pSizeOfData) ;
>     HRESULT  FreePrivateData ( REFIID refguid) ;
>     DWORD  SetPriority ( DWORD PriorityNew) ;
>     DWORD  GetPriority () ;
>     void  PreLoad () ;
>     D3DRESOURCETYPE  GetType () ;
>     DWORD  SetLOD ( DWORD LODNew) ;
>     DWORD  GetLOD () ;
>     DWORD  GetLevelCount () ;
>     HRESULT SetAutoGenFilterType ( D3DTEXTUREFILTERTYPE FilterType) ;
>     D3DTEXTUREFILTERTYPE  GetAutoGenFilterType () ;
>     void  GenerateMipSubLevels () ;
>     HRESULT  GetLevelDesc ( UINT Level,D3DSURFACE_DESC *pDesc) ;
>     HRESULT  GetSurfaceLevel ( UINT Level,IDirect3DSurface9**
>ppSurfaceLevel) ;
>     HRESULT  LockRect ( UINT Level,D3DLOCKED_RECT* pLockedRect, RECT*
>pRect,DWORD Flags) ;
>     HRESULT  UnlockRect ( UINT Level) ;
>     HRESULT  AddDirtyRect (  RECT* pDirtyRect) ;
> }
>
> alias IDirect3DTexture9* LPDIRECT3DTEXTURE9, PDIRECT3DTEXTURE9;
>
>
>
>
>
> interface IDirect3DVolumeTexture9 : IDirect3DBaseTexture9
> {
>      /* ** IUnknown methods ***/
>     HRESULT  QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DBaseTexture9 methods ***/
>     HRESULT  GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT  SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT  GetPrivateData ( REFIID refguid,void* pData,DWORD*
>pSizeOfData) ;
>     HRESULT  FreePrivateData ( REFIID refguid) ;
>     DWORD  SetPriority ( DWORD PriorityNew) ;
>     DWORD  GetPriority () ;
>     void  PreLoad () ;
>     D3DRESOURCETYPE  GetType () ;
>     DWORD  SetLOD ( DWORD LODNew) ;
>     DWORD  GetLOD () ;
>     DWORD  GetLevelCount () ;
>     HRESULT  SetAutoGenFilterType ( D3DTEXTUREFILTERTYPE FilterType) ;
>     D3DTEXTUREFILTERTYPE  GetAutoGenFilterType () ;
>     void  GenerateMipSubLevels () ;
>     HRESULT  GetLevelDesc ( UINT Level,D3DVOLUME_DESC *pDesc) ;
>     HRESULT  GetVolumeLevel ( UINT Level,IDirect3DVolume9** ppVolumeLevel)
>;
>     HRESULT  LockBox ( UINT Level,D3DLOCKED_BOX* pLockedVolume, D3DBOX*
>pBox,DWORD Flags) ;
>     HRESULT  UnlockBox ( UINT Level) ;
>     HRESULT  AddDirtyBox (  D3DBOX* pDirtyBox) ;
> }
>
> alias IDirect3DVolumeTexture9* LPDIRECT3DVOLUMETEXTURE9,
>PDIRECT3DVOLUMETEXTURE9;
>
>
>
>
>
> interface IDirect3DCubeTexture9 : IDirect3DBaseTexture9
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DBaseTexture9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
>;
>     HRESULT FreePrivateData ( REFIID refguid) ;
>     DWORD  SetPriority ( DWORD PriorityNew) ;
>     DWORD  GetPriority () ;
>     void  PreLoad () ;
>     D3DRESOURCETYPE  GetType () ;
>     DWORD  SetLOD ( DWORD LODNew) ;
>     DWORD  GetLOD () ;
>     DWORD  GetLevelCount () ;
>     HRESULT SetAutoGenFilterType ( D3DTEXTUREFILTERTYPE FilterType) ;
>     D3DTEXTUREFILTERTYPE  GetAutoGenFilterType () ;
>     void  GenerateMipSubLevels () ;
>     HRESULT GetLevelDesc ( UINT Level,D3DSURFACE_DESC *pDesc) ;
>     HRESULT GetCubeMapSurface ( D3DCUBEMAP_FACES FaceType,UINT
>Level,IDirect3DSurface9** ppCubeMapSurface) ;
>     HRESULT LockRect ( D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT*
>pLockedRect, RECT* pRect,DWORD Flags) ;
>     HRESULT UnlockRect ( D3DCUBEMAP_FACES FaceType,UINT Level) ;
>     HRESULT AddDirtyRect ( D3DCUBEMAP_FACES FaceType, RECT* pDirtyRect) ;
> }
>
> alias IDirect3DCubeTexture9* LPDIRECT3DCUBETEXTURE9, PDIRECT3DCUBETEXTURE9;
>
>
>
>
> interface IDirect3DVertexBuffer9  : IDirect3DResource9
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DResource9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
>;
>     HRESULT FreePrivateData ( REFIID refguid) ;
>     DWORD  SetPriority ( DWORD PriorityNew) ;
>     DWORD  GetPriority () ;
>     void  PreLoad () ;
>     D3DRESOURCETYPE  GetType () ;
>     HRESULT Lock ( UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD
>Flags) ;
>     HRESULT Unlock () ;
>     HRESULT GetDesc ( D3DVERTEXBUFFER_DESC *pDesc) ;
> }
>
> alias IDirect3DVertexBuffer9* LPDIRECT3DVERTEXBUFFER9,
>PDIRECT3DVERTEXBUFFER9;
>
>
>
>
> interface IDirect3DIndexBuffer9 : IDirect3DResource9
> {
>     /*** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>     /*** IDirect3DResource9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
>;
>     HRESULT FreePrivateData ( REFIID refguid) ;
>     DWORD  SetPriority ( DWORD PriorityNew) ;
>     DWORD  GetPriority () ;
>     void  PreLoad () ;
>     D3DRESOURCETYPE  GetType () ;
>     HRESULT Lock ( UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD
>Flags) ;
>     HRESULT Unlock () ;
>     HRESULT GetDesc ( D3DINDEXBUFFER_DESC *pDesc) ;
> }
>
> alias IDirect3DIndexBuffer9* LPDIRECT3DINDEXBUFFER9, PDIRECT3DINDEXBUFFER9;
>
>
>
>
> interface IDirect3DSurface9 : IDirect3DResource9
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DResource9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
>;
>     HRESULT FreePrivateData ( REFIID refguid) ;
>     DWORD  SetPriority ( DWORD PriorityNew) ;
>     DWORD  GetPriority () ;
>     void  PreLoad () ;
>     D3DRESOURCETYPE  GetType () ;
>     HRESULT GetContainer ( REFIID riid,void** ppContainer) ;
>     HRESULT GetDesc ( D3DSURFACE_DESC *pDesc) ;
>     HRESULT LockRect ( D3DLOCKED_RECT* pLockedRect, RECT* pRect,DWORD
>Flags) ;
>     HRESULT UnlockRect () ;
>     HRESULT GetDC ( HDC *phdc) ;
>     HRESULT ReleaseDC ( HDC hdc) ;
> }
>
> alias IDirect3DSurface9* LPDIRECT3DSURFACE9, PDIRECT3DSURFACE9;
>
>
>
>
> interface IDirect3DVolume9 : IUnknown
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DVolume9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     HRESULT SetPrivateData ( REFIID refguid, void* pData,DWORD
>SizeOfData,DWORD Flags) ;
>     HRESULT GetPrivateData ( REFIID refguid,void* pData,DWORD* pSizeOfData)
>;
>     HRESULT FreePrivateData ( REFIID refguid) ;
>     HRESULT GetContainer ( REFIID riid,void** ppContainer) ;
>     HRESULT GetDesc ( D3DVOLUME_DESC *pDesc) ;
>     HRESULT LockBox ( D3DLOCKED_BOX * pLockedVolume, D3DBOX* pBox,DWORD
>Flags) ;
>     HRESULT UnlockBox () ;
> }
>
> alias IDirect3DVolume9* LPDIRECT3DVOLUME9, PDIRECT3DVOLUME9;
>
>
>
>
>
> interface IDirect3DQuery9 : IUnknown
> {
>      /* ** IUnknown methods ***/
>     HRESULT QueryInterface ( REFIID riid, void** ppvObj) ;
>     ULONG AddRef () ;
>     ULONG Release () ;
>
>      /* ** IDirect3DQuery9 methods ***/
>     HRESULT GetDevice ( IDirect3DDevice9** ppDevice) ;
>     D3DQUERYTYPE  GetType () ;
>     DWORD  GetDataSize () ;
>     HRESULT Issue ( DWORD dwIssueFlags) ;
>     HRESULT GetData ( void* pData,DWORD dwSize,DWORD dwGetDataFlags) ;
> }
>
> alias IDirect3DQuery9* LPDIRECT3DQUERY9, PDIRECT3DQUERY9;
>
>
>
>
>
>/*************************************************************************** *
>  * Flags for SetPrivateData method on all D3D9 interfaces
>  *
>  * The passed pointer is an IUnknown ptr. The SizeOfData argument to
>SetPrivateData
>  * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this
>  * pointer and Release when the private data is destroyed. The data will be
>  * destroyed when another SetPrivateData with the same GUID is set, when
>  * FreePrivateData is called, or when the D3D9 object is freed.
>
>**************************************************************************** /
> const int D3DSPD_IUNKNOWN                  =    0x00000001L;
>
>
>/*************************************************************************** *
>  *
>  *  Flags for IDirect3D9::CreateDevice's BehaviorFlags
>  *
>
>**************************************************************************** /
>
> const int D3DCREATE_FPU_PRESERVE               =   0x00000002L; const int D3DCREATE_MULTITHREADED              =   0x00000004L;
>
> const int D3DCREATE_PUREDEVICE                 =   0x00000010L; const int D3DCREATE_SOFTWARE_VERTEXPROCESSING  =   0x00000020L; const int D3DCREATE_HARDWARE_VERTEXPROCESSING  =   0x00000040L; const int D3DCREATE_MIXED_VERTEXPROCESSING     =   0x00000080L;
>
> const int D3DCREATE_DISABLE_DRIVER_MANAGEMENT  =   0x00000100L; const int D3DCREATE_ADAPTERGROUP_DEVICE        =   0x00000200L;
>
>
>
>/*************************************************************************** *
>  *
>  *  Parameter for IDirect3D9::CreateDevice's iAdapter
>  *
>
>**************************************************************************** /
>
> const int D3DADAPTER_DEFAULT                   =  0;
>
>
>/*************************************************************************** *
>  *
>  *  Flags for IDirect3D9::EnumAdapters
>  *
>
>**************************************************************************** /
>
> const int D3DENUM_WHQL_LEVEL                   =   0x00000002L;
>
>
>/*************************************************************************** *
>  *
>  *  Maximum number of back-buffers supported in DX8
>  *
>
>**************************************************************************** /
>
> const int D3DPRESENT_BACK_BUFFERS_MAX          =   3L;
>
>
>/*************************************************************************** *
>  *
>  *  Flags for IDirect3DDevice9::SetGammaRamp
>  *
>
>**************************************************************************** /
>
> const int D3DSGR_NO_CALIBRATION                =  0x00000000L; const int D3DSGR_CALIBRATE                     =  0x00000001L;
>
>
>/*************************************************************************** *
>  *
>  *  Flags for IDirect3DDevice9::SetCursorPosition
>  *
>
>**************************************************************************** /
>
> const int D3DCURSOR_IMMEDIATE_UPDATE           =  0x00000001L;
>
>
>/*************************************************************************** *
>  *
>  *  Flags for IDirect3DSwapChain9::Present
>  *
>
>**************************************************************************** /
>
> const int D3DPRESENT_DONOTWAIT                 =  0x00000001L; const int D3DPRESENT_LINEAR_CONTENT            =  0x00000002L;
>
>
>/*************************************************************************** *
>  *
>  *  Flags for DrawPrimitive/DrawIndexedPrimitive
>  *   Also valid for Begin/BeginIndexed
>  *   Also valid for VertexBuffer::CreateVertexBuffer
>
>**************************************************************************** /
>
>
> /*
>  *  DirectDraw error codes
>  */
> const int _FACD3D   = 0x876;
> /*
> #define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )
> #define MAKE_D3DSTATUS( code )  MAKE_HRESULT( 0, _FACD3D, code )
>
> /*
>  * Direct3D Errors
>  */
> /*
> #define D3D_OK                              S_OK
>
> #define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)
> #define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)
> #define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)
> #define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)
> #define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)
> #define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)
> #define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)
> #define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)
> #define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)
> #define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)
> #define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)
> #define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)
>
> #define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)
> #define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)
> #define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)
> #define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)
> #define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)
> #define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)
> #define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)
> #define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)
> #define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)
> #define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)
> #define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)
>
> */
>
>
> }  //  extern (C)
>
>//} // version DIRECTX9 //////////////////////////////////////////////////////////////////////////// //////
>
>
>////
>d3d9caps.d
>/////////////////////////////////////////////////
>
>// Author : Ahmed El-Metwaly
>// contact : aelmetwaly@gawa.com
>// Lic     : GPL
>
>/*========================================================================== ;
> *
> *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
> *
> *  File:       d3d9caps.h
> *  Content:    Direct3D capabilities include file
> *
>
>***************************************************************************/
>
>import std.c.stdio;
>import std.c.stdlib;
>import std.string;
>import std.c.windows.windows;
>import std.c.windows.com;
>import d3d9types;
>
>const int DIRECT3D_VERSION     =    0x0900;
>
>
>// include this file content only if compiling for DX9 interfaces
>//version(DIRECT3D_VERSION )
>//{
> align (4){
>
>
> struct _D3DVSHADERCAPS2_0
> {
>         DWORD Caps;
>         INT DynamicFlowControlDepth;
>         INT NumTemps;
>         INT StaticFlowControlDepth;
> }
>
> alias _D3DVSHADERCAPS2_0 D3DVSHADERCAPS2_0;
>
> const int D3DVS20CAPS_PREDICATION     =        (1<<0);
>
> const int D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH = 24;
> const int D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH = 0;
> const int D3DVS20_MAX_NUMTEMPS  =  32;
> const int D3DVS20_MIN_NUMTEMPS  =  12;
> const int D3DVS20_MAX_STATICFLOWCONTROLDEPTH  =  4;
> const int D3DVS20_MIN_STATICFLOWCONTROLDEPTH  =  1;
>
> struct _D3DPSHADERCAPS2_0
> {
>     DWORD Caps;
>     INT DynamicFlowControlDepth;
>     INT NumTemps;
>     INT StaticFlowControlDepth;
>     INT NumInstructionSlots;
> }
>
> alias _D3DPSHADERCAPS2_0 D3DPSHADERCAPS2_0;
>
> const int D3DPS20CAPS_ARBITRARYSWIZZLE       = (1<<0);
> const int D3DPS20CAPS_GRADIENTINSTRUCTIONS   = (1<<1);
> const int D3DPS20CAPS_PREDICATION            = (1<<2);
> const int D3DPS20CAPS_NODEPENDENTREADLIMIT   = (1<<3);
> const int D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT  = (1<<4);
>
> const int D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH   = 24;
> const int D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH   = 0;
> const int D3DPS20_MAX_NUMTEMPS   = 32;
> const int D3DPS20_MIN_NUMTEMPS   = 12;
> const int D3DPS20_MAX_STATICFLOWCONTROLDEPTH  =  4;
> const int D3DPS20_MIN_STATICFLOWCONTROLDEPTH  =  0;
> const int D3DPS20_MAX_NUMINSTRUCTIONSLOTS   = 512;
> const int D3DPS20_MIN_NUMINSTRUCTIONSLOTS   = 96;
>
> const int D3DMIN30SHADERINSTRUCTIONS = 512;
> const int D3DMAX30SHADERINSTRUCTIONS = 32768;
>
> struct _D3DCAPS9
> {
>     /* Device Info */
>     D3DDEVTYPE  DeviceType;
>     UINT        AdapterOrdinal;
>
>     /* Caps from DX7 Draw */
>     DWORD   Caps;
>     DWORD   Caps2;
>     DWORD   Caps3;
>     DWORD   PresentationIntervals;
>
>     /* Cursor Caps */
>     DWORD   CursorCaps;
>
>     /* 3D Device Caps */
>     DWORD   DevCaps;
>
>     DWORD   PrimitiveMiscCaps;
>     DWORD   RasterCaps;
>     DWORD   ZCmpCaps;
>     DWORD   SrcBlendCaps;
>     DWORD   DestBlendCaps;
>     DWORD   AlphaCmpCaps;
>     DWORD   ShadeCaps;
>     DWORD   TextureCaps;
>     DWORD   TextureFilterCaps;          // D3DPTFILTERCAPS for
>IDirect3DTexture9's
>     DWORD   CubeTextureFilterCaps;      // D3DPTFILTERCAPS for
>IDirect3DCubeTexture9's
>     DWORD   VolumeTextureFilterCaps;    // D3DPTFILTERCAPS for
>IDirect3DVolumeTexture9's
>     DWORD   TextureAddressCaps;         // D3DPTADDRESSCAPS for
>IDirect3DTexture9's
>     DWORD   VolumeTextureAddressCaps;   // D3DPTADDRESSCAPS for
>IDirect3DVolumeTexture9's
>
>     DWORD   LineCaps;                   // D3DLINECAPS
>
>     DWORD   MaxTextureWidth, MaxTextureHeight;
>     DWORD   MaxVolumeExtent;
>
>     DWORD   MaxTextureRepeat;
>     DWORD   MaxTextureAspectRatio;
>     DWORD   MaxAnisotropy;
>     float   MaxVertexW;
>
>     float   GuardBandLeft;
>     float   GuardBandTop;
>     float   GuardBandRight;
>     float   GuardBandBottom;
>
>     float   ExtentsAdjust;
>     DWORD   StencilCaps;
>
>     DWORD   FVFCaps;
>     DWORD   TextureOpCaps;
>     DWORD   MaxTextureBlendStages;
>     DWORD   MaxSimultaneousTextures;
>
>     DWORD   VertexProcessingCaps;
>     DWORD   MaxActiveLights;
>     DWORD   MaxUserClipPlanes;
>     DWORD   MaxVertexBlendMatrices;
>     DWORD   MaxVertexBlendMatrixIndex;
>
>     float   MaxPointSize;
>
>     DWORD   MaxPrimitiveCount;          // max number of primitives per
>DrawPrimitive call
>     DWORD   MaxVertexIndex;
>     DWORD   MaxStreams;
>     DWORD   MaxStreamStride;            // max stride for SetStreamSource
>
>     DWORD   VertexShaderVersion;
>     DWORD   MaxVertexShaderConst;       // number of vertex shader constant
>registers
>
>     DWORD   PixelShaderVersion;
>     float   PixelShader1xMaxValue;      // max value storable in registers
>of ps.1.x shaders
>
>     // Here are the DX9 specific ones
>     DWORD   DevCaps2;
>
>     float   MaxNpatchTessellationLevel;
>     DWORD   Reserved5;
>
>     UINT    MasterAdapterOrdinal;       // ordinal of master adaptor for
>adapter group
>     UINT    AdapterOrdinalInGroup;      // ordinal inside the adapter group
>     UINT    NumberOfAdaptersInGroup;    // number of adapters in this
>adapter group (only if master)
>     DWORD   DeclTypes;                  // Data types, supported in vertex
>declarations
>     DWORD   NumSimultaneousRTs;         // Will be at least 1
>     DWORD   StretchRectFilterCaps;      // Filter caps supported by
>StretchRect
>     D3DVSHADERCAPS2_0 VS20Caps;
>     D3DPSHADERCAPS2_0 PS20Caps;
>     DWORD   VertexTextureFilterCaps;    // D3DPTFILTERCAPS for
>IDirect3DTexture9's for texture, used in vertex shaders
>     DWORD   MaxVShaderInstructionsExecuted; // maximum number of vertex
>shader instructions that can be executed
>     DWORD   MaxPShaderInstructionsExecuted; // maximum number of pixel
>shader instructions that can be executed
>     DWORD   MaxVertexShader30InstructionSlots;
>     DWORD   MaxPixelShader30InstructionSlots;
> }
>
> alias _D3DCAPS9 D3DCAPS9;
>
> //
> // BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS
> //
>
> //
> // Caps
> //
> const int D3DCAPS_READ_SCANLINE        =   0x00020000L;
>
> //
> // Caps2
> //
> const int D3DCAPS2_FULLSCREENGAMMA     =   0x00020000L;
> const int D3DCAPS2_CANCALIBRATEGAMMA   =   0x00100000L;
> const int D3DCAPS2_RESERVED            =   0x02000000L;
> const int D3DCAPS2_CANMANAGERESOURCE   =   0x10000000L;
> const int D3DCAPS2_DYNAMICTEXTURES     =   0x20000000L;
> const int D3DCAPS2_CANAUTOGENMIPMAP    =   0x40000000L;
>
> //
> // Caps3
> //
> const long D3DCAPS3_RESERVED            =   0x8000001fL;
>
> // Indicates that the device can respect the ALPHABLENDENABLE render state
> // when fullscreen while using the FLIP or DISCARD swap effect.
> // COPY and COPYVSYNC swap effects work whether or not this flag is set.
> const int D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD  = 0x00000020L;
>
> // Indicates that the device can perform a gamma correction from
> // a windowed back buffer containing linear content to the sRGB desktop.
> const int D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION = 0x00000080L;
>
> const int D3DCAPS3_COPY_TO_VIDMEM       =  0x00000100L; /* Device can
>acclerate copies from sysmem to local vidmem */
> const int D3DCAPS3_COPY_TO_SYSTEMMEM    =  0x00000200L; /* Device can
>acclerate copies from local vidmem to sysmem */
>
>
> //
> // PresentationIntervals
> //
> const int D3DPRESENT_INTERVAL_DEFAULT   =  0x00000000L;
> const int D3DPRESENT_INTERVAL_ONE       =  0x00000001L;
> const int D3DPRESENT_INTERVAL_TWO       =  0x00000002L;
> const int D3DPRESENT_INTERVAL_THREE     =  0x00000004L;
> const int D3DPRESENT_INTERVAL_FOUR      =  0x00000008L;
> const long D3DPRESENT_INTERVAL_IMMEDIATE =  0x80000000L;
>
> //
> // CursorCaps
> //
> // Driver supports HW color cursor in at least hi-res modes(height >=400)
> const int D3DCURSORCAPS_COLOR          =   0x00000001L;
> // Driver supports HW cursor also in low-res modes(height < 400)
> const int D3DCURSORCAPS_LOWRES         =   0x00000002L;
>
> //
> // DevCaps
> //
> const int D3DDEVCAPS_EXECUTESYSTEMMEMORY = 0x00000010L; /* Device can use
>execute buffers from system memory */
> const int D3DDEVCAPS_EXECUTEVIDEOMEMORY  = 0x00000020L; /* Device can use
>execute buffers from video memory */
> const int D3DDEVCAPS_TLVERTEXSYSTEMMEMORY = 0x00000040L; /* Device can use
>TL buffers from system memory */
> const int D3DDEVCAPS_TLVERTEXVIDEOMEMORY = 0x00000080L; /* Device can use
>TL buffers from video memory */
> const int D3DDEVCAPS_TEXTURESYSTEMMEMORY = 0x00000100L; /* Device can
>texture from system memory */
> const int D3DDEVCAPS_TEXTUREVIDEOMEMORY  = 0x00000200L; /* Device can
>texture from device memory */
> const int D3DDEVCAPS_DRAWPRIMTLVERTEX    = 0x00000400L; /* Device can draw
>TLVERTEX primitives */
> const int D3DDEVCAPS_CANRENDERAFTERFLIP  = 0x00000800L; /* Device can
>render without waiting for flip to complete */
> const int D3DDEVCAPS_TEXTURENONLOCALVIDMEM = 0x00001000L; /* Device can
>texture from nonlocal video memory */
> const int D3DDEVCAPS_DRAWPRIMITIVES2    =  0x00002000L; /* Device can
>support DrawPrimitives2 */
> const int D3DDEVCAPS_SEPARATETEXTUREMEMORIES = 0x00004000L; /* Device is
>texturing from separate memory pools */
> const int D3DDEVCAPS_DRAWPRIMITIVES2EX  =  0x00008000L; /* Device can
>support Extended DrawPrimitives2 i.e. DX7 compliant driver*/
> const int D3DDEVCAPS_HWTRANSFORMANDLIGHT = 0x00010000L; /* Device can
>support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */
> const int D3DDEVCAPS_CANBLTSYSTONONLOCAL = 0x00020000L; /* Device supports
>a Tex Blt from system memory to non-local vidmem */
> const int D3DDEVCAPS_HWRASTERIZATION     = 0x00080000L; /* Device has HW
>acceleration for rasterization */
> const int D3DDEVCAPS_PUREDEVICE          = 0x00100000L; /* Device supports
>D3DCREATE_PUREDEVICE */
> const int D3DDEVCAPS_QUINTICRTPATCHES    = 0x00200000L; /* Device supports
>quintic Beziers and BSplines */
> const int D3DDEVCAPS_RTPATCHES           = 0x00400000L; /* Device supports
>Rect and Tri patches */
> const int D3DDEVCAPS_RTPATCHHANDLEZERO   = 0x00800000L; /* Indicates that
>RT Patches may be drawn efficiently using handle 0 */
> const int D3DDEVCAPS_NPATCHES            = 0x01000000L; /* Device supports
>N-Patches */
>
> //
> // PrimitiveMiscCaps
> //
> const int D3DPMISCCAPS_MASKZ           =   0x00000002L;
> const int D3DPMISCCAPS_CULLNONE        =   0x00000010L;
> const int D3DPMISCCAPS_CULLCW          =   0x00000020L;
> const int D3DPMISCCAPS_CULLCCW         =   0x00000040L;
> const int D3DPMISCCAPS_COLORWRITEENABLE =  0x00000080L;
> const int D3DPMISCCAPS_CLIPPLANESCALEDPOINTS = 0x00000100L; /* Device
>correctly clips scaled points to clip planes */
> const int D3DPMISCCAPS_CLIPTLVERTS     =   0x00000200L; /* device will clip
>post-transformed vertex primitives */
> const int D3DPMISCCAPS_TSSARGTEMP      =   0x00000400L; /* device supports
>D3DTA_TEMP for temporary register */
> const int D3DPMISCCAPS_BLENDOP         =   0x00000800L; /* device supports
>D3DRS_BLENDOP */
> const int D3DPMISCCAPS_NULLREFERENCE   =   0x00001000L; /* Reference Device
>that doesnt render */
> const int D3DPMISCCAPS_INDEPENDENTWRITEMASKS =    0x00004000L; /* Device
>supports independent write masks for MET or MRT */
> const int D3DPMISCCAPS_PERSTAGECONSTANT =  0x00008000L; /* Device supports
>per-stage constants */
> const int D3DPMISCCAPS_FOGANDSPECULARALPHA =  0x00010000L; /* Device
>supports separate fog and specular alpha (many devices
>                                                           use the specular
>alpha channel to store fog factor) */
> const int D3DPMISCCAPS_SEPARATEALPHABLEND    =     0x00020000L; /* Device
>supports separate blend settings for the alpha channel */
> const int D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS  =  0x00040000L; /* Device
>supports different bit depths for MRT */
> const int D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING = 0x00080000L; /* Device
>supports post-pixel shader operations for MRT */
> const int D3DPMISCCAPS_FOGVERTEXCLAMPED        =   0x00100000L; /* Device
>clamps fog blend factor per vertex */
>
> //
> // LineCaps
> //
> const int D3DLINECAPS_TEXTURE        =     0x00000001L;
> const int D3DLINECAPS_ZTEST          =     0x00000002L;
> const int D3DLINECAPS_BLEND          =     0x00000004L;
> const int D3DLINECAPS_ALPHACMP       =     0x00000008L;
> const int D3DLINECAPS_FOG            =     0x00000010L;
> const int D3DLINECAPS_ANTIALIAS      =     0x00000020L;
>
> //
> // RasterCaps
> //
> const int D3DPRASTERCAPS_DITHER          =       0x00000001L;
> const int D3DPRASTERCAPS_ZTEST           =       0x00000010L;
> const int D3DPRASTERCAPS_FOGVERTEX       =       0x00000080L;
> const int D3DPRASTERCAPS_FOGTABLE        =       0x00000100L;
> const int D3DPRASTERCAPS_MIPMAPLODBIAS   =       0x00002000L;
> const int D3DPRASTERCAPS_ZBUFFERLESSHSR  =       0x00008000L;
> const int D3DPRASTERCAPS_FOGRANGE        =       0x00010000L;
> const int D3DPRASTERCAPS_ANISOTROPY      =       0x00020000L;
> const int D3DPRASTERCAPS_WBUFFER         =       0x00040000L;
> const int D3DPRASTERCAPS_WFOG            =       0x00100000L;
> const int D3DPRASTERCAPS_ZFOG            =       0x00200000L;
> const int D3DPRASTERCAPS_COLORPERSPECTIVE    =   0x00400000L; /* Device
>iterates colors perspective correct */
> const int D3DPRASTERCAPS_SCISSORTEST         =   0x01000000L; const int D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS =   0x02000000L; const int D3DPRASTERCAPS_DEPTHBIAS           =   0x04000000L; const int D3DPRASTERCAPS_MULTISAMPLE_TOGGLE  =   0x08000000L;
>
> //
> // ZCmpCaps, AlphaCmpCaps
> //
> const int D3DPCMPCAPS_NEVER         =      0x00000001L;
> const int D3DPCMPCAPS_LESS          =      0x00000002L;
> const int D3DPCMPCAPS_EQUAL         =      0x00000004L;
> const int D3DPCMPCAPS_LESSEQUAL     =      0x00000008L;
> const int D3DPCMPCAPS_GREATER       =      0x00000010L;
> const int D3DPCMPCAPS_NOTEQUAL      =      0x00000020L;
> const int D3DPCMPCAPS_GREATEREQUAL  =      0x00000040L;
> const int D3DPCMPCAPS_ALWAYS        =      0x00000080L;
>
> //
> // SourceBlendCaps, DestBlendCaps
> //
> const int D3DPBLENDCAPS_ZERO           =   0x00000001L;
> const int D3DPBLENDCAPS_ONE            =   0x00000002L;
> const int D3DPBLENDCAPS_SRCCOLOR       =   0x00000004L;
> const int D3DPBLENDCAPS_INVSRCCOLOR    =   0x00000008L;
> const int D3DPBLENDCAPS_SRCALPHA       =   0x00000010L;
> const int D3DPBLENDCAPS_INVSRCALPHA    =   0x00000020L;
> const int D3DPBLENDCAPS_DESTALPHA      =   0x00000040L;
> const int D3DPBLENDCAPS_INVDESTALPHA   =   0x00000080L;
> const int D3DPBLENDCAPS_DESTCOLOR      =   0x00000100L;
> const int D3DPBLENDCAPS_INVDESTCOLOR   =   0x00000200L;
> const int D3DPBLENDCAPS_SRCALPHASAT    =   0x00000400L;
> const int D3DPBLENDCAPS_BOTHSRCALPHA   =   0x00000800L;
> const int D3DPBLENDCAPS_BOTHINVSRCALPHA =  0x00001000L;
> const int D3DPBLENDCAPS_BLENDFACTOR     =  0x00002000L; /* Supports both
>D3DBLEND_BLENDFACTOR and D3DBLEND_INVBLENDFACTOR */
>
> //
> // ShadeCaps
> //
> const int D3DPSHADECAPS_COLORGOURAUDRGB     =  0x00000008L;
> const int D3DPSHADECAPS_SPECULARGOURAUDRGB  =  0x00000200L;
> const int D3DPSHADECAPS_ALPHAGOURAUDBLEND   =  0x00004000L;
> const int D3DPSHADECAPS_FOGGOURAUD          =  0x00080000L;
>
> //
> // TextureCaps
> //
> const int D3DPTEXTURECAPS_PERSPECTIVE       =  0x00000001L; /*
>Perspective-correct texturing is supported */
> const int D3DPTEXTURECAPS_POW2              =  0x00000002L; /* Power-of-2
>texture dimensions are required - applies to non-Cube/Volume textures only. */
> const int D3DPTEXTURECAPS_ALPHA             =  0x00000004L; /* Alpha in
>texture pixels is supported */
> const int D3DPTEXTURECAPS_SQUAREONLY        =  0x00000020L; /* Only square
>textures are supported */
> const int D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE = 0x00000040L; /*
>Texture indices are not scaled by the texture size prior to interpolation */
> const int D3DPTEXTURECAPS_ALPHAPALETTE      =  0x00000080L; /* Device can
>draw alpha from texture palettes */
> // Device can use non-POW2 textures if:
> //  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
> //  2) D3DRS_WRAP(N) is zero for this texture's coordinates
> //  3) mip mapping is not enabled (use magnification filter only)
> const int D3DPTEXTURECAPS_NONPOW2CONDITIONAL = 0x00000100L;
> const int D3DPTEXTURECAPS_PROJECTED          = 0x00000400L; /* Device can
>do D3DTTFF_PROJECTED */
> const int D3DPTEXTURECAPS_CUBEMAP            = 0x00000800L; /* Device can
>do cubemap textures */
> const int D3DPTEXTURECAPS_VOLUMEMAP         =  0x00002000L; /* Device can
>do volume textures */
> const int D3DPTEXTURECAPS_MIPMAP             = 0x00004000L; /* Device can
>do mipmapped textures */
> const int D3DPTEXTURECAPS_MIPVOLUMEMAP       = 0x00008000L; /* Device can
>do mipmapped volume textures */
> const int D3DPTEXTURECAPS_MIPCUBEMAP         = 0x00010000L; /* Device can
>do mipmapped cube maps */
> const int D3DPTEXTURECAPS_CUBEMAP_POW2       = 0x00020000L; /* Device
>requires that cubemaps be power-of-2 dimension */
> const int D3DPTEXTURECAPS_VOLUMEMAP_POW2     = 0x00040000L; /* Device
>requires that volume maps be power-of-2 dimension */
> const int D3DPTEXTURECAPS_NOPROJECTEDBUMPENV = 0x00200000L; /* Device does
>not support projected bump env lookup operation
>                                                           in programmable
>and fixed function pixel shaders */
>
> //
> // TextureFilterCaps, StretchRectFilterCaps
> //
> const int D3DPTFILTERCAPS_MINFPOINT         =  0x00000100L; /* Min Filter
>*/
> const int D3DPTFILTERCAPS_MINFLINEAR        =  0x00000200L;
> const int D3DPTFILTERCAPS_MINFANISOTROPIC   =  0x00000400L;
> const int D3DPTFILTERCAPS_MINFPYRAMIDALQUAD =  0x00000800L;
> const int D3DPTFILTERCAPS_MINFGAUSSIANQUAD  =  0x00001000L;
> const int D3DPTFILTERCAPS_MIPFPOINT         =  0x00010000L; /* Mip Filter
>*/
> const int D3DPTFILTERCAPS_MIPFLINEAR        =  0x00020000L;
> const int D3DPTFILTERCAPS_MAGFPOINT         =  0x01000000L; /* Mag Filter
>*/
> const int D3DPTFILTERCAPS_MAGFLINEAR        =  0x02000000L; const int D3DPTFILTERCAPS_MAGFANISOTROPIC   =  0x04000000L; const int D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD =  0x08000000L; const int D3DPTFILTERCAPS_MAGFGAUSSIANQUAD  =  0x10000000L;
>
> //
> // TextureAddressCaps
> //
> const int D3DPTADDRESSCAPS_WRAP         =  0x00000001L;
> const int D3DPTADDRESSCAPS_MIRROR       =  0x00000002L;
> const int D3DPTADDRESSCAPS_CLAMP        =  0x00000004L;
> const int D3DPTADDRESSCAPS_BORDER        = 0x00000008L;
> const int D3DPTADDRESSCAPS_INDEPENDENTUV = 0x00000010L;
> const int D3DPTADDRESSCAPS_MIRRORONCE    = 0x00000020L;
>
> //
> // StencilCaps
> //
> const int D3DSTENCILCAPS_KEEP          =   0x00000001L;
> const int D3DSTENCILCAPS_ZERO          =   0x00000002L;
> const int D3DSTENCILCAPS_REPLACE       =   0x00000004L;
> const int D3DSTENCILCAPS_INCRSAT       =   0x00000008L;
> const int D3DSTENCILCAPS_DECRSAT       =   0x00000010L;
> const int D3DSTENCILCAPS_INVERT        =   0x00000020L;
> const int D3DSTENCILCAPS_INCR          =   0x00000040L;
> const int D3DSTENCILCAPS_DECR          =   0x00000080L;
> const int D3DSTENCILCAPS_TWOSIDED      =   0x00000100L;
>
> //
> // TextureOpCaps
> //
> const int D3DTEXOPCAPS_DISABLE                  =  0x00000001L;
> const int D3DTEXOPCAPS_SELECTARG1               =  0x00000002L;
> const int D3DTEXOPCAPS_SELECTARG2               =  0x00000004L;
> const int D3DTEXOPCAPS_MODULATE                 =  0x00000008L;
> const int D3DTEXOPCAPS_MODULATE2X               =  0x00000010L;
> const int D3DTEXOPCAPS_MODULATE4X               =  0x00000020L;
> const int D3DTEXOPCAPS_ADD                      =  0x00000040L;
> const int D3DTEXOPCAPS_ADDSIGNED                =  0x00000080L;
> const int D3DTEXOPCAPS_ADDSIGNED2X              =  0x00000100L;
> const int D3DTEXOPCAPS_SUBTRACT                 =  0x00000200L;
> const int D3DTEXOPCAPS_ADDSMOOTH                =  0x00000400L;
> const int D3DTEXOPCAPS_BLENDDIFFUSEALPHA        =  0x00000800L;
> const int D3DTEXOPCAPS_BLENDTEXTUREALPHA        =  0x00001000L;
> const int D3DTEXOPCAPS_BLENDFACTORALPHA         =  0x00002000L;
> const int D3DTEXOPCAPS_BLENDTEXTUREALPHAPM      =  0x00004000L;
> const int D3DTEXOPCAPS_BLENDCURRENTALPHA        =  0x00008000L;
> const int D3DTEXOPCAPS_PREMODULATE              =  0x00010000L;
> const int D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR   =  0x00020000L;
> const int D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA   =  0x00040000L;
> const int D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR =  0x00080000L;
> const int D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA = 0x00100000L;
> const int D3DTEXOPCAPS_BUMPENVMAP               =  0x00200000L;
> const int D3DTEXOPCAPS_BUMPENVMAPLUMINANCE      =  0x00400000L;
> const int D3DTEXOPCAPS_DOTPRODUCT3              =  0x00800000L;
> const int D3DTEXOPCAPS_MULTIPLYADD              =  0x01000000L;
> const int D3DTEXOPCAPS_LERP                     =  0x02000000L;
>
> //
> // FVFCaps
> //
> const int D3DFVFCAPS_TEXCOORDCOUNTMASK   = 0x0000ffffL; /* mask for texture
>coordinate count field */
> const int D3DFVFCAPS_DONOTSTRIPELEMENTS  = 0x00080000L; /* Device prefers
>that vertex elements not be stripped */
> const int D3DFVFCAPS_PSIZE               = 0x00100000L; /* Device can
>receive point size */
>
> //
> // VertexProcessingCaps
> //
> const int D3DVTXPCAPS_TEXGEN             = 0x00000001L; /* device can do
>texgen */
> const int D3DVTXPCAPS_MATERIALSOURCE7    = 0x00000002L; /* device can do
>DX7-level colormaterialsource ops */
> const int D3DVTXPCAPS_DIRECTIONALLIGHTS  = 0x00000008L; /* device can do
>directional lights */
> const int D3DVTXPCAPS_POSITIONALLIGHTS   = 0x00000010L; /* device can do
>positional lights (includes point and spot) */
> const int D3DVTXPCAPS_LOCALVIEWER        = 0x00000020L; /* device can do
>local viewer */
> const int D3DVTXPCAPS_TWEENING           = 0x00000040L; /* device can do
>vertex tweening */
> const int D3DVTXPCAPS_TEXGEN_SPHEREMAP   = 0x00000100L; /* device supports
>D3DTSS_TCI_SPHEREMAP */
> const int D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER  = 0x00000200L; /* device
>does not support TexGen in non-local
>                                                             viewer mode */
>
> //
> // DevCaps2
> //
> const int D3DDEVCAPS2_STREAMOFFSET                      =  0x00000001L; /*
>Device supports offsets in streams. Must be set by DX9 drivers */
> const int D3DDEVCAPS2_DMAPNPATCH                        =  0x00000002L; /*
>Device supports displacement maps for N-Patches*/
> const int D3DDEVCAPS2_ADAPTIVETESSRTPATCH               =  0x00000004L; /*
>Device supports adaptive tesselation of RT-patches*/
> const int D3DDEVCAPS2_ADAPTIVETESSNPATCH                =  0x00000008L; /*
>Device supports adaptive tesselation of N-patches*/
> const int D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES     =  0x00000010L; /*
>Device supports StretchRect calls with a texture as the source*/
> const int D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH               = 0x00000020L; /*
>Device supports presampled displacement maps for N-Patches */
> const int D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET = 0x00000040L; /*
>Vertex elements in a vertex declaration can share the same stream offset */
>
> //
> // DeclTypes
> //
> const int D3DDTCAPS_UBYTE4    = 0x00000001L;
> const int D3DDTCAPS_UBYTE4N   = 0x00000002L;
> const int D3DDTCAPS_SHORT2N   = 0x00000004L;
> const int D3DDTCAPS_SHORT4N   = 0x00000008L;
> const int D3DDTCAPS_USHORT2N  = 0x00000010L;
> const int D3DDTCAPS_USHORT4N  = 0x00000020L;
> const int D3DDTCAPS_UDEC3     = 0x00000040L;
> const int D3DDTCAPS_DEC3N     = 0x00000080L;
> const int D3DDTCAPS_FLOAT16_2 = 0x00000100L;
> const int D3DDTCAPS_FLOAT16_4 = 0x00000200L;
>
>
> } //align (4)
>
>
>
>
>//} /* (DIRECT3D_VERSION >= 0x0900) */
>
>
>////////////////////////////////////////////////
>d3d9types.d
>///////////////////////////
>
>// Author : Ahmed El-Metwaly
>// contact : aelmetwaly@gawa.com
>// Lic     : GPL
>
>/*========================================================================== ;
> *
> *  Copyright (C) Microsoft Corporation.  All Rights Reserved.
> *
> *  File:       d3d9types.h
> *  Content:    Direct3D capabilities include file
> *
>
>***************************************************************************/
>
>
>import std.c.stdio;
>import std.c.stdlib;
>import std.string;
>import std.c.windows.windows;
>import std.c.windows.com;
>
>
>const int DIRECT3D_VERSION    =     0x0900;
>
>
>// include this file content only if compiling for DX9 interfaces
>//version(DIRECT3D_VERSION )
>//{
> //#include <float.h>
>
> align(4){
>
>
> // D3DCOLOR is equivalent to D3DFMT_A8R8G8B8
>
> alias DWORD D3DCOLOR;
>
>
>
> // maps unsigned 8 bits/channel to D3DCOLOR
> //#define D3DCOLOR_ARGB(a,r,g,b) \
> //
>((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
> D3DCOLOR D3DCOLOR_ARGB(ubyte a, ubyte r, ubyte g, ubyte b)
> {
>  return (cast(D3DCOLOR)(((a & 0xff) << 24) | ((r & 0xff) << 16) | ((g &
>0xff) << 8) | (b & 0xff)));
> }
>
>
> //#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
> D3DCOLOR D3DCOLOR_RGBA (ubyte r, ubyte g, ubyte b, ubyte  a)
> {
>  return D3DCOLOR_ARGB(a, r, g, b);
> }
>
> //#define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)
> D3DCOLOR D3DCOLOR_XRGB (ubyte r, ubyte g, ubyte b)
> {
>  return D3DCOLOR_ARGB( 0xff, r, g, b);
> }
>
> //#define D3DCOLOR_XYUV(y,u,v)   D3DCOLOR_ARGB(0xff,y,u,v)
> D3DCOLOR D3DCOLOR_XYUV (ubyte y, ubyte u, ubyte v)
> {
>  return D3DCOLOR_ARGB (0xff, y, u, v);
> }
>
> //#define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)
> D3DCOLOR D3DCOLOR_AYUV (ubyte a, ubyte y, ubyte u, ubyte v)
> {
>  return D3DCOLOR_ARGB (a, y, u, v);
> }
>
> // maps floating point channels (0.f to 1.f range) to D3DCOLOR
> //#define D3DCOLOR_COLORVALUE(r,g,b,a) \
> //
>D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWOR
>D)((a)*255.f))
> D3DCOLOR D3DCOLOR_COLORVALUE ( float r , float g, float b, float a)
> {
>  return D3DCOLOR_RGBA( cast(DWORD) ( r * 255.f), cast(DWORD)( g * 255.f ),
>cast(DWORD)( b *255.f), cast(DWORD)(a *255.f));
> }
>
>
>
> struct _D3DVECTOR {
>     float x;
>     float y;
>     float z;
> }
> alias _D3DVECTOR D3DVECTOR;
>
>
>
>
> struct _D3DCOLORVALUE {
>     float r;
>     float g;
>     float b;
>     float a;
> }
> alias _D3DCOLORVALUE D3DCOLORVALUE;
>
>
>
>
> struct _D3DRECT {
>     LONG x1;
>     LONG y1;
>     LONG x2;
>     LONG y2;
> }
> alias _D3DRECT D3DRECT;
>
>
>
>
> struct _D3DMATRIX {
>     union {
>         struct {
>             float        _11, _12, _13, _14;
>             float        _21, _22, _23, _24;
>             float        _31, _32, _33, _34;
>             float        _41, _42, _43, _44;
>
>         };
>         float m[4][4];
>     };
> }
> alias _D3DMATRIX D3DMATRIX;
>
>
>
> struct _D3DVIEWPORT9 {
>     DWORD       X;
>     DWORD       Y;            /* Viewport Top left */
>     DWORD       Width;
>     DWORD       Height;       /* Viewport Dimensions */
>     float       MinZ;         /* Min/max of clip Volume */
>     float       MaxZ;
> }
> alias _D3DVIEWPORT9 D3DVIEWPORT9;
>
> /*
>  * Values for clip fields.
>  */
>
> // Max number of user clipping planes, supported in D3D. const int D3DMAXUSERCLIPPLANES  = 32;
>
> // These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE
> //
> const int D3DCLIPPLANE0  = (1 << 0);
> const int D3DCLIPPLANE1  = (1 << 1);
> const int D3DCLIPPLANE2  = (1 << 2);
> const int D3DCLIPPLANE3  = (1 << 3);
> const int D3DCLIPPLANE4  = (1 << 4);
> const int D3DCLIPPLANE5  = (1 << 5);
>
> // The following bits are used in the ClipUnion and ClipIntersection
> // members of the D3DCLIPSTATUS9
> //
>
> const int D3DCS_LEFT      =  0x00000001L;
> const int D3DCS_RIGHT     =  0x00000002L;
> const int D3DCS_TOP       =  0x00000004L;
> const int D3DCS_BOTTOM    =  0x00000008L;
> const int D3DCS_FRONT     =  0x00000010L;
> const int D3DCS_BACK      =  0x00000020L;
> const int D3DCS_PLANE0    =  0x00000040L;
> const int D3DCS_PLANE1    =  0x00000080L;
> const int D3DCS_PLANE2    =  0x00000100L;
> const int D3DCS_PLANE3    =  0x00000200L;
> const int D3DCS_PLANE4    =  0x00000400L;
> const int D3DCS_PLANE5    =  0x00000800L;
>
> const int D3DCS_ALL = (D3DCS_LEFT   |
>                     D3DCS_RIGHT  |
>                     D3DCS_TOP    |
>                     D3DCS_BOTTOM |
>                     D3DCS_FRONT  |
>                     D3DCS_BACK   |
>                     D3DCS_PLANE0 |
>                     D3DCS_PLANE1 |
>                     D3DCS_PLANE2 |
>                     D3DCS_PLANE3 |
>                     D3DCS_PLANE4 |
>                     D3DCS_PLANE5);
>
> struct _D3DCLIPSTATUS9 {
>     DWORD ClipUnion;
>     DWORD ClipIntersection;
> }
> alias _D3DCLIPSTATUS9 D3DCLIPSTATUS9;
>
> struct _D3DMATERIAL9 {
>     D3DCOLORVALUE   Diffuse;        /* Diffuse color RGBA */
>     D3DCOLORVALUE   Ambient;        /* Ambient color RGB */
>     D3DCOLORVALUE   Specular;       /* Specular 'shininess' */
>     D3DCOLORVALUE   Emissive;       /* Emissive color RGB */
>     float           Power;          /* Sharpness if specular highlight */
> }
> alias _D3DMATERIAL9 D3DMATERIAL9;
>
> enum _D3DLIGHTTYPE {
>     D3DLIGHT_POINT          = 1,
>     D3DLIGHT_SPOT           = 2,
>     D3DLIGHT_DIRECTIONAL    = 3,
>     D3DLIGHT_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DLIGHTTYPE D3DLIGHTTYPE;
>
> struct _D3DLIGHT9 {
>     D3DLIGHTTYPE    Type;            /* Type of light source */
>     D3DCOLORVALUE   Diffuse;         /* Diffuse color of light */
>     D3DCOLORVALUE   Specular;        /* Specular color of light */
>     D3DCOLORVALUE   Ambient;         /* Ambient color of light */
>     D3DVECTOR       Position;         /* Position in world space */
>     D3DVECTOR       Direction;        /* Direction in world space */
>     float           Range;            /* Cutoff range */
>     float           Falloff;          /* Falloff */
>     float           Attenuation0;     /* Constant attenuation */
>     float           Attenuation1;     /* Linear attenuation */
>     float           Attenuation2;     /* Quadratic attenuation */
>     float           Theta;            /* Inner angle of spotlight cone */
>     float           Phi;              /* Outer angle of spotlight cone */
> }
> alias _D3DLIGHT9 D3DLIGHT9;
>
> /*
>  * Options for clearing
>  */
> const int D3DCLEAR_TARGET        =    0x00000001;  /* Clear target surface
>*/
> const int D3DCLEAR_ZBUFFER       =    0x00000002;  /* Clear target z buffer
>*/
> const int D3DCLEAR_STENCIL       =    0x00000004;  /* Clear stencil planes
>*/
>
> /*
>  * The following defines the rendering states
>  */
>
> enum _D3DSHADEMODE {
>     D3DSHADE_FLAT               = 1,
>     D3DSHADE_GOURAUD            = 2,
>     D3DSHADE_PHONG              = 3,
>     D3DSHADE_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DSHADEMODE D3DSHADEMODE;
>
> enum _D3DFILLMODE {
>     D3DFILL_POINT               = 1,
>     D3DFILL_WIREFRAME           = 2,
>     D3DFILL_SOLID               = 3,
>     D3DFILL_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DFILLMODE D3DFILLMODE;
>
> enum _D3DBLEND {
>     D3DBLEND_ZERO               = 1,
>     D3DBLEND_ONE                = 2,
>     D3DBLEND_SRCCOLOR           = 3,
>     D3DBLEND_INVSRCCOLOR        = 4,
>     D3DBLEND_SRCALPHA           = 5,
>     D3DBLEND_INVSRCALPHA        = 6,
>     D3DBLEND_DESTALPHA          = 7,
>     D3DBLEND_INVDESTALPHA       = 8,
>     D3DBLEND_DESTCOLOR          = 9,
>     D3DBLEND_INVDESTCOLOR       = 10,
>     D3DBLEND_SRCALPHASAT        = 11,
>     D3DBLEND_BOTHSRCALPHA       = 12,
>     D3DBLEND_BOTHINVSRCALPHA    = 13,
>     D3DBLEND_BLENDFACTOR        = 14, /* Only supported if
>D3DPBLENDCAPS_BLENDFACTOR is on */
>     D3DBLEND_INVBLENDFACTOR     = 15, /* Only supported if
>D3DPBLENDCAPS_BLENDFACTOR is on */
>     D3DBLEND_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DBLEND D3DBLEND;
>
>
>
>
>
> enum _D3DBLENDOP {
>     D3DBLENDOP_ADD              = 1,
>     D3DBLENDOP_SUBTRACT         = 2,
>     D3DBLENDOP_REVSUBTRACT      = 3,
>     D3DBLENDOP_MIN              = 4,
>     D3DBLENDOP_MAX              = 5,
>     D3DBLENDOP_FORCE_DWORD      = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DBLENDOP D3DBLENDOP;
>
>
>
>
>enum _D3DTEXTUREADDRESS {
>     D3DTADDRESS_WRAP            = 1,
>     D3DTADDRESS_MIRROR          = 2,
>     D3DTADDRESS_CLAMP           = 3,
>     D3DTADDRESS_BORDER          = 4,
>     D3DTADDRESS_MIRRORONCE      = 5,
>     D3DTADDRESS_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DTEXTUREADDRESS D3DTEXTUREADDRESS;
>
> enum _D3DCULL {
>     D3DCULL_NONE                = 1,
>     D3DCULL_CW                  = 2,
>     D3DCULL_CCW                 = 3,
>     D3DCULL_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DCULL D3DCULL;
>
>
>
> enum _D3DCMPFUNC {
>     D3DCMP_NEVER                = 1,
>     D3DCMP_LESS                 = 2,
>     D3DCMP_EQUAL                = 3,
>     D3DCMP_LESSEQUAL            = 4,
>     D3DCMP_GREATER              = 5,
>     D3DCMP_NOTEQUAL             = 6,
>     D3DCMP_GREATEREQUAL         = 7,
>     D3DCMP_ALWAYS               = 8,
>     D3DCMP_FORCE_DWORD          = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DCMPFUNC D3DCMPFUNC;
>
>
>
>
> enum _D3DSTENCILOP {
>     D3DSTENCILOP_KEEP           = 1,
>     D3DSTENCILOP_ZERO           = 2,
>     D3DSTENCILOP_REPLACE        = 3,
>     D3DSTENCILOP_INCRSAT        = 4,
>     D3DSTENCILOP_DECRSAT        = 5,
>     D3DSTENCILOP_INVERT         = 6,
>     D3DSTENCILOP_INCR           = 7,
>     D3DSTENCILOP_DECR           = 8,
>     D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DSTENCILOP D3DSTENCILOP;
>
>
>
>
> enum _D3DFOGMODE {
>     D3DFOG_NONE                 = 0,
>     D3DFOG_EXP                  = 1,
>     D3DFOG_EXP2                 = 2,
>     D3DFOG_LINEAR               = 3,
>     D3DFOG_FORCE_DWORD          = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DFOGMODE D3DFOGMODE;
>
>
>
>
>
> enum _D3DZBUFFERTYPE {
>     D3DZB_FALSE                 = 0,
>     D3DZB_TRUE                  = 1, // Z buffering
>     D3DZB_USEW                  = 2, // W buffering
>     D3DZB_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DZBUFFERTYPE D3DZBUFFERTYPE;
>
> // Primitives supported by draw-primitive API
> enum _D3DPRIMITIVETYPE {
>     D3DPT_POINTLIST             = 1,
>     D3DPT_LINELIST              = 2,
>     D3DPT_LINESTRIP             = 3,
>     D3DPT_TRIANGLELIST          = 4,
>     D3DPT_TRIANGLESTRIP         = 5,
>     D3DPT_TRIANGLEFAN           = 6,
>     D3DPT_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DPRIMITIVETYPE D3DPRIMITIVETYPE;
>
> enum _D3DTRANSFORMSTATETYPE {
>     D3DTS_VIEW          = 2,
>     D3DTS_PROJECTION    = 3,
>     D3DTS_TEXTURE0      = 16,
>     D3DTS_TEXTURE1      = 17,
>     D3DTS_TEXTURE2      = 18,
>     D3DTS_TEXTURE3      = 19,
>     D3DTS_TEXTURE4      = 20,
>     D3DTS_TEXTURE5      = 21,
>     D3DTS_TEXTURE6      = 22,
>     D3DTS_TEXTURE7      = 23,
>     D3DTS_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DTRANSFORMSTATETYPE D3DTRANSFORMSTATETYPE;
>
>
>
>
> /** FIXME : convert these !! */
> //#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
> //#define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)
> //#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
> //#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
> //#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
>
> enum _D3DRENDERSTATETYPE {
>     D3DRS_ZENABLE                   = 7,    /* D3DZBUFFERTYPE (or
>TRUE/FALSE for legacy) */
>     D3DRS_FILLMODE                  = 8,    /* D3DFILLMODE */
>     D3DRS_SHADEMODE                 = 9,    /* D3DSHADEMODE */
>     D3DRS_ZWRITEENABLE              = 14,   /* TRUE to enable z writes */
>     D3DRS_ALPHATESTENABLE           = 15,   /* TRUE to enable alpha tests
>*/
>     D3DRS_LASTPIXEL                 = 16,   /* TRUE for last-pixel on lines
>*/
>     D3DRS_SRCBLEND                  = 19,   /* D3DBLEND */
>     D3DRS_DESTBLEND                 = 20,   /* D3DBLEND */
>     D3DRS_CULLMODE                  = 22,   /* D3DCULL */
>     D3DRS_ZFUNC                     = 23,   /* D3DCMPFUNC */
>     D3DRS_ALPHAREF                  = 24,   /* D3DFIXED */
>     D3DRS_ALPHAFUNC                 = 25,   /* D3DCMPFUNC */
>     D3DRS_DITHERENABLE              = 26,   /* TRUE to enable dithering */
>     D3DRS_ALPHABLENDENABLE          = 27,   /* TRUE to enable alpha
>blending */
>     D3DRS_FOGENABLE                 = 28,   /* TRUE to enable fog blending
>*/
>     D3DRS_SPECULARENABLE            = 29,   /* TRUE to enable specular */
>     D3DRS_FOGCOLOR                  = 34,   /* D3DCOLOR */
>     D3DRS_FOGTABLEMODE              = 35,   /* D3DFOGMODE */
>     D3DRS_FOGSTART                  = 36,   /* Fog start (for both vertex
>and pixel fog) */
>     D3DRS_FOGEND                    = 37,   /* Fog end      */
>     D3DRS_FOGDENSITY                = 38,   /* Fog density  */
>     D3DRS_RANGEFOGENABLE            = 48,   /* Enables range-based fog */
>     D3DRS_STENCILENABLE             = 52,   /* BOOL enable/disable
>stenciling */
>     D3DRS_STENCILFAIL               = 53,   /* D3DSTENCILOP to do if
>stencil test fails */
>     D3DRS_STENCILZFAIL              = 54,   /* D3DSTENCILOP to do if
>stencil test passes and Z test fails */
>     D3DRS_STENCILPASS               = 55,   /* D3DSTENCILOP to do if both
>stencil and Z tests pass */
>     D3DRS_STENCILFUNC               = 56,   /* D3DCMPFUNC fn.  Stencil Test
>passes if ((ref & mask) stencilfn (stencil & mask)) is true */
>     D3DRS_STENCILREF                = 57,   /* Reference value used in
>stencil test */
>     D3DRS_STENCILMASK               = 58,   /* Mask value used in stencil
>test */
>     D3DRS_STENCILWRITEMASK          = 59,   /* Write mask applied to values
>written to stencil buffer */
>     D3DRS_TEXTUREFACTOR             = 60,   /* D3DCOLOR used for
>multi-texture blend */
>     D3DRS_WRAP0                     = 128,  /* wrap for 1st texture coord.
>set */
>     D3DRS_WRAP1                     = 129,  /* wrap for 2nd texture coord.
>set */
>     D3DRS_WRAP2                     = 130,  /* wrap for 3rd texture coord.
>set */
>     D3DRS_WRAP3                     = 131,  /* wrap for 4th texture coord.
>set */
>     D3DRS_WRAP4                     = 132,  /* wrap for 5th texture coord.
>set */
>     D3DRS_WRAP5                     = 133,  /* wrap for 6th texture coord.
>set */
>     D3DRS_WRAP6                     = 134,  /* wrap for 7th texture coord.
>set */
>     D3DRS_WRAP7                     = 135,  /* wrap for 8th texture coord.
>set */
>     D3DRS_CLIPPING                  = 136,
>     D3DRS_LIGHTING                  = 137,
>     D3DRS_AMBIENT                   = 139,
>     D3DRS_FOGVERTEXMODE             = 140,
>     D3DRS_COLORVERTEX               = 141,
>     D3DRS_LOCALVIEWER               = 142,
>     D3DRS_NORMALIZENORMALS          = 143,
>     D3DRS_DIFFUSEMATERIALSOURCE     = 145,
>     D3DRS_SPECULARMATERIALSOURCE    = 146,
>     D3DRS_AMBIENTMATERIALSOURCE     = 147,
>     D3DRS_EMISSIVEMATERIALSOURCE    = 148,
>     D3DRS_VERTEXBLEND               = 151,
>     D3DRS_CLIPPLANEENABLE           = 152,
>     D3DRS_POINTSIZE                 = 154,   /* float point size */
>     D3DRS_POINTSIZE_MIN             = 155,   /* float point size min
>threshold */
>     D3DRS_POINTSPRITEENABLE         = 156,   /* BOOL point texture coord
>control */
>     D3DRS_POINTSCALEENABLE          = 157,   /* BOOL point size scale
>enable */
>     D3DRS_POINTSCALE_A              = 158,   /* float point attenuation A
>value */
>     D3DRS_POINTSCALE_B              = 159,   /* float point attenuation B
>value */
>     D3DRS_POINTSCALE_C              = 160,   /* float point attenuation C
>value */
>     D3DRS_MULTISAMPLEANTIALIAS      = 161,  // BOOL - set to do FSAA with
>multisample buffer
>     D3DRS_MULTISAMPLEMASK           = 162,  // DWORD - per-sample
>enable/disable
>     D3DRS_PATCHEDGESTYLE            = 163,  // Sets whether patch edges
>will use float style tessellation
>     D3DRS_DEBUGMONITORTOKEN         = 165,  // DEBUG ONLY - token to debug
>monitor
>     D3DRS_POINTSIZE_MAX             = 166,   /* float point size max
>threshold */
>     D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,
>     D3DRS_COLORWRITEENABLE          = 168,  // per-channel write enable
>     D3DRS_TWEENFACTOR               = 170,   // float tween factor
>     D3DRS_BLENDOP                   = 171,   // D3DBLENDOP setting
>     D3DRS_POSITIONDEGREE            = 172,   // NPatch position
>interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default)
>     D3DRS_NORMALDEGREE              = 173,   // NPatch normal interpolation
>degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC
>     D3DRS_SCISSORTESTENABLE         = 174,
>     D3DRS_SLOPESCALEDEPTHBIAS       = 175,
>     D3DRS_ANTIALIASEDLINEENABLE     = 176,
>     D3DRS_MINTESSELLATIONLEVEL      = 178,
>     D3DRS_MAXTESSELLATIONLEVEL      = 179,
>     D3DRS_ADAPTIVETESS_X            = 180,
>     D3DRS_ADAPTIVETESS_Y            = 181,
>     D3DRS_ADAPTIVETESS_Z            = 182,
>     D3DRS_ADAPTIVETESS_W            = 183,
>     D3DRS_ENABLEADAPTIVETESSELLATION = 184,
>     D3DRS_TWOSIDEDSTENCILMODE       = 185,   /* BOOL enable/disable 2 sided
>stenciling */
>     D3DRS_CCW_STENCILFAIL           = 186,   /* D3DSTENCILOP to do if ccw
>stencil test fails */
>     D3DRS_CCW_STENCILZFAIL          = 187,   /* D3DSTENCILOP to do if ccw
>stencil test passes and Z test fails */
>     D3DRS_CCW_STENCILPASS           = 188,   /* D3DSTENCILOP to do if both
>ccw stencil and Z tests pass */
>     D3DRS_CCW_STENCILFUNC           = 189,   /* D3DCMPFUNC fn.  ccw Stencil
>Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */
>     D3DRS_COLORWRITEENABLE1         = 190,   /* Additional
>ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
>     D3DRS_COLORWRITEENABLE2         = 191,   /* Additional
>ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
>     D3DRS_COLORWRITEENABLE3         = 192,   /* Additional
>ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */
>     D3DRS_BLENDFACTOR               = 193,   /* D3DCOLOR used for a
>constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR */
>     D3DRS_SRGBWRITEENABLE           = 194,   /* Enable rendertarget writes
>to be DE-linearized to SRGB (for formats that expose
>D3DUSAGE_QUERY_SRGBWRITE) */
>     D3DRS_DEPTHBIAS                 = 195,
>     D3DRS_WRAP8                     = 198,   /* Additional wrap states for
>vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD */
>     D3DRS_WRAP9                     = 199,
>     D3DRS_WRAP10                    = 200,
>     D3DRS_WRAP11                    = 201,
>     D3DRS_WRAP12                    = 202,
>     D3DRS_WRAP13                    = 203,
>     D3DRS_WRAP14                    = 204,
>     D3DRS_WRAP15                    = 205,
>     D3DRS_SEPARATEALPHABLENDENABLE  = 206,  /* TRUE to enable a separate
>blending function for the alpha channel */
>     D3DRS_SRCBLENDALPHA             = 207,  /* SRC blend factor for the
>alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */
>     D3DRS_DESTBLENDALPHA            = 208,  /* DST blend factor for the
>alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */
>     D3DRS_BLENDOPALPHA              = 209,  /* Blending operation for the
>alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */
>
>
>     D3DRS_FORCE_DWORD               = 0x7fffffff, /* force 32-bit size enum
>*/
> }
> alias _D3DRENDERSTATETYPE D3DRENDERSTATETYPE;
>
>
>
>
>
> // Maximum number of simultaneous render targets D3D supports const int D3D_MAX_SIMULTANEOUS_RENDERTARGETS  = 4;
>
> // Values for material source
> enum _D3DMATERIALCOLORSOURCE
> {
>     D3DMCS_MATERIAL         = 0,            // Color from material is used
>     D3DMCS_COLOR1           = 1,            // Diffuse vertex color is used
>     D3DMCS_COLOR2           = 2,            // Specular vertex color is
>used
>     D3DMCS_FORCE_DWORD      = 0x7fffffff,   // force 32-bit size enum
> }
> alias _D3DMATERIALCOLORSOURCE D3DMATERIALCOLORSOURCE;
>
> // Bias to apply to the texture coordinate set to apply a wrap to. const int D3DRENDERSTATE_WRAPBIAS            =     128;
>
> /* Flags to construct the WRAP render states */
> const int D3DWRAP_U  = 0x00000001;
> const int D3DWRAP_V  = 0x00000002;
> const int D3DWRAP_W  = 0x00000004;
>
> /* Flags to construct the WRAP render states for 1D thru 4D texture
>coordinates */
> const int D3DWRAPCOORD_0  = 0x00000001;    // same as D3DWRAP_U const int D3DWRAPCOORD_1  = 0x00000002;    // same as D3DWRAP_V const int D3DWRAPCOORD_2  = 0x00000004;    // same as D3DWRAP_W const int D3DWRAPCOORD_3  = 0x00000008;
>
> /* Flags to construct D3DRS_COLORWRITEENABLE */
> const int D3DCOLORWRITEENABLE_RED    = (1<<0);
> const int D3DCOLORWRITEENABLE_GREEN  = (1<<1);
> const int D3DCOLORWRITEENABLE_BLUE   = (1<<2);
> const int D3DCOLORWRITEENABLE_ALPHA  = (1<<3);
>
> /*
>  * State enumerants for per-stage processing of fixed function pixel
>processing
>  * Two of these affect fixed function vertex processing as well:
>TEXTURETRANSFORMFLAGS and TEXCOORDINDEX.
>  */
> enum _D3DTEXTURESTAGESTATETYPE
> {
>     D3DTSS_COLOROP        =  1, /* D3DTEXTUREOP - per-stage blending
>controls for color channels */
>     D3DTSS_COLORARG1      =  2, /* D3DTA_* (texture arg) */
>     D3DTSS_COLORARG2      =  3, /* D3DTA_* (texture arg) */
>     D3DTSS_ALPHAOP        =  4, /* D3DTEXTUREOP - per-stage blending
>controls for alpha channel */
>     D3DTSS_ALPHAARG1      =  5, /* D3DTA_* (texture arg) */
>     D3DTSS_ALPHAARG2      =  6, /* D3DTA_* (texture arg) */
>     D3DTSS_BUMPENVMAT00   =  7, /* float (bump mapping matrix) */
>     D3DTSS_BUMPENVMAT01   =  8, /* float (bump mapping matrix) */
>     D3DTSS_BUMPENVMAT10   =  9, /* float (bump mapping matrix) */
>     D3DTSS_BUMPENVMAT11   = 10, /* float (bump mapping matrix) */
>     D3DTSS_TEXCOORDINDEX  = 11, /* identifies which set of texture
>coordinates index this texture */
>     D3DTSS_BUMPENVLSCALE  = 22, /* float scale for bump map luminance */
>     D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */
>     D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls
>texture transform */
>     D3DTSS_COLORARG0      = 26, /* D3DTA_* third arg for triadic ops */
>     D3DTSS_ALPHAARG0      = 27, /* D3DTA_* third arg for triadic ops */
>     D3DTSS_RESULTARG      = 28, /* D3DTA_* arg for result (CURRENT or TEMP)
>*/
>     D3DTSS_CONSTANT       = 32, /* Per-stage constant D3DTA_CONSTANT */
>
>
>     D3DTSS_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DTEXTURESTAGESTATETYPE D3DTEXTURESTAGESTATETYPE;
>
> /*
>  * State enumerants for per-sampler texture processing.
>  */
> enum _D3DSAMPLERSTATETYPE
> {
>     D3DSAMP_ADDRESSU       = 1,  /* D3DTEXTUREADDRESS for U coordinate */
>     D3DSAMP_ADDRESSV       = 2,  /* D3DTEXTUREADDRESS for V coordinate */
>     D3DSAMP_ADDRESSW       = 3,  /* D3DTEXTUREADDRESS for W coordinate */
>     D3DSAMP_BORDERCOLOR    = 4,  /* D3DCOLOR */
>     D3DSAMP_MAGFILTER      = 5,  /* D3DTEXTUREFILTER filter to use for
>magnification */
>     D3DSAMP_MINFILTER      = 6,  /* D3DTEXTUREFILTER filter to use for
>minification */
>     D3DSAMP_MIPFILTER      = 7,  /* D3DTEXTUREFILTER filter to use between
>mipmaps during minification */
>     D3DSAMP_MIPMAPLODBIAS  = 8,  /* float Mipmap LOD bias */
>     D3DSAMP_MAXMIPLEVEL    = 9,  /* DWORD 0..(n-1) LOD index of largest map
>to use (0 == largest) */
>     D3DSAMP_MAXANISOTROPY  = 10, /* DWORD maximum anisotropy */
>     D3DSAMP_SRGBTEXTURE    = 11, /* Default = 0 (which means Gamma 1.0,
>                                    no correction required.) else correct
>for
>                                    Gamma = 2.2 */
>     D3DSAMP_ELEMENTINDEX   = 12, /* When multi-element texture is assigned
>to sampler, this
>                                     indicates which element index to use.
>Default = 0.  */
>     D3DSAMP_DMAPOFFSET     = 13, /* Offset in vertices in the pre-sampled
>displacement map.
>                                     Only valid for D3DDMAPSAMPLER sampler
>*/
>     D3DSAMP_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */
> }
> alias _D3DSAMPLERSTATETYPE D3DSAMPLERSTATETYPE;
>
> /* Special sampler which is used in the tesselator */
> const int D3DDMAPSAMPLER  = 256;
>
> // Samplers used in vertex shaders
> const int D3DVERTEXTEXTURESAMPLER0  = (D3DDMAPSAMPLER+1);
> const int D3DVERTEXTEXTURESAMPLER1  = (D3DDMAPSAMPLER+2);
> const int D3DVERTEXTEXTURESAMPLER2  = (D3DDMAPSAMPLER+3);
> const int D3DVERTEXTEXTURESAMPLER3  = (D3DDMAPSAMPLER+4);
>
> // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex
>data(position
> // and normal in the camera space) should be taken as texture coordinates // Low 16 bits are used to specify texture coordinate index, to take the
>WRAP mode from
> //
> const int D3DTSS_TCI_PASSTHRU                        =     0x00000000;
> const int D3DTSS_TCI_CAMERASPACENORMAL               =     0x00010000;
> const int D3DTSS_TCI_CAMERASPACEPOSITION             =     0x00020000;
> const int D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR     =     0x00030000;
> const int D3DTSS_TCI_SPHEREMAP                       =     0x00040000;
>
> /*
>  * Enumerations for COLOROP and ALPHAOP texture blending operations set in
>  * texture processing stage controls in D3DTSS.
>  */
> enum _D3DTEXTUREOP
> {
>     // Control
>     D3DTOP_DISABLE              = 1,      // disables stage
>     D3DTOP_SELECTARG1           = 2,      // the default
>     D3DTOP_SELECTARG2           = 3,
>
>     // Modulate
>     D3DTOP_MODULATE             = 4,      // multiply args together
>     D3DTOP_MODULATE2X           = 5,      // multiply and  1 bit
>     D3DTOP_MODULATE4X           = 6,      // multiply and  2 bits
>
>     // Add
>     D3DTOP_ADD                  =  7,   // add arguments together
>     D3DTOP_ADDSIGNED            =  8,   // add with -0.5 bias
>     D3DTOP_ADDSIGNED2X          =  9,   // as above but left  1 bit
>     D3DTOP_SUBTRACT             = 10,   // Arg1 - Arg2, with no saturation
>     D3DTOP_ADDSMOOTH            = 11,   // add 2 args, subtract product
>                                         // Arg1 + Arg2 - Arg1*Arg2
>                                         // = Arg1 + (1-Arg1)*Arg2
>
>     // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
>     D3DTOP_BLENDDIFFUSEALPHA    = 12, // iterated alpha
>     D3DTOP_BLENDTEXTUREALPHA    = 13, // texture alpha
>     D3DTOP_BLENDFACTORALPHA     = 14, // alpha from D3DRS_TEXTUREFACTOR
>
>     // Linear alpha blend with pre-multiplied arg1 input: Arg1 +
>Arg2*(1-Alpha)
>     D3DTOP_BLENDTEXTUREALPHAPM  = 15, // texture alpha
>     D3DTOP_BLENDCURRENTALPHA    = 16, // by alpha of current color
>
>     // Specular mapping
>     D3DTOP_PREMODULATE            = 17,     // modulate with next texture
>before use
>     D3DTOP_MODULATEALPHA_ADDCOLOR = 18,     // Arg1.RGB + Arg1.A*Arg2.RGB
>                                             // COLOROP only
>     D3DTOP_MODULATECOLOR_ADDALPHA = 19,     // Arg1.RGB*Arg2.RGB + Arg1.A
>                                             // COLOROP only
>     D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,  // (1-Arg1.A)*Arg2.RGB +
>Arg1.RGB
>                                             // COLOROP only
>     D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,  // (1-Arg1.RGB)*Arg2.RGB +
>Arg1.A
>                                             // COLOROP only
>
>     // Bump mapping
>     D3DTOP_BUMPENVMAP           = 22, // per pixel env map perturbation
>     D3DTOP_BUMPENVMAPLUMINANCE  = 23, // with luminance channel
>
>     // This can do either diffuse or specular bump mapping with correct
>input.
>     // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G +
>Arg1.B*Arg2.B)
>     // where each component has been scaled and offset to make it signed.
>     // The result is replicated into all four (including alpha) channels.
>     // This is a valid COLOROP only.
>     D3DTOP_DOTPRODUCT3          = 24,
>
>     // Triadic ops
>     D3DTOP_MULTIPLYADD          = 25, // Arg0 + Arg1*Arg2
>     D3DTOP_LERP                 = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2
>
>     D3DTOP_FORCE_DWORD = 0x7fffffff,
> }
> alias _D3DTEXTUREOP D3DTEXTUREOP;
>
> /*
>  * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending
>  * operations set in texture processing stage controls in D3DRENDERSTATE.
>  */
> const int D3DTA_SELECTMASK     =   0x0000000f;  // mask for arg selector
> const int D3DTA_DIFFUSE        =   0x00000000;  // select diffuse color
>(read only)
> const int D3DTA_CURRENT        =   0x00000001;  // select stage destination
>register (read/write)
> const int D3DTA_TEXTURE        =   0x00000002;  // select texture color
>(read only)
> const int D3DTA_TFACTOR        =   0x00000003;  // select
>D3DRS_TEXTUREFACTOR (read only)
> const int D3DTA_SPECULAR       =   0x00000004;  // select specular color
>(read only)
> const int D3DTA_TEMP           =   0x00000005;  // select temporary
>register color (read/write)
> const int D3DTA_CONSTANT       =   0x00000006;  // select texture stage
>constant
> const int D3DTA_COMPLEMENT     =   0x00000010;  // take 1.0 - x (read
>modifier)
> const int D3DTA_ALPHAREPLICATE =   0x00000020;  // replicate alpha to color
>components (read modifier)
>
> //
> // Values for D3DSAMP_***FILTER texture stage states
> //
> enum _D3DTEXTUREFILTERTYPE
> {
>     D3DTEXF_NONE            = 0,    // filtering disabled (valid for mip
>filter only)
>     D3DTEXF_POINT           = 1,    // nearest
>     D3DTEXF_LINEAR          = 2,    // linear interpolation
>     D3DTEXF_ANISOTROPIC     = 3,    // anisotropic
>     D3DTEXF_PYRAMIDALQUAD   = 6,    // 4-sample tent
>     D3DTEXF_GAUSSIANQUAD    = 7,    // 4-sample gaussian
>     D3DTEXF_FORCE_DWORD     = 0x7fffffff,   // force 32-bit size enum
> }
> alias _D3DTEXTUREFILTERTYPE D3DTEXTUREFILTERTYPE;
>
> /* Bits for Flags in ProcessVertices call */
>
> const int D3DPV_DONOTCOPYDATA    = (1 << 0);
>
> //-------------------------------------------------------------------
>
> // Flexible vertex format bits
> //
> const int D3DFVF_RESERVED0       = 0x001;
> const int D3DFVF_POSITION_MASK   = 0x400E;
> const int D3DFVF_XYZ             = 0x002;
> const int D3DFVF_XYZRHW          = 0x004;
> const int D3DFVF_XYZB1           = 0x006;
> const int D3DFVF_XYZB2           = 0x008;
> const int D3DFVF_XYZB3           = 0x00a;
> const int D3DFVF_XYZB4           = 0x00c;
> const int D3DFVF_XYZB5           = 0x00e;
> const int D3DFVF_XYZW            = 0x4002;
>
> const int D3DFVF_NORMAL          = 0x010;
> const int D3DFVF_PSIZE           = 0x020;
> const int D3DFVF_DIFFUSE         = 0x040;
> const int D3DFVF_SPECULAR        = 0x080;
>
> const int D3DFVF_TEXCOUNT_MASK   = 0xf00;
> const int D3DFVF_TEXCOUNT_SHIFT  = 8;
> const int D3DFVF_TEX0            = 0x000;
> const int D3DFVF_TEX1            = 0x100;
> const int D3DFVF_TEX2            = 0x200;
> const int D3DFVF_TEX3            = 0x300;
> const int D3DFVF_TEX4            = 0x400;
> const int D3DFVF_TEX5            = 0x500;
> const int D3DFVF_TEX6            = 0x600;
> const int D3DFVF_TEX7            = 0x700;
> const int D3DFVF_TEX8            = 0x800;
>
> const int D3DFVF_LASTBETA_UBYTE4  = 0x1000;
> const int D3DFVF_LASTBETA_D3DCOLOR = 0x8000;
>
> const int D3DFVF_RESERVED2       =  0x6000;  // 2 reserved bits
>
> //---------------------------------------------------------------------
> // Vertex Shaders
> //
>
> // Vertex shader declaration
>
> // Vertex element semantics
> //
> enum _D3DDECLUSAGE
> {
>     D3DDECLUSAGE_POSITION = 0,
>     D3DDECLUSAGE_BLENDWEIGHT,   // 1
>     D3DDECLUSAGE_BLENDINDICES,  // 2
>     D3DDECLUSAGE_NORMAL,        // 3
>     D3DDECLUSAGE_PSIZE,         // 4
>     D3DDECLUSAGE_TEXCOORD,      // 5
>     D3DDECLUSAGE_TANGENT,       // 6
>     D3DDECLUSAGE_BINORMAL,      // 7
>     D3DDECLUSAGE_TESSFACTOR,    // 8
>     D3DDECLUSAGE_POSITIONT,     // 9
>     D3DDECLUSAGE_COLOR,         // 10
>     D3DDECLUSAGE_FOG,           // 11
>     D3DDECLUSAGE_DEPTH,         // 12
>     D3DDECLUSAGE_SAMPLE,        // 13
> }
> alias _D3DDECLUSAGE D3DDECLUSAGE;
>
> const int MAXD3DDECLUSAGE      =   D3DDECLUSAGE.D3DDECLUSAGE_SAMPLE;
> const int MAXD3DDECLUSAGEINDEX =   15;
> const int MAXD3DDECLLENGTH     =   64; // does not include "end" marker
>vertex element
>
> enum _D3DDECLMETHOD
> {
>     D3DDECLMETHOD_DEFAULT = 0,
>     D3DDECLMETHOD_PARTIALU,
>     D3DDECLMETHOD_PARTIALV,
>     D3DDECLMETHOD_CROSSUV,    // Normal
>     D3DDECLMETHOD_UV,
>     D3DDECLMETHOD_LOOKUP,               // Lookup a displacement map
>     D3DDECLMETHOD_LOOKUPPRESAMPLED,     // Lookup a pre-sampled
>displacement map
> }
> alias _D3DDECLMETHOD D3DDECLMETHOD;
> const int MAXD3DDECLMETHOD = D3DDECLMETHOD.D3DDECLMETHOD_LOOKUPPRESAMPLED;
>
>
>
> // Declarations for _Type fields
> //
> enum _D3DDECLTYPE
> {
>     D3DDECLTYPE_FLOAT1    =  0,  // 1D float expanded to (value, 0., 0.,
>1.)
>     D3DDECLTYPE_FLOAT2    =  1,  // 2D float expanded to (value, value, 0.,
>1.)
>     D3DDECLTYPE_FLOAT3    =  2,  // 3D float expanded to (value, value,
>value, 1.)
>     D3DDECLTYPE_FLOAT4    =  3,  // 4D float
>     D3DDECLTYPE_D3DCOLOR  =  4,  // 4D packed unsigned bytes mapped to 0.
>to 1. range
>                                  // Input is in D3DCOLOR format (ARGB)
>expanded to (R, G, B, A)
>     D3DDECLTYPE_UBYTE4    =  5,  // 4D unsigned byte
>     D3DDECLTYPE_SHORT2    =  6,  // 2D signed short expanded to (value,
>value, 0., 1.)
>     D3DDECLTYPE_SHORT4    =  7,  // 4D signed short
>
> // The following types are valid only with vertex shaders >= 2.0
>
>
>     D3DDECLTYPE_UBYTE4N   =  8,  // Each of 4 bytes is normalized by
>dividing to 255.0
>     D3DDECLTYPE_SHORT2N   =  9,  // 2D signed short normalized
>(v[0]/32767.0,v[1]/32767.0,0,1)
>     D3DDECLTYPE_SHORT4N   = 10,  // 4D signed short normalized
>(v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0)
>     D3DDECLTYPE_USHORT2N  = 11,  // 2D unsigned short normalized
>(v[0]/65535.0,v[1]/65535.0,0,1)
>     D3DDECLTYPE_USHORT4N  = 12,  // 4D unsigned short normalized
>(v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0)
>     D3DDECLTYPE_UDEC3     = 13,  // 3D unsigned 10 10 10 format expanded to
>(value, value, value, 1)
>     D3DDECLTYPE_DEC3N     = 14,  // 3D signed 10 10 10 format normalized
>and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)
>     D3DDECLTYPE_FLOAT16_2 = 15,  // Two 16-bit floating point values,
>expanded to (value, value, 0, 1)
>     D3DDECLTYPE_FLOAT16_4 = 16,  // Four 16-bit floating point values
>     D3DDECLTYPE_UNUSED    = 17,  // When the type field in a decl is
>unused.
> }
> alias _D3DDECLTYPE D3DDECLTYPE;
>
> const int MAXD3DDECLTYPE = D3DDECLTYPE.D3DDECLTYPE_UNUSED;
>
> struct _D3DVERTEXELEMENT9
> {
>     WORD    Stream;     // Stream index
>     WORD    Offset;     // Offset in the stream in bytes
>     BYTE    Type;       // Data type
>     BYTE    Method;     // Processing method
>     BYTE    Usage;      // Semantics
>     BYTE    UsageIndex; // Semantic index
> }
> alias _D3DVERTEXELEMENT9 D3DVERTEXELEMENT9;
> alias D3DVERTEXELEMENT9* LPD3DVERTEXELEMENT9;
>
>
> // This is used to initialize the last vertex element in a vertex
>declaration
> // array
> //
> //#define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0}
> D3DVERTEXELEMENT9 D3DDECL_END ()
> {
>  static D3DVERTEXELEMENT9 d3dVerElement =
>   { Stream : 0xFF, Offset : 0, Type : D3DDECLTYPE.D3DDECLTYPE_UNUSED,
>Method : 0, Usage : 0, UsageIndex : 0};
>  return d3dVerElement;
> }
>
> // Maximum supported number of texture coordinate sets const int D3DDP_MAXTEXCOORD =  8;
>
>
> //---------------------------------------------------------------------
> //
> // The internal format of Pixel Shader (PS) & Vertex Shader (VS)
> // Instruction Tokens is defined in the Direct3D Device Driver Kit
> //
> //---------------------------------------------------------------------
>
> //
> // Instruction Token Bit Definitions
> //
> const int D3DSI_OPCODE_MASK      = 0x0000FFFF;
>
> const int D3DSI_INSTLENGTH_MASK  = 0x0F000000;
> const int D3DSI_INSTLENGTH_SHIFT = 24;
>
> enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE
> {
>     D3DSIO_NOP          = 0,
>     D3DSIO_MOV          ,
>     D3DSIO_ADD          ,
>     D3DSIO_SUB          ,
>     D3DSIO_MAD          ,
>     D3DSIO_MUL          ,
>     D3DSIO_RCP          ,
>     D3DSIO_RSQ          ,
>     D3DSIO_DP3          ,
>     D3DSIO_DP4          ,
>     D3DSIO_MIN          ,
>     D3DSIO_MAX          ,
>     D3DSIO_SLT          ,
>     D3DSIO_SGE          ,
>     D3DSIO_EXP          ,
>     D3DSIO_LOG          ,
>     D3DSIO_LIT          ,
>     D3DSIO_DST          ,
>     D3DSIO_LRP          ,
>     D3DSIO_FRC          ,
>     D3DSIO_M4x4         ,
>     D3DSIO_M4x3         ,
>     D3DSIO_M3x4         ,
>     D3DSIO_M3x3         ,
>     D3DSIO_M3x2         ,
>     D3DSIO_CALL         ,
>     D3DSIO_CALLNZ       ,
>     D3DSIO_LOOP         ,
>     D3DSIO_RET          ,
>     D3DSIO_ENDLOOP      ,
>     D3DSIO_LABEL        ,
>     D3DSIO_DCL          ,
>     D3DSIO_POW          ,
>     D3DSIO_CRS          ,
>     D3DSIO_SGN          ,
>     D3DSIO_ABS          ,
>     D3DSIO_NRM          ,
>     D3DSIO_SINCOS       ,
>     D3DSIO_REP          ,
>     D3DSIO_ENDREP       ,
>     D3DSIO_IF           ,
>     D3DSIO_IFC          ,
>     D3DSIO_ELSE         ,
>     D3DSIO_ENDIF        ,
>     D3DSIO_BREAK        ,
>     D3DSIO_BREAKC       ,
>     D3DSIO_MOVA         ,
>     D3DSIO_DEFB         ,
>     D3DSIO_DEFI         ,
>
>     D3DSIO_TEXCOORD     = 64,
>     D3DSIO_TEXKILL      ,
>     D3DSIO_TEX          ,
>     D3DSIO_TEXBEM       ,
>     D3DSIO_TEXBEML      ,
>     D3DSIO_TEXREG2AR    ,
>     D3DSIO_TEXREG2GB    ,
>     D3DSIO_TEXM3x2PAD   ,
>     D3DSIO_TEXM3x2TEX   ,
>     D3DSIO_TEXM3x3PAD   ,
>     D3DSIO_TEXM3x3TEX   ,
>     D3DSIO_RESERVED0    ,
>     D3DSIO_TEXM3x3SPEC  ,
>     D3DSIO_TEXM3x3VSPEC ,
>     D3DSIO_EXPP         ,
>     D3DSIO_LOGP         ,
>     D3DSIO_CND          ,
>     D3DSIO_DEF          ,
>     D3DSIO_TEXREG2RGB   ,
>     D3DSIO_TEXDP3TEX    ,
>     D3DSIO_TEXM3x2DEPTH ,
>     D3DSIO_TEXDP3       ,
>     D3DSIO_TEXM3x3      ,
>     D3DSIO_TEXDEPTH     ,
>     D3DSIO_CMP          ,
>     D3DSIO_BEM          ,
>     D3DSIO_DP2ADD       ,
>     D3DSIO_DSX          ,
>     D3DSIO_DSY          ,
>     D3DSIO_TEXLDD       ,
>     D3DSIO_SETP         ,
>     D3DSIO_TEXLDL       ,
>     D3DSIO_BREAKP       ,
>
>     D3DSIO_PHASE        = 0xFFFD,
>     D3DSIO_COMMENT      = 0xFFFE,
>     D3DSIO_END          = 0xFFFF,
>
>     D3DSIO_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum
> }
> alias _D3DSHADER_INSTRUCTION_OPCODE_TYPE D3DSHADER_INSTRUCTION_OPCODE_TYPE;
>
> //---------------------------------------------------------------------
> // Use these constants with D3DSIO_SINCOS macro as SRC2, SRC3
> //
> /** ATTENTION !! : I don't know how to convert these 2 lines. */
> //#define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f,
>0.0026041667f, 0.00026041668f
> //const char[] D3DSINCOSCONST1 = "-1.5500992e-006f, -2.1701389e-005f,
>0.0026041667f, 0.00026041668f";
> const float[4] D3DSINCOSCONST1 = [ -1.5500992e-006f, -2.1701389e-005f,
>0.0026041667f, 0.00026041668f ];
> //#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f //const char[] D3DSINCOSCONST2 = "-0.020833334f, -0.12500000f, 1.0f,
>0.50000000f";
> const float[4] D3DSINCOSCONST2 = [ -0.020833334f, -0.12500000f, 1.0f,
>0.50000000f ];
>
>
> //---------------------------------------------------------------------
> // Co-Issue Instruction Modifier - if set then this instruction is to be
> // issued in parallel with the previous instruction(s) for which this bit
> // is not set.
> //
> const int D3DSI_COISSUE        =   0x40000000;
>
> //--------------------------------------------------------------------- // Opcode specific controls
>
> const int D3DSP_OPCODESPECIFICCONTROL_MASK = 0x00ff0000; const int D3DSP_OPCODESPECIFICCONTROL_SHIFT = 16;
>
> // ps_2_0 texld controls
> const int D3DSI_TEXLD_PROJECT = (0x01 <<
>D3DSP_OPCODESPECIFICCONTROL_SHIFT);
> const int D3DSI_TEXLD_BIAS    = (0x02 <<
>D3DSP_OPCODESPECIFICCONTROL_SHIFT);
>
> // Comparison for dynamic conditional instruction opcodes (i.e. if, breakc)
> enum _D3DSHADER_COMPARISON
> {
>                          // < = >
>     D3DSPC_RESERVED0= 0, // 0 0 0
>     D3DSPC_GT       = 1, // 0 0 1
>     D3DSPC_EQ       = 2, // 0 1 0
>     D3DSPC_GE       = 3, // 0 1 1
>     D3DSPC_LT       = 4, // 1 0 0
>     D3DSPC_NE       = 5, // 1 0 1
>     D3DSPC_LE       = 6, // 1 1 0
>     D3DSPC_RESERVED1= 7  // 1 1 1
> }
> alias _D3DSHADER_COMPARISON D3DSHADER_COMPARISON;
>
> // Comparison is part of instruction opcode token:
> const int D3DSHADER_COMPARISON_SHIFT = D3DSP_OPCODESPECIFICCONTROL_SHIFT;
> const int D3DSHADER_COMPARISON_MASK = (0x7<<D3DSHADER_COMPARISON_SHIFT);
>
> //---------------------------------------------------------------------
> // Predication flags on instruction token
> const int D3DSHADER_INSTRUCTION_PREDICATED   = (0x1 << 28);
>
> //--------------------------------------------------------------------- // DCL Info Token Controls
>
> // For dcl info tokens requiring a semantic (usage + index)
> const int D3DSP_DCL_USAGE_SHIFT = 0;
> const int D3DSP_DCL_USAGE_MASK  = 0x0000000f;
>
> const int D3DSP_DCL_USAGEINDEX_SHIFT = 16;
> const int D3DSP_DCL_USAGEINDEX_MASK  = 0x000f0000;
>
> // DCL pixel shader sampler info token.
> const int D3DSP_TEXTURETYPE_SHIFT = 27;
> const int D3DSP_TEXTURETYPE_MASK  = 0x78000000;
>
> enum _D3DSAMPLER_TEXTURE_TYPE
> {
>     D3DSTT_UNKNOWN = 0<<D3DSP_TEXTURETYPE_SHIFT, // uninitialized value
>     D3DSTT_2D      = 2<<D3DSP_TEXTURETYPE_SHIFT, // dcl_2d s# (for
>declaring a 2-D texture)
>     D3DSTT_CUBE    = 3<<D3DSP_TEXTURETYPE_SHIFT, // dcl_cube s# (for
>declaring a cube texture)
>     D3DSTT_VOLUME  = 4<<D3DSP_TEXTURETYPE_SHIFT, // dcl_volume s# (for
>declaring a volume texture)
>     D3DSTT_FORCE_DWORD  = 0x7fffffff,      // force 32-bit size enum
> }
> alias _D3DSAMPLER_TEXTURE_TYPE D3DSAMPLER_TEXTURE_TYPE;
>
> //---------------------------------------------------------------------
> // Parameter Token Bit Definitions
> //
> const int D3DSP_REGNUM_MASK   =    0x000007FF;
>
> // destination parameter write mask
> const int D3DSP_WRITEMASK_0    =   0x00010000;  // Component 0 (X;Red)
> const int D3DSP_WRITEMASK_1    =   0x00020000;  // Component 1 (Y;Green)
> const int D3DSP_WRITEMASK_2    =   0x00040000;  // Component 2 (Z;Blue)
> const int D3DSP_WRITEMASK_3    =   0x00080000;  // Component 3 (W;Alpha)
> const int D3DSP_WRITEMASK_ALL  =   0x000F0000;  // All Components
>
> // destination parameter modifiers
> const int D3DSP_DSTMOD_SHIFT   =   20;
> const int D3DSP_DSTMOD_MASK    =   0x00F00000;
>
> // Bit masks for destination parameter modifiers
> const int    D3DSPDM_NONE              =   (0<<D3DSP_DSTMOD_SHIFT); // nop
> const int    D3DSPDM_SATURATE          =   (1<<D3DSP_DSTMOD_SHIFT); //
>clamp to 0. to 1. range
> const int    D3DSPDM_PARTIALPRECISION  =   (2<<D3DSP_DSTMOD_SHIFT); //
>Partial precision hint
> const int    D3DSPDM_MSAMPCENTROID     =   (4<<D3DSP_DSTMOD_SHIFT); //
>Relevant to multisampling only:
>                                                                  //
>When the pixel center is not covered, sample
>                                                                  //
>attribute or compute gradients/LOD
>                                                                  //
>using multisample "centroid" location.
>                                                                  //
>"Centroid" is some location within the covered
>                                                                  //
>region of the pixel.
>
> // destination parameter
> const int D3DSP_DSTSHIFT_SHIFT  =  24;
> const int D3DSP_DSTSHIFT_MASK   =  0x0F000000;
>
> // destination/source parameter register type
> const int D3DSP_REGTYPE_SHIFT   =  28;
> const int D3DSP_REGTYPE_SHIFT2  =  8;
> const int D3DSP_REGTYPE_MASK    =  0x70000000;
> const int D3DSP_REGTYPE_MASK2   =  0x00001800;
>
> enum _D3DSHADER_PARAM_REGISTER_TYPE
> {
>     D3DSPR_TEMP           =  0, // Temporary Register File
>     D3DSPR_INPUT          =  1, // Input Register File
>     D3DSPR_CONST          =  2, // Constant Register File
>     D3DSPR_ADDR           =  3, // Address Register (VS)
>     D3DSPR_TEXTURE        =  3, // Texture Register File (PS)
>     D3DSPR_RASTOUT        =  4, // Rasterizer Register File
>     D3DSPR_ATTROUT        =  5, // Attribute Output Register File
>     D3DSPR_TEXCRDOUT      =  6, // Texture Coordinate Output Register File
>     D3DSPR_OUTPUT         =  6, // Output register file for VS3.0+
>     D3DSPR_CONSTINT       =  7, // Constant Integer Vector Register File
>     D3DSPR_COLOROUT       =  8, // Color Output Register File
>     D3DSPR_DEPTHOUT       =  9, // Depth Output Register File
>     D3DSPR_SAMPLER        = 10, // Sampler State Register File
>     D3DSPR_CONST2         = 11, // Constant Register File  2048 - 4095
>     D3DSPR_CONST3         = 12, // Constant Register File  4096 - 6143
>     D3DSPR_CONST4         = 13, // Constant Register File  6144 - 8191
>     D3DSPR_CONSTBOOL      = 14, // Constant Boolean register file
>     D3DSPR_LOOP           = 15, // Loop counter register file
>     D3DSPR_TEMPFLOAT16    = 16, // 16-bit float temp register file
>     D3DSPR_MISCTYPE       = 17, // Miscellaneous (single) registers.
>     D3DSPR_LABEL          = 18, // Label
>     D3DSPR_PREDICATE      = 19, // Predicate register
>     D3DSPR_FORCE_DWORD  = 0x7fffffff,         // force 32-bit size enum
> }
> alias _D3DSHADER_PARAM_REGISTER_TYPE D3DSHADER_PARAM_REGISTER_TYPE;
>
> // The miscellaneous register file (D3DSPR_MISCTYPES)
> // contains register types for which there is only ever one
> // register (i.e. the register # is not needed).
> // Rather than use up additional register types for such
> // registers, they are defined
> // as particular offsets into the misc. register file:
> enum _D3DSHADER_MISCTYPE_OFFSETS
> {
>     D3DSMO_POSITION   = 0, // Input position x,y,z,rhw (PS)
>     D3DSMO_FACE   = 1, // Floating point primitive area (PS)
> }
> alias _D3DSHADER_MISCTYPE_OFFSETS D3DSHADER_MISCTYPE_OFFSETS;
>
> // Register offsets in the Rasterizer Register File
> //
> enum _D3DVS_RASTOUT_OFFSETS
> {
>     D3DSRO_POSITION = 0,
>     D3DSRO_FOG,
>     D3DSRO_POINT_SIZE,
>     D3DSRO_FORCE_DWORD  = 0x7fffffff,         // force 32-bit size enum
> }
> alias _D3DVS_RASTOUT_OFFSETS D3DVS_RASTOUT_OFFSETS;
>
> // Source operand addressing modes
>
> const int D3DVS_ADDRESSMODE_SHIFT = 13;
> const int D3DVS_ADDRESSMODE_MASK  = (1 << D3DVS_ADDRESSMODE_SHIFT);
>
> enum _D3DVS_ADDRESSMODE_TYPE
> {
>     D3DVS_ADDRMODE_ABSOLUTE  = (0 << D3DVS_ADDRESSMODE_SHIFT),
>     D3DVS_ADDRMODE_RELATIVE  = (1 << D3DVS_ADDRESSMODE_SHIFT),
>     D3DVS_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
> }
> alias _D3DVS_ADDRESSMODE_TYPE D3DVS_ADDRESSMODE_TYPE;
>
> const int D3DSHADER_ADDRESSMODE_SHIFT = 13;
> const int D3DSHADER_ADDRESSMODE_MASK  = (1 << D3DSHADER_ADDRESSMODE_SHIFT);
>
> enum _D3DSHADER_ADDRESSMODE_TYPE
> {
>     D3DSHADER_ADDRMODE_ABSOLUTE  = (0 << D3DSHADER_ADDRESSMODE_SHIFT),
>     D3DSHADER_ADDRMODE_RELATIVE  = (1 << D3DSHADER_ADDRESSMODE_SHIFT),
>     D3DSHADER_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
> }
> alias _D3DSHADER_ADDRESSMODE_TYPE D3DSHADER_ADDRESSMODE_TYPE;
>
> // Source operand swizzle definitions
> //
> const int D3DVS_SWIZZLE_SHIFT   =  16;
> const int D3DVS_SWIZZLE_MASK    =  0x00FF0000;
>
> // The following bits define where to take component X from:
>
> const int D3DVS_X_X     =  (0 << D3DVS_SWIZZLE_SHIFT);
> const int D3DVS_X_Y     =  (1 << D3DVS_SWIZZLE_SHIFT);
> const int D3DVS_X_Z     =  (2 << D3DVS_SWIZZLE_SHIFT);
> const int D3DVS_X_W     =  (3 << D3DVS_SWIZZLE_SHIFT);
>
> // The following bits define where to take component Y from:
>
> const int D3DVS_Y_X     =  (0 << (D3DVS_SWIZZLE_SHIFT + 2));
> const int D3DVS_Y_Y     =  (1 << (D3DVS_SWIZZLE_SHIFT + 2));
> const int D3DVS_Y_Z     =  (2 << (D3DVS_SWIZZLE_SHIFT + 2));
> const int D3DVS_Y_W     =  (3 << (D3DVS_SWIZZLE_SHIFT + 2));
>
> // The following bits define where to take component Z from:
>
> const int D3DVS_Z_X     =  (0 << (D3DVS_SWIZZLE_SHIFT + 4));
> const int D3DVS_Z_Y     =  (1 << (D3DVS_SWIZZLE_SHIFT + 4));
> const int D3DVS_Z_Z     =  (2 << (D3DVS_SWIZZLE_SHIFT + 4));
> const int D3DVS_Z_W     =  (3 << (D3DVS_SWIZZLE_SHIFT + 4));
>
> // The following bits define where to take component W from:
>
> const int D3DVS_W_X     =  (0 << (D3DVS_SWIZZLE_SHIFT + 6));
> const int D3DVS_W_Y     =  (1 << (D3DVS_SWIZZLE_SHIFT + 6));
> const int D3DVS_W_Z     =  (2 << (D3DVS_SWIZZLE_SHIFT + 6));
> const int D3DVS_W_W     =  (3 << (D3DVS_SWIZZLE_SHIFT + 6));
>
> // Value when there is no swizzle (X is taken from X, Y is taken from Y,
> // Z is taken from Z, W is taken from W
> //
> const int D3DVS_NOSWIZZLE = (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z |
>D3DVS_W_W);
>
> // source parameter swizzle
> const int D3DSP_SWIZZLE_SHIFT   =  16;
> const int D3DSP_SWIZZLE_MASK    =  0x00FF0000;
>
> //#define D3DSP_NOSWIZZLE \
> //    ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
> //      (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
> //      (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
> //      (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )
> const int D3DSP_NOSWIZZLE =
>     ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) |
>       (1 << (D3DSP_SWIZZLE_SHIFT + 2)) |
>       (2 << (D3DSP_SWIZZLE_SHIFT + 4)) |
>       (3 << (D3DSP_SWIZZLE_SHIFT + 6)) );
>
> // pixel-shader swizzle ops
> //#define D3DSP_REPLICATERED \
> //    ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
> //      (0 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
> //      (0 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
> //      (0 << (D3DSP_SWIZZLE_SHIFT + 6)) )
> const int D3DSP_REPLICATERED =
>     ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) |
>       (0 << (D3DSP_SWIZZLE_SHIFT + 2)) |
>       (0 << (D3DSP_SWIZZLE_SHIFT + 4)) |
>       (0 << (D3DSP_SWIZZLE_SHIFT + 6)) );
>
>
>
> //#define D3DSP_REPLICATEGREEN \
> //    ( (1 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
> //      (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
> //      (1 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
> //      (1 << (D3DSP_SWIZZLE_SHIFT + 6)) )
> const int D3DSP_REPLICATEGREEN =
>  ( (1 << (D3DSP_SWIZZLE_SHIFT + 0)) |
>       (1 << (D3DSP_SWIZZLE_SHIFT + 2)) |
>       (1 << (D3DSP_SWIZZLE_SHIFT + 4)) |
>       (1 << (D3DSP_SWIZZLE_SHIFT + 6)) );
>
>
>
> //#define D3DSP_REPLICATEBLUE \
> //    ( (2 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
> //      (2 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
> //      (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
> //      (2 << (D3DSP_SWIZZLE_SHIFT + 6)) )
> const int D3DSP_REPLICATEBLUE = ( (2 << (D3DSP_SWIZZLE_SHIFT + 0)) |
>                (2 << (D3DSP_SWIZZLE_SHIFT + 2)) |
>                (2 << (D3DSP_SWIZZLE_SHIFT + 4)) |
>                (2 << (D3DSP_SWIZZLE_SHIFT + 6)) );
>
>
> //#define D3DSP_REPLICATEALPHA \
> //    ( (3 << (D3DSP_SWIZZLE_SHIFT + 0)) | \
> //      (3 << (D3DSP_SWIZZLE_SHIFT + 2)) | \
> //      (3 << (D3DSP_SWIZZLE_SHIFT + 4)) | \
> //      (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )
> const int D3DSP_REPLICATEALPHA = ( (3 << (D3DSP_SWIZZLE_SHIFT + 0)) |
>               (3 << (D3DSP_SWIZZLE_SHIFT + 2)) |
>               (3 << (D3DSP_SWIZZLE_SHIFT + 4)) |
>               (3 << (D3DSP_SWIZZLE_SHIFT + 6)) );
>
>
> // source parameter modifiers
> const int D3DSP_SRCMOD_SHIFT   =   24;
> const int D3DSP_SRCMOD_MASK    =   0x0F000000;
>
> enum _D3DSHADER_PARAM_SRCMOD_TYPE
> {
>     D3DSPSM_NONE    = 0<<D3DSP_SRCMOD_SHIFT, // nop
>     D3DSPSM_NEG     = 1<<D3DSP_SRCMOD_SHIFT, // negate
>     D3DSPSM_BIAS    = 2<<D3DSP_SRCMOD_SHIFT, // bias
>     D3DSPSM_BIASNEG = 3<<D3DSP_SRCMOD_SHIFT, // bias and negate
>     D3DSPSM_SIGN    = 4<<D3DSP_SRCMOD_SHIFT, // sign
>     D3DSPSM_SIGNNEG = 5<<D3DSP_SRCMOD_SHIFT, // sign and negate
>     D3DSPSM_COMP    = 6<<D3DSP_SRCMOD_SHIFT, // complement
>     D3DSPSM_X2      = 7<<D3DSP_SRCMOD_SHIFT, // *2
>     D3DSPSM_X2NEG   = 8<<D3DSP_SRCMOD_SHIFT, // *2 and negate
>     D3DSPSM_DZ      = 9<<D3DSP_SRCMOD_SHIFT, // divide through by z
>component
>     D3DSPSM_DW      = 10<<D3DSP_SRCMOD_SHIFT, // divide through by w
>component
>     D3DSPSM_ABS     = 11<<D3DSP_SRCMOD_SHIFT, // abs()
>     D3DSPSM_ABSNEG  = 12<<D3DSP_SRCMOD_SHIFT, // -abs()
>     D3DSPSM_NOT     = 13<<D3DSP_SRCMOD_SHIFT, // for predicate register:
>"!p0"
>     D3DSPSM_FORCE_DWORD = 0x7fffffff,        // force 32-bit size enum
> }
> alias _D3DSHADER_PARAM_SRCMOD_TYPE D3DSHADER_PARAM_SRCMOD_TYPE;
>
> // pixel shader version token
> //#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))
> int D3DPS_VERSION (int _Major, int _Minor)
> {
>  return (0xFFFF0000|((_Major)<<8)|(_Minor));
> }
>
> // vertex shader version token
> //#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))
> int D3DVS_VERSION (int _Major , int _Minor)
> {
>  return (0xFFFE0000|((_Major)<<8)|(_Minor));
> }
>
> // extract major/minor from version cap
> //#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)
> int D3DSHADER_VERSION_MAJOR (int _Version)
> {
>  return  (((_Version)>>8) & 0xFF);
> }
>
> //#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)
> int D3DSHADER_VERSION_MINOR (int _Version)
> {
>  return (((_Version)>>0)&0xFF);
> }
>
> // destination/source parameter register type
> const int D3DSI_COMMENTSIZE_SHIFT   =  16;
> const int D3DSI_COMMENTSIZE_MASK    =  0x7FFF0000;
>
> //#define D3DSHADER_COMMENT(_DWordSize) \
> //
>((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COM
>MENT)
> int D3DSHADER_COMMENT (DWORD _DWordSize)
> {
>  return ((((_DWordSize) << D3DSI_COMMENTSIZE_SHIFT) &
>D3DSI_COMMENTSIZE_MASK) | D3DSHADER_INSTRUCTION_OPCODE_TYPE.D3DSIO_COMMENT);
> }
>
> // pixel/vertex shader end token
> //#define D3DPS_END()  0x0000FFFF
> int D3DPS_END ()
> {
>  return 0x0000FFFF;
> }
>
> //#define D3DVS_END()  0x0000FFFF
> int D3DVS_END ()
> {
>  return 0x0000FFFF;
> }
>
>
> //---------------------------------------------------------------------
>
> // High order surfaces
> //
> enum _D3DBASISTYPE
> {
>    D3DBASIS_BEZIER      = 0,
>    D3DBASIS_BSPLINE     = 1,
>    D3DBASIS_CATMULL_ROM = 2, /* In D3D8 this used to be
>D3DBASIS_INTERPOLATE */
>    D3DBASIS_FORCE_DWORD = 0x7fffffff,
> }
> alias _D3DBASISTYPE D3DBASISTYPE;
>
> enum _D3DDEGREETYPE
> {
>    D3DDEGREE_LINEAR      = 1,
>    D3DDEGREE_QUADRATIC   = 2,
>    D3DDEGREE_CUBIC       = 3,
>    D3DDEGREE_QUINTIC     = 5,
>    D3DDEGREE_FORCE_DWORD = 0x7fffffff,
> }
> alias _D3DDEGREETYPE D3DDEGREETYPE;
>
> enum _D3DPATCHEDGESTYLE
> {
>    D3DPATCHEDGE_DISCRETE    = 0,
>    D3DPATCHEDGE_CONTINUOUS  = 1,
>    D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,
> }
> alias _D3DPATCHEDGESTYLE D3DPATCHEDGESTYLE;
>
> enum _D3DSTATEBLOCKTYPE
> {
>     D3DSBT_ALL           = 1, // capture all state
>     D3DSBT_PIXELSTATE    = 2, // capture pixel state
>     D3DSBT_VERTEXSTATE   = 3, // capture vertex state
>     D3DSBT_FORCE_DWORD   = 0x7fffffff,
> }
> alias _D3DSTATEBLOCKTYPE D3DSTATEBLOCKTYPE;
>
> // The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state.
> //
> enum _D3DVERTEXBLENDFLAGS
> {
>     D3DVBF_DISABLE  = 0,     // Disable vertex blending
>     D3DVBF_1WEIGHTS = 1,     // 2 matrix blending
>     D3DVBF_2WEIGHTS = 2,     // 3 matrix blending
>     D3DVBF_3WEIGHTS = 3,     // 4 matrix blending
>     D3DVBF_TWEENING = 255,   // blending using D3DRS_TWEENFACTOR
>     D3DVBF_0WEIGHTS = 256,   // one matrix is used with weight 1.0
>     D3DVBF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum
> }
> alias _D3DVERTEXBLENDFLAGS D3DVERTEXBLENDFLAGS;
>
> enum _D3DTEXTURETRANSFORMFLAGS
> {
>     D3DTTFF_DISABLE         = 0,    // texture coordinates are passed
>directly
>     D3DTTFF_COUNT1          = 1,    // rasterizer should expect 1-D texture
>coords
>     D3DTTFF_COUNT2          = 2,    // rasterizer should expect 2-D texture
>coords
>     D3DTTFF_COUNT3          = 3,    // rasterizer should expect 3-D texture
>coords
>     D3DTTFF_COUNT4          = 4,    // rasterizer should expect 4-D texture
>coords
>     D3DTTFF_PROJECTED       = 256,  // texcoords to be divided by COUNTth
>element
>     D3DTTFF_FORCE_DWORD     = 0x7fffffff,
> }
> alias _D3DTEXTURETRANSFORMFLAGS D3DTEXTURETRANSFORMFLAGS;
>
> // Macros to set texture coordinate format bits in the FVF id
>
> const int D3DFVF_TEXTUREFORMAT2 = 0;         // Two floating point values const int D3DFVF_TEXTUREFORMAT1 = 3;         // One floating point value const int D3DFVF_TEXTUREFORMAT3 = 1;         // Three floating point values const int D3DFVF_TEXTUREFORMAT4 = 2;         // Four floating point values
>
> //#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 <<
>(CoordIndex*2 + 16))
> int D3DFVF_TEXCOORDSIZE3 (int CoordIndex)
> {
>  return (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16));
> }
>
> //#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
> int D3DFVF_TEXCOORDSIZE2 (int CoordIndex)
> {
>  return (D3DFVF_TEXTUREFORMAT2);
> }
>
> //#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 <<
>(CoordIndex*2 + 16))
> int D3DFVF_TEXCOORDSIZE4 (int CoordIndex)
> {
>  return  (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16));
> }
>
> //#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 <<
>(CoordIndex*2 + 16))
> int D3DFVF_TEXCOORDSIZE1 (int CoordIndex)
> {
>  return (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16));
> }
>
>
> //---------------------------------------------------------------------
>
> /* Direct3D9 Device types */
> enum _D3DDEVTYPE
> {
>     D3DDEVTYPE_HAL         = 1,
>     D3DDEVTYPE_REF         = 2,
>     D3DDEVTYPE_SW          = 3,
>
>     D3DDEVTYPE_FORCE_DWORD  = 0x7fffffff
> }
> alias _D3DDEVTYPE D3DDEVTYPE;
>
> /* Multi-Sample buffer types */
> enum _D3DMULTISAMPLE_TYPE
> {
>     D3DMULTISAMPLE_NONE            =  0,
>     D3DMULTISAMPLE_NONMASKABLE     =  1,
>     D3DMULTISAMPLE_2_SAMPLES       =  2,
>     D3DMULTISAMPLE_3_SAMPLES       =  3,
>     D3DMULTISAMPLE_4_SAMPLES       =  4,
>     D3DMULTISAMPLE_5_SAMPLES       =  5,
>     D3DMULTISAMPLE_6_SAMPLES       =  6,
>     D3DMULTISAMPLE_7_SAMPLES       =  7,
>     D3DMULTISAMPLE_8_SAMPLES       =  8,
>     D3DMULTISAMPLE_9_SAMPLES       =  9,
>     D3DMULTISAMPLE_10_SAMPLES      = 10,
>     D3DMULTISAMPLE_11_SAMPLES      = 11,
>     D3DMULTISAMPLE_12_SAMPLES      = 12,
>     D3DMULTISAMPLE_13_SAMPLES      = 13,
>     D3DMULTISAMPLE_14_SAMPLES      = 14,
>     D3DMULTISAMPLE_15_SAMPLES      = 15,
>     D3DMULTISAMPLE_16_SAMPLES      = 16,
>
>     D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff
> }
> alias _D3DMULTISAMPLE_TYPE D3DMULTISAMPLE_TYPE;
>
> /* Formats
>  * Most of these names have the following convention:
>  *      A = Alpha
>  *      R = Red
>  *      G = Green
>  *      B = Blue
>  *      X = Unused Bits
>  *      P = Palette
>  *      L = Luminance
>  *      U = dU coordinate for BumpMap
>  *      V = dV coordinate for BumpMap
>  *      S = Stencil
>  *      D = Depth (e.g. Z or W buffer)
>  *      C = Computed from other channels (typically on certain read
>operations)
>  *
>  *      Further, the order of the pieces are from MSB first; hence
>  *      D3DFMT_A8L8 indicates that the high byte of this two byte
>  *      format is alpha.
>  *
>  *      D16 indicates:
>  *           - An integer 16-bit value.
>  *           - An app-lockable surface.
>  *
>  *      All Depth/Stencil formats except D3DFMT_D16_LOCKABLE indicate:
>  *          - no particular bit ordering per pixel, and
>  *          - are not app lockable, and
>  *          - the driver is allowed to consume more than the indicated
>  *            number of bits per Depth channel (but not Stencil channel).
>  */
>
>  //   #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \
>  //               ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |       \
>  //               ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
>  int MAKEFOURCC ( char ch0, char ch1, char ch2, char ch3)
>  {
>   return ( cast(DWORD)( cast(BYTE)((ch0)) | ( cast(DWORD) (cast(BYTE)((ch1
><< 8))) ) |
>       ( cast(DWORD)( cast(BYTE)(( ch2 << 16))) ) | ( cast(DWORD)(
>cast(BYTE)((ch3 << 24)))) ));
>  }
>
>
>
> enum _D3DFORMAT
> {
>     D3DFMT_UNKNOWN              =  0,
>
>     D3DFMT_R8G8B8               = 20,
>     D3DFMT_A8R8G8B8             = 21,
>     D3DFMT_X8R8G8B8             = 22,
>     D3DFMT_R5G6B5               = 23,
>     D3DFMT_X1R5G5B5             = 24,
>     D3DFMT_A1R5G5B5             = 25,
>     D3DFMT_A4R4G4B4             = 26,
>     D3DFMT_R3G3B2               = 27,
>     D3DFMT_A8                   = 28,
>     D3DFMT_A8R3G3B2             = 29,
>     D3DFMT_X4R4G4B4             = 30,
>     D3DFMT_A2B10G10R10          = 31,
>     D3DFMT_A8B8G8R8             = 32,
>     D3DFMT_X8B8G8R8             = 33,
>     D3DFMT_G16R16               = 34,
>     D3DFMT_A2R10G10B10          = 35,
>     D3DFMT_A16B16G16R16         = 36,
>
>     D3DFMT_A8P8                 = 40,
>     D3DFMT_P8                   = 41,
>
>     D3DFMT_L8                   = 50,
>     D3DFMT_A8L8                 = 51,
>     D3DFMT_A4L4                 = 52,
>
>     D3DFMT_V8U8                 = 60,
>     D3DFMT_L6V5U5               = 61,
>     D3DFMT_X8L8V8U8             = 62,
>     D3DFMT_Q8W8V8U8             = 63,
>     D3DFMT_V16U16               = 64,
>     D3DFMT_A2W10V10U10          = 67,
>
>     D3DFMT_UYVY                 = 85, //MAKEFOURCC('U', 'Y', 'V', 'Y'),
>     D3DFMT_R8G8_B8G8            = 82, //MAKEFOURCC('R', 'G', 'B', 'G'),
>     D3DFMT_YUY2                 = 89, //MAKEFOURCC('Y', 'U', 'Y', '2'),
>     D3DFMT_G8R8_G8B8            = 71, //MAKEFOURCC('G', 'R', 'G', 'B'),
>     D3DFMT_DXT1                 = 68, //MAKEFOURCC('D', 'X', 'T', '1'),
>     D3DFMT_DXT2                 = 68, //MAKEFOURCC('D', 'X', 'T', '2'),
>     D3DFMT_DXT3                 = 68, //MAKEFOURCC('D', 'X', 'T', '3'),
>     D3DFMT_DXT4                 = 68, //MAKEFOURCC('D', 'X', 'T', '4'),
>     D3DFMT_DXT5                 = 68, //MAKEFOURCC('D', 'X', 'T', '5'),
>
>     D3DFMT_D16_LOCKABLE         = 70,
>     D3DFMT_D32                  = 71,
>     D3DFMT_D15S1                = 73,
>     D3DFMT_D24S8                = 75,
>     D3DFMT_D24X8                = 77,
>     D3DFMT_D24X4S4              = 79,
>     D3DFMT_D16                  = 80,
>
>     D3DFMT_D32F_LOCKABLE        = 82,
>     D3DFMT_D24FS8               = 83,
>
>
>     D3DFMT_L16                  = 81,
>
>     D3DFMT_VERTEXDATA           =100,
>     D3DFMT_INDEX16              =101,
>     D3DFMT_INDEX32              =102,
>
>     D3DFMT_Q16W16V16U16         =110,
>
>     D3DFMT_MULTI2_ARGB8         = 68, //MAKEFOURCC('M','E','T','1'),
>
>     // Floating point surface formats
>
>     // s10e5 formats (16-bits per channel)
>     D3DFMT_R16F                 = 111,
>     D3DFMT_G16R16F              = 112,
>     D3DFMT_A16B16G16R16F        = 113,
>
>     // IEEE s23e8 formats (32-bits per channel)
>     D3DFMT_R32F                 = 114,
>     D3DFMT_G32R32F              = 115,
>     D3DFMT_A32B32G32R32F        = 116,
>
>     D3DFMT_CxV8U8               = 117,
>
>
>     D3DFMT_FORCE_DWORD          =0x7fffffff
> }
> alias _D3DFORMAT D3DFORMAT;
>
> /* Display Modes */
> struct _D3DDISPLAYMODE
> {
>     UINT            Width;
>     UINT            Height;
>     UINT            RefreshRate;
>     D3DFORMAT       Format;
> }
> alias _D3DDISPLAYMODE D3DDISPLAYMODE;
>
> /* Creation Parameters */
> struct _D3DDEVICE_CREATION_PARAMETERS
> {
>     UINT            AdapterOrdinal;
>     D3DDEVTYPE      DeviceType;
>     HWND            hFocusWindow;
>     DWORD           BehaviorFlags;
> }
> alias _D3DDEVICE_CREATION_PARAMETERS D3DDEVICE_CREATION_PARAMETERS;
>
>
> /* SwapEffects */
> enum _D3DSWAPEFFECT
> {
>     D3DSWAPEFFECT_DISCARD           = 1,
>     D3DSWAPEFFECT_FLIP              = 2,
>     D3DSWAPEFFECT_COPY              = 3,
>
>     D3DSWAPEFFECT_FORCE_DWORD       = 0x7fffffff
> }
> alias _D3DSWAPEFFECT D3DSWAPEFFECT;
>
> /* Pool types */
> enum _D3DPOOL
> {
>     D3DPOOL_DEFAULT                 = 0,
>     D3DPOOL_MANAGED                 = 1,
>     D3DPOOL_SYSTEMMEM               = 2,
>     D3DPOOL_SCRATCH                 = 3,
>
>     D3DPOOL_FORCE_DWORD             = 0x7fffffff
> }
> alias _D3DPOOL D3DPOOL;
>
>
> /* RefreshRate pre-defines */
> const int D3DPRESENT_RATE_DEFAULT      =   0x00000000;
>
>
> /* Resize Optional Parameters */
> struct _D3DPRESENT_PARAMETERS_
> {
>     UINT                BackBufferWidth;
>     UINT                BackBufferHeight;
>     D3DFORMAT           BackBufferFormat;
>     UINT                BackBufferCount;
>
>     D3DMULTISAMPLE_TYPE MultiSampleType;
>     DWORD               MultiSampleQuality;
>
>     D3DSWAPEFFECT       SwapEffect;
>     HWND                hDeviceWindow;
>     BOOL                Windowed;
>     BOOL                EnableAutoDepthStencil;
>     D3DFORMAT           AutoDepthStencilFormat;
>     DWORD               Flags;
>
>     /* FullScreen_RefreshRateInHz must be zero for Windowed mode */
>     UINT                FullScreen_RefreshRateInHz;
>     UINT                PresentationInterval;
> }
> alias _D3DPRESENT_PARAMETERS_ D3DPRESENT_PARAMETERS;
>
> // Values for D3DPRESENT_PARAMETERS.Flags
>
> const int D3DPRESENTFLAG_LOCKABLE_BACKBUFFER    =  0x00000001; const int D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL   =  0x00000002; const int D3DPRESENTFLAG_DEVICECLIP             =  0x00000004; const int D3DPRESENTFLAG_VIDEO                  =  0x00000010;
>
> /* Gamma Ramp: Same as DX7 */
>
> struct _D3DGAMMARAMP
> {
>     WORD                red  [256];
>     WORD                green[256];
>     WORD                blue [256];
> }
> alias _D3DGAMMARAMP D3DGAMMARAMP;
>
> /* Back buffer types */
> enum _D3DBACKBUFFER_TYPE
> {
>     D3DBACKBUFFER_TYPE_MONO         = 0,
>     D3DBACKBUFFER_TYPE_LEFT         = 1,
>     D3DBACKBUFFER_TYPE_RIGHT        = 2,
>
>     D3DBACKBUFFER_TYPE_FORCE_DWORD  = 0x7fffffff
> }
> alias _D3DBACKBUFFER_TYPE D3DBACKBUFFER_TYPE;
>
>
> /* Types */
> enum _D3DRESOURCETYPE
> {
>     D3DRTYPE_SURFACE                =  1,
>     D3DRTYPE_VOLUME                 =  2,
>     D3DRTYPE_TEXTURE                =  3,
>     D3DRTYPE_VOLUMETEXTURE          =  4,
>     D3DRTYPE_CUBETEXTURE            =  5,
>     D3DRTYPE_VERTEXBUFFER           =  6,
>     D3DRTYPE_INDEXBUFFER            =  7,
>
>
>     D3DRTYPE_FORCE_DWORD            = 0x7fffffff
> }
> alias _D3DRESOURCETYPE D3DRESOURCETYPE;
>
> /* Usages */
> const int D3DUSAGE_RENDERTARGET     =  0x00000001;
> const int D3DUSAGE_DEPTHSTENCIL     =  0x00000002;
> const int D3DUSAGE_DYNAMIC          =  0x00000200;
>
> // When passed to CheckDeviceFormat, D3DUSAGE_AUTOGENMIPMAP may return // D3DOK_NOAUTOGEN if the device doesn't support autogeneration for that
>format.
> // D3DOK_NOAUTOGEN is a success code, not a failure code... the SUCCEEDED
>and FAILED macros
> // will return true and false respectively for this code.
> const int D3DUSAGE_AUTOGENMIPMAP     = 0x00000400;
> const int D3DUSAGE_DMAP              = 0x00004000;
>
> // The following usages are valid only for querying CheckDeviceFormat
> const int D3DUSAGE_QUERY_LEGACYBUMPMAP          =  0x00008000;
> const int D3DUSAGE_QUERY_SRGBREAD               =  0x00010000;
> const int D3DUSAGE_QUERY_FILTER                 =  0x00020000;
> const int D3DUSAGE_QUERY_SRGBWRITE              =  0x00040000;
> const int D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING = 0x00080000;
> const int D3DUSAGE_QUERY_VERTEXTEXTURE          =  0x00100000;
>
> /* Usages for Vertex/Index buffers */
> const int D3DUSAGE_WRITEONLY         = 0x00000008;
> const int D3DUSAGE_SOFTWAREPROCESSING = 0x00000010;
> const int D3DUSAGE_DONOTCLIP         = 0x00000020;
> const int D3DUSAGE_POINTS            = 0x00000040;
> const int D3DUSAGE_RTPATCHES         = 0x00000080;
> const int D3DUSAGE_NPATCHES          = 0x00000100;
>
>
>
>
>
>
>
>
>
>
> /* CubeMap Face identifiers */
> enum _D3DCUBEMAP_FACES
> {
>     D3DCUBEMAP_FACE_POSITIVE_X     = 0,
>     D3DCUBEMAP_FACE_NEGATIVE_X     = 1,
>     D3DCUBEMAP_FACE_POSITIVE_Y     = 2,
>     D3DCUBEMAP_FACE_NEGATIVE_Y     = 3,
>     D3DCUBEMAP_FACE_POSITIVE_Z     = 4,
>     D3DCUBEMAP_FACE_NEGATIVE_Z     = 5,
>
>     D3DCUBEMAP_FACE_FORCE_DWORD    = 0x7fffffff
> }
> alias _D3DCUBEMAP_FACES D3DCUBEMAP_FACES;
>
>
> /* Lock flags */
>
> const int D3DLOCK_READONLY         =  0x00000010;
> const int D3DLOCK_DISCARD          =  0x00002000;
> const int D3DLOCK_NOOVERWRITE      =  0x00001000;
> const int D3DLOCK_NOSYSLOCK        =  0x00000800;
> const int D3DLOCK_DONOTWAIT        =  0x00004000;
>
> const int D3DLOCK_NO_DIRTY_UPDATE  =   0x00008000;
>
>
>
>
>
>
>
> /* Vertex Buffer Description */
> struct _D3DVERTEXBUFFER_DESC
> {
>     D3DFORMAT           Format;
>     D3DRESOURCETYPE     Type;
>     DWORD               Usage;
>     D3DPOOL             Pool;
>     UINT                Size;
>
>     DWORD               FVF;
>
> }
> alias _D3DVERTEXBUFFER_DESC D3DVERTEXBUFFER_DESC;
>
> /* Index Buffer Description */
> struct _D3DINDEXBUFFER_DESC
> {
>     D3DFORMAT           Format;
>     D3DRESOURCETYPE     Type;
>     DWORD               Usage;
>     D3DPOOL             Pool;
>     UINT                Size;
> }
> alias _D3DINDEXBUFFER_DESC D3DINDEXBUFFER_DESC;
>
>
> /* Surface Description */
> struct _D3DSURFACE_DESC
> {
>     D3DFORMAT           Format;
>     D3DRESOURCETYPE     Type;
>     DWORD               Usage;
>     D3DPOOL             Pool;
>
>     D3DMULTISAMPLE_TYPE MultiSampleType;
>     DWORD               MultiSampleQuality;
>     UINT                Width;
>     UINT                Height;
> }
> alias _D3DSURFACE_DESC D3DSURFACE_DESC;
>
> struct _D3DVOLUME_DESC
> {
>     D3DFORMAT           Format;
>     D3DRESOURCETYPE     Type;
>     DWORD               Usage;
>     D3DPOOL             Pool;
>
>     UINT                Width;
>     UINT                Height;
>     UINT                Depth;
> }
> alias _D3DVOLUME_DESC D3DVOLUME_DESC;
>
> /* Structure for LockRect */
> struct _D3DLOCKED_RECT
> {
>     INT                 Pitch;
>     void*               pBits;
> }
> alias _D3DLOCKED_RECT D3DLOCKED_RECT;
>
> /* Structures for LockBox */
> struct _D3DBOX
> {
>     UINT                Left;
>     UINT                Top;
>     UINT                Right;
>     UINT                Bottom;
>     UINT                Front;
>     UINT                Back;
> }
> alias _D3DBOX D3DBOX;
>
> struct _D3DLOCKED_BOX
> {
>     INT                 RowPitch;
>     INT                 SlicePitch;
>     void*               pBits;
> }
> alias _D3DLOCKED_BOX D3DLOCKED_BOX;
>
> /* Structures for LockRange */
> struct _D3DRANGE
> {
>     UINT                Offset;
>     UINT                Size;
> }
> alias _D3DRANGE D3DRANGE;
>
> /* Structures for high order primitives */
> struct _D3DRECTPATCH_INFO
> {
>     UINT                StartVertexOffsetWidth;
>     UINT                StartVertexOffsetHeight;
>     UINT                Width;
>     UINT                Height;
>     UINT                Stride;
>     D3DBASISTYPE        Basis;
>     D3DDEGREETYPE       Degree;
> }
> alias _D3DRECTPATCH_INFO D3DRECTPATCH_INFO;
>
> struct _D3DTRIPATCH_INFO
> {
>     UINT                StartVertexOffset;
>     UINT                NumVertices;
>     D3DBASISTYPE        Basis;
>     D3DDEGREETYPE       Degree;
> }
> alias _D3DTRIPATCH_INFO D3DTRIPATCH_INFO;
>
> /* Adapter Identifier */
>
> const int MAX_DEVICE_IDENTIFIER_STRING    =    512;
> struct _D3DADAPTER_IDENTIFIER9
> {
>     char            Driver[MAX_DEVICE_IDENTIFIER_STRING];
>     char            Description[MAX_DEVICE_IDENTIFIER_STRING];
>     char            DeviceName[32];         /* Device name for GDI (ex.
>\\.\DISPLAY1) */
>
> //#ifdef _WIN32
>     int   DriverVersion;          /* Defined for 32 bit components */
> //#else
> //    DWORD           DriverVersionLowPart;   ///* Defined for 16 bit
>driver components*/
> //    DWORD           DriverVersionHighPart;
> //#endif
>
>     DWORD           VendorId;
>     DWORD           DeviceId;
>     DWORD           SubSysId;
>     DWORD           Revision;
>
>     GUID            DeviceIdentifier;
>
>     DWORD           WHQLLevel;
>
> }
> alias _D3DADAPTER_IDENTIFIER9 D3DADAPTER_IDENTIFIER9;
>
>
> /* Raster Status structure returned by GetRasterStatus */
> struct _D3DRASTER_STATUS
> {
>     BOOL            InVBlank;
>     UINT            ScanLine;
> }
> alias _D3DRASTER_STATUS D3DRASTER_STATUS;
>
>
>
> /* Debug monitor tokens (DEBUG only)
>
>    Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as
>    passing a token to the debug monitor.  For example, if, after passing
>    D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values
>    are passed in, the enabled/disabled state of the debug
>    monitor will still persist.
>
>    The debug monitor defaults to enabled.
>
>    Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use.
> */
> enum _D3DDEBUGMONITORTOKENS
> {
>     D3DDMT_ENABLE            = 0,    // enable debug monitor
>     D3DDMT_DISABLE           = 1,    // disable debug monitor
>     D3DDMT_FORCE_DWORD     = 0x7fffffff,
> }
> alias _D3DDEBUGMONITORTOKENS D3DDEBUGMONITORTOKENS;
>
> // Async feedback
>
> enum _D3DQUERYTYPE {
>     D3DQUERYTYPE_VCACHE                 = 4, /* D3DISSUE_END */
>     D3DQUERYTYPE_RESOURCEMANAGER        = 5, /* D3DISSUE_END */
>     D3DQUERYTYPE_VERTEXSTATS            = 6, /* D3DISSUE_END */
>     D3DQUERYTYPE_EVENT                  = 8, /* D3DISSUE_END */
>     D3DQUERYTYPE_OCCLUSION              = 9, /* D3DISSUE_BEGIN,
>D3DISSUE_END */
> }
> alias _D3DQUERYTYPE D3DQUERYTYPE;
>
> // Flags field for Issue
> const int D3DISSUE_END   = (1 << 0); // Tells the runtime to issue the end
>of a query, changing it's state to "non-signaled".
> const int D3DISSUE_BEGIN  = (1 << 1); // Tells the runtime to issue the
>beginng of a query.
>
>
> // Flags field for GetData
> const int D3DGETDATA_FLUSH  = (1 << 0); // Tells the runtime to flush if
>the query is outstanding.
>
>
> struct _D3DRESOURCESTATS
> {
> // Data collected since last Present()
>     BOOL    bThrashing;             /* indicates if thrashing */
>     DWORD   ApproxBytesDownloaded;  /* Approximate number of bytes
>downloaded by resource manager */
>     DWORD   NumEvicts;              /* number of objects evicted */
>     DWORD   NumVidCreates;          /* number of objects created in video
>memory */
>     DWORD   LastPri;                /* priority of last object evicted */
>     DWORD   NumUsed;                /* number of objects set to the device
>*/
>     DWORD   NumUsedInVidMem;        /* number of objects set to the device,
>which are already in video memory */
> // Persistent data
>     DWORD   WorkingSet;             /* number of objects in video memory */
>     DWORD   WorkingSetBytes;        /* number of bytes in video memory */
>     DWORD   TotalManaged;           /* total number of managed objects */
>     DWORD   TotalBytes;             /* total number of bytes of managed
>objects */
> }
> alias _D3DRESOURCESTATS D3DRESOURCESTATS;
>
> const int D3DRTYPECOUNT = D3DRESOURCETYPE.D3DRTYPE_INDEXBUFFER + 1;
>
> struct _D3DDEVINFO_RESOURCEMANAGER
> {
>     D3DRESOURCESTATS    stats[D3DRTYPECOUNT];
> }
> alias _D3DDEVINFO_RESOURCEMANAGER D3DDEVINFO_RESOURCEMANAGER;
> alias D3DDEVINFO_RESOURCEMANAGER* LPD3DDEVINFO_RESOURCEMANAGER;
>
> struct _D3DDEVINFO_D3DVERTEXSTATS
> {
>     DWORD   NumRenderedTriangles;       /* total number of triangles that
>are not clipped in this frame */
>     DWORD   NumExtraClippingTriangles;  /* Number of new triangles
>generated by clipping */
> }
> alias _D3DDEVINFO_D3DVERTEXSTATS D3DDEVINFO_D3DVERTEXSTATS;
> alias D3DDEVINFO_D3DVERTEXSTATS* LPD3DDEVINFO_D3DVERTEXSTATS;
>
>
> struct _D3DDEVINFO_VCACHE {
>     DWORD   Pattern;                    /* bit pattern, return value must
>be FOUR_CC(?C?, ?A?, ?C?, ?H?) */
>     DWORD   OptMethod;                  /* optimization method 0 means
>longest strips, 1 means vertex cache based */
>     DWORD   CacheSize;                  /* cache size to optimize for
>(only required if type is 1) */
>     DWORD   MagicNumber;                /* used to determine when to
>restart strips (only required if type is 1)*/
> }
> alias _D3DDEVINFO_VCACHE D3DDEVINFO_VCACHE;
> alias D3DDEVINFO_VCACHE* LPD3DDEVINFO_VCACHE;
>
> } // align (4)
>
>
>//} /* (DIRECT3D_VERSION) */
>
>
>
>
>
>


August 31, 2004
aelmetwaly wrote:
> Hi there,
> I translated d3d9.h and d3d9caps.h and d3d9types.h into d but when i compile
> my program I can't simply link with d3d9.lib and dxguid.lib. the linker give
> invalid lib error :-(

Non-Digital Mars .libs will do that.

> It's a major drawback for d language that it doesn't support microsoft libs.

Yes.

Some of us have already discussed this at dsource:
http://www.dsource.org/forums/viewtopic.php?t=288

There are a couple theories for a way around this, but I don't think anyone's tested them yet.

> But these are the files for those interseted. I posted here because I don't

Thanks for posting.

> know how to add it to dsource. they have no automatic registeration of
> projects.

If you PM Brad at dsource, he'll likely either give you access to an existing project or create a new one for you.

By the way, I think someone's already ported D3D9 bindings to D:

http://svn.dsource.org/svn/projects/bindings/trunk/


-- 
Justin (a/k/a jcc7)
http://jcc_7.tripod.com/d/
August 31, 2004
J C Calvarese wrote:
> aelmetwaly wrote:
> 
>> Hi there,
>> I translated d3d9.h and d3d9caps.h and d3d9types.h into d but when i compile
>> my program I can't simply link with d3d9.lib and dxguid.lib. the linker give
>> invalid lib error :-(
> 
> 
> Non-Digital Mars .libs will do that.
> 
>> It's a major drawback for d language that it doesn't support microsoft libs.
> 
> 
> Yes.
> 
> Some of us have already discussed this at dsource:
> http://www.dsource.org/forums/viewtopic.php?t=288
> 
> There are a couple theories for a way around this, but I don't think anyone's tested them yet.
> 
>> But these are the files for those interseted. I posted here because I don't
> 
> 
> Thanks for posting.
> 
>> know how to add it to dsource. they have no automatic registeration of
>> projects.
> 
> 
> If you PM Brad at dsource, he'll likely either give you access to an existing project or create a new one for you.
> 
> By the way, I think someone's already ported D3D9 bindings to D:
> 
> http://svn.dsource.org/svn/projects/bindings/trunk/
> 
> 
The Bindings project at dsource.org is read/write for everyone with a SVN (Subversion) client.
August 31, 2004
Brad Anderson wrote:
> J C Calvarese wrote:
> 
>>
>> If you PM Brad at dsource, he'll likely either give you access to an existing project or create a new one for you.
>>
>> By the way, I think someone's already ported D3D9 bindings to D:
>>
>> http://svn.dsource.org/svn/projects/bindings/trunk/
>>
>>
> The Bindings project at dsource.org is read/write for everyone with a SVN (Subversion) client.

Cool. That's good to know.

-- 
Justin (a/k/a jcc7)
http://jcc_7.tripod.com/d/