Subversion Repositories Games.Chess Giants

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  Copyright (c) Microsoft Corporation.  All rights reserved.
  4. //
  5. //  File:       d3dx9shader.h
  6. //  Content:    D3DX Shader APIs
  7. //
  8. //////////////////////////////////////////////////////////////////////////////
  9.  
  10. #include "d3dx9.h"
  11.  
  12. #ifndef __D3DX9SHADER_H__
  13. #define __D3DX9SHADER_H__
  14.  
  15.  
  16. //---------------------------------------------------------------------------
  17. // D3DXTX_VERSION:
  18. // --------------
  19. // Version token used to create a procedural texture filler in effects
  20. // Used by D3DXFill[]TX functions
  21. //---------------------------------------------------------------------------
  22. #define D3DXTX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor))
  23.  
  24.  
  25.  
  26. //----------------------------------------------------------------------------
  27. // D3DXSHADER flags:
  28. // -----------------
  29. // D3DXSHADER_DEBUG
  30. //   Insert debug file/line/type/symbol information.
  31. //
  32. // D3DXSHADER_SKIPVALIDATION
  33. //   Do not validate the generated code against known capabilities and
  34. //   constraints.  This option is only recommended when compiling shaders
  35. //   you KNOW will work.  (ie. have compiled before without this option.)
  36. //   Shaders are always validated by D3D before they are set to the device.
  37. //
  38. // D3DXSHADER_SKIPOPTIMIZATION
  39. //   Instructs the compiler to skip optimization steps during code generation.
  40. //   Unless you are trying to isolate a problem in your code using this option
  41. //   is not recommended.
  42. //
  43. // D3DXSHADER_PACKMATRIX_ROWMAJOR
  44. //   Unless explicitly specified, matrices will be packed in row-major order
  45. //   on input and output from the shader.
  46. //
  47. // D3DXSHADER_PACKMATRIX_COLUMNMAJOR
  48. //   Unless explicitly specified, matrices will be packed in column-major
  49. //   order on input and output from the shader.  This is generally more
  50. //   efficient, since it allows vector-matrix multiplication to be performed
  51. //   using a series of dot-products.
  52. //
  53. // D3DXSHADER_PARTIALPRECISION
  54. //   Force all computations in resulting shader to occur at partial precision.
  55. //   This may result in faster evaluation of shaders on some hardware.
  56. //
  57. // D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
  58. //   Force compiler to compile against the next highest available software
  59. //   target for vertex shaders.  This flag also turns optimizations off,
  60. //   and debugging on.  
  61. //
  62. // D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
  63. //   Force compiler to compile against the next highest available software
  64. //   target for pixel shaders.  This flag also turns optimizations off,
  65. //   and debugging on.
  66. //
  67. // D3DXSHADER_NO_PRESHADER
  68. //   Disables Preshaders. Using this flag will cause the compiler to not
  69. //   pull out static expression for evaluation on the host cpu
  70. //
  71. // D3DXSHADER_AVOID_FLOW_CONTROL
  72. //   Hint compiler to avoid flow-control constructs where possible.
  73. //
  74. // D3DXSHADER_PREFER_FLOW_CONTROL
  75. //   Hint compiler to prefer flow-control constructs where possible.
  76. //
  77. //----------------------------------------------------------------------------
  78.  
  79. #define D3DXSHADER_DEBUG                          (1 << 0)
  80. #define D3DXSHADER_SKIPVALIDATION                 (1 << 1)
  81. #define D3DXSHADER_SKIPOPTIMIZATION               (1 << 2)
  82. #define D3DXSHADER_PACKMATRIX_ROWMAJOR            (1 << 3)
  83. #define D3DXSHADER_PACKMATRIX_COLUMNMAJOR         (1 << 4)
  84. #define D3DXSHADER_PARTIALPRECISION               (1 << 5)
  85. #define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT        (1 << 6)
  86. #define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT        (1 << 7)
  87. #define D3DXSHADER_NO_PRESHADER                   (1 << 8)
  88. #define D3DXSHADER_AVOID_FLOW_CONTROL             (1 << 9)
  89. #define D3DXSHADER_PREFER_FLOW_CONTROL            (1 << 10)
  90. #define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY (1 << 12)
  91. #define D3DXSHADER_IEEE_STRICTNESS                (1 << 13)
  92. #define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL        (1 << 16)
  93.  
  94.  
  95. // optimization level flags
  96. #define D3DXSHADER_OPTIMIZATION_LEVEL0            (1 << 14)
  97. #define D3DXSHADER_OPTIMIZATION_LEVEL1            0
  98. #define D3DXSHADER_OPTIMIZATION_LEVEL2            ((1 << 14) | (1 << 15))
  99. #define D3DXSHADER_OPTIMIZATION_LEVEL3            (1 << 15)
  100.  
  101.  
  102.  
  103. //----------------------------------------------------------------------------
  104. // D3DXCONSTTABLE flags:
  105. // -------------------
  106.  
  107. #define D3DXCONSTTABLE_LARGEADDRESSAWARE          (1 << 17)
  108.  
  109.  
  110.  
  111. //----------------------------------------------------------------------------
  112. // D3DXHANDLE:
  113. // -----------
  114. // Handle values used to efficiently reference shader and effect parameters.
  115. // Strings can be used as handles.  However, handles are not always strings.
  116. //----------------------------------------------------------------------------
  117.  
  118. #ifndef D3DXFX_LARGEADDRESS_HANDLE
  119. typedef LPCSTR D3DXHANDLE;
  120. #else
  121. typedef UINT_PTR D3DXHANDLE;
  122. #endif
  123. typedef D3DXHANDLE *LPD3DXHANDLE;
  124.  
  125.  
  126. //----------------------------------------------------------------------------
  127. // D3DXMACRO:
  128. // ----------
  129. // Preprocessor macro definition.  The application pass in a NULL-terminated
  130. // array of this structure to various D3DX APIs.  This enables the application
  131. // to #define tokens at runtime, before the file is parsed.
  132. //----------------------------------------------------------------------------
  133.  
  134. typedef struct _D3DXMACRO
  135. {
  136.     LPCSTR Name;
  137.     LPCSTR Definition;
  138.  
  139. } D3DXMACRO, *LPD3DXMACRO;
  140.  
  141.  
  142. //----------------------------------------------------------------------------
  143. // D3DXSEMANTIC:
  144. //----------------------------------------------------------------------------
  145.  
  146. typedef struct _D3DXSEMANTIC
  147. {
  148.     UINT Usage;
  149.     UINT UsageIndex;
  150.  
  151. } D3DXSEMANTIC, *LPD3DXSEMANTIC;
  152.  
  153.  
  154.  
  155. //----------------------------------------------------------------------------
  156. // D3DXREGISTER_SET:
  157. //----------------------------------------------------------------------------
  158.  
  159. typedef enum _D3DXREGISTER_SET
  160. {
  161.     D3DXRS_BOOL,
  162.     D3DXRS_INT4,
  163.     D3DXRS_FLOAT4,
  164.     D3DXRS_SAMPLER,
  165.  
  166.     // force 32-bit size enum
  167.     D3DXRS_FORCE_DWORD = 0x7fffffff
  168.  
  169. } D3DXREGISTER_SET, *LPD3DXREGISTER_SET;
  170.  
  171.  
  172. //----------------------------------------------------------------------------
  173. // D3DXPARAMETER_CLASS:
  174. //----------------------------------------------------------------------------
  175.  
  176. typedef enum _D3DXPARAMETER_CLASS
  177. {
  178.     D3DXPC_SCALAR,
  179.     D3DXPC_VECTOR,
  180.     D3DXPC_MATRIX_ROWS,
  181.     D3DXPC_MATRIX_COLUMNS,
  182.     D3DXPC_OBJECT,
  183.     D3DXPC_STRUCT,
  184.  
  185.     // force 32-bit size enum
  186.     D3DXPC_FORCE_DWORD = 0x7fffffff
  187.  
  188. } D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS;
  189.  
  190.  
  191. //----------------------------------------------------------------------------
  192. // D3DXPARAMETER_TYPE:
  193. //----------------------------------------------------------------------------
  194.  
  195. typedef enum _D3DXPARAMETER_TYPE
  196. {
  197.     D3DXPT_VOID,
  198.     D3DXPT_BOOL,
  199.     D3DXPT_INT,
  200.     D3DXPT_FLOAT,
  201.     D3DXPT_STRING,
  202.     D3DXPT_TEXTURE,
  203.     D3DXPT_TEXTURE1D,
  204.     D3DXPT_TEXTURE2D,
  205.     D3DXPT_TEXTURE3D,
  206.     D3DXPT_TEXTURECUBE,
  207.     D3DXPT_SAMPLER,
  208.     D3DXPT_SAMPLER1D,
  209.     D3DXPT_SAMPLER2D,
  210.     D3DXPT_SAMPLER3D,
  211.     D3DXPT_SAMPLERCUBE,
  212.     D3DXPT_PIXELSHADER,
  213.     D3DXPT_VERTEXSHADER,
  214.     D3DXPT_PIXELFRAGMENT,
  215.     D3DXPT_VERTEXFRAGMENT,
  216.     D3DXPT_UNSUPPORTED,
  217.  
  218.     // force 32-bit size enum
  219.     D3DXPT_FORCE_DWORD = 0x7fffffff
  220.  
  221. } D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE;
  222.  
  223.  
  224. //----------------------------------------------------------------------------
  225. // D3DXCONSTANTTABLE_DESC:
  226. //----------------------------------------------------------------------------
  227.  
  228. typedef struct _D3DXCONSTANTTABLE_DESC
  229. {
  230.     LPCSTR Creator;                     // Creator string
  231.     DWORD Version;                      // Shader version
  232.     UINT Constants;                     // Number of constants
  233.  
  234. } D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC;
  235.  
  236.  
  237. //----------------------------------------------------------------------------
  238. // D3DXCONSTANT_DESC:
  239. //----------------------------------------------------------------------------
  240.  
  241. typedef struct _D3DXCONSTANT_DESC
  242. {
  243.     LPCSTR Name;                        // Constant name
  244.  
  245.     D3DXREGISTER_SET RegisterSet;       // Register set
  246.     UINT RegisterIndex;                 // Register index
  247.     UINT RegisterCount;                 // Number of registers occupied
  248.  
  249.     D3DXPARAMETER_CLASS Class;          // Class
  250.     D3DXPARAMETER_TYPE Type;            // Component type
  251.  
  252.     UINT Rows;                          // Number of rows
  253.     UINT Columns;                       // Number of columns
  254.     UINT Elements;                      // Number of array elements
  255.     UINT StructMembers;                 // Number of structure member sub-parameters
  256.  
  257.     UINT Bytes;                         // Data size, in bytes
  258.     LPCVOID DefaultValue;               // Pointer to default value
  259.  
  260. } D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC;
  261.  
  262.  
  263.  
  264. //----------------------------------------------------------------------------
  265. // ID3DXConstantTable:
  266. //----------------------------------------------------------------------------
  267.  
  268. typedef interface ID3DXConstantTable ID3DXConstantTable;
  269. typedef interface ID3DXConstantTable *LPD3DXCONSTANTTABLE;
  270.  
  271. // {AB3C758F-093E-4356-B762-4DB18F1B3A01}
  272. DEFINE_GUID(IID_ID3DXConstantTable,
  273. 0xab3c758f, 0x93e, 0x4356, 0xb7, 0x62, 0x4d, 0xb1, 0x8f, 0x1b, 0x3a, 0x1);
  274.  
  275.  
  276. #undef INTERFACE
  277. #define INTERFACE ID3DXConstantTable
  278.  
  279. DECLARE_INTERFACE_(ID3DXConstantTable, IUnknown)
  280. {
  281.     // IUnknown
  282.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  283.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  284.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  285.  
  286.     // Buffer
  287.     STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE;
  288.     STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
  289.  
  290.     // Descs
  291.     STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;
  292.     STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;
  293.     STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE;
  294.  
  295.     // Handle operations
  296.     STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
  297.     STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, LPCSTR pName) PURE;
  298.     STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
  299.  
  300.     // Set Constants
  301.     STDMETHOD(SetDefaults)(THIS_ LPDIRECT3DDEVICE9 pDevice) PURE;
  302.     STDMETHOD(SetValue)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, LPCVOID pData, UINT Bytes) PURE;
  303.     STDMETHOD(SetBool)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, BOOL b) PURE;
  304.     STDMETHOD(SetBoolArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST BOOL* pb, UINT Count) PURE;
  305.     STDMETHOD(SetInt)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, INT n) PURE;
  306.     STDMETHOD(SetIntArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST INT* pn, UINT Count) PURE;
  307.     STDMETHOD(SetFloat)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, FLOAT f) PURE;
  308.     STDMETHOD(SetFloatArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST FLOAT* pf, UINT Count) PURE;
  309.     STDMETHOD(SetVector)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector) PURE;
  310.     STDMETHOD(SetVectorArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
  311.     STDMETHOD(SetMatrix)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE;
  312.     STDMETHOD(SetMatrixArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  313.     STDMETHOD(SetMatrixPointerArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  314.     STDMETHOD(SetMatrixTranspose)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE;
  315.     STDMETHOD(SetMatrixTransposeArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  316.     STDMETHOD(SetMatrixTransposePointerArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  317. };
  318.  
  319.  
  320. //----------------------------------------------------------------------------
  321. // ID3DXTextureShader:
  322. //----------------------------------------------------------------------------
  323.  
  324. typedef interface ID3DXTextureShader ID3DXTextureShader;
  325. typedef interface ID3DXTextureShader *LPD3DXTEXTURESHADER;
  326.  
  327. // {3E3D67F8-AA7A-405d-A857-BA01D4758426}
  328. DEFINE_GUID(IID_ID3DXTextureShader,
  329. 0x3e3d67f8, 0xaa7a, 0x405d, 0xa8, 0x57, 0xba, 0x1, 0xd4, 0x75, 0x84, 0x26);
  330.  
  331. #undef INTERFACE
  332. #define INTERFACE ID3DXTextureShader
  333.  
  334. DECLARE_INTERFACE_(ID3DXTextureShader, IUnknown)
  335. {
  336.     // IUnknown
  337.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  338.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  339.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  340.  
  341.     // Gets
  342.     STDMETHOD(GetFunction)(THIS_ LPD3DXBUFFER *ppFunction) PURE;
  343.     STDMETHOD(GetConstantBuffer)(THIS_ LPD3DXBUFFER *ppConstantBuffer) PURE;
  344.  
  345.     // Descs
  346.     STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;
  347.     STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;
  348.  
  349.     // Handle operations
  350.     STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
  351.     STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, LPCSTR pName) PURE;
  352.     STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
  353.  
  354.     // Set Constants
  355.     STDMETHOD(SetDefaults)(THIS) PURE;
  356.     STDMETHOD(SetValue)(THIS_ D3DXHANDLE hConstant, LPCVOID pData, UINT Bytes) PURE;
  357.     STDMETHOD(SetBool)(THIS_ D3DXHANDLE hConstant, BOOL b) PURE;
  358.     STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hConstant, CONST BOOL* pb, UINT Count) PURE;
  359.     STDMETHOD(SetInt)(THIS_ D3DXHANDLE hConstant, INT n) PURE;
  360.     STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hConstant, CONST INT* pn, UINT Count) PURE;
  361.     STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hConstant, FLOAT f) PURE;
  362.     STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hConstant, CONST FLOAT* pf, UINT Count) PURE;
  363.     STDMETHOD(SetVector)(THIS_ D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector) PURE;
  364.     STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
  365.     STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE;
  366.     STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  367.     STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  368.     STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE;
  369.     STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  370.     STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  371. };
  372.  
  373.  
  374. //----------------------------------------------------------------------------
  375. // D3DXINCLUDE_TYPE:
  376. //----------------------------------------------------------------------------
  377.  
  378. typedef enum _D3DXINCLUDE_TYPE
  379. {
  380.     D3DXINC_LOCAL,
  381.     D3DXINC_SYSTEM,
  382.  
  383.     // force 32-bit size enum
  384.     D3DXINC_FORCE_DWORD = 0x7fffffff
  385.  
  386. } D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE;
  387.  
  388.  
  389. //----------------------------------------------------------------------------
  390. // ID3DXInclude:
  391. // -------------
  392. // This interface is intended to be implemented by the application, and can
  393. // be used by various D3DX APIs.  This enables application-specific handling
  394. // of #include directives in source files.
  395. //
  396. // Open()
  397. //    Opens an include file.  If successful, it should fill in ppData and
  398. //    pBytes.  The data pointer returned must remain valid until Close is
  399. //    subsequently called.  The name of the file is encoded in UTF-8 format.
  400. // Close()
  401. //    Closes an include file.  If Open was successful, Close is guaranteed
  402. //    to be called before the API using this interface returns.
  403. //----------------------------------------------------------------------------
  404.  
  405. typedef interface ID3DXInclude ID3DXInclude;
  406. typedef interface ID3DXInclude *LPD3DXINCLUDE;
  407.  
  408. #undef INTERFACE
  409. #define INTERFACE ID3DXInclude
  410.  
  411. DECLARE_INTERFACE(ID3DXInclude)
  412. {
  413.     STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE;
  414.     STDMETHOD(Close)(THIS_ LPCVOID pData) PURE;
  415. };
  416.  
  417.  
  418. //////////////////////////////////////////////////////////////////////////////
  419. // APIs //////////////////////////////////////////////////////////////////////
  420. //////////////////////////////////////////////////////////////////////////////
  421.  
  422. #ifdef __cplusplus
  423. extern "C" {
  424. #endif //__cplusplus
  425.  
  426.  
  427. //----------------------------------------------------------------------------
  428. // D3DXAssembleShader:
  429. // -------------------
  430. // Assembles a shader.
  431. //
  432. // Parameters:
  433. //  pSrcFile
  434. //      Source file name
  435. //  hSrcModule
  436. //      Module handle. if NULL, current module will be used
  437. //  pSrcResource
  438. //      Resource name in module
  439. //  pSrcData
  440. //      Pointer to source code
  441. //  SrcDataLen
  442. //      Size of source code, in bytes
  443. //  pDefines
  444. //      Optional NULL-terminated array of preprocessor macro definitions.
  445. //  pInclude
  446. //      Optional interface pointer to use for handling #include directives.
  447. //      If this parameter is NULL, #includes will be honored when assembling
  448. //      from file, and will error when assembling from resource or memory.
  449. //  Flags
  450. //      See D3DXSHADER_xxx flags
  451. //  ppShader
  452. //      Returns a buffer containing the created shader.  This buffer contains
  453. //      the assembled shader code, as well as any embedded debug info.
  454. //  ppErrorMsgs
  455. //      Returns a buffer containing a listing of errors and warnings that were
  456. //      encountered during assembly.  If you are running in a debugger,
  457. //      these are the same messages you will see in your debug output.
  458. //----------------------------------------------------------------------------
  459.  
  460.  
  461. HRESULT WINAPI
  462.     D3DXAssembleShaderFromFileA(
  463.         LPCSTR                          pSrcFile,
  464.         CONST D3DXMACRO*                pDefines,
  465.         LPD3DXINCLUDE                   pInclude,
  466.         DWORD                           Flags,
  467.         LPD3DXBUFFER*                   ppShader,
  468.         LPD3DXBUFFER*                   ppErrorMsgs);
  469.  
  470. HRESULT WINAPI
  471.     D3DXAssembleShaderFromFileW(
  472.         LPCWSTR                         pSrcFile,
  473.         CONST D3DXMACRO*                pDefines,
  474.         LPD3DXINCLUDE                   pInclude,
  475.         DWORD                           Flags,
  476.         LPD3DXBUFFER*                   ppShader,
  477.         LPD3DXBUFFER*                   ppErrorMsgs);
  478.  
  479. #ifdef UNICODE
  480. #define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileW
  481. #else
  482. #define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileA
  483. #endif
  484.  
  485.  
  486. HRESULT WINAPI
  487.     D3DXAssembleShaderFromResourceA(
  488.         HMODULE                         hSrcModule,
  489.         LPCSTR                          pSrcResource,
  490.         CONST D3DXMACRO*                pDefines,
  491.         LPD3DXINCLUDE                   pInclude,
  492.         DWORD                           Flags,
  493.         LPD3DXBUFFER*                   ppShader,
  494.         LPD3DXBUFFER*                   ppErrorMsgs);
  495.  
  496. HRESULT WINAPI
  497.     D3DXAssembleShaderFromResourceW(
  498.         HMODULE                         hSrcModule,
  499.         LPCWSTR                         pSrcResource,
  500.         CONST D3DXMACRO*                pDefines,
  501.         LPD3DXINCLUDE                   pInclude,
  502.         DWORD                           Flags,
  503.         LPD3DXBUFFER*                   ppShader,
  504.         LPD3DXBUFFER*                   ppErrorMsgs);
  505.  
  506. #ifdef UNICODE
  507. #define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceW
  508. #else
  509. #define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceA
  510. #endif
  511.  
  512.  
  513. HRESULT WINAPI
  514.     D3DXAssembleShader(
  515.         LPCSTR                          pSrcData,
  516.         UINT                            SrcDataLen,
  517.         CONST D3DXMACRO*                pDefines,
  518.         LPD3DXINCLUDE                   pInclude,
  519.         DWORD                           Flags,
  520.         LPD3DXBUFFER*                   ppShader,
  521.         LPD3DXBUFFER*                   ppErrorMsgs);
  522.  
  523.  
  524.  
  525. //----------------------------------------------------------------------------
  526. // D3DXCompileShader:
  527. // ------------------
  528. // Compiles a shader.
  529. //
  530. // Parameters:
  531. //  pSrcFile
  532. //      Source file name.
  533. //  hSrcModule
  534. //      Module handle. if NULL, current module will be used.
  535. //  pSrcResource
  536. //      Resource name in module.
  537. //  pSrcData
  538. //      Pointer to source code.
  539. //  SrcDataLen
  540. //      Size of source code, in bytes.
  541. //  pDefines
  542. //      Optional NULL-terminated array of preprocessor macro definitions.
  543. //  pInclude
  544. //      Optional interface pointer to use for handling #include directives.
  545. //      If this parameter is NULL, #includes will be honored when compiling
  546. //      from file, and will error when compiling from resource or memory.
  547. //  pFunctionName
  548. //      Name of the entrypoint function where execution should begin.
  549. //  pProfile
  550. //      Instruction set to be used when generating code.  Currently supported
  551. //      profiles are "vs_1_1", "vs_2_0", "vs_2_a", "vs_2_sw", "ps_1_1",
  552. //      "ps_1_2", "ps_1_3", "ps_1_4", "ps_2_0", "ps_2_a", "ps_2_sw", "tx_1_0"
  553. //  Flags
  554. //      See D3DXSHADER_xxx flags.
  555. //  ppShader
  556. //      Returns a buffer containing the created shader.  This buffer contains
  557. //      the compiled shader code, as well as any embedded debug and symbol
  558. //      table info.  (See D3DXGetShaderConstantTable)
  559. //  ppErrorMsgs
  560. //      Returns a buffer containing a listing of errors and warnings that were
  561. //      encountered during the compile.  If you are running in a debugger,
  562. //      these are the same messages you will see in your debug output.
  563. //  ppConstantTable
  564. //      Returns a ID3DXConstantTable object which can be used to set
  565. //      shader constants to the device.  Alternatively, an application can
  566. //      parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within
  567. //      the shader.
  568. //----------------------------------------------------------------------------
  569.  
  570. HRESULT WINAPI
  571.     D3DXCompileShaderFromFileA(
  572.         LPCSTR                          pSrcFile,
  573.         CONST D3DXMACRO*                pDefines,
  574.         LPD3DXINCLUDE                   pInclude,
  575.         LPCSTR                          pFunctionName,
  576.         LPCSTR                          pProfile,
  577.         DWORD                           Flags,
  578.         LPD3DXBUFFER*                   ppShader,
  579.         LPD3DXBUFFER*                   ppErrorMsgs,
  580.         LPD3DXCONSTANTTABLE*            ppConstantTable);
  581.  
  582. HRESULT WINAPI
  583.     D3DXCompileShaderFromFileW(
  584.         LPCWSTR                         pSrcFile,
  585.         CONST D3DXMACRO*                pDefines,
  586.         LPD3DXINCLUDE                   pInclude,
  587.         LPCSTR                          pFunctionName,
  588.         LPCSTR                          pProfile,
  589.         DWORD                           Flags,
  590.         LPD3DXBUFFER*                   ppShader,
  591.         LPD3DXBUFFER*                   ppErrorMsgs,
  592.         LPD3DXCONSTANTTABLE*            ppConstantTable);
  593.  
  594. #ifdef UNICODE
  595. #define D3DXCompileShaderFromFile D3DXCompileShaderFromFileW
  596. #else
  597. #define D3DXCompileShaderFromFile D3DXCompileShaderFromFileA
  598. #endif
  599.  
  600.  
  601. HRESULT WINAPI
  602.     D3DXCompileShaderFromResourceA(
  603.         HMODULE                         hSrcModule,
  604.         LPCSTR                          pSrcResource,
  605.         CONST D3DXMACRO*                pDefines,
  606.         LPD3DXINCLUDE                   pInclude,
  607.         LPCSTR                          pFunctionName,
  608.         LPCSTR                          pProfile,
  609.         DWORD                           Flags,
  610.         LPD3DXBUFFER*                   ppShader,
  611.         LPD3DXBUFFER*                   ppErrorMsgs,
  612.         LPD3DXCONSTANTTABLE*            ppConstantTable);
  613.  
  614. HRESULT WINAPI
  615.     D3DXCompileShaderFromResourceW(
  616.         HMODULE                         hSrcModule,
  617.         LPCWSTR                         pSrcResource,
  618.         CONST D3DXMACRO*                pDefines,
  619.         LPD3DXINCLUDE                   pInclude,
  620.         LPCSTR                          pFunctionName,
  621.         LPCSTR                          pProfile,
  622.         DWORD                           Flags,
  623.         LPD3DXBUFFER*                   ppShader,
  624.         LPD3DXBUFFER*                   ppErrorMsgs,
  625.         LPD3DXCONSTANTTABLE*            ppConstantTable);
  626.  
  627. #ifdef UNICODE
  628. #define D3DXCompileShaderFromResource D3DXCompileShaderFromResourceW
  629. #else
  630. #define D3DXCompileShaderFromResource D3DXCompileShaderFromResourceA
  631. #endif
  632.  
  633.  
  634. HRESULT WINAPI
  635.     D3DXCompileShader(
  636.         LPCSTR                          pSrcData,
  637.         UINT                            SrcDataLen,
  638.         CONST D3DXMACRO*                pDefines,
  639.         LPD3DXINCLUDE                   pInclude,
  640.         LPCSTR                          pFunctionName,
  641.         LPCSTR                          pProfile,
  642.         DWORD                           Flags,
  643.         LPD3DXBUFFER*                   ppShader,
  644.         LPD3DXBUFFER*                   ppErrorMsgs,
  645.         LPD3DXCONSTANTTABLE*            ppConstantTable);
  646.  
  647.  
  648. //----------------------------------------------------------------------------
  649. // D3DXDisassembleShader:
  650. // ----------------------
  651. // Takes a binary shader, and returns a buffer containing text assembly.
  652. //
  653. // Parameters:
  654. //  pShader
  655. //      Pointer to the shader byte code.
  656. //  ShaderSizeInBytes
  657. //      Size of the shader byte code in bytes.
  658. //  EnableColorCode
  659. //      Emit HTML tags for color coding the output?
  660. //  pComments
  661. //      Pointer to a comment string to include at the top of the shader.
  662. //  ppDisassembly
  663. //      Returns a buffer containing the disassembled shader.
  664. //----------------------------------------------------------------------------
  665.  
  666. HRESULT WINAPI
  667.     D3DXDisassembleShader(
  668.         CONST DWORD*                    pShader,
  669.         BOOL                            EnableColorCode,
  670.         LPCSTR                          pComments,
  671.         LPD3DXBUFFER*                   ppDisassembly);
  672.  
  673.  
  674. //----------------------------------------------------------------------------
  675. // D3DXGetPixelShaderProfile/D3DXGetVertexShaderProfile:
  676. // -----------------------------------------------------
  677. // Returns the name of the HLSL profile best suited to a given device.
  678. //
  679. // Parameters:
  680. //  pDevice
  681. //      Pointer to the device in question
  682. //----------------------------------------------------------------------------
  683.  
  684. LPCSTR WINAPI
  685.     D3DXGetPixelShaderProfile(
  686.         LPDIRECT3DDEVICE9               pDevice);
  687.  
  688. LPCSTR WINAPI
  689.     D3DXGetVertexShaderProfile(
  690.         LPDIRECT3DDEVICE9               pDevice);
  691.  
  692.  
  693. //----------------------------------------------------------------------------
  694. // D3DXFindShaderComment:
  695. // ----------------------
  696. // Searches through a shader for a particular comment, denoted by a FourCC in
  697. // the first DWORD of the comment.  If the comment is not found, and no other
  698. // error has occurred, S_FALSE is returned.
  699. //
  700. // Parameters:
  701. //  pFunction
  702. //      Pointer to the function DWORD stream
  703. //  FourCC
  704. //      FourCC used to identify the desired comment block.
  705. //  ppData
  706. //      Returns a pointer to the comment data (not including comment token
  707. //      and FourCC).  Can be NULL.
  708. //  pSizeInBytes
  709. //      Returns the size of the comment data in bytes.  Can be NULL.
  710. //----------------------------------------------------------------------------
  711.  
  712. HRESULT WINAPI
  713.     D3DXFindShaderComment(
  714.         CONST DWORD*                    pFunction,
  715.         DWORD                           FourCC,
  716.         LPCVOID*                        ppData,
  717.         UINT*                           pSizeInBytes);
  718.  
  719.  
  720. //----------------------------------------------------------------------------
  721. // D3DXGetShaderSize:
  722. // ------------------
  723. // Returns the size of the shader byte-code, in bytes.
  724. //
  725. // Parameters:
  726. //  pFunction
  727. //      Pointer to the function DWORD stream
  728. //----------------------------------------------------------------------------
  729.  
  730. UINT WINAPI
  731.     D3DXGetShaderSize(
  732.         CONST DWORD*                    pFunction);
  733.  
  734.  
  735. //----------------------------------------------------------------------------
  736. // D3DXGetShaderVersion:
  737. // -----------------------
  738. // Returns the shader version of a given shader.  Returns zero if the shader
  739. // function is NULL.
  740. //
  741. // Parameters:
  742. //  pFunction
  743. //      Pointer to the function DWORD stream
  744. //----------------------------------------------------------------------------
  745.  
  746. DWORD WINAPI
  747.     D3DXGetShaderVersion(
  748.         CONST DWORD*                    pFunction);
  749.  
  750. //----------------------------------------------------------------------------
  751. // D3DXGetShaderSemantics:
  752. // -----------------------
  753. // Gets semantics for all input elements referenced inside a given shader.
  754. //
  755. // Parameters:
  756. //  pFunction
  757. //      Pointer to the function DWORD stream
  758. //  pSemantics
  759. //      Pointer to an array of D3DXSEMANTIC structures.  The function will
  760. //      fill this array with the semantics for each input element referenced
  761. //      inside the shader.  This array is assumed to contain at least
  762. //      MAXD3DDECLLENGTH elements.
  763. //  pCount
  764. //      Returns the number of elements referenced by the shader
  765. //----------------------------------------------------------------------------
  766.  
  767. HRESULT WINAPI
  768.     D3DXGetShaderInputSemantics(
  769.         CONST DWORD*                    pFunction,
  770.         D3DXSEMANTIC*                   pSemantics,
  771.         UINT*                           pCount);
  772.  
  773. HRESULT WINAPI
  774.     D3DXGetShaderOutputSemantics(
  775.         CONST DWORD*                    pFunction,
  776.         D3DXSEMANTIC*                   pSemantics,
  777.         UINT*                           pCount);
  778.  
  779.  
  780. //----------------------------------------------------------------------------
  781. // D3DXGetShaderSamplers:
  782. // ----------------------
  783. // Gets semantics for all input elements referenced inside a given shader.
  784. //
  785. // pFunction
  786. //      Pointer to the function DWORD stream
  787. // pSamplers
  788. //      Pointer to an array of LPCSTRs.  The function will fill this array
  789. //      with pointers to the sampler names contained within pFunction, for
  790. //      each sampler referenced inside the shader.  This array is assumed to
  791. //      contain at least 16 elements.
  792. // pCount
  793. //      Returns the number of samplers referenced by the shader
  794. //----------------------------------------------------------------------------
  795.  
  796. HRESULT WINAPI
  797.     D3DXGetShaderSamplers(
  798.         CONST DWORD*                    pFunction,
  799.         LPCSTR*                         pSamplers,
  800.         UINT*                           pCount);
  801.  
  802.  
  803. //----------------------------------------------------------------------------
  804. // D3DXGetShaderConstantTable:
  805. // ---------------------------
  806. // Gets shader constant table embedded inside shader.  A constant table is
  807. // generated by D3DXAssembleShader and D3DXCompileShader, and is embedded in
  808. // the body of the shader.
  809. //
  810. // Parameters:
  811. //  pFunction
  812. //      Pointer to the function DWORD stream
  813. //  Flags
  814. //      See D3DXCONSTTABLE_xxx
  815. //  ppConstantTable
  816. //      Returns a ID3DXConstantTable object which can be used to set
  817. //      shader constants to the device.  Alternatively, an application can
  818. //      parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within
  819. //      the shader.
  820. //----------------------------------------------------------------------------
  821.  
  822. HRESULT WINAPI
  823.     D3DXGetShaderConstantTable(
  824.         CONST DWORD*                    pFunction,
  825.         LPD3DXCONSTANTTABLE*            ppConstantTable);
  826.  
  827. HRESULT WINAPI
  828.     D3DXGetShaderConstantTableEx(
  829.         CONST DWORD*                    pFunction,
  830.         DWORD                           Flags,
  831.         LPD3DXCONSTANTTABLE*            ppConstantTable);
  832.  
  833.  
  834.  
  835. //----------------------------------------------------------------------------
  836. // D3DXCreateTextureShader:
  837. // ------------------------
  838. // Creates a texture shader object, given the compiled shader.
  839. //
  840. // Parameters
  841. //  pFunction
  842. //      Pointer to the function DWORD stream
  843. //  ppTextureShader
  844. //      Returns a ID3DXTextureShader object which can be used to procedurally
  845. //      fill the contents of a texture using the D3DXFillTextureTX functions.
  846. //----------------------------------------------------------------------------
  847.  
  848. HRESULT WINAPI
  849.     D3DXCreateTextureShader(
  850.         CONST DWORD*                    pFunction,
  851.         LPD3DXTEXTURESHADER*            ppTextureShader);
  852.  
  853.  
  854. //----------------------------------------------------------------------------
  855. // D3DXPreprocessShader:
  856. // ---------------------
  857. // Runs the preprocessor on the specified shader or effect, but does
  858. // not actually compile it.  This is useful for evaluating the #includes
  859. // and #defines in a shader and then emitting a reformatted token stream
  860. // for debugging purposes or for generating a self-contained shader.
  861. //
  862. // Parameters:
  863. //  pSrcFile
  864. //      Source file name
  865. //  hSrcModule
  866. //      Module handle. if NULL, current module will be used
  867. //  pSrcResource
  868. //      Resource name in module
  869. //  pSrcData
  870. //      Pointer to source code
  871. //  SrcDataLen
  872. //      Size of source code, in bytes
  873. //  pDefines
  874. //      Optional NULL-terminated array of preprocessor macro definitions.
  875. //  pInclude
  876. //      Optional interface pointer to use for handling #include directives.
  877. //      If this parameter is NULL, #includes will be honored when assembling
  878. //      from file, and will error when assembling from resource or memory.
  879. //  ppShaderText
  880. //      Returns a buffer containing a single large string that represents
  881. //      the resulting formatted token stream
  882. //  ppErrorMsgs
  883. //      Returns a buffer containing a listing of errors and warnings that were
  884. //      encountered during assembly.  If you are running in a debugger,
  885. //      these are the same messages you will see in your debug output.
  886. //----------------------------------------------------------------------------
  887.  
  888. HRESULT WINAPI
  889.     D3DXPreprocessShaderFromFileA(
  890.         LPCSTR                       pSrcFile,
  891.         CONST D3DXMACRO*             pDefines,
  892.         LPD3DXINCLUDE                pInclude,
  893.         LPD3DXBUFFER*                ppShaderText,
  894.         LPD3DXBUFFER*                ppErrorMsgs);
  895.                                              
  896. HRESULT WINAPI
  897.     D3DXPreprocessShaderFromFileW(
  898.         LPCWSTR                      pSrcFile,
  899.         CONST D3DXMACRO*             pDefines,
  900.         LPD3DXINCLUDE                pInclude,
  901.         LPD3DXBUFFER*                ppShaderText,
  902.         LPD3DXBUFFER*                ppErrorMsgs);
  903.  
  904. #ifdef UNICODE
  905. #define D3DXPreprocessShaderFromFile D3DXPreprocessShaderFromFileW
  906. #else
  907. #define D3DXPreprocessShaderFromFile D3DXPreprocessShaderFromFileA
  908. #endif
  909.                                              
  910. HRESULT WINAPI
  911.     D3DXPreprocessShaderFromResourceA(
  912.         HMODULE                      hSrcModule,
  913.         LPCSTR                       pSrcResource,
  914.         CONST D3DXMACRO*             pDefines,
  915.         LPD3DXINCLUDE                pInclude,
  916.         LPD3DXBUFFER*                ppShaderText,
  917.         LPD3DXBUFFER*                ppErrorMsgs);
  918.  
  919. HRESULT WINAPI
  920.     D3DXPreprocessShaderFromResourceW(
  921.         HMODULE                      hSrcModule,
  922.         LPCWSTR                      pSrcResource,
  923.         CONST D3DXMACRO*             pDefines,
  924.         LPD3DXINCLUDE                pInclude,
  925.         LPD3DXBUFFER*                ppShaderText,
  926.         LPD3DXBUFFER*                ppErrorMsgs);
  927.  
  928. #ifdef UNICODE
  929. #define D3DXPreprocessShaderFromResource D3DXPreprocessShaderFromResourceW
  930. #else
  931. #define D3DXPreprocessShaderFromResource D3DXPreprocessShaderFromResourceA
  932. #endif
  933.  
  934. HRESULT WINAPI
  935.     D3DXPreprocessShader(
  936.         LPCSTR                       pSrcData,
  937.         UINT                         SrcDataSize,
  938.         CONST D3DXMACRO*             pDefines,
  939.         LPD3DXINCLUDE                pInclude,
  940.         LPD3DXBUFFER*                ppShaderText,
  941.         LPD3DXBUFFER*                ppErrorMsgs);
  942.  
  943.  
  944. #ifdef __cplusplus
  945. }
  946. #endif //__cplusplus
  947.  
  948.  
  949. //////////////////////////////////////////////////////////////////////////////
  950. // Shader comment block layouts //////////////////////////////////////////////
  951. //////////////////////////////////////////////////////////////////////////////
  952.  
  953. //----------------------------------------------------------------------------
  954. // D3DXSHADER_CONSTANTTABLE:
  955. // -------------------------
  956. // Shader constant information; included as an CTAB comment block inside
  957. // shaders.  All offsets are BYTE offsets from start of CONSTANTTABLE struct.
  958. // Entries in the table are sorted by Name in ascending order.
  959. //----------------------------------------------------------------------------
  960.  
  961. typedef struct _D3DXSHADER_CONSTANTTABLE
  962. {
  963.     DWORD Size;             // sizeof(D3DXSHADER_CONSTANTTABLE)
  964.     DWORD Creator;          // LPCSTR offset
  965.     DWORD Version;          // shader version
  966.     DWORD Constants;        // number of constants
  967.     DWORD ConstantInfo;     // D3DXSHADER_CONSTANTINFO[Constants] offset
  968.     DWORD Flags;            // flags shader was compiled with
  969.     DWORD Target;           // LPCSTR offset
  970.  
  971. } D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE;
  972.  
  973.  
  974. typedef struct _D3DXSHADER_CONSTANTINFO
  975. {
  976.     DWORD Name;             // LPCSTR offset
  977.     WORD  RegisterSet;      // D3DXREGISTER_SET
  978.     WORD  RegisterIndex;    // register number
  979.     WORD  RegisterCount;    // number of registers
  980.     WORD  Reserved;         // reserved
  981.     DWORD TypeInfo;         // D3DXSHADER_TYPEINFO offset
  982.     DWORD DefaultValue;     // offset of default value
  983.  
  984. } D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO;
  985.  
  986.  
  987. typedef struct _D3DXSHADER_TYPEINFO
  988. {
  989.     WORD  Class;            // D3DXPARAMETER_CLASS
  990.     WORD  Type;             // D3DXPARAMETER_TYPE
  991.     WORD  Rows;             // number of rows (matrices)
  992.     WORD  Columns;          // number of columns (vectors and matrices)
  993.     WORD  Elements;         // array dimension
  994.     WORD  StructMembers;    // number of struct members
  995.     DWORD StructMemberInfo; // D3DXSHADER_STRUCTMEMBERINFO[Members] offset
  996.  
  997. } D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO;
  998.  
  999.  
  1000. typedef struct _D3DXSHADER_STRUCTMEMBERINFO
  1001. {
  1002.     DWORD Name;             // LPCSTR offset
  1003.     DWORD TypeInfo;         // D3DXSHADER_TYPEINFO offset
  1004.  
  1005. } D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO;
  1006.  
  1007.  
  1008.  
  1009. #endif //__D3DX9SHADER_H__
  1010.  
  1011.