////////////////////////////////////////////////////////////////////////////// // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: d3dx9shader.h // Content: D3DX Shader APIs // ////////////////////////////////////////////////////////////////////////////// #include "d3dx9.h" #ifndef __D3DX9SHADER_H__ #define __D3DX9SHADER_H__ #define D3DXTX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor)) #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) #ifndef D3DXFX_LARGEADDRESS_HANDLE typedef LPCSTR D3DXHANDLE; #else typedef UINT_PTR D3DXHANDLE; #endif typedef D3DXHANDLE *LPD3DXHANDLE; 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; }; typedef enum _D3DXINCLUDE_TYPE { D3DXINC_LOCAL, D3DXINC_SYSTEM, // force 32-bit size enum D3DXINC_FORCE_DWORD = 0x7fffffff } D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE; 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 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); 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); HRESULT WINAPI D3DXDisassembleShader( CONST DWORD* pShader, BOOL EnableColorCode, LPCSTR pComments, LPD3DXBUFFER* ppDisassembly); LPCSTR WINAPI D3DXGetPixelShaderProfile( LPDIRECT3DDEVICE9 pDevice); LPCSTR WINAPI D3DXGetVertexShaderProfile( LPDIRECT3DDEVICE9 pDevice); HRESULT WINAPI D3DXFindShaderComment( CONST DWORD* pFunction, DWORD FourCC, LPCVOID* ppData, UINT* pSizeInBytes); UINT WINAPI D3DXGetShaderSize( CONST DWORD* pFunction); DWORD WINAPI D3DXGetShaderVersion( CONST DWORD* pFunction); HRESULT WINAPI D3DXGetShaderInputSemantics( CONST DWORD* pFunction, D3DXSEMANTIC* pSemantics, UINT* pCount); HRESULT WINAPI D3DXGetShaderOutputSemantics( CONST DWORD* pFunction, D3DXSEMANTIC* pSemantics, UINT* pCount); HRESULT WINAPI D3DXGetShaderSamplers( CONST DWORD* pFunction, LPCSTR* pSamplers, UINT* pCount); HRESULT WINAPI D3DXGetShaderConstantTable( CONST DWORD* pFunction, LPD3DXCONSTANTTABLE* ppConstantTable); HRESULT WINAPI D3DXGetShaderConstantTableEx( CONST DWORD* pFunction, DWORD Flags, LPD3DXCONSTANTTABLE* ppConstantTable); HRESULT WINAPI D3DXCreateTextureShader( CONST DWORD* pFunction, LPD3DXTEXTURESHADER* ppTextureShader); 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__ */