www.pudn.com > SGSDK.rar > d3dx9shader.h, change:2006-03-31,size:45257b


////////////////////////////////////////////////////////////////////////////// 
// 
//  Copyright (c) Microsoft Corporation.  All rights reserved. 
// 
//  File:       d3dx9shader.h 
//  Content:    D3DX Shader APIs 
// 
////////////////////////////////////////////////////////////////////////////// 
 
#include "d3dx9.h" 
 
#ifndef __D3DX9SHADER_H__ 
#define __D3DX9SHADER_H__ 
 
 
//--------------------------------------------------------------------------- 
// D3DXTX_VERSION: 
// -------------- 
// Version token used to create a procedural texture filler in effects 
// Used by D3DXFill[]TX functions 
//--------------------------------------------------------------------------- 
#define D3DXTX_VERSION(_Major,_Minor) (('T' < 24) | ('X' < 16) | ((_Major) < 8) | (_Minor)) 
 
 
 
//---------------------------------------------------------------------------- 
// D3DXSHADER flags: 
// ----------------- 
// D3DXSHADER_DEBUG 
//   Insert debug file/line/type/symbol information. 
// 
// D3DXSHADER_SKIPVALIDATION 
//   Do not validate the generated code against known capabilities and 
//   constraints.  This option is only recommended when compiling shaders 
//   you KNOW will work.  (ie. have compiled before without this option.) 
//   Shaders are always validated by D3D before they are set to the device. 
// 
// D3DXSHADER_SKIPOPTIMIZATION  
//   Instructs the compiler to skip optimization steps during code generation. 
//   Unless you are trying to isolate a problem in your code using this option  
//   is not recommended. 
// 
// D3DXSHADER_PACKMATRIX_ROWMAJOR 
//   Unless explicitly specified, matrices will be packed in row-major order 
//   on input and output from the shader. 
// 
// D3DXSHADER_PACKMATRIX_COLUMNMAJOR 
//   Unless explicitly specified, matrices will be packed in column-major  
//   order on input and output from the shader.  This is generally more  
//   efficient, since it allows vector-matrix multiplication to be performed 
//   using a series of dot-products. 
// 
// D3DXSHADER_PARTIALPRECISION 
//   Force all computations in resulting shader to occur at partial precision. 
//   This may result in faster evaluation of shaders on some hardware. 
// 
// D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT 
//   Force compiler to compile against the next highest available software 
//   target for vertex shaders.  This flag also turns optimizations off,  
//   and debugging on.   
// 
// D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT 
//   Force compiler to compile against the next highest available software 
//   target for pixel shaders.  This flag also turns optimizations off,  
//   and debugging on. 
// 
// D3DXSHADER_NO_PRESHADER 
//   Disables Preshaders. Using this flag will cause the compiler to not  
//   pull out static expression for evaluation on the host cpu 
// 
// D3DXSHADER_AVOID_FLOW_CONTROL 
//   Hint compiler to avoid flow-control constructs where possible. 
// 
// D3DXSHADER_PREFER_FLOW_CONTROL 
//   Hint compiler to prefer flow-control constructs where possible. 
// 
//---------------------------------------------------------------------------- 
 
#define D3DXSHADER_DEBUG                    (1 < 0) 
#define D3DXSHADER_SKIPVALIDATION           (1 < 1) 
#define D3DXSHADER_SKIPOPTIMIZATION         (1 < 2) 
#define D3DXSHADER_PACKMATRIX_ROWMAJOR      (1 < 3) 
#define D3DXSHADER_PACKMATRIX_COLUMNMAJOR   (1 < 4) 
#define D3DXSHADER_PARTIALPRECISION         (1 < 5) 
#define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT  (1 < 6) 
#define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT  (1 < 7) 
#define D3DXSHADER_NO_PRESHADER             (1 < 8) 
#define D3DXSHADER_AVOID_FLOW_CONTROL       (1 < 9) 
#define D3DXSHADER_PREFER_FLOW_CONTROL      (1 < 10) 
 
 
 
//---------------------------------------------------------------------------- 
// D3DXHANDLE: 
// ----------- 
// Handle values used to efficiently reference shader and effect parameters. 
// Strings can be used as handles.  However, handles are not always strings. 
//---------------------------------------------------------------------------- 
 
typedef LPCSTR D3DXHANDLE; 
typedef D3DXHANDLE *LPD3DXHANDLE; 
 
 
//---------------------------------------------------------------------------- 
// D3DXMACRO: 
// ---------- 
// Preprocessor macro definition.  The application pass in a NULL-terminated 
// array of this structure to various D3DX APIs.  This enables the application 
// to #define tokens at runtime, before the file is parsed. 
//---------------------------------------------------------------------------- 
 
typedef struct _D3DXMACRO 
{ 
    LPCSTR Name; 
    LPCSTR Definition; 
 
} D3DXMACRO, *LPD3DXMACRO; 
 
 
//---------------------------------------------------------------------------- 
// D3DXSEMANTIC: 
//---------------------------------------------------------------------------- 
 
typedef struct _D3DXSEMANTIC 
{ 
    UINT Usage; 
    UINT UsageIndex; 
 
} D3DXSEMANTIC, *LPD3DXSEMANTIC; 
 
 
 
//---------------------------------------------------------------------------- 
// D3DXFRAGMENT_DESC: 
//---------------------------------------------------------------------------- 
 
typedef struct _D3DXFRAGMENT_DESC 
{ 
    LPCSTR Name; 
    DWORD Target; 
 
} D3DXFRAGMENT_DESC, *LPD3DXFRAGMENT_DESC; 
 
 
//---------------------------------------------------------------------------- 
// D3DXREGISTER_SET: 
//---------------------------------------------------------------------------- 
 
typedef enum _D3DXREGISTER_SET 
{ 
    D3DXRS_BOOL, 
    D3DXRS_INT4, 
    D3DXRS_FLOAT4, 
    D3DXRS_SAMPLER, 
 
    // force 32-bit size enum 
    D3DXRS_FORCE_DWORD = 0x7fffffff 
 
} D3DXREGISTER_SET, *LPD3DXREGISTER_SET; 
 
 
//---------------------------------------------------------------------------- 
// D3DXPARAMETER_CLASS: 
//---------------------------------------------------------------------------- 
 
typedef enum _D3DXPARAMETER_CLASS 
{ 
    D3DXPC_SCALAR, 
    D3DXPC_VECTOR, 
    D3DXPC_MATRIX_ROWS, 
    D3DXPC_MATRIX_COLUMNS, 
    D3DXPC_OBJECT, 
    D3DXPC_STRUCT, 
 
    // force 32-bit size enum 
    D3DXPC_FORCE_DWORD = 0x7fffffff 
 
} D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS; 
 
 
//---------------------------------------------------------------------------- 
// D3DXPARAMETER_TYPE: 
//---------------------------------------------------------------------------- 
 
typedef enum _D3DXPARAMETER_TYPE 
{ 
    D3DXPT_VOID, 
    D3DXPT_BOOL, 
    D3DXPT_INT, 
    D3DXPT_FLOAT, 
    D3DXPT_STRING, 
    D3DXPT_TEXTURE, 
    D3DXPT_TEXTURE1D, 
    D3DXPT_TEXTURE2D, 
    D3DXPT_TEXTURE3D, 
    D3DXPT_TEXTURECUBE, 
    D3DXPT_SAMPLER, 
    D3DXPT_SAMPLER1D, 
    D3DXPT_SAMPLER2D, 
    D3DXPT_SAMPLER3D, 
    D3DXPT_SAMPLERCUBE, 
    D3DXPT_PIXELSHADER, 
    D3DXPT_VERTEXSHADER, 
    D3DXPT_PIXELFRAGMENT, 
    D3DXPT_VERTEXFRAGMENT, 
 
    // force 32-bit size enum 
    D3DXPT_FORCE_DWORD = 0x7fffffff 
 
} D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE; 
 
 
//---------------------------------------------------------------------------- 
// D3DXCONSTANTTABLE_DESC: 
//---------------------------------------------------------------------------- 
 
typedef struct _D3DXCONSTANTTABLE_DESC 
{ 
    LPCSTR Creator;                     // Creator string 
    DWORD Version;                      // Shader version 
    UINT Constants;                     // Number of constants 
 
} D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC; 
 
 
//---------------------------------------------------------------------------- 
// D3DXCONSTANT_DESC: 
//---------------------------------------------------------------------------- 
 
typedef struct _D3DXCONSTANT_DESC 
{ 
    LPCSTR Name;                        // Constant name 
 
    D3DXREGISTER_SET RegisterSet;       // Register set 
    UINT RegisterIndex;                 // Register index 
    UINT RegisterCount;                 // Number of registers occupied 
 
    D3DXPARAMETER_CLASS Class;          // Class 
    D3DXPARAMETER_TYPE Type;            // Component type 
 
    UINT Rows;                          // Number of rows 
    UINT Columns;                       // Number of columns 
    UINT Elements;                      // Number of array elements 
    UINT StructMembers;                 // Number of structure member sub-parameters 
 
    UINT Bytes;                         // Data size, in bytes 
    LPCVOID DefaultValue;               // Pointer to default value 
 
} D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC; 
 
 
 
//---------------------------------------------------------------------------- 
// ID3DXConstantTable: 
//---------------------------------------------------------------------------- 
 
typedef interface ID3DXConstantTable ID3DXConstantTable; 
typedef interface ID3DXConstantTable *LPD3DXCONSTANTTABLE; 
 
// {AB3C758F-093E-4356-B762-4DB18F1B3A01} 
DEFINE_GUID(IID_ID3DXConstantTable,  
0xab3c758f, 0x93e, 0x4356, 0xb7, 0x62, 0x4d, 0xb1, 0x8f, 0x1b, 0x3a, 0x1); 
 
 
#undef INTERFACE 
#define INTERFACE ID3DXConstantTable 
 
DECLARE_INTERFACE_(ID3DXConstantTable, IUnknown) 
{ 
    // IUnknown 
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; 
    STDMETHOD_(ULONG, AddRef)(THIS) PURE; 
    STDMETHOD_(ULONG, Release)(THIS) PURE; 
 
    // Buffer 
    STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE; 
    STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE; 
 
    // Descs 
    STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE; 
    STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE; 
    STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE; 
 
    // Handle operations 
    STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; 
    STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, LPCSTR pName) PURE; 
    STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; 
 
    // Set Constants 
    STDMETHOD(SetDefaults)(THIS_ LPDIRECT3DDEVICE9 pDevice) PURE; 
    STDMETHOD(SetValue)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, LPCVOID pData, UINT Bytes) PURE; 
    STDMETHOD(SetBool)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, BOOL b) PURE; 
    STDMETHOD(SetBoolArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST BOOL* pb, UINT Count) PURE; 
    STDMETHOD(SetInt)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, INT n) PURE; 
    STDMETHOD(SetIntArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST INT* pn, UINT Count) PURE; 
    STDMETHOD(SetFloat)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, FLOAT f) PURE; 
    STDMETHOD(SetFloatArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST FLOAT* pf, UINT Count) PURE; 
    STDMETHOD(SetVector)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector) PURE; 
    STDMETHOD(SetVectorArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector, UINT Count) PURE; 
    STDMETHOD(SetMatrix)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE; 
    STDMETHOD(SetMatrixArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; 
    STDMETHOD(SetMatrixPointerArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; 
    STDMETHOD(SetMatrixTranspose)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE; 
    STDMETHOD(SetMatrixTransposeArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; 
    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; 
}; 
 
 
//---------------------------------------------------------------------------- 
// ID3DXTextureShader: 
//---------------------------------------------------------------------------- 
 
typedef interface ID3DXTextureShader ID3DXTextureShader; 
typedef interface ID3DXTextureShader *LPD3DXTEXTURESHADER; 
 
// {3E3D67F8-AA7A-405d-A857-BA01D4758426} 
DEFINE_GUID(IID_ID3DXTextureShader,  
0x3e3d67f8, 0xaa7a, 0x405d, 0xa8, 0x57, 0xba, 0x1, 0xd4, 0x75, 0x84, 0x26); 
 
#undef INTERFACE 
#define INTERFACE ID3DXTextureShader 
 
DECLARE_INTERFACE_(ID3DXTextureShader, IUnknown) 
{ 
    // IUnknown 
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; 
    STDMETHOD_(ULONG, AddRef)(THIS) PURE; 
    STDMETHOD_(ULONG, Release)(THIS) PURE; 
 
    // Gets 
    STDMETHOD(GetFunction)(THIS_ LPD3DXBUFFER *ppFunction) PURE; 
    STDMETHOD(GetConstantBuffer)(THIS_ LPD3DXBUFFER *ppConstantBuffer) PURE; 
 
    // Descs 
    STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE; 
    STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE; 
 
    // Handle operations 
    STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; 
    STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, LPCSTR pName) PURE; 
    STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; 
 
    // Set Constants 
    STDMETHOD(SetDefaults)(THIS) PURE; 
    STDMETHOD(SetValue)(THIS_ D3DXHANDLE hConstant, LPCVOID pData, UINT Bytes) PURE; 
    STDMETHOD(SetBool)(THIS_ D3DXHANDLE hConstant, BOOL b) PURE; 
    STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hConstant, CONST BOOL* pb, UINT Count) PURE; 
    STDMETHOD(SetInt)(THIS_ D3DXHANDLE hConstant, INT n) PURE; 
    STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hConstant, CONST INT* pn, UINT Count) PURE; 
    STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hConstant, FLOAT f) PURE; 
    STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hConstant, CONST FLOAT* pf, UINT Count) PURE; 
    STDMETHOD(SetVector)(THIS_ D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector) PURE; 
    STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector, UINT Count) PURE; 
    STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE; 
    STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; 
    STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; 
    STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE; 
    STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; 
    STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; 
}; 
 
 
 
//---------------------------------------------------------------------------- 
// ID3DXFragmentLinker 
//---------------------------------------------------------------------------- 
 
typedef interface ID3DXFragmentLinker ID3DXFragmentLinker; 
typedef interface ID3DXFragmentLinker *LPD3DXFRAGMENTLINKER; 
 
// {1A2C0CC2-E5B6-4ebc-9E8D-390E057811B6} 
DEFINE_GUID(IID_ID3DXFragmentLinker,  
0x1a2c0cc2, 0xe5b6, 0x4ebc, 0x9e, 0x8d, 0x39, 0xe, 0x5, 0x78, 0x11, 0xb6); 
 
#undef INTERFACE 
#define INTERFACE ID3DXFragmentLinker 
 
DECLARE_INTERFACE_(ID3DXFragmentLinker, IUnknown) 
{ 
    // IUnknown 
    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; 
    STDMETHOD_(ULONG, AddRef)(THIS) PURE; 
    STDMETHOD_(ULONG, Release)(THIS) PURE; 
 
    // ID3DXFragmentLinker 
 
    // fragment access and information retrieval functions 
    STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; 
    STDMETHOD_(UINT, GetNumberOfFragments)(THIS) PURE; 
 
    STDMETHOD_(D3DXHANDLE, GetFragmentHandleByIndex)(THIS_ UINT Index) PURE; 
    STDMETHOD_(D3DXHANDLE, GetFragmentHandleByName)(THIS_ LPCSTR Name) PURE; 
    STDMETHOD(GetFragmentDesc)(THIS_ D3DXHANDLE Name, LPD3DXFRAGMENT_DESC FragDesc) PURE; 
 
    // add the fragments in the buffer to the linker 
    STDMETHOD(AddFragments)(THIS_ CONST DWORD *Fragments) PURE; 
 
    // Create a buffer containing the fragments.  Suitable for saving to disk 
    STDMETHOD(GetAllFragments)(THIS_ LPD3DXBUFFER *ppBuffer) PURE; 
    STDMETHOD(GetFragment)(THIS_ D3DXHANDLE Name, LPD3DXBUFFER *ppBuffer) PURE; 
 
    STDMETHOD(LinkShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPD3DXBUFFER *ppBuffer, LPD3DXBUFFER *ppErrorMsgs) PURE; 
    STDMETHOD(LinkVertexShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPDIRECT3DVERTEXSHADER9 *pVShader, LPD3DXBUFFER *ppErrorMsgs) PURE; 
    STDMETHOD(LinkPixelShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPDIRECT3DPIXELSHADER9 *pPShader, LPD3DXBUFFER *ppErrorMsgs) PURE; 
 
    STDMETHOD(ClearCache)(THIS) PURE; 
}; 
 
 
//---------------------------------------------------------------------------- 
// D3DXINCLUDE_TYPE: 
//---------------------------------------------------------------------------- 
 
typedef enum _D3DXINCLUDE_TYPE 
{ 
    D3DXINC_LOCAL, 
    D3DXINC_SYSTEM, 
 
    // force 32-bit size enum 
    D3DXINC_FORCE_DWORD = 0x7fffffff 
 
} D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE; 
 
 
//---------------------------------------------------------------------------- 
// ID3DXInclude: 
// ------------- 
// This interface is intended to be implemented by the application, and can 
// be used by various D3DX APIs.  This enables application-specific handling 
// of #include directives in source files. 
// 
// Open() 
//    Opens an include file.  If successful, it should fill in ppData and 
//    pBytes.  The data pointer returned must remain valid until Close is 
//    subsequently called. 
// Close() 
//    Closes an include file.  If Open was successful, Close is guaranteed 
//    to be called before the API using this interface returns. 
//---------------------------------------------------------------------------- 
 
typedef interface ID3DXInclude ID3DXInclude; 
typedef interface ID3DXInclude *LPD3DXINCLUDE; 
 
#undef INTERFACE 
#define INTERFACE ID3DXInclude 
 
DECLARE_INTERFACE(ID3DXInclude) 
{ 
    STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE; 
    STDMETHOD(Close)(THIS_ LPCVOID pData) PURE; 
}; 
 
 
////////////////////////////////////////////////////////////////////////////// 
// APIs ////////////////////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////// 
 
#ifdef __cplusplus 
extern "C" { 
#endif //__cplusplus 
 
 
//---------------------------------------------------------------------------- 
// D3DXAssembleShader: 
// ------------------- 
// Assembles a shader. 
// 
// Parameters: 
//  pSrcFile 
//      Source file name 
//  hSrcModule 
//      Module handle. if NULL, current module will be used 
//  pSrcResource 
//      Resource name in module 
//  pSrcData 
//      Pointer to source code 
//  SrcDataLen 
//      Size of source code, in bytes 
//  pDefines 
//      Optional NULL-terminated array of preprocessor macro definitions. 
//  pInclude 
//      Optional interface pointer to use for handling #include directives. 
//      If this parameter is NULL, #includes will be honored when assembling 
//      from file, and will error when assembling from resource or memory. 
//  Flags 
//      See D3DXSHADER_xxx flags 
//  ppShader 
//      Returns a buffer containing the created shader.  This buffer contains 
//      the assembled shader code, as well as any embedded debug info. 
//  ppErrorMsgs 
//      Returns a buffer containing a listing of errors and warnings that were 
//      encountered during assembly.  If you are running in a debugger, 
//      these are the same messages you will see in your debug output. 
//---------------------------------------------------------------------------- 
 
 
HRESULT WINAPI 
    D3DXAssembleShaderFromFileA( 
        LPCSTR                          pSrcFile, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
HRESULT WINAPI 
    D3DXAssembleShaderFromFileW( 
        LPCWSTR                         pSrcFile, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
#ifdef UNICODE 
#define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileW 
#else 
#define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileA 
#endif 
 
 
HRESULT WINAPI 
    D3DXAssembleShaderFromResourceA( 
        HMODULE                         hSrcModule, 
        LPCSTR                          pSrcResource, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
HRESULT WINAPI 
    D3DXAssembleShaderFromResourceW( 
        HMODULE                         hSrcModule, 
        LPCWSTR                         pSrcResource, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
#ifdef UNICODE 
#define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceW 
#else 
#define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceA 
#endif 
 
 
HRESULT WINAPI 
    D3DXAssembleShader( 
        LPCSTR                          pSrcData, 
        UINT                            SrcDataLen, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
 
 
//---------------------------------------------------------------------------- 
// D3DXCompileShader: 
// ------------------ 
// Compiles a shader. 
// 
// Parameters: 
//  pSrcFile 
//      Source file name. 
//  hSrcModule 
//      Module handle. if NULL, current module will be used. 
//  pSrcResource 
//      Resource name in module. 
//  pSrcData 
//      Pointer to source code. 
//  SrcDataLen 
//      Size of source code, in bytes. 
//  pDefines 
//      Optional NULL-terminated array of preprocessor macro definitions. 
//  pInclude 
//      Optional interface pointer to use for handling #include directives. 
//      If this parameter is NULL, #includes will be honored when compiling 
//      from file, and will error when compiling from resource or memory. 
//  pFunctionName 
//      Name of the entrypoint function where execution should begin. 
//  pProfile 
//      Instruction set to be used when generating code.  Currently supported 
//      profiles are "vs_1_1", "vs_2_0", "vs_2_a", "vs_2_sw", "ps_1_1",  
//      "ps_1_2", "ps_1_3", "ps_1_4", "ps_2_0", "ps_2_a", "ps_2_sw", "tx_1_0" 
//  Flags 
//      See D3DXSHADER_xxx flags. 
//  ppShader 
//      Returns a buffer containing the created shader.  This buffer contains 
//      the compiled shader code, as well as any embedded debug and symbol 
//      table info.  (See D3DXGetShaderConstantTable) 
//  ppErrorMsgs 
//      Returns a buffer containing a listing of errors and warnings that were 
//      encountered during the compile.  If you are running in a debugger, 
//      these are the same messages you will see in your debug output. 
//  ppConstantTable 
//      Returns a ID3DXConstantTable object which can be used to set 
//      shader constants to the device.  Alternatively, an application can 
//      parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within 
//      the shader. 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI 
    D3DXCompileShaderFromFileA( 
        LPCSTR                          pSrcFile, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        LPCSTR                          pFunctionName, 
        LPCSTR                          pProfile, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs, 
        LPD3DXCONSTANTTABLE*            ppConstantTable); 
 
HRESULT WINAPI 
    D3DXCompileShaderFromFileW( 
        LPCWSTR                         pSrcFile, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        LPCSTR                          pFunctionName, 
        LPCSTR                          pProfile, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs, 
        LPD3DXCONSTANTTABLE*            ppConstantTable); 
 
#ifdef UNICODE 
#define D3DXCompileShaderFromFile D3DXCompileShaderFromFileW 
#else 
#define D3DXCompileShaderFromFile D3DXCompileShaderFromFileA 
#endif 
 
 
HRESULT WINAPI 
    D3DXCompileShaderFromResourceA( 
        HMODULE                         hSrcModule, 
        LPCSTR                          pSrcResource, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        LPCSTR                          pFunctionName, 
        LPCSTR                          pProfile, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs, 
        LPD3DXCONSTANTTABLE*            ppConstantTable); 
 
HRESULT WINAPI 
    D3DXCompileShaderFromResourceW( 
        HMODULE                         hSrcModule, 
        LPCWSTR                         pSrcResource, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        LPCSTR                          pFunctionName, 
        LPCSTR                          pProfile, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs, 
        LPD3DXCONSTANTTABLE*            ppConstantTable); 
 
#ifdef UNICODE 
#define D3DXCompileShaderFromResource D3DXCompileShaderFromResourceW 
#else 
#define D3DXCompileShaderFromResource D3DXCompileShaderFromResourceA 
#endif 
 
 
HRESULT WINAPI 
    D3DXCompileShader( 
        LPCSTR                          pSrcData, 
        UINT                            SrcDataLen, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        LPCSTR                          pFunctionName, 
        LPCSTR                          pProfile, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs, 
        LPD3DXCONSTANTTABLE*            ppConstantTable); 
 
 
//---------------------------------------------------------------------------- 
// D3DXDisassembleShader: 
// ---------------------- 
// Takes a binary shader, and returns a buffer containing text assembly. 
// 
// Parameters: 
//  pShader 
//      Pointer to the shader byte code. 
//  ShaderSizeInBytes 
//      Size of the shader byte code in bytes. 
//  EnableColorCode 
//      Emit HTML tags for color coding the output? 
//  pComments 
//      Pointer to a comment string to include at the top of the shader. 
//  ppDisassembly 
//      Returns a buffer containing the disassembled shader. 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI 
    D3DXDisassembleShader( 
        CONST DWORD*                    pShader,  
        BOOL                            EnableColorCode,  
        LPCSTR                          pComments,  
        LPD3DXBUFFER*                   ppDisassembly); 
 
 
//---------------------------------------------------------------------------- 
// D3DXGetPixelShaderProfile/D3DXGetVertexShaderProfile: 
// ----------------------------------------------------- 
// Returns the name of the HLSL profile best suited to a given device. 
// 
// Parameters: 
//  pDevice 
//      Pointer to the device in question 
//---------------------------------------------------------------------------- 
 
LPCSTR WINAPI 
    D3DXGetPixelShaderProfile( 
        LPDIRECT3DDEVICE9               pDevice); 
 
LPCSTR WINAPI 
    D3DXGetVertexShaderProfile( 
        LPDIRECT3DDEVICE9               pDevice); 
 
 
//---------------------------------------------------------------------------- 
// D3DXFindShaderComment: 
// ---------------------- 
// Searches through a shader for a particular comment, denoted by a FourCC in 
// the first DWORD of the comment.  If the comment is not found, and no other 
// error has occurred, S_FALSE is returned. 
// 
// Parameters: 
//  pFunction 
//      Pointer to the function DWORD stream 
//  FourCC 
//      FourCC used to identify the desired comment block. 
//  ppData 
//      Returns a pointer to the comment data (not including comment token 
//      and FourCC).  Can be NULL. 
//  pSizeInBytes 
//      Returns the size of the comment data in bytes.  Can be NULL. 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI 
    D3DXFindShaderComment( 
        CONST DWORD*                    pFunction, 
        DWORD                           FourCC, 
        LPCVOID*                        ppData, 
        UINT*                           pSizeInBytes); 
 
 
//---------------------------------------------------------------------------- 
// D3DXGetShaderSize: 
// ------------------ 
// Returns the size of the shader byte-code, in bytes. 
// 
// Parameters: 
//  pFunction 
//      Pointer to the function DWORD stream 
//---------------------------------------------------------------------------- 
 
UINT WINAPI 
    D3DXGetShaderSize( 
        CONST DWORD*                    pFunction); 
 
 
//---------------------------------------------------------------------------- 
// D3DXGetShaderVersion: 
// ----------------------- 
// Returns the shader version of a given shader.  Returns zero if the shader  
// function is NULL. 
// 
// Parameters: 
//  pFunction 
//      Pointer to the function DWORD stream 
//---------------------------------------------------------------------------- 
 
DWORD WINAPI 
    D3DXGetShaderVersion( 
        CONST DWORD*                    pFunction); 
 
//---------------------------------------------------------------------------- 
// D3DXGetShaderSemantics: 
// ----------------------- 
// Gets semantics for all input elements referenced inside a given shader. 
// 
// Parameters: 
//  pFunction 
//      Pointer to the function DWORD stream 
//  pSemantics 
//      Pointer to an array of D3DXSEMANTIC structures.  The function will 
//      fill this array with the semantics for each input element referenced 
//      inside the shader.  This array is assumed to contain at least 
//      MAXD3DDECLLENGTH elements. 
//  pCount 
//      Returns the number of elements referenced by the shader 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI 
    D3DXGetShaderInputSemantics( 
        CONST DWORD*                    pFunction, 
        D3DXSEMANTIC*                   pSemantics, 
        UINT*                           pCount); 
 
HRESULT WINAPI 
    D3DXGetShaderOutputSemantics( 
        CONST DWORD*                    pFunction, 
        D3DXSEMANTIC*                   pSemantics, 
        UINT*                           pCount); 
 
 
//---------------------------------------------------------------------------- 
// D3DXGetShaderSamplers: 
// ---------------------- 
// Gets semantics for all input elements referenced inside a given shader. 
// 
// pFunction 
//      Pointer to the function DWORD stream 
// pSamplers 
//      Pointer to an array of LPCSTRs.  The function will fill this array 
//      with pointers to the sampler names contained within pFunction, for 
//      each sampler referenced inside the shader.  This array is assumed to 
//      contain at least 16 elements. 
// pCount 
//      Returns the number of samplers referenced by the shader 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI 
    D3DXGetShaderSamplers( 
        CONST DWORD*                    pFunction, 
        LPCSTR*                         pSamplers, 
        UINT*                           pCount); 
 
 
//---------------------------------------------------------------------------- 
// D3DXGetShaderConstantTable: 
// --------------------------- 
// Gets shader constant table embedded inside shader.  A constant table is 
// generated by D3DXAssembleShader and D3DXCompileShader, and is embedded in 
// the body of the shader. 
// 
// Parameters: 
//  pFunction 
//      Pointer to the function DWORD stream 
//  ppConstantTable 
//      Returns a ID3DXConstantTable object which can be used to set 
//      shader constants to the device.  Alternatively, an application can 
//      parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within 
//      the shader. 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI 
    D3DXGetShaderConstantTable( 
        CONST DWORD*                    pFunction, 
        LPD3DXCONSTANTTABLE*            ppConstantTable); 
 
 
 
//---------------------------------------------------------------------------- 
// D3DXCreateTextureShader: 
// ------------------------ 
// Creates a texture shader object, given the compiled shader. 
// 
// Parameters 
//  pFunction 
//      Pointer to the function DWORD stream 
//  ppTextureShader 
//      Returns a ID3DXTextureShader object which can be used to procedurally  
//      fill the contents of a texture using the D3DXFillTextureTX functions. 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI 
    D3DXCreateTextureShader( 
        CONST DWORD*                    pFunction,  
        LPD3DXTEXTURESHADER*            ppTextureShader); 
 
 
 
//---------------------------------------------------------------------------- 
// D3DXGatherFragments: 
// ------------------- 
// Assembles shader fragments into a buffer to be passed to a fragment linker. 
//   will generate shader fragments for all fragments in the file 
// 
// Parameters: 
//  pSrcFile 
//      Source file name 
//  hSrcModule 
//      Module handle. if NULL, current module will be used 
//  pSrcResource 
//      Resource name in module 
//  pSrcData 
//      Pointer to source code 
//  SrcDataLen 
//      Size of source code, in bytes 
//  pDefines 
//      Optional NULL-terminated array of preprocessor macro definitions. 
//  pInclude 
//      Optional interface pointer to use for handling #include directives. 
//      If this parameter is NULL, #includes will be honored when assembling 
//      from file, and will error when assembling from resource or memory. 
//  Flags 
//      See D3DXSHADER_xxx flags 
//  ppShader 
//      Returns a buffer containing the created shader fragments.  This buffer contains 
//      the assembled shader code, as well as any embedded debug info. 
//  ppErrorMsgs 
//      Returns a buffer containing a listing of errors and warnings that were 
//      encountered during assembly.  If you are running in a debugger, 
//      these are the same messages you will see in your debug output. 
//---------------------------------------------------------------------------- 
 
 
HRESULT WINAPI 
D3DXGatherFragmentsFromFileA( 
        LPCSTR                          pSrcFile, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
HRESULT WINAPI 
D3DXGatherFragmentsFromFileW( 
        LPCWSTR                         pSrcFile, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
#ifdef UNICODE 
#define D3DXGatherFragmentsFromFile D3DXGatherFragmentsFromFileW 
#else 
#define D3DXGatherFragmentsFromFile D3DXGatherFragmentsFromFileA 
#endif 
 
 
HRESULT WINAPI 
    D3DXGatherFragmentsFromResourceA( 
        HMODULE                         hSrcModule, 
        LPCSTR                          pSrcResource, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
HRESULT WINAPI 
    D3DXGatherFragmentsFromResourceW( 
        HMODULE                         hSrcModule, 
        LPCWSTR                         pSrcResource, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
#ifdef UNICODE 
#define D3DXGatherFragmentsFromResource D3DXGatherFragmentsFromResourceW 
#else 
#define D3DXGatherFragmentsFromResource D3DXGatherFragmentsFromResourceA 
#endif 
 
 
HRESULT WINAPI 
    D3DXGatherFragments( 
        LPCSTR                          pSrcData, 
        UINT                            SrcDataLen, 
        CONST D3DXMACRO*                pDefines, 
        LPD3DXINCLUDE                   pInclude, 
        DWORD                           Flags, 
        LPD3DXBUFFER*                   ppShader, 
        LPD3DXBUFFER*                   ppErrorMsgs); 
 
 
 
//---------------------------------------------------------------------------- 
// D3DXCreateFragmentLinker: 
// ------------------------- 
// Creates a fragment linker with a given cache size.  The interface returned  
// can be used to link together shader fragments.  (both HLSL & ASM fragements) 
// 
// Parameters: 
//  pDevice 
//      Pointer to the device on which to create the shaders 
//  ShaderCacheSize 
//      Size of the shader cache 
//  ppFragmentLinker 
//      pointer to a memory location to put the created interface pointer 
// 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI 
    D3DXCreateFragmentLinker( 
        LPDIRECT3DDEVICE9               pDevice, 
        UINT                            ShaderCacheSize, 
        LPD3DXFRAGMENTLINKER*           ppFragmentLinker); 
 
 
//---------------------------------------------------------------------------- 
// D3DXPreprocessShader: 
// --------------------- 
// Runs the preprocessor on the specified shader or effect, but does 
// not actually compile it.  This is useful for evaluating the #includes 
// and #defines in a shader and then emitting a reformatted token stream 
// for debugging purposes or for generating a self-contained shader. 
// 
// Parameters: 
//  pSrcFile 
//      Source file name 
//  hSrcModule 
//      Module handle. if NULL, current module will be used 
//  pSrcResource 
//      Resource name in module 
//  pSrcData 
//      Pointer to source code 
//  SrcDataLen 
//      Size of source code, in bytes 
//  pDefines 
//      Optional NULL-terminated array of preprocessor macro definitions. 
//  pInclude 
//      Optional interface pointer to use for handling #include directives. 
//      If this parameter is NULL, #includes will be honored when assembling 
//      from file, and will error when assembling from resource or memory. 
//  ppShaderText 
//      Returns a buffer containing a single large string that represents 
//      the resulting formatted token stream 
//  ppErrorMsgs 
//      Returns a buffer containing a listing of errors and warnings that were 
//      encountered during assembly.  If you are running in a debugger, 
//      these are the same messages you will see in your debug output. 
//---------------------------------------------------------------------------- 
 
HRESULT WINAPI  
    D3DXPreprocessShaderFromFileA( 
        LPCSTR                       pSrcFile, 
        CONST D3DXMACRO*             pDefines, 
        LPD3DXINCLUDE                pInclude, 
        LPD3DXBUFFER*                ppShaderText, 
        LPD3DXBUFFER*                ppErrorMsgs); 
                                              
HRESULT WINAPI  
    D3DXPreprocessShaderFromFileW( 
        LPCWSTR                      pSrcFile, 
        CONST D3DXMACRO*             pDefines, 
        LPD3DXINCLUDE                pInclude, 
        LPD3DXBUFFER*                ppShaderText, 
        LPD3DXBUFFER*                ppErrorMsgs); 
 
#ifdef UNICODE 
#define D3DXPreprocessShaderFromFile D3DXPreprocessShaderFromFileW 
#else 
#define D3DXPreprocessShaderFromFile D3DXPreprocessShaderFromFileA 
#endif 
                                              
HRESULT WINAPI  
    D3DXPreprocessShaderFromResourceA( 
        HMODULE                      hSrcModule, 
        LPCSTR                       pSrcResource, 
        CONST D3DXMACRO*             pDefines, 
        LPD3DXINCLUDE                pInclude, 
        LPD3DXBUFFER*                ppShaderText, 
        LPD3DXBUFFER*                ppErrorMsgs); 
 
HRESULT WINAPI  
    D3DXPreprocessShaderFromResourceW( 
        HMODULE                      hSrcModule, 
        LPCWSTR                      pSrcResource, 
        CONST D3DXMACRO*             pDefines, 
        LPD3DXINCLUDE                pInclude, 
        LPD3DXBUFFER*                ppShaderText, 
        LPD3DXBUFFER*                ppErrorMsgs); 
 
#ifdef UNICODE 
#define D3DXPreprocessShaderFromResource D3DXPreprocessShaderFromResourceW 
#else 
#define D3DXPreprocessShaderFromResource D3DXPreprocessShaderFromResourceA 
#endif 
 
HRESULT WINAPI  
    D3DXPreprocessShader( 
        LPCSTR                       pSrcData, 
        UINT                         SrcDataSize, 
        CONST D3DXMACRO*             pDefines, 
        LPD3DXINCLUDE                pInclude, 
        LPD3DXBUFFER*                ppShaderText, 
        LPD3DXBUFFER*                ppErrorMsgs); 
 
 
#ifdef __cplusplus 
} 
#endif //__cplusplus 
 
 
////////////////////////////////////////////////////////////////////////////// 
// Shader comment block layouts ////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////// 
 
//---------------------------------------------------------------------------- 
// D3DXSHADER_CONSTANTTABLE: 
// ------------------------- 
// Shader constant information; included as an CTAB comment block inside 
// shaders.  All offsets are BYTE offsets from start of CONSTANTTABLE struct. 
// Entries in the table are sorted by Name in ascending order. 
//---------------------------------------------------------------------------- 
 
typedef struct _D3DXSHADER_CONSTANTTABLE 
{ 
    DWORD Size;             // sizeof(D3DXSHADER_CONSTANTTABLE) 
    DWORD Creator;          // LPCSTR offset 
    DWORD Version;          // shader version 
    DWORD Constants;        // number of constants 
    DWORD ConstantInfo;     // D3DXSHADER_CONSTANTINFO[Constants] offset 
    DWORD Flags;            // flags shader was compiled with 
    DWORD Target;           // LPCSTR offset  
 
} D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE; 
 
 
typedef struct _D3DXSHADER_CONSTANTINFO 
{ 
    DWORD Name;             // LPCSTR offset 
    WORD  RegisterSet;      // D3DXREGISTER_SET 
    WORD  RegisterIndex;    // register number 
    WORD  RegisterCount;    // number of registers 
    WORD  Reserved;         // reserved 
    DWORD TypeInfo;         // D3DXSHADER_TYPEINFO offset 
    DWORD DefaultValue;     // offset of default value 
 
} D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO; 
 
 
typedef struct _D3DXSHADER_TYPEINFO 
{ 
    WORD  Class;            // D3DXPARAMETER_CLASS 
    WORD  Type;             // D3DXPARAMETER_TYPE 
    WORD  Rows;             // number of rows (matrices) 
    WORD  Columns;          // number of columns (vectors and matrices) 
    WORD  Elements;         // array dimension 
    WORD  StructMembers;    // number of struct members 
    DWORD StructMemberInfo; // D3DXSHADER_STRUCTMEMBERINFO[Members] offset 
 
} D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO; 
 
 
typedef struct _D3DXSHADER_STRUCTMEMBERINFO 
{ 
    DWORD Name;             // LPCSTR offset 
    DWORD TypeInfo;         // D3DXSHADER_TYPEINFO offset 
 
} D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO; 
 
 
 
#endif //__D3DX9SHADER_H__