summaryrefslogtreecommitdiffstats
path: root/dxsdk/Include/d3dx9shader.h
diff options
context:
space:
mode:
Diffstat (limited to 'dxsdk/Include/d3dx9shader.h')
-rw-r--r--dxsdk/Include/d3dx9shader.h1072
1 files changed, 1072 insertions, 0 deletions
diff --git a/dxsdk/Include/d3dx9shader.h b/dxsdk/Include/d3dx9shader.h
new file mode 100644
index 00000000..cae915a7
--- /dev/null
+++ b/dxsdk/Include/d3dx9shader.h
@@ -0,0 +1,1072 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// 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);
+
+
+
+#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__
+