- ////////////////////////////////////////////////////////////////////////////// 
- // 
- //  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) 
- #define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY (1 << 12) 
- #define D3DXSHADER_IEEE_STRICTNESS                (1 << 13) 
- #define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL        (1 << 16) 
-   
-   
- // optimization level flags 
- #define D3DXSHADER_OPTIMIZATION_LEVEL0            (1 << 14) 
- #define D3DXSHADER_OPTIMIZATION_LEVEL1            0 
- #define D3DXSHADER_OPTIMIZATION_LEVEL2            ((1 << 14) | (1 << 15)) 
- #define D3DXSHADER_OPTIMIZATION_LEVEL3            (1 << 15) 
-   
-   
-   
- //---------------------------------------------------------------------------- 
- // D3DXCONSTTABLE flags: 
- // ------------------- 
-   
- #define D3DXCONSTTABLE_LARGEADDRESSAWARE          (1 << 17) 
-   
-   
-   
- //---------------------------------------------------------------------------- 
- // D3DXHANDLE: 
- // ----------- 
- // Handle values used to efficiently reference shader and effect parameters. 
- // Strings can be used as handles.  However, handles are not always strings. 
- //---------------------------------------------------------------------------- 
-   
- #ifndef D3DXFX_LARGEADDRESS_HANDLE 
- typedef LPCSTR D3DXHANDLE; 
- #else 
- typedef UINT_PTR D3DXHANDLE; 
- #endif 
- 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; 
-   
-   
-   
- //---------------------------------------------------------------------------- 
- // 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, 
-     D3DXPT_UNSUPPORTED, 
-   
-     // 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; 
- }; 
-   
-   
- //---------------------------------------------------------------------------- 
- // 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.  The name of the file is encoded in UTF-8 format. 
- // 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 
- //  Flags 
- //      See D3DXCONSTTABLE_xxx 
- //  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); 
-   
- HRESULT WINAPI 
-     D3DXGetShaderConstantTableEx( 
-         CONST DWORD*                    pFunction, 
-         DWORD                           Flags, 
-         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); 
-   
-   
- //---------------------------------------------------------------------------- 
- // 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__ 
-   
-