www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - directX9 SDK in d but with out any use

reply "aelmetwaly" <aelmetwaly gawab.com> writes:
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

declaring a 2-D texture)

declaring a cube texture)

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

 // 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) */
Aug 31 2004
next sibling parent Q <Q_member pathlink.com> writes:
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

declaring a 2-D texture)

declaring a cube texture)

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

 // 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) */
Aug 31 2004
prev sibling parent reply J C Calvarese <jcc7 cox.net> writes:
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/
Aug 31 2004
parent reply Brad Anderson <brad dsource.dot.org> writes:
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.
Aug 31 2004
parent J C Calvarese <jcc7 cox.net> writes:
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/
Aug 31 2004