d3dx9shader.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  1. #include <_mingw_unicode.h>
  2. #undef INTERFACE
  3. /*
  4. * Copyright 2008 Luis Busquets
  5. * Copyright 2014 Kai Tietz
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this library; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  20. */
  21. #include "d3dx9.h"
  22. #ifndef __D3DX9SHADER_H__
  23. #define __D3DX9SHADER_H__
  24. #define D3DXSHADER_DEBUG 0x1
  25. #define D3DXSHADER_SKIPVALIDATION 0x2
  26. #define D3DXSHADER_SKIPOPTIMIZATION 0x4
  27. #define D3DXSHADER_PACKMATRIX_ROWMAJOR 0x8
  28. #define D3DXSHADER_PACKMATRIX_COLUMNMAJOR 0x10
  29. #define D3DXSHADER_PARTIALPRECISION 0x20
  30. #define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT 0x40
  31. #define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT 0x80
  32. #define D3DXSHADER_NO_PRESHADER 0x100
  33. #define D3DXSHADER_AVOID_FLOW_CONTROL 0x200
  34. #define D3DXSHADER_PREFER_FLOW_CONTROL 0x400
  35. #define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000
  36. #define D3DXSHADER_IEEE_STRICTNESS 0x2000
  37. #define D3DXSHADER_OPTIMIZATION_LEVEL0 0x4000
  38. #define D3DXSHADER_OPTIMIZATION_LEVEL1 0x0
  39. #define D3DXSHADER_OPTIMIZATION_LEVEL2 0xC000
  40. #define D3DXSHADER_OPTIMIZATION_LEVEL3 0x8000
  41. #define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL 0x10000
  42. #define D3DXCONSTTABLE_LARGEADDRESSAWARE 0x20000
  43. typedef const char *D3DXHANDLE;
  44. typedef D3DXHANDLE *LPD3DXHANDLE;
  45. typedef enum _D3DXREGISTER_SET
  46. {
  47. D3DXRS_BOOL,
  48. D3DXRS_INT4,
  49. D3DXRS_FLOAT4,
  50. D3DXRS_SAMPLER,
  51. D3DXRS_FORCE_DWORD = 0x7fffffff
  52. } D3DXREGISTER_SET, *LPD3DXREGISTER_SET;
  53. typedef enum D3DXPARAMETER_CLASS
  54. {
  55. D3DXPC_SCALAR,
  56. D3DXPC_VECTOR,
  57. D3DXPC_MATRIX_ROWS,
  58. D3DXPC_MATRIX_COLUMNS,
  59. D3DXPC_OBJECT,
  60. D3DXPC_STRUCT,
  61. D3DXPC_FORCE_DWORD = 0x7fffffff,
  62. } D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS;
  63. typedef enum D3DXPARAMETER_TYPE
  64. {
  65. D3DXPT_VOID,
  66. D3DXPT_BOOL,
  67. D3DXPT_INT,
  68. D3DXPT_FLOAT,
  69. D3DXPT_STRING,
  70. D3DXPT_TEXTURE,
  71. D3DXPT_TEXTURE1D,
  72. D3DXPT_TEXTURE2D,
  73. D3DXPT_TEXTURE3D,
  74. D3DXPT_TEXTURECUBE,
  75. D3DXPT_SAMPLER,
  76. D3DXPT_SAMPLER1D,
  77. D3DXPT_SAMPLER2D,
  78. D3DXPT_SAMPLER3D,
  79. D3DXPT_SAMPLERCUBE,
  80. D3DXPT_PIXELSHADER,
  81. D3DXPT_VERTEXSHADER,
  82. D3DXPT_PIXELFRAGMENT,
  83. D3DXPT_VERTEXFRAGMENT,
  84. D3DXPT_UNSUPPORTED,
  85. D3DXPT_FORCE_DWORD = 0x7fffffff,
  86. } D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE;
  87. typedef struct _D3DXCONSTANTTABLE_DESC
  88. {
  89. const char *Creator;
  90. DWORD Version;
  91. UINT Constants;
  92. } D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC;
  93. typedef struct _D3DXCONSTANT_DESC
  94. {
  95. const char *Name;
  96. D3DXREGISTER_SET RegisterSet;
  97. UINT RegisterIndex;
  98. UINT RegisterCount;
  99. D3DXPARAMETER_CLASS Class;
  100. D3DXPARAMETER_TYPE Type;
  101. UINT Rows;
  102. UINT Columns;
  103. UINT Elements;
  104. UINT StructMembers;
  105. UINT Bytes;
  106. const void *DefaultValue;
  107. } D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC;
  108. #if D3DX_SDK_VERSION < 43
  109. DEFINE_GUID(IID_ID3DXConstantTable, 0x9dca3190, 0x38b9, 0x4fc3, 0x92, 0xe3, 0x39, 0xc6, 0xdd, 0xfb, 0x35, 0x8b);
  110. #else
  111. DEFINE_GUID(IID_ID3DXConstantTable, 0xab3c758f, 0x093e, 0x4356, 0xb7, 0x62, 0x4d, 0xb1, 0x8f, 0x1b, 0x3a, 0x01);
  112. #endif
  113. #undef INTERFACE
  114. #define INTERFACE ID3DXConstantTable
  115. DECLARE_INTERFACE_(ID3DXConstantTable, ID3DXBuffer)
  116. {
  117. /*** IUnknown methods ***/
  118. STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
  119. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  120. STDMETHOD_(ULONG, Release)(THIS) PURE;
  121. /*** ID3DXBuffer methods ***/
  122. STDMETHOD_(void *, GetBufferPointer)(THIS) PURE;
  123. STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
  124. /*** ID3DXConstantTable methods ***/
  125. STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;
  126. STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;
  127. STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE;
  128. STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
  129. STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE constant, const char *name) PURE;
  130. STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
  131. STDMETHOD(SetDefaults)(THIS_ struct IDirect3DDevice9 *device) PURE;
  132. STDMETHOD(SetValue)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  133. const void *data, UINT data_size) PURE;
  134. STDMETHOD(SetBool)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, WINBOOL value) PURE;
  135. STDMETHOD(SetBoolArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  136. const WINBOOL *values, UINT value_count) PURE;
  137. STDMETHOD(SetInt)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, INT value) PURE;
  138. STDMETHOD(SetIntArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  139. const INT *values, UINT value_count) PURE;
  140. STDMETHOD(SetFloat)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, float value) PURE;
  141. STDMETHOD(SetFloatArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  142. const float *values, UINT value_count) PURE;
  143. STDMETHOD(SetVector)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *value) PURE;
  144. STDMETHOD(SetVectorArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  145. const D3DXVECTOR4 *values, UINT value_count) PURE;
  146. STDMETHOD(SetMatrix)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *value) PURE;
  147. STDMETHOD(SetMatrixArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  148. const D3DXMATRIX *values, UINT value_count) PURE;
  149. STDMETHOD(SetMatrixPointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  150. const D3DXMATRIX **values, UINT value_count) PURE;
  151. STDMETHOD(SetMatrixTranspose)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  152. const D3DXMATRIX *value) PURE;
  153. STDMETHOD(SetMatrixTransposeArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  154. const D3DXMATRIX *values, UINT value_count) PURE;
  155. STDMETHOD(SetMatrixTransposePointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
  156. const D3DXMATRIX **values, UINT value_count) PURE;
  157. };
  158. #undef INTERFACE
  159. #if !defined(__cplusplus) || defined(CINTERFACE)
  160. /*** IUnknown methods ***/
  161. #define ID3DXConstantTable_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  162. #define ID3DXConstantTable_AddRef(p) (p)->lpVtbl->AddRef(p)
  163. #define ID3DXConstantTable_Release(p) (p)->lpVtbl->Release(p)
  164. /*** ID3DXBuffer methods ***/
  165. #define ID3DXConstantTable_GetBufferPointer(p) (p)->lpVtbl->GetBufferPointer(p)
  166. #define ID3DXConstantTable_GetBufferSize(p) (p)->lpVtbl->GetBufferSize(p)
  167. /*** ID3DXConstantTable methods ***/
  168. #define ID3DXConstantTable_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
  169. #define ID3DXConstantTable_GetConstantDesc(p,a,b,c) (p)->lpVtbl->GetConstantDesc(p,a,b,c)
  170. #define ID3DXConstantTable_GetSamplerIndex(p,a) (p)->lpVtbl->GetSamplerIndex(p,a)
  171. #define ID3DXConstantTable_GetConstant(p,a,b) (p)->lpVtbl->GetConstant(p,a,b)
  172. #define ID3DXConstantTable_GetConstantByName(p,a,b) (p)->lpVtbl->GetConstantByName(p,a,b)
  173. #define ID3DXConstantTable_GetConstantElement(p,a,b) (p)->lpVtbl->GetConstantElement(p,a,b)
  174. #define ID3DXConstantTable_SetDefaults(p,a) (p)->lpVtbl->SetDefaults(p,a)
  175. #define ID3DXConstantTable_SetValue(p,a,b,c,d) (p)->lpVtbl->SetValue(p,a,b,c,d)
  176. #define ID3DXConstantTable_SetBool(p,a,b,c) (p)->lpVtbl->SetBool(p,a,b,c)
  177. #define ID3DXConstantTable_SetBoolArray(p,a,b,c,d) (p)->lpVtbl->SetBoolArray(p,a,b,c,d)
  178. #define ID3DXConstantTable_SetInt(p,a,b,c) (p)->lpVtbl->SetInt(p,a,b,c)
  179. #define ID3DXConstantTable_SetIntArray(p,a,b,c,d) (p)->lpVtbl->SetIntArray(p,a,b,c,d)
  180. #define ID3DXConstantTable_SetFloat(p,a,b,c) (p)->lpVtbl->SetFloat(p,a,b,c)
  181. #define ID3DXConstantTable_SetFloatArray(p,a,b,c,d) (p)->lpVtbl->SetFloatArray(p,a,b,c,d)
  182. #define ID3DXConstantTable_SetVector(p,a,b,c) (p)->lpVtbl->SetVector(p,a,b,c)
  183. #define ID3DXConstantTable_SetVectorArray(p,a,b,c,d) (p)->lpVtbl->SetVectorArray(p,a,b,c,d)
  184. #define ID3DXConstantTable_SetMatrix(p,a,b,c) (p)->lpVtbl->SetMatrix(p,a,b,c)
  185. #define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixArray(p,a,b,c,d)
  186. #define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixPointerArray(p,a,b,c,d)
  187. #define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c) (p)->lpVtbl->SetMatrixTranspose(p,a,b,c)
  188. #define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixTransposeArray(p,a,b,c,d)
  189. #define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixTransposePointerArray(p,a,b,c,d)
  190. #else
  191. /*** IUnknown methods ***/
  192. #define ID3DXConstantTable_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  193. #define ID3DXConstantTable_AddRef(p) (p)->AddRef()
  194. #define ID3DXConstantTable_Release(p) (p)->Release()
  195. /*** ID3DXBuffer methods ***/
  196. #define ID3DXConstantTable_GetBufferPointer(p) (p)->GetBufferPointer()
  197. #define ID3DXConstantTable_GetBufferSize(p) (p)->GetBufferSize()
  198. /*** ID3DXConstantTable methods ***/
  199. #define ID3DXConstantTable_GetDesc(p,a) (p)->GetDesc(a)
  200. #define ID3DXConstantTable_GetConstantDesc(p,a,b,c) (p)->GetConstantDesc(a,b,c)
  201. #define ID3DXConstantTable_GetSamplerIndex(p,a) (p)->GetConstantDesc(a)
  202. #define ID3DXConstantTable_GetConstant(p,a,b) (p)->GetConstant(a,b)
  203. #define ID3DXConstantTable_GetConstantByName(p,a,b) (p)->GetConstantByName(a,b)
  204. #define ID3DXConstantTable_GetConstantElement(p,a,b) (p)->GetConstantElement(a,b)
  205. #define ID3DXConstantTable_SetDefaults(p,a) (p)->SetDefaults(a)
  206. #define ID3DXConstantTable_SetValue(p,a,b,c,d) (p)->SetValue(a,b,c,d)
  207. #define ID3DXConstantTable_SetBool(p,a,b,c) (p)->SetBool(a,b,c)
  208. #define ID3DXConstantTable_SetBoolArray(p,a,b,c,d) (p)->SetBoolArray(a,b,c,d)
  209. #define ID3DXConstantTable_SetInt(p,a,b,c) (p)->SetInt(a,b,c)
  210. #define ID3DXConstantTable_SetIntArray(p,a,b,c,d) (p)->SetIntArray(a,b,c,d)
  211. #define ID3DXConstantTable_SetFloat(p,a,b,c) (p)->SetFloat(a,b,c)
  212. #define ID3DXConstantTable_SetFloatArray(p,a,b,c,d) (p)->SetFloatArray(a,b,c,d)
  213. #define ID3DXConstantTable_SetVector(p,a,b,c) (p)->SetVector(a,b,c)
  214. #define ID3DXConstantTable_SetVectorArray(p,a,b,c,d) (p)->SetVectorArray(a,b,c,d)
  215. #define ID3DXConstantTable_SetMatrix(p,a,b,c) (p)->SetMatrix(a,b,c)
  216. #define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d) (p)->SetMatrixArray(a,b,c,d)
  217. #define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d) (p)->SetMatrixPointerArray(a,b,c,d)
  218. #define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c) (p)->SetMatrixTranspose(a,b,c)
  219. #define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d) (p)->SetMatrixTransposeArray(a,b,c,d)
  220. #define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d) (p)->SetMatrixTransposePointerArray(a,b,c,d)
  221. #endif
  222. typedef struct ID3DXConstantTable *LPD3DXCONSTANTTABLE;
  223. typedef interface ID3DXTextureShader *LPD3DXTEXTURESHADER;
  224. DEFINE_GUID(IID_ID3DXTextureShader, 0x3e3d67f8, 0xaa7a, 0x405d, 0xa8, 0x57, 0xba, 0x1, 0xd4, 0x75, 0x84, 0x26);
  225. #define INTERFACE ID3DXTextureShader
  226. DECLARE_INTERFACE_(ID3DXTextureShader, IUnknown)
  227. {
  228. STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppv) PURE;
  229. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  230. STDMETHOD_(ULONG, Release)(THIS) PURE;
  231. STDMETHOD(GetFunction)(THIS_ struct ID3DXBuffer **ppFunction) PURE;
  232. STDMETHOD(GetConstantBuffer)(THIS_ struct ID3DXBuffer **ppConstantBuffer) PURE;
  233. STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;
  234. STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;
  235. STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
  236. STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, const char *pName) PURE;
  237. STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
  238. STDMETHOD(SetDefaults)(THIS) PURE;
  239. STDMETHOD(SetValue)(THIS_ D3DXHANDLE hConstant, const void *pData, UINT Bytes) PURE;
  240. STDMETHOD(SetBool)(THIS_ D3DXHANDLE hConstant, WINBOOL b) PURE;
  241. STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hConstant, const WINBOOL *pb, UINT Count) PURE;
  242. STDMETHOD(SetInt)(THIS_ D3DXHANDLE hConstant, INT n) PURE;
  243. STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hConstant, const INT *pn, UINT Count) PURE;
  244. STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hConstant, FLOAT f) PURE;
  245. STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hConstant, const FLOAT *pf, UINT Count) PURE;
  246. STDMETHOD(SetVector)(THIS_ D3DXHANDLE hConstant, const D3DXVECTOR4 *pVector) PURE;
  247. STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hConstant, const D3DXVECTOR4 *pVector, UINT Count) PURE;
  248. STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix) PURE;
  249. STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix, UINT Count) PURE;
  250. STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX **ppMatrix, UINT Count) PURE;
  251. STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix) PURE;
  252. STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX *pMatrix, UINT Count) PURE;
  253. STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hConstant, const D3DXMATRIX **ppMatrix, UINT Count) PURE;
  254. };
  255. #undef INTERFACE
  256. typedef struct _D3DXMACRO
  257. {
  258. const char *Name;
  259. const char *Definition;
  260. } D3DXMACRO, *LPD3DXMACRO;
  261. typedef struct _D3DXSEMANTIC {
  262. UINT Usage;
  263. UINT UsageIndex;
  264. } D3DXSEMANTIC, *LPD3DXSEMANTIC;
  265. typedef enum _D3DXINCLUDE_TYPE
  266. {
  267. D3DXINC_LOCAL,
  268. D3DXINC_SYSTEM,
  269. D3DXINC_FORCE_DWORD = 0x7fffffff,
  270. } D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE;
  271. #define INTERFACE ID3DXInclude
  272. DECLARE_INTERFACE(ID3DXInclude)
  273. {
  274. STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE include_type, const char *filename,
  275. const void *parent_data, const void **data, UINT *bytes) PURE;
  276. STDMETHOD(Close)(THIS_ const void *data) PURE;
  277. };
  278. #undef INTERFACE
  279. #define ID3DXInclude_Open(p,a,b,c,d,e) (p)->lpVtbl->Open(p,a,b,c,d,e)
  280. #define ID3DXInclude_Close(p,a) (p)->lpVtbl->Close(p,a)
  281. typedef struct ID3DXInclude *LPD3DXINCLUDE;
  282. typedef struct _D3DXFRAGMENT_DESC
  283. {
  284. const char *Name;
  285. DWORD Target;
  286. } D3DXFRAGMENT_DESC, *LPD3DXFRAGMENT_DESC;
  287. DEFINE_GUID(IID_ID3DXFragmentLinker, 0x1a2c0cc2, 0xe5b6, 0x4ebc, 0x9e, 0x8d, 0x39, 0xe, 0x5, 0x78, 0x11, 0xb6);
  288. #define INTERFACE ID3DXFragmentLinker
  289. DECLARE_INTERFACE_(ID3DXFragmentLinker, IUnknown)
  290. {
  291. STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **ppv) PURE;
  292. STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  293. STDMETHOD_(ULONG, Release)(THIS) PURE;
  294. STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
  295. STDMETHOD_(UINT, GetNumberOfFragments)(THIS) PURE;
  296. STDMETHOD_(D3DXHANDLE, GetFragmentHandleByIndex)(THIS_ UINT index) PURE;
  297. STDMETHOD_(D3DXHANDLE, GetFragmentHandleByName)(THIS_ const char *name) PURE;
  298. STDMETHOD(GetFragmentDesc)(THIS_ D3DXHANDLE name, D3DXFRAGMENT_DESC *frag_desc) PURE;
  299. STDMETHOD(AddFragments)(THIS_ const DWORD *fragments) PURE;
  300. STDMETHOD(GetAllFragments)(THIS_ ID3DXBuffer **buffer) PURE;
  301. STDMETHOD(GetFragment)(THIS_ D3DXHANDLE name, ID3DXBuffer **buffer) PURE;
  302. STDMETHOD(LinkShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragmenthandles, UINT fragments, ID3DXBuffer **buffer, ID3DXBuffer **errors) PURE;
  303. STDMETHOD(LinkVertexShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragment_handles, UINT fragments, IDirect3DVertexShader9 **shader, ID3DXBuffer **errors) PURE;
  304. STDMETHOD(LinkPixelShader)(THIS_ const char *profile, DWORD flags, const D3DXHANDLE *fragment_handles, UINT fragments, IDirect3DPixelShader9 **shader, ID3DXBuffer **errors) PURE;
  305. STDMETHOD(ClearCache)(THIS) PURE;
  306. };
  307. #undef INTERFACE
  308. #ifdef __cplusplus
  309. extern "C" {
  310. #endif
  311. const char * WINAPI D3DXGetPixelShaderProfile(struct IDirect3DDevice9 *device);
  312. UINT WINAPI D3DXGetShaderSize(const DWORD *byte_code);
  313. DWORD WINAPI D3DXGetShaderVersion(const DWORD *byte_code);
  314. const char * WINAPI D3DXGetVertexShaderProfile(struct IDirect3DDevice9 *device);
  315. HRESULT WINAPI D3DXFindShaderComment(const DWORD *byte_code, DWORD fourcc, const void **data, UINT *size);
  316. HRESULT WINAPI D3DXGetShaderSamplers(const DWORD *byte_code, const char **samplers, UINT *count);
  317. HRESULT WINAPI D3DXAssembleShaderFromFileA(const char *filename, const D3DXMACRO *defines,
  318. ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  319. HRESULT WINAPI D3DXAssembleShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
  320. ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  321. #define D3DXAssembleShaderFromFile __MINGW_NAME_AW(D3DXAssembleShaderFromFile)
  322. HRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
  323. ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  324. HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
  325. ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  326. #define D3DXAssembleShaderFromResource __MINGW_NAME_AW(D3DXAssembleShaderFromResource)
  327. HRESULT WINAPI D3DXAssembleShader(const char *data, UINT data_len, const D3DXMACRO *defines,
  328. ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  329. HRESULT WINAPI D3DXCompileShader(const char *src_data, UINT data_len, const D3DXMACRO *defines,
  330. ID3DXInclude *include, const char *function_name, const char *profile, DWORD flags,
  331. ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
  332. HRESULT WINAPI D3DXDisassembleShader(const DWORD *pShader, WINBOOL EnableColorCode, const char *pComments, struct ID3DXBuffer **ppDisassembly);
  333. HRESULT WINAPI D3DXCompileShaderFromFileA(const char *filename, const D3DXMACRO *defines,
  334. ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
  335. ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
  336. HRESULT WINAPI D3DXCompileShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
  337. ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
  338. ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
  339. #define D3DXCompileShaderFromFile __MINGW_NAME_AW(D3DXCompileShaderFromFile)
  340. HRESULT WINAPI D3DXCompileShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
  341. ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
  342. ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
  343. HRESULT WINAPI D3DXCompileShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
  344. ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
  345. ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
  346. #define D3DXCompileShaderFromResource __MINGW_NAME_AW(D3DXCompileShaderFromResource)
  347. HRESULT WINAPI D3DXPreprocessShader(const char *data, UINT data_len, const D3DXMACRO *defines,
  348. ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  349. HRESULT WINAPI D3DXPreprocessShaderFromFileA(const char *filename, const D3DXMACRO *defines,
  350. ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  351. HRESULT WINAPI D3DXPreprocessShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
  352. ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  353. #define D3DXPreprocessShaderFromFile __MINGW_NAME_AW(D3DXPreprocessShaderFromFile)
  354. HRESULT WINAPI D3DXPreprocessShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
  355. ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  356. HRESULT WINAPI D3DXPreprocessShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
  357. ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
  358. #define D3DXPreprocessShaderFromResource __MINGW_NAME_AW(D3DXPreprocessShaderFromResource)
  359. HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, ID3DXConstantTable **constant_table);
  360. HRESULT WINAPI D3DXGetShaderConstantTable(const DWORD *byte_code, ID3DXConstantTable **constant_table);
  361. HRESULT WINAPI D3DXGetShaderInputSemantics(const DWORD *pFunction, D3DXSEMANTIC *pSemantics, UINT *pCount);
  362. HRESULT WINAPI D3DXGetShaderOutputSemantics(const DWORD *pFunction, D3DXSEMANTIC *pSemantics, UINT *pCount);
  363. HRESULT WINAPI D3DXCreateTextureShader(const DWORD *pFunction, ID3DXTextureShader **ppTextureShader);
  364. HRESULT WINAPI D3DXCreateFragmentLinker(IDirect3DDevice9 *device, UINT size, ID3DXFragmentLinker **linker);
  365. HRESULT WINAPI D3DXCreateFragmentLinkerEx(IDirect3DDevice9 *device, UINT size, DWORD flags, ID3DXFragmentLinker **linker);
  366. #ifdef __cplusplus
  367. }
  368. #endif
  369. typedef struct _D3DXSHADER_CONSTANTTABLE
  370. {
  371. DWORD Size;
  372. DWORD Creator;
  373. DWORD Version;
  374. DWORD Constants;
  375. DWORD ConstantInfo;
  376. DWORD Flags;
  377. DWORD Target;
  378. } D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE;
  379. typedef struct _D3DXSHADER_CONSTANTINFO
  380. {
  381. DWORD Name;
  382. WORD RegisterSet;
  383. WORD RegisterIndex;
  384. WORD RegisterCount;
  385. WORD Reserved;
  386. DWORD TypeInfo;
  387. DWORD DefaultValue;
  388. } D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO;
  389. typedef struct _D3DXSHADER_TYPEINFO
  390. {
  391. WORD Class;
  392. WORD Type;
  393. WORD Rows;
  394. WORD Columns;
  395. WORD Elements;
  396. WORD StructMembers;
  397. DWORD StructMemberInfo;
  398. } D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO;
  399. typedef struct _D3DXSHADER_STRUCTMEMBERINFO
  400. {
  401. DWORD Name;
  402. DWORD TypeInfo;
  403. } D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO;
  404. #endif /* __D3DX9SHADER_H__ */